Node-RED - Contrôle de l'éclairage
Et la lumière fut !
Après avoir vu, l’installation électrique d’un Shelly-25, son appareillage, nous voilà prêt pour le piloter !
Objectifs
Piloter l’état logique (allumé ou éteint) d’un module Shelly-2.5 via le Dashboard Node-RED.
Le bouton du dashboard respectera l’état logique de l’interrupteur physique. Une action sur le bouton logique ou l’interrupteur physique, alternativement ou consécutivement, doit changer l’état logique de l’éclairage:
Etat logique | Action | Etat logique |
---|---|---|
0 | 1 | 1 |
1 | 1 | 0 |
Le dashboard devra proposer:
- Bouton logique
- Indicateur d’état: on / off
- Température du module
- Historique de la température sur 24h00 : chart série
Prérequis
- Une plateforme avec Node-RED
- Le service Mqtt opérationnel
- Le set de noeud node-red-shelly installé
- Le set de noeud node-red-contrib-ui-led-fork installé
Interfaçage
http
Un module Shelly-2.5 embarque un serveur web mongoose. Si nous adressons le module via un navigateur web à l’URL http://192.168.1.11/status nous obtiendrons les informations suivantes:
La page web obtenue, fournit l’ensemble des informations gérées par le module shelly, dont les status logiques des deux relais.
Flow http
Le flow ci-dessus, permet de faire la même chose et de récupérer un objet exploitable pour envoyer les informations dans la sortie Debug.
Que s’est-il passé ?
- Le noeud inject envoie un payload vide
- Le noeut http request effectue une requête POST sur l’url http://192.168.1.11/status
- Le noeud debug HTTP affiche le résultat de la requête
Code json du flow ci-dessus:
[{"id":"725ce254.81991c","type":"inject","z":"2f348397.b329dc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":80,"wires":[["b2981ec3.bd8d48"]]},{"id":"b2981ec3.bd8d48","type":"http request","z":"2f348397.b329dc","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"http://192.168.1.11/status","tls":"","persist":false,"proxy":"","authType":"","x":360,"y":80,"wires":[["8695a15e.1b3a1"]]},{"id":"8695a15e.1b3a1","type":"debug","z":"2f348397.b329dc","name":"HTTP","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":550,"y":80,"wires":[]}]
Il n’est pas stupide de penser ici, que l’envoie d’une commande 0 ou 1 au relay_0 permettra de contrôler la ligne d’éclairage ; implémentation du cas-1.
Flow Mqtt
Comme présenté lors de la configuration du module Shelly-2.5, le module propose une gestion via Mqtt. il suffira de souscrire à la publication shellies/shellyswitch25-IdModule/relay/0/command où 0 est le numéro du relay à adresser.
Astuce: pour obtenir les informations pouvant être collectées, il suffira de souscrire à la publication racine du module 2.5: shellies/shellyswitch25-IdDModule/# le # adressant ici l’ensemble des éléments.
Le flow:
Code JSON du flow:
[{"id":"7de404ce.4b65a4","type":"mqtt in","z":"b78563f8.81598","name":"Shelly25 - Status","topic":"shellies/shellyswitch25-IdModule/#","qos":"2","datatype":"auto","broker":"369fc55c.9aa39a","x":450,"y":320,"wires":[["bba75ca8.c09658"]]},{"id":"bba75ca8.c09658","type":"debug","z":"b78563f8.81598","name":"mqtt_Shelly-Output","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":700,"y":320,"wires":[]},{"id":"369fc55c.9aa39a","type":"mqtt-broker","z":"","name":"mqtt.home.local","broker":"192.168.1.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
Essayez de récupérer les informations, en fouillant dans la zone Debug et dépliez tous les objets récoltés.
Implémentation
Remarque de l’auteur: A ce stade, l’importance du choix des modes de fonctionnement du module Shelly, n’avait pas été appréhendé correctement.
Notemment le mode switch, qui associé à la méconnaissance des mots clés disponibles, dont l’instruction toggle, a induit la création de cette fonction, bien présente sur le module.
Le cas 1, ci-dessous.
Cas 1: gestion via HTTP POST
La difficulté ici, est de faire fonctionner le module Shelly, comme un switch: Quelque soit, le bouton physique ou logique, qui donne l’instruction, il faut que l’autre puisse éteindre ou allumer la lumière, immédiatement.
Le principe du toggle !
Algorithme proposé:
- Envoyer une requete post au noeud shelly
- Récupérer l’état du module 0 ou 1
- TEST :
- SI 1 –> Modifier l’objet msg et affecter la valeur 0 au payload
- SI 0 –> Modifier l’objet msg et affecter la valeur 1 au payload
- TEST :
- Envoyer l’instruction au noeud 0 ou 1
- Afficher la sortie dans le noeud Debug (Output)
Le flow correspondant:
Code de la fonction SetValues:
context.set('value', context.get('value')||false);
var value = context.get('value');
switch (value) {
case true:
context.set('value', false);
msg.payload = false;
break;
case false:
context.set('value', true);
msg.payload = true;
break;
}
return msg;
Le code json associé:
[{"id":"725ce254.81991c","type":"inject","z":"2f348397.b329dc","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":80,"wires":[["b2981ec3.bd8d48"]]},{"id":"b2981ec3.bd8d48","type":"http request","z":"2f348397.b329dc","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"http://192.168.1.11/status","tls":"","persist":false,"proxy":"","authType":"","x":360,"y":80,"wires":[["8695a15e.1b3a1"]]},{"id":"8695a15e.1b3a1","type":"debug","z":"2f348397.b329dc","name":"HTTP","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":550,"y":80,"wires":[]}]
Que s’est-il passé ?
Le flow répond à l’algorithme:
- Le noeud Button envoie la requete POST au noeud Shelly"
- Le noeud Shelly (notre matériel connecté) retourne le statut du module ison = true / false
- Le noeud Function SetValues collecte l’état logique de la ligne d’éclairage et formatte le msg pour le noeud suivant
- Le noeud switch affecte le msg à la bonne sortie (noeud suivant), fonction du test effectué
- Le noeud change switch (intervertit) la valeur true / false
- Le noeud Shelly, envoie l’instruction true / false
- Le noeud Debug affiche l’état logique true / false du module
Cas 2: Gestion via Mqtt
Gestion de l’éclairage
Remarque de l’auteur: A ce stade, le mode de fonctionnement switch est appréhendé, l’instruction toggle maitrisé.
Configuré en mode switch, le module Shelly-2.5, percoit toute action sur l’interrupteur physique comme une instruction toggle.
Algorithme proposé:
- Si action sur le bouton du dashboard
- Publier via Mqtt l’instruction toggle sur le canal shellies/shellyswitch25-IdModule/relay/0/command
- Le module écoutant sur le canal shellies/shellyswitch25-IdModule/relay/0/command recoit l’instruction pour changer d’état logique (allumé / éteint)
Le flow:
Que s’est il passé ?
- Le noeud Button du dashboard envoit l’instruction toggle
- Le module réagit et change d’état logique: la ligne d’éclairage s’allume ou s’éteint.
L’utilisation du protocole Mqtt, facilite la tracabilité des chaines de traitement via les canaux de publication / souscription.
Ce mode sera systématiquement privilégié.
Gestion du statut de l’éclairage
Information: le module Shelly-2.5 publie toute les 30 secondes, des informations, sur les divers canaux, dont la température de fonctionnement du module.
Algorithme proposé:
- Etat logique de la ligne d’éclairage
- Ecouter sur le canal de publication shellies/shellyswitch25-IdModule/relay/0
- Afficher l’information du statut On / Off
- Etat de la température du module
- Ecouter sur le canal de publication shellies/shellyswitch25-IdModule/temperature
- Afficher une gauge indiquant la température en °Celsius
- Afficher l’historique sous forme de série
Flow proposé:
Résultat obtenu:
Off | On |
---|---|
![]() |
![]() |
Information: le code JSON des flow, ne sera pas présenté sur cet article.
La partie Dashboard étant un sujet à part entière, un prochain article traitera spécifiquement de ce sujet. Création d’un dashboard, l’agencement en plusieures rubriques, la disposition des éléments…
Pour aller plus loin
Ce billet a présenté le contrôle d’une ligne / point d’éclairage. Il sera abordé ultérieurement, dès possession des matériels, la création de scènarios d’automatisation spécifiques, pouvant être liés à :
- Capteur de mouvement
- Capteur de luminosité
- Ambiance d’éclairage
- Localisation et coucher / lever du soleil
- (…)