OpenTherm i realizacja sterowania pogodowego

Słownik:

DH/DHW/CWU - Domestic Hot Water - Ciepła woda użytkowa
CH/CO - Central Heating - Centralne Ogrzewanie

TLDR:

Długo i nudno na temat bramek OpenTherm z NodoShop oraz DiyLess.

“Fachowcy” nie przewidzieli, że ogrzewaniem trzeba sterować - zero kabli pod sterowanie ogrzewaniem w całym domu. Pierwszy rok to była swego rodzaju męczarnia - pierw ustawienie temperatur na pętlach na parterze by grzały równomiernie, później ustawienie pętli na piętrze - z obniżonymi temperaturami w sypialni itp. Udało mi się uzyskać zadane temperatury za pomocą regulacji przepływu w pętlach:

  • 21,5*C - salon, kuchnia i pomieszczenia używane w dzień
  • 20*C - dla sypialni i pokoi na piętrze
  • 23*C - dla łazienek

I w sumie wszystko było pięknie do momentu gdy temperatura na dworze zaczęła się zmieniać - nagle w domu robiło się za zimno, ręcznie ustawiałem temperaturę na piecu na wyższą po czym gdy temperatura zewnętrzna rosła to leciałem i obniżałem temperaturę na piecu - nie za fajnie. O ile przebywam 90-95% zimy w domu to nie zależało mi na zmianach temperatury kilka razy dziennie, dodatkowo bezwładność podłogówki robi swoje.

Informacje ogólne:

Pacjent: Brotje Heizung PWHS - jednofunkcyjny piec gazowy z protokołem OpenTherm z podłączonym zasobnikiem wody sterowanym z pieca.
Ogrzewanie: podłogowe
Moduł wifi: Wemos D1 mini
Czujniki temperatury: Aqara Temperature and Humidity sensor - WSDCGQ11LM - jeden w salonie, drugi na dworze (albo polu - jak kto woli).

Jak się zachowuje mój piec?

Przyjmijmy, że mam na piecu ustawioną temperaturę 22* C, piec na wyjściu na rozdzielacz wypuszcza wodę o temperaturze 22* C, jeśli temperatura po oddaniu ciepła jest niższa niż 22* C to piec dogrzewa wodę do tej temperatury i pcha ją spowrotem na rozdzielacz - w takim przypadku by ogrzać wodę o kilka stopni więcej piec potrafi podkręcić temperaturę do 25-27*C by chwilowo zniwelować spadek temperatury w obiegu. Nie wiem czy wszystkie piece się tak zachowują, ale sądzę, że może mieć to wpływ na dalsze testy i zabawy z ogrzewaniem.

DiyLess

Info ogólne:

Bramkę testowałem z kilkoma integracjami, m. in. ESPHome, Tasmota, Customowe integracje z diyless.com itp. Ostatecznie pozostałem przez 2 tygodnie z tasmotą i MQTT i w niej wykonałem sterowanie ogrzewaniem.

Jakie opcje były dostępne (tasmota):

  • włączenie i wyłączanie CH
  • włączanie i wyłączanie DHW
  • ustawianie temperatury (setpoint) dla CH
  • ustawianie temperatury dla DHW
  • trochę opcji diagnostycznych - ale nie będę się nad nimi wszystkimi rozwodził, ponieważ prócz zgłaszania kodów błędów są to raczej informacjie orientacyjne

Opis dostępnych komend tu: OpenTherm - Tasmota

Jakie problemy napotkałem:

  1. Zakresy ciepłej wody - tasmota przyjmuje, że ogrzewanie to kaloryfery przez co jest problem z ustawieniem temperatur dla zakresów poniżej 40*C jak pamiętam - wymaga to kilku zmian w kodzie podczas kompilacji wsadu do tasmota. Ogólnie bez kompilacji się nie obejdzie ponieważ tasmota domyślnie moduł OpenTherm ma wyłączony. Komenda ot_save_setpoints nie działa bez powyższej zmiany. Domyślne ustawienia tasmota:
40 <= tboiler <= 85 - dla CH/CO
23 <= twater <= 55 - dla DHW/CWU

Można to nadpisać ustawiając w pliku user_config_override.h poniższe wartości:

#define OT_HOT_WATER_MIN 23
#define OT_HOT_WATER_MAX 55
#define OT_BOILER_MIN 20
#define OT_BOILER_MAX 40

#define OT_HOT_WATER_DEFAULT 45
#define OT_BOILER_DEFAULT 23

Ustawienie wartości innych niż zdefiniowane w tasmota będzie niemożliwe.

  1. Tasmota nie ma pełnego wsparcia dla ustawień (w porównaniu z bramką z nodoshop)
  2. Wszystkie dane z pieca serwowane są kodami OT - chwilę mi zajęło znalezienie znaczenia każdego z kodów - jak by ktoś szukał to informacje na ten temat dostępne są w komentarzach w repo tasmota: LINK

