Ugyan az ESPHome régóta, a Tasmota pedig mostanában már támogatja a Bluetooth-os Xiaomi hőmérőkből történő adatkinyerést, igazából nem találtam Domoticz-barát megoldást, amit ESP32-re tudnék tenni.
Raspberry PI-n, vagy x86 PC-n persze könnyen használhatóak az RPIEasy BLE pluginok, aminek a Domoticz integrációja teljeskörű a kezdetektől - ami nem véletlen, mivel egy Domoticz használó fejleszti. :)
A microPython jó ideje támogatja az ESP32-t, és már egy éve is kérdezték tőlem, hogy ugyan miért nem fut az RPIEasy Python3 alapú program microPython alatt, ami szintén Python3 alapú.. nos a kettő nem egészen ugyanaz, a mikrovezérlőkre szánt microPython-ból természetesen sokmindent kihagytak annak érdekében, hogy képes legyen egy alacsony erőforrású eszközön futni. Alapvetően Raspberry-s vagyok, így nem is nagyon voltam motivált a kód átírásában, de idővel csak összeállt egy működő változat, és legnagyobb meglepetésemre tűrhető sebességgel fut az ESP32-n is, ez lett az mPyEasy. Persze a PSRAM nélküli WROOM-on hamar elfogyhat a memória, ha sok dolgot bekapcsolunk, de az ESP32 WROVER-en rengeteg erőforrás van. Alap dolgokra a WROOM is elég lehet. Időközben az ESP32 vezetékes LAN-ra csatlakoztatása is felkeltette az érdeklődésemet, erről már írtam is pár gondolatot:
Így néz ki:
Mivel az RPIEasy-ből lett "backportolva" a kód, ezért természetesen 100%-ig Domoticz-barát, akár HTTP/MQTT protokollon. Minden plugin azért nem lett betéve, csak az alapok - amiket gyakran használok :). Különösebb akadálya nincs egyébként a többi fejlesztésének sem, csak az idő az, ami mindig kevés.
Jelenlegi képességek:
- szokásos webes felület
- ESPEasy szabályok támogatása
- Idő szinkronizálás NTP-n
- Idő szinkronizálás I2C RTC chip segítségével (DS1307, DS3231, PCF8523)
Adatjelentő kontrollerek:
- Domoticz HTTP
- Domoticz MQTT (MQTT/MQTTS)
- ESPEasyP2P
- Generic MQTT (HA, Openhab, stb...)
- LoRa (sx1272 spi chippel)
Üzenetküldő pluginok:
Pluginok:
- Egyszerű GPIO bemenet
- Analóg bemenet
- DS18b20 hőmérő
- DHT11/DHT22 hőmérő
- BH1750 lux mérő
- Si7021/HTU21d hőmérő
- SSD1306 I2C OLED kijelző
- Rendszerinfó
- BME280/BMP280 hőmérő
- Egyszerű GPIO kimenet
- Neopixel / WS2812 LED vezérlés
- TCP/IP Ping
- ESP32 Touch bemenet
- Xiaomi BLE Mijia (kerek) hőmérő
- MiFlora növényszenzor
- Xiaomi LYWSD03 (négyzet) hőmérő
- BLE Xiaomi Sniffer (LYWSD02, CGQ, CGG1, MiFlora, ATC firmwares LYWSD03)
Telepítés
Először is töltsük le a binárist a hivatalos kiadási oldalról:
https://github.com/enesbcs/mpyeasy/releases
A ZIP fájlt kicsomagoljuk, és a bin állományt kell feltöltenünk.
Mivel ez egy normál MicroPython firmware, a microPython-ról szóló cikkben írt esptool módszerrel is feltölthetjük, vagy Thonny-val közvetlenül, ha betallózzuk a bin állományt:
Az "Erase flash before installing" pontot célszerű bepipálva hagyni első feltöltésnél, hogy ne maradjanak korábbi firmware-ekből esetleg zavaró dolgok az adatpartíció helyén, ami megakaszthatná a bootolási folyamatot. Ha mpyeasy volt rajta korábban is, akkor a törlés opció kihagyandó.
Feltöltés után automatikusan újraindul az eszköz és egy "mpyEasy" nevű WiFi AP fog megjelenni, jelszava "configesp". Böngészővel a 192.168.4.1 címre látogatva a Config menüpontban megadhatjuk saját WiFi AP-nk nevét és jelszavát.
Ne felejtsük el bepipálni az "Enable Wifi STA mode" jelölőnégyzetet sem a lent található Submit-ra kattintás előtt. Majd indítsuk újra, és immár a saját hálózatunkon levő IP címén keresztül menedzselhetjük az eszközt egy böngészővel. Újraindítás után már saját hálózatunkon láthatjuk az eszközt.
Használat
A Controller menü alatt vegyük fel a Domoticz MQTT-t, és állítsuk be a már működő MQTT szerverünk IP címét. (Domoticz alapok)
A BLE eszközök keresését a Tools menü alatt tudjuk elérni:
A BLE Scan-re kattintva várjunk türelmesen, az aktív keresést nem igazán támogatja egyelőre a microPython - jobban mondva de, a támogatás megjelent, csak nem ad vissza semmit az aktív kereső - így passzív módon hallgatja a BLE forgalmat, majd kiadja az elérhető eszközök címeit. Sajnos a passzív kereső a neveket nem tudja, remélhetőleg az aktív keresés hamarosan teljes értékű lesz..
Ha megvan az eszközünk, kimásoljuk a címét, majd a Devices menüben a Edit-re kattintva hozzáadunk egy BLE Xiaomi sniffer típusú eszközt, beírva a címet és kiválasztva a mezőket, amiket szeretnénk megjeleníteni. A már korábban Domoticz-ban előkészített (lásd Domoticz alapok) hőmérő eszköz IDX-ét is beállíthatjuk ugyanitt, a kívánt frissítési idővel együtt.
Kb egy percen belül elkezdenek feltünedezni a mért értékek is a webes felületen: (ha mégsem, indítsuk újra az ESP32-t, vagy tegyük közelebb a BLE eszközhöz)
És amennyiben a Controller beállításunk helyes, és az IDX létezik, a Domoticz oldal fogadja MQTT-n az értékeket:
Az eljárás kísértetiesen hasonlít az RPIEasy-ben levőhöz, de azért gondoltam egy rövid ismertetőt megér.
Külön kiemelném ismét, ha nem lett volna egyértelmű:
- a passzív szkennelést lehetővé tevő Xiaomi Sniffer plugin kizárólag a LYWSD02, CGQ, CGG1, MiFlora, ATC típusokkal működik! A LYWSD03-at előbb meg kell okosítani a nyílt forrású ATC firmware-el, mielőtt használni lehetne!
A bejegyzés trackback címe:
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.
l0v4szl 2021.01.10. 14:43:22
Először is köszönöm a cikket, mert pont ezt szerettem volna megvalósítani, ill már működött rpieasy-vel, de kellett másra a zero, ezért egy régóta porosodó esp-wroom32-re költözött a xiaomi project a leírás segítségével.
Két kérdésem elnne, valóban 52kb van szabadon (három hőmérőt figyel), feltételezem ezért lehet, hogy naponta 1x elveszti az összes érzékelőt, majd hosszabb adásszünet után rebootol az aesp, utána megint jó egy darabig.?
Másik egy korábbi cikkben volt szó erről "Viszont ha elhagyjuk a Python nyelv egyik előnyét rejtő interpreteres megközelítést, spórolhatunk az erőforrásokkal." Erről esetleg van valahol egy bővebb leírás, hátha tudnék spórolni némi memóriát.
Köszönöm!
eNeS 2021.01.10. 17:04:48
Mivel nyilván a binárist flashelted fel a WROOM-ra, ami kint van a projekt oldalon, te már nem interpreteres módban használod a programot, hanem előfordított .mpy objektumfájlokból. Ugyanis interpretálva 120kb memóriát használ, ami a WROOM-ban nincs is, csak WROVER-el használható interpreter módban az mPyEasy.
l0v4szl 2021.01.12. 20:25:48
Akkor várok türelemmel, de így is elég jó, főleg hogy felszabadult használatával egy pi zero-m.
Köszi, mégegyszer!
knisa 2021.01.27. 10:23:11
Sajnos a Google nem volt a barátom. Sokat keresgéltem a "Xiaomi" Youpin Cleargrass Qingping Bluetooth/Wifi Gateway (www.qingping.co/bluetooth-gateway/overview , xiaomi-mi.com/sockets-and-sensors/qingping-bluetooth-gateway/) integrálhatóságáról Domoticz alá. Van ezzel kapcsolatban esetleg tapasztalatod? Vajon itt is működhet a token kinyerés, mint a zigbees huboknál?
Köszönettel: István
eNeS 2021.01.27. 18:20:34
community.home-assistant.io/t/xiaomi-cleargrass-bluetooth-gateway/148025/36
De orosz barátaink legalább a ronda ház helyett megmutatták hogy lehetett volna ezt jobban is megtervezni:
lock.3dn.ru/news/dorabotka_shljuza_xiaomi_cgspr1_bluetooth_wi_fi_gateway/2020-08-23-192
knisa 2021.01.27. 19:57:19
djsms 2021.02.02. 18:05:33
eNeS 2021.02.02. 18:08:49
djsms 2021.02.08. 18:43:32
eNeS 2021.02.08. 18:51:05
djsms 2021.02.09. 18:02:13
eNeS 2021.02.09. 18:04:38
djsms 2021.02.09. 19:11:59
eNeS 2021.02.09. 19:15:56
djsms 2021.02.10. 17:33:04
eNeS 2021.02.10. 17:36:37
djsms 2021.02.15. 13:58:44
djsms 2021.02.15. 14:37:45
Szuper lett a cucc, megy a kv ;)
eNeS 2021.02.15. 17:27:08
www.letscontrolit.com/forum/viewtopic.php?f=28&p=50512&sid=135f6544799c926068c7bdb9b2a4a608#p50512
djsms 2021.02.18. 12:23:48
eNeS 2021.02.18. 17:20:23
eNeS 2021.02.18. 17:32:24
eNeS 2021.02.18. 18:07:10
youtu.be/skAJPEDscBw
MQTT kontroller a Domoticzos? Megnézem közelebbről.
djsms 2021.02.20. 22:31:04
eNeS 2021.02.20. 22:36:52
knisa 2021.03.21. 17:51:09
eNeS 2021.03.21. 20:29:03
knisa 2021.03.22. 17:44:02
eNeS 2021.03.22. 17:56:56
eNeS 2021.03.22. 19:08:54
knisa 2021.03.23. 17:17:35
eNeS 2021.03.23. 18:39:03
A Sniffer plugin egy speciális egyed, mivel sok eszköz, különböző értékeit szedi össze, és amikor az adott példányú taszk intervalluma bekövetkezik, a gyorsítótárazott értékeket (amik a legkülönbözőbb időszakokban érkezhetnek) továbbítja a kontrollernek. Mindegyiknek van egyébként timestampje is, ami a Thonny konzolban látható is, debug céljából.. olyan megoldást tudok elképzelni, hogy amennyiben egy érték nem frissül mondjuk 5 vagy 10 percig, akkor az törlésre kerül, de ezt az elévülési időt azért jól meg kell fontolni.
Nehéz élettartam becslésekbe bocsátkozni, mivel az aktív lekérdezés energiaigénye egyenes arányban függ a napi lekérdezések számától, a passzív lekérdezés viszont konstans energiaigényű. Ha azt mondom, hogy 20mA-t fogyaszt nyugalomban a BLE eszköz és 140mA-t amikor aktívan ad, abból tudsz saccolni?
eNeS 2021.03.23. 19:31:19
knisa 2021.03.23. 19:34:05
knisa 2021.03.23. 19:35:53
knisa 2021.03.26. 09:31:55
ESPEasy-ban működik a következő kód:
On Clock#Time=All,**:** Do
If %uptime%>111
Reboot
EndIf
EndOn
MypiEasy-ban nem indult újra a szerkezet. Máshogy kell ezt megoldani?
Bizonyos időnként újra kell indítani a cuccost, mert nem frissít rendesen a Domoticz felé.
Köszönettel: István
knisa 2021.03.26. 12:48:26
knisa 2021.03.26. 12:52:38
eNeS 2021.03.26. 17:01:52
l0v4szl 2021.04.27. 21:33:47
knisa 2021.05.03. 16:51:50
Viszont nem szeret engem az IP cím beállítás. Rögtön az első beállításkor fix IP-t adok, minden paraméterrel , DHCP pipa kivéve, mégis csak DHCPvel működik.
kepkezelo.com/images/7suxbd3f9m6y86pdjqpe.jpg
Köszönöm.
eNeS 2021.05.03. 16:53:39
novamaxx 2021.09.18. 19:07:44
Először is hatalmas köszönettel tartozom a munkádért.
Én egy Lolin32 Lite-ra (4MB) tettem fel az mPyEasy 1.0.008 beta verziót.
Két LYWSD03 és egy MiFlora csüng rajta, hibátlanul.
Egyetlen gondom, hogy egy IDX alá a Domoticzban nem lehet 4 értéket betenni (lásd MiFlora: fény, hő, nedvesség, tápanyag), de van egy Rule, amivel MQTT-n a maradék 3 értéket külön IDX-ekhez rendelheted, és ha létre is vannak hozva megfelelő típusú Dummi szenzorral, akkor értéket is mutatnak majd. Korábban így működött egy EspEasy-s cuccom, de persze, hogy elkevertem a sok motyóm közt és most nem tudom kinyerni belőle.
Mindenesetre nekem az nem sikerült, hogy a 4 értéket egy-egy IDX-hez egyesével rendeljem hozzá. Csak a hőmérsékletet mutatta így, a többi nullás volt.
Ha sikerül a Rule-os dolog, jelentkezem.
Még egyszer 1000 köszönet!