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