Domotique et objets connectés à faire soi-même

Zigbee2MQTT. Inclure des accessoires Xiaomi Aqara à Domoticz via plugin ou Node-RED

Un plugin est disponible pour faciliter l’inclusion des accessoires Zigbee à Domoticz (ou Home Assistant). Il n’est plus nécessaire de traduire les messages MQTT à l’aide de Node-RED  Pour pourrez intégrer des accessoires Zigbee Philips, Xiaomi Aqara ou Mijia sans avoir besoin d’une gateway officielle. Si vous découvrez le projet Zigbee2MQTT,  commencez par lire cet article qui explique comment fabriquer votre propre gateway Zigbee ainsi que son principe de fonctionnement.

 

Dernière mise à jour : 20 avril 2020

Je vous propose de tester plusieurs accessoires Xiaomi Aqara. Le capteur d’ambiance (température, humidité, baromètre), le détecteur d’ouverture de porte ou fenêtre ainsi que le détecteur de présence par infrarouge.

Préparer la gateway Zigbee2mqtt pour les accessoires Aqara et Mijia

Vous aurez donc besoin de fabriquer la gateway Zigbee2mqtt et d’installer le projet sur le serveur Domoticz. Si la couverture Zigbee est insuffisante, vous pouvez fabriquer plusieurs gateway. Je vous conseille toutefois de ne pas inclure un même accessoire Aqara sur plusieurs passerelles pour ne pas multiplier inutilement les messages MQTT.

Le pont zigbee2mqtt utilise un CC2531 de Texas Instrument. Vous aurez besoin d’acheter un CC Debugger de Texas Instrument (environ 8€) pour installer et mettre à jour le firmware sur le sniffer ainsi qu’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.

Attention à ne pas confondre avec le CC2540 destiné au Bluetooth

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.

ll est également possible d’acheter séparément les composants.

Suivez le tutoriel précédent qui explique étape par étape comment fabriquer la gateway Zigbee2MQTT.

Vous pouvez aussi imprimer en 3D un boitier de protection disponible sur Thingiverse.

Installer un serveur MQTT (Mosquitto) sur le Raspberry

Vous aurez également besoin d’un serveur MQTT. Le plus simple est de l’installer sur le même Raspberry Pi sur lequel est installé Domoticz. Exécutez la commande suivante pour installer le serveur et le client MQTT Mosquitto sur Raspbian. L’installation du client est optionnelle mais toutefois fortement conseillée pour tester et suivre les messages MQTT publiés par la passerelle Zigbee.

sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients

Pour en savoir plus sur MQTT et comment sécuriser l’accès au serveur, vous pouvez lire ce tutoriel.

Inclure les accessoires Aqara ou Mijia au pont Zigbee2MQTT

Comme nous l’avons vu dans la première partie, il suffit d’appuyer sur le micro-interrupteur d’inclusion disponible sur chaque accessoire. La procédure d’inclusion varie d’un accessoire à l’autre. De façon générale, il faudra maintenir le bouton d’inclusion entre 5 et 10 secondes jusqu’à ce que la LED bleue clignote. Ensuite, il faudra appuyer chaque seconde jusqu’à ce que le jumelage soit terminé pour éviter que l’accessoire ne se mette en veille.

En cas de difficulté, consultez le WiKi officiel pour trouver la procédure qui convient à votre accessoire.

Voici deux illustrations du bouton d’inclusion pour le contacteur de porte (MCCGQ01LM) et le capteur de température/humidité/baromètre (WSDCGQ11LM).

Lancez le script de la gateway

cd /opt/zigbee2mqtt
npm start

Attendez d’avoir le message Zigbee: allowing new devices to join.

Dès que le premier message arrive (détection de mouvement, mesure de température…), c’est terminé,. Votre accessoire Zigbee est maintenant jumelé.

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...

Je vous conseille ensuite de renommer chaque accessoire (par défaut, c’est le numéro de série qui est attribué comme nom de device).

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: 'MiSWitch'
    retain: false

Relancez le script de la gateway lorsque c’est fait.

Installer les plugins officiels Domoticz

Deux plugins ont été développés pour faciliter l’intégration d’accessoires Zigbee à Domoticz et Home Assistant.

Suivez ce tutoriel qui explique en détail comment installer le plugin Zigbee2MQTT à 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 spécifié dans le fichier de configuration est correctement utilisé pour nommer les accessoires. Il ne reste plus qu’à déployer vos accessoires Zigbee comme n’importe quel autre accessoire en cliquant sur la flèche bleue.

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.

Inclure de nouveaux accessoires lorsque la gateway Zigbee démarre automatiquement

Une fois en production, vous aurez très certainement activé le démarrage automatique du script Zigbee2MQTT. Connectez vous en SSH à votre serveur et exécutez la commande suivante pour afficher le journal d’execution le temps d’inclure un nouvel accessoire.

