Rflink, Node Red et Gladys

Bonjour,

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 :

image

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: Félicitations ! Votre domaine a bien été créé chez OVHcloud !).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 :
image

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) »

image

Paramétrage du « Node recepteur »

On double-clique sur le « node serial in », sur l’image appelé « récepteur »
image

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.

image

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.

image
<

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

Si vous n’avez pas cette fenêtre, peut-être avez vous la fenêtre ci-dessous
image

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

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.

image

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)
image

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

image

Il faut noter également le « MQTT Topic » du capteur,

image

Coté Node Red :

On double clique sur le « node Mqtt out » noté « filtre Temp extérieure nord »

image
image

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 »
image

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
image

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

image

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 »

image

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 "

image

Une fois, fait on sauvegarde et copie la case « Topic MQTT ».

Sur Node Red on double clique sur le « Node mqtt in »
image

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.

image

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 »

image

Remplir :

Name : nom du node

Dans la Case "Set " déplier le menu en cliquant sur la petite flèche, et cliquez sur "change ".
image

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 »

image

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

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

Bon courage

2 « J'aime »

Merci pour ton tuto, cela fait 4 jours que je suis dessus.
je me suis inspiré des liens suivants.
https://flows.nodered.org/flow/ce816c56bfb8cbac2861206a40d8196a
https://forum.hacf.fr/t/gestion-rflink-via-node-red/621

J’ai également installé le Node suivant
node-red-contrib-rflink
Mais je n’ai pas compris comment il fonctionnait.

Grace à toi j’ai réussi à allumer / éteindre une prise 433mHz depuis le tableau de bord de gladys.
Mais je n’arrive pas à faire le mode inverse:
Si j’appuie sur la télécommande ON ou OFF le curseur ne se déplace pas dans le tableau de bord de gladys.
Bref je n’arrive pas à transformer la commande reçue par RFlink en 0 ou 1 pour quel soit comprise par gladys.

1 « J'aime »

Voici Mon Flow

