DIY okosotthon szívásaim

DIY okosotthon szívásaim

WiFi és az okos otthon/IoT eszközök routere

2021. október 16. - flogi

Többször olvastam a közösségi média okos otthonaival foglalkozó csoportjaiban, hogy a WiFi nem annyira biztonságos, hogy azon keresztül vezéreljünk vele eszközöket, mert "pillanatok alatt megtöröm a WiFi hálózatodat".

De mit is lehet elérni azzal, ha bejutott valaki a hálózatomba és mondjuk a vezérlő központhoz is eljutott és sikerül neki azt is feltörnie? Erről mindig a Mr. Robot című film második évadának első epizódja jut eszembe. Ha végiggondoljuk, tényleg meg lehet keseríteni valaki életét csak azzal is, ha játszunk a fényekkel, a hőmérséklettel, mozgatjuk a kamerákat és sorolhatnám még, kinek milyen eszköze van integrálva az okos központjába.

De tényleg ennyire insecure a WiFi? Pillanatok alatt fel lehet törni? A rádió frekvenciás eszközök (többsége) tényleg vicc kategóriák a 21. században biztonság szempontjából (azért van pár kivétel és szerencsére egyre több). Postoltam is, hogyan lehet 433MHz és 868,35MHz RF eszközöket integrálni a rendszerünkbe, de sok kapunyitó is ezen a frekin működik. Elég elkapni a jelet, majd ha a tulaj elmegy otthonról, visszajátszani a kapunak, amire az szépen ki is nyílik (tudom, az ugrókódosak nem). A leírt megoldások sem működtek volna, ha ténylegesen titkosított kommunikációt kellett volna visszafejteni. De a WiFi titkosít, akkor mitől olyan könnyű feltörni?

Meglátásom szerint az alábbiak könnyíthetik meg a hackerek dolgát:

  • Elavult, régi eszközök használata
    • Ha még működik, miért dobjuk ki? --> Mert elavult. De miért?
    • A gyártó már nem frissíti a firmwaret. --> És?
    • Nem érkeznek javítások a különböző sérülékenységre, amit egy támadó kihasználhat.
  • Jók a gyári beállítások, így nem bántom azokat
    • A gyári jelszó megfelelően bonyolult --> Lehet, hogy annak tűnik, de általában algoritmusok generálják, így egy összetett kereséssel megtalálható a gyári jelszó a neten.
    • Nem használt funkciók is bekapcsolva vannak. WPS jó funkció, de használjuk? Ha nem, kapcsoljuk ki, mert ennek segítségével és a reaver progival 4-10 óra alatt törhető a router, ha a megfelelő sérülékenység még benne van.
  • Frissítések hiánya
    • A gyártók pár évig támogatják a termékeiket és adnak ki biztonsági frissítéseket, de mi frissítjük azokat? A hackerek figyelik, milyen sérülékenység található az eszközön, amit támadnak, így a frissítés hiányával nekik segítünk.
    • Ha belépünk a routerbe, hogy felvegyünk/ellenőrizzünk/ip címet fixáljuk, nézzünk rá, hogy van -e frissebb firmware és telepítsük is azt.
  • WiFi jelszó komplexitása nem megfelelő
    • Jó ötletnek tűnik a családtag nevét és születési dátumát kombinálva beállítani --> Egy kis közösségi médiás keresgéléssel összerakott jelszólistából másodpercek alatt törhető
    • Kedvenc kaja --> Szintén a közösségi média ad segítséget a jelszó töréséhez, mint az előbbi pontban
    • Háziállat --> Még mindig a közösségi média...
    • Nem kell hosszú jelszó, mert mindek? --> Minél hosszabb egy jelszó, annál több időt vesz igénybe a törése. Így percekből éveket lehet elérni egy hosszú jelszóval.
    • ...

Akkor nézzünk egy példát, hogy mi van akkor, ha mindent megtettünk a WiFi hálózatunk védelmében. Mivel az okos eszközeinket csatlakoztatjuk rá, ezért WPA2 titkosítás lesz a példában (WEP titkosítás gondolom már nincs senkinél, mert ahhoz az általános iskolás gyerekek is percek alatt feltörik a jelszót). Magasabb titkosításra nem mehetünk, szintén az IoT eszközök miatt. De mi kell ahhoz, hogy feltörjünk egy wifi hálózatot? Először is másét ne törjük, mert ugye az illegális, így marad a sajátunk. Ezennel megvan a legális célpont. Kell még egy laptop egy jó oprendszerrel és egy megfelelő wifi chippel ellátott eszköz, amit monitor módba lehet kapcsolni. Szerencsére AliExpress-ről pár dollárért már lehet ilyet szerezni. Akik ebben a szakmában motoroznak, azoknál gondolom ott lapul a szekrényben egy Pineapple Tetra is ;) Egy ilyen feladathoz viszont az ágyúval verébre. De mi van a szekrényben itthon?

img_20211015_143153.jpg

Ezek pont megfelelőek :) és most elég, ha csak a 2,4GHz frekit tudja, mert az okos eszközök sem tudnak többet :D

Szóval, ehhez a művelethez a kali linux disztribúciót használom, ami még jól is néz ki:

01-kali-linux.png

Indítunk egy konzolt (ez olyan, mint a windowsban a command prompt) és felélesztjük az usb-s wifinket:

02-hack.png

 

Megnézzük, milyen WiFi bázisállomások vannak a közelben. Ha el is rejtjük az SSID-ját a routernek, ebben a listában akkor is megjelenik, így az nem védelem.

03-hack.png

 

Következő lépésben monitor módba kapcsoljuk a wifit, de csak a 11-es csatorna érdekel minket, mert azon van a támadott AP (SSID: IOTWIFI).

04-hack.png

Következő lépésben elkezdjük megfigyelni a kommunikációt az éterben és mindent leírunk egy fájlba. Látjuk a támadott AP-t és a hozzá kapcsolódó klienseket is (jelen esetben csak egyet, de az is elég lesz).

05-hack.png

Írtam a régi eszközök használatáról, ami nem a legjobb ötlet, mert sok sérülékenység van bennük. Az egyik ilyen a deauth csomagok fogadása, ami annyit tesz, hogy nem kell kapcsolódva legyek a bázisállomáshoz, mégis tudom arra utasítani, hogy bontsa a kapcsolatot a kapcsolódott klienssel. Az újabb eszközökben ez javítva lett, így azoknál várakozni kell, míg nem kapcsolódik valaki hozzá, így az csak plusz időt ad a támadás kivitelezéséhez. Szóval most utasítom a routert deauth csomagok küldésével, hogy dobja le a klienst magáról.

06-hack.png

Ez azért kellett, hogy lássam, ahogy a kliens megkezdi a kapcsolódást a routerhez, mert abból lehet megszerezni a handshake-et (ha valakit jobban érdekel, nézzen utána a négy lépéses kézfogásnak - four step handshake), amiből visszafejthető a jelszó. Ezért írtam az előbb, hogy ha nem is sérülékeny a dauthra a router, valamikor valaki úgyis kapcsolódni fog, ezzel csak meggyorsítottam a folyamatot.

07-hack.png

Ha megvan a handshake, már csak egy megfelelő jelszólista kell a demonstrációhoz. Most itt írhatnék a rainbow táblákról és egyéb technikákról, de a cél nem az, hogy hogyan törjünk fel egy  WiFi bázisállomást, hanem az, hogy hogyan tudjuk biztonságosabbá tenni a sajátunkat? Viszont ezt a műveletet ki lehet tenni a netre is, mert vannak szolgáltatók, akik 20$-tól már feltörik helyettünk. Persze az ár függ attól, hogy mekkora jelszó listát kérünk, milyen gyorsan kérjük, de végülis ez csak pénz kérdése. Nekem viszont pont van egy megfelelő jelszó listám, ezért azt használom.

08-hack.png

És elég hamar meg is lett a jelszó. Többször belefutottam ebbe a jelszóba is, poénok között is többször előjött már, de ugye a viccek is a való életből táplálkoznak.

09-hack.png

Ez mind szép és jó, de ebből mintha az következne, hogy tényleg feltörhetőek a WiFi-k, ami igaz is (és igaz ez a vezetékes hálózatokra is). Van ami gyorsabban, van ami nehezebben, de a feltörési időt meg tudjuk hosszabbítani, ami miatt már nem fogja megérni bíbelődni a rendszerünkkel - ezért más célpont után néznek -, kivéve, ha a várt fogás nagyobb a befektetésnél (ár-érték arány). Itt jön megint a képbe a közösségi média, mert a postolt képek alapján következtetni lehet, milyen cuccok vannak a célpont lakásában, ezért figyelni kell, mit osztunk meg az interneten (mert az ugyebár nem felejt).

