Add ventilate house toggle to fans.

This commit is contained in:
2022-01-21 08:07:22 -08:00
parent 8f6b651b83
commit 670cf98fdc
3 changed files with 104 additions and 21 deletions

View File

@@ -3,15 +3,14 @@ substitutions:
duct_fan_name: R2 Duct Fan Spd
duct_fan_tgt_spd_in_name: R2 DF Tgt Spd In
duct_fan_tgt_spd_out_name: R2 DF Tgt Spd Out
# duct_fan_channel: "0"
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"
wall_fan_pwr_pin: GPIO21
wall_fan_pwr_name: Rack 2 Wall Fan Power
wall_fan_spd_pin: GPIO22
# wall_fan_spd_channel: "2"
wall_fan_spd_pwmfreq: 25000Hz
wall_fan_spd_name: Rack 2 Wall Fan Speed
wall_fan_tach_pin: GPIO23
@@ -31,6 +30,9 @@ globals:
- 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}
@@ -119,6 +121,12 @@ sensor:
name: ${dallas_out_name}
id: dallas_out_id
binary_sensor:
- platform: homeassistant
name: "Ventilate House"
entity_id: input_boolean.ventilate_house
id: ventilate_house
number:
- platform: template
id: duct_fan_tgt_spd_in
@@ -141,6 +149,7 @@ number:
float curtemp;
float off_spd;
float lo_spd;
float vent_spd;
float hi_spd;
float newspd;
lo_temp = id(thermostat_out_id).target_temperature_low;
@@ -148,18 +157,37 @@ number:
curtemp = id(dallas_out_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);
if ((curtemp < lo_temp) || (id(thermostat_on_id).state == false)) {
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();