RF868MHz - WiFi Gateway: ESP8266 + RFM217W + RFM119W + Computherm Q8RF - második rész (adás)
2021. október 15. írta: flogi

RF868MHz - WiFi Gateway: ESP8266 + RFM217W + RFM119W + Computherm Q8RF - második rész (adás)

Az első részben eljutottunk odáig, hogy sikeresen vettük a termosztát jelét, amit a központi egységnek küldött, majd megjelenítettük azt a HomeAssistant felületén. Most jöjjön akkor az adó rész felélesztése.

Az első részben szereplő RFM119W-868S1 sajnos vakvágánynak bizonyult, mert azzal nem működött az adás, így ez cserélve lett az RFM117W-868S1 modulra.

computherm-q8-rf.jpg

 

A project anyagigénye az alábbiak szerint alakult:

 

rfm119w.jpg rfm217w-868s1.jpg wemos-d1-mini-esp8266-kit.jpg
RFM117W-868S1 RFM217W-868S1 ESP8266

 

A modulok bekötését már megfejtettük, de emlékeztetőül ideteszem: 

 

RFM117W-868S1 pin RFM217W-868S1 pin ESP8266 pin
VDD VDD 3V3
GND GND GND
- DATA D1
DATA - D2
CLK - -
- CLK -
- SDA -
- CSB -

 

rf833adovevowire.png 

Próbapanelen összerakva így néz ki:

img_20211014_193139.jpg

Nyissuk meg az eddig megírt kódunkat és folytassuk az adó felélesztését. Az első részben a sender címét 255-re állítottuk, hogy lekapcsolt állapotban legyen, most ezt írjuk át 4-esre, ami a GPIO4-et jelenti, ami a Wemos D1 mini D2-es lába.

arduino-ide-21-2.png

Ezután az MQTT fogadó részt kell átalakítanunk. Próbáltam úgy felépíteni ezt az egyszerű kódot, hogy ha valaki nem ért semennyire a programozáshoz, de lépésről-lépésre elvégzi az itt leírtakat, neki is működőképes eszköze legyen a végére, ezért a vezérlő utasítások formázása a HomeAssistant alatt kerül elvégzésre. Az ötlet, hogy a Ha által kiadott command így nézzen ki: "TermosztátID;vezérlés". Ahhoz, hogy ebből értelmezhető vezérlést adjunk ki, a kapott jsont kétfelé kell bontanunk, és a split karakter a pontosvessző. Ezt a képen látható 1. pontban végzi el a kód, majd az utasítás két felét egy-egy változóba teszi.

A 2. pontban megnézzük, hogy bekapcsolást vagy kikapcsolást szeretnénk végezni, majd ennek függvényében beállítjuk a vez változónkat 0-ra vagy 1-re, amit majd átadunk denx libjének, hogy végezze el az utasítást (kapcsolást)

A 3. pontban kiírjuk a debug konzolra, hogy éppen mi történik, az adás idejére bekapcsoljuk a Wemos alaplapi ledjét, meghívjuk az adást a termosztát ID paraméterével és a vezérlési utasítással (0/1), majd a végén lekapcsoljuk az alaplapi ledet.

A 4. pontban összeállítunk egy MQTT utasítást a HA-nak, hogy elvégeztük a feladatot. Ez nem jelenti azt, hogy a kazán be is kapcsolt, mert csak a vezérlést adtuk ki és bízunk ebben :) Itt gondolkodtam el azon, hogy amint lesz időm, össze kell rakjak egy érzékelőt, ami a kazánból elmenő és visszatérő csövek hőmérsékletét méri, mert abból látni lehetne, hogy elindult a fűtés, mert melegszik a cső.

arduino-ide-22.png

Ha ezekkel megvagyunk, nincs más hátra, mint ellenőrizni a kódunkat és az első részben már bemutatott módon, majd ha nincs benne hiba, feltölteni azt az ESP modulra. (Ha innen töltöd a kódot, letöltés után a fájl végéről töröld a .txt kiterjesztést és maradjon csak a .ino)

Ha elindítjuk az ArduinoIDE soros monitorját, látjuk, hogy elindul az eszközünk, kapcsolódik a wifi hálózatunkra, majd az MQTT brokerhez, majd ha a vevő értelmezhető adást vesz, azt elküldi az MQTT brokernak, amit mi megjelenítünk a HA felületén.

log-01.png

A megjelenítést már az előző postban leírtak alapján elkészítettük, de a vezérlési részt most ki kell egészíteni, mert a firmwarebe még csak most került be ez a funkció. Mivel ESP oldalon két paramétert várunk (ID;ON/OFF), így ezt meg kell adnunk a configuration.yaml payload_on és payload_off mezőiben:

configuration_yaml.png

Ha ez megvan, akkor lépjünk be a HomeAssistant weblapjára, ellenőrizzük a konfigurációnkat, majd töltsük újra a manuálisan konfigurált MQTT entitásainkat, hogy érvényesüljön az újonnan megadott payload.

