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:

4 Likes