Le projet Zigbee2mqtt permet de fabriquer un pont domotique à l’aide d’un sniffer Zigbee CC2531 de Texas Instrument. C’est un projet équivalent au projet français Zigate. Il est compatible avec la plupart des accessoires domotiques Xiaomi Smart Home Aqara et Mijia ainsi que quelques ampoules Ikea. Un firmware dédié est installé sur un sniffer Zigbee (Sniffer CC2531 de Texas Instrument). Pour réaliser ce projet, vous aurez besoin d’un CC Debugger et d’un câblage GBAN pour l’installation et la mise à jour du firmware.
Le projet Zigbee2MQTT permet de nous débarrasser des gateways officiels (ponts domotiques) de plusieurs fabricants. Philips Hue, Xiaomi Aqara.. Un très bon moyen de garder la main sur vos données personnelles. Toutes les mesures, états, commandes resterons chez vous. Le code source est entièrement disponible sur GitHub. La liste complète des accessoires domotiques supportés est ici.
Dans la seconde partie de cet article, tout est expliqué pour inclure les accessoires Xiaomi Aqara ou Mijia à Domoticz à l’aide de Node-RED.
Matériel nécessaire pour fabriquer la Gateway Xiaomi Zigbee
Le pont zigbee2mqtt utilise un sniffer basé sur le circuit CC2531 (environ 5€) de Texas Instrument. Il faudra acheter un CC Debugger de Texas Instrument (environ 16€) pour installer et mettre à jour le firmware sur le sniffer. Il faudra également acheter un câble spécifique (GBAN) qui permet de relier le CC Debugger au Sniffer CC2531 (environ 2€). à chaque fois que vous voulez mettre à jour le firmware.
Sniffer CC2531
Il permet d’intercepter et d’envoyer les commandes Zigbee. Choisissez de préférence un module avec extérieure pour augmenter la zone de couverture et avoir une meilleure réception.
CC Debogger
Permet de télécharger le firmware dans le sniffer CC2531
Câble de programmation GBAN
Ce câbles particulier est nécessaire pour relier le CC Debogger au Sniffer. On l’utilisera pour installer le firmware ou le mettre à jour
Kit de démarrage
Il est possible d’acheter des sniffer CC2531 pour augmenter la couverture Zigbee mais il est souvent plus avantageux d’acheter un kit de démarrage pour débuter.
Matériel nécessaire pour faire fonctionner le pont Zigbee2MQTT
Une fois que le firmware est installé sur le sniffer CC2531, vous n’aurez plus besoin du CC Debugger et de l’interface GBAN. C’est un investissement d’environ 20€ pour fabriquer la gateway Zigbee mais rien ne vous empêche de fabriquer plusieurs Gateway. En utilisant un Raspberry Pi Zero ou un Orange Pi Zero en Ethernet vous pourrez très facilement augmenter la couverture Zigbee dans votre habitation ou pourquoi pas votre jardin.
Il existe un plugin pour la plupart des logiciels domotiques. Domoticz, Node-RED, Home Assistant. Pour les autres logiciels, vous pouvez utiliser le protocole MQTT !
Principe de fonctionnement du pont Zigbee2MQTT
Toutes les actions, états, mesures sont donc interceptées et publiées sur un broker (serveur) MQTT. La passerelle est bi-directionnelle, c’est à dire qu’on pourra également pilotés les appareils Zigbee en envoyant des messages MQTT.
Le projet a été développé en javascript à l’aide de Nodejs. En théorie, on pourra donc faire fonctionner la passerelle sur PC Windows/Linux, MAC et mini PC ARM tel que le Raspberry Pi ou Orange Pi. Pour ce tutoriel, nous allons le déployer sur un Raspberry Pi 3 sur lequel est également installé un broker MQTT (Mosquitto), Node-RED et Domoticz.
Installation du firmware sur le sniffer CC2531
Les étapes d’installation sont peu nombreuses et très bien expliquées sur le WiKi officiel. Je n’ai rencontré aucune difficulté particulière. Le Wiki propose plusieurs méthodes d’installation pour chaque système (Linux, macOS), mais le plus facile est encore d’utiliser un PC Windows.
Installer SmartRF Flash Programmer
Commencez par récupérer la version 1 du logiciel SmartRF Flash Programmer sur le site de Texas Instrument en allant sur cette page. Vous aurez besoin de créer un compte utilisateur gratuit. Décompressez le ZIP et installez SmartRF Flash Programmer.
Connecter le CC Debugger au Sniffer CC2531
Branchez le Sniffer au CC Debugger à l’aide d’un câble de liaison. Le Sniffer est équipé d’un connecteur au pas de 1mm. La carte GBAN sert juste à changer de format de câble. Il n’y a pas de détrompeur sur le CC2531. Utilisez la photo ci-dessous pour orienter correctement le câble (le détrompteur vers l’intérieur du Sniffer).
Branchez le CC Debugger et le Sniffer CC2531 sur l’ordinateur. La LED du Debugger va être rouge au branchement., Appuyez sur le bouton RESET pour la passer en vert. On est prêt pour flasher le firmware.
Installer les drivers
Télécharger le driver Windows swrc212 du boitier CC Debugger (ici). Décompressez le fichier ZIP. Branchez le CC Debugger. Windows va tenter d’installer automatiquement le driver mais va probablement échouer. Le plus facile est et d’ouvrir le gestionnaire de périphérique et de faire un clic droit sur le CC Debugger puis de choisir l’option Mettre à jour le pilote…
Dans la fenêtre qui s’ouvre, choisissez Rechercher un pilote sur mon ordinateur
Puis, indiquez le chemin vers le dossier swrc212 qui contient le drivers (32-bits et 64-bits).
Windows scan le répertoire à la recherche du drivers adapté à votre version. Validez le drivers trouvé pour terminer l’installation. A la fin, les deux appareils doivent être correctement installés.
Télécharger le firmware
Le firmware Zigbee2MQTT est disponible sur GitHub sur cette page. Télécharger la dernière version (fichier hex)
Attention, le lien précédent est mort https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator/CC2531/bin (merci à Nicolas)
Flasher le firmware
Lancez le programme SmartRF Flash Programmer. Indiquez le chemin vers l’image du firmware (fichier hex précédemment téléchargé) puis cliquez sur Perform Action. L’installation dure moins d’une minute. Ne débranchez rien pendant l’opération.
Installer la passerelle Zigbee2MQTT sur le Raspberry Pi
Branchez le sniffer USB sur le Raspberry Pi et ouvrez un Terminal (ou connectez vous en SSH). Exécutez cette commande pour trouver le port sur lequel se trouve le Sniffer.
ls -l /dev/tty*
En général, il est branché sur le port ttyACM0.
Vérifiez maintenant que Nodejs et npm sont installés sur Raspbian. Si vous utilisez Jeedom ou Node-RED, vous n’avez rien à installer.
node --version # v8.X.X mini npm --version # v5.X.X mini
Si ce n’est pas le cas, exécutez ces deux commandes ou suivez ce tutoriel pour plus de détail.
sudo curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs git make g++ gcc
Maintenant, il ne reste plus qu’à installer Zigbee2MQTT
# Clone zigbee2mqtt sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt sudo chown -R pi:pi /opt/zigbee2mqtt # Installation des dépendances - Install dependencies cd /opt/zigbee2mqtt npm install
La commande npm install reste en attente à la fin de l’installation. Vous pourrez la quitter manuellement à la lecture du message
node-pre-gyp info ok
Configurer la passerelle
Le fichier de configuration se trouve dans le dossier data.
nano /opt/zigbee2mqtt/data/configuration.yaml
Modifiez les paramètres MQTT :
- topic de base
- adresse IP du broker MQTT (server). Ne changez rien si le sniffer est branché sur le même Raspberry Pi
- user et password si le broker est protégé par un mot de passe (fortement conseillé, suivez ce tutoriel pour le configurer)
# 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
Enregistrez avec CTRL+X puis O. Tout est prêt !
Ajouter un accessoire Xiaomi Aqara ou Mijia
Lancez le script de la gateway
cd /opt/zigbee2mqtt npm start
Attendez d’avoir le message Zigbee: allowing new devices to join.
Pour le test, je vous propose d’intégrer le détecteur de présence Xiaomi Mi Motion Sensor. La procédure est identique quelque soit l’accessoire.
Prenez un trombone et maintenez le micro-interrupteur durant 3 à 5 secondes jusqu’à ce que la LED blue clignote. Vous devriez obtenir directement l’identifiant unique de votre accessoires. Le script s’occupe du jumelage. Contrairement à la gateway officielle, il faut empêcher l’accessoire de s’endormir en appuyant régulièrement (1 fois par seconde) sur le bouton d’association jusqu’à ce que le processus d’association débute.
Dès que le premier message arrive (détection de mouvement, mesure de température…), c’est terminé, votre accessoire Zigbee est maintenant associé.
2018-6-4 12:37:41 INFO Zigbee: allowing new devices to join. 2018-6-4 12:37:48 WARN Message without device! spinlock: false [] 2018-6-4 12:38:04 INFO New device with address 0x00158d000155d2b7 connected! 2018-6-4 12:38:04 INFO MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"device_connected","message":"0x00158d000155d2b7"}' 2018-6-4 12:38:08 INFO Connecting with device... 2018-6-4 12:38:08 INFO MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"pairing","message":"connecting with device"}' 2018-6-4 12:38:13 INFO Connecting with device... 2018-6-4 12:38:40 INFO MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"pairing","message":"device incoming"}' 2018-6-4 12:38:45 INFO MQTT publish, topic: 'zigbee2mqtt/0x00158d000155d2b7', payload: '{"click":"double"}'
Renommer les accessoires
Par défaut le script utilise l’identifiant unique de l’accessoire domotique comme nom. Ce n’est pas forcément le plus facile pour s’y retrouver. On peut facilement modifier le nom en allant le changer dans le fichier de configuration. Arrêtez le script et ouvrez de nouveau le fichier de configuration
nano /opt/zigbee2mqtt/data/configuration.yaml
En bas du fichier de configuration, vous allez trouver une nouvelle section nommée devices. Indiquez le nom de chaque accessoire avec la clé friendly_name. Evitez de mettre des espaces dans le nom des accessoires pour éviter les problèmes de Topic avec MQTT.
devices: '0x00158d000155d2b7': friendly_name: 'Aqara_Switch' retain: false '0x00158d000159a218': friendly_name: 'PIR' retain: false '0x00158d000149a352': friendly_name: 'Porte' retain: false
Démarrer automatiquement le pont Zigbee2mqtt au démarrage de Raspbian avec systemctl
Jens Willmer, le développeur à l’origine du projet vient de publier le script nécessaire pour démarrer le pont au démarrage de Raspbian. En cas de coupure de courant ou de redémarrage du Raspberry Pi suite à une mise à jour, c’est plus pratique. Créez un nouveau fichier de configuration systemctl
sudo nano /etc/systemd/system/zigbee2mqtt.service
puis collez le code 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
Pour démarrer le pont manuellement, exécutez la commande suivante
sudo systemctl start zigbee2mqtt
Ensuite, vérifiez que tout fonctionne comme prévu avec la commande status
sudo systemctl status zigbee2mqtt
Le service est correctement démarré
● zigbee2mqtt.service - zigbee2mqtt Loaded: loaded (/etc/systemd/system/zigbee2mqtt.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2018-09-11 11:45:24 UTC; 7s ago Main PID: 18086 (npm) CGroup: /system.slice/zigbee2mqtt.service ├─18086 npm ├─18095 /usr/bin/node /usr/lib/node_modules/npm/node_modules/update-notifier/check.js {"pkg":{"name":"npm","version":"5.6.0"}} ├─18109 sh -c node index.js └─18110 node index.js sept. 11 11:45:24 raspberrypi systemd[1]: Started zigbee2mqtt. sept. 11 11:45:29 raspberrypi npm[18086]: > zigbee2mqtt@0.1.0 start /opt/zigbee2mqtt sept. 11 11:45:29 raspberrypi npm[18086]: > node index.js
On peut activer le démarrage automatique au prochain démarrage de Raspbian
sudo systemctl enable zigbee2mqtt.service
D’autres commandes utiles
- sudo systemctl stop zigbee2mqtt, pour arrêter le service. Mise à jour, renommer les devices…
- sudo journalctl -u zigbee2mqtt.service -f, permet d’afficher le journal d’exécution
Mise à jour de Zigbee2mqtt
La mise à jour n’est pas ce qu’il y a de plus simple mais il suffit de suivre à la lettre les commandes indiquées à Jens
# On arrête le service et on se place dans le répertoire d'installation du projet sudo systemctl stop zigbee2mqtt cd /opt/zigbee2mqtt # Backup de la configuration cp -R data data-backup # Update git checkout HEAD -- npm-shrinkwrap.json git pull rm -rf node_modules npm install # On restaure la configuration cp -R data-backup/* data rm -rf data-backup # On re-démarre le service zigbee2mqtt sudo systemctl start zigbee2mqtt
Un système d’alarme en 5′ chrono avec Node-RED et le plugin Homekit
En attendant un test complet avec Jeedom et Domoticz, voici une petite démo réalisée en quelques minutes avec Node-RED. On va créer un petit système d’alarme en utilisant Node-RED pour récupérer les états d’un contacteur de porte (pour la porte d’entrée) ainsi qu’un détecteur de présence qui surveille le salon.
Un noeud fonction permet d’extraire les données récupérées par le pont Zigbee. En fonction de ce que le capteur envoi, on pourra récupérer l’état et quelque fois le niveau et la tension de la batterie. On récupère en sortie du Node fonction 4 données utiles :
- L’état du capteur (booléen)
- Le niveau de batterie (0 à 100%)
- Un message que l’on pourra affiché sur le dashboard ou un message furtif
- La configuration pour un accessoire Homekit
msg1={}; msg2={}; msg3={}; msg4={}; msg1.payload = msg.payload.contact; msg2.payload = msg.payload.battery; if ( msg.payload.contact ) { msg3.payload = "La porte est fermée" msg4.payload = { ContactSensorState : 0 } } else { msg3.payload = "La porte est ouverte !" msg4.payload = { ContactSensorState : 1 } } return [msg1,msg2,msg3,msg4];
Et voilà, en moins de 5 minutes sans avoir besoin d’installer un serveur domotique, vous pouvez développer un petit système d’alarme avec Node-RED
Le flow du projet à importer dans Node-RED
[{"id":"1c34793f.a5ff77","type":"mqtt in","z":"82ba45a3.b704f8","name":"PIR","topic":"zigbee2mqtt/PIR","qos":"2","broker":"12f512eb.9c8b5d","x":130,"y":100,"wires":[["f3413bab.47fab8"]]},{"id":"3a4b5967.b574c6","type":"function","z":"82ba45a3.b704f8","name":"Split","func":"msg1={};\nmsg2={};\nmsg3={};\nmsg4={};\nmsg1.payload = msg.payload.occupancy;\nmsg2.payload = msg.payload.battery;\n\nif ( msg.payload.occupancy ) {\n msg3.payload = \"Présence détectée !\"\n msg4.payload = {\n OccupancyDetected : 1\n }\n} else {\n msg3.payload = \"la pièce est vide\"\n msg4.payload = {\n OccupancyDetected : 0\n }\n}\n\n\nreturn [msg1,msg2,msg3,msg4];\n\n","outputs":4,"noerr":0,"x":380,"y":100,"wires":[["3b83fee7.b1a2b2"],["c23193fa.630a9"],["3a2d5f81.eee14"],["bc648e31.f6e3f"]],"inputLabels":["json"],"outputLabels":["Etat","NIveau batterie","Message notification","Etat Homekit"]},{"id":"f3413bab.47fab8","type":"json","z":"82ba45a3.b704f8","name":"","property":"payload","action":"","pretty":false,"x":250,"y":100,"wires":[["3a4b5967.b574c6"]]},{"id":"c23193fa.630a9","type":"ui_gauge","z":"82ba45a3.b704f8","name":"","group":"a76cdc5d.be91a","order":0,"width":"4","height":"4","gtype":"gage","title":"PIR","label":"%","format":"{{value}}","min":0,"max":"100","colors":["#b51220","#e6e600","#17ca0d"],"seg1":"","seg2":"","x":550,"y":120,"wires":[]},{"id":"2e447a4a.601166","type":"ui_gauge","z":"82ba45a3.b704f8","name":"","group":"a76cdc5d.be91a","order":0,"width":"4","height":"4","gtype":"gage","title":"Porte","label":"%","format":"{{value}}","min":0,"max":"100","colors":["#b51118","#e6e600","#32ca2b"],"seg1":"","seg2":"","x":530,"y":360,"wires":[]},{"id":"7cc7f334.508d0c","type":"mqtt in","z":"82ba45a3.b704f8","name":"Porte","topic":"zigbee2mqtt/Porte","qos":"2","broker":"12f512eb.9c8b5d","x":130,"y":340,"wires":[["1c94d73d.c53d69"]]},{"id":"b832b436.0ac2a8","type":"function","z":"82ba45a3.b704f8","name":"Split","func":"msg1={};\nmsg2={};\nmsg3={};\nmsg4={};\nmsg1.payload = msg.payload.contact;\nif ( msg.payload.contact ) {\n msg3.payload = \"La porte est fermée\"\n msg4.payload = {\n ContactSensorState : 0\n }\n} else {\n msg3.payload = \"La porte est ouverte !\"\n msg4.payload = {\n ContactSensorState : 1\n }\n}\n\nmsg2.payload = msg.payload.battery;\n\n\n\nreturn [msg1,msg2,msg3,msg4];","outputs":4,"noerr":0,"x":380,"y":340,"wires":[["a1d7b7f8.8f6458"],["2e447a4a.601166"],["f37b5a94.a19b98","a47a5db8.951a4"],["5d52112d.4c9f"]],"outputLabels":["Etat","Niveau batterie","Message Notification","Etat Homekit"]},{"id":"1c94d73d.c53d69","type":"json","z":"82ba45a3.b704f8","name":"","property":"payload","action":"","pretty":false,"x":250,"y":340,"wires":[["b832b436.0ac2a8"]]},{"id":"a1d7b7f8.8f6458","type":"ui_switch","z":"82ba45a3.b704f8","name":"","label":"Etat Porte","group":"80560196.e17ca","order":1,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":540,"y":320,"wires":[[]]},{"id":"3b83fee7.b1a2b2","type":"ui_switch","z":"82ba45a3.b704f8","name":"","label":"Etat PIR","group":"80560196.e17ca","order":4,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":560,"y":80,"wires":[[]]},{"id":"f37b5a94.a19b98","type":"ui_toast","z":"82ba45a3.b704f8","position":"top right","displayTime":"10","highlight":"","outputs":0,"ok":"OK","cancel":"","topic":"","name":"","x":570,"y":400,"wires":[]},{"id":"bc648e31.f6e3f","type":"homekit-service","z":"82ba45a3.b704f8","accessory":"be545a0c.987228","name":"PIR","serviceName":"OccupancySensor","x":550,"y":200,"wires":[[]]},{"id":"5d52112d.4c9f","type":"homekit-service","z":"82ba45a3.b704f8","accessory":"abf76c70.fbd85","name":"Mi Switch","serviceName":"ContactSensor","x":540,"y":480,"wires":[[]]},{"id":"a47a5db8.951a4","type":"ui_text","z":"82ba45a3.b704f8","group":"80560196.e17ca","order":2,"width":0,"height":0,"name":"","label":"Etat","format":"{{msg.payload}}","layout":"row-spread","x":530,"y":440,"wires":[]},{"id":"3a2d5f81.eee14","type":"ui_text","z":"82ba45a3.b704f8","group":"80560196.e17ca","order":3,"width":0,"height":0,"name":"","label":"Présence","format":"{{msg.payload}}","layout":"row-spread","x":560,"y":160,"wires":[]},{"id":"12f512eb.9c8b5d","type":"mqtt-broker","z":"","name":"MQTT Local","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"a76cdc5d.be91a","type":"ui_group","z":"","name":"Niveaux batteries","tab":"6355179e.0ee2e8","order":2,"disp":true,"width":"4","collapse":false},{"id":"80560196.e17ca","type":"ui_group","z":"","name":"Etats ","tab":"6355179e.0ee2e8","order":1,"disp":true,"width":"8","collapse":false},{"id":"be545a0c.987228","type":"homekit-accessory","z":"","accessoryName":"Xiaomi Mi Motion","pinCode":"111-11-111","port":"","manufacturer":"Xiaomi","model":"RTCGQ01LM","serialNo":"0x00158d000159a218","accessoryType":"11"},{"id":"abf76c70.fbd85","type":"homekit-accessory","z":"","accessoryName":"Xiaomi Mi Switch","pinCode":"111-11-111","port":"","manufacturer":"Xiaomi","model":"WXKG01LM","serialNo":"0x00158d000155d2b7","accessoryType":"6"},{"id":"6355179e.0ee2e8","type":"ui_tab","z":"","name":"Xiaomi Smart Home","icon":"dashboard"}]
Vous pouvez même intégrer vos accessoires Xiaomi Aqara et Mijia dans l’appli Maison si vous possédez un iPhone.
Les accessoires de sécurité peuvent envoyer des notifications dès qu’un événement est déclenché même si vous n’êtes pas chez vous (à condition d’avoir un pont Homekit à la maison, une Apple TV ou un iPad).
Pour en savoir plus, je vous conseille de lire ces tutoriels précédents :
- Bien débuter avec le Broker MQTT Mosquitto sur Raspberry Pi, Windows, macOS et Linux
- Plugin HomeKit pour Node-RED, plus facile à utiliser que Homebridge
- Bien débuter avec Node-Red
Verrouiller la gateway
Une fois que tous les accessoires sont associés, il est plus prudent d’interdire l’association de nouveaux périphériques. Dans le fichier de configuration, passez la clé permit_join à false.
Boitier à imprimer en 3D
J’ai mis à disposition les fichiers STL d’un petit boitier à imprimer en 3D sur Thingiverse ici.
Comparaison de la portée de réception par rapport à la gateway officielle
Le sniffer USB CC2531 est avant tout est accessoire pour mettre au point les projets d’objets connectés. L’antenne Zigbee est gravée sur le PCB. Elle n’est pas forcément optimisée pour une réception à très longue portée. Pour en avoir le coeur net, j’ai fait un test comparatif (rapide) entre ma Gateway officielle et le Sniffer CC2531. Rien de bien scientifique dans ce test, j’ai simplement placé les deux gateway l’une à coté de l’autre puis vérifié la réception du bouton connecté dans les mêmes conditions (au même endroit).
Lieu | Gateway Officielle Xiaomi | Sniffer Zigbee CC2531 |
Chambre 1 | Oui | Oui |
Chambre 2 | Non | Oui |
Chambre 3 | Non | Non |
Grenier | Oui | Oui |
Grenier (très éloigné) | Non | Non |
A ma grande surprise, le Sniffer reçoit aussi bien (pour ne pas dire mieux) les commandes du bouton connecté Mi Switch que la gateway officielle. C’est dommage qu’il n’existe pas de connecteur pour une antenne externe pour améliorer encore un peu plus la portée de réception. Mais vu le prix d’un Sniffer, ne vous privez pas de multiplier les ponts 🙂
Pour le moment les gammes Aqara et Mijia ne sont pas encore commercialisées dans la boutique officielle de Xiaomi France qui s’est ouverte le 25 mai dernier. En attendant, vous pourrez vous procurer vos accessoires directement en chine ou sur Amazon.
Page GitHub du projet : zigbee2mqtt
Plugins officiels Domoticz et Home Assistant
Deux plugins ont été développés pour faciliter l’intégration sur Domoticz et Home Assistant. J’ai juste testé le plugin sous Domoticz. Suivez ce tutoriel qui explique en détail comment installer des plugins python sur Domoticz.
Une fois installé, vous disposez d’un nouveau type de matériel qui dispose d’un panneau de configuration. Il permet d’indiquer l’adresse IP du broker MQTT sur lequel récupérer les accessoires et d’activer / désactiver l’autorisation de jumelage.
Une fois configuré, tous vos accessoires déjà jumelés apparaissent automatiquement dans la liste des appareils. Il ne reste plus qu’à les ajouter comme n’importe quel autre accessoire domotique.
Comme vous pouvez le constater, le friendly name est correctement utilisé pour nommer les accessoires
Comment ajouter de nouveaux accessoires à Domoticz ?
Commencez par jumelé les nouveaux accessoires comme d’habitude.
Normalement, les nouveaux devices devraient être ajoutés automatiquement à la liste des accessoires disponibles mais si ce n’est pas le cas, ouvrez le plugin Zigbee2MQTT dans les appareils puis cliquez sur update (mettre à jour). Retournez voir la liste des accessoires, vous devriez y trouver les nouveaux appareils.
Mises à jour :
- [17/04/2020] Kit de démarrage CC2531
- [11/09/2018] comment démarrer le pont comme un service avec systemctl
- [7/02/2019] installer le plugin Zigbee2MQTT pour Domoticz
- [20/05/2019] Mise à jour vers le nouveau lien de téléchargement du firmware sur GitHub
A noter on trouve maintenant des clés CC2531 avec antenne.
Merci pour l’info, je vais les ajouter
Bonjour,
Bon tuto, merci, mais le lien https://github.com/Koenkk/Z-Stack-firmware/tree/master/router induit en erreur, j’ai du installer https://github.com/Koenkk/Z-Stack-firmware/blob/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20190608.zip pour mon cas (kit CC2531 basique, config minimale), ce que semble indiquer plus bas la capture d’ecran du flash du firmware ou l’on voit bien que c’est un coordinator qui est installé.
Oui effectivement, merci pour la précision
Bonjour,
je l’ai branché pour pouvoir l’appareiller et j’ai aussi réussi à le commander à travers une commande Json au niveau de la page personnalisé de domoticz ( là ou je l’ai appareillé ). Sur cette même page le Model est bien TS0121_plug et type Router.
je suis allé voir dans le fichier opt/ zigbee2mqtt/ data/ configuration.yaml et je retrouve bien l’appareil.
Bonsoir,
j’ai un problème avec un accessoire, la prise BlitZWOIF BW-SHP13, j’arrive à l’appareillé sous Domoticz mais il apparait dans mes dispositifs comme ceci:
” 28 Zigbee2MQTT connector api_transport 255 prise 10A General Text {“type”: “response”, “requestId”: 3, “isError”: false, “payload”: []} – –
2020-10-20 21:00:02 ”
je n’arrive pas à le configurer comme une prise connecté.
Pouvez vous m’aider ?
Merci
Bonsoir, avez vous essayé de mettre sous tension pour voir comment le payload se présente ?
Bonjour,
Merci pour ce super tuto.
j’utilise le sniffer depuis 6 mois sur debian Stretch (avec Domoticz).
Je suis passer sous Buster en faisant une réinstallation complète, mais lors de l’utilisation du sniffer, cela plante a chaque fois sur la commande “npm start”.
Le sniffer est pourtant bien détecté sur le port ttyACM0, j’ai bien Node et npm, et l’installation de ZigbeeMqtt s’est a priori bien passé.
Le sniffer a t’il besoin d’un reset pour un nouvelle install ?
En tout cas, dès que je remet la carte SD avec mon ancien systeme sous Strech dans le Rpi, cela fct sans problème.
Une solution ?
Merci d’avance.
Bonjour,
j’ai suivi votre tuto mais je reste bloqué sur le lancement de zigbee2mqtt et je ne peux pas appairer mes capteurs.
pouvez vous m’aider ?
voici ce que j’ai comme message d’erreur:
pi@raspberrypi:/opt/zigbee2mqtt $ npm start
internal/modules/cjs/loader.js:983
throw err;
^
Error: Cannot find module ‘winston’
Require stack:
– /opt/zigbee2mqtt/lib/util/logger.js
– /opt/zigbee2mqtt/lib/mqtt.js
– /opt/zigbee2mqtt/lib/controller.js
– /opt/zigbee2mqtt/index.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:980:15)
at Function.Module._load (internal/modules/cjs/loader.js:862:27)
at Module.require (internal/modules/cjs/loader.js:1042:19)
at require (internal/modules/cjs/helpers.js:77:18)
at Object. (/opt/zigbee2mqtt/lib/util/logger.js:1:17)
at Module._compile (internal/modules/cjs/loader.js:1156:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1176:10)
at Module.load (internal/modules/cjs/loader.js:1000:32)
at Function.Module._load (internal/modules/cjs/loader.js:899:14)
at Module.require (internal/modules/cjs/loader.js:1042:19) {
code: ‘MODULE_NOT_FOUND’,
requireStack: [
‘/opt/zigbee2mqtt/lib/util/logger.js’,
‘/opt/zigbee2mqtt/lib/mqtt.js’,
‘/opt/zigbee2mqtt/lib/controller.js’,
‘/opt/zigbee2mqtt/index.js’
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! zigbee2mqtt@1.12.2 start:
node index.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the zigbee2mqtt@1.12.2 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging ou tput above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/pi/.npm/_logs/2020-04-11T15_12_51_843Z-debug.log
pi@raspberrypi:/opt/zigbee2mqtt $
merci d’avance
Je viens de trouver la solution à mon problème.
J’ai reflashé le firmware de ma clé sniffer.
Parfait ! Merci beaucoup pour l’info 😉 Je n’arrivais pas à reproduire l’erreur.
Cette solution a encore un avantage comparé aux autres ?
Même le prix n’est plus aussi compétitif, la conbee est en promo a 30 euros en ce moment. Pas de serveur MQTT, pas de nodeJS, pas de bricolage. Flashage plus facile.
Ca supporte plus de matériel, mais que des marques introuvables, sinon les autres solutions le font aussi.
Même pour un fana de DIY, je trouve que ça perd de l’intérêt.
Oui absolument mais ça reste un projet sympa pour se mettre à la domotique et au DIY. C’est toujours très intéressant que des projets Open Source perdurent en cas de disparition ou évolution (dans le mauvais sens) d’un produit commercial.
Bonjour a tous,
En plein préparatif pour me lancer dans ce projet j’ai trois petite question, sûrement bête mais bon je m’y retrouve confronter en fessant des test sur un vieux eepc passé sous Debian pour l’occasion.
1er :
Cette commande “ls -l /dev/tty*” doit retourner quel type de réponse pour identifier la cle zigbee2mqtt.
Ca me retourne une liste d’environ 30 ligne sans qu’aucune d’entre elle n’ai quelque chose qui me saute aux yeux pour identifier le périphérique cible.
2em :
Il est dit que l’installation de nodejs n’était pas obligatoire si l’on passait sur jeedom ensuite, ce qui est mon cas.
Ceci dit la commande pour effectuer l’installation de la clé zigbee2mqtt est “npm install” et bien sur j’ai un “npm commande introuvable” Oo ?! donc comment faire.
3em pour finir :
Je ne trouve l’information nul part mais a quoi servent les deux switch physique sur la clé zigbee2mqtt ? l’un passe la clé en led verte/jaune et l’autre le laisse dans sont etat initial, je lis quelque chose comme “debug” sous le switch entre la prise usb et le micro-contrôleur, mais qu’en est-t’il du switch sous le micro-contrôleur, celui qui fait passé la led au vert.
Merci pour votre travail et votre implication et merci par avance de m’éclairer. 🙂
Bonsoir. Je n’ai pas testé le plugin zigbee2mqtt sur Jeedom, il faut peut être attendre que les dépendances du module soient totalement installées. Le processus est asynchrone.
Bonsoir.
Sur le point de me lancer j’ai fait l’acquisition du kit complet pour le sniffer, la clé usb cc2531 plus antenne en option, le CC etc… J’ai flashé le firmwaire tout est OK.
en phase de test j’ai opté pour un ultra portable Packard bell qui traînait.
Installe de debian 9.11 et je compte faire tourner tout sa avec jeedom.
Donc mosquitto suivi de sa configuration puis l’installation de zigbee2mqtt et LA quelque chose m’échappe.
il est dit :
“Vérifiez maintenant que Nodejs et npm sont installés sur Raspbian. Si vous utilisez Jeedom ou Node-RED, vous n’avez rien à installer.”
Mais arrêter moi si je me tromper pour installer zigbee2mqtt la commande final est “npm install” est fatalement la commande est introuvable Oo ?! Je fait comment ?
Merci déjà pour cette article génial 🙂 et merci d’avance pour me sortir de cette incompréhension 🙂
Nodejs et npm sont installés automatiquement par les scripts d’installation de Node-RED et Jeedom.
L’installation des dépendances n’a pas l’air de fonctionner avec node v12.4.0 et npm v6.9.0
Bonjour Lionel et merci beaucoup pour l’info. Je vais faire une nouvelle installation sur une VM Debian pour voir s’il n’y a pas une regression.
Pourrait-on avroir l’URL exacte du sensor Xiaomi utilisé?
Bonjour Nis, j’ai testé avec succès les détecteurs le bouton connecté, le détecteur de mouvement infrarouge, le capteur d’ouverture de porte et fenêtre, la sonde de température et d’humidité SHT30 https://projetsdiy.fr/produit/deal-accessoires-xiaomi-smart-home-promo-bouton-connecte-detecteur-de-mouvement-ouverture-fuite-deau-sondes-temperature-humidite-fuite-deau/
Firmware URL: https://github.com/Koenkk/Z-Stack-firmware/tree/master/router
Merci pour l’info Nicolas. J’ai corrigé l’article. Bonne journée
“Le firmware Zigbee2MQTT est disponible sur GitHub sur cette page”: l’URL ne marche plus.
Bonjour
Je ne vois pas comment faire des répéteurs avec un cc2531. Pour moi sur le wiki, pour faire des repeteurs c’est le cc2530 qui est utilisé. Je me trompe?
En tout cas je suis preneur si vous avez le bon firmware.
Merci
JM
Salut,
Merci beaucoup pour ton tuto. Je tente toujours de le mettre en place. J’ai enfin reçu tous les composants mais pas de chance mon CC debugger ne fonctionne pas.J’ai pas mal cherché mais mon windows 10 ou mon linux ne reconnait même pas le hardware. Je n’arrive donc même pas à l’étape mise à jour du driver. J’ai changé le cable USB et de ports USB.
J’ai ouvert la boite et je me rends compte que ce n’est pas exactement la même carte que décrit dans la doc de TI. Pourtant quand je le branche au sniffer j’ai bien le voyant qui se met en vert. Mais je ne peux pas flasher car le CC n’est pas vu par Windows. Je sèche un peu. Il faudra que je commande un autre CC. Je l’avais pris sur le site que tu conseilles. Je ne me souviens plus si c’était exactement le même vendeur. Pas facile de savoir vraiment. Mais du coup il faut faire attention, je suppose qu’il y a des CC debugger fake. Il faut que je tente sur un autres windows. Je testerais demain au travail.
Mais je ne perds pas espoir 🙂
Bonjour Didier et merci pour l’info. Le module est probablement HS effectivement. Les tentatives n’ont rien donné sur un autre ordi ?
Bonjour,
Merci pour ce tutoriel !
Pouvons nous récupérer et contrôler nos capteurs via Domoticz ? Le plugin HomeKit sur NODE-RED est obligatoire ou nous pouvons utiliser HomeBridge ?
Merci d’avance, A.
Bonjour Adomi. Je viens de publier la seconde partie qui explique comment inclure les accessoires Xiaomi Aqara ou Mijia à Domoticz. Pour le moment le projet Zigbee2mqtt renvoie les mesures et les états des accessoires Xiaomi vers un serveur MQTT. Il publie les messages de façon générique sous la forme d’un objet JSON clé:valeur. Il n’y a que pour Home Assistant que le travail a été fait jusqu’au bout (c’est un serveur domotique très apprécié des développeur mais un peu plus difficile à prendre en main quand on débute en programmation). Il faut donc “re-fabriquer” un message compréhensible par Domoticz suivant les spécifications de l’API JSON. C’est très facile à faire avec Node-RED effectivement, mais on pourrait le faire en python, javascript… Il y a également un plugin HomeKit qui fonctionne très bien sous Node-RED, donc c’est facile de faire d’une pierre deux coups 🙂 Voilà, j’espère ne rien avoir oublié.
A noter que la procédure de flash peut se faire aisément sous Linux via cc-tools (plus simple que tout le tralala windows), mais aussi que la page du projet ZigBee2MQTT mets a disposition un firmware pour routeur (ce qui, en jargon Zigbee est ce qu’on appelle un répéteur).
On peut donc flasher plein de petits CC2531 qui seront autonomes, juste branchés a des petites alimentations USB de GSM par exemple.
Salut !
Le lien vers le firmware Zigbee2MQTT n’est plus valable. Je pense que Koen a modifié la structure du git …
Cordialement
Bonjour Vincent et merci beaucoup pour l’info. Effectivement, il y a beaucoup plus de modules Zigbee supportés maintenant. J’ai mis le liens vers la carte low cost que j’ai utilisé pour tester. Je mettrai à jour l’article après les vacances. A très bientôt.
Bonjour,
Petite question , est ce que c’est aussi compatible avec les ampoules Yeelight ? carJ’ai mon panier prêt à être payer pour essayer….
Merci d’avance, C.
Bonjour Crunch. Non désolé, les ampoules Yeelight utilisent une connexion WiFi à la place du Ziigbee. J’imagine que la contrainte de consommation d’énergie est moins importante pour une ampoule alimentée en 220V. De plus un module WiFi coûte moins chère à fabriquer qu’un module Zigbee.