Realizacja “inteligentnego” ogrzewania:

  1. W Node Red zrobiłem kalkulator do wyliczania temperatury pieca w zależności od temperatury wewnętrznej i zewnętrznej - testowałem go przez około tydzień przy zmiennych temperaturach i zachowywał się wzorowo - temperatura zadana 22* C, temperatura w pomieszczeniu między 21,4 - 22 (sądzę, że gdyby nie psy, które sobie same drzwi potrafią otwierać i nie zawsze to odrazu zauważę to wahnięcie było by mniejsze. Funkcja licząca, której użyłem na końcu.
  2. Wielkiej filozofii tu nie było - co minutę pobranie danych z czujników temperatury zewnętrznej i wewnętrznej i ustawienie temperatury na piecu przy pomocy wyżej wspomnianych komend i MQTT.
  3. Flow w NodeRed dodatkowo miał kilka zabezpieczeń, które warto przemyśleć, tj:
  • brak odczytów temperatury zewnętrznej przez godzinę - użyj temperatury z AccuWeather (akurat podczas testów i gwałtownym spadku temperatury zewnętrznej bateria wyzionęła ducha)
  • maksymalna temperatura dopuszczalna do ustawienia na piecu - u mnie przy jednolitym ogrzewaniu podłogowym nigdy w życiu raczej nie będę potrzebował temperatury większej niż 30* C tak więc domyślne zabezpieczenie pieca na 90C średnio mnie interesuje - dla swojego bezpieczeństwa ustawiłem temperaturę 35 C (niższą niż pozwoliłem w ustawieniach tasmota).

Opentherm Gateway z NodoShop

Info ogólne:

Bramka testowana z OTGW-Firmware w trybie Gateway. Tu jest dużo ciekawiej ponieważ bramka pozwala dodatkowo na podpięcie zewnętrznego termostatu pokojowego i pozwala na wysyłanie danych do termostatu - więc zakres ustawień jest dużo większy.

Jakie opcje były dostępne:

  • reset bramki
  • wymuszenie stanu CH/CO - wł/wył
  • ustawienie zegara bramki
  • ustawienie temperatury CH (setpoint)
  • gpio mode - tego nie tykałem
  • wymuszenie stanu DHW/CWU - wł/wył
  • ustawienie temperatury DHW (setpoint)
  • ustawianie LED - więcej tu: LINK - pobawiłem się, ale póki co nie ustawiałem tam żadnych czarów
  • ustawianie maksymalnej modulacji - ze względu, iż uważam, że piec ustawia sobie to w miarę zgrabnie - nie dotykałem tej opcji
  • ustawianie temperatury zewnętrznej - dla termostatu
  • temperatura setback - nie tykałem

Jakie problemy napotkałem:

  1. domyślnie integracja OTGW ma wszystkie encje wyłączone - trzeba je sobie włączyć manualnie i później wyłączyć te, których nie potrzebujemy
  2. Update z poziomu menu Wemos D1 i OTGW-FW potrafi uceglić PIC w płytce i trzeba go ogrywać zewnętrznym programatorem (tych na szczęście różnych mam 2 szuflady).
  3. Wysłanie komendy do ustawienia temperatury CH/CO jest wymagane częściej niż raz na 30 sekund. Brak podania temperatury automatycznie przełącza setpoint na “0” i wyłącza CH.
  4. Wciąż nie udało mi się znaleźć rozwiązania na tzw. “failover” w tej bramce - w momencie padu routera lub home-assistanta i braku mnie w domu zgodnie z punktem 3 bramka ustawi status na 0 i wychłodzi dom.

Realizacja “Inteligentnego ogrzewania”:

Tu bez większych zmian - użyłem tego samego flow co dla bramki diyless zastępując nody tasmota mqtt nodami call service z domeną opentherm_gw i odpowiednią funkcją.
Widać, że bramka OTGW sama z siebie jest “inteligentniejsza” - lepiej radzi sobie z obsługą tego pseudopieca :wink:

Funkcje użyte we flow:

1. Obliczanie krzywej grzewczej.

  1. Ustawiamy piec na stałą temperaturę (optymalnie by było aby na dworzu nie występowały zbyt duże zmiany temperatury przez dłuższy czas, choć to zależy od bezwładności ogrzewania). Odczekujemy aby odczyty były jak najbardziej stałe.
  2. Odczytujemy w danym momencie parametry takie jak:
  • temperatura zasilania (Tz)
  • temperatura wewnętrzna (Ti)
  • temperatura zewnętrzna (To)
  1. Liczymy współczynnik krzywej grzewczej ze wzoru:
dT1 = Tz - Ti
dT2 = Ti - To
HC = dT1 / dT2

W moim przypadku wyszło 0,16 ale wynik zaokrąglamy do 1 miejsca po przecinku więc przyjąłem 0,2.

  1. dane wejściowe dla funkcji:
    Przy każdej zmiennej podałem jakie dane używam u siebie - oczywiście te dane będą zmienne w zależności od stanu domu, jego energii cieplnej itp.
  • desired_temp (temperatura jaką chcę mieć w pomieszczeniu gdzie używam wewnętrznego termometru) = 22
  • slope (współczynnik krzywej grzewczej) = 0,2
  • factor (współczynnik wypłaszczenia liniowej krzywej grzewczej - trzeba go dobrać wg. swojego doświadczenia wyliczając temperatury dla +5, 0, -10 itp. - mniej skokowa zmiana temperatury dla zadanej krzywej grzewczej) = 7
  • external_temp (temperatura zewnętrzna)
  • setpoint (temperatura jaką piec ma ustawić przy 0 stopni na zewnątrz i factor = 0, realnie przy dobrym doborze factor ta temperatura powinna wynosić mniej więcej tyle ile piec osiągnie przy -30* C) = 33
  1. Funkcja JS, której używam
function calculateCurve(desired_temp, slope, factor, external_temp, setpoint) {
   return Math.round(desired_temp + (desired_temp - external_temp) * (setpoint - desired_temp) / (desired_temp + factor / slope));
}

Podsumowanie

Na pewno z bramką OTGW od NodoShop wykonanie sterowania pogodowego pieca jest dużo prostsze niż przy użyciu bramki diyless. Oba urządzenia realizują to samo i bez problemu na obu udało mi się zrealizować założenia. Z drugiej strony bramka diyless jest bardziej odporna na problemy niż ta z nodoshop - wkompilowane w soft domyślne setopinty w razie awarii HA lub routera bez problemu utrzymają temperaturę w domu.

PS

Zaraz ktoś zarzuci, że nie przemyślałem kwestii wyłączania CH przy pomocy termostatu pokojowego. Przy sterowaniu pogodowym sądzę, że nie ma takiej potrzeby - piec wykrywający niski spadek temperatury na powrocie wody nie zaczyna sam z siebie grzać tej wody, jak wspomina autor projektu OpenTherm Gateway, sterowanie za pomocą włączenia/wyłączenia CH może się sensownie odbywać tylko przy ogrzewaniu z bardzo małą bezwładnością a termostaty super producentów “ponoć” to magicznie liczą :wink:
Prawda jest taka, że w większości domów jakie widziałem są wstawione proste termostaty odcinające grzanie pieca po osiągnięciu zadanej temperatury - więc liczenia jest tam wielkie zero :wink:

5 polubień

Świetne opracowanie!
Co do sprzętu z diyless to skorzystałeś z bramki czy z pojedynczej płytki wpinanej do kotła?

Ogólnie diyless w momencie gdy kupowałem od nich shield to miał do wyboru tylko master i slave opentherm shield i własny termostat bazujący na ww. Ja używałem wersji master shielda z Wemos D1 Mini. Niestety nie miałem opcji testować typowego “gateway” od nich, ale z tego co widzę to jest to po prostu master + slave + wemos d1 mini spięte razem.
W moim przypadku nie mam termostatu kablowego więc nie widziałem sensu zakupu całości i testowania modułu slave, tak samo przy drugim gateway od Nodoshop nie używałem wejścia na termostat pokojowy, więc ciężko mi się wypowiedzieć. Wszystko zależy od Twojej instalacji i wymagań.

Taka ciekawostka. Aktualnie trwają prace nad custom component który jest połączeniem sterowania pogodowego + PID. Stabilność regulacji temperatury +/- 0.1C. Komunikacja przez opentherm

Ja kupiłem gateway, bo mam już istniejacy sterownik do pieca, który chce pozostawić jednocześnie zależy mi na integracji z HA. Niestety wyłożyłem sie na oprogramowaniu tego gatewaya…

Przykładowy soft z diyless.com do tego gatewaya zupełnie omija HA. NAtomiast próba dodania do termostatu elementu Slave też, póki co nie zakończyła sie sukcesem. Ma może ktoś pomysł jak to rozgryźć?

custom component do czego i jak ma być sterowany? Wiesz PID w takim wypadku musiał by realizować analizę historii przy bezwładności podłogówki - inaczej się nie da niestety by zrobić to z dokładnością 0.1*C.

No do HA, będzie dostępny w HACS. Baza jest krzywa grzewcza. PID jest tylko dopełnieniem. Można wzmocnienia PID ustawić na 0 i jest tylko pogodówka. Przy grzejnikach sprawdza sie bardzo dobrze.

OK bo myślę czy u siebie do sterowania podłogowego bym go podpiął - tam mam w teorii osobne termostaty wirtualne.

Plan jest na obsługę wielu termostatów, ale zasadniczo komponent sterują nastawą temperatury zasilania kotła. Zaprojektowany pod bramkę
z nodo-shop

No to jak dojdą jak to zrealizować to chętnie zobaczę jak to wymyślili. Sterowanie kotłem to jedno a sterowanie osobnymi zaworami to drugie. Nie mówię, że nie jest do zrealizowania bo jakoś tam u siebie to rozwiązałem i w porównaniu z sterowaniem u osoby znajomej radzi sobie to lepiej niż rozwiązanie firmowe u niego. Komponent pewnie będzie fajną alternatywą dla tego co tu mam więc na pewno go przetestuję.

Sterowania zaworami nie będzie. To jest zbyt szeroki temat choćby z powodu różnych rozwiązań technicznych. Wiele termostatów na zasadzie uwzględniania temperatur zadanych.

Witam, będę realizował ogrzewanie oparte na sterowniku techa i-2 plus [ Sterowniki do Instalacji - i-2 PLUS - TECH Sterowniki ]

Ta listwa ma OpenTherm oraz dodatkowe wyjścia do sterowania, np. pompą cyrkulacyjną. Czy przy użyciu bramki z nodoshop będzie możliwość sterowania tymi wyjściami czy raczej nie?

Dzięki za pomoc.

@rm-rf - czy możesz podsumować swoje doświadczenia po dłuższym czasie? Interesuje mnie czy pozostałeś przy Tasmota i czy jesteś kontent ze swojego rozwiązania? Czy coś wymaga poprawy w stosunku do pierwszego opisu? Kusi mnie wyciśnięcie większej sprawności z mojej instalacji ogrzewania, a układ mam bardzo podobny do Twojego.

Siema.
Kolega tu opisał Opentherm Gateway z NodoShop a ja poczyniłem ten “błąd” ze zakupiłem DiyLess Opentherm Gateway gdzie jak szukałem to albo znajdowałem soft na slava(odczyt od sterownika) albo na mastera(zarządzanie piecem), a podstawą było aby dołożyć klocek smart bez naruszania standardowego działania programatora. Poniżej kod jaki udało mi się przerobić na bazie rsciriano/ESPHome-OpenTherm, minusem jest brak implementacji sterowania parametrami, natomiast dlatego jest to gateway bo i tak główny sterownik nadal jest odpowiedzialny za zarządzanie a ja podsłuchuje.

sakrut/ESPHome-OpenTherm-Gateway: Example of how to control an opentherm boiler with esphome (github.com)

2 polubienia

Udało się dodać sterowaniem zadanej temperatury i wyeliminować błąd blokowania grzania wody.
Jedyne co jeśli piec ma krzywą grzewczą to mimo puby ustawienia temperatury zostanie nadpisana przez piec (chodzi o temperaturę grzania).
Natomiast temperatura CWU zostanie nadpisana jeśli chce się ustawić np 80 a piec obsługuje max 55

Cześć
Trochę późno ale zajęty mocno byłem. Po dłuższym czasie jestem zadowolony - wszystko działa bezobsługowo i mam sterownie ogrzewania pomieszczeń niezależnie - ogólnie polecam

1 polubienie

Witam wszystkich jako nowy użytkownik i mam pytanie jeśli możesz…
Też jestem na etapie montowania czujników pokojowych i mimo że projekt skończyłem a jeszcze nie założyłem już mi po głowie chodzi jak to jeszcze udoskonalić :thinking: . Przeczytałem ten temat i to co opisywałeś było oparte o czujnik temperatury zewnętrznej. Jak zorganizowałeś czujniki pokojowe? Tak w ogólnym zarysie. Jak termostaty komunikują się z kotłem? Chodzi mi o komunikację. WiFi? i rozumiem że przy kotle masz jakiś moduł komunikujący się protokołem OpenTherm z kotłem tak?

W jaki ostatecznie sposób sterujesz ogrzewaniem - wykorzystujesz swoją krzywą grzewczą + termostaty w pokojach?

Ostatecznie używasz bramki z diyless czy nodoshop?
Co będzie lepsze do kotla mam tylko sterownik on/off?

Termostatów typowych nie mam - wszystkie dane z pokojów czytane są z xiaomi po zigbee i wrzucane do HA. Reszta jest kalkulowana w node-red i w zależności od temperatury wewnętrznej/zewnętrznej jest realizowana krzywa grzewcza, która włącza/wyłącza piec. Obwody są otwierane na podstawie wirtualnych termostatów bazujących na temperaturze pomieszczenia.