A Zigbee2MQTT egy szabad szoftver, amely a Zigbee-eszközeink önálló kezelését teszi lehetővé, híd a Zigbee és az MQTT protokollok között, és integrálható a Home Assistant-tal is. (Bár a HA Zigbee2MQTT nélkül is képes kezelni Zigbee-eszközöket, de elvileg ez a jobb módszer.)
A Mosquitto egy MQTT üzenetközvetítő (message broker), pub/sub mintát követő szabad szoftver, amely összeköti a kommunikáló eszközöket. (Említsük meg az érdekesség kedvéért, hogy léteznek IoT szolgáltatók is, nyilván elsősorban ipari igényekre: pl. a HiveMQ egy MQTT üzenetközvetítésen alapuló, de annál nyilván komplexebb szolgáltatást nyújtó német cég.1)
Az említett komponensek összefüggéseit szemlélteti e diagram.
ZBDongle-E
Mint kiderült, frissítenünk kell a ZBDongle-E kódnevű Zigbee-koordinátorunk firmware-ét ahhoz, hogy a Zigbee2MQTT tudja használni, de ehhez rendelkezésre állnak szoftverek, könnyen elvégezhető a művelet, és előnyösnek is tűnik az újabb firmware. Először telepítsük a NabuCasa/universal-silabs-flasher progit:
# pipx install universal-silabs-flasher
Letöltjük a ZBDongle-E-hez való, legutóbbi verziójú firmware-t a darkxst/silabs-firmware-builder repóból, ahol ilyen fájlnevet keressünk: ncp-uart-hw-v#.#.#.#-zbdonglee-115200.gbl
, amelyben v#.#.#.#
a verzió.
$ wget https://github.com/darkxst/silabs-firmware-builder/raw/refs/heads/main/firmware_builds/zbdonglee/ncp-uart-hw-v7.4.5.0-zbdonglee-115200.gbl
Keressük meg a ZBDongle-E fájlnevét, esetünkben ez az egyetlen csatlakoztatott USB-eszköz, így nem kell válogatnunk:
$ find /dev/serial/by-id/* | xargs realpath
/dev/ttyACM0
Végül frissítsük az eszközünkön a firmware-t:
# /root/.local/bin/universal-silabs-flasher --device /dev/ttyACM0 flash --firmware ncp-uart-hw-v7.4.5.0-zbdonglee-115200.gbl
Docker compose
Picit küzdeni kellett a helyes beállítások megtalálásával; a doksiban, illetve máshol2 talált konfigok nem működtek elsőre. A dokumentáció további olvasgatása persze segített.
compose.yaml
:
services:
mosquitto:
image: eclipse-mosquitto:2
container_name: mosquitto
restart: unless-stopped
user: 1000:1000
volumes:
- ./mosquitto:/mosquitto
ports:
- "1883:1883"
- "9001:9001"
command: "mosquitto -c /mosquitto-no-auth.conf"
zigbee2mqtt:
image: koenkk/zigbee2mqtt:2
container_name: zigbee2mqtt
restart: unless-stopped
user: 1000:1000
group_add:
- dialout
environment:
- TZ=Europe/Copenhagen
- Z2M_WATCHDOG=default
volumes:
- ./zigbee2mqtt:/app/data
- /run/udev:/run/udev:ro
ports:
- "8282:8282"
devices:
- /dev/ttyACM0:/dev/ttyACM0
depends_on:
- mosquitto
A Zigbee2MQTT beállításai a webes frontenden is szerkeszthetők lesznek, sőt konfigfájl hiányában van egy onboarding felület is, de jobb, ha előre összeállítjuk a nekünk megfelelő konfigot. A Mosquitto nem igényel külön beállításokat, viszont így nem is ír semmit a volume-ra. Ezen elég akkor változtatni, ha az igény felmerül.
zigbee2mqtt/configuration.yaml
:
version: 4
permit_join: true
homeassistant:
enabled: false
mqtt:
base_topic: zigbee2mqtt
server: mqtt://mosquitto:1883
serial:
adapter: ember
port: /dev/ttyACM0
frontend:
enabled: true
port: 8282
auth_token: ezittkamujelszo
advanced:
network_key: GENERATE
Elindíthatjuk a szolgáltatásokat, mindenképp nézzük át a logokat:
$ docker compose up -d
$ docker compose logs -f
A http://homeserver:8282
URL-en érjük el a Zigbee2MQTT webes frontendjét. Itt rá kell nyomnunk a menüsorban található Permit join (All)
gombra ahhoz, hogy párosítani tudjuk a Zigbee-eszközeinket.
A listában megjelenő eszközöket tetszés szerint el tudjuk nevezni, láthatjuk a jelerősségüket (LQI, [0,255]) és az akkumulátoruk töltöttségi szintjét (power, [0,100]). Az LQI (Link Quality Indicator) általános minőségi és megbízhatósági mutató figyelembe veszi a zajosságot és a hibarátát is.
-
Why HiveMQ is More Than an MQTT Broker? hivemq.com, 2024-12-18. ↩︎
-
Lin, Joyce: How to Set Up Zigbee2MQTT with Docker for Home Automation. freecodecamp.org, 2024-11-19. ↩︎