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:

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

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:

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

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

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:

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

Le flow:

mqtt-management

Que s’est il passé ?

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

Flow proposé:

shelly-mqtt-dash-flow

Résultat obtenu:

Off On
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 à :