Archiv der Kategorie: Smart-Home

Home Assistant, Mosquitto & Zigbee2MQTT als Docker-Container

Auf meinem Raspberry Pi läuft Home Assistant als Docker-Container. Das bringt den Nachteil mit sich, dass man keine Add-Ons installieren kann. Also musste ich Mosquitto und Zigbee2MQTT auch als Container installieren (ich hätte die beiden auch nativ aus dem Raspi installieren könne, wollte ich aber nicht).

Es gibt viele Anleitungen und Videos zu dem Thema, aber die wollten alle nicht so recht passen, so dass ich mir meine Installation und Konfiguration aus einigen dieser Anleitungen zusammengestellt habe.

Einige meiner Einstellungen weichen vermutlich von den üblichen Standards ab. So liegen meine Volumes in /var/lib/docker/volumes und die Compose-Files habe ich unter /root/docker/dockerfiles. Das muss ggf. auf die eigenen Bedingungen angepasst werden. Alle unten gezeigten Konfigurationsschritte wurden als Benutzer root gemacht (sudo -s).

Mosquitto

Als erstes habe ich den Container für den MQTT-Broker installiert. Dazu habe ich zunächst die Verzeichnisse für die Volumes erstellt:

cd /var/lib/docker/volumes
mkdir -p mosquitto/config
mkdir -p mosquitto/data
mkdir -p mosquitto/log

Dann bin ich mit cd mosquitto/config in das Konfigurationsverzeichnis gewechselt und habe dort die folgende mosquitto.conf erstellt:

mosquitto.conf
listener 1883
#protocol websockets
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
## Authentication ##
allow_anonymous true

Wie man sieht, ist die Einstellung protocol websockets auskommentiert. Dies Einstellung ist in vielen Anleitungen enthalten, bei mir hat aber die Verbindung mit Home Assistant nicht funktioniert, wenn das aktiv war. Ebenso musste ich allow_anonymous true einstellen. Auf die Konfiguration von User und Passwort habe ich der Einfachheit halber bewusst verzichtet.

Als nächstes habe ich das Compose-File erstellt:

cd /root/docker/dockerfiles
mkdir mosquitto
cd mosquitto
nano docker-compose.yaml

Der Inhalt:

docker-compose.yaml
services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto
    volumes:
      - /var/lib/docker/volumes/mosquitto/config:/mosquitto/config
      - /var/lib/docker/volumes/mosquitto/data:/mosquitto/data
      - /var/lib/docker/volumes/mosquitto/log:/mosquitto/log
    ports:
      - 1883:1883
      - 9001:9001
    restart: unless-stopped

Anschließend habe ich den Container erstellt und gestartet:

docker compose -p mosquitto up -d

Testen ließ sich das Ganze so:

apt install mosquitto-clients
mosquitto_sub -v -d -t 'hello/topic

Dann habe ich in Home Assistant die MQTT Integration hinzufügt und einrichtet (es musste nur die IP-Adresse des Raspis eingetragen werden, localhost funktioniert hier nicht).

Zigbee2MQTT

Danach wurde der Container für Zigbee2MQTT installiert. Auch hier wurde erst wieder das Volume-Verzeichnis angelegt und dort die Default-Konfig heruntergeladen:

cd /var/lib/docker/volumes
mkdir -p zigbee2mqtt/data
cd zigbee2mqtt/data
wget https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/data/configuration.example.yaml -O configuration.yaml

In dieser Konfig-Datei wurde dann in der Zeile server: mqtt://localhost das localhost durch die IP-Adresse des Raspberry Pis ersetzt. Außerdem musste noch der Eintrag homeassistant: enabled auf true gesetzt werden.

Als nächstes musste Zigbee-USB-Stick ermittelt werden. Das gelingt mit ls -l /dev/serial/by-id und ergab bei mit die folgende Ausgabe:

lrwxrwxrwx 1 root root 13 12. Mär 15:24 usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_6c803a9bd53aef1186f2331455516304-if00-port0 -> ../../ttyUSB0

Der Teil usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_6c803a9bd53aef1186f2331455516304-if00-port0 wird im nächsten Schritt benötigt, ebenso die Angabe ttyUSB0.

Nun wurde die Composer-Datei für den Zigbee2MQTT-Container erstellt:

cd /root/docker/dockerfiles
mkdir zigbee2mqtt
cd zigbee2mqtt
nano docker-compose.yaml

Der Inhalt:

doker-compose.yaml
services:
    zigbee2mqtt:
        container_name: zigbee2mqtt
        image: koenkk/zigbee2mqtt
        restart: unless-stopped
        volumes:
            - /var/lib/docker/volumes/zigbee2mqtt/data:/app/data
            - /run/udev:/run/udev:ro
        ports:
            # Frontend port
            - 8080:8080
        environment:
            - TZ=Europe/Berlin
            - Z2M_WATCHDOG=0.5,3,6,15,30
        devices:
            # Make sure this matched your adapter location
            - /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_6c803a9bd53aef1186f2331455516304-if00-port0:/dev/ttyUSB0

Wie man erkennen kann, wird bei devices der erste Teil der Ausgabe von ls -l /dev/serial/by-id eingetragen, gefolgt von einem Doppelpunkt. Danach folgt die Angabe des Ports, bei mir also /dev/ttyUSB0.

Anschließend konnte der Container mittels

docker compose up -d zigbee2mqtt

erstellt und gestartet werden. Danach war die Zigbee2MQTT-Oberfläche unter http://<ip-des-raspis>:8080 erreichbar und dort konnten die Zigbee-Geräte angelernt werden.