sudo journalctl -u zigbee2mqtt.service -f

Rappel, pour pouvoir inclure de nouveaux accessoires, il faut (par sécurité) autoriser le jumelage. Pour cela, ouvrez le plugin et choisissez l’option Enable à coté de Zigbee pairing.

Installer Node-RED (obsolète, utiliser le plugin officiel)

Le pont Zigbee2mqtt publie les mesures et les états des capteurs Xiaomi vers un serveur MQTT. Ce sont des messages génériques qu’il va falloir ensuite “re-traiter” pour être utilisable par un serveur domotique par exemple. Pour le moment, le projet n’est compatible qu’avec Home Assistant nativement

Pour envoyer des messages compréhensibles par Domoticz, je vous propose d’utiliser Node-RED. On aura juste besoin de 3 blocs (nodes) pour publier les mesures sur le connecteur MQTT de Domoticz. Je vous conseille également d’installer Node-RED sur le même serveur qui héberge Domoticz en exécutant la commande suivante.

bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)

Cette commande lance le script d’installation qui s’occupe de tout !

Pour aller plus loin avec Node-RED, rendez-vous ici. Voici quelques articles qui pourraient également vous intéresser

Préparer Domoticz, ajouter un connecteur MQTT et un Dummy Device (obsolète, utiliser le plugin officiel)

Avant d’envoyer des messages à Domoticz, il faut connaître l’IDX du device qui va recevoir les mesures (ou les états On/Off). Lancez Domoticz et ouvrez le menu Setup puis hardware (matériel)

Dans la liste des matériels, sélectionnez MQTT Client Gateway with LAN Interface. Indiquez l’adresse sur serveur MQTT. S’il est installé sur le même Raspberry Pi que Domoticz, indiquez locolhost. Par défaut le port est 1883 sauf si votre configuration est différente. Si vous avez activé la protection par utilisateur/mot de passe, indiquez le dans les champs Username et Password. Cliquez enfin sur Add pour ajouter le matériel.

Domoticz écoute maintenant tous les messages qui sont publiés sur le topic domoticz/in.

Dans la liste, choisissez maintenant le matériel Dummy. C’est un matériel qui permet de créer des appareils virtuels qui viendront afficher les mesures et les états renvoyés par les accessoires Xiaomi Aqara (ou n’importe quel autre accessoires ou objet connecté DIY d’ailleurs). Pour en savoir plus, vous pouvez lire ce tutoriel.

Maintenant, à chaque fois que vous voulez ajoutez un accessoire Xiaomi à Domoticz, cliquez sur le bouton Create Virtual Sensors situé sur la ligne du matériel.

Attention, le vocabulaire et l’organisation des éléments n’est pas toujours très évidente. Il faut souvent chercher un peu pour trouver le bon capteur. On va commencer par créer un appareil de type contacteur de porte. Dans la liste, choisissez le type Switch.

Dans la liste des appareils (depuis le menu Réglages – Setup), vous trouverez l’appareil que l’on vient de créer. On en profite pour noter son IDX. Comme vous pouvez le voir, c’est un type Light/Switch

Rendez vous dans les Interrupteurs (Switchs). Par défaut, l’appareil prend la forme d’une lampe. Cliquez sur le bouton modifier (Edit) situé en bas.

Dans la liste des types d’interrupteurs, choisissez  le type Door Lock et enregistrez la modification.

Voilà, tout est prêt.

Inclure le détecteur d’ouverture de porte et fenêtre Xiaomi Mijia (MCCGQ01LM) à Domoticz (obsolète, utiliser le plugin officiel)

Le premier accessoire que je vous propose d’inclure est le détecteur de porte et fenêtre. C’est un contacteur magnétique (reed switch). Comme tous les accessoires Xiaomi, il est fixé à l’aide d’un autocollant. La détection d’ouverture (ou de fermeture) se déclenche au delà de 15mm. La capteur fonctionne à l’aide d’une batterie 3V CR1632. Petit défaut lié au principe du capteur, le détecteur ne fonctionne pas (ou mal) sur les surfaces métalliques. Par exemple, si vous voulez surveiller l’accès à un frigo ou un congélateur, il faudra prévoir un support pour décaler le capteur de la surface de l’ouvrant.

Voici le payload (message) renvoyé pour un contacteur de porte. Le JSON contient trois clés. L’état du contacteur (true s’il est fermé, false s’il est ouvert), la tension de la batterie et l’équivalent (0 à 100% de charge)

{
   "contact":true,
   "battery":"100.00",
   "voltage":3045
}

Ouvrez Node-RED et importez ce flow. Le premier Node se connecte à serveur MQTT puis écoute les messages publiés sur le topic du capteur de porte.

