DesignSpark Electrical Logolinkedin
Menu Suche
Ask a Question

Mit Zigbee2mqtt Zigbee-Probleme elegant unter Kontrolle bringen

Lokale Steuerung für verschiedene ZigBee-Heimautomatisierungssysteme auf einer gemeinsamen Plattform einrichten.

Die Heimautomatisierung hat in den letzten Jahren sprunghaft zugenommen und ist standardisiert worden. Viele Unternehmen bieten Systeme zur kombinierten Steuerung von Heizung, Beleuchtung und verschiedenen Netzgeräten und mehr an. Außerdem ermöglichen sie eine Fernsteuerung über die Cloud und mobile Anwendungen sowie Integrationen von Drittanbietern über eigene APIs und die von Partnern.

Aber vielleicht gibt es kein System, das alles bietet, was Sie benötigen? Sie könnten mehrere Systeme verschiedener Anbieter kombinieren, wenn diese über APIs verfügen. Allerdings befinden sie sich in der Regel in der Cloud, d. h. auf Remote-Servern und nicht auf einem lokalen Gerät. Bei der Zusammenführung der einzelnen Komponenten besteht ein hohes Ausfallrisiko. Inzwischen stellen manche Unternehmen den Betrieb auch bereits wieder ein und Geräte lassen sich nicht mehr oder nur noch eingeschränkt nutzen, wenn ihre Cloud-Plattformen offline gehen.

Mit Zigbee2mqtt können Sie die Kontrolle übernehmen und ein System erstellen, das alles steuert. Dabei verwenden Sie vielleicht, wie wir in unserem Beispiel, einen kombinierten Anwesenheits-, Temperatur- und Lichtsensor von einem Anbieter zusammen mit einem ferngesteuerten kombinierten Netzschalter und Leistungssensor von einem anderen Anbieter. Wie der Name schon sagt, müssen diese Geräte Zigbee Wireless verwenden und auf der Liste der unterstützten Geräte stehen – es sei denn, Sie sind bereit, den Support zu erweitern.

Das Ergebnis ist eine gemeinsame Plattform, die (da dieser Artikel verfasst wird) aus dem Stand 191 ZigBee-Geräte von 39 verschiedenen Anbietern unterstützt. Außerdem lässt sie sich lokal betreiben, ohne dass Sie auf Cloud-Dienste angewiesen sind – es sei denn, Sie entscheiden sich für eine Integration.

Sobald Ihre Geräte über MQTT-Pub/Sub-Messaging zugänglich sind, können Sie für die eigentliche Steuerung ein Heimautomatisierungssystem wie zum Beispiel Home Assistant oder openHAB verwenden. Wenn Sie es wirklich möchten, können Sie auch Node-RED verwenden oder eine eigene Anwendung in einer der vielen verschiedenen Sprachen schreiben, für die MQTT-Unterstützung verfügbar ist.

Hardware einrichten 

Ein Raspberry Pi 3 B+ (137-3331) eignet sich perfekt als Plattform für den Betrieb unseres Zigbee2mqtt-Gateways, das Hosting eines MQTT-Brokers und, falls gewünscht, auch eine darauf aufgesetzte Heimautomatisierungsanwendung. Über den TI USB 2,4 GHz ZigBee-Dongle für CC2531 (798-3656) steht uns ein Funkgerät zur Verfügung, das mit Firmware für Netzwerkcontroller programmiert wird, in unserem Fall den TI Debugger Programmer for RF System On Chips (709-4370) .

Das Zigbee2mqtt-Projekt enthält Anleitungen zum Flashen der Firmware mit der Windows-Software von TI und der Open-Source-Software CCTools unter Linux/Mac OS X. Wir haben uns für Letztere entschieden. Hierbei ist zu beachten, dass sich die Kabeladapterplatine auf der Zigbee2mqtt-Website von der des TI Programmer unterscheidet. Bei der Verbindung mit dem CC2531-Dongle muss die Orientierung der Steckverbinder daher, wie oben gezeigt, umgekehrt werden.

Wir mussten nur, wie in der Anleitung beschrieben, ein Firmware-Image herunterladen und auf den CC2531 flashen. Der Zigbee-Controller ist damit bereit – gehen wir zur Zigbee2mqtt-Software über.

Installation der Software

Im Folgenden werden die kombinierten Schritte für die Installation der Zigbee2mqtt-Software und des Mosquitto MQTT Broker mit Befehlszeilen-Clients zum Testen beschrieben. Näheres hierzu finden Sie in der offiziellen Dokumentation.

Wir setzen voraus, dass eine neue Raspbian-Installation (die Lite-Version reicht aus) vorhanden ist und ggf. die grundlegenden Konfigurationsschritte (z. B. die Herstellung der WLAN-Verbindung) durchgeführt wurden. Nun können wir mit den Abhängigkeitspaketen beginnen.

$ wget -qO - http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key | sudo apt-key add -

$ sudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.list -P /etc/apt/sources.list.d/

$ wget -qO - https://deb.nodesource.com/setup_10.x | sudo -E bash -

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

Sowohl der Mosquitto MQTT Broker als auch Node.js sind über die Raspbian-Repositorys verfügbar. Wir erhalten jedoch wesentlich aktuellere Builds, wenn wir dafür einfach zwei benutzerdefinierte Repositorys konfigurieren.

Als Nächstes klonen wir das GitHub-Repository von Zigbee2mqtt und installieren es.

$ sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt

$ sudo chown -R pi:pi /opt/zigbee2mqtt

$ cd /opt/zigbee2mqtt

$ npm install

Nun starten wir Zigbee2mqtt, und zwar wie folgt:

$ npm start

Damit es beim Hochfahren automatisch startet, müssen wir eine Systemd-Unit-Datei erstellen:

$ sudo vi /etc/systemd/system/zigbee2mqtt.service

Der Inhalt ist:

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

Durch folgende Eingabe lässt sich dies ohne Herunter- und erneutes Hochfahren starten:

$ sudo systemctl start zigbee2mqtt

Konfiguration

# Home Assistant integration (MQTT discovery)
homeassistant: false

# allow new devices to join
permit_join: true

# 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 CC2531 USB sniffer
  port: /dev/ttyACM0

Dies ist die Anfangskonfiguration für Zigbee2mqtt. Bearbeiten lässt sie sich folgendermaßen:

$ vi /opt/zigbee2mqtt/data/configuration.yaml

Hier können Sie das Grund-Topic von MQTT ändern, auf einen Remote-Host verweisen, wenn der Broker auf einem anderen Computer läuft, und gegebenenfalls einen Benutzernamen und ein Kennwort zur Authentifizierung festlegen.

Die serielle Schnittstelle ist im Allgemeinen /dev/ttyACM0, der CC2531 kann jedoch beim Durchzählen auf eine höhere Zahl kommen, wenn andere Geräte dieser Klasse angeschlossen sind.

Geräte koppeln und testen

Der Parameter „permit_join“ sollte auf „true“ gesetzt werden, damit Geräte gekoppelt werden können. Später kann er dann auf „false“ gesetzt werden, um die Kopplung neuer Geräte zu verhindern. Die Dokumentation enthält Informationen zum Kopplungsvorgang für verschiedene Geräte. Wir haben sie jedoch einfach nur eingeschaltet, und schon haben sie sich gekoppelt!

Wenn wir den Status der Kopplung zwischen der Zigbee2mqtt-Bridge und dem Gerät beobachten möchten, geben wir einfach Folgendes ein:

$ mosquitto_sub -v -h localhost -t zigbee2mqtt/#

Hier ist das # ein Platzhalter, daher haben wir alle Nachrichten unter dem für zigbee2mqtt konfigurierten Grund-Topic abonniert. Durch das -v können wir sehen, unter welchen Topics Nachrichten veröffentlicht werden. Im folgenden Screenshot sehen wir, wie sich ein Philips Hue-Bewegungsmelder mit Anwesenheits-, Temperatur- und Lichtsensor koppelt und mit der Ausgabe der drei Sensormesswerte und des Akkustatus beginnt. Der Topic-Name enthält die Netzwerkadresse des Geräts.

Wir können über Zigbee2mqtt nicht nur Daten empfangen, sondern auch Befehle senden. Schauen wir uns einmal an, wie dieser Vorgang bei einem Salus SP600 Smart Plug abläuft.

Sobald der Smart Plug hochgefahren wurde, koppelte er sich und über das MQTT-Topic gingen Berichte ein, die mit seiner Adresse übereinstimmten. Wenn wir dann den manuellen Netzschalter des Plugs betätigten, wechselte der gemeldete Zustand zwischen „Ein“ und „Aus“.

Um den Status per Fernsteuerung über MQTT festzulegen, konnten wir einfach folgenden Befehl verwenden:

$ mosquitto_pub -h localhost -t zigbee2mqtt/0x001e5e0902146174/set -m "ON"

Hier haben wir zum gleichen Topic gepostet, zu dem wir auch die Berichte erhalten haben, aber das Suffix „set“ und eine Nachricht mit dem gewünschten Status hinzugefügt.

Weitere Schritte

Nunmehr konnten wir ein Heimautomatisierungssystem mit MQTT-Unterstützung einrichten, Node-RED konfigurieren oder eine Integration in benutzerdefinierte Anwendungen durchführen. Eine oder mehrere Cloud-Plattformen standen uns zur Nutzung zur Verfügung, wir konnten aber jederzeit zu einer anderen Cloud-Plattform wechseln oder unser System vollständig unter lokale Kontrolle bringen.

Standardmäßig verlangt der Mosquitto Broker von Clients keine Authentifizierung, um Nachrichten zu veröffentlichen und Topics zu abonnieren. In der Entwicklungs- und Testphase ist das kein Problem, aber auch wenn Sie eine Verbindung zu einem Heimnetzwerk herstellen, das Sie als sicher erachten, ist die Einrichtung einer einfachen Authentifizierung empfehlenswert. Wie Sie dabei vorgehen, hängt vom jeweiligen Verwendungszweck ab. Sie können beispielsweise festlegen, dass sich Clients authentifizieren müssen, wenn sie etwas veröffentlichen, aber anonym abonnieren können. Wenn Sie die Daten zu Ihren MQTT-Topics als vertraulich betrachten, ist möglicherweise auch für das Abonnement eine Authentifizierung erforderlich, oder Sie können das Veröffentlichen/Abonnieren auf bestimmte Topics und Benutzer beschränken. Nähere Einzelheiten hierzu finden Sie in der Dokumentation.

Zu guter Letzt gibt es noch weitere Möglichkeiten, wie wir das ZigBee-Netzwerk sichern und gegebenenfalls seine Reichweite erhöhen können.

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.

31 May 2019, 14:31

Kommentare