Ajout de périphériques ZigBee à Homebridge à l'aide de CC2531

Il y a déjà eu des articles sur Habr sur la façon de fabriquer des appareils ZigBee de divers fabricants avec des systèmes de contrôle de la maison intelligente, sans utiliser de concentrateurs de marque, tels que Xiaomi Gateway. Cependant, je n'ai pas trouvé d'instructions pour homebridge non seulement sur Habré, mais aussi sur d'autres espaces ouverts Internet. Par conséquent, je veux partager l'expérience de l'ajout d'appareils ZigBee à Homebridge. Un grand merci doit être adressé au créateur de la ressource zigbee2mqtt.io , les méthodes pour flasher le modem CC2531 et se connecter à des systèmes de contrôle domotique comme Home Assistant , Domoticz et Majordomo y sont déjà décrites . L'article est destiné aux utilisateurs qui ont déjà installé et configuré un pont domestique.


Toutes les actions de l'article seront effectuées avec le matériel suivant:

  • Raspberry Pi 3 B + (OS Raspbian)
  • Dongle CC2531 (cousu)
  • Appareils Xiaomi (interrupteur sans fil, capteur de température et d'humidité ...)
  • MacBook Pro (OSX 10.14)

Les instructions pour le firmware CC2531 en russe sont ici (via Pi) et ici (via CCDebuger) .

Schématiquement, toute la chaîne de travail peut être représentée comme suit:



Maintenant en ordre.

Après avoir flashé le modem, vous devez installer le courtier MQTT (s'il n'est pas déjà installé).

J'utilise Mosquitto, installé comme ceci:

sudo apt install -y mosquitto mosquitto-clients # sudo services mosquitto start #  sudo systemctl enable mosquitto.service # 

Des instructions de configuration plus détaillées peuvent être trouvées ici .

Vous devez maintenant installer le service zigbee2mqtt, qui interagit avec le modem CC2531 et transfère les données à Mosquitto:

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

Pour exécuter zigbee2mqtt en tant que service, vous devez créer un fichier:
/etc/systemd/system/zigbee2mqtt.service

avec le contenu suivant:
 [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 


Si vous avez déjà installé le courtier MQTT, vous devez enregistrer les paramètres corrects pour vous y connecter dans le fichier:

 /opt/zigbee2mqtt/data/configuration.yaml 

Nous démarrons le service et l'ajoutons à l'exécution automatique:

 sudo systemctl start zigbee2mqtt sudo systemctl enable zigbee2mqtt.service 

Nous regardons le journal:

 sudo journalctl -u zigbee2mqtt.service -f 

Si tout est correctement configuré, vous devriez voir les lignes suivantes:
 `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 


Vous pouvez démarrer l'intégration avec homebridge. La ressource zigbee2mqtt.io possède une liste de périphériques pris en charge et des instructions pour créer une paire. Par exemple, envisagez d'ajouter le commutateur sans fil Xiaomi.



Pour afficher les événements dans Mosquitto, utilisez le programme MQTT Explorer . Nous commençons, entrez l'adresse du serveur MQTT, dans mon cas, il est situé au 192.168.1.104 . Si tout est installé correctement, dans l'arborescence, nous verrons la branche zigbee2mqtt. Nous y passons. Maintenant, sur le commutateur sans fil Xiaomi, maintenez le bouton de réinitialisation enfoncé jusqu'à ce que la diode clignote (environ 5 secondes). Après environ 10 secondes dans la branche zigbee2mqtt, nous verrons notre appareil et les données qu'il transmet.

Si cela ne se produit pas, après le clignotement de la diode, essayez d'appuyer une fois sur Reset avec une fréquence par seconde. Cela devrait être comme ceci:



Analysons les données:

 { "linkquality":110, "battery":100, "voltage":3052, "click":"single" } 

Le champ Click contient le type de clic; il peut y en avoir cinq:
Click, double click, triple click, long, long_release

Nous avons appris à recevoir des données, ajoutez maintenant le commutateur sans fil Xiaomi au homebrdige. Pour interagir avec MQTT, nous utiliserons le module homebridge-mqttthing . S'installe de la même manière que les autres:

 (sudo) npm install -g homebridge-mqttthing 

Le module prend en charge un grand nombre de classes d'appareils, des commutateurs aux thermostats. Pour le commutateur sans fil Xiaomi, la classe StatelessProgramableSwitch est la plus appropriée. Pour ajouter, vous devez connaître la rubrique (0x00158d00022c85ea) et les noms des commandes. Il s'avère que ce genre de config:

 { "accessory": "mqttthing", "type": "statelessProgrammableSwitch", "name": "Xiaomi Single Button", "topics": { "getSwitch": { "topic": "zigbee2mqtt/0x00158d00022c85ea", "apply": "return JSON.parse(message).click;" } }, "switchValues": [ "single", "double", "long_release" ] } 

Par analogie, j'ai ajouté:

capteur de température et d'humidité, capteur tactile, capteur de présence et interrupteur.
 "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 } ] 


Nous vérifions:



J'ai utilisé le module homebridge-mi-aqara, qui ajoute des appareils ZigBee, interagissant avec Xiaomi Gateway. Lorsque Gateway est annulé, le temps de réponse des appareils a diminué, en plus je me suis débarrassé de l'appareil qui se trouve sur mon WiFi et qui rampe constamment sur Internet.

Source: https://habr.com/ru/post/fr462459/


All Articles