Es 
gab bereits Artikel über Habr darüber, wie ZigBee-Geräte verschiedener Hersteller mit Smart-Home-Steuerungssystemen ohne Verwendung von Marken-Hubs wie Xiaomi Gateway hergestellt werden können. Anweisungen für 
Homebridge fand ich jedoch nicht nur auf Habré, sondern auch auf anderen Internet-Freiflächen. Daher möchte ich die Erfahrung mit dem Hinzufügen von ZigBee-Geräten zu Homebridge teilen. Vielen Dank an den Ersteller der Ressource 
zigbee2mqtt.io. Dort sind bereits die Methoden zum Flashen des CC2531-Modems und zum Herstellen einer Verbindung zu Smart-Home-Steuerungssystemen wie 
Home Assistant , 
Domoticz und 
Majordomo beschrieben . Der Artikel richtet sich an Benutzer, auf 
denen Homebridge bereits 
installiert und konfiguriert ist .

Alle Aktionen in diesem Artikel werden mit den folgenden Geräten ausgeführt:
- Raspberry Pi 3 B + (Raspbian OS)
- CC2531 Dongle (genäht)
- Xiaomi-Geräte (Funkschalter, Temperatur- und Feuchtigkeitssensor ...)
- MacBook Pro (OSX 10.14)
Anweisungen für die Firmware CC2531 in russischer Sprache finden Sie 
hier (über Pi) und 
hier (über CCDebuger) .
Schematisch kann die gesamte Arbeitskette wie folgt dargestellt werden:

Jetzt in Ordnung.
Nach dem Flashen des Modems müssen Sie den 
MQTT-Broker installieren (falls nicht bereits installiert).
Ich benutze Mosquitto, installiert wie folgt:
sudo apt install -y mosquitto mosquitto-clients  
Detaillierte Konfigurationsanweisungen finden Sie 
hier .
Jetzt müssen Sie den Dienst zigbee2mqtt installieren, der mit dem CC2531-Modem interagiert und die Daten an Mosquitto überträgt:
 sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt sudo chown -R pi:pi /opt/zigbee2mqtt cd /opt/zigbee2mqtt npm install 
Um zigbee2mqtt als Dienst auszuführen, müssen Sie eine Datei erstellen:
/etc/systemd/system/zigbee2mqtt.servicemit folgenden Inhalten: [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 
 Wenn Sie den MQTT-Broker bereits installiert haben, müssen Sie die richtigen Parameter für die Verbindung in der Datei registrieren: /opt/zigbee2mqtt/data/configuration.yaml 
Wir starten den Dienst und fügen ihn dem Autorun hinzu:
 sudo systemctl start zigbee2mqtt sudo systemctl enable zigbee2mqtt.service 
Wir schauen uns das Protokoll an:
 sudo journalctl -u zigbee2mqtt.service -f 
Wenn alles richtig konfiguriert ist, sollten die folgenden Zeilen angezeigt werden: `permit_join` set to `true` in configuration.yaml. Allowing new devices to join. Set `permit_join` to `false` once you joined all devices. Zigbee: allowing new devices to join. Connecting to MQTT server at mqtt://localhost zigbee-shepherd ready Connected to MQTT server 
 Sie können die Integration mit Homebridge starten. Die Ressource 
zigbee2mqtt.io enthält eine 
Liste der unterstützten Geräte und Anweisungen zum Erstellen eines Paares. Erwägen Sie beispielsweise das Hinzufügen des Xiaomi Wireless Switch.

Verwenden Sie das 
MQTT Explorer- Programm, um Ereignisse in Mosquitto anzuzeigen. Wir starten, geben die Adresse des MQTT-Servers ein, in meinem Fall befindet sie sich unter 
192.168.1.104 . Wenn alles korrekt installiert ist, sehen wir im Baum den Zweig zigbee2mqtt. Wir gehen hinein. Halten Sie nun am Xiaomi Wireless Switch die Reset-Taste gedrückt, bis die Diode blinkt (ca. 5 Sekunden). Nach ungefähr 10 Sekunden im Zweig zigbee2mqtt sehen wir unser Gerät und die Daten, die es überträgt.
Wenn dies nicht der Fall ist, drücken Sie nach dem Blinken der Diode einmal Reset mit einer Frequenz von pro Sekunde. Es sollte so sein:
Lassen Sie uns die Daten analysieren:
 { "linkquality":110, "battery":100, "voltage":3052, "click":"single" } 
Das Klickfeld enthält die Art des Klicks. Es können fünf davon vorhanden sein:
Click, double click, triple click, long, long_releaseWir haben gelernt, wie man Daten empfängt, und fügen jetzt den Xiaomi Wireless Switch zur Homebrdige hinzu. Für die Interaktion mit MQTT verwenden wir das 
Modul homebridge-mqttthing . Installiert auf die gleiche Weise wie andere:
 (sudo) npm install -g homebridge-mqttthing 
Das Modul unterstützt eine Vielzahl von Geräteklassen, von Schaltern bis zu Thermostaten. Für Xiaomi Wireless Switch ist die 
StatelessProgramableSwitch Klasse am besten geeignet. Zum Hinzufügen müssen Sie das Thema 
(0x00158d00022c85ea) und die Namen der Befehle kennen. Es stellt sich heraus, diese Art von Konfiguration:
 { "accessory": "mqttthing", "type": "statelessProgrammableSwitch", "name": "Xiaomi Single Button", "topics": { "getSwitch": { "topic": "zigbee2mqtt/0x00158d00022c85ea", "apply": "return JSON.parse(message).click;" } }, "switchValues": [ "single", "double", "long_release" ] } 
In Analogie habe ich hinzugefügt:
Temperatur- und Feuchtigkeitssensor, Berührungssensor, Anwesenheitssensor und Schalter. "accessories": [ { "accessory": "mqttthing", "type": "occupancySensor", "name": "Xiaomi Occupancy Sencor", "topics": { "getOccupancyDetected": { "topic": "zigbee2mqtt/0x00158d000236b492", "apply": "return JSON.parse(message).occupancy;" } }, "integerValue": true }, { "accessory": "mqttthing", "type": "contactSensor", "name": "Xiaomi Contatc Sencor", "topics": { "getContactSensorState": { "topic": "zigbee2mqtt/0x00158d000278db8c", "apply": "return !JSON.parse(message).contact;" } }, "integerValue": true }, { "accessory": "mqttthing", "type": "statelessProgrammableSwitch", "name": "Xiaomi Single Button", "topics": { "getSwitch": { "topic": "zigbee2mqtt/0x00158d00022c85ea", "apply": "return JSON.parse(message).click;" } }, "switchValues": [ "single", "double", "long_release" ] }, { "accessory": "mqttthing", "type": "temperatureSensor", "name": "Xiaomi Temperature Sencor", "topics": { "getCurrentTemperature": { "topic": "zigbee2mqtt/0x00158d000201842c", "apply": "return parseFloat(JSON.parse(message).temperature);" } }, "history": true }, { "accessory": "mqttthing", "type": "humiditySensor", "name": "Xiaomi Humidity Sencor", "topics": { "getCurrentRelativeHumidity": { "topic": "zigbee2mqtt/0x00158d000201842c", "apply": "return parseFloat(JSON.parse(message).humidity);" } }, "history": true } ] 
 Wir prüfen:

Früher habe ich das Homebridge-Mi-Aqara-Modul verwendet, das ZigBee-Geräte hinzufügt und mit Xiaomi Gateway interagiert. Wenn das Gateway abgelehnt wird, verringert sich die Antwortzeit der Geräte. Außerdem habe ich das Gerät entfernt, das sich in meinem WLAN befindet und ständig im Internet crawlt.