És végül mit tehetünk?

  • Frissítsük a routerünk firmware-ét, legalább ha belépünk konfigurálgatni valamit vagy akár havonta egyszer ellenőrizzük azt.
  • Nem támogatott eszközöket már ne használjunk. (Ez csak tanács, nekem is vannak használatban, pedig jól tudom, hogy nem szabadna.)
  • Jól megválasztott és bonyolultságú jelszó. A WPA2-ben ha jól emlékszem, 63 karakter áll rendelkezésünkre. Kézzel elég ritkán kell megadnunk és akkor ezt a kis kényelmetlenséget ki lehet bírni. Sok esetben versekből keresek megfelelő karakterszámú részletet és az a jelszó, így általában 60 karakter környékén vagyok, aminek a visszafejtése években mérhető.
  • Ne maradjon gyári beállításokon az eszköz. A nem használt funkciókat kapcsoljuk ki, nevezzük át, módosítsuk a jelszavakat. Ha emlékszünk még az Alverad Technology Focus Kft. "Ki figyeli az őrzőket?" tanulmányára, kamera téren is ez volt az egyik fő probléma.

Számomra még mindig biztonságos a WiFi, mert ahhoz, hogy valaki megpróbálja feltörni, ahhoz olyan közel kell jönnie, hogy fogja az AP jeleit és még akkor sem lehet biztos a sikerben, míg az internetre és felhőbe kirakott eszközökhöz a kényelmes fotelból sem kell felkelni.

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 ;)

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

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)

 

ESP32 devkit v1 - DOIT + OV7670 camera modul

Találtam az alkatrészes dobozomban egy OV7670-es kamera modult, melyet már nem is emlékszem, mihez rendeltem. Biztosan volt valami jó ötletem, amit meg szerettem volna valósítani, aztán mire megérkezett Kínából, már prioritását vesztette. Ha már megtaláltam, gondoltam kezdek vele valamit. Emlékeim szerint valami hasonló cucc van az ESP32cam boardon is, úgyhogy egy régebbi verziós ESP32 devkit modult bányásztam elő a feladathoz. Aki nem szeretné végigolvasni a postot, el kell mondjam, hogy a képminőség eléggé retró, de működik :)

Szóval, a project alkatrész idénye:

  • ESP32 devkit v1 - DOIT
  • OV7670 camrea modul
  • kébelek a kötözgetéshez

A netet kutatva két projectet találtam a témával kapcsolatban, így már láttam, hogy nem nekem kell megírnom a firmwaret, maximum csak módosítanom kell az igényeimhez.

Mudassar projectje is Bitluniéra épül, így én is azt próbáltam ki először. Aki a Mudassar féle megoldással próbálkozik, annak valamelyik részét módosítania kell, mert elírás van benne - már nem emlékszem melyik file - de Bitluniéból át lehet vinni és akkor az a kód is működőképes lesz (a hiba miatt nem fordul le).

A kódokat átnézve az alábbi kábelezést kellet elvégezni a két modul között:

esp32-devkit-v1-board-ov7670-cam-wire.png  

OV7670 pin ESP32 pin
3.3V 3.3V
GND GND
SCL D22
SDA D21
VS D34
HS D35
PCLK D33
MCLK D32
D7 D4
D6 D12
D5 D13
D4 D14
D3 D15
D2 RX2
D1 TX2
D0 D27
RESET -
PWDN -

 

A való életben ez úgy néz ki, mintha egy lökött pók összeszőtte volna őket:

img_20211005_184020.jpg img_20211005_184113.jpg

 

Ha a kábelezéssel megvagyunk, nincs más hátra, mint a githubról letöltött kód fordítása ArduinoIDE alkalmazással. Az arduino használatát nem részletezem, millió leírás van hozzá a neten. Arra figyelni kell, hogy az ESP32 board cuccait is telepíteni kell majd, plusz ha valamire panaszkodik, hogy hiányzik neki, azt is pótoljuk.

