Skip to content
Snippets Groups Projects
Commit 8a73b474 authored by Jan Grewe's avatar Jan Grewe
Browse files

switch fan_control from power socket to PWM

parent b92a4093
Branches
No related tags found
No related merge requests found
......@@ -7,6 +7,7 @@ Home Grow(n) Monitoring
* propbox: ESP32 Propagator Controller
* BME280 Temperature and Humidity Sensor (3.3V, I2C)
* Dallas DS18B20 Temperature Sensor
* YYAC-3S Triac (5V, PWM)
* propbox-light: Nous A1T Smart Plug for Light
* propbox-fan: Nous A1T Smart Plug for Fan
* growbox: ESP32 Grow Tent Monitor
......
......@@ -10,13 +10,17 @@ output:
fan:
- platform: speed
output: fan_dimmer
name: "Extraction Fan"
id: fan_extraction
name: "Fan"
prometheus:
relabel:
propbox_fan:
fan_extraction:
id: fan
name: Fan
propbox_fan:
id: power_fan
name: "Power Fan"
sensor:
- platform: template
......@@ -62,14 +66,14 @@ select:
- platform: template
id: temperature_min
name: "Fan: Temperature Off"
options: ["15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"]
options: ["16", "17", "18", "19", "20", "21", "22", "23", "24", "25"]
initial_option: "21"
optimistic: true
restore_value: true
- platform: template
id: humidity_max
name: "Fan: Humidity On"
options: ["40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90"]
options: ["40", "45", "50", "55", "60", "65", "70", "75", "80", "85"]
initial_option: "70"
optimistic: true
restore_value: true
......@@ -83,15 +87,16 @@ select:
- platform: template
id: humidity_min
name: "Fan: Humidity Off"
options: ["25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "80"]
options: ["30", "35", "40", "45", "50", "55", "60", "65", "70", "80"]
initial_option: "40"
optimistic: true
restore_value: true
switch:
- platform: template
id: propbox_fan
name: "Status: Fan"
name: "Power: Fan"
optimistic: true
turn_on_action:
- http_request.post: http://${hostname_fan}/switch/power/turn_on
......@@ -110,37 +115,43 @@ script:
// Normal On:
// switch fan on when either temperature or humidity is above "max", unless humidity/temperature is below "min"
if (
!id(propbox_fan).state &&
!id(fan_extraction).state &&
(
(id(bme280_temperature).state >= atoi(id(temperature_max).state.c_str()) && id(bme280_humidity).state >= atoi(id(humidity_min).state.c_str())) ||
(id(bme280_humidity).state >= atoi(id(humidity_max).state.c_str()) && id(bme280_temperature).state >= atoi(id(temperature_min).state.c_str()))
)
) {
id(propbox_fan).turn_on();
ESP_LOGI("fan", "Fan On");
auto call = id(fan_extraction).turn_on();
call.perform();
}
// Forced Off, ignoring Hysteresis:
// switch fan off when either temperature or humidity are below "min", unless humidity/temperature is above "max"
else if (
id(propbox_fan).state &&
id(fan_extraction).state &&
(
(id(bme280_temperature).state <= atoi(id(temperature_min).state.c_str()) && id(bme280_humidity).state <= atoi(id(humidity_max).state.c_str())) ||
(id(bme280_humidity).state <= atoi(id(humidity_min).state.c_str()) && id(bme280_temperature).state <= atoi(id(temperature_max).state.c_str()))
)
) {
id(propbox_fan).turn_off();
ESP_LOGI("fan", "Fan Off (forced)");
auto call = id(fan_extraction).turn_off();
call.perform();
}
// Normal Off, respecting Hysteresis:
// switch fan off when both temperature and humidity are below "max minus hysteresis"
else if (
id(propbox_fan).state &&
id(fan_extraction).state &&
(
id(bme280_temperature).state <= atoi(id(temperature_max).state.c_str()) - atoi(id(temperature_hysteresis).state.c_str()) &&
id(bme280_humidity).state <= atoi(id(humidity_max).state.c_str()) - atoi(id(humidity_hysteresis).state.c_str())
)
) {
id(propbox_fan).turn_off();
ESP_LOGI("fan", "Fan Off");
auto call = id(fan_extraction).turn_off();
call.perform();
}
- id: fan_state
then:
......@@ -155,4 +166,3 @@ script:
}
id(propbox_fan).publish_state(state);
http.end();
\ No newline at end of file
......@@ -8,8 +8,8 @@ substitutions:
prometheus:
relabel:
propbox_light:
id: light
name: Light
id: power_light
name: "Power Light"
sensor:
- platform: template
......@@ -29,7 +29,7 @@ select:
switch:
- platform: template
id: propbox_light
name: "Status: Light"
name: "Power: Light"
optimistic: true
turn_on_action:
- http_request.post: http://${hostname_light}/switch/power/turn_on
......
......@@ -9,6 +9,14 @@ substitutions:
# Overrides
bme280_script: "fan_control"
esphome:
on_boot:
priority: -200
then:
- lambda: |-
id(fan_state).execute();
id(light_state).execute();
packages:
base: !include packages/base.yaml
esp32: !include packages/esp32.yaml
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment