Zigbee2MQTT & OpenHAB 3

Zigbee2MQTT & OpenHAB 3

Ich hab mir nun den Zigbee2MQTT Stick CC2531 zugelegt, da ich immer Probleme mit dem Ikea Gateway habe. Hier will ich einen kleinen Überblick über die Inbetriebnahme, das Pairing und die Einbindung ins Openhab geben.

Den Stick hab ich <hier/> gekauft für weniger al 10€. Das ist spott billig, wenn man überlegt, das man nicht nur auf Ikea-Zigbee geräte beschränkt ist. Auch Hue und andere nutzen dieses Protokoll.

Das zigbee2mqtt Projekt findet ihr <hier/>

Der Trick ist hier, dass der Stick bereits die Zigbee Kommunikation in MQTT Topics überführt. Das ist praktisch für mich, da ich ohnehin für fast alle meine SmartHome komponenten MQTT (Mosquitto) nutze.

Installation

Wie ihr OpenHab auf dem Raspi (Openhabian) aufsetzt, könnt ihr <hier> und <hier/> nachlesen. Wichtig ist, dass bereits ein MQTT Broker aufgesetzt ist und läuft.

Steckt den CC2531 einfach in einen USB-Port des RaspberryPi und startet den Pi neu. Dazu nutze ich wie immer eine ssh-Verbindung.

ssh openhabian@192.168.xxx.xxx
sudo reboot

Dann prüfen wir ob der Stick korrekt erkannt wird mit:

ls -l /dev/serial/by-id

Das sollte in etwa folgende Meldung zurück geben:

insgesamt 0
lrwxrwxrwx 1 root root 13 Apr 16 18:03 usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0014D958BA-if00 -> ../../ttyACM0
Nicht wundern: heute mal auf Linux 😉 POP OS auf meinem alten Surface Pro 3

Der Stick wird also korrekt erkannt. Nun können wir node.js installieren:

sudo curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs git make g++ gcc

Wenn das geklappt hat, sollten euch die entsprechenden Versionen mit den folgenden Befehlen angezeigt werden:

node --version
npm --version

Als nächstes kann das eigentliche Paket für den Zigbee2mqtt Stick installiert werden. Wir ziehen es aus dem GitHub von Keonkk, dem Entwickler, vergeben Rechte, wechseln ins Verzeichnis und installieren alles.

sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R openhabian:openhabian /opt/zigbee2mqtt
cd /opt/zigbee2mqtt
npm ci --production

Als nächstes müssen wir die Config für unser System anpassen:

nano /opt/zigbee2mqtt/data/configuration.yaml

Die beiden Zeilen user und password müssen ggf. auskommentiert und mit den entsprechenden Informationen gefüllt werden.

Außerdem müssen die Zeilen für einen Network Key hinzugefügt werden:

advanced:
    network_key: GENERATE

Nun können wir einen Service erstellen, idamit das Programm im Hintergrund läuft. Dazu erstellen wir die Datei:

sudo nano /etc/systemd/system/zigbee2mqtt.service

In diese Datei fügen wir den folgenden Code ein:

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
# Or use StandardOutput=null if you don't want Zigbee2MQTT messages filling syslog, for more options see systemd.exec(5)
StandardError=inherit
Restart=always
User=openhabian

[Install]
WantedBy=multi-user.target

Dann speichern und schließen den Nano-Editor mit Strg + O und Strg + X. Dann starten wir den Service und prüfen ob alles läuft:

sudo systemctl start zigbee2mqtt
systemctl status zigbee2mqtt.service
sieht gut aus!

Damit der Service mit dem booten Started müssen wir ihn noch aktivieren:

sudo systemctl enable zigbee2mqtt.service

Pairing

Um eure Geräte zu koppeln könnt ihr für jedes zunächst <hier/> nachsehen, ob es eine dezidierte Anleitung gibt. Meistens muss man die Geräte auf Werkseinstellung zurücksetzen.

Wir können im Terminal oder per MQTTfx nun mit unserem MQTT Broker verbinden und gucken, ob es die ZigBee Topics gibt. Im Terminal gibt es dazu das Tool mosquitto_sub (falls ihr Mosquitto nutzt.) Wir können nun mit dem folgenden Befehl alle Zigbee Topics subscriben.

mosquitto_sub -d -t zigbee2mqtt/#

Falls Ihr Zugangsdaten festgelegt habt, muss der Befehl wie folgt angepasst werden:

mosquitto_sub -d -u username -P password -t zigbee2mqtt/#

Wobei natürlich eure Zugangsdaten für username und password angepasst werden müssten. Das gibt dann in etwa folgenden Inhalt wieder:

Ich habe dann einfach meine Ikea-Tradfri-Birne in die Nähe meines Raspi-SetUps in eine Fassung geschraubt und 6 mal aus und wieder an geschaltet. Dann fängt die Birne an zu blinken und kurz darauf taucht die entsprechende MQTT Nachricht im log auf:

Nun können wir in der Config einen für uns leichter Lesbaren “Friendly Name” festlegen.

sudo nano /opt/zigbee2mqtt/data/configuration.yaml

Hier sehen wir das hinzugefügte Gerät.

Danach muss der Service einmal neu gestartet werden, damit alle änderungen Wirksam werden.

Wir brauchen nun zwei Terminals, eins in dem wir wieder mit mosquitto_sub alle zigbee topics abonieren und eins, in dem wir Testbefehle veröffentlichen können. Dazu müssen wir zunächst wieder die ssh Verbindung aufbauen.

ssh openhabian@192.168.xxx.xxx
mosquitto_sub -d -u username -P password -t zigbee2mqtt/#
mosquitto_pub -u username -P password -t zigbee2mqtt/SchlafzimmerMD/set -m '{"state":"OFF"}'

Bei mir kam dann folgende Fehlermeldung:

Ich sehe also auf der erwähnten Website nach und komme nicht so recht weiter. Ich habe dann einfach nochmal das Factory Reset durchgeführt und diesesmal hat es direkt geklappt.

Es gibt ein sogenanntes Interview mit dem Gerät, damit zigbee2mqtt in der Datenbank die korrekte Übersetzung auswählen kann. Wenn dieses Interview fehlschlägt (offenbar häufiger in der aktuellen Version), funktioniert das Gerät nicht. Dann muss man wohl manuell eine database.db editieren, ich habe aber leider noch nicht herausgefunden wie das geht.

Außerdem habe ich gelernt, dass man auch das Zigbee Log anzeigen lassen kann (ersetzt also den mosquitto_sub Part):

sudo journalctl -u zigbee2mqtt.service -f

OpenHAB

Im Openhab können wir nun ein generisches MQTT Thing für unsere Birne anlegen. Im Channel müssen wir dann wie früher auch, die Topics für state und command festlegen. Vergesst nicht die Items zu verlinken, sonst könnt ihr das Thing nicht steuern.

Dazu klicken wir zunächst auf Things und dann auf das blaue Plus unten rechts, dann auf MQTT Binding und dann auf Generic MQTT Thing. Unter Bridge wählen wir unseren MQTT Broker aus, außerdem macht es Sinn einen Namen zu vergeben. Nun können wir das Thing anlegen und finden es in der Thing-Übersicht.

Wir wechseln in den Reiter Channels und klicken auf Add Channel. Nun können wir z.b. einen Switch auswählen, wenn wir nur an und aus schalten möchten. Unten sehen wir die Felder für die Topics.

Den Channel bzw. das Topic kann man auch ohne JSON Transformation anlegen. Mehr Infos dazu gibt es <hier/>. Wir nutzen im Command Feld also den Befehl entsprechend des Templates:

zigbee2mqtt/SchlafzimmerMD/set/state

zum Ausschalten, bzw zum Anschalten. Off bzw. On müssen dann im Custom Command Value stehen. Außerdem gibt es das get Topic, um den Status abzufragen.

2 Kommentare

Grüße Zurück,
ich freu mich über den echten Kommentar (glaube es ist tatsächlich der erste). 🙂

Birne ist Birne – ob da nun ein Glühdraht oder eine LED drinsteckt ist doch egal. Also ich beziehe mich auf die Form. Gibt ja auch Panels, Leisten, Streifen, die alle Leuchtmittel sind. 😉

Schreibe einen Kommentar