[
    {
        "id": "b2028f7c13c37a99",
        "type": "tab",
        "label": "Flow 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "922f580c2a75ca45",
        "type": "serial in",
        "z": "b2028f7c13c37a99",
        "name": "Rflink entrée",
        "serial": "fca5cf78f65356f7",
        "x": 270,
        "y": 260,
        "wires": [
            [
                "379672de9d850da7",
                "3f270f9f22d24af1"
            ]
        ]
    },
    {
        "id": "379672de9d850da7",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Messages bruts",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 280,
        "y": 200,
        "wires": []
    },
    {
        "id": "3f270f9f22d24af1",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "Analyse du message",
        "func": "var msg433 = {};\nmsg.payload = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm,\"\");\nvar parts433 = msg.payload.split(\";\");\n\nmsg433.p1 = parts433[0];\nmsg433.p2 = parts433[1];\nmsg433.name = parts433[2];\nfor (var i=3; i<parts433.length; i++) {\n    var keyvalue = parts433[i].split(\"=\");\n    if (keyvalue.length===2) {\n        msg433[keyvalue[0]] = keyvalue[1];\n    }\n}\n\nmsg.msg433 = msg433;\n\nreturn msg;\n\n/*\n\n// So firstly a generic means of getting incoming items into an object\n\nvar the433 = {};\nmsg.payload = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm,\"\");\nnode.warn(msg.payload);\nvar parts433 = msg.payload.split(\";\");\n\nthe433.p1 = parts433[0];\nthe433.p2 = parts433[1];\nthe433.name = parts433[2];\n\nvar a = 3;\nwhile (a < parts433.length) {\n    var bits433 = parts433[a].split(\"=\");\n    switch (bits433[0]) {\n        case \"ID\": the433.id = bits433[1]; break;\n        case \"SWITCH\": the433.switch = bits433[1]; break;\n        case \"CMD\": the433.cmd = bits433[1]; break;\n        case \"SET_LEVEL\": the433.set_level = parseInt(bits433[1], 10); break;\n        case \"TEMP\": the433.temp = parseInt(bits433[1], 16) / 10; break;\n        case \"HUM\": the433.hum = parseInt(bits433[1], 10); break;\n        case \"BARO\": the433.baro = parseInt(bits433[1], 16); break;\n        case \"HSTATUS\": the433.hstatus = parseInt(bits433[1], 10); break;\n        case \"BFORECAST\": the433.bforecast = parseInt(bits433[1], 10); break;\n        case \"UV\": the433.uv = parseInt(bits433[1], 16); break;\n        case \"LUX\": the433.lux = parseInt(bits433[1], 16); break;\n        case \"BAT\": the433.bat = bits433[1]; break;\n        case \"RAIN\": the433.rain = parseInt(bits433[1], 16) / 10; break;\n        case \"RAIN\": the433.rainrate = parseInt(bits433[1], 16) / 10; break;\n        case \"WINSP\": the433.winsp = parseInt(bits433[1], 16) / 10; break;\n        case \"AWINSP\": the433.awinsp = parseInt(bits433[1], 16) / 10; break;\n        case \"WINGS\": the433.wings = parseInt(bits433[1], 16); break;\n        case \"WINDIR\": the433.windir = parseInt(bits433[1], 10); break;\n        case \"WINCHL\": the433.winchl = parseInt(bits433[1], 16); break;\n        case \"WINTMP\": the433.wintmp = parseInt(bits433[1], 16); break;\n        case \"CHIME\": the433.chime = parseInt(bits433[1], 10); break;\n        case \"SMOKEALERT\": the433.smokealert = bits433[1]; break;\n        case \"PIR\": the433.pir = bits433[1]; break;\n        case \"CO2\": the433.co2 = parseInt(bits433[1], 10); break;\n        case \"SOUND\": the433.sound = parseInt(bits433[1], 10); break;\n        case \"KWATT\": the433.kwatt = parseInt(bits433[1], 16); break;\n        case \"WATT\": the433.watt = parseInt(bits433[1], 16); break;\n        case \"CURRENT\": the433.current = parseInt(bits433[1], 10); break;\n        case \"CURRENT2\": the433.current2 = parseInt(bits433[1], 10); break;\n        case \"CURRENT3\": the433.current3 = parseInt(bits433[1], 10); break;\n        case \"DIST\": the433.dist = parseInt(bits433[1], 10); break;\n        case \"METER\": the433.meter = parseInt(bits433[1], 10); break;\n        case \"VOLT\": the433.volt = parseInt(bits433[1], 10); break;\n        case \"RGBW\": the433.rgbc = parseInt(bits433[1].substring(0, 2), 16);\n            the433.rgbw = parseInt(bits433[1].substring(2, 4), 16); break;\n    }\n    a++;\n}\n\n// SO - the above is general... here is my specific setup for temporarily displaying\n// the Acurite info\nif ((the433.p1 == \"20\") && (the433.name == \"Acurite\") && (the433.id == \"c826\")) {\n    if (typeof the433.temp !== 'undefined') temp = the433.temp;\n    if (typeof the433.hum !== 'undefined') hum = the433.hum;\n    if (typeof the433.bat !== 'undefined') bat = the433.bat;\n    if (typeof the433.rain !== 'undefined') rain = the433.rain;\n    if (typeof the433.winsp !== 'undefined') winsp = the433.winsp;\n    if (typeof the433.windir !== 'undefined') windir = the433.windir;\n\n    node.warn(\"Temperature: \" + temp + \"c\");\n    node.warn(\"Humidity: \" + hum + \"%\");\n    node.warn(\"Battery: \" + bat);\n    node.warn(\"Rain: \" + rain + \"mm\");\n    node.warn(\"Wind Speed: \" + winsp + \"km/h\");\n    node.warn(\"Wind Dir: \" + (windir * 22.5) + \" degrees\");\n}\n\n*/",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 520,
        "y": 260,
        "wires": [
            [
                "b162fc5b73dd44eb",
                "52fa9b624cd542b7",
                "a2d51dac8fc40904"
            ]
        ]
    },
    {
        "id": "b162fc5b73dd44eb",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Messages bruts",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 500,
        "y": 200,
        "wires": []
    },
    {
        "id": "52fa9b624cd542b7",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "TEMP conversion",
        "func": "if (msg.msg433.TEMP!==undefined) {\n    if (parseInt(msg.msg433.TEMP, 16) >= 0x8000) {\n        msg.msg433.TEMP = (parseInt(msg.msg433.TEMP, 16) & 0x7FFF) / 10 * -1;\n    } else {\n        msg.msg433.TEMP = parseInt(msg.msg433.TEMP, 16) / 10;\n    }\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 730,
        "y": 260,
        "wires": [
            [
                "42b6317be6478ad9"
            ]
        ]
    },
    {
        "id": "42b6317be6478ad9",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "HUM conversion",
        "func": "if (msg.msg433.HUM!==undefined) {\n    msg.msg433.HUM = parseInt(msg.msg433.HUM, 10);\n}\n\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "x": 920,
        "y": 260,
        "wires": [
            [
                "3f0db3791e5275b8"
            ]
        ]
    },
    {
        "id": "3f0db3791e5275b8",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "ID conversion",
        "func": "if (msg.msg433.ID!==undefined) {\n    msg.msg433.ID = parseInt(msg.msg433.ID, 16);\n}\n\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1100,
        "y": 260,
        "wires": [
            [
                "f3bb041952c980ba",
                "7aff2b40c03d82a4"
            ]
        ]
    },
    {
        "id": "f3bb041952c980ba",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Valeur de l''ID",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.ID",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1100,
        "y": 220,
        "wires": []
    },
    {
        "id": "7aff2b40c03d82a4",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "RAIN conversion",
        "func": "if (msg.msg433.RAIN!==undefined) {\n    msg.msg433.RAIN = parseInt(msg.msg433.RAIN, 16) /10;\n}\n\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "x": 1290,
        "y": 260,
        "wires": [
            [
                "838c19b68be1db23",
                "687bef3efae7ebb0"
            ]
        ]
    },
    {
        "id": "838c19b68be1db23",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "WINSP conversion",
        "func": "if (msg.msg433.WINSP!==undefined) {\n    msg.msg433.WINSP = parseInt(msg.msg433.WINSP, 16) /10;\n}\n\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "x": 1490,
        "y": 260,
        "wires": [
            [
                "21197ee9ef3822dd"
            ]
        ]
    },
    {
        "id": "21197ee9ef3822dd",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "WINGS conversion",
        "func": "if (msg.msg433.WINGS!==undefined) {\n    msg.msg433.WINGS  = parseInt(msg.msg433.WINGS , 16);\n}\n\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "x": 1690,
        "y": 260,
        "wires": [
            [
                "956a9f6e816c77d2"
            ]
        ]
    },
    {
        "id": "956a9f6e816c77d2",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "SWITCH conversion",
        "func": "if (msg.msg433.SWITCH !==undefined) {\n    msg.msg433.SWITCH   = parseInt(msg.msg433.SWITCH  , 16);\n}\n\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1900,
        "y": 260,
        "wires": [
            [
                "28682a6d54475b7b",
                "995f8e699add3f1f"
            ]
        ]
    },
    {
        "id": "8c08c61e1f1fd63f",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Messages bruts",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.CHIME",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 2120,
        "y": 320,
        "wires": []
    },
    {
        "id": "28682a6d54475b7b",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "CHIME conversion",
        "func": "if (msg.msg433.CHIME  !==undefined) {\n    msg.msg433.CHIME    = parseInt(msg.msg433.CHIME   , 16);\n}\n\nreturn msg;\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 2110,
        "y": 260,
        "wires": [
            [
                "8c08c61e1f1fd63f",
                "a78cc126a406acee"
            ]
        ]
    },
    {
        "id": "17e6621611b79f81",
        "type": "switch",
        "z": "b2028f7c13c37a99",
        "name": "Groupe télécommande Prise",
        "property": "msg433.ID",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "13689666",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "9825",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "8956577",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "8956580",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "7984",
                "vt": "num"
            },
            {
                "t": "else"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 6,
        "x": 400,
        "y": 480,
        "wires": [
            [
                "d90392e3a4a3755f",
                "f5e390b6e09ce8f1"
            ],
            [
                "b2872450f3fd64f9",
                "91d3fbb2192c55fc"
            ],
            [
                "fdea06a3cda7f648",
                "e2c6819ac2221d96"
            ],
            [
                "fdea06a3cda7f648",
                "e2c6819ac2221d96"
            ],
            [],
            []
        ],
        "outputLabels": [
            "Maplin Weather Station",
            "Digoo RS8 Temp Sensor",
            "Digoo Weather Station",
            "Door bell (Door Bell)",
            "Door bell (Eurodomest)",
            "Unhandled"
        ]
    },
    {
        "id": "d90392e3a4a3755f",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Valeur ID Otio",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.ID",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 700,
        "y": 360,
        "wires": []
    },
    {
        "id": "b2872450f3fd64f9",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Valeur ID Bricelec",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.ID",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 710,
        "y": 460,
        "wires": []
    },
    {
        "id": "995f8e699add3f1f",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Identifian Prise",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.SWITCH",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1880,
        "y": 220,
        "wires": []
    },
    {
        "id": "f5e390b6e09ce8f1",
        "type": "switch",
        "z": "b2028f7c13c37a99",
        "name": "Otio ( 1 - 2 - 3 )",
        "property": "msg433.SWITCH",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0x10",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "0xf",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "0xe",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 3,
        "x": 700,
        "y": 320,
        "wires": [
            [
                "1d99d84c75288dd0"
            ],
            [
                "f02c4eb74f439aa7",
                "4d6ece9669502f8d"
            ],
            [
                "2a187cfff4fe6fdb"
            ]
        ]
    },
    {
        "id": "1d99d84c75288dd0",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Prise N°1",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.CMD",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 920,
        "y": 300,
        "wires": []
    },
    {
        "id": "f02c4eb74f439aa7",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Prise N°2",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.CMD",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 920,
        "y": 320,
        "wires": []
    },
    {
        "id": "2a187cfff4fe6fdb",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Prise N°3",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.CMD",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 920,
        "y": 340,
        "wires": []
    },
    {
        "id": "91d3fbb2192c55fc",
        "type": "switch",
        "z": "b2028f7c13c37a99",
        "name": "Bricelec ( 1 - 2 - 3 )",
        "property": "msg433.SWITCH",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0xa1",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "0xa2",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "0xa3",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 3,
        "x": 710,
        "y": 420,
        "wires": [
            [
                "037473ec45da49f4"
            ],
            [
                "0544ce04f27bc450"
            ],
            [
                "8a097f88915dfc38"
            ]
        ]
    },
    {
        "id": "037473ec45da49f4",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Prise N° 1A",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.CMD",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 930,
        "y": 400,
        "wires": []
    },
    {
        "id": "0544ce04f27bc450",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Prise N° 2A",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.CMD",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 930,
        "y": 420,
        "wires": []
    },
    {
        "id": "8a097f88915dfc38",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Prise N° 3A",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.CMD",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 930,
        "y": 440,
        "wires": []
    },
    {
        "id": "fdea06a3cda7f648",
        "type": "switch",
        "z": "b2028f7c13c37a99",
        "name": "Dofin ( 1 - 2 ) !!!!",
        "property": "msg433.ID",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "8956577",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "8956580",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 720,
        "y": 540,
        "wires": [
            [
                "1477fa7b58440a33"
            ],
            [
                "3b907fb1e6387987"
            ]
        ]
    },
    {
        "id": "1477fa7b58440a33",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Prise N° 1C",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.CMD",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 930,
        "y": 520,
        "wires": []
    },
    {
        "id": "3b907fb1e6387987",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Prise N° 2C",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.CMD",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 930,
        "y": 560,
        "wires": []
    },
    {
        "id": "687bef3efae7ebb0",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Valeur de précipitation",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.RAIN",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1320,
        "y": 220,
        "wires": []
    },
    {
        "id": "e2c6819ac2221d96",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Valeur ID Dofin",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.ID",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 720,
        "y": 580,
        "wires": []
    },
    {
        "id": "a2d51dac8fc40904",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "NOM",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "msg433.name",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 470,
        "y": 300,
        "wires": []
    },
    {
        "id": "ea466d4293770235",
        "type": "change",
        "z": "b2028f7c13c37a99",
        "name": "ON => 1",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "1",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1240,
        "y": 300,
        "wires": [
            [
                "f4c34acc519a25f9",
                "0e82a540a3f23675"
            ]
        ]
    },
    {
        "id": "08508b2224991ec7",
        "type": "change",
        "z": "b2028f7c13c37a99",
        "name": "OFF => 0",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "0",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1240,
        "y": 340,
        "wires": [
            [
                "6c8b138c6c8ff28a",
                "ee3a9b9c6e4dbbd6"
            ]
        ]
    },
    {
        "id": "4d6ece9669502f8d",
        "type": "switch",
        "z": "b2028f7c13c37a99",
        "name": "ON / OFF",
        "property": "msg433.CMD",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "ON",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "OFF",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 1100,
        "y": 320,
        "wires": [
            [
                "ea466d4293770235"
            ],
            [
                "08508b2224991ec7"
            ]
        ]
    },
    {
        "id": "f4c34acc519a25f9",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "valeur N°2 ON",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1440,
        "y": 320,
        "wires": []
    },
    {
        "id": "6c8b138c6c8ff28a",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "valeur N°2 OFF",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1440,
        "y": 360,
        "wires": []
    },
    {
        "id": "ee3a9b9c6e4dbbd6",
        "type": "mqtt out",
        "z": "b2028f7c13c37a99",
        "name": "Prise N°2 OFF",
        "topic": "gladys/device/mqtt:prise2/feature/mqtt:prise2/state",
        "qos": "2",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "d1075fdfbbad55e1",
        "x": 1640,
        "y": 340,
        "wires": []
    },
    {
        "id": "0e82a540a3f23675",
        "type": "mqtt out",
        "z": "b2028f7c13c37a99",
        "name": "Prise N°2 ON",
        "topic": "gladys/device/mqtt:prise2/feature/mqtt:prise2/state",
        "qos": "2",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "d1075fdfbbad55e1",
        "x": 1640,
        "y": 300,
        "wires": []
    },
    {
        "id": "a78cc126a406acee",
        "type": "link out",
        "z": "b2028f7c13c37a99",
        "name": "Vers groupe",
        "mode": "link",
        "links": [
            "06ff0d12d4bc58d2"
        ],
        "x": 2255,
        "y": 260,
        "wires": []
    },
    {
        "id": "06ff0d12d4bc58d2",
        "type": "link in",
        "z": "b2028f7c13c37a99",
        "name": "Données reçu",
        "links": [
            "a78cc126a406acee"
        ],
        "x": 235,
        "y": 480,
        "wires": [
            [
                "17e6621611b79f81"
            ]
        ]
    },
    {
        "id": "fca5cf78f65356f7",
        "type": "serial-port",
        "serialport": "/dev/ttyACM0",
        "serialbaud": "57600",
        "databits": "8",
        "parity": "none",
        "stopbits": "1",
        "waitfor": "",
        "dtr": "none",
        "rts": "none",
        "cts": "none",
        "dsr": "none",
        "newline": "\\n",
        "bin": "false",
        "out": "char",
        "addchar": "\\r\\n",
        "responsetimeout": "10000"
    },
    {
        "id": "d1075fdfbbad55e1",
        "type": "mqtt-broker",
        "name": "",
        "broker": "mqtt://localhost",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "sessionExpiry": ""
    }
]

