ZigBee ist eine Spezifikation für drahtlose Netzwerke mit geringem Datenaufkommen und geringem Stromverbrauch. Die erste Version kam bereit 2004 auf den Markt und wurde seitdem stetig weiterentwickelt. In unserem VanPI System benutzen wir zur Kommunikation zwischen den verschiedenen Softwarebausteinen Zigbee2MQTT, welches eine Bridge für Geräte von verschiedensten Herstellern darstellt. Zusätzlich benötigen wir einen Zigbee Koordinator, dafür benutzen wir den „Sonoff Zigbee Gateway, ZBDongle-E USB Zigbee 3.0 USB Dongle Plus“, diesen gibt es bereits vorgeflasht mit der Zigbee-Koordinator-Firmware bei den gängigen Online-Händlern.
Somit steht der drahtlosen Kommunikation mit vielen Schaltern und Sensoren nichts mehr im Weg.
Kleine Anmerkung: Zigbee2MQTT wird standardmäßig in der neuen, bald erscheinenden VAN PI Version v1.1.0 installiert sein.
Installation
Ist der Koordinator per USB mit dem Raspberry verbunden, lassen wir uns die entsprechende Location mithilfe von „ls –l /dev/serial/by-id“ zur Überprüfung anzeigen.
Zigbee2MQTT benötigt einige Abhängigkeiten, diese sind bereits installiert, da wir sie für andere Software ebenfalls verwenden. Die Abhängigkeiten sind nodejs, git, make, g++ und gcc und können mit den Befehlen
sudo curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash –
Und
sudo apt-get install -y nodejs git make g++ gcc
installiert werden, falls benötigt.
Dann erstellen wir einen neuen Ordner für Zigbee2MQTT und übergeben die Rechte an unseren Benutzer:
sudo mkdir /opt/zigbee2mqtt
sudo chown -R ${USER}: /opt/zigbee2mqtt
Wir klonen Zigbee2MQTT aus dem Github Repository:
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
Und installieren dort die benötigten Abhängigkeiten mit npm:
cd /opt/zigbee2mqtt
npm ci
Eventuell aufkommende Fehlermeldungen können wir ignorieren.
Konfiguration
Bevor wir Zigbee2MQTT starten, bearbeiten wir die configuration.yaml Datei, um sie für unser System anzupassen:
nano /opt/zigbee2mqtt/data/configuration.yaml
Dort kommt folgender Inhalt rein:
homeassistant: false
permit_join: true
mqtt:
base_topic: zigbee2mqtt
server: mqtt://localhost:1883
serial:
port: /dev/ttyACM0
advanced:
network_key: GENERATE
log_level: info
log_output:
- console
frontend:
port: 8099
experimental:
new_api: true
homeassistant_legacy_entity_attributes: false
legacy_api: false
legacy_availability_payload: false
device_options:
legacy: false
Systemd.service
Damit Zigbee2MQTT automatisch beim Bootvorgang startet und im Hintergrund läuft, erstellen wir einen Systemservice
sudo nano /etc/systemd/system/zigbee2mqtt.service
Und füllen diese Datei mit dem folgenden Inhalt:
[Unit]
Description=zigbee2mqtt
After=network.target
[Service]
Environment=NODE_ENV=production
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=null
StandardError=inherit
Restart=always
RestartSec=10s
User=pi
[Install]
WantedBy=multi-user.target
Danach können wir unsere Konfiguration prüfen, indem wir Zigbee2MQTT starten
sudo systemctl start zigbee2mqtt.service
systemctl status zigbee2mqtt.service
Wenn alles funktioniert, stellen wir ein, dass der Service automatisch beim Systemboot gestartet wird:
sudo systemctl enable zigbee2mqtt.service
Frontend
Das Frontend können wir nun über den Port (8099) erreichen, den wir in unserer configuration.yaml angegeben haben. Dazu geben wir im Browser die IP-Adresse des Raspberrys ein, gefolgt von einem Doppelpunkt und dem Port. Also beispielsweise „192.168.1.131:8099"
Anlernen
Zum Anlernen von Zigbee Geräten müssen wir die „Anlernen aktivieren“ Funktion einschalten, danach werden Geräte automatisch gefunden, sobald diese Daten senden. Einige Geräte muss man dafür aufwecken, wie zum Beispiel Schalter. Danach werden sie automatisch von Zigbee2MQTT erkannt und zur Verfügung gestellt. Im Bereich „Logs“ können wir die Aktivitäten mitverfolgen.
Node-RED
Um die Daten in Node-RED zu verarbeiten, installieren wir über die Palette „node-red-contrib-zigbee2mqtt“. In dieser konfigurieren wir den MQTT-Server (localhost), das Base-Topic (zigbee2mqtt) und den Port (1833). Dazu stellen wir in einer Zigbee2MQTT-In-Node das angeschlossene Gerät ein, dessen Daten wir erhalten wollen. Schon können wir mit unseren Geräten kommunizieren und mit diesen weiterarbeiten.
Links
Hier findet ihr die configuration.yaml und die systemd.service Dateien, die wir in unserem Setup benutzen:
https://git.pekaway.de/Vincent/vanpi/-/tree/main/pi4 Geräte, die von Zigbee2MQTT unterstützt werden:
https://www.zigbee2mqtt.io/supported-devices/
node-red-contrib-zigbee2mqtt: