Zigbee2MQTT Docker Container einrichten

Im Moment verwende ich noch als Zigbee Gateway einen Raspberry Pi mit einem RaspBee 1 Modul und der Deconz/Phoscon Software. Durch Freunde bin ich dann auf zigbee2MQTT aufmerksam geworden. Ich habe mir das Ganze mal zeigen lassen und fand es recht interessant. Eigentlich wollte ich mein RaspBee 1 Modul schon seit geraumer Zeit durch einen ConBee II Stick ersetzten und hatte somit bereit eines hier in der Schublade liegen.

Vorabüberlegungen

Zunächst wollte ich es zum Testen auf einen freigewordenen Raspberry Pi verwenden, nachdem ich nun aber noch etwas darüber geschlafen habe werde ich das Ganze doch direkt auf dem Esprimo nutzen. Eine Zunächst wollte ich es zum Testen auf einen freigewordenen Raspberry Pi verwenden, nachdem ich nun aber noch etwas darüber geschlafen habe werde ich das Ganze doch direkt auf dem Esprimo nutzen.

Eine Frage, welche ich für mich noch nicht zu 100% geklärt ist, liegt darin, ob ich meinen bereits existierenden MQTT Server nutzen werde oder doch einen eigenen. Für die ersten Tests werde ich vermutlich den Weg mit einem zweiten MQTT Server gehen, dann kann ich auch einfach nach der Anleitung auf der Zigbee2MQTT Webseite gehen. (Man(n) musste jedoch sein Gehirn einschalten als es dann doch zu Problemen kam 😉 )

Das Basis System

Als Basis dient mir also ein Esprimo 910 und als Betriebssystem verwende ich Ubuntu 20.04.3 LTS. Auf diesem System ist bereits Docker installiert. Die einzelnen Schritte, die dafür nötig waren, findet Ihr in dem Artikel  Home Assistant Docker Installation umziehen

Was für eine Device ID hat unser ConBee II Stick

Bevor wir mit den Einrichtern unseres Docker Compose Files machen können, benötigen wir noch die Device ID des Conbee Sticks.

Hierzu stecken wir den ConBee Stick einfach in einen freien USB Slot. Um den Stick etwas weiter weg vom Esprimo platzieren zu können habe ich noch ein USB-Verlängerungskabel verwendet. Sollte euer Gerät WLAN oder Bluetooth fähig sein wird ein Verlängerungskabel empfohlen damit sich die verschiedenen Geräte nicht gegenseitig stören.

Mittels sudo dmesg bekomme ich nun folgendes angezeigt

#sudo dmesg 

[3608020.638823] usb 1-1.2: new full-speed USB device number 5 using ehci-pci
[3608020.749704] usb 1-1.2: New USB device found, idVendor=1cf1, idProduct=0030, bcdDevice= 1.00
[3608020.749708] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[3608020.749713] usb 1-1.2: Product: ConBee II
[3608020.749715] usb 1-1.2: Manufacturer: dresden elektronik ingenieurtechnik GmbH
[3608020.749717] usb 1-1.2: SerialNumber: DE2256012
[3608020.750600] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device

Die letzte Zeile sagt uns unter welche Namen das Gerät eingebunden wurden: ttyACM0

Durch ls -l /dev/ttyACM0 kann man sich nun noch anzeigen lassen wem das Gerät gehört und welche Gruppen Zugriff darauf haben. Bei mir wurde folgendes angezeigt:

crw-rw---- 1 root dialout 166, 0 Apr 23 12:29 /dev/ttyACM0

Das Ganze ist also relativ identisch mit der Installationsanleitung direkt auf der Zigbee2MQTT Webseite, mit der Ausnahme das hier der Device Name ein anderer ist.

Die Einrichtung des Docker Containers

Für die Einrichtung der Dockercontainer gehe ich ebenfalls direkt nach Anleitung vor.

Schritt 1: Anlegen der benötigten Verzeichnisse und Konfigurationsdateien Mit dem Kommando

sudo mkdir /srv/docker/zigbee2mqtt

lege ich zunächst das „Projektverzeichnis“ an.

mittels cd /srv/docker/zigbee2mqtt wechsle ich dann in das Verzeichnis und öffne mittels vim docker-compose.yml die Konfigurationsdatei für Docker Compose

version: '3.8'
services:
  mqtt:
    image: eclipse-mosquitto:2.0
    restart: unless-stopped
    volumes:
      - "./mosquitto-data:/mosquitto"
    ports:
      - "1883:1883"
      - "9001:9001"
    command: "mosquitto -c /mosquitto-no-auth.conf"

  zigbee2mqtt:
    container_name: zigbee2mqtt
    restart: unless-stopped
    image: koenkk/zigbee2mqtt
    volumes:
      - ./zigbee2mqtt-data:/app/data
      - /run/udev:/run/udev:ro
    ports:
      - 8080:8080
    environment:
      - TZ=Europe/Berlin
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0

Hier müssen wir nun noch die letzte Zeile abändern, da das Device ja /dev/ttyACM0 und nicht /dev/ttyUSB0 heißt.

devices:
      - /dev/ttyUSB0:/dev/ttyUSB0

wird zu 

devices:
      - /dev/ttyACM0:/dev/ttyUSB0

Nun benötigen wir noch die Konfigurationsdatei für unseren Zigbee2MQTT Container. Hierzu müssen wir noch ein Unterverzeichnis anlegen, was wir durch das folgende Kommando erledigen

sudo mkdir /srv/docker/zigbee2mqtt/zigbee2mqtt-data

Mittels cd /srv/docker/zigbee2mqtt/zigbee2mqtt-data wechseln wir nun in das Verzeichnis und öffnen mittels vim configuration.yaml die Konfigurationsdatei und fügen den folgenden Inhalt hinzu.

# Let new devices join our zigbee network
permit_join: true
# Docker-Compose makes the MQTT-Server available using "mqtt" hostname
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://mqtt
# Zigbee Adapter path
serial:

  adapter: deconz
  port: /dev/ttyUSB0
# Enable the Zigbee2MQTT frontend
frontend:
  port: 8080
# Let Zigbee2MQTT generate a new network key on first start
advanced:
  network_key: GENERATE

Starten des Containers

Zunächst müssen wir wieder in den „Projektordner“ wechseln. das ganze einfach mittels
cd /srv/docker/zigbee2mqtt

Nun mittels

docker-compose up

die Container starten. Hierbei werden alle Loginformationen direkt auf der Console ausgegeben. Mittels <STRG> + C kann man den Container später wieder stoppen. Ich hab mir das irgendwie angewöhnt bei ersten Start zu machen um zu sehn was passiert. Man kann auch mittels docker-compose up -d das Ganze im Hintergrund starten und sich dann das Log via

docker-compose logs -f

anzeigen lassen.

Ein Fehler tritt auf

Jedoch bekam ich zunächst den folgenden Fehler:

ERROR: Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a supported version (e.g "2.2" or "3.3") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/

ein Update der installierten Docker Parts hat hier nicht geholfen. Zum Schluss habe ich im docker-compose File die Version von 3.8 auf 3.7 geändert und dann ging es auch mit meiner Version.

Creating zigbee2mqtt_mqtt_1 ... error
WARNING: Host is already in use by another container

ERROR: for zigbee2mqtt_mqtt_1  Cannot start service mqtt: driver failed programming external connectivity on endpoint zigbee2mqtt_mqtt_1 (47ed8ed1d77f47bba2d36f0a274a77b702599fa186f3bcfb0Creating zigbee2mqtt        .

Das war auch logisch, da ich auf dem Server auch schon einen MQTT Server am Start habe und somit die Standard-Ports bereits belegt sind. In der docker-compose.yml Datei habe ich nun die Porteinträge bei dem mosquito Container wie folgt geändert.

von:
ports:
      - "1883:1883"
      - "9001:9001"

auf

ports:
      - "1884:1883"
      - "9002:9001"

Nun habe ich das Ganze noch einmal gestartet und es lief nun auch alles durch. Nun testen wir das Ganze durch einen Aufruf der Webseite.

Aufruf der zigbee2MQTT Webseite

Wenn du nun im Webbrowser (ich nutze im Moment Chrome) die http://[IP Deines Servers oder Hostname]:8080 aufrufst solltest Du folgendes sehen:

Zigbee2MQTT Webseite direkt nach der Installation
Zigbee2MQTT Webseite direkt nach der Installation

Somit ist die Installation beendet und das Ganze ist nun lauffähig.

Anmerkung

Ich denke im Normalfall bereitet einem die Installation nicht solche Stolpersteine wie in meinem Fall. Hätte ich nicht parallel den Artikel geschrieben hätte ich vermutlich auch schon im Vorfeld daran gedacht die entsprechenden Ports zu ändern. Im nächsten Artikel werde ich vermutlich meine Zigbee Steckdose von Blitzwolf (genauer die BW-SHP15) hier integrieren und dann mal schauen, wie sich das System in Home Assistant einbinden lässt..

1 Kommentar

  1. Hi,

    habe das ganze gerade mal bei mir getestet. Mit dem Raspberry Pi Shield von Dresden Electronics funktioniert es leider nicht problemlos. Mit Conbee II hat dann alles funktinoiert =)

    Gruß
    Christian

1 Trackback / Pingback

  1. Aqara Sensor in Home Assistant einbinden über Zigbee2MQTT - Smarthome-Labs

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*