HowTo: Zigbee – Installation von zigbee2mqtt auf dem Raspberry Pi

Vor kurzem habe ich damit begonnen Teile meines SmartHome auf den Zigbee-Standard umzustellen.

In der Vergangenheit habe ich nämlich noch Sensoren und Aktoren basierend auf dem einfachen 433Mhz Funk genutzt. Leider gibt es aber immer weniger Sensoren bzw. Aktoren für diesen „Funkstandard“.

Zu guter Letzt waren dann die sehr günstigen Preise für Zigbee-Zubehör bei Ikea für mich das ausschlaggebende Argument um auf diesen Standard zu wechseln.

Neben diesen Vorteilen gibt es natürlich noch einige andere Vorteile des Zigbee-Standards. So fungieren dauerhaft an das Stromnetz angeschlossene Aktoren (z.B. eine Zigbee fähige Steckdose) automatisch auch als Repeater (Im zigbee-jargon „Router“ genannt). So lassen sich also auch sehr große Zigbee-Netzwerke (zum Beispiel über mehrere Etagen) aufbauen.

Batteriebetriebene Zigbee-Geräte können – dank der besser geeigneten Architektur – sehr lange Batterielaufzeiten erreichen. Ein Fenster- oder Türsensor kann so zum Beispiel mehrere Jahre mit einer einzigen CR2032 Knopfzelle betrieben werden.

Nun gut, aber wie kann man Zigbee-Sensoren und Aktoren nun in das eigene SmartHome integrieren?

Ein sehr cooles und hilfreiches Open Source Projekt dazu ist Zigbee2MQTT.

Wie der Name schon erahnen lässt, ist zigbee2mqtt eine Art Adapter der die per Zigbee empfangenen Daten auswertet und über einen MQTT Server an euer SmartHome weiterleitet.

Auf diese Daten könnt Ihr dann – wie Ihr es auch von auf Tasmota und EspEasy basierenden Sensoren/Aktoren kennt – reagieren.

Wie Ihr zigbee2mqtt auf Eurem RaspberryPi installiert habe ich im folgenden Artikel beschrieben.


Sicherheitshinweise

Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/

Affiliatelinks/Werbelinks

Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂 


Voraussetzungen

Hilfreiche Artikel:
Bevor ihr mit diesem Artikel startet solltet ihr einen RaspberryPi soweit vorbereitet haben, dass dieser über das Netzwerk erreichbar und per SSH Steuerbar ist. Außerdem sollte natürlich zigbee2mqtt bereits installiert sein.

Die folgenden Artikel beschreiben was zu tun ist um den RaspberryPi soweit vorzubereiten.

In der folgenden Listen findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.

Benötigtes Werkzeug:

NumberLink
1xSchraubendreher Set  Bei Amazon kaufen
1xSD Kartenleser  Bei Amazon kaufen

Benötigtes Material:

NumberLink
1xSONOFF Zigbee 3.0 USB Dongle Plus  Bei Amazon kaufen
1xUSB Verlängerungskabel  Bei Amazon kaufen
1x Raspberry Pi  Bei Amazon kaufen
1x Raspberry Pi Netzteil  Bei Amazon kaufen
1x Raspberry Pi Gehäuse  Bei Amazon kaufen
1x Micro SD Karte 64GB  Bei Amazon kaufen


Per SSH auf dem RaspberryPi einloggen

Um zu beginnen müsst Ihr Euch als erstes mit Putty per SSH auf dem RasPi einloggen. Wie das geht ist im Artikel RaspberryPi - Den RaspberryPi über SSH steuern beschrieben.

Nach der Eingabe Eures Benutzernamen und Passworts könnt Ihr die ersten Befehle eingeben.

Paketverwaltung aktualisieren

Die Paketverwaltung in Linux ist eine "zentrale Stelle" über die sich diverse Software-Pakete installieren lassen. Damit dies zuverlässig funktioniert sollten vor jeder Installation von neuen Paketen die Listen und Quellen der Paketverwaltung aktualisiert werden.

Um das Update der Paketverwaltung zu starten müsst ihr folgenden Befehl eingeben.
sudo apt-get update && sudo apt-get upgrade
Je nachdem wie lange Euer letztes Update der Paketverwaltung her ist kann dieser Vorgang nun etwas dauern. Dabei werden zuerst die Listen aktualisiert in denen auf die einzelnen Paketquellen verwiesen wird.
Danach werden die Pakete selber aktualisiert. Da dabei zusätzlicher Speicher belegt wird, werdet Ihr nochmal nach Eurem Einverständnis gefragt. Dies müsst Ihr mit einem "J" und "Enter" bestätigen.
Ist die Aktualisierung abgeschlossen wird euch eine kleine Zusammenfassung über die Dauer und den Umfang des Updates angezeigt.

Installation auf dem Raspberry Pi vorbereiten

Die Installation von zigbee2mqtt lässt sich mithilfe ein paar einfachen bash-Befehlen starten.

Bevor Ihr aber mit der eigentlich Installation von zigbee2mqtt starten könnt müsst Ihr zunächst ein paar benötigte Abhängigkeiten/Bibliotheken installieren.

Führt dazu den folgenden Befehl aus. Dadurch wird die Installation von NodeJs vorbereitet.

sudo curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

Durch den folgenden Befehl wird dann NodeJs inkl. diverser Compiler installiert.

sudo apt-get install -y nodejs git make g++ gcc

Danach müsst Ihr noch den Yarn-Package-Manager installieren. Führt dazu die folgenden Befehle auf Eurem Raspberry Pi aus.

curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list<br>
sudo apt-get update sudo apt-get install yarn -y

Mithilfe der folgenden Befehle könnt Ihr dann das Repository von zigbee2mqtt herunterladen und die benötigten Verzeichnis-Rechte setzen.

sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt


Zigbee2mqtt Konfiguration einstellen

Nach dem Herunterladen der zigbee2mqtt Dateien müsst Ihr nun die Konfigurationsdatei an Eurer System anpassen.

Damit Euer zigbee2mqtt Adapter (Coordinator) korrekt angesprochen werden kann müsst Ihr in der Konfigurationsdatei den korrekten Pfad angeben.

Dazu sollte der Adapter natürlich schon mit der zigbee2mqtt Firmware geflasht und an den Raspberry Pi angeschlossen sein. Infos dazu findet Ihr zum Beispiel in dem folgenden Blog-Artikel.

Sobald der Zigbee-Coordinator angeschlossen ist solltet Ihr den Gerätepfad herausfinden und zwischenspeichern.

Den Gerätepfad der angeschlossenen Adapter könnt Ihr mit folgendem Befehl anzeigen.

ls /dev/serial/by-id/

Solltet Ihr nur einen Adapter angeschlossen haben wird hier auch nur der Gerätepfad zu Eurem Zigbee-Adapter aufgelistet. Falls Hier mehrere Einträge aufgelistet werden ist es am einfachsten zunächst alle anderen USB Geräte zu entfernen, die Liste erneut abzurufen und dann den einzig vorhandenen Eintrag zu kopieren.

In dem gezeigten Beispiel ist der gesuchte Gerätepfad der folgende.

  • usb-Silicon_Labs_CP2104_USB_to_UART_Bridge_Controller_019758DF-if00-port0

Speichert diesen nun am besten in einer Textdatei. Ihr benötigt den Gerätepfad um ihn später in die Konfigurationsdatei einzutragen.

Erstellt bzw. öffnet nun die Konfigurationsdatei von zigbee2mqtt durch Eingabe des folgenden Befehls.

nano /opt/zigbee2mqtt/data/configuration.yaml

Der Inhalt der Datei sollte wie folgt aussehen. Die unten angegebenen Stellen müsst Ihr dabei allerdings entsprechend anpassen.

# MQTT settings
mqtt:
  # MQTT base topic for Zigbee2MQTT MQTT messages
  base_topic: zigbee2mqtt
  # MQTT server URL
  server: 'mqtt://localhost'
  # MQTT server authentication, uncomment if required:
  # user: my_user
  # password: my_password

# Serial settings
serial:
  # Location of the adapter (see first step of this guide)
  port: /dev/ttyACM0

advanced:
  network_key: GENERATE
  ikea_ota_use_test_url: true
  legacy_api: false
  log_level: debug

frontend:
  port: 8038
  host: 0.0.0.0
  auth_token: secretPassword123
  url: http://localhost

Wichtig ist, dass Ihr ein paar Einstellungen in der Konfigurationsdatei an Eure Situation anpasst.

Mqtt server anpassen:

Stellt den Domain-Namen zu Eurem MQTT-Server korrekt ein. Dazu müsst Ihr die Stelle ‚mqtt://localhost‘ entsprechend anpassen (falls der mqtt server nicht auf dem gleichen RaspberryPi läuft wie zigbee2mqtt).

Passwort zum Dashboard anpassen:

Damit der Zugang zu dem zigbee2mqtt Dashboard geschützt ist, solltet Ihr das Passwort auf einen nur Euch bekannten Wert einstellen. Ändert dazu den Teil auth_token: secretPassword123 entsprechend.

Pfad zu eurem Zigbee Coordinator anpassen:

Stellt den Gerätepfad beim Eintrag

  • port: /dev/ttyACM0

dann auf den korrekten Wert ein. Den Passenden Gerätepfad solltet Ihr im vorherigen Schritt kopiert haben.


Installation starten

Nachdem Ihr alle Konfigurationen abgeschlossen habt, könnt Ihr nun auch die Installation von zigbee2mqtt starten.

Die Installation von zigbee2mqtt startet Ihr dann indem Ihr mit dem bash-Befehl

cd /opt/zigbee2mqtt

in das Verzeichnis wechselt und die Installation mit

npm ci

startet.


Installation testen

Wenn Ihr wollt könnt Ihr die Installation von zigbee2mqtt an dieser Stelle bereits testen.

Dazu reicht es die folgenden Befehle auszuführen.

cd /opt/zigbee2mqtt
npm start

Dadurch startet zigbee2mqtt und ihr könnt die Log-Ausgabe einsehen.

Zigbee2mqtt läuft dann solange wie das Konsolen-Fenster geöffnet und verbunden ist oder Ihr den Programmablauf mit STRG-C beendet.


Zigbee2mqtt als System-Service konfigurieren

Damit zigbee2mqtt auch ohne offenes Konsolen Fenster läuft, solltet Ihr einen System-Service installieren.

Erstell dazu eine neue Konfigurationsdatei für den System-service durch Eingabe des folgenden Befehls.

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

Fügt danach den unten stehenden Text ein und speichert die Datei mit den Tastenkürzeln STRG-X, Y und Enter.

[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=pi

[Install]
WantedBy=multi-user.target


Autostart von Zigbee2mqtt einrichten

Mithilfe des folgenden Befehls könnt Ihr den Autostart von zigbee2mqtt aktivieren. Dadurch wird zigbee2mqtt nach dem Start des RaspberryPis automatisch gestartet.

Dank des bereits konfigurierten System-Service müsst Ihr nur folgenden Befehl ausführen um zigbee2mqtt zusammen mit dem Raspberry Pi zu starten.

sudo systemctl enable zigbee2mqtt.service


Zigbee2mqtt neu starten

Mithilfe des folgenden Befehls könnt Ihr Eure zigbee2mqtt Instanz neu starten.

Gebt zum Neu starten von zigbee2mqtt folgenden Befehl ein.

sudo systemctl restart zigbee2mqtt


Zigbee2mqtt stoppen

Mithilfe des folgenden Befehls könnt Ihr Eure zigbee2mqtt Instanz stoppen.

Gebt zum stoppen von zigbee2mqtt folgenden Befehl ein.

sudo systemctl stop zigbee2mqtt


Log von Zigbee2mqtt anzeigen

Der folgende Befehl zeigt die vorhandene Logfile von zigbee2mqtt an. Diese Ansicht wird auch automatisch aktualisiert. So könnt Ihr zum Beispiel auch den Startvorgang gut überwachen und Fehler finden bzw. Fehlermeldungen anzeigen.

Gebt dazu den folgenden Befehl ein.

sudo journalctl -f -u zigbee2mqtt


Weitere Artikel zum Thema

Nachdem Ihr zigbee2mqtt eingerichtet habt solltet Ihr nun natürlich Sensoren und Aktoren in Euer Zigbee-Netzwerk integrieren.

Dazu lässt sich das zigbee2mqtt Dashboard sehr gut nutzen. Außerdem ist das Dashboard auch eine sehr komfortable Möglichkeit um zigbee2mqtt zu administrieren. Der Artikel indem das Dashboard kurz vorgestellt wird findet ihr hier.

In der folgenden Kategorie habe ich dazu einige Zigbee-Geräte aufgelistet welche sich mit dem dort angebotenen NodeRed code ansteuern bzw. auslesen lassen.

Weitere Artikel zum Thema Zigbee bzw. zigbee2mqtt habe ich in der folgenden Kategorie zusammengefasst.


Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂

P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂

Buy Me a Coffee at ko-fi.com

5 Kommentare

  1. Danke für die tolle Anleitung! Leider kann ich keine Ikea Lampen koppeln, Touchlink erkennt die Lampen zwar, kann sie auch Resetten aber danach erscheint die Lampe nicht unter den Geräten. Auch im Log scheint nichts von einer Bindung auf. Ich habe 2 verschiedene Taster (E2001/E2002 und E1743) erfolgreich eingebunden, aber mit zwei verschiedenen Lampen (LED1836G9 und LED2003G10) will es nicht klappen…

    1. HI Mario,
      hast du schon versucht die Lampen „konventionell“ also ohne Touchlink zu koppeln?
      Ich arbeite gerade an den Anleitungen für die LED Lampen von Ikea, werde die vermutlich auch bald online stellen.
      Ich habe die Lampen so verbunden, dass ich erst den Zugang zu meinem Zigbee Netzwerk freigeschaltet habe (über das zigbee2mqtt Dashboard) und dann die Lampen (durch mehrmaliges ein und ausschalten) resettet habe.
      Das hat bisher bei allen Lampen gut geklappt. Vllt. kannst du das mal ausprobieren? 🙂
      Beste Grüße
      Fabian

      1. Hallo Fabian,
        direktes koppeln zwischen Lampen und Schaltern funktioniert, auch mehrere (beide) Lampen an einem Schalter. Dabei fiel mir aber auf dass ich fürs direkte koppeln die Kopplungstaste ca.10 sek halten muss. Um einen Schalter mit z2m zu koppeln muss ich die Kopplungstaste 4 mal schnell hintereinander drücken. Das entspräche eigentlich einem Reset. Dh ich kann einem Taster nicht zu z2m und gleichzeitig einer oder mehreren Lampen (direkt) zuweisen? Wenn ein Taster erst mal mit z2m gekoppelt ist beginnt nicht mal die rote LED beim Kopplungsversuch mit anderen Geräten zu leuchten. Erst nach einem Reset (4 mal drücken) ist der Taster wieder „frei“. Kann es sein das mein z2m in einem „Nicht Ikea Modus“ läuft der nur die Taster kann und keine Lampen?
        Beim verbinden der Lampen mit z2m habe ich 2 Abläufe probiert:
        * Zuerst Anlernen aktiviert (zählt dann von 255 sek runter) und dann im Touchlink Tab die erkannte Lampe resettet. Im Logs Tab sehe ich dass der Reset erfolgreich war aber keine einzige Meldung dass es danach einen Kopplungsversuch gegeben hätte. Lampe danach einmal aus- und wieder einschalten habe ich auch schon versucht.
        * Beim 2ten Ablauf habe ich ebenfalls zuerst dass anlernen aktiviert und dann durch 6 maliges aus- und wieder einschalten einen Reset der Lampe durchgeführt. (Etwas frickelig aber man sieht den Erfolg wenn die Lampe ab und aufdimmt) Auch hier kommt nichts im Log und keine Kopplung.
        Den einzigen Unterschied zu deinem Setup den ich noch nicht erwähnt habe ist dass mein z2m + Mosquitto + NodeRED (für später) nicht auf einem RPi läuft sondern auf einem frisch installierten Debian 11 in einer virtuellen KVM Maschine. Kann es sein dass der im Vergleich zum Pi zu schnell reagiert und irgendwo ein Laufzeitproblem hat?

      2. Hallo nochmal,
        gleich nach meinem vorigen Posting hab ich mich durch dummes rumprobieren aus dem Frontend ausgesperrt. Deshalb habe ich die configuration.yaml mehrfach editiert um wieder Zugang zu bekommen. Dann hab ich noch einmal eine Kopplung versucht und jetzt hats geklappt! – mit beiden Lampen. Leider ist mir noch unklar was ich geändert habe…
        Lediglich mit dem Reset im touchlink funktioniert das Koppeln trotzdem nicht.
        Auf jeden Fall Danke für deine Bemühungen
        Grüße
        Mario

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.