[{"id":"7f356e5c.dafc6","type":"mqtt out","z":"8cb500b2.1fda4","name":"","topic":"domoticz/in","qos":"2","retain":"","broker":"72f9bb18.b361b4","x":830,"y":320,"wires":[]},{"id":"a22ad10c.51a01","type":"mqtt in","z":"8cb500b2.1fda4","name":"Door/Windows Aqara Sensor","topic":"zigbee2mqtt/ContacteurPorte","qos":"2","broker":"8687cf12.76eee","x":260,"y":300,"wires":[["b6337ad1.688718"]]},{"id":"b6337ad1.688718","type":"json","z":"8cb500b2.1fda4","name":"","property":"payload","action":"","pretty":false,"x":470,"y":300,"wires":[["eb08f4b7.7da738"]]},{"id":"eb08f4b7.7da738","type":"function","z":"8cb500b2.1fda4","name":"Split","func":"msg1={};\n\nif ( msg.payload.contact ) {\n msg1.payload = {\n \"command\" : \"switchlight\",\n \"idx\" : 1,\n \"switchcmd\" : 'Off'\n }\n} else {\n msg1.payload = {\n \"command\" : \"switchlight\",\n \"idx\" : 1,\n \"switchcmd\" : 'On'\n }\n}\n\n\nreturn [msg1];\n\n","outputs":1,"noerr":0,"x":650,"y":300,"wires":[["7f356e5c.dafc6","8179c4a2.d53af8"]],"inputLabels":["json"],"outputLabels":["Etat"]},{"id":"8179c4a2.d53af8","type":"debug","z":"8cb500b2.1fda4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":830,"y":280,"wires":[]},{"id":"72f9bb18.b361b4","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"8687cf12.76eee","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":""}]

On doit mettre en forme le message MQTT pour qu’il soit conforme à l’API JSON de Domoticz. Elle est très bien détaillée sur la documentation officielle. Un contacteur de porte est une commande de type switchlight qui prend l’état On ou Off (attention, il faut respecter la majuscule sinon ça ne fonctionne pas). On indique également l’IDX de l’appareil Domoticz (ici c’est le 5).

msg1={};

if ( msg.payload.contact ) {
  msg1.payload = {
    "command" : "switchlight",
    "idx" : 5,
    "switchcmd" : 'Off'
  }
} else {
  msg1.payload = {
    "command" : "switchlight",
    "idx" : 5,
    "switchcmd" : 'On'
  }
}
return [msg1];

Enfin le bloc MQTT publie le message sur le topic domoticz/In. Il ne vous reste plus qu’à déployer le flow et jouer avec le capteur pour voir l’état changer sur Domoticz. Ne vous inquiétez pas, il faut quelques secondes pour que le pictogramme change mais c’est très rapide dans les faits. C’est simplement l’actualisation coté navigateur internet qui est plus lente sur Domoticz.

Détecteur de présence (RTCGQ11LM)

Le détecteur de présence fonctionne exactement comme le contacteur de porte. L’état de la pièce est contenu dans la clé occupancy (présence) qui prend la valeur true ou false

{
  "occupancy":true,
  "battery":"100.00",
  "voltage":3055
}

On testera donc la clé msg.payload.occupancy dans le code javascript du flow Node-RED à la place de la clé contact.

[{"id":"3a090091.ae4c8","type":"mqtt out","z":"8cb500b2.1fda4","name":"","topic":"domoticz/in","qos":"2","retain":"","broker":"72f9bb18.b361b4","x":830,"y":520,"wires":[]},{"id":"b8e32d3e.8889b","type":"mqtt in","z":"8cb500b2.1fda4","name":"Temp+Hum+Baro Xiaomi","topic":"zigbee2mqtt/THPsensor","qos":"2","broker":"8687cf12.76eee","x":250,"y":500,"wires":[["e434303b.43603"]]},{"id":"e434303b.43603","type":"json","z":"8cb500b2.1fda4","name":"","property":"payload","action":"","pretty":false,"x":450,"y":500,"wires":[["61ca028f.8e6e5c"]]},{"id":"61ca028f.8e6e5c","type":"function","z":"8cb500b2.1fda4","name":"Split","func":"msg1={};\nsvalue = msg.payload.temperature+\";\"+msg.payload.humidity+\";0;\"+msg.payload.pressure+\";0\";\nsvalue = svalue.toString()\nconsole.log(svalue);\nmsg1.payload = {\n \"command\" : \"udevice\",\n \"idx\" : 2,\n \"nvalue\" : 0,\n \"svalue\" : svalue\n}\n\n\nreturn [msg1];\n\n","outputs":1,"noerr":0,"x":630,"y":500,"wires":[["3a090091.ae4c8","e297dcc8.3cb87"]],"inputLabels":["json"],"outputLabels":["Etat"]},{"id":"e297dcc8.3cb87","type":"debug","z":"8cb500b2.1fda4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":830,"y":480,"wires":[]},{"id":"72f9bb18.b361b4","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"8687cf12.76eee","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":""}]

Editez l’appareil et choisissez le type Motion Detector dans la liste des appareils.

Et voilà, l’intégration est parfaite !

Capteur de température, humidité et baromètre (WSDCGQ11LM)

Le capteur de THP WSDCGQ11LM de la gamme Aqara 2018 est souvent moins chère que l’ancien modèle Mijia et embarque en bonus un capteur de pression atmosphérique.

Le message MQTT renvoi également le niveau de la batterie (0 à 100%, la tension délivrée par la batterie). la température est exprimée en degrés Celcius. L’humidité en %. La pression atmosphérique en Pascal.

{
  "battery":"100.00",
  "voltage":3055,
  "temperature":22.38,
  "humidity":61.33,
  "pressure":972
}

Comme je l’ai dit en introduction, il faut compléter les informations manquantes avec un zéro pour que Domoticz décode correctement le message MQTT. Par exemple Domoticz attend une savlue de la forme svalue=TEMP;HUM;HUM_STAT;BAR;BAR_FOR ou HUM_STAT et BAR_FOR prennent une valeur comprise en 0 et 4. Il faut absolument indiquer 0 (ce qui correspond à No Info) et pas laisser un espace vide (mon erreur !) Domoticz décode mal le message MQTT (probablement un bug de la version actuelle) si on combine les trois mesures sur un même capteur. Un zéro est ajouté ce qui décale totalement les mesures comme vous pouvez le voir. Si vous avez la solution, n’hésitez pas à partager.

Si on laisse vide les états, Domoticz décode mal le JSON

Alors qu’en complétant avec un zéro, c’est nickel

Pour intégrer la sonde d’ambiance, il faudra donc créer un capteur pour chaque mesure (température, humidité, pression atmosphérique). Du moins jusqu’à ce qu’une solution soit trouvée ou que le problème soit corrigé sur Domoticz.

[{"id":"4fef80ac.ab9e1","type":"mqtt out","z":"8cb500b2.1fda4","name":"","topic":"domoticz/in","qos":"2","retain":"","broker":"72f9bb18.b361b4","x":830,"y":580,"wires":[]},{"id":"fc3a2d7c.cf34a","type":"mqtt in","z":"8cb500b2.1fda4","name":"Temperature","topic":"zigbee2mqtt/THPsensor","qos":"2","broker":"8687cf12.76eee","x":230,"y":560,"wires":[["8dcc4e45.d50f6"]]},{"id":"8dcc4e45.d50f6","type":"json","z":"8cb500b2.1fda4","name":"","property":"payload","action":"","pretty":false,"x":470,"y":560,"wires":[["980977ea.477a68"]]},{"id":"980977ea.477a68","type":"function","z":"8cb500b2.1fda4","name":"Split","func":"msg1={};\nmsg1.payload = {\n \"command\" : \"udevice\",\n \"idx\" : 4,\n \"nvalue\": 0,\n \"svalue\" : msg.payload.temperature.toString(),\n \"battery\": msg.payload.battery\n}\n\nreturn [msg1];","outputs":1,"noerr":0,"x":650,"y":560,"wires":[["4fef80ac.ab9e1","2f3b9fd2.c57b8"]],"inputLabels":["json"],"outputLabels":["Etat"]},{"id":"2f3b9fd2.c57b8","type":"debug","z":"8cb500b2.1fda4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":830,"y":540,"wires":[]},{"id":"72f9bb18.b361b4","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"8687cf12.76eee","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":""}]

Il faut convertir la mesure en chaine à l’aide de la fonction Javascript toString() pour que Domoticz puisse interpréter correctement le message.

Voilà, le principe est similaire dans la plupart des cas. L’intégration d’autres appareils ne devait pas vous poser trop problème. Il faut à chaque fois utiliser qui correspond à l’accessoire Xiaomi. En voici quelques-uns d’après le code source du projet Zigbee2mqtt

Bref, de quoi intégrer tous les accessoires domotiques Xiaomi

13,99€
En Stock
actualisé le 31 août 2020 20 h 22 min
Amazon.fr

 

Pour continuer sur le même thème vous pouvez lire ce test sur le détecteur fumée Honeywell de Xiaomi. Nous verrons comment intégrer le détecteur de fumée Xiaomi et envoyer des notifications sur un smartphone avec PushOver.

 

Mises à jour 

5/01/2020 ajout des liens vers les articles complémentaires
7/02/2019 utiliser le plugin officiel Zigbee2MQTT pour Domoticz
12/09/2018 Mise en forme correct des messages MQTT pour les capteurs combinés temp+hum+pressure

Avez-vous aimé cet article ?
[Total: 1 Moyenne: 3]
Exit mobile version