@szopen …pytanie ogólne dotyczące filozofii ESPHome.
Ten projekt.yaml jest potrzebny tylko do kompilacji wsadu czy również do integracji z HA?
Chodzi o to (bo było w którymś wątku) czy posiadając uruchomiony już wcześniej device bez tego .yaml zintegrować i z nim dogadać, czy jest to nierozłączna para ESPHome<>HA ?
YAML jest kodem, na podstawie którego generowany jest typowy kod źródłowy (c++) i finalnie firmware.
Natomiast do Integracji nie potrzeba niczego - tj. zintegruje się urządzenie “wyprodukowane” nawet przez kogoś innego (byleby było skompilowane z dyrektywą api:
).
Na tej samej zasadzie możesz użyć gotowe czyjeś wsady binarne, byleby się sprzęt zgadzał ze skompilowaną konfiguracją.
ALE
Nie mając kodu źródłowego, a już w szczególności właśnie źródłowego YAML’a nie jesteś w stanie wykonać aktualizacji firmware (HA się dość radykalnie zmienia, więc ESPHome musi też za tym podążać).
Po to wprowadzono możliwość wkompilowania nagłówków umożliwiających import YAMLa ze zdalnego repozytorium do IDE ESPHome podczas tzw. Adopcji urządzenia do Instalacji (jest to jeden z opcjonalnych elementów integrowania).
W takim stanie po Adopcji masz w dashboardzie ESPHome automatycznie zaimportowany taki “mini YAML” zawierający nagłówek definiujący sprzęt oraz dyrektywę include zdalnego kodu na repo (dzięki temu oryginalny autor może wprowadzać ulepszenia to urządzeń będących już w użyciu, a Ty jako użytkownik możesz wykonać tylko kompilację i Update).
Z tej ostatniej opcji korzystają takie powszechnie używane projekty jak
-
umożliwiający na wstępie wgranie “pustego” wsadu ESPHome, do jego dalszej obróbki z już wstępnie funkcjonującym modułem
https://web.esphome.io/ -
https://github.com/esphome/bluetooth-proxies/
fork specjalnie dla GL-S10 z hardware v. 1.x
https://github.com/blakadder/bluetooth-proxies -
czy EMP
ESPHome Media Players
Możesz nawet z kilku HA odpytywać to samo jedno urządzenie z ESPHome, musisz tylko znać dane dostępowe do API ESPHome. W ESPHome możesz tworzyć automatyzacje niezależne od HA, w telegraficznym skrócie ESPHome możesz traktować jako niezależny sterownik z własną logiką, taki “mini mini PLC” a nieograniczone możliwości pojawia się przy integracji/współpracy z HA, i to w obie strony.
No w tym wypadku jednak nie każde, proste urządzenia tak, ale np. bramka proxy BLE (EBP) już nie.
Zainstalowałem ESPHome w dokerze, wypadałoby choć zobaczyć z czym to się je aby mieć własne zdanie.
Z tego co napisaliście to po zaprogramowaniu modułu rozumiem, że ten doker mogę wyłączyć?
Tak możesz wyłączyć, nie jest do działania potrzebny, na EspHome wchodzisz po IP jeśli taki dostęp skonfigurowałeś i widzisz co tam sobie zaprogramowałeś. Doker potrzebny jest do ewentualnych zmian jak dokładasz nowe czujniki lub coś zmieniasz i na nowo kompilujesz.
Wracając do tematu, udało mi się rozwiązać problem używając switch template.
switch:
platform: template
name: "Otwórz klape"
on_turn_on:
- switch.turn_on: relay1
lambda: |-
if ((id(temp_wew).state - id(temp_zew).state) > 1) {
return true;
} else {
return false;
}
turn_on_action:
- switch.turn_on: relay1
turn_off_action:
- switch.turn_off: relay1
W takiej postaci to działa zgodnie z oczekiwaniami.
macek - turn_ on_action z tego co rozumiem z dokumentacji to wywołane żądania przełączenia przekaźnika w tym wypadku relay1 z poziomu interfejsu HA dlatego musiałem dodać on_turn_on: aby to zagrało, bo mimo spełnienia warunku z temperaturami przekaźniki nie reagowały, dopiero po dodaniu on_turn_on:
Na tą chwilę temat uważam za rozwiązany.
Dzięki wszystkim za pomoc i sugestię.
Sorry za pisownie
Masz rację, opisane jest to w dokumentacji (Switch Component — ESPHome):
P.S. Znówu wiem więcej o ESPHome .
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
Witam Wszystkich. Dopiero zaczynam z HA i Esphome. Chciałbym na bazie esp32 zrobić sterowanie podgrzewaniem wody - HIT PIPE. moze ktos podrzucił by działający kod w yamal na termostat różnicowy. Niestety niemam wiedzy, nie jestem programistą i nie ogarnę tego tematu od zera. Dzięki
Cześć
Teraz nie mam możliwości ale jak poczekasz do jutra to podeślę Ci kod jak ja
mam zroniony termostat różnicowy.
Witam
Ja mam zrobiony termostat różnicowy na ESP32 który steruje pompą solarną. Oprócz tego steruje jeszcze 3 innymi pompami - pompą co, cwu i podłogówką. Czujniki temperatury to DS18B20. W kolektorach zostawiłem stary czujnik NTC. Oprócz pomp są jeszcze LED-y sygnalizujące stan pracy pomp i tryby pracy auto i manual i jeszcze kilka innych rzeczy. Cała logika sterowania jest w ESP. Wyświetlanie danych i ustawienia mam zrobione na dodatkowym wyświetlaczu z Raspberry który pobiera dane z HA. Od 3 miesięcy działa bardzo dobrze.
Jak chcesz mogę wrzucić kod to może coś sobie dopasujesz. Ostatecznie jest zrobiony trochę inaczej niż to co zamieszczałem wcześniej.
Karta z grafiką jeszcze nie skończona
Czujnik temperatury co aktualnie jest chwilowo odpięty dlatego nie pokazuje temperatury.
Cześć,
Dzięki za odpowiedź. Super to zrobiłeś, widać że mnóstwo czasu włożyłeś w swój projekt. Bardzo chętnie skorzystam z Twojej uprzejmości i materiałów.
Mój projekt na początek zakłada sterowanie pompą obiegową solarów z wykorzystaniem ESP32 i 2 x ds18b20 ( na obecną chwilę steruję nią z wykorzystaniem zwykłego termostatu.
nie wiedziałem wcześniej że do solarów wymagane jest sterowanie termostatem różnicowym )
Tak więc poproszę o kod twojego projektu. Mam nadzieję że mój zapał wystarczy do przerobienia twojej pracy na moje potrzeby, bo niestety wiedzę mam jeszcze za małą.
jeszcze raz dzięki, jestem pod wrażeniem Twojej pracy.
Spróbuję wrzucić wieczorem, bo teraz nie mam dostępu do komputera a z telefonu nie bardzo da radę.
Jeśli dopiero zaczynasz i chciałbyś na początek mniej rozbudowany termostat to można zrobić na różne sposoby. Wykorzystując binar_sensor template albo sensor_template (zakomentowany fragment kodu). Histereza ustawiona na sztywno, lub zmieniać z poziomu frontendu HA dodając number_template:
Wtedy zamiast stałej histerezy np:" >= 3" wstawiasz " >= id(histereza).state ":
number:
- platform: template
name: "Histereza"
icon: mdi:thermometer-chevron-up
unit_of_measurement: °C
optimistic: true
restore_value: false
min_value: 1
max_value: 10
initial_value: 5
step: 0.5
id: histereza
Możesz zrobić osobną histerezę dla włączenia i wyłączenia pompy dodając kolejny number_template zmnienijąc oczywiście id.
Możesz dołożyć prosty mały wyświetlacz.
captive_portal:
i2c:
frequency: 400kHz
dallas:
- pin: D3
id: temp_1
update_interval: 30s
- pin: D4
id: temp_2
update_interval: 30s
sensor:
- platform: wifi_signal
name: "WiFi Jacuzzi db"
id: wifi_signal_db
update_interval: 60s
entity_category: "diagnostic"
- platform: dallas
address: 0x9a6077c50264ff28
dallas_id: temp_1
id: temp_solar
name: "Solar"
- platform: dallas
address: 0x938591c50264ff28
dallas_id: temp_2
id: temp_jacuzzi
name: "Jacuzzi"
#- platform: template
# name: "Delta"
#accuracy_decimals: 2
#update_interval: 10s
#device_class: temperature
#unit_of_measurement: °C
#id: delta
#lambda: |-
# return id(temp_solar).state - id(temp_jacuzzi).state;
#on_value:
# then:
#- if:
# condition:
# lambda: |-
# return id(delta).state >= 3;
#then:
#- switch.turn_on: relay1
#else:
#- if:
# condition:
# lambda: |-
# return id(delta).state <= 1.5;
#then:
#- switch.turn_off: relay1
binary_sensor:
- platform: template
name: "Delta on"
lambda: |-
if ((id(temp_solar).state - id(temp_jacuzzi).state) >= 3) {
return true;
} else {
return false;
}
on_press:
then:
- switch.turn_on: relay1
- platform: template
name: "Delta off"
lambda: |-
if ((id(temp_solar).state - id(temp_jacuzzi).state) <= 1.5) {
return true;
} else {
return false;
}
on_press:
then:
- switch.turn_off: relay1
switch:
- platform: gpio
pin: D8
restore_mode : ALWAYS_OFF
inverted: false
id: relay1
name: "Pompa"
icon: "mdi:pump"
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
reset_pin: D0
address: 0x3C
lambda: |-
it.print(0, 0, id(font1), "POMPA :");
if (id(relay1).state) {
it.printf(80, 0, id(font1), "ON");
} else {
it.printf(80, 0, id(font1), "OFF");
}
if (id(temp_solar).has_state()) {
it.printf(0, 17, id(font2), "Solar: %.1f°C", id(temp_solar).state);
}
if (id(temp_jacuzzi).has_state()) {
it.printf(0, 39, id(font2), "Jacu: %.1f°C", id(temp_jacuzzi).state);
}
font:
- file: "fonts/arial.ttf"
id: font1
size: 17
- file: "fonts/comici.ttf"
id: font2
size: 19
Różnica pomiędzy sensor_template a binary_sensor_template jest taka, że we frontendzie HA dla sensor_template bedziesz widział wartość w °C ( czyli wynik odejmowania temp_1- temp_2) natomiast binar_sensor_template zwraca prawdę/fałsz czyli bedzięsz widział czy warunek z if -a został spełniony.
Powodzenia
@mariohome już sporo wyjaśnił w poprzednim poście odnośnie sposobu jak można taki termostat zrobić.
Ja w swoim wykorzystuję template sensor, który jest różnicą temperatury solarów i cwu.
Jeśli faktycznie dopiero zaczynasz z ESPHome to też polecam zacząć od prostych rzeczy. Miałem wkleić cały kod do ESP ale na początek wkleję tylko część dotyczącą termostatu różnicowego - cały kod ma ponad 900 linijek i pewnie nie będziesz wiedział co do czego.
Polecam robić to etapami, bo jak wrzucisz od razu cały kod to zapewne coś nie będzie działało albo się nie skompiluje a Ty nie będziesz wiedział dlaczego coś nie działa. Uruchom najpierw np. czujniki temperatury, potem dodaj przekaźnik a potem dodawaj automatyzację do tego.
Ja mam jeszcze zrobione 3 tryby pracy pompy:
- auto - pompa działa zależnie od temperatury
- manual - pompa jest sterowana ręcznie i nie reaguje na zmianę temperatury
- tryb wakacje - w tym trybie po zachodzie słońca pompa schładza CWU przez solary gdy nie ma nikogo w domu i nie ma poboru ciepłej wody a temperatura CWU jest wysoka.
Mam też osobą histerezę do włączenia i wyłączenia pompy ustawianą w HA. W ESP jest warunek, że nie można ustawić histerezy włączenia mniejszej od histerezy wyłączenia i odwrotnie- histereza wyłączenia nie może być większa od histerezy włączenia a różnica pomiędzy nimi musi wynosić co najmniej jeden stopień. Temperatura do jakiej ma schładzać w trybie wakacje również jest ustawiana.
Kod zawiera komponenty które wykorzystuje logika termostatu solary plus led trybu pracy.
Sensor temperatury solarów zakomentowałem bo jest przykładowy- ja mam czujnik NTC więc kod jest całkiem inny. Ty będziesz miał zapewne DS18B20 więc musisz sobie utworzyć analogicznie do tych podanych oczywiście z adresami swoich czujników.
esphome:
name: kotlownia
comment: ESP-32 sterowanie solary co i cwu
preferences:
flash_write_interval: 60min
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
level: DEBUG
# Enable Home Assistant API
api:
encryption:
key: "94aTXlxTwfc4L+pMBFONOwg4FdoPNQR85Og+Dzu5E6A="
ota:
password: "172f20f73359638583b7b0d95a363039"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.100.148
gateway: 192.168.100.1
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Kotlownia Fallback Hotspot"
password: !secret wifi_password
captive_portal:
web_server:
port: 80
text_sensor:
- platform: sun
name: Wschód słońca
type: sunrise
- platform: sun
name: Zachód słońca
type: sunset
sun:
latitude: 49.888688°
longitude: 22.280658°
switch:
# przekaznik pompy solar
- platform: gpio
pin: 4
inverted: false
name: pompa solar
icon: mdi:pump
id: pompa_solar
restore_mode: ALWAYS_OFF
dallas:
- pin: GPIO13
sensor:
# temperatura bojlera góra
- platform: dallas
address: 0xd13c3ef648f4ee28
name: "Temperatura CWU"
unit_of_measurement: "°C"
device_class: "temperature"
accuracy_decimals: 1
id: Tcwu
filters:
- heartbeat: 60s
# temperatura bojlera dół
- platform: dallas
address: 0x503c0bf64831f528
name: "Temperatura CWU_2"
unit_of_measurement: "°C"
device_class: "temperature"
accuracy_decimals: 1
id: Tcwu_2
filters:
- heartbeat: 60s
# # temperatura solary
# - platform: dallas
# address: 0x503c0bf64831f528
# name: "Temperatura solary"
# unit_of_measurement: "°C"
# device_class: "temperature"
# accuracy_decimals: 1
# id: Tsolar
# filters:
# - heartbeat: 60s
# różnica Tsolar - Tcwu_2
- platform: template
name: "Delta Tsolar-Tcwu_2"
accuracy_decimals: 1
update_interval: 60s
device_class: temperature
unit_of_measurement: °C
filters:
- heartbeat: 60s
id: delta
lambda: |-
return id(Tsolar).state - id(Tcwu_2).state;
on_value:
- if: # automatyzacja pompy solar tryb auto
condition:
lambda: |-
return id(tryb_solar).state == "auto";
then:
- if:
condition:
- sun.is_above_horizon:
then:
- if:
condition:
lambda: |-
return (id(delta).state > id(histereza_on).state && id(Tsolar).state > id(Tcwu).state);
then:
- switch.turn_on: pompa_solar
- if:
condition:
lambda: |-
return id(delta).state < id(histereza_off).state;
then:
- switch.turn_off: pompa_solar
- if:
condition:
- sun.is_below_horizon:
then:
- switch.turn_off: pompa_solar
- if: # automatyzacja pompy solar tryb wakacje
condition:
lambda: |-
return id(tryb_solar).state == "wakacje";
then:
- if:
condition:
- sun.is_above_horizon:
then:
- if:
condition:
lambda: |-
return id(delta).state > id(histereza_on).state;
then:
- switch.turn_on: pompa_solar
- if:
condition:
lambda: |-
return id(delta).state < id(histereza_off).state;
then:
- switch.turn_off: pompa_solar
else:
- if:
condition:
- sun.is_below_horizon:
then:
- if:
condition:
lambda: |-
return id(Tcwu).state > id(temp_wakacje).state;
then:
- switch.turn_on: pompa_solar
else:
- switch.turn_off: pompa_solar
number:
# histereza załączenia pompy solar
- platform: template
name: "Histereza on solar"
icon: mdi:thermometer-chevron-up
unit_of_measurement: °C
optimistic: true
restore_value: true
initial_value: 10
mode: auto
min_value: 2
max_value: 15
step: 1
id: histereza_on
on_value:
then:
- if:
condition:
lambda: |-
return (x - id(histereza_off).state) < 1;
then:
- number.set:
id: histereza_off
value: !lambda |-
return x - 1;
# histereza wyłączenia pompy solar
- platform: template
name: "Histereza off solar"
icon: mdi:thermometer-chevron-down
unit_of_measurement: °C
optimistic: true
restore_value: true
initial_value: 5
mode: auto
min_value: 1
max_value: 10
step: 1
id: histereza_off
on_value:
then:
- if:
condition:
lambda: |-
return (id(histereza_on).state - x) < 1;
then:
- number.set:
id: histereza_on
value: !lambda |-
return x + 1;
# temperatura chłodzenia w trybie wakacje
- platform: template
name: Temperatura chłodzenia CWU
icon: mdi:thermometer-lines
unit_of_measurement: °C
optimistic: true
mode: auto
restore_value: true
min_value: 40
max_value: 60
initial_value: 50
step: 5
id: temp_wakacje
light:
# LED stanu manual-auto solar
- platform: monochromatic
id: LED_solar
restore_mode: ALWAYS_OFF
output: solar_ledc
effects:
- pulse:
name: Fast Pulse
transition_length: 0.3s
update_interval: 0.3s
- pulse:
name: Slow Pulse
transition_length: 1s
update_interval: 1s
output:
- platform: ledc
id: solar_ledc
pin:
number: GPIO26
inverted: true
select:
# tryb pompy solar
- platform: template
name: tryb solar
id: tryb_solar
optimistic: true
options:
- "auto"
- "manual"
- "wakacje"
initial_option: "auto"
on_value:
then:
- if:
condition:
lambda: 'return x == "manual";'
then:
- light.turn_on:
id: LED_solar
effect: Fast Pulse
- if:
condition:
lambda: 'return x == "wakacje";'
then:
- light.turn_on:
id: LED_solar
effect: Slow Pulse
- if:
condition:
lambda: 'return x == "auto";'
then:
- light.turn_off:
id: LED_solar
Witam Panowie, Wielkie dzięki za wsparcie. Wykorzystałem kod @mariohome ponieważ jakoś go ogarnąłem - działa bezawaryjnie.
jak moja wiedza będzie większa to napewno skorzystam z kodu kolegi @zaktom . Narazie jestem za cienki w d…e, i nie potrafię go posklejać.
Sypie mi błędami w ESPHome. Bardzo podoba mi się tryb wakacyjny, narazie sprawdziłem ręcznie i faktycznie można w łatwy sposób wychłodzić zasobnik nie zrzucając wody do kanalizacji - nigdy wcześniej nie spotkałem się z takim rozwiązaniem. jak ogarnę co i jak to wrócę do tematu
jeszcze raz dziękuję za pomoc.
Jak będziesz miał pytania odnośnie tego co i jak jest zrobione u mnie to śmiało pisz. Postaram się wyjaśnić na miarę moich możliwości. Ja sam też troszkę czasu nad tym spędziłem, mając do dyspozycji dokumentację ESPHome i jakieś przykłady z internetu. Ale głównie to było pisanie kodu i testowanie jak to działa. Dużo się przez to nauczyłem.
Witam , planuje zmodernizować moje ogrzewanie z 2 stref do 8.
Zwykłe termostaty grzejnikowe wymienię na zawory termoelektryczne.
Termometr w każdej strefie bthome + btproxy.
Sterowniki zaworów 2 sztuki 4 kanałowe najlepiej zigbee.
Pewnie wszystkiego ( harmonogram , termostaty , sterowanie 2 pompami co , cwu i cyrkulacji ) nie uda się załatwić jednym esphome .
Chciałbym uniknąć niestandardowych dodatków które w kolejnych wydaniach HA przestaną działać , ale to co się nie uda w esphome dodam w nodered .
Proszę o sugestię odnośnie kierunku działania.
Uproszczony schemat instalacji jaką posiadam:
Cześć, przy pompie ciepła jest zasada, każdy stopień mniej, większa sprawność i mniejsze żużycie.
Twoja instalacja jest tego przeciwieństwem i jeśli coś przerabiać, to raczej sam sposób sterowania.
Temat dotyczy termostatu, więc nie będę się rowijał, zapytam tylko, po co zawory mieszajace w każdej strefie grzejników ? Zamiast tego lepiej grzać bufor według krzywej grzewczej i wpuszczać w instalację bez obniżania mieszaczami. Oczywiście do tego trzeba zmienić sposób grzania CWU , jak wężownica jest za mała, to można połączyć dwie w szereg i grzać cały zasobnik.