Ha sikeresen lefordult a kódunk, majd feltöltöttük az ESP32 modulra, egy új AP jelenik meg az éterben. Miután beállítottuk a WiFi kapcsolódási dolgokat az AP weblapján, majd újraindítottuk, egy új eszközt üdvözölhetünk a hálózatunkban. Ez az eszköz sima http kapcsolaton keresztül elérhető és azonnal a kamera képét jeleníti meg. A post elején már jeleztem, hogy nem a legszebb képet láthatjuk a weblapon, de azért kivehető, mit is szeretne közvetíteni számunkra a kamera:

esp32-ov7670-i2c-camera-picture.png

Igen, ez egy csomag rágó képe, némileg zajjal. Egy mobillal azért már sokkal szebb képeket tudunk készíteni, de árban is jóval drágábbak ezek a készülékek és még telefonálni is lehet velük :)

img_20211005_184520.jpg

Mivel sikerült az eszközt feléleszteni és még képet is láttam tőle egy weblapon megjelenni, újra mehet vissza pihenni a többi, még fel nem használt IOT modul közé ;)

ESP8266 + 4ch Relay modul + Tasmota + HomeAssistant

Az alább bemutatásra kerülő eszköz hobbi céllal, saját felhasználásra készült, nem szabvány alapján. Ha valaki komolyabban szeretné megépíteni, kiegészítések szükségesek hozzá. Mint felhívták a figyelmemet rá, így nem felel meg semmilyen szabványnak, hiányzik belőle a túláram védelem, túlfeszültség és zavarvédelem, érintésvédelem tekintetében kettős, megerősített szigetelést kellett volna használjak, komolyabb reléket, stb...

Szükségem volt egy okos konnektorra, így a következő bemutatásra kerülő projektem ez lett.

Négy vezérelhető és két állandó áramellátással rendelkező konnektor csatlakozásra volt szükségem, így elegendő volt egy hatos konnektor, melyet most tasmotával fogunk vezérelni.

Ebben a postban villanyt szerelünk, aki nem biztos a dolgában, kérem ne kezdjen bele!!! Ha valami félremegy, akár a lakásunkat is felgyujthatjuk!!!

A végeredmény, dobozolás után:

img_20210916_183828.jpg

A feladat leküzdéséhez szükséges volt pár modul beszerzése:

Első lépésben felejtsük el az elosztó garanciáját, szedjük szét és essünk neki valami szerszámmal és az egyik sínt - ami most a mi esetünkben a fázis lesz - vágdossuk szét öt felé, majd a vágásoknál szigeteljük mindkét oldalt. A másik oldalt, ami a nulla lesz és a védőföldet hagyjuk érintetlenül. A végeredmény nálam így néz ki. 

img_20211010_101106.jpg

Ha elkészültünk az elosztó előkészítésével, következzen a vezérlő doboz előkészítése. A linkelt OBO A14-es dobozba pont belefér minden, amire most szükségünk lesz. Vegyük elő az ESP8266 Wemos D1 mini modulunktat és töltsük fel rá a tasmota firmwaret. (Ezt nem részletezem, mert a neten millió leírás van hozzá.) Ha ez megvan, következzék a kábelezés az ESP és a relé modul között és a konnektor felé menő 220-as rész.

konnektor-vezerlo-2.jpg

Szereljük meg a betáp kábelünket is, amihez nem kell más csak a 3x1,5-ös kábel és a dugvilla. 

img_20211010_101315.jpg

Ha ezzel megvagyunk, a másik vége a kötődobozba kerül, ahonnan a reléken és kötéseken keresztül a 7 eres kábelt felhasználva a végén az elosztóban landoljon. 

img_20211010_101513.jpg img_20211010_101445.jpg

img_20210916_182620_1.jpg

Ha itt végeztünk, már csak a hét eres kábelünk végére kell felszerelnünk az elosztót:

img_20211010_101057-2.jpg

Zárjuk be a dobozunkat és szereljük össze az elosztót. Ismét egy vállalható kinézetű DIY okos konnektort sikerült összerakni:

img_20210916_183828.jpg

Ha van merszünk hozzá, dugjuk be a konnektorba :)

Annyira szoktam figyelni, hogy az összeszerelés előtt megnézem, hogy a konnektor, ahova kerülni fog, melyik pólusában lesz a fázis (erre jó egy fázis ceruza) és a dugaljba már úgy kötöm a kábelt és figyelek a teljes szerelés során, hogy a relékkel is a fázist szakítsam meg.

