DIY Zigbee Bridge

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

zbee_test.jpg

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)

zigbee_xia.gif

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:

CC2531_DEFAULT_20190608.zip

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.js

zigbee2mqtt: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.

zbee_domo_hw.jpg

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)

zbee_domo_dev.jpg

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:

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

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

Szia,lehet kombinálni cerberussal? Vagy az már sok a Pi zero w nek?

eNeS 2019.03.28. 17:39:24

@lacy03: Simán elmegy rajta a Domoticz + zigbee2mqtt szolgáltatás egyidőben, még a 30%-ot se érte el a processzorhasználat, pedig a Zero egy magos. :) (Meg az RPIEasy is futott a háttérben a tesztkor)

rex 2019.08.03. 04:44:55

A Xiaomi zigbee-zéshez Felhőre installáláskor (ott vannak a device plug-inek) és távoli eléréskor van szükség.
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: próbáltad már kihúzni a routeredből a bejövő netet, és úgy újraindítani a Xiaomi gatewayt? kíváncsi lennék elindul-e..

rex 2019.08.03. 20:52:52

@eNeS: Nem. (Ahhoz sok minden megy kábelről.) Azt tudom a gateway wifi-vel működik és ha lekapcsolom a wifi-t, akkor a LAN scriptek mennek ugyanúgy...
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

Nem igaz, visszavonom, ha nem volt net csak helyi hálózat akkor is ment már... De ahogy írtad sose próbáltam.

rex 2019.08.03. 21:01:07

Gyáva és lusta vagyok ilyenhez :), mert 77 smart (ennek több mint 3/4-e zigbee) eszköz van itthon, totál függés van és nincs kedvem mindent online-ba hozni ha mégis elszállna... :)))

wrobi 2021.02.16. 12:50:34

Sziasztok!
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ő?

wrobi 2021.02.17. 11:26:00

@wrobi: Nem kell! Ráforrasztottam 4db vezetéket a stickre, és így fel tudtam tenni a firmware-t.

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

Utolsó kommentek

  • faterkm: Jó ötlet, köszönöm. Most kicsit megyek utó-nyaralni, de később kipróbálom és mindenképpen referálo... (2024.08.30. 17:35) Tasmota firmware
  • eNeS: Az 5V az jó ha stabil, viszont a 3V-os tápra az ESP elé tehetnél egy kicsit nagyobb kondenzátort p... (2024.08.29. 19:34) Tasmota firmware
  • faterkm: Köszönöm, hogy foglalkozol a problémámmal. További infók: a "rendszerem"-ben 5 ilyen modul van, és... (2024.08.29. 19:32) Tasmota firmware
  • eNeS: @faterkm: az nem jó jel. 5V 3A-es tápegyésggel próbáltad már? Nem kizárt egyébként a lapon levő fe... (2024.08.29. 17:10) Tasmota firmware
  • faterkm: Pontosan ezt valósítottam meg: bitekmindenhol.blog.hu/2018/02/03/wifi_mini_rele_5v_esp-01s és azt ... (2024.08.29. 17:06) Tasmota firmware
  • 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