Bonjour,
Je ne modifie pas le tuto pour garder l’historique . Je fais une mise à jour importante :
**A l’heure d’aujourd’hui Le 20-09-2024, NODE_RED a évolué et est en version 4.0 et node-red-node-serialport est en version 2.0.3
On a plus besoin de rétrograder la version de node-red-node-serialport à la 0.15.0
La version 2.0.3 fonctionne très bien avec le Rflink, donc on peut passer
le paragraphe revenir a la version 0.15.0 de node-red-node-serialport
Voici un tutoriel sur le fonctionnement de la passerelle RFLINK avec Node Red et Gladys.
Attention, ce chapitre est rajouté suite à la montée de version de NODE RED en V3, et intègre également le rétrograde de version pour la palette Serialport v1.0.1 qu’il ne faut pas utiliser.
Si vous avez déjà un NodeRed qui ne fonctionne plus il faut le désinstaller sinon passez directement a l’installation.
Tuto pour réinstaller NODE Red en V3 et garder la version 0.15.0 de Serialport
1 passage a la V3 de node red en juin 2022
2 passage a la version1.0.1 de serail port mars 2022
ont generé des perturbations sur le foctionnement du rflink.
A l’heure actuelle (début mars 2022), la palette node-red-node-serialport a subit une mise a jour et cette mise plante node red message d’erreur :
Un grand merci à @VonOx , pour m’avoir guider bien patiemment.
La commande d’installation dans cette vidéo ne fonctionne plus à la suite du passage de la V3 de Node Red. Il faut alors la remplacer par les commandes suivantes :
: Intégrer Node-RED avec Gladys Assistant en MQTT | Gladys Assistant
Désinstaller l’ancien node red
1 - stopper le container docker
docker stop node_red
2 - supprimer le container node red
docker rm node_red
3 - supprimer le dossier node-red dans \var\lib
cd /var/lib
4 - on est rentré dans le dossier lib, affichage des éléments du dossier
ls
5 - chercher le dossier node-red (attention tiret du 6) et le supprimer :
sudo rm -r node-red
6 - vérifions qu’il n’ est plus le dossier node-red
ls
7 - retour a l’invite pi@gladys:~ $
cd /
8 - je reboot le rpi (je ne sais pas si c’est utile mais ça me rassure)
sudo reboot
9 - Vérifions qu’il n’y est plus le container node red
docker ps
installation de node red
1 - tapez la commande de @VonOx, il faudra avoir un systeme branché sur les ports USB0 et USB1, pour ma part j’ai un RFlink sur le port ttyUSB0 et la cle zigbbe Sonoff sur le port ttyUSB1. Donc il faudra peut etre adapter dans les lignes " --device=/dev/ttyUSB0 \ " le nom du port utilisé peut etre ttyACM0.
docker run -d \
--log-opt max-size=10m \
--restart=always \
--network=host \
--name node_red \
-u node-red:dialout \
--device=/dev/ttyUSB0 \
--device=/dev/ttyUSB1 \
--label com.centurylinklabs.watchtower.enable=false \
-v /var/lib/node-red:/data \
nodered/node-red
Attention , il faudra adapter la ligne :
--device=/dev/ttyUSB0 \
En fonction du port Usb où est branché le RFlink, certaines fois le Rflnk peut etre branché sur le port usb : /dev/ttyAMA0.
Dans mon cas le /devttyUSB0
correspond à ma clé zigbbe et le /dev/ttyUSB1
correspond a mon Rflink
Attention avec cette ligne de commande :
--label com.centurylinklabs.watchtower.enable=false \
Watchtower ne remet plus Node red à jour et quand on relance le PI , node red ne se lance plus tout seul comme Gladys. Il faudra relancer le container node red avec « docker restart node_red »
2 - puis celle-ci
sudo chown -R 1000:1000 /var/lib/node-red
3 - Générer un hash : Pour avoir plus de précision regarder la vidéo de Pierre-Gilles : Intégrer Node-RED avec Gladys Assistant en MQTT | Gladys Assistant
Générer un hash
docker exec -it node_red node-red admin hash-pw
exemple de hash : $2b$08$tfrMEc4pnblhhSDFFBUjeOtGU.Ixh5d19P31NWCf2JZKmwZF888mK
4 - Editer le fichier avec nano : Ne pas oublier Sudo (devant pour moi il le faut)
sudo nano /var/lib/node-red/settings.js
Enlever les double / entre « adminAuth: » et l’accolade de fin } correspondante à adminAuth: {
5 - Coller le hash généré
6 - Puis redémarrer node red
docker restart node_red
Rétrogradage de la version de Serialport
on va utiliser la version 0.15.0 au lieu de la version 1.0.1
merci a [bjm] pour son tuto
Donc il faut garder la version node-red-node-serialport 0.15.0. Pour récuperer cette version, il faut suivre le tuto de @Bjm , que je vous colle ci-dessous
j’ai installé node-red-node-serialport
version 0.15.0 qui fonctionnait sur ma 32 bits
https://www.npmjs.com/package/node-red-node-serialport/v/0.15.0
1 - Dans le terminal pour ouvrir un Shell dans docker
docker exec -it node_red /bin/bash
cela me renvoie
bash-5.0#
2 - Je copie la commande suivante au bout
npm i node-red-node-serialport@0.15.0
Cela mouline et à la fin me renvoie ceci
notice created a lockfile as package-lock.json. You should commit this file.
+ node-red-node-serialport@0.15.0
added 48 packages from 37 contributors and audited 338 packages in 60.866s
45 packages are looking for funding
run `npm fund` for details
found 4 critical severity vulnerabilities
run `npm audit fix` to fix them, or `npm audit` for details
3 - Comme il y a 4 vulnérabilités critiques je fais
npm audit fix
Comme proposé
4 - Puis
exit
5 – redémarrage de node red
docker restart node_red
conception du RFlink
J’utilise un RFlink fait maison ( voir lien pour en construire un: FAQ sur RFlink - modules, portée, intégration et plus).APPAREMENT CE LIEN EST MORT
nouveau lien :
[TUTO] Fabriquer RFlink l'alternative DIY du RFXCOM
Pour les antennes j’utilise que 2 bouts de fils et ça marche très bien (par contre l’antenne de l’émetteur doit mesurer impérativement 17.2cm (question de fréquence).
Sommaire :
RFlink et Node Red : Réception
1 Brancher le RFlink.
2 Installation de la "palette : node-red-node-serialport
3 Installation des nodes pour recevoir les fréquences
4 Visualisation des informations reçues
5 Détail du code réception du RFlink
6 Faire le tri entre les informations reçues
RFlink et Node Red : Emission
1 Explication de la structure de trame, d’une commande émise
2 Testons la trame.
RFlink et Node Red : Réception
1. Brancher le RFlink.
Brancher le RFlink sur un port USB du RPI
Tapez la commande “dmesg -s 1024”, à l’aide de PuTTY, pour trouver l’adresse du port USB où il est branché
Après exécution de la commande, on peut lire ceci à la dernière ligne :
[69837.733913] ch341 1-1.2:1.0: ch341-uart converter detected
[69837.736457] usb 1-1.2: ch341-uart converter now attached to ttyUSB0
Si ça n’a pas marcher débrancher et redébrancher le RFlink et reprendre la procédure en 1.
Ici, Le RFlink est branché sur le port : ttyUSB0 (à récupérer et à écrire dans le paramétrage du « Node récepteur »).
2. Installation de la "palette : node-red-node-serialport "
Ouvrir Node RED, pour installer la palette " node-red-node-serialport "
Cliquez-en haut à droite sur les 3 barres horizontales, pour ouvrir le menu ci-dessus.
Cliquez dans "manage palette " 11 -ème lignes. La fenêtre ci-dessous s’ouvre, cliquez dans l’onglet « install », puis tapez « serial » dans « search modules » pour rechercher les palettes (bibliothèques). Des bibliothèques s’affichent. On choisira la bibliothèque (ou palette) « node-red-node-serialport » (au debut du tuto on a parametré, pour récupérer la version 0.15.0 de serialport, mais dans manage palette c’est la version 1.0.1 qui apparait, il faut l’installer et c’est au moment de la vérification que l’on voit que l’on a bien installé la V0.15.0 de SerialPort) , cliquez dans le petit « install » sur la droite.
Une fois fait, cliquez sur l’onglet Nodes.
Vérifier que la palette est bien là en V0.15.0 . Ensuite vérifier dans les « filters nodes » colonne de gauche de l’écran que l’on a bien les nodes suivants :
3. Installation des nodes pour recevoir les fréquences :
On fait glisser sur le centre de l’écran le « node Serial in » et un « node debug » pour commencer. On les relie en cliquant/glissant du petit rond du « node recepteur » jusqu’au petit rond du « node debug(msg.payload) »
Paramétrage du « Node recepteur »
On double-clique sur le « node serial in », sur l’image appelé « récepteur »
Puis on clique sur le petit crayon
Donc dans la case « Serial Port », on écrit le nom du port USB que l’on a trouvé au chapitre 1 sous la forme " /dev/ttyUSB0". Ici le RFlink est branché sur USB0. Il faut aussi remplir la case « Output » avec « /r/n », très important pour la partie émetteur. Ensuite, il faut cliquez sur Update en haut à droite, pour enregistrer les modifications.
Cela nous renvoie à l’écran précèdent, on voit que la case « Serial Port » est remplie, il ne reste plus qu’à donner un nom au Node, en écrivant le nom que l’on veut dans la case « Name », j’ai mis récepteur, c’est pour cela que mon « node serial in » s’affiche" récepteur".
Une fois que l’on a terminé on clique sur « Done », la fenêtre se ferme.
Remarque:
A chaque fois, que l’on crée, que l’on modifie ou que l’on déplace un node, le « deploy » s’allume rouge pour indiquer qu’il faut cliquez dessus, une sorte de validation.
Ici le « Node Debug » a un petit rond bleu car il n’a pas été validé après modifications, donc on « Deploy » et le ou les petits ronds bleus s’effacent. Sous le « node récepteur », on a un petit carré vert qui indique que le node est connecté au RFlink.
<
4. Visualisation des informations reçues
Donc si on a toutes ces conditions remplies (connecté et « deploy » sur fond noir), on doit voir apparaitre des informations qui s’affichent dans la fenêtre Debug.
Si vous n’avez pas cette fenêtre, peut-être avez vous la fenêtre ci-dessous
Si oui, il faudra alors cliquer sur l’espèce de petit insecte (ça n’engage que moi), pour arriver dans la fenêtre Debug.
Dans cette fenêtre s’affiche toutes les informations des capteurs reçues en 433Mhz (si RFlink est en 433Mhz). Si vous ne voyez rien, c’est probablement que vous n’avez pas de capteurs qui émettent du 433Mhz autour de vous. Prenez une télécommande 433mhz cliquez dessus et l’information de la télécommande doit s’affichée dans la fenêtre « debug ».
Dans la fenetre ci-dessus la première information reçue
20;01;NewKaku;ID=xxxx;SWITCH=10;CMD=ON;
C’est une commande On, que j’ai envoyé avec une télécommande de prise connectée.
L’information suivante :
deux fois
20;01;X10Secure;ID=xxxx;SWITCH=0c;CMD=ON;
puis deux fois
20;01;X10Secure;ID=xxxx;SWITCH=0c;CMD=OFF;
C’est un capteur infrarouge X10, qui envoie ces infos. Ici ce sont les commandes ON « CMD=ON », puis OFF « CMD=OFF », qui sont reçues, elles signifient, qu’il y a eu de détection.
5. Détail du code réception du RFlink (notice RFlink, tout est là: RFLink Gateway - HomeAutomation )
Structure de la commande RFlink dans le cas de données reçues :
Données : 20;02;Nom;ID=9999;LABEL=données;
Champs :20 => Nœud numéro 20 signifie que le sens du dialogue circule de la RFlink Gateway vers le Rpi, (et le Noeud 10 signifie que le sens du dialogue circule du Rpi vers la RFlink Gateway, utilisé pour l’émission du signal 433Mhz)
; => séparateur de champs
02 => compteur de paquets (à partir de 00-FF)
NAME => Nom de l’appareil (peut être utilisé pour afficher dans les applications, etc.)
ID=9999 => ID de l’appareil (souvent un code tournant et/ou un numéro de canal de l’appareil) (Hexadécimal)
SWITCH=A16 => Code maison/unité comme A1, P2, B16 ou un numéro de bouton etc.
CMD=ON => Commande (ON/OFF/ALLON/ALLOFF).
6. Faire le tri entre les informations reçues
Attention à partir d’ici, il va falloir adapter vos codes en fonction de vos capteurs et de leurs paramètres
Mais parmi toutes les informations reçues par le RFlink, il faut trier celles qui nous intéresses. Donc, on ajoute un « Node function » pour la sélection et puis pour envoyer l’info à Gladys il nous faut un « Node Mqtt » et on les relie entre eux. On « Deploy » pour valider, les points bleus disparaissent. Les deux "nodes msg.payload " prélèvent l’information après traitement par les nodes et les envoient dans la fenêtre debug. Si on clique dans le carré d’un msg.payload , qui est à droite du node, celui rentre dans le node et a pour effet de ne plus afficher son message (information) dans la fenêtre debug. Recliquez dessus pour retrouver l’affichage.
Paramétrage « Node function » :
On clique 2 fois sur le « Node function » pour l’ouvrir. On lui donne un nom dans la case « Name » et dans l’onglet « On Message », on écrira le code (ou on le copie)
Explication du code :
Simplement : dans le msg.payload ligne 1, on trouve la valeur transmise par le Node précèdent (ici c’est « Node récepteur ») , à la ligne 6 du code on recharge une valeur dans msg.payload , avec le « return msg » ligne 7, on envoie le msg.payload au nœud suivant (ici « Node Mqtt » et en même temps au « Node debug »).
Dans le msg.payload de la ligne1, on trouve les informations qui arrivent à la volée dans la « fenêtre debug », que l’on a vu précédemment. Il va falloir trier la commande que l’on veut pour la transmettre à Gladys (on prend l’exemple d’un capteur de température qui envoie son info : "20;07;Mebus;ID=ea01;TEMP=0017; ").
(J’ai trouvé cette façon de faire, mais il doit surement y en avoir d’autres).
Je compte les caractères pertinents, pour récupérer une chaine unique afin de faire un tri. Je vais chercher ici, les caractères de l’ID du capteur
Ligne 1 : on stocke le msg.payload (informations captées) dans la variable input,
Ligne 2 : on va récupérer l’ID du device (ea01), en comptant les caractères de la chaine "20;07;Mebus;ID=ea01;TEMP=0017; ", avec la fonction « Substring (xx,xx) », (on commence à compter en partant de 0), ici il faut récupérer du 15-ème jusqu’au 19-ème caractères. On écrira « Substring (15,19) ». On fait déjà un premier tri sur le device. On filtre alors les autres devices, puisque pas le même ID.
Ligne 3 : on applique la même méthode, mais cette fois, on récupère la valeur de la donnée à traiter (ici température). Substring(25,29). Remarque : on comptera un caractère de plus pour pouvoir récupérer le 7 de 0017, si on écrit Substring(25,28), 28 étant le 7, on ne récupèrera que 001, pour récupérer le 7 il faut compté jusqu’au 29-eme caractères, comme précédemment pour le 1 de l’ID.
Ligne 4: on place la chaine de caractères dans la variable « Temp » (la chaine correspond du 25 au 29 -ème caractère)
Ligne 5 : on convertit la valeur « temp » d’hexadécimal en décimal
Ligne 6 : on charge la valeur Temp dans msg.payload, mais avant on la divise par 10, car mon capteur envoie une valeur 10 fois plus grande.
Ligne 7 : envoie du msg.payload au node suivant. (On notera que la ligne de code « return msg » se trouve dans la condition if. Ceci pour n’envoyer le msg.payload, que si c’est le device correspondant à l’ID=« ea01 » , si le « return msg » est en dehors du If , c’est à dire après « } » , il sera envoyé à chaque fois que le « node récepteur » recevra une information passé par différents Capteurs.
Je vous mets le code à coller mais, il faudra l’adapter à votre cas. Il faut reprendre le comptage des caractères et modifier « l’ID 00a7 ».
Code à copier:
let input = msg.payload;
inputID = input.substring(19,23);
if (inputID === "00a7"){ // remplacer le "00a7" par l'id de votre capteur
var Temp = input.substring(29,33);
Temp = parseInt(Temp,16);
msg.payload = Temp/10;
return msg;
}
7. Création du Node MQTT
Paramétrage du " Node Mqtt " :
Pierre Gilles, dans sa vidéo Node Red, conseille de créer le device dans Gladys en premier, ce qui permet d’avoir déjà le nom du topic Mqtt, quand on paramètre le" Node Mqtt " dans Node Red, pour le tuto je le fais en suivant la description des Nodes. Si ce n’est pas déjà fait, glisser le « Node Mqtt out » sur l’écran et le relier au node qui le précède (le node Function).
Coté Gladys,
Il faut maintenant créer le capteur dans l’intégration Mqtt dans Gladys.
Voir MQTT | Gladys Assistant .
Une fois créer, Il faut récupérer : l’adresse du borker ( Broker URL), le nom du serveur MQTT (username) et le Password
Il faut noter également le « MQTT Topic » du capteur,
Coté Node Red :
On double clique sur le « node Mqtt out » noté « filtre Temp extérieure nord »
Si le broker Gladys n’est pas déjà déclaré, il faut le paramétrer, cliquez sur le petit crayon
Puis cliquez sur l’onglet « Security »
Remplir les cases « Username » et « Password » avec les valeurs récupérer dans Gladys Mqtt.
Cliquez sur l’onglet « Connection »
Dans la case « Server », si ce n’est pas rempli, noter l’adresse IP du Brocker MQTT , ou s’il est déclaré dans Gladys noter « mqtt://localhost »
Cliquez sur Update pour sauvegarder.
Retour à la fenêtre précédente
Normalement la case "Server est remplie par le nom entré dans « Username » précédemment.
Dans la case Topic, il faut copier ou écrire le nom du topic, créé par Gladys, lors de la création du capteur ou de la fonction du capteur.
Donnez un nom au Node, dans la case « Name ».
Ecrire dans la QoS 0, 1 ou 2
QOS 0 – envoi le message une fois (non garanti)
QOS 1 – Au moins une fois (garanti)
QOS 2 – Une seule fois (garanti)
Cliquez sur « Done » pour enregistrer
Si tout est correct, au bout de quelques secondes, après avoir « Deploy », on doit avoir le « petit carré vert connected », s’afficher sous le node
Si vous avez affiché le capteur dans le dashboard de Gladys, vous devriez avoir une valeur qui s’affiche sur ce capteur.
RFlink et Node Red : Emission
Passons maintenant à l’envoi de commandes via le Dashboard Gladys et Mqtt.
Dans la doc RFlink (voir lien en début de tuto), il est écrit :
« Afin de répondre à RFlink pour émettre des commandes RF ou pour apporter des modifications aux paramètres, une ligne de texte doit être envoyée, qui se termine par CR/LF. »
J’ai cherché quelques heures à comprendre, comment envoyé ce CR/LF (en français dans la texte retour chariot et saut de page) et tout ça, il fallait le coller à la fin de la commande émise. Jusqu’au moment où j’ai compris que ça se passait dans la déclaration du Serial Port. Rappelez-vous le petit \r\n, dans la case « Output », ligne « Add character to output message ». Sur les confirmations de commandes, reçues et valides, on verra le CR/LF matérialisé par une petite flèche (qui revient vers la gauche), dans la fenêtre Debug.
1. Explication de la structure de trame d’une commande émise :
Quand on appuie sur le bouton d’une télécommande de prises connectées, on voit apparaitre dans la fenêtres Debug le code que le RFlink reçoit, du genre :" 20;06;NewKaku;ID=008440e6;SWITCH=a;CMD=OFF;. Pour envoyer la même commande avec Gladys via Mqtt vers la même prise connectée, il va falloir modifier ce code reçu, en un code que peut émettre le Rflink vers cette prise connectée.
On va déjà dire au RFlink, qu’il faut qu’il émette ce code. Donc le début de trame commencera par « 10; » au lieu " 20;06; " qui est de la réception.
Puis on ajoutera le nom de l’appareil « NewKaku; », qui signale au RFlink quel codage il va trouver.
Puis on écrit simplement les valeurs des champs sans leur nom, « ID=008440e6; » devient « 008440e6 » , " SWITCH=a", devient « a » et ainsi de suite.
Pour avoir à la fin cette trame, sans oublier les points virgules :
10;NewKaku;008440e6;a;OFF;
2. Testons la trame :
Pour commencer on va installer les Nodes,
Il nous faut:
-un « node mqtt in »
-deux « nodes change »
-le node principal « node serial out »
et pour finir des « nodes debug »
On les fait glisser sur l’écran de Node Red, puis on les relie entre eux comme sur l’image.
Paramétrage des Nodes
Le Node « mqtt in ».
Il faut créer un device dans Gladys intégration Mqtt, on va installer un ruban led branché sur une prise connectée, avec une fonction Eclairage On/Off. (Voir : Déclarer un périphérique MQTT dans Gladys. Suivre ce lien : " MQTT | Gladys Assistant "
Une fois, fait on sauvegarde et copie la case « Topic MQTT ».
Sur Node Red on double clique sur le « Node mqtt in »
On sélectionne le broker Mqtt, dans la case Server ici le broker Mqtt installé avec Gladys et on remplit la case "Name pour donner un nom au Node « mqtt in ».
Le Node « change » :
Comme les valeurs envoyées par le device Mqtt Gladys, ne sont que des « 1 » et des « 0 », on va changer ces valeurs en trame correspondante à l’allumage ou à l’extinction du ruban led compatible avec RFlink.
Quand on veut éteindre le le ruban led Mqtt Gladys envoie un « 0 » et le RFlink lui veut cette trame :" 10;NewKaku;xxxxxxx;a;OFF; pour éteindre le ruban led.
Paramétrage du « Node change OFF »
Remplir :
Name : nom du node
Dans la Case "Set " déplier le menu en cliquant sur la petite flèche, et cliquez sur "change ".
Remplir avec vos trames : « search for » correspond à l’etat « 0 » envoyé par Mqtt Gladys et le dans « Replace with » écrire la commande d’extinction du ruban led. Quand ce node reçoit un « 0 » sur son entrée, il renvoie sur sa sortie la trame : « 10;NewKaku;008440e6;a;OFF; ». ET s’il reçoit autre chose que « 0 » il renvoie « 1 ».
Paramétrage du « Node change On »
Il suffira de faire un copier/coller du « Node change Off », ce qui nous permet de récupérer toutes les valeurs que l’on a déjà rempli. On modifier le « 0 » par un « 1 » et à la fin de la trame on remplace le « OFF » par le « ON ». Et pour fini on lui change son nom dans « Name ». Quand ce node reçoit un « 1 » sur son entrée, il renvoie sur sa sortie la trame : 10;NewKaku;008440e6;a;ON;. ET s’il reçoit autre chose que « 1 » il renvoie « 1 ».
Les « node debug »
Les « Nodes debug » permettent de visualiser la valeurs de msg.payload à différents endroits de la séquence.
Voilà la fenêtre debug après une commande ON du ruban led.
On voit la commande envoyée par le Node ON, en 3 -ème message et on voit en 4 -ème message, la confirmation de la part du RFlink, que la commande est reçue et valide. (Ici on voit le CR/LF traduit par la petite flèche). En 1er message on voit un « 1 » qui correspond à la commande envoyée par Mqtt Gladys et le 2-ème message c’est un « 1 », qui est envoyé par le node OFF.
J’espère que ça n’a pas été trop contraignant à lire.
Les codes peuvent surement être améliorés, car je débute en Node Red et en Js, donc je suis preneur de toutes les optimisations de code. (J’ai déjà lu ça quelque part).
Si vous rencontrez des problèmes, je peux essayer de vous aider.
Vous avez le principe, vous pouvez l’appliquer à presque tous les capteurs et les commutateurs (télécommandes). Vous verrez vous capterez même des capteurs qui ne vous appartiennent pas, si vous n’habitez pas en rase campagne.
Bon courage