Ha volt merszünk és adtunk áramot az eszközünknek, akkor megjelenik egy új AP a WiFi hálózatban. Állítsuk be, hogy csatlakozzonk a mi routerünkhöz. Ezt követően már a saját hálózatunkban üdvözölhetjük az okos konnektorunkat. Nincs más hátra, mint a tasmota konfigurációja.

Először állítsuk be, hogy milyen ESP modult használunk. Ezt a Configuration menüpont alatt a Configure Module submenüben tehetjük meg.

tasmota-config.png

 Itt válasszuk a Generic modult a legördülőben és állítsuk be hozzá a bekötött GPIO lábait az ESP-nek.

tasmota-config-module.png

 Következő lépésben állítsuk be az MQTT szerverünk elérését:

tasmota-config-mqtt.png

 Majd nevezzük el az eszközünket, hogy könnyebben megtaláljuk :D

tasmota-config-other.png

 Ha sikeresen beállítottunk mindent, a tasmota nyitó weboldalán valami hasonlót kell látnunk:

tasmota-main.png

Következő lépésben konfiguráljuk a HomeAssistant szerverünket. Nyissuk meg a configuration.yaml fájlunkat és egészítsük ki a konfigot (ha nem ismeri fel automatikusan valamelyik integráció az entitást, amit használunk). A state_topic nevét a tasmota oldalán a logokból ki tudjuk lesni ;) 

root@homeassistant:~# mc -e configuration.yaml

switch:
- platform: mqtt
  unique_id: 'qyldex0bjg3nzx2nkoa3xnbvh70rk74c'
  name: 'Terrárium 1'
  state_topic: 'stat/tasmota_0BF4D2/RESULT'
  command_topic: "cmnd/tasmota_0BF4D2/POWER1"
  value_template: '{{ value_json.POWER1 }}'
  payload_on: 'ON'
  payload_off: 'OFF'
  state_on: 'ON'
  state_off: 'OFF'
  availability_topic: "tele/tasmota_0BF4D2/LWT"
  payload_available: "Online"
  payload_not_available: "Offline"
  qos: 0
  retain: true
- platform: mqtt
  unique_id: '7g4wvxg6cj3isjsq5i1d2o4rscgbt0bb'
  name: 'Terrárium 2'
  state_topic: 'stat/tasmota_0BF4D2/RESULT'
  command_topic: "cmnd/tasmota_0BF4D2/POWER2"
  value_template: '{{ value_json.POWER2 }}'
  payload_on: 'ON'
  payload_off: 'OFF'
  state_on: 'ON'
  state_off: 'OFF'
  availability_topic: "tele/tasmota_0BF4D2/LWT"
  payload_available: "Online"
  payload_not_available: "Offline"
  qos: 0
  retain: true
- platform: mqtt
  unique_id: 'w7ju8c0play06vdz3szsznie54h0ra4i'
  name: 'Terrárium 3'
  state_topic: 'stat/tasmota_0BF4D2/RESULT'
  command_topic: "cmnd/tasmota_0BF4D2/POWER3"
  value_template: '{{ value_json.POWER3 }}'
  payload_on: 'ON'
  payload_off: 'OFF'
  state_on: 'ON'
  state_off: 'OFF'
  availability_topic: "tele/tasmota_0BF4D2/LWT"
  payload_available: "Online"
  payload_not_available: "Offline"
  qos: 0
  retain: true
- platform: mqtt
  unique_id: 'ny0ibckzy4fsw88lljsb3bp0kulav2vr'
  name: 'Terrárium 4'
  state_topic: 'stat/tasmota_0BF4D2/RESULT'
  command_topic: "cmnd/tasmota_0BF4D2/POWER4"
  value_template: '{{ value_json.POWER4 }}'
  payload_on: 'ON'
  payload_off: 'OFF'
  state_on: 'ON'
  state_off: 'OFF'
  availability_topic: "tele/tasmota_0BF4D2/LWT"
  payload_available: "Online"
  payload_not_available: "Offline"
  qos: 0
  retain: true