Qui est loin d’être terminé.

Bonsoir Bmj,
Merci pour ton retour.
J’ai le même problème , je n’ai pas de retour d’état quand j’utilise une télécommande. Je pense que l’on parle de ce problème dans cette config :Piloter IPX800-v5 dans Gladys - #9 by GBoulvin. J’ai essayer ce qui est proposé, mais ça n’a pas fonctionné, et je n’ai pas approfondi. Je me bats avec mon SSD pour l’installer pour l’instant. Si tu réussis a obtenir le retour d’etat, je suis preneur de la solution. :wink:
A+

Bonjour Bmj
j’ai trouvé , avec node red, pour la télécommande et le curseur du dashboard .


Derriere ton" Node RFlink entrée", moi c’est "recepteur ", tu colles un node fonction qui va filtrer l’information de ta commande ,puis tu mets deux « Nodes Change » en parallèle, un qui transforme le CMD=ON en 1 et l’autre, CMD=OFF en 0 et derriere un Node Mqtt qui envoie a Gladys sur le topic de ton device , mais on le modifie :
le topic de mon device c’est:
gladys/device/mqtt:garage_rubanled/feature/mqtt:ruban_led/state
on le modifie en:
gladys/master/device/mqtt:garage_rubanled/feature/mqtt:ruban_led/state
(on ecrit : master derriere gladys/master/device). et ca tu le colle dans le « node Mqtt out » de la fin que j’appelle « retour ruban led » tu deploy et c’est bon.
Quand tu envoies une commande a ta prise le mqttout renvoie apres traittement des payload un 1 ou un 0, ce qui actionne le curseur du dashboard
A toi de faire le filtre avec le « node Fonction » , en fonction de tes données
bon courage

