Files
esphome/projector_3.yaml

216 lines
5.9 KiB
YAML

substitutions:
duct_fan_pin: GPIO14
duct_fan_spd_name: Prj3 Duct Fan Speed
duct_fan_target_spd_in_name: Prj3 Duct Fan Target Speed In
duct_fan_target_spd_prj_name: Prj3 Duct Fan Target Speed Prj
duct_fan_target_spd_out_name: Prj3 Duct Fan Target Speed Out
duct_fan_pwmfreq: 5000Hz
duct_fan_off_spd: "0.0"
duct_fan_lo_spd: "1.0"
duct_fan_vent_spd: "50.0"
duct_fan_hi_spd: "100.0"
prjpwr_pin: GPIO19
prjpwr_name: Prj3 Pwr
dallas_pin: GPIO32
dallas_in_addr: "0x1F3C01D0756F0928"
dallas_in_name: Prj3 Temp In
dallas_prj_addr: "0x873C01D0756D4B28"
dallas_prj_name: Prj3 Temp Prj
dallas_out_addr: "0xA901143295610E28"
dallas_out_name: Prj3 Temp Out
dallas_update_interval: 30s
globals:
- id: duct_fan_off_spd
type: float
initial_value: ${duct_fan_off_spd}
- id: duct_fan_lo_spd
type: float
initial_value: ${duct_fan_lo_spd}
- id: duct_fan_vent_spd
type: float
initial_value: ${duct_fan_vent_spd}
- id: duct_fan_hi_spd
type: float
initial_value: ${duct_fan_hi_spd}
esphome:
name: prj3
platform: ESP32
board: esp32doit-devkit-v1
wifi:
ssid: "kungle-oss"
password: "hcfU8@gG&8Hm"
fast_connect: true
manual_ip:
static_ip: 192.168.35.192
gateway: 192.168.35.1
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Prj3 Fallback Hotspot"
password: "xfPfYSP3N0C3"
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
switch:
- platform: template
name: Thermostat On
id: thermostat_on_id
optimistic: true
output:
- platform: ledc
pin: ${duct_fan_pin}
id: duct_fan_output_id
frequency: ${duct_fan_pwmfreq}
fan:
- platform: speed
id: duct_fan_spd_id
output: duct_fan_output_id
name: ${duct_fan_spd_name}
dallas:
- pin:
number: ${dallas_pin}
mode: INPUT_PULLUP
update_interval: ${dallas_update_interval}
sensor:
- platform: dallas
address: ${dallas_in_addr}
name: ${dallas_in_name}
id: dallas_in_id
- platform: dallas
address: ${dallas_prj_addr}
name: ${dallas_prj_name}
id: dallas_prj_id
- platform: dallas
address: ${dallas_out_addr}
name: ${dallas_out_name}
id: dallas_out_id
binary_sensor:
- platform: gpio
pin: ${prjpwr_pin}
name: ${prjpwr_name}
device_class: power
- platform: homeassistant
name: "Ventilate House"
entity_id: input_boolean.ventilate_house
id: ventilate_house
number:
- platform: template
id: duct_fan_target_spd_in
name: ${duct_fan_target_spd_in_name}
optimistic: true
min_value: ${duct_fan_lo_spd}
max_value: ${duct_fan_hi_spd}
step: 1
- platform: template
id: duct_fan_target_spd_prj
name: ${duct_fan_target_spd_prj_name}
min_value: ${duct_fan_off_spd}
max_value: ${duct_fan_hi_spd}
step: 1
set_action:
then:
lambda: |-
float lo_temp;
float hi_temp;
float curtemp;
float off_spd;
float lo_spd;
float vent_spd;
float hi_spd;
float newspd;
lo_temp = id(thermostat_prj_id).target_temperature_low;
hi_temp = id(thermostat_prj_id).target_temperature_high;
curtemp = id(dallas_prj_id).state;
off_spd = id(duct_fan_off_spd);
lo_spd = id(duct_fan_lo_spd);
vent_spd = id(duct_fan_vent_spd);
hi_spd = id(duct_fan_hi_spd);
ESP_LOGD("fan_speed", "DEBUG Ventilate House: %d", id(ventilate_house).state);
ESP_LOGD("fan_speed", "DEBUG Current Temp: %f", curtemp);
ESP_LOGD("fan_speed", "DEBUG Thermostat State: %d", id(thermostat_on_id).state);
if ((id(ventilate_house).state == false) &&
((curtemp < lo_temp) || (id(thermostat_on_id).state == false))) {
ESP_LOGD("fan_speed", "DEBUG turning off");
auto call = id(duct_fan_spd_id).turn_off();
call.perform();
return off_spd;
}
if (curtemp > hi_temp) {
ESP_LOGD("fan_speed", "DEBUG curtemp > hi_temp");
newspd = hi_spd;
} else {
// Set newspd to same linear proportion of spd range as current temp is of temp range
newspd = lo_spd + ((hi_spd - lo_spd) * (curtemp - lo_temp) / (hi_temp - lo_temp));
ESP_LOGD("fan_speed", "DEBUG New Speed set: %f", newspd);
}
if ((id(ventilate_house).state == true) && (newspd < vent_spd)) {
newspd = vent_spd;
ESP_LOGD("fan_speed", "DEBUG New Speed changed to Vent Speed: %f", newspd);
}
if (newspd < lo_spd) {
ESP_LOGD("fan_speed", "DEBUG New Speed under lo_spd, turning off");
auto call = id(duct_fan_spd_id).turn_off();
call.perform();
return off_spd;
}
ESP_LOGD("fan_speed", "DEBUG Setting fan to newspd: %f", newspd);
auto call = id(duct_fan_spd_id).turn_on();
call.set_speed(newspd);
call.perform();
return newspd;
- platform: template
id: duct_fan_target_spd_out
name: ${duct_fan_target_spd_out_name}
optimistic: true
min_value: ${duct_fan_off_spd}
max_value: ${duct_fan_hi_spd}
step: 1
# Dual-point thermostat
climate:
- platform: thermostat
id: thermostat_prj_id
name: Prj3 Prj
sensor: dallas_prj_id
visual:
min_temperature: 60 °F
max_temperature: 160 °F
temperature_step: 1
default_mode: auto
default_target_temperature_low: 78 °F
default_target_temperature_high: 160 °F
min_cooling_off_time: 60s
min_cooling_run_time: 60s
min_heating_off_time: 60s
min_heating_run_time: 60s
min_idle_time: 60s
heat_action:
- logger.log: "Turning off Prj3 Thermostat"
- switch.turn_off: thermostat_on_id
idle_action:
- logger.log: "Turning on Prj3 Thermostat"
- switch.turn_on: thermostat_on_id
cool_action:
- logger.log: "WARNING: Prj3 Thermostat has hit high temp!"
- switch.turn_on: thermostat_on_id
#TODO - provide some kind of warning / action here