DIY okosotthon szívásaim

DIY okosotthon szívásaim

RF868MHz - WiFi Gateway: ESP8266 + RFM217W + RFM119W + Computherm Q8RF - első rész (vétel)

2021. október 13. - flogi

Itt a fűtési szezon és elgondolkodtam, hogy milyen jó lenne a Computherm Q8RF termosztátom állapotát látni a HomeAssistantban, esetleg még vezérelni is azt, így nem kellene hozzányúlnom a fűtési rendszerhez, mégis integrálva lenne az okosotthon rendszerembe.

computherm-q8-rf.jpg

Ismét a googlet hívtam segítségül, hátha valaki már megoldotta helyettem ezt a problémát is, nekem csak össze kell építenem. Igazam volt :) És milyen nemzetiségű lehetne, aki már megoldotta? Hát Magyar! Hurrá, ha elakadásom lenne, kérdezhetek is az anyanyelvemen Tőle. Kicsit tovább keresgélve, meglett a blogja is, ahol részletesen leírta a folyamatot, amit ajánlok mindenkinek olvasásra, nagyon jó sorozat!

A project anyagigénye az alábbiak szerint alakul (árban kb. 3.000.- jó magyar forint):

 

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

 

Szóval megvan a library, amit használnunk kell és megvannak a hardware elemeink is. Első körben nézzük meg a példakódokat és próbáljuk megfejteni hozzá a bekötést. Az alábbi eredményre kell jutnunk:

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

 

Ehhez a projecthez sokak bánatára az Arduino IDE programot fogom használni és ebben fogok egy alap működést összeollózni. Be kell ismernem, hogy lusta vagyok, egyszerűbb meglévő kódok felhasználásával összerakni egy működő dolgot, mint nulláról megírni. Abban az esetben, ha nincs más választásom, marad a kódolás nulláról, de ebben az esetben több példakód egymásba illesztésével is megoldható a feladat.

De mi az első feladat?

Működésre bírni a vevő egységet és megnézni, milyen kommunikáció megy az éterben, mit üzengetnek a termosztátok a központnak. Ha ez megvan, akkor mqtt-n beküldöm az adatokat a HomeAssistantnak és megjelenítem a felületen. Web felületet az ESP-be nem rakok, nem lesz wifi és mqtt manager oldal sem, úgyis HA alatt szeretnék látni mindent.

Szóval, nincs más hátra, töltsük le az ArduinoIDE alkalmazást és installáljuk a gépünkre, majd indítsuk is el. Ha ez sikeresen megtörtént, installáljuk a megfelelő alaplapot (ESP8266 és a projecthez tartozó függőségeinket). Először az alaplap managerben adjuk hozzá az ESP8266 boardot:

  • 1, Fájl --> Beállítások

01-arduino-ide.png

  • 2, További Alaplap-kezelő URL-ek: http://arduino.esp8266.com/stable/package_esp8266com_index.json

02-arduino-ide.png

  • 3, Eszközök --> Alaplap:  --> Alaplap-kezelő

03-arduino-ide.png

  • 4, ESP8266 --> Telepítés

04-arduino-ide.png

  • 5, Az alaplap információk ezennel telepítésre kerültek

05-arduino-ide.png

  •  6, állítsuk be, hogy a fordításokhoz a WEMOS D1 alaplapot használja a program (vagy amit beszereztünk)

06-arduino-ide.png

Ezennel sikeresen beállítottuk az Arduino IDE programot, hogy a Wemos D1 minire tudjunk benne programot írni, fordítani és feltölteni rá. Következő lépésben szükségünk van azokra a libekre, amiket használni szeretnénk. Először installáljuk hozzá denx computherm lib-jét.

  • Vázlat --> Könyvtárak tartalmazása --> Könyvtárak kezelése...

07-arduino-ide.png

  • Keressünk rá a computherm szóra, majd a találati listában megjelenő Library-t telepítsük.

08-arduino-ide.png

Sikeres telepítést követően keressük meg a példák között a Computherm sendert, hogy kipróbáljuk a példa programot. Ezt azért nem érdemes kihagyni, mert nem fog működni a fordítás...

09-arduino-ide.png

Ha az ArduinoIDE-ben rányomunk az ellenőrzés gombra, sajnos a fordítás sikertelen lesz, mert a példakód egy nem létező fájlra hivatkozik, ami ebben a formában nem teljesen igaz. A problémát az okozza, hogy a példakódban a hivatkozott fájl nevében vannak nagy betűk, míg a fájl neve csupa kisbetű.

10-arduino-ide.png

Ezt szerencsére könnyen orvosolhatjuk, ha

  • átnevezzük a fájlt (ezt szoktam tenni, mert általában a példát kapom elő, ha szeretnék valamit)
  • átírjuk a kódban csupa kisbetűsre

