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 Résultat 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#

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:

shelly-http-get-status

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#

shelly-http-post

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.

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:

Mqtt-get-status

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#

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
  • Envoyer l’instruction au noeud 0 ou 1
  • Afficher la sortie dans le noeud Debug (Output)

Le flow correspondant:

shelly-http-management

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#

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:

mqtt-management

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#

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é:

shelly-mqtt-dash-flow

Résultat obtenu:

Off On
Off On

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
  • (…)