Node-Red / Xiaomi

Bonjour tout le monde,

Avec l’arrivée de Node-Red sur Gladys, je me demandais si quelqu’un pouvais m’aider à la configuration de mes interrupteurs 2 doubles et 1 simple afin de pouvoir les gérer via Gladys.

J’ai suivi la vidéo de Pierre Gilles à la lettre et jusque là pas de soucis.

J’ai installé node-red-contrib-xiaomi-smart-devices afin de connecter mes devices Xiaomi et j’arrive bien à détecter mes interrupteurs et capteurs.

Par contre, je bloque sur la gestion de mon interrupteur simple (pour commencer avant d’essayer les doubles) pour le relier à Gladys.

Coté Gladys, j’ai créé mon topic Mqtt et ajouté mon interrupteur sur le dashboard.

Coté Node-red, Noeud Mqtt créé et connecté, le noeud switch avec le debug on/off fonctionne aussi. Mon device xiaomi est bien reconnu et connecté également.

Il me manque le lien entre les 2, avec la bonne fonction entre le switch et le device je pense.

Un peu d’aide :cry: please. Je précise je suis loin d’être un expert et encore moins node-red, je suis plus un débrouillard.

Dites moi les copies d’écrans que vous aurez besoin

Bonjour @jerome, on va regarder ça ensemble ! :slight_smile:

ça ne fonctionne pas juste de connecter le switch avec ton « interrupteur chambre » comme je fais dans la vidéo ?

Tu arrives bien à juste allumer / éteindre ton interrupteur depuis Node-RED ?

Bonjour @pierre-gilles

Non je n’arrive pas à allumer / éteindre l’interrupteur non plus, il est connecté mais quand je relie un switch ou un inject pas de résultat. voici ce qui est préciser dans node red :

Inputs

payload.channel_0. string

on - if you want to turn on
off - turn off
switch - change state on → off, off → on

payload.channel_1 string

on - if you want to turn on
off - turn off
switch - change state on → off, off → on

Outputs

Passes the complete json object received from the node to the output

Sample message of Wired Single-Button:

{ “fromip”:“192.168.0.110:4321”, “ip”:“192.168.0.110”, “port”:4321, “payload”:{ “channel_0”:“on”, “time”:1556987229523, “sid”:“158d000128f9dd”, “model”:“ctrl_ln1” } }

Sample message of Wireless Double-Buttons:

{ “fromip”:“192.168.0.110:4321”, “ip”:“192.168.0.110”, “port”:4321, “payload”:{ “channel_1”:“click”, “time”:1556987769175, “sid”:“158d000242275f”, “model”:“86sw2” } }

Il faut rajouter une fonction entre deux ? il faut certainement indiquer le channel_0 quelque part ?

Merci de ton aide car j’ai beau chercher des tutos ou infos sur internet je ne trouve pas grand chose sur node-red-contrib-xiaomi-smart-devices

Il faut que tu utilises un node “Inject”

Tu peux injecter de la data dans le payload:

Ensuite tu connect ton node “inject” à ton node xiaomi

Tu peux tester si ça marche en cliquant sur le bouton du node “inject” :slight_smile:

J’ai essayé cette manip mais il ne se passe rien. En debug j’ai ce message :

msg : string[62]
“Error: Invalid property expression: unexpected at position 8”

Tu peux m’envoyer un screenshot de ton node inject + un export du json si possible ?

L’erreur j’ai trouvé c’est parce ce que j’ai testé avec l’espace après payload. channel_0 comme ton screenshot ça me semblait bizarre.

Mais j’avais testé sans avant idem pas de retour debug par contre

Export du json ??? C’est ça qui doit me manquer entre les 2 non ?

Ah non mais il n’y a pas d’espace après payload., c’est une erreur de ma part, j’ai juste fais un screenshot vite fait ^^

Tu peux mettre ton debug juste après ton inject pour voir à quoi ressemble ton payload ?

Non, je te demandais juste un export pour que moi je puisse voir ce que tu fais. C’est pas grave, le screenshot c’est bien aussi :slight_smile:

Bonjour @pierre-gilles

Grace au debug, j’arrive enfin à allumer et éteindre la lumière via mon interrupteur

Voici le résultat :

Je vais essayer de le controler via gladys maintenant

1 « J'aime »

Génial! Tiens nous au courant, et limite quand tu y arrives si tu peux faire un petit tutoriel dans la catégorie « Tutoriels » du forum, ça aidera d’autres gens !

Bon je sèche un peu.

Je n’arrive pas à faire le lien entre MQTT et l’actionneur mon interrupteur Xiaomi.

Phase 1 : comme sur la video OK en debug je reçois bien la valeur 0 et 1
Phase 2 : avec le input j’arrive bien a allumer ou éteindre la lumière

Par contre entre le switch et l’actionnaire quel noeud dois-je rajouter ? j’avais pensé à function mais vu que je ne maitrise pas trop le code pas simple.

Pour moi, il faut lui dire que :
le msg.payload = msg.payload.channel_0
que 0 = Off et 1 = 0n
et que le périphérique est le SID : …

Je fais fausse route ou pas ?

Du switch au bouton « Off » tu n’as qu’à faire un trait avec ta souris, tout le travail est déjà fais :smiley: T’es vraiment à 1 millimètre du résultat aha :slight_smile:

Déja essayé et pas possible c’est deux sorties. J’ai pas d’entrée sur le inject.

Ah my bad! Je sais qu’il y a un node qui fait pareil que le inject mais avec une entrée

Il y a le switch ou le button dans le dashboard mais j’arrive pas à les parametrer.

Capture d’écran 2021-11-29 à 16.08.29

Pour moi le switch ne sert à rien, il faut juste formater si besoin le payload pour ton actionneur.

Formater le payload ? tu m’as perdu désolé :sweat_smile:

Si msg.payload = 1 alors msg.payload.channel0 = on

Ce que reçoit ton actionneur c’est le payload ( qui doit être dans le bon format)

Cette transformation tu peux le faire avec un block function
https://nodered.org/docs/user-guide/nodes#function

if (msg.payload === 0) {
msg.payload.channel0 = off
} else {
....

Quelque chose de ce type là ?

if (msg.payload === 0) {
var cmd = {
« sid » : « XXXXXXXXXXX »
}
msg.payload.channel0 = off
}
else { (msg.payload === 1)
msg.payload.channel0 = on
}
return msg;

Sinon @jerome @VonOx, la fonction “Change” est peut-être plus adapté si tu n’es pas à l’aise avec le code :slight_smile: The Core Nodes : Node-RED

Du coup dans ton cas, tu peux te mettre après ton switch, et faire un “set” ou tu set la bonne propriété, je ne sais pas si c’est clair pour toi @jerome