Super tuto même si j’ai pas encore de RFLINK :smiley:

1 « J'aime »

Bmj
petite subtilité, il faut envoyé un nombre dans" Replace with" et non une chaine dans le “Node Change”.
image
salutation.

Bonjour.
J’ai suivi ton lien d’hier soir et j’ai ajouté les le /master devant le /device.
Tout fonctionne maintenant.
Petit bémol à mon 1ᵉʳ essai le mqtt:prise2 de ma prise 2 avait perdu sa valeur et s’était transformé en mqtt:
Il a fallu que je corrige celui-ci et que la réinstalle sur le dashboard.
Bref pendant un certain temps j’ai crue que d’ajouter /master n’apportait rien.

donc tout fonctionne ?

moi je fais comme cela

OUI c’est bon tout fonctionne.

Oui, Il y a pleins de façons de faire avec node Red. On fait suivant son humeur :grinning:.
l’important c’est que ça fonctionne.

J’ai créé un scénario pour que Gladys m’envoie un message via Telegram lorsqu’on sonne à la porte.

J’ai compris le fonctionnement du node rflink out fourni par node-red-contrib-rflink c’est la même fonction que to node Change

Quand ce node reçoit un “0” sur son entrée, il renvoie sur sa sortie la trame : “10;NewKaku;008440e6;a;OFF;

Mais là on entre les paramètres dans la fenêtre.


Tu en mets un a chaque device alors? c’est ça.

C’est ça mais cela n’apporte rien de plus que de l’écrire directement.

Name = Protocole de communication
ID = identifiant du périphérique
Target = identifiant du bouton de la télécommande
Command = ON ou OFF

il insère automatiquement le 10 pour code d’envoi.

Ma methode est un peu plus compliquée, mais elle permet de comprendre les trames du RFlink
je pense :thinking:

En général j’utilise ta méthode, c’est juste pour info pour ceux qui passeront sur ce post.

effectiement, tu as raison :wink:

Salut @Psoy

Nouvelle paire de récepteur / émetteur reçus.

Partie réception pas de problème par contre je galère toujours sur l’émission. Je n’arrive pas à allumer la prise.

J’ai bien renseigné le /r/n en output et j’ai la trame suivante pour ma prise : 10;TriState;8XXXXX;10;ON;

Retour du débug

Capture d’écran 2022-02-14 à 19.22.13