Bonjour à tous,
Après avoir mordu une partie de mon bureau je vous présente maintenant mon flow nodeRed Pour gérer vos ampoules Yeelight via MQTT.
Ce qui m’intéresse c’est de pouvoir faire du toggle car le on off en passant pas un node change c’est fait en quelques minutes…
Mais comme on ne peut pas mettre en place le toggle dans le node change et que j’utilise cela avec mes nextions pour allumer et éteindre avec le même bouton je me devais de trouver comme checker l’état (on ou off) de mon ampoule et réagir en fonction.
Je pars du principe que vous utilisez docker pour pouvoir installer Yeelight2Mqtt dans un container
Lien du compose et de la mise en place de Yeelight2MQTT ici : GitHub - monster1025/yeelight-mqtt: Yeelight Gateway to MQTT bridge (I use it for home assistant integration)
N’oubliez pas de créer votre ficher Config, pour cela télécharger le fichier exemple ici
Rendez vous dans le dossier config sur votre vm en ssh
Créez un fichier config.yaml et collé le code préalablement copié via le lien ci dessus.
Il faudra tout d’abord initialiser vos lampes et stocker leur etat dans des varaibles globales sur nodered
Chaque MQTT in est envoyé dans la fonction pour être stockée ( merci @M4dm4rtig4n )
Cette fonction tiens en quelques lignes :
var name = msg.topic.split("/")[2];
global.set('light.'+name+'.status',msg.payload);
return msg;
Voici ma structure de nommage pour mon lumière :
Maison/light/malampe/..
Un fois ceci configuré on va déjà vérifier que les variables globales sont crées et stockées.
Pour cela :
Actualisez la section globale et vous devriez retrouver quelque chose qui ressemble à ceci (selon votre convention de nommage) :
Si c’est ok , on poursuit :
[{"id":"7f441133.5b414","type":"function","z":"8a56250a.f42758","name":"","func":"var status=global.get('light.yeelight_CH.status');\nnode.warn(\"status is = \" +status);\nif(status==\"on\")\n{\n msg.payload=\"off\";\n return msg;\n}\nif(status==\"off\")\n{\n msg.payload=\"on\";\n return msg;\n}\nreturn null;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1780,"y":300,"wires":[["f7e813e4.d8005"]]},{"id":"f7e813e4.d8005","type":"mqtt out","z":"8a56250a.f42758","name":"Chevet","topic":"Maison/light/yeelight_CH/status/set","qos":"","retain":"","broker":"946c71c6.9448b","x":1940,"y":300,"wires":[]},{"id":"1c961d29.582103","type":"inject","z":"8a56250a.f42758","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1640,"y":300,"wires":[["7f441133.5b414"]]},{"id":"946c71c6.9448b","type":"mqtt-broker","name":"MQTT Docker 2","broker":"192.168.100.10","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
Voici un exemple d’inject pour tester le bon fonctionnement du toggle de la lampe.
var status=global.get('light.yeelight_CH.status');
node.warn("status is = " +status);
if(status=="on")
{
msg.payload="off";
return msg;
}
if(status=="off")
{
msg.payload="on";
return msg;
}
return null;
N’oubliez pas de modifier le nom préalablement choisi light.malampe
Il vous suffit ensuite d’attribuer un déclencheur en lieu et place de l’inject.
Pour ma part mon nextion :
Cela me permet encore une fois d’externaliser la gestion à HA… il reste encore pas mal de boulot pour faire du full MQTT