A 2022-ben megvalósított keringető vezérlés utóélete, tuningja és némi áttekintés a jelenlegi állapotról. Részletesebb infókért (szükséges kütyük, bekötés, stb.) érdemes a korábbi bejegyzést elolvasni.
Régi kazán, okos vezérlés by Pixlr AI
A rendszer lényege maradt, különböző bemenetek alapján egy kis ESP8266 mikrovezérlő dönt a keringetés bekapcsolásáról, időtartamáról. A paraméterek webes felületen változtathatók, de így két év után már nem is emlékszem, mikor kellett változtatni.
A hardverről bővebben: ez rövid lesz, minden maradt. A szivattyút SSR relé kapcsolja, nem tud beégni. Az áramszünetek ritkák, de előfordulnak. Tervben van egy akkus ápgréd, 12 VDC ólom akku, erre kell egy kis inverter a szivattyú masszív 35-45 W terhelésére, meg egy jó minőségű step-down konverter az ESP-t táplálni. Opcionálisan AC hálózat figyelése, de megfelelő akku méretnél ez hanyagolható. Prio listán egészen hátul van, így ennél alaposabban még nem foglalkoztam ezzel a fejlesztéssel.
Szoftver: na itt nagy csodák történtek... De előbb pár szóban még az ESPeasy keretrendszerről. Valamikor 2022 szeptember környékén volt telepítve, azóta OTA frissítem, amikor eszembe jut...
Most közel egy évet kellett áthidalni, ez legalább 5 kihagyott firmware-t jelent. Mivel van backup, meg másik Wemos, így a release notes olvasása nélkül ráeresztettem az újat...
Minden frissült és működik, jött rengeteg új funkció a programba. Le a kalappal az ESPEasy készítői előtt
Rules, ami "hajcsa": az utolsó nagyobb frissítés a szivattyúvédelem hozzáadása volt. Az adatokat MQTT-n küldte a Home Assistant okosotthon rendszerbe, az csak feldolgozta az adatokat, más beleszólása nem volt. Ezen is akartam változtatni, de a rules korlátai is elgondolkodtattak, hogy mit kellene a Home Assistantra bízni, anélkül, hogy a fűtés autonómiája csökkenjen.
Több feladat is volt, lássuk sorban:
1. Szellőztetés:
Az ESPeasy MQTT parancsokat is tud fogadni. A command topikot egy "dummy device MQTT import" olvassa, számokat csak, de több nem is kell. Egyelőre egy bejegyzés van a négy lehetségesből használatban: Szellőztetés. Ha a lakást szellőztetjük, akkor azt jelzi a fűtésnek és ilyenkor nem indítja el a keringetést. Erről gombnyomásra a kijelzőn is megjelenik egy üzenet.
Fontos volt, hogy az MQTT bróker vagy az okosotthon kiesése ne okozzon fennakadást. A command nélkül a változó értéke 0, vagyis ha valami nem működik, akkor a meglévő többi paraméter alapján dönti el a Wemos D1 mini, hogy kell-e keringetést kapcsolni.
Igen, ha már Okosotthon, akkor vehettem volna egy okos termosztátot, vagy lehetne virtuális termosztát. Ez egyszerűen nem adna jelet fűtésre, ha az ablakok nyiva vannak. Jogos. Keresgéltem, de a feltételeimnek megfelelő termosztátok (zigbee, vezeték nélküli) vagy rondák, vagy drágák, vagy nem jókat írnak róluk. Másik érvem, hogy így sokféle utasítást tudok az ESP-nek küldeni, ez egy jó gyakorlás volt a továbbiakra. Fali kijelző folyamatban (kicsit fúrni kellene egy dobozig a falban, de karácsonykor ezt nem merem ), szerintem ott lesz majd egy szép termosztát a tablet kijelzőn, kész.
2. Túlfűtés védelem:
Már a kezdeti verzióban is volt védelem arra az esetre, ha "megszaladna" a kazán és túl meleg lenne a víz a pufferben. Nem fordult még elő, vannak más biztonsági berendezések is, de ettől még ezt fontosnak tartom. Néhány sorral hosszabb program, ami megelőzhet/késleltethet nagyobb problémákat.
Az okos termosztátfejek felszerelésével előállhat olyan helyzet, hogy a keringetéssel hűteném a rendszert, de ezek a radiátorok kiesnek (kb. a radik fele). Ez nem segíti, hogy gyorsan a biztonságos tartományba hűtsem a rendszert. Megoldás: erről is küld infót az okosotthonnak, ami ilyenkor kinyit minden vezérelhető radiátorszelepet. Ez gyorsítja a hűtést és kvázi mellékhatásként megfőz minket -de nem robban fel.
3. Szabályok (rules) mérete:
2000 karakter, ennyibe kell elférni. Nem egyszerű. Első lépés volt a szabályok offline szerkesztése, majd a kommentek nélküli feltöltése. Ezzel lett több verzióm, amikhez vissza tudok térni, ha valami esetleg nem sikerül. Következő lépés volt a beszédes nevek rövidítése, pl. heating_on helyett hon, temp_min helyett tmin és így tovább.
Kommentekben jeleztem, hogy hol lehet még spórolni karakterekkel. Egyelőre erre nincs szükség, de ha valaki hasonló limitbe fut, akkor érdemes a neveken elgondolkodni, minél rövidebbre venni.
Végül az MQTT-n küldött adatokat is megváltoztattam, a korábban a Home Assistantban használt bináris szenzorok (keringetés, szünet, figyelés, túlfűtés) egy szenzorba lettek összevonva. Erre két este ráment, mert mindennel próbálkoztam, csak szenzorral nem. Valamiért úgy gondoltam, hogy a szenzorok csak számot tartalmazhatnak, de szerencsére nem így van. Az új szenzor "Fűtés állapot" értékét kell csak átküldeni a rules-ból, jelentősen csökkentve a méretet és az okosotthonban azt is látom így, hogy mikor mire változott az állapot. Ideális esetben ESPEasy dummy device-ba írnám az értéket, amit adott időközönként elküld MQTT-n. Sajnos string-et ezek nem tudnak tárolni (ez nagyon hiányzik, sok éve várjuk már ezt az opciót), a HA tudná kezelni így is, de azt követni körülményesebbnek tűnt. Az alkalmazott megoldás hátránya, hogy a publish másodpercenként többször is fut, a küldések gyakoriságát csak az MQTT controllerben beállított minimum send interval értékkel lehet redukálni.
Jöjjön a lényeg, a jelenlegi rules (kommentekkel a // után):
on System#Boot do
GPIO,2,1 //led ki
event,setup //alap értékek feltöltése
endon
on setup do // ez a rész mehetne system#boot-ba is, ha nagyon szoros a hely
TaskValueSet 1,1,34 //min vízhőfok
TaskValueSet 1,2,89 //over, biztonsági hőfok, amin el kezd keringetni
TaskValueSet 2,1,350 //keringetési idő sec
TaskValueSet 2,2,500 //keringetési idő szünet
TaskValueSet 2,3,30 //termosztát figyelése
TaskValueSet 2,4,1200 //szivattyú védelem, ennyi kör után
Let,2,2 //alap watch induláskor
Let,3,0 //protect-szivattyú védelem számláló nullázás
TimerSet,2,8 //Start
endon
on Rules#Timer=1 do //keringetés szünetel
Publish %sysname%/status, 'Szünet' //hmmm... a topik nevét is lehetne rövidebbre venni
oled,7,3, Pause
gpio,15,0
TaskValueSet 4,1,0
Let,1,[dtime#keringp]
Let,2,2
TimerSet,3,1
endon
on Rules#Timer=2 do //watchdog, figyel mindent is
if [owt#temp1]>[dtemp#tmax]
event,hover
elseif [termo#state]=1
event,hon
else
event,hoff
endif //ezekre figyelni kell, ha kimarad, vagy a ciklus közepére is kerül egy, akkor bánat van
endon
On Rules#Timer=3 do //időzítő loop, helyet spórol
if [VAR#1]<2
Let,1,0
TimerSet,3,0
TimerSet,[VAR#2],1
else
Let,1,[VAR#1]-2
TaskValueSet 4,2,[VAR#1]
TimerSet,3,2
endif
endon
on termo#state=0 do //termosztát lekapcsoloásakor
if [owt#temp1]<[dtemp#tmax]
TimerSet,1,3
else
TimerSet,2,1
endif
endon
on hon do //keringetés bekapcs
if [owt#temp1]>[dtemp#tmin] and [ha#ha]=0 //feltétel: min hő felett, ablakok zárva
Publish %sysname%/status, 'Keringetés' //egyszerűsített MQTT üzenet
oled,7,3,Heating!
gpio,15,1
TaskValueSet 4,1,1
TaskValueSet 4,3,0
Let,1,([dtime#kering]-([owt#temp1]*2))
Let,2,1
Let,3,0
TimerSet,3,1
else
event,hoff
endif
endon
on hover do //túlfűtve a puffer
Publish %sysname%/status, 'Túlfűtés'
oled,7,3,OVERHEAT
gpio,15,1
TaskValueSet 4,1,1
Let,1,600
Let,2,2
Let,3,0
TimerSet,3,1
endon
on hoff do //keringetés vége
gpio,15,0
TaskValueSet 4,1,0
Let,3,[VAR#3]+1
TaskValueSet 4,3,[VAR#3]
if [var#3]=[dtime#protect] //szivattyúvédelmet számolja
Publish %sysname%/status, 'Keringetés'
oled,7,3,Protect
gpio,15,1
TaskValueSet 4,3,0
TaskValueSet 4,1,1
Let,1,60
Let,2,2
Let,3,0
Timerset 3,1
elseif [ha#ha]=1 //ha a HA jelezte a nyitott ablakokat
Publish %sysname%/status, 'Ablakok'
oled,7,3,Ablakok
TimerSet,2,[dtime#watch]
else
Publish %sysname%/status, 'Watch' //figyelős loop
oled,7,3,Watch
TimerSet,2,[dtime#watch]
endif
endon
Home Assistant szenzor (configuration.yaml -ban kell elhelyezni):mqtt:
sensor:
- name: "Fűtés státusz"
state_topic: "ESP_Pump_2/status"
unique_id: futes-status
Ha semmi infót nem adunk a szenzorhoz (milyen típus, miben és mit mér), akkor lesz egy ilyen "mindenes" szenzor, amiben tetszőleges adatot tudunk fogadni MQTT-ből.
ESP beállítások, MQTT controler:
A mikrokontrollerre csatlakoztatott valós és "dummy" eszközök:
Home Assistant fűtés dashboard ide tartozó részlete:
Összességében még komfortosabb (ez főleg a sok okos TRV érdeme) és még "spórolósabb" lett a fűtés. További tervek az akkus táplálás, az itthoni jelenlét pontosabb követése (okosotthon intézi, extra utasítást küld MQTT-n csak, így ez nem az ESP-t terheli).
ESP32-re fejlesztés is felmerült, de igazán elvan a kis Wemos 20-35% CPU loaddal, ram csak akkor telik meg, ha elnézek valamit a rules-ban (egy extra endif került bele kopipészt miatt, hát nem volt boldog. Free ram és utána egy nagy negatív szám volt a jutalmam...). Van pár elektromos fűtőbetétem, ami illeszkedik a pufferhez. Ezekkel az őszi és tavaszi időszakban a megtermelt áramból lehetne fűteni.
Köszönöm, hogy benéztél!