ha-computherm.png

Ezt követően, ha a felületen kiadjuk a parancsot az adott termosztát nevében, a Computherm Q8RF központi egysége veszi azt és indítja a kazánt és a megfelelő zónaszelepet, amit az ESP soros logjában látunk is (Message arrived in MQTT topic...)

log-02.png

Hurrá, gondolhatnánk, de van itt egy kis probléma. Mint korábban írtam, a fizikai termosztát a saját programja szerint teszi a dolgát, így ha az úgy érzékeli, hogy neki nem kell fűteni, akkor bizonyos időnként (eléggé random) küld a központnak egy üzenetet, így ha mi bekapcsoltuk a HA alól, akkor Ő ki fogja kapcsolni. Ez szépen látszik a fenti logban is. Denx tanácsa az volt, hogy vegyem ki az elemet a termosztátból és akkor a HA viheti a teljes fűtés vezérlést. Nekem a másik gondolatom, hogy szólok egy ismerősnek, akinek szintén Q8RF-je van, hogy egy rövid időre adja kölcsön az egyik termosztátját (nekem nincs mind a négy bekötve), így azt feltanítom mondjuk a hármas körre, a jelét megtanítom a HA-val, így lesz egy külön adó, amit a HA használ, ha vezérlést kell kiadni és csak innen lehet lekapcsolni is, így nem fogok egyik fizikai termosztátommal sem harcolni a vezérléssel.

Az ESP firmwareben van még fejlesztési lehetőség (WiFi és MQTT manager weboldal, státuszok megjelenítésére szintén weboldal, akár onnan is vezérlés kiadása), de nekem egyelőre ez megfelel így, úgyhogy ezt a lehetőséget meghagyom egy ehhez affinitást érző programozói vénával ellátott kollégának ;)

img_20211017_182607.jpg img_20211017_184052.jpg

A bejegyzés trackback címe:

https://flogi-diyiot.blog.hu/api/trackback/id/tr2616719560

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

CptCaveman 2021.10.24. 23:35:22

Köszönöm!

Időközben kísérleteztem (nistvan86 kódja alapján arra jutottam, hogy lehet egy új "virtuális" termosztátoot is létrehozni 0xFF kóddal (computhermrf.cpp).

A párosításnál finnyás arra, hogy mit fogad be, különösen, ha egy új kört akarok létrehozni csak szofveres verzérléssel.

device id utolsó 8 bit (16+8)
zone 1 --> 0111
zone 2 --> 1011
zone 3 --> 0011
zone 4 ? --> talán 1101

CptCaveman 2021.10.24. 23:41:16

Egyelőre én a létező termosztátot révittem a 3. körre, ott generáltam egy kódot, majd visszavittem az 1. körre, így most van 2 ternosztátom 2 élő körrel és egy 3. amit tudok szabadon kapcsolgatni a HA-ból.

Ide-oda párosítás: computherm.info/sites/default/files/Q8RF-Manual-EN.pdf
receivered "A" mód legyen, majd programozni kívánt kör gombját nyomni, amíg nem villog
utána a termosztáton SET, majd DAY nyomva tartani 10 sec, amíg nem villog egy U:1-4 szám. Itt kiválasztani ugyanazt a kört és COPY lenyomva, amíg nem villog a kulcs. Utána Set lenyomni és kész.

Most épp azon gondokodom, hogy milyen módon felelősségteljes ezt vezérelni.
Mert ugyebár ha bekapcsolja valaki, akkor az örök időkig futni fog.
- Vagy a D1 mini kéne kikapcsolja egy idő után
- Vagy a HA-ba egy script-tel kéne ezt indítani, ami maga időzít és kikapcsol egy idő után (ezt még nem tudom, hogy kéne megoldani)

flogi 2021.10.26. 17:43:40

@CptCaveman: ez jó ötlet. A lekapcsolást lehetne egy hőmérőre kötni, ha eléri az X hőmérsékletet, akkor mehet az off automatikusan

CptCaveman 2021.10.29. 23:24:30

Köszönöm a projekted, kicsit továbbfejlesztettem és testreszabtam.
github.com/afarago/arduino-ComputhermQThermostatController

Egyelőre itt tartok:
- automatikus lekapcsolás WIFI disconnect esetén
- automatikus control vezérlés a virtuális termosztátok esetén
- virtuális termosztát bekapcsolása esetén gyakori LED visszajelzés
- DHT22 temp/humidity szenzor
- availability info és MQTT LWT

sipossz 2021.11.10. 21:50:13

Sziasztok!
Nekiálltam volna összelapátolni a HW-t ehhez a nagyszerű integrációhoz, de a HopeRF RFM217W-868S1 modul EOL, nincs készeleten sehol és már nem is rendelhető. Van öltet, hogy milyen RF vevővel lehetne fájdalommentesen helyettesíteni, hogy az itt leírtakhoz minimálisan kelljen csak hozzányúlni?
Köszönöm
süti beállítások módosítása