Ellenőrizzünk a HA weblapján, hogy helyes -e a konfigunk, majd indítsuk újra (vagy töltsük újra a manuálisan konfigurált MQTT entitásokat). Kis várakozást kövtően megjelenik az okos konnektorunk az entitások között:

ha-entitasok.PNG

 

RF433MHz - WiFi Gateway: ESP8266 + RF433MHz + RFLink + ESPLink + HomeAssistant

A lakásban szezonálisan használt távirányítható dugaljak kerültek elő a szekrényből az ünnepek közeledtével - mivel a karácsonyi fényeket kapcsolgatjuk velük - így aktuálissá vált a HomeAssistant alá integrálásuk, hogy ne nekünk kelljen vele foglalkozni, intézze el ezt is egy automatizmus, de maradjon a már beszerzett RF433MHz-n működő 3db konnektor. Meglepetésemre a Lidl-ben kapható időjárás állomás jeleit is összeszedte és értelmezte, így két legyet sikerült lecsapnom egyszerre (pedig erre nem is gondoltam).

taviranyithato-dugalj.jpeg

A feladat leküzdéséhez szükséges volt pár modul beszerzése:

arduino-mega2560-r3-pro.jpg wemos-d1-mini-esp8266-kit.jpg rf-tx-rx-433mhz.jpg
Mega 2560 ESP8266 wemos D1 mini RF433MHz adó-vevő

 

Első lépésben látogassuk meg az rflink weblapját, ahonnan beszerezhetjük a firmware feltöltő alkalmazást, a megára való firmwaret és megtaláljuk a használható adó-vevőket és a kábelezést a mega és az adó-vevők felé. Mivel csak egy teszt projectnek indult, a legolcsóbb eszközöket szereztem be, de azokkal is működik.

A letöltött packban található loader működését nem részletezem, mert az is megtalálható az rflink oldalán. Töltsük fel a firmwaret a megára a loader segítségével.

rflink-loader_1.PNG

 

Második lépésben vegyük elő az ESP8266 modulunkat, amire az ESPLink firmware kerül feltöltésre. Ehhez töltsük le az ESPLink firmware-t és a Flash Download Tool alkalmazást (én még a 3.8.5-ös verziót használom).

Állítsuk be a loadert az alábbi módon és töltsük fel a firmwaret (négy összetevőből áll) az ESP-re.

espressif-download-tools-02-esplink-flashing_1.PNG

Ha mindkét eszközünkre sikeresen feltöltöttük a firmware-t, jöhet a modulok összekötése, kábelezése.

rf-wifi-gw-wire.png

Tápláljuk meg a Megánkat egy 5V 2A-es telefon töltővel, majd az esplink github oldalán található instrukciók alapján állítsuk be az elérést. Ha ezzel megvagyunk, már a saját hálózatunkban elérjük az eszközünket. Itt a "Pin assignment" beállítását a kábelezésnek megfelelően lebutítottam, ha valakinek szüksége van az egyéb műveletekre, ne feledje a kábelezést is kiegészíteni hozzá.

esplink-home.png

Következő lépésben engedélyeznünk kell a REST API-t az "Enaple SLIP an serial port" jelölőnégyzet bepipálásával és itt adható meg az MQTT beállítások is, ha valaki abból az irányból szeretné az adatokat kapni. Az MQTT használatának az az előnye, hogy így több RF gateway is lerakható egy hálózatben.

esplink-rest-mqtt.png

Az ESP és a Mega közötti kommunikáció ellenőrzését megtehetjük a uC Consol-on, ahogy egy konnektor ki-be kapcsolással már látszódni kell a küldött üzeneteknek. Ha eddig eljutottunk, már csak a HomeAssistant illesztés maradt hátra.

esplink-uc_console.png

 

A HomeAssistant összekötéshez módosítsuk a HA configuration.yaml fájlját és egészítsük ki az alábbi szakaszzal:

rflink: 
 host: 192.168.1.152
 wait_for_ack: true                                                                                      
 port: 23
#ezt akkor használjuk, ha mondjuk a szomszéd jeleit is összeszedi és nem szeretnénk ezt látni a rendszerünkben

 ignore_devices:                                                                     
   - tristate_*

Majd a sensor/light/switch/ szekciókhoz vegyük fel az alábbi sorokat:

light: 
   - platform: rflink 
     automatic_add: true
     # a device adatok a uC Console oldalról leolvashatóak. Ezt azért tettem a configba, mert ha
     # újraindítom a HA-t, akkor elérhetetlennek jelezte, amíg nem váltott státuszt a konnektor (on/off)
     devices: 
       ab400d_50_1: 
         name: 'RF konnektor A' 
       ab400d_50_2: 
         name: 'RF konnektor B' 
       ab400d_50_3: 
         name: 'RF konnektor C'

Lépjünk be a HomeAssitant felületre, ellenőrizzük a konfigurációt, majd indítsuk újra a HA-t, hogy olvassa be az új konfigurációt. Ezt követően a logokban már látható, hogy a HA és az ESPLink összekapcsolódnak, majd kis idő elteltével az entitások alatt is megjelennek a konnektoraink. Ehhez az kell, hogy legalább egyszer lássa a HA a konnektor ki-be kapcsolását.

2021-10-06 18:49:27 INFO (MainThread) [homeassistant.components.rflink] Connected to Rflink
2021-10-06 18:52:30 DEBUG (MainThread) [rflink.protocol] received data: 20;2B;AB400D;ID=50;SWITCH=1;CMD=ON;
2021-10-06 18:52:30 DEBUG (MainThread) [rflink.protocol] got packet: 20;2B;AB400D;ID=50;SWITCH=1;CMD=ON;
2021-10-06 18:52:30 DEBUG (MainThread) [rflink.protocol] decoded packet: {'node': 'gateway', 'protocol': 'ab400d', 'id': '50', 'switch': '1', 'command': 'on'}
2021-10-06 18:52:30 DEBUG (MainThread) [rflink.protocol] got event: {'id': 'ab400d_50_1', 'command': 'on'}
2021-10-06 18:52:30 DEBUG (MainThread) [homeassistant.components.rflink] event of type command: {'id': 'ab400d_50_1', 'command': 'on'}
2021-10-06 18:52:30 DEBUG (MainThread) [homeassistant.components.rflink] entity_ids: ['light.rf_konnektor_a']
2021-10-06 18:52:30 DEBUG (MainThread) [homeassistant.components.rflink] passing event to light.rf_konnektor_a
2021-10-06 18:52:38 DEBUG (MainThread) [rflink.protocol] received data: 20;2C;AB400D;ID=50;SWITCH=1;CMD=OFF;
2021-10-06 18:52:38 DEBUG (MainThread) [rflink.protocol] got packet: 20;2C;AB400D;ID=50;SWITCH=1;CMD=OFF;
2021-10-06 18:52:38 DEBUG (MainThread) [rflink.protocol] decoded packet: {'node': 'gateway', 'protocol': 'ab400d', 'id': '50', 'switch': '1', 'command': 'off'}
2021-10-06 18:52:38 DEBUG (MainThread) [rflink.protocol] got event: {'id': 'ab400d_50_1', 'command': 'off'}
2021-10-06 18:52:38 DEBUG (MainThread) [homeassistant.components.rflink] event of type command: {'id': 'ab400d_50_1', 'command': 'off'}
2021-10-06 18:52:38 DEBUG (MainThread) [homeassistant.components.rflink] entity_ids: ['light.rf_konnektor_a']
2021-10-06 18:52:38 DEBUG (MainThread) [homeassistant.components.rflink] passing event to light.rf_konnektor_a

rf-konnektor.png

Ezt az egészet egy mezei villanyszerelő boltból beszerzett dobozban helyeztem el. A jobb vétel miatt rézdrótból készítettem egy antennát, aminek elkészítési módja megtalálható a neten egy gyors google kereséssel. A végső állapot még a vállalható szinten maradt így is :)

img_20210925_172934.jpg img_20210925_173000.jpg

 

 

ESP32 (Bluetooth - Wifi Gateway) + HomeAssistant + ESPHome + Xioami Mija LYWSD03MMC

Sokszor találkozok a témával, hogy az "olcsó" kijelzős Xioami Mija LYWSD03MMC hő és páratartalom szenzorok hogyan integrálhatók okos otthonokba. Mivel tényleg jó áron lehet hozzájuk jutni, ezért rendeletem párat, aztán az integrálását csak megoldom valahogy, hisz a google a barátom :)

img_20211005_183423.jpg

Segítségül is hívtam és elég gyorsan rátaláltam a bitekmindenhol blogra (https://bitekmindenhol.blog.hu/2020/12/19/az_esp32_es_a_ble_homerok), ahol már kész megoldást kínáltak. Mázlimra volt itthon a fiókban egy ESP32 D1 mini modul, a leírás alapján fel is töltöttem rá a firmware-t és HA alá mqtt-n jöttek is az adatok. Boldog is voltam kb. 2 napig, amikor megállt az adat küldés. Nem gond, újraindítottam az ESP-t, de 2 nap után ismét megállt és stabilan csak 2-3 napot bírt reboot nélkül, így új megoldás után kellett néznem. Az átmeneti időszakra beraktam egy cron jobot, ami minden nap újraindította az eszközt. Íme a script:

cat espeasy-restart.sh

#!/bin/bash

cd /tmp
curl http://espeasyblegw-ip/?cmd=reboot &

A megoldás pedig ott lapult a HomeAssistant-ban, jobban mondva a Supervisor alatt, ami nem más, mint az ESPHome addon :) Nincs más teendőnk, mint telepíteni, ha nem lenne még fenn.

ha-esphome-addon01.PNG

Telepítést követően az addon weblapját elindítva, az oldal alján lévő bazi nagy zöld + -ra kattintva, hozzuk létre a leendő WiFi-Bluetooth Gatewayünk alapjait.

ha-esphome-addon02.PNG

Második lépésként szükségünk lesz néhány adatra, hogy be tudjuk állítani az ESP32-n futó ESPHome-ot, hogy gyűjtse nekünk a szükséges adatokat a Mijáról. Ehhez látogassuk meg a https://atc1441.github.io/TelinkFlasher.html weboldalt. Az oldalon kattintsunk a Connect gombra, melynek hatására (ha engedjük neki, akkor kereső módba kapcsolja az eszközünk bluetooth modulját és) megjelenik a listában a mijánk.

find-device-1.png

Párosítás követően kattintsunk a "Do Activation" gombra, hogy megszerezzük a "Mi Bind Key"-t.

find-device-2.PNG

Ha ez megvan, akkor vissza a HomeAssistant ESPHome bővítményéhez és írjuk meg a konfigot az alábbiak szerint. (Szándékosan képként illesztettem be, hogy ne csak CtrlC+CtrlV bűvészkedés legyen, megmaradjon a hibafaktor ;) )

ha-esphome-addon03.PNG

Miután megvan a konfig, mentsük el és ellenőrizzük, hogy nem gépeltünk -e el valamit. Ha minden stimmel, akkor nincs más hárta, mint az install. Mivel most fogjuk először feltölteni a firmwaret az ESP32-re, így az OTA update nem játszik, marad a manuális megoldás.

ha-esphome-addon04.PNG

A sikeres firmware fordítást követően automatikusan letöltésre kerül a feltöltendő bináris.

ha-esphome-addon06.PNG

A firmware feltöltésre az ESPHome flasher alkalmazást használom, ami beszerezhető githubról. https://github.com/esphome/esphome-flasher/releases/tag/v1.3.0

esphome-flasher.PNG

A feltöltést követően a HomeAssistantban az ESPHome addon alatt onlinera vált a létrehozott eszközünk (és innentől kezdve már OTA-n keresztül is el tudjuk végezni a firmware feltöltést). A logjaiban látszik, hogy kapcsolódik a beállított WiFi AP-hoz, elkészül a gyűjtő rész és létrehozásra kerül az MQTT topic is.

ha-esphome-addon08.PNG

Kis várakozást követően már a HomeAssistant Entitásai között üdvözölhetjük a gyári firmware-n hagyott Xioami Mija LYWSD03MMC hő és páratartalom mérőnk adatait.

ha-esphome-addon07.PNG

Ezt követően már csak a dobozolás maradt hátra, amihez egy elhalálozott kerti világítás tetejét használtam fel, mert abba pont elfért az ESP32 D1 mini:

img_20211005_180326.jpg

A tápja egy mezei töltő, ami 5V 700mA-t tud, de ennek ennyi elég is (3 hónapja megy stabilan)

img_20211005_180242.jpg

Egy 10x10-es ház közepén helyeztem el, így a házon belüli eszközöket pont eléri, így most 8db Mija adatait gyűjti.

süti beállítások módosítása