Podepnę się do tematu bo też robię nowe sterowanie w kotłowni. A właściwie to na razie próbuję pisać kod na ESP i testuję różne warianty. Założenie jest takie że cała automatyzacja ma być na ESP bez udziału HA czy Nod-Red. W HA tylko wizualizacja stanu, przełączniki i odczyt z czujników. Na razie zrobiłem sterowanie pompą solarną i pompą co. Początkowo termostat różnicowy do pompy solarnej zrobiłem inpirując się powyższym przykładem ale ostatecznie zrobiłem to inaczej. Ponieważ wyzwalaczem jest tutaj temperatura , a dokładnie różnica temperatur to zrobiłem template sensor który wylicza różnicę temperatur solarów i zasobnika CWU i automatyka sterowania pompy jest w sekcji tego sensora. Dodatkowo chciałem różne temperatury włączenia i wyłączenia pompy ustawiane osobno w zdefiniowanych zakresach. To jest zrobione jako dwa template number Histereza on i Histereza off. I tu kombinuję jak stworzyć warunek, żeby uzależnić te dwie dane od siebie, to znaczy żeby nie dało się ustawić temperatury włączenia niższej od temperatury wyłączenia i odwrotnie - temperatury wyłączenia wyższej niż temperatura włączenia oraz różnica pomiędzy nimi wynosiła minimum 1 stopień. Może ktoś bardziej doświadczony w programowaniu pomógłby taki warunek napisać. Najprościej byłoby zrobić różne zakresy temperatur żeby nie zachodziły na siebie ale wtedy ogranicza się znacznie zakres regulacji.
Sterowanie pompy co jest prostsze, bo tam jest tylko włączenie pompy powyżej ustawionej temperatury a wyłączenie poniżej tej temperatury pomniejszonej o 2 stopnie.
Dodatkowo mam zrobiony tryb manualny w którym pompy nie reagują na temperaturę i mogę je wtedy włączyć lub wyłączyć zarówno przyciskiem fizycznym jak i z HA. Do tego jakieś LED do sygnalizacji trybu pracy. Na razie wgrane do testowej płytki i po pierwszych testach wydaje się działać zgodnie z założeniami. Temperatury do testów na razie podbieram z HA, bo mam je zrobione na innym ESP. Nie mam jeszcze czujnika temperatury na kolektorach solarnych więc do testów za czujnik solarów robi czujnik pieca co. Docelowo wszystkie czujniki i całe sterowanie będą w tym nowym ESP.
Wklejam swój kod na razie mocno testowy
Wszystkie sugestie mile widziane.
esphome:
name: solar
comment: sterowanie solary co i cwu
platform: ESP8266
board: nodemcuv2
esp8266_restore_from_flash: true
preferences:
flash_write_interval: 10min
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "JNgPirktslJ/djgwkPiMh4nfd6G71TDLEYorkUz0MpA="
ota:
password: "5468669933b1163d2f8e2d0eabb0abd4"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.100.89
gateway: 192.168.100.1
subnet: 255.255.255.0
power_save_mode: none
output_power: 15
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Solar Fallback Hotspot"
password: "yh1wKr9S0PvI"
captive_portal:
web_server:
port: 80
text_sensor:
- platform: wifi_info
ip_address:
name: "solar IP Address"
id: esp_ip
ssid:
name: "solar WIFI SSID"
id: esp_ssid
mac_address:
name: "solar MAC Address"
id: esp_mac
binary_sensor:
#przycisk manual auto solar
- platform: gpio
pin:
number: GPIO13
mode:
input: true
pullup: true
inverted: true
name: "manual solar"
id: manual_solar
filters:
- delayed_on: 10ms
- delayed_off: 10ms
on_press:
then:
- switch.toggle: manual_auto_solar
#przycisk manual auto co
- platform: gpio
pin:
number: GPIO0
mode:
input: true
pullup: true
inverted: true
name: "manual co"
id: manual_co
filters:
- delayed_on: 10ms
- delayed_off: 10ms
on_press:
then:
- if:
condition:
switch.is_on: manual_auto_co
then:
- switch.toggle: pompa_co
on_click:
- min_length: 1000ms
max_length: 20000ms
then:
- switch.toggle: manual_auto_co
switch:
- platform: gpio #przekaznik pompy solar
pin: 2
inverted: true
name: pompa solar
icon: mdi:pump
id: solar
restore_mode: ALWAYS_OFF
- platform: gpio #przekaznik pompy co
pin: 3
inverted: false
name: pompa co
icon: mdi:pump
id: pompa_co
restore_mode: ALWAYS_OFF
- platform: template # wirtual switch tryb manual solar
id: manual_auto_solar
name: tryb manual solar
icon: mdi:gesture-tap
optimistic: true
on_turn_on:
- switch.turn_on: solar
- light.turn_on:
id: LED_solar
effect: flash
on_turn_off:
- switch.turn_off: solar
- light.turn_off:
id: LED_solar
- platform: template # wirtual switch tryb manual co
id: manual_auto_co
name: tryb manual co
icon: mdi:gesture-tap
optimistic: true
on_turn_on:
- switch.turn_off: pompa_co
- light.turn_on:
id: LED_co
effect: flash
on_turn_off:
- switch.turn_off: pompa_co
- light.turn_off:
id: LED_co
sensor:
- platform: homeassistant
name: "Temperatura piec"
entity_id: sensor.temp_piec
icon: "mdi:water-percent"
device_class: "temperature"
state_class: "measurement"
id: T1
on_value:
then:
- if:
condition:
switch.is_off: manual_auto_co
then:
- if:
condition:
lambda: |-
return id(T1).state > id(temperatura_co_on).state;
then:
- switch.turn_on: pompa_co
- if:
condition:
lambda: |-
return id(T1).state < (id(temperatura_co_on).state-2);
then:
- switch.turn_off: pompa_co
- platform: homeassistant
name: "Temperatura CWU"
entity_id: sensor.czujnik_cwu
id: T2
- platform: template
name: "Delta T1-T2" # różnica T1 - T2
accuracy_decimals: 2
update_interval: 60s
device_class: temperature
unit_of_measurement: °C
id: delta
lambda: |-
return id(T1).state - id(T2).state;
on_value:
then:
- if:
condition:
switch.is_off: manual_auto_solar
then:
- if:
condition:
lambda: |-
return id(delta).state > id(histereza_on).state;
then:
- switch.turn_on: solar
- if:
condition:
lambda: |-
return id(delta).state < id(histereza_off).state;
then:
- switch.turn_off: solar
number:
- platform: template #histereza załączenia pompy solar
name: "Histereza on"
icon: mdi:thermometer-chevron-up
unit_of_measurement: °C
optimistic: true
restore_value: true
min_value: 2
max_value: 15
initial_value: 5
step: 1
id: histereza_on
- platform: template #histereza wyłączenia pompy solar
name: "Histereza off"
icon: mdi:thermometer-chevron-down
unit_of_measurement: °C
optimistic: true
restore_value: true
min_value: 1
max_value: 10
initial_value: 3
step: 1
id: histereza_off
- platform: template #temperatura włączenia pompy co
name: Temperatura CO on
icon: mdi:thermometer-lines
unit_of_measurement: °C
optimistic: true
restore_value: true
min_value: 30
max_value: 50
initial_value: 35
step: 1
id: temperatura_co_on
light:
# LED stanu manual-auto solar
- platform: monochromatic
id: LED_solar
output: d5_light_pwm
effects:
- pulse:
name: flash
transition_length: 0.5s
update_interval: 0.5s
# LED stanu manual-auto co
- platform: monochromatic
id: LED_co
output: d6_light_pwm
effects:
- pulse:
name: flash
transition_length: 0.5s
update_interval: 0.5s
output:
- platform: esp8266_pwm
id: d5_light_pwm
pin:
number: D5
inverted: false
- platform: esp8266_pwm
id: d6_light_pwm
pin:
number: D6
inverted: false
A to co widać w HA