[Tuto] Lire à distance la température d'un liquide (ZigBee)
Publié : 21 avr. 2021, 15:08
L'objectif est de lire la température d'un liquide distant (chauffage, piscine, …), là ou il est impossible d'utiliser une sonde à l'air libre ou un thermomètre connecté en Zigbee. Compte tenu de la très faible conso des composants utilisés, un fonctionnement sur petite batterie est possible.
Le matériel nécessaire se compose d'une carte Zigbee CC2531 (au format USB si besoin d'alim) développé à l'origine par Texas Instrument.
(https://www.ti.com/lit/ug/swru221a/swru ... 252FCC2531)
On en trouve partout sur le net (avec antenne, prise USB, émetteur RF associé), parfois accompagné d'une nappe de câblage.
https://www.amazon.fr/ARCELI-d%C3%A9val ... MJB4&psc=1
Les sondes de température sont des DS18B20 et fonctionnent en bus 1_Wire. Il y en a également partout sur le net (éviter les bas de gamme chinoises qui n'ont pas une adresse unique et posent parfois des PB d'adressage)
https://www.amazon.fr/Busirde-DS18B20-E ... 93&sr=1-11
La configuration du prog à flasher se fait avec PTVO qui permet de choisir les ports et accessoires connectés au CC2531 ainsi que le comportement de cette carte Zigbee une fois flashée. Globalement, PTVO va créer le fichier .Hex à injecter dans la CC2531.
On peu le télécharger là :
https://ptvo.info/zigbee-switch-configu ... /#download
Et avoir des infos sur les nombreuses configurations et utilisations là :
https://ptvo.info/zigbee-configurable-f ... -features/
Dans mon cas, la config dans l'onglet "Settings" est : CC2330 de type 2531, en mode "Router", ports de connexion des sondes P02 et P15 (correspondent au ports physique 01 et 07 de l'IO Connector du CC2531 (Voir fiche technique Texas Instrument ci-dessus), connectés à deux sondes DS18B20. Il n'y a pas besoin de saisir les identifiants des sondes, la clé Zigbee les retrouvera. J'ai choisi une résistance de Pull-Up externe car en fonction de la longueur de mes câbles il me faudra sans doute ajuster la valeur de la résistance. Pour l'instant j'ai inséré une résistance de 4,7 kΩ comme préconisé par le constructeur, entre l'alim (rouge) et la Data (jaune) de chaque sonde.
Dans l'onglet "Expert", il n'est pas nécessaire de changer les paramètres sauf à augmenter le "Reporting interval" si on ne veut pas saturer les logs de DMZ.
Il est important de noter les "Manufacturer Name" et "Model ID" qui seront utilisés par le plugin Zigate.
En sauvant cette config, le fichier .Hex est créé, il faudra ensuite le transférer dans le répertoire correspondant sur le Raspberry qui va flasher (FileZilla fait très bien l'affaire en SFTP).
On utilise alors les ports GPIO du Raspberry pour dialoguer avec le CC2531 par l'intermédiaire de son port Debug. Le Raspberry sert également à alimenter la clé Zigbee sur un port USB. Tout est très bien expliqué là :
https://www.youtube.com/watch?v=RguRQUXWLCY
Du coté du CC2531, on câble le Ground, le reset, le Debug Clock (DC) et le Debug Data (DD), comme ça, vers les ports correspondants du Raspberry :
L'injection du code se fait en ligne de commande à partir de la console du Raspberry et de l'outil "Flash_CC2531". Il faut donc au préalable disposer de WiringPi (gestion des GPIO) et Git sur le Raspberry.
https://github.com/jmichault/flash_cc2531.git
Une fois installé, il suffit de déposer le .Hex dans le même répertoire (qui contient les exécutables) et de lancer CC_erase pour nettoyer le contenu de la clé puis CC_write pour écrire (ex : CC_write le_nom_de_mon_fichier.hex)
Tout est expliqué là, si l'on ne tient pas compte de la partie MQTT :
https://www.zigbee2mqtt.io/information/ ... ry-pi-3min
Du coté Zigate, le fonctionnement du CC2531 avec des sondes DS18B20 est pris en compte dans la branche Stable5. Cela nécessite également de gérer les nouvelles trames émises par le CC2531. Un fichier décrivant la structure et les paramètres reçus doit être créé dans l'arborescence du plugin Zigate. Ce fichier doit également correspondre au "Manufacturer Name" et "Model ID" utilisés dans PTVO.
Il faut donc créer le répertoire nécessaire dans l'arborescence du plugin, sur la machine qui héberge la Zigate (Raspberry chez moi) :
/home/pi/domoticz/plugins/Domoticz-Zigate/Conf/Certified/MyCustomSensor
Puis créer le fichier de traitement des trames reçues "ptvo.switch.json" (on retrouve ici les paramètres générés par PTVO) avec comme contenu :
{ "Ep":{ "01":{ "0000":"", "000c":"", "0b05":"", "Type":"Analog" }, "02":{ "0000":"", "000c":"", "0b05":"", "Type":"Analog" } }, "Type":"", "ClusterToBind": [], "ConfigureReporting":{}, "ReadAttributes": { "0000": [ ] , "0012": [], "000c": [] } }
En mode joli, ça donne ça :
Au lancement de la Zigate et du CC2531, deux nouveaux widgets sont créés dans la rubrique "Mesures" (après activation dans la gestion des dispositifs) et correspondent aux valeurs de température des deux sondes DS18B20.
On peut se demander à quoi sert tout ce bor….. mais j'avais besoin de connaître la température de l'eau d'une piscine ainsi que celle d'un circuit de chauffage solaire afin de gérer la filtration et le réchauffage. Tout ça enterré dans un local au fond du jardin. Ne reste plus qu'à faire un câblage définitif et à cacher tout ça dans une boite de dérivation.
Tout cela n'aurait bien sûr pas été possible sans les compétences et la disponibilité de Pipiche que je remercie chaleureusement.

Le matériel nécessaire se compose d'une carte Zigbee CC2531 (au format USB si besoin d'alim) développé à l'origine par Texas Instrument.
(https://www.ti.com/lit/ug/swru221a/swru ... 252FCC2531)
On en trouve partout sur le net (avec antenne, prise USB, émetteur RF associé), parfois accompagné d'une nappe de câblage.
https://www.amazon.fr/ARCELI-d%C3%A9val ... MJB4&psc=1
Les sondes de température sont des DS18B20 et fonctionnent en bus 1_Wire. Il y en a également partout sur le net (éviter les bas de gamme chinoises qui n'ont pas une adresse unique et posent parfois des PB d'adressage)
https://www.amazon.fr/Busirde-DS18B20-E ... 93&sr=1-11
La configuration du prog à flasher se fait avec PTVO qui permet de choisir les ports et accessoires connectés au CC2531 ainsi que le comportement de cette carte Zigbee une fois flashée. Globalement, PTVO va créer le fichier .Hex à injecter dans la CC2531.
On peu le télécharger là :
https://ptvo.info/zigbee-switch-configu ... /#download
Et avoir des infos sur les nombreuses configurations et utilisations là :
https://ptvo.info/zigbee-configurable-f ... -features/
Dans mon cas, la config dans l'onglet "Settings" est : CC2330 de type 2531, en mode "Router", ports de connexion des sondes P02 et P15 (correspondent au ports physique 01 et 07 de l'IO Connector du CC2531 (Voir fiche technique Texas Instrument ci-dessus), connectés à deux sondes DS18B20. Il n'y a pas besoin de saisir les identifiants des sondes, la clé Zigbee les retrouvera. J'ai choisi une résistance de Pull-Up externe car en fonction de la longueur de mes câbles il me faudra sans doute ajuster la valeur de la résistance. Pour l'instant j'ai inséré une résistance de 4,7 kΩ comme préconisé par le constructeur, entre l'alim (rouge) et la Data (jaune) de chaque sonde.
Dans l'onglet "Expert", il n'est pas nécessaire de changer les paramètres sauf à augmenter le "Reporting interval" si on ne veut pas saturer les logs de DMZ.
Il est important de noter les "Manufacturer Name" et "Model ID" qui seront utilisés par le plugin Zigate.
En sauvant cette config, le fichier .Hex est créé, il faudra ensuite le transférer dans le répertoire correspondant sur le Raspberry qui va flasher (FileZilla fait très bien l'affaire en SFTP).
On utilise alors les ports GPIO du Raspberry pour dialoguer avec le CC2531 par l'intermédiaire de son port Debug. Le Raspberry sert également à alimenter la clé Zigbee sur un port USB. Tout est très bien expliqué là :
https://www.youtube.com/watch?v=RguRQUXWLCY
Du coté du CC2531, on câble le Ground, le reset, le Debug Clock (DC) et le Debug Data (DD), comme ça, vers les ports correspondants du Raspberry :
L'injection du code se fait en ligne de commande à partir de la console du Raspberry et de l'outil "Flash_CC2531". Il faut donc au préalable disposer de WiringPi (gestion des GPIO) et Git sur le Raspberry.
https://github.com/jmichault/flash_cc2531.git
Une fois installé, il suffit de déposer le .Hex dans le même répertoire (qui contient les exécutables) et de lancer CC_erase pour nettoyer le contenu de la clé puis CC_write pour écrire (ex : CC_write le_nom_de_mon_fichier.hex)
Tout est expliqué là, si l'on ne tient pas compte de la partie MQTT :
https://www.zigbee2mqtt.io/information/ ... ry-pi-3min
Du coté Zigate, le fonctionnement du CC2531 avec des sondes DS18B20 est pris en compte dans la branche Stable5. Cela nécessite également de gérer les nouvelles trames émises par le CC2531. Un fichier décrivant la structure et les paramètres reçus doit être créé dans l'arborescence du plugin Zigate. Ce fichier doit également correspondre au "Manufacturer Name" et "Model ID" utilisés dans PTVO.
Il faut donc créer le répertoire nécessaire dans l'arborescence du plugin, sur la machine qui héberge la Zigate (Raspberry chez moi) :
/home/pi/domoticz/plugins/Domoticz-Zigate/Conf/Certified/MyCustomSensor
Puis créer le fichier de traitement des trames reçues "ptvo.switch.json" (on retrouve ici les paramètres générés par PTVO) avec comme contenu :
{ "Ep":{ "01":{ "0000":"", "000c":"", "0b05":"", "Type":"Analog" }, "02":{ "0000":"", "000c":"", "0b05":"", "Type":"Analog" } }, "Type":"", "ClusterToBind": [], "ConfigureReporting":{}, "ReadAttributes": { "0000": [ ] , "0012": [], "000c": [] } }
En mode joli, ça donne ça :
Au lancement de la Zigate et du CC2531, deux nouveaux widgets sont créés dans la rubrique "Mesures" (après activation dans la gestion des dispositifs) et correspondent aux valeurs de température des deux sondes DS18B20.
On peut se demander à quoi sert tout ce bor….. mais j'avais besoin de connaître la température de l'eau d'une piscine ainsi que celle d'un circuit de chauffage solaire afin de gérer la filtration et le réchauffage. Tout ça enterré dans un local au fond du jardin. Ne reste plus qu'à faire un câblage définitif et à cacher tout ça dans une boite de dérivation.