Bluetooth hőmérők Shelly Gen2 átjáróval

Korábban írtam már az ESP32 és a BLE hőmérőkről, ott egy saját micropythonos megoldásomon keresztül mutattam be a dolgot.

bletherm01.jpg

De miért is jó a BLE?

A Bluetooth Low Energy kifejezetten az alacsony fogyasztásra fókuszál, így egyáltalán nem meglepő, hogy ezekben az eszközökben ritkábban kell elemet cserélni. Feltéve, hogy megfelelően használjuk őket. Amikor ugyanis aktív módban keresünk, vagy kapcsolódunk direktben az eszközhöz, átmenetileg megnő a fogyasztása, illetve nem is tud más kapcsolódni hozzá, amíg le nem kapcsolódunk, mert a Bluetooth 1:1 kapcsolat. (ez okozza például, hogyha valaki rákapcsolódik a telefonjával a hőmérőre bluetooth-on keresztül, attól a hőmérőtől nem fog adat érkezni a gateway-re, amíg le nem kapcsolódik, szóval ha valamiért olyanokkal kell egy fedél alatt élnünk, akiknek passziója, hogy bluetooth hőmérőkre kapcsolódnak a telefonjukkal, akkor vagy zigbee hőmérőket vegyünk inkább, vagy távolítsuk el az illetőt)
A sokkal praktikusabb passzív módban 6 hónap - 1 év elem élettartamot írnak például a legolcsóbb LYWSD03 típusra - megfelelő firmware-el. További érdekesség, hogy az aktív módú csatlakozásnak kisebb a hatótávolsága, nekem egy falon keresztül még éppen megy, de nem mindig - ellenben passzív módban a mérési adatok egy födémen és két falon keresztül is átjutnak, amin nagyokat csodálkoztam, mert a WiFi se nagyon megy el addig.

A megfelelő firmware alatt természetesen nem a gyárit értem... Először az ATC kiadás érkezett meg több típushoz, de ez már 2022 óta nemigen van támogatva:

https://github.com/atc1441/ATC_MiThermometer 

Ami jelenleg is aktív fejlesztés alatt áll, az a pvvx változat:

https://github.com/pvvx/ATC_MiThermometer

Mielőtt nekiesnénk, csak szólok (bár számomra magától értetődik), hogy amelyik Xiaomi eszköznek lecseréljük a firmware-ét, az többet nem fog megjelenni a gyári gateway-eken és a telefonos applikációban sem. Mondjuk én nem is használok ilyeneket. :D

A firmware feltöltése nem túl bonyolult, On-The-Air történhet, egyszerűen böngészőből. A régi flasher is működik még:

https://atc1441.github.io/TelinkFlasher.html

Ám ajánlom az új használatát, amennyiben üzemel a böngészőnkben, és felismeri a BLE eszközöket a közelben:

https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html

atc02.jpg

Rákattintunk a Connect-re, kiválasztjuk az eszközt, érdemes közel menni ahhoz amit szeretnénk frissíteni, vagy kivenni az elemet a többiből, jöhet a Do Activation gomb (gyári firmware esetén), kitallózzuk a firmware fájlt, amit már letöltöttünk előre (a pvvx-nél nem kell letölteni, felajánlja a megfelelő típusokat, csatlakozáskor), rányomunk a Start flashing-re és várunk egy fél percet türelmesen. Újraindulás után immár ATC_xxx néven fog látszani eszközünk, a beállításait szintén a TelinkMiFlasher-ben tudjuk elérni és finomhangolni.

atc03.jpg

Működik egyébként PC-n is, én Chrome-al próbáltam, de nem mindig sikerül elsőre csatlakozni az eszközhöz, javaslom e helyett telefonon keresztül meglátogatni a fenti oldalt, ez már csak azért is praktikus, mert azon mindig kéznél van a Bluetooth és könnyebb közelebb menni a hőmérőhöz is vele, mint egy PC-vel. Mert a firmware cseréhez direkt kapcsolat kell (nem árt egy 40% feletti elem is!) és bizony az egy falon keresztül már macerás tud lenni.

