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.


  1. Why HiveMQ is More Than an MQTT Broker? hivemq.com, 2024-12-18. ↩︎

  2. Lin, Joyce: How to Set Up Zigbee2MQTT with Docker for Home Automation. freecodecamp.org, 2024-11-19. ↩︎