A Xiaomi tagadhatatlanul jó árú (Zigbee kompatibilis) termékekkel lepte el a piacot a közelmúltban. Bár nem vagyok az elemmel működő cuccok nagy barátja, ennek ellenére a Xiaomi ultra-mini hőmérője még engem is meggyőzött, hiszen formatervezett és kicsi.
Két hibáját találtam: az egyik, hogy nem ad magáról adott időközönként életjelet, hanem csak adott százaléknyi változáskor küld mérési eredményt, a másik, hogy kell hozzá a saját Xiaomi Gateway. Amivel nem is az ára lenne a visszatartó erő, mert nem drágább, mint egy Raspberry Pi 3, de kötelező és kikapcsolhatatlan módon Felhőn keresztül kommunikál. A blog visszatérő olvasói nyilván tisztában vannak már azzal, hogy én inkább a Felhőtlen szórakozás híve vagyok... Úgyhogy akik a Xiaomi Gateway-re, Felhőre és applikációra kíváncsiak, azok a XiaomiBlog-on olvassanak tovább, itt ilyesmiről nem lesz szó - maximum a hiányukról.
A Zigbee alapvető működését már elemezgettem a Vezeték nélküli kommunikációs formák című írásomban, és bár a Z-Wave-et több szempontból jobbnak tartom, viszont jelentősen drágább is, és mivel ennyire azért nem vagyok eleresztve anyagilag, maradok az "olcsó hús"-zigbee megoldásnál, ami persze a mesh képessége miatt még mindig valamivel üzembiztosabb a normál, WiFi-n csatlakozó eszközöknél. (habár ugyanazokat a frekvenciákat használja a Zigbee is, mint a normál WiFi)
Persze találkoztam más, bizalomgerjesztő Zigbee eszközzel is mindenfelé a neten bolyongva, így bizakodva olvastam a Zigbee2MQTT projektről, ami lehetővé teszi, hogy a gyártó Gateway-e nélkül használhassunk ilyeneket, és egyszerűen muszáj volt kipróbálnom. (e projekt létezése és népszerűsége egyben megnyugtat a felől, hogy nem csak engem zavar, hogy minden kínai lomot felhőstől akarnak letolni az ember torkán)
Azt azért tudni kell, hogy a konkurrens Z-Wave szabvánnyal szemben a Zigbee termékek nem minden esetben kompatibilisek egymással 100%-ban, érdemes nagy bevásárlás előtt tanulmányozni a támogatott eszközök listáját.
A Zigbee2MQTT segítségével Home Assistant és Domoticz rendszerbe is beilleszthetjük Zigbee eszközeinket, nézzük is hogyan.
Alapvetően nem sok tételből áll a do-it-yourself Zigbee Bridge:
- Raspberry Pi (Zero W is elég hozzá)
- 8GB microSD kártya
- USB OTG kábel
- USB CC2531 (vagy az antennával is rendelkező, kicsivel drágább, de nagyobb hatótávú CC2530)
- 5V1A DC microUSB tápegység
Zigbee DIY Bridge akció közben, a teszt eszközzel együtt látható
Akinek itt már felcsillanna a szeme, hogy "csak ennyi az egész", le kell lombozzam: nem.
A CC2531 gyárilag egy Sniffer programmal érkezik, ami nem lesz jó nekünk, mivel egy Coordinator képességgel rendelkező eszköz kell ahhoz, hogy fel tudjon épülni a Zigbee Mesh hálózat. De semmi gond, ilyen firmware elérhető, letölthető és "flashelhető" rá, megfelelő eszközökkel. Azt sem árt tudni elöljáróban, hogy a 8kb memóriával bíró CC2531 15 db zigbee eszközt tud fogadni, ami esetleg további router képességű - 230V-ról üzemelő, tehát nem elemes! - zigbee eszközökkel bővíthető. (megj: Ennél azért egy jobb wifi router több eszközt is ki tud szolgálni)
Tehát a fentieken túl szükséges az alábbi két eszköz is (ezekre pontosan egy alkalommal lesz csak szükség, ha van ilyen ismeretségi körünkben, kölcsön is kérhetjük):
Eredeti leírás, képekkel: zigbee2mqtt.io
Aki meg szeretné spórolni a fenti két eszköz árát, és van kedve bonyolítani az életét, van rá alternatív mód, egy Wemos D1 átprogramozása után azt is lehet CC debuggerként használni. Ahogy elnéztem az 1mm-es osztású programozó tűket a CC2531-en, én inkább megvettem a fenti szettet, akinek van kedve kísérletezni, a zigbee2mqtt.io oldalon leírták a szükséges lépéseket.
Ha mindezeket a tételeket összeszámoljuk, azért nem kizárt, hogy nagyobb összeg jön ki, mintha vettünk volna egy mezei Xiaomi Gatewayt, ami ékes mandarin nyelven köszöntene minket és szinte mindig működne, ha van internet kapcsolat és nincs túlterhelve a távoli szerver. Ízlés dolga. :)
UPDATE: CC2538 alapú coordinator hardver
UPDATE2: Külső antennás CC2531 is kapható
UPDATE3: A Sonoff ZBDongle külső antennával
No de nézzük a teendőket!
1. Feltelepítjük az SD kártyára a Raspbiant
2. Feltelepítjük a Domoticz-ot és a Mosquitto-t
3. Felprogramozzuk a CC2531-et
A CC Debugger, a Downloader Cable és a CC2531 Sniffer csatlakoztatása az alábbi kép szerint történjen: (a piros csík a szalagkábelen az 1-es lábat jelenti, lehetőség szerint ne kössük be fordítva...)
Kiemelném, hogy mind a programozót, mind a CC2531-et USB-n rá kell kötni a számítógépünkre a programozás idejére!
Letöltjük a megfelelő Zigbee Coordinator firmware-t innen:
https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator/Z-Stack_Home_1.2/bin/default
Aktuális:
majd kicsomagoljuk a ZIP fájlból.
A konkrét feltöltéshez kell egy alkalmazás is, Windowsra létezik hivatalos program a SmartRF Flash programmer, amit a Texas Instruments-hez beregisztrálva le is tölthet, akinek erre van igénye.
Én maradok a Linuxnál, a cc-tool teljesen alkalmas a flashelésre, az alábbi parancsokkal juthatunk ehhez könnyen, mindenféle regisztrációs plusz körök nélkül:
git clone https://github.com/dashesy/cc-tool.git
sudo apt-get install linux-headers-$(uname -r) build-essential libusb-1.0-0-dev libboost-all-dev
cd cc-tool
./bootstrap
./configure
make
sudo make install
Miután ez megvan, a korábban már letöltött és ZIP-ből kicsomagolt CC2531ZNP-Prod.hex állományt töltsük fel a alábbi paranccsal:
sudo cc-tool -e -w CC2531ZNP-Prod.hex
Erre jó esetben valami ilyesmit kell válaszul látnunk (ha valamiért nem indul meg a zöld villogó LED és nem töltődik fel a program, akkor nyomjuk meg a programozó RESET gombját, vagy csatlakoztassuk újra, győződjünk meg a kábelek helyes csatlakoztatásáról):
Programmer: CC Debugger
Target: CC2531
Erasing flash...
Completed
Writing flash (241 KB)...
Completed (17.95 s.)
Illetve ha mindkét eszközt kihúztuk, majd csak a CC2531-et visszadugtuk az USB csatlakozóba, és beütünk egy "dmesg | tail" parancsot valami ilyesmit illene látnunk:
[4301.156025] usb 2-1.5: Product: TI CC2531 USB CDC
[ 4301.156027] usb 2-1.5: Manufacturer: Texas Instruments
[ 4301.156030] usb 2-1.5: SerialNumber: __0X00124B0019369531
[ 4301.156999] cdc_acm 2-1.5:1.0: ttyACM0: USB ACM device
4. Feltelepítjük a Zigbee2MQTT-t:
Mivel a hivatalos telepítési leírás egyből olyan lépéssel kezdődik, ami ARMv6 architektúrán nem támogatott, ezért itt máris eltérünk ettől, és az alábbi módon töltjük le a NodeJS-t és egyúttal a Zigbee2MQTT-t. (persze mindig az éppen aktuális verziót, a cikk írásakor ez így működött)
wget https://nodejs.org/dist/v9.11.2/node-v9.11.2-linux-armv6l.tar.gz
tar -xzf node-v9.11.2-linux-armv6l.tar.gz
sudo cp -r node-v9.11.2-linux-armv6l/* /usr/local/
sudo apt-get install git
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt
cd /opt/zigbee2mqtt
npm install
UPDATE: az új Zigbee2MQTT már legalább v10-es nodejs-t igényel, ezt az alábbi módon lehet telepíteni:
wget https://nodejs.org/dist/v10.23.0/node-v10.23.0-linux-armv6l.tar.gz
tar -xzf node-v10.23.0-linux-armv6l.tar.gz
sudo cp -r node-v10.23.0-linux-armv6l/* /usr/local/
sudo apt-get install git
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt
cd /opt/zigbee2mqtt
npm install
Ezen a ponton tarthatunk 8-10 perc kávészünetet, míg az install befejeződik. Majd nyissuk meg a konfigurációs beállításokat tartalmazó fájlt:
mcedit /opt/zigbee2mqtt/data/configuration.yaml
Aminek valami ehhez hasonló a tartalma:
homeassistant: false
permit_join: true
mqtt:
base_topic: zigbee2mqtt
server: 'mqtt://localhost'
serial:
port: /dev/ttyACM0
Ha a fenti leírás szerint telepítettünk mindent (1 és 2. pont), akkor a "localhost" beállítás megfelelő, hiszen ugyanezen a gépen fut az MQTT bróker (mosquitto) is.. ha nem így tettünk, akkor nyilván tudjuk mit csináltunk, és be tudjuk írni a megfelelő IP címet a helyére. A "serial" beállításnál módosíthatjuk az USB-re kapcsolt CC2531 portját, amennyiben nem az alapértelmezett ttyACM0 nevet kapta, ezt a fenti dmesg parancs kimenetén egyértelműen láthatjuk. A "permit_join"-t érdemes "true"-ra állítani, amíg párosítjuk eszközeinket, majd után visszaállítani "false"-ra.
Ha sikerült mindent jól beállítanunk, akkor az alábbiak kiadása után:
cd /opt/zigbee2mqtt
npm start
Elindul a zigbee2mqtt. Gyors tesztet végeztem, megnyomtam a Xiaomi Mijia hőmérő egyetlen gombját, az elkezdte a párosítási műveletet.
No, azért nem azonnal, egy kicsit várni kellett azért:
> zigbee2mqtt@1.1.1 start /opt/zigbee2mqtt
> node index.jszigbee2mqtt:info 2019-2-28 22:08:06 Logging to directory: '/opt/zigbee2mqtt/data/log/2019-02-28.22-08-06'
zigbee2mqtt:info 2019-2-28 22:08:10 Starting zigbee2mqtt version 1.1.1 (commit #92d88b6)
zigbee2mqtt:info 2019-2-28 22:08:10 Starting zigbee-shepherd
zigbee2mqtt:info 2019-2-28 22:08:16 zigbee-shepherd started
zigbee2mqtt:info 2019-2-28 22:08:16 Coordinator firmware version: '20190109'
zigbee2mqtt:info 2019-2-28 22:08:16 Currently 0 devices are joined:
zigbee2mqtt:warn 2019-2-28 22:08:16 `permit_join` set to `true` in configuration.yaml.
zigbee2mqtt:warn 2019-2-28 22:08:16 Allowing new devices to join.
zigbee2mqtt:warn 2019-2-28 22:08:16 Set `permit_join` to `false` once you joined all devices.
zigbee2mqtt:info 2019-2-28 22:08:16 Zigbee: allowing new devices to join.
zigbee2mqtt:info 2019-2-28 22:08:16 Connecting to MQTT server at mqtt://localhost
zigbee2mqtt:info 2019-2-28 22:08:18 zigbee-shepherd ready
zigbee2mqtt:info 2019-2-28 22:09:42 Connected to MQTT server
zigbee2mqtt:info 2019-2-28 22:09:42 MQTT publish: topic 'zigbee2mqtt/bridge/state', payload 'online'
zigbee2mqtt:info 2019-2-28 22:15:31 Connecting with device...
zigbee2mqtt:info 2019-2-28 22:15:31 MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"connecting with device"}'
zigbee2mqtt:info 2019-2-28 22:15:34 Connecting with device...
zigbee2mqtt:info 2019-2-28 22:15:34 MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"connecting with device"}'
zigbee2mqtt:info 2019-2-28 22:15:38 Connecting with device...
zigbee2mqtt:info 2019-2-28 22:15:38 MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"connecting with device"}'
zigbee2mqtt:info 2019-2-28 22:15:38 New device with address 0x00158d0002c76eed connected!
zigbee2mqtt:info 2019-2-28 22:15:38 MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"device_connected","message":"0x00158d0002c76eed"}'
zigbee2mqtt:info 2019-2-28 22:15:38 MQTT publish: topic 'zigbee2mqtt/0x00158d0002c76eed', payload '{"temperature":25.46,"linkquality":157}'
zigbee2mqtt:info 2019-2-28 22:15:38 MQTT publish: topic 'zigbee2mqtt/0x00158d0002c76eed', payload '{"temperature":25.46,"linkquality":157,"humidity":43.71}'
zigbee2mqtt:info 2019-2-28 22:16:20 Device incoming...
zigbee2mqtt:info 2019-2-28 22:16:20 MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"type":"pairing","message":"device incoming"}'
Ebből leszűrhető többek között az is, hogy a CC2531-re egy 2019 januári "Coordinator" firmware-t sikerült feltennem, meg azt, hogy a párosítás sikeres volt.
De ez még kevés, a Domoticz-ot ugyan feltettük, de a Domoticz-Zigbee csatoláshoz szükséges plugint még nem.
5. Feltelepítjük a Domoticz PYTHON plugint
Ha véletlenül nem tettük még meg, a kézikönyv szerint telepítsük a python csomagot, mielőtt belevágunk:
https://www.domoticz.com/wiki/Using_Python_plugins
Ha a Python 3.8-as verzió a kurrens a rendszerünkhöz, akkor pl így:
sudo apt install python3.8 python3-dev libpython3.8
Majd jöhet a tényleges telepítés:
cd ~
cd domoticz/plugins
git clone https://github.com/stas-demydiuk/domoticz-zigbee2mqtt-plugin.git zigbee2mqtt
sudo /etc/init.d/domoticz.sh restart
Miután újraindult a Domoticz, akkor a Beállítás->Hardver menüpontban immár hozzá tudjuk adni a Zigbee2MQTT típusú hardvert.
Amennyiben sikerrel jártunk, akkor a Beállítás->Eszközöknél megjelennek a párosított eszközök, engedélyezzük azokat, amikre szükségünk van. (egy eszköz többféle aleszközből állhat össze, elég a számunkra szükségeset engedélyezni)
6. A Zigbee2MQTT-t beállítjuk automatikusan induló szolgáltatásként
Készítsük el a szolgáltatást indító állományt:
sudo nano /etc/systemd/system/zigbee2mqtt.service
Aminek a tartalma ez legyen:
[Unit] Description=zigbee2mqtt After=network.target [Service] ExecStart=/usr/local/bin/npm start WorkingDirectory=/opt/zigbee2mqtt StandardOutput=inherit StandardError=inherit Restart=always User=pi [Install] WantedBy=multi-user.target
Megjegyzés: érdemes meggyőződni az npm bináris helyéről (/usr/local/bin/npm vagy /usr/bin/npm) különben a fenti nem fog működni.
Majd indítsuk el és engedélyezzük az automatikus indítását:
sudo systemctl start zigbee2mqtt
sudo systemctl enable zigbee2mqtt.service
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.
lacy03 2019.03.28. 14:58:02
eNeS 2019.03.28. 17:39:24
rex 2019.08.03. 04:44:55
Utána mindenki vérmérsékletén múlik hogy milyen, mekkora és hogy Cloud-os vagy LAN-ban futó scriptet ír. És az utóbbi megy internet nélkül is nevéhez méltóan
eNeS 2019.08.03. 08:59:44
rex 2019.08.03. 20:52:52
Amik nem mennek azok a wifi eszközök (kamera pölö), de a zigbee igen (szenzorok, égők és társításaik...)
rex 2019.08.03. 20:56:06
rex 2019.08.03. 21:01:07
wrobi 2021.02.16. 12:50:34
Nincs véletlen valakinek eladó CC2531 downloader kábele?
Nekem sajnos kimaradt a kínai rendelésből, és nem akarok további 1 hónapot várni. Esetleg jópénzért pest környékén valaki egy programozásra rávehető?