Ezt követően, ha újra ellenőrizzük a kódunkat, már sikeresen lefordul.

11-arduino-ide.png

A tervezett működésünkben szerepel, hogy MQTT-n szeretnénk a státuszokat küldeni (majd a vezérlő utasításokat fogadni), ezért telepítenünk kell a PubSubClient library-t is a fent bemutatott módon:

12-arduino-ide.png

Mostanra eljutottunk oda, hogy megvan minden elő követelményünk, hogy az eltervezett kódot összeollózzuk a példakódokból. Ehhez felhasználom a PubSubClient, a Sender és a Receiver példákat.

A kód elején kell megadni a WiFi és MQTT kapcsolódási adatokat. Fixen beégetem a kódba, mivel nem terveztem konfigurációs oldalt a rendszerhez (minél gyorsabban meglegyek), de akinek van affinitása, talál rá példákat a neten vagy az arduino libjei között is (az egyik kedvencem tzapu WiFiManager lib-je).

Itt kerül definiálásra az a két lába is az ESP-nek, amire az adó és vevő egységünket kötöttük. A kódban GPIO-ra hivatkozunk, ami nem egyezik meg a lábak melletti nevekkel.

ComputhermRF rf = ComputhermRF(5, 255);

Az első 5-ös a GPIO5-öt jelenti, ami a Wemos D1 mini (ESP8266) modul D1-es lába, ahova a vevőt kötöttük. A második, 255 pedig azt, hogy az adót most nem használjuk, mivel először a vevőt szeretnénk feléleszteni/kipróbálni és illeszteni a HA-hoz. A kép végén látható, hogy a küldő/sender rész ki is van kommentezve a kódban, így a fordító figyelmen kívül fogja hagyni (mintha ott se lenne).

13-arduino-ide.png

Egy kis magyarázat a setup részhez is, hogy mégis tudjuk, mit csinál a kód. Itt kerül beállításra a soros port, ahol majd a debug üzeneteket fogjuk megkapni, elindul a wifi, ami kapcsolódik a beállított AP-hoz a megadott jelszóval, beállításra kerül a wifi kliens ném, amivel megtaláljuk majd a rouertünkben, ezekről a soros porton tájékoztat majd minket (serial.print). Kapcsolódik az MQTT szerverhez a megadott adatokkal, majd erről is ír státuszokat a soros porton és feliratkozik a topicra. Végezetül inicializálásra kerül a 868,35MHz-es vevő modulunk.

14-arduino-ide.png

A callback rész az MQTT üzenetek kezelését végzi egyelőre, amit ki is ír a soros portra, hogy lássuk, mi történik az ESP oldalán.

15-arduino-ide.png

A loop rész maga a főprogram. Lényeges változtatást itt tettem a kódba, mert a topic-ot, ahol az üzenetek kerülnek kiküldésre, módosítom, hogy a HA oldalán egyszerűbben kezelhető legyen, melyik termosztát üzenetéről van szó. Úgy módosul, hogy a végéhez hozzárakom az azonosítóját a termosztátnak és abba a topicba küldöm bele, hogy on vagy off a státusz. Tehát ez lesz a topic: wifito868gw/computherm/termosztát.address

16-arduino-ide.png

Ha minden kódrészt átírtunk, ami szükséges, ellenőrizzük a kódunkat, hogy megfelelően lefordul -e. Ha nem, akkor ellenőrizzük, mit rontottunk el. Ilyen lehet, ha a sorok végéről kitöröljük a ; karaktert vagy a kapcsolódási adatok megadásakor véletlenül töröljük valamelyik idézőjelet.

17-arduino-ide.png

Nincs más hátra, mint a kódunk feltöltése a wemosra. Ehhez egy USB kábellel kössük rá a modulunkat a számítógépünkre.

img_20211012_190552.jpg

Állítsuk be, melyik porton található (hol látja a windows/linux/max).

19-arduinoide.png

Ha ezzel megvagyunk, kattintsunk a feltöltés ikonra. A folyamatot az ablak alján látható sávban követhetjük nyomon.

19-arduinoide-upload.png

Sikeres feltöltést követően az ArduinoIDE soros monitorját indítva megnézhetjük, mit kommunikál az ESP modulunk. Azon üzenetek jelennek meg itt, amiket kiírattunk a kódban. Indítsuk el a soros monitort

Eszközök --> Soros monitor

19-arduino-ide.png

A logban látható, hogy az ESP kapcsolódik a WiFi hálózathoz (ott a kliens neve és MAC címe is, hogy a routerben megtaláljuk), majd az MQTT brokerhez, végül elindul az 868,35MHz-es RF vevő. Itt látszik, hogy a termosztátok bizonyos időközönként küldik az aktuális állapotukhoz tartozó üzenetet a központ felé. Az már látszik, hogy a későbbiekben ez fejtörést fog okozni, hogy ha a HA alól kiadom az ON üzenetet, akkor a termosztát ezt felül fogja bírálni egy OFF üzenettel, így pediodikusan ismételgetnem kell majd, de ez egy későbbi probléma, most nézzük mit is látunk még itt.

Az address az egyedi azonosítója a termosztátnak, ami érdekesség számomra, hogy az egyik nálam két azonosítót küld magáról, de státuszban ugyanazt. Ha rányomunk a termosztáton, hogy fűtsön a kazán, megjelenik a logban is az ON üzenet.

19-arduino-logmessage.png

A Wemos D1 oldalon úgy látszik, hogy sikeresen vesszük a termosztátok jeleit és továbbítjuk azt az MQTT broker felé a megfelelő topicokba. Következő lépésként konfiguráljuk a HomeAssistantot, hogy lássuk is a rendszerünkben az itt feladott üzeneteket.

Ehhez módosítani kell a configuration.yaml fájlt (ha valamelyik integrációnk nem vette eddig észre az új entitásokat). Mivel ez végülis egy kapcsoló, így a switch szekcióba helyezem el. Emlékezzünk, hogy a kódban a topic részt, ahová küldöm a státuszokat, kiegészítem a termosztát address paraméterével, így a state_topic-ot így kell megadni, tehát az utolsó 5 karaktert a soros log-ból kell kinézni. A command topic egyelőre előkészület, mivel a vezérlés még nincs megírva, de HA oldalon már előkészítem (de változhat).

switch:
     - platform: mqtt
       unique_id: '3f3tzmf3aygx3loc3txh3ldg3oj3wa3c'
       name: 'Computherm Q8RF - Fszt 1'
       state_topic: 'wifito868gw/computherm/E65FB'
       command_topic: "wifito868gw/computherm"
       value_template: '{{ value_json.POWER }}'
       payload_on: 'ON'
       payload_off: 'OFF'
       state_on: 'ON'
       state_off: 'OFF'
       payload_available: "Online"
       payload_not_available: "Offline"
       qos: 0
       retain: true
     - platform: mqtt
       unique_id: '4f4tzmf4aygx4loc4txh4ldg4oj4wa4c'
       name: 'Computherm Q8RF - Fszt 2'
       state_topic: 'wifito868gw/computherm/E65F7'
       command_topic: "wifito868gw/computherm"
       value_template: '{{ value_json.POWER }}'
       payload_on: 'ON'
       payload_off: 'OFF'
       state_on: 'ON'
       state_off: 'OFF'
       payload_available: "Online"
       payload_not_available: "Offline"
       qos: 0
       retain: true
     - platform: mqtt
       unique_id: '5f5tzmf5aygx5loc5txh5ldg5oj5wa5c'
       name: 'Computherm Q8RF - Emelet'
       state_topic: 'wifito868gw/computherm/375F7'
       command_topic: "wifito868gw/computherm"
       value_template: '{{ value_json.POWER }}'
       payload_on: 'ON'
       payload_off: 'OFF'
       state_on: 'ON'
       state_off: 'OFF'
       payload_available: "Online"
       payload_not_available: "Offline"
       qos: 0
       retain: true

Ha ezzel megvagyunk, lépjünk be a Home Assistantba, ellenőrizzük, hogy a konfigurációnk helyes -e, majd töltsük újra a manuálisan konfigurált entitásokat. Ha mindent jól csináltunk, akkor az entitások alatt megjelennek a termosztátjaink.

01-computherm-ha.png

Próbából egy entitások kártyára felraktam ezeket az entitásokat, hiszen a be- és kikapcsolás üzenetek fogadása már működik, a rendszerben megjeleníthető.

02-computherm-ha.png 03-computherm-ha.png

 

Ebben a részben eljutottunk odáig, hogy beszereztük a szükséges modulokat, a vevő egységet összekábeleztük az wemos d1 (esp8266) modulunkkal, megírtunk egy alap programot, ami kapcsolódik a WiFi hálózatunkra, olvassa a vevő által vett jeleket (felhasználva denx fáradtságos munkáját), elküldi mqtt-n a brokernek, majd megjelenítettük azt a Home Assistant-ban.

A következő részben felélesztjük az adó modult is, hozzákötjük a Wemos-hoz és a HA alól megpróbáljuk bekapcsolni a kazánunkat az egyik termosztát nevében.

Végezetül a teljes Arduino kódot itt találod. Letöltés után a fájl kiterjesztés végéről törölni kell a .txt-t (csak így tudtam feltölteni)

 

A bejegyzés trackback címe:

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

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.

Nincsenek hozzászólások.
süti beállítások módosítása