Éles szeműek láthatták, hogy immár Zigbee firmware is elérhető három BLE típushoz is, ezeket akkor tudjuk feltenni, ha már a gyárit lecseréltük pvvx firmware-re. Azt viszont érdemes átgondolni, hogy a zigbee firmware-től csak 5 percenként kapunk jelentést, és jobban fogyasztják az elemet... De persze ilyen olcsó kijelzős zigbee hőmérőt nem lehet kapni a piacon, így biztosan van, aki rászánja magát, nekem a BLE teljesen megfelel. (itt szúrnám közbe, hogy az eredetileg is zigbee SNZB-02D tizedik hónapja megy nálam és 60% az eredeti eleme)

Node ennyit magukról a hőmérőkről, beszéljünk kicsit arról, hogyan kapunk adatokat tőlük. Gyárilag ugye van hozzá saját gateway, nagyon remek, felhős. Hagyjuk is.
DIY megoldásként általában vagy ESP32-vel szoktak egy úgynevezett BLE Gateway eszközt készíteni, vagy egy USB Bluetooth dongle segítségével egy PC-t/szervert használni átjárónak, amikről a bejövő adatokat aztán egy központi rendszer rögzíti, illetve akciókat végez a beérkező adatok alapján. Ez lehet akár a Homeassistant, vagy esetemben a Domoticz.

Például az alábbi szoftverekkel tudjuk a Bluetooth adatokat gyűjteni és továbbítani:

  • mPyEasy: ESP32-re készült, aránylag kevés eszközt támogat, egyszerű MQTT kapcsolatot tud.
  • RPIEasy: Raspberry-re készült, de normál PC-n, miniPC-n is futó program, BLE USB stickel működik, hátránya, hogy aránylag kevés eszközt implementáltam bele, a telepítése pedig a Python alapok miatt kezdők számára nem túl egyszerű. MQTT Autodiscoveryt ez is támogat immár, és van webes felülete.
  • Tasmota: ESP32-re. A webes felületén elérhető minden, ha más nem, hát konzolban, egészen jól dokumentált, tud MQTT Autodiscoveryt is (bár 12-es verziótól ehhez saját binárist kell fordítani), Domoticz-al is remekül együttműködik, jó az eszköztámogatása, és alapvetően passzívan várja az adatokat. Nem kell kézzel beírni a hőmérők címeit, de szűrhetjük azokat, ha akarjuk.
  • ESPHome: ESP32. nemigen van webes felülete, központilag jól menedzselhető, kár hogy az MQTT autodiscovery integrációban ugyanazzal az egyedi azonosítóval küldi ki az ÖSSZES megtalált BLE hőmérő adatait a ble_tracker, így a Domoticz csak egy hőmérő eszközt vesz fel.. így ez nem túl használható. Számomra legalábbis. Nyilván HA-val, ha nem MQTT-vel, hanem a dedikált integrációjával használja valaki, annak megy.
  • OpenMQTTGateway: ESP32. Nemigen van bármi hasznos beállítási lehetőséggel rendelkező webes felülete, MQTT-n keresztül menedzselhető, MQTT Autodiscoveryt támogat, egyébként Domoticz-al is egész jól megy... ellenben az alapértelmezett "Adaptív keresés" funkciója beiktat aktív keresést is, szerintem túl sűrűn, bár elvileg lejjebb lehet venni, nekem nem sikerült, így pedig ez nem túl elembarát. Pozitívum, hogy rengeteg eszközt támogat, és automatikusan megtalál mindent, nem kell yaml fájlba irogatni kézzel a MAC címeket, mint az ESPHome esetén. Ha le lehetne beszélni az aktív keresésről, még tetszene is. Sokkal inkább, mint az ESPHome.

Sok egyéb megoldás létezik még, én személy szerint az RPIEasy és a Tasmota opciókat szoktam választani, ám nem akarok senkit meggyőzni arról, hogy ezek a jók, ellenben elértem a cikk tulajdonképpeni témájához: ajánlok egy új megoldást!

Ugyanis a Shelly Gen2 eszközei immár ESP32 alapúak és van bennük Bluetooth támogatás, illetve egészen jól szkriptelhetőek. Mondjuk a Javascript nem nagy kedvencem, akkor már inkább a Berry, de ez nem lehetett akadály, el is készítettem hát a Shelly szkriptet, ami passzív módon hallgatja a BLE forgalmát, és ha támogatott csomagokat észlel, azt továbbítja MQTT-n, illetve be is regisztrálja az eszközt Autodiscovery-vel. Ha pedig úgyis van egy Shelly-nk, miért is ne használjuk akár erre is?

Ha van Gen2 Shelly eszközünk, ami nem elemes, akkor nyissuk meg a konfigurációs oldalát böngészővel:

shp01.jpg

A Scripts/Add script gombra kattintva tudunk új szkriptet hozzáadni.

shp02.jpg

Elnevezzük, beillesztjük az alábbi oldalon található szkriptet a törzsbe, és elmentjük (Save) majd elindítjuk.(Start)

https://github.com/enesbcs/shelly-script-examples/blob/main/ble-pasv-mqtt-gw.js

Az előző képen látható 'ble_pasv_gw_mqtt' a szkript neve, ahogy én mentettem el, és e mellett jobbra látható egy kapcsoló, ha arra kattintunk, a szkript automatikusan el fog indulni a Shelly újraindulásakor. Azt ugye mondanom sem kell, hogy a Settings/Bluetooth settings alatt a Bluetooth legyen engedélyezve?

A szkriptben két beállítás van, az 'mqtt_topic' -ba beírhatjuk a blegateway/ helyére, hogy hová szeretnénk, ha küldené a kinyert adatokat a szkript, a 'discovery_topic' pedig az a hely, ahová a konfigurációs objektumokat beküldi, Retain flag-el.
Olyan beállítási lehetőség nincs benne, hogy csak bizonyos MAC címekről továbbítson adatot, mindent küld, amit lát. De van az a pénz... :D

Sőt, aki netán lokálisan szeretne a hőmérő adatai alapján valami akciót végezni a Shelly-ben, a fenti szkript módosításával megteheti, ha megtalálja ezt a sort a kódban:

mqttreport(res.addr, res.rssi, hdr)

A res.addr tartalmazza a hőmérő címét, a hdr pedig egy szótár, amiben pl a hdr.temperature és hdr.humidity tartalmazza az adatokat. Az Allterco github-ján pedig sok példa található a relék aktiválásától a telegram integrációig.

Az ismert protokollok az ATC, PVVX, Xiaomi-Mijia és a BTHome v2, mind titkosítás nélkül, természetesen.

Na most erre lehet, hogy felszaladt a szemöldöke néhány embernek, mi az, hogy titkosítás nélkül, ezt bárki láthatja? Bizony-bizony, ez a passzív adatszórás lényege, hogy amíg a hatótáv és a falak engedik, ezt bárki látja. Van Encrypt opció az egyedi firmware-ben, illetve a gyári megoldások is már titkosítják az adatot, de tényleg az a legnagyobb problémánk, hogy a szomszéd láthatja, hány fok van a nappalinkban? Én ettől nyugodtan alszom.
Az már lehet probléma, ha a szomszéd olyan vicces gyerek, aki unalmában MAC klónozással olyan kütyüt készít, ami más hőmérséklet-adatokat szór a mi hőmérőnk MAC címével BLE-n (valószínűtlen, de nem elképzelhetetlen), és mi erre alapoztuk a fűtési rendszerünket.
Nekem mondjuk a termosztátomnak saját hőmérője van, és azt használja, ha nem vagyok otthon, így ezzel nem tudnak megfogni. Ha pedig otthon vagyok, akkor jelenlét alapján az aktuális szoba BLE hőmérőjét használja, de mivel ilyenkor otthon vagyok, látni fogom, ha valami gond van. :)

Az igazi biztonsági probléma az, amiről senki sem beszél, és semmilyen titkosítás nem véd ellene, ugyanis a TELinkFlasher -rel bárki átprogramozhatja a mi hőmérőnket, ha megfelelő fizikai közelségbe kerül. Családi háznál, ahol vastagak a falak, esetleg kert is van a ház körül, ez nyilván nem probléma, hiszen illetéktelen nem jut 5 méternél közelebb a hőmérőhöz, ám ha tartunk ilyen jellegű támadástól, inkább maradjunk a gyári firmware-nél vagy zigbee megoldásnál. Lakótelepi lakásban könnyen a szomszéd hőmérőjét programozhatjuk véletlenül a fal másik oldalán. :D

A Domoticz-ban engedélyezve az MQTT Autodiscovery hardvert, 1-2 perc után máris előkerült automatikusan minden BLE hőmérőm, bármilyen egyéb manőver nélkül, annyit kell csak tennem, hogy elnevezem őket, mivel a passzív módban nem küldik a nevüket, így ott nyilván csak a MAC cím szerepel automatikusan.

domo_atc.jpg

A bejegyzés trackback címe:

https://bitekmindenhol.blog.hu/api/trackback/id/tr8118263553

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.

Támogatók:
okosotthon.jpg
allterco.jpg

Utolsó kommentek

  • szenorb: Hello. Bekötöttem 12V-ra , a bemetére egy mozgás érzékelőt kötöttem. Szépen kapcsol a relé a késle... (2023.06.14. 06:48) Shelly okosrelé (Shelly1)
  • Melanoheliophobia: Üdv! Kb. 2 éve vásároltam két ugyanilyen okos izzót. Sajnos az egyik még garancia idő alatt eltávo... (2023.05.03. 16:50) Shelly Vintage okosizzó
  • eNeS: Lehetséges, bár az ESP8266-ot lassan ideje elfelejteni, ha nem helyi hálózatra akarsz vele forgalm... (2023.04.02. 08:43) Tasmota szkriptek
  • eNeS: @tomih: Thonnyban rebootot nyomva nekem se megy az NTP. De mikor lekapcsoltam a Thonnyt és rebooto... (2023.04.02. 08:40) Raspberry Pico és a LAN (W5100S-EVB-Pico)
  • krump_lee: Kedves eNeS! ESP8266 tasmota-val szenvedek, hiemq kapcsolat sehogy nem jön össze, sehol nem talál... (2023.04.02. 08:31) Tasmota szkriptek
  • Utolsó 20

Címkék

433mhz (12) alkatrész (22) alternatív kapcsoló (2) amg8833 (1) analóg (2) android (1) arduinoeasy (5) audio (1) automatizálás (3) bemenet (3) bk7231n (1) ble (1) blitzwolf (4) bluetooth (9) bridge (2) camhi (2) csináld magad (22) dimmer (1) diy (28) do-it-yourself (27) domoticz (11) ds18b20 (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (11) esp8266 (21) espeasy (2) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) fogyasztásmérő (5) ftdi (1) füstérzékelő (1) gázérzékelő (1) gpio (1) hang (4) hangjelző (1) hőmérséklet (22) https (1) ikea (1) impulzus relé (1) izzó (2) javascript (1) jelenlétérzékelő (3) kamera (18) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (21) konnektor (8) lan (9) lángérzékelő (2) led (3) linux (4) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) micropython (1) mikrovezérlő (2) milkv (1) mobil (1) mosfet (1) mozgás (5) mpyeasy (4) mq-2 (2) mqtt (3) működtető rendszer (5) multiroom (1) nedvesség (1) neo (1) neopixel (1) Node-RED (1) nvr (4) nyitás (7) okosház (4) okosizzó (3) okosotthon (8) oled (1) onvif (8) openbeken (1) opencv (1) openwrt (4) orange pi (4) páratartalom (6) php (1) pico (1) pi pico (2) poe (1) programozás (9) projekt (25) proximity olvasó (1) python (2) raspberry (14) raspberry projekt (6) raspbian (1) reed (1) relé (27) rf (2) rgb (6) rock pi (1) rögzítő (2) rp2 (1) rpieasy (1) rtc (1) shelly (24) smartwise (1) solid state relay (1) sonoff (20) SonOTA (1) soros (1) ssl (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (3) szünetmentesítés (4) t1 (1) tasmota (8) távirányító (3) Telegram (1) termékteszt (85) termosztát (2) touch (2) ups (5) usb (7) usb hub (1) valós idejű óra (1) vezérlések (20) vezérlő (5) világítás (5) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (32) ws2812 (1) xiaomi (5) xm (4) xmeye (4) yoosee (1) zigbee (16) zwave (3) Címkefelhő
süti beállítások módosítása