Convertion MQTT Node Red String -> message

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
deennoo
Messages : 4006
Enregistré le : 25 janv. 2015, 02:00

Convertion MQTT Node Red String -> message

Message par deennoo » 09 févr. 2019, 19:06

Salut les copains,

Je rencontre un soucis par manque de connaissance.

J'ai une camera wifi Xiaomi Dafang Hacker : https://github.com/EliasKotlyar/Xiaomi-Dafang-Hacks

Le hack apporte la fonction détecteur de mouvement, le message est transmit en MQTT :

Code : Tout sélectionner

myhome/dafang/motion : msg.payload : string[3]
"OFF"
et

Code : Tout sélectionner

myhome/dafang/motion : msg.payload : string[2]
"ON"
J'ai donc lancer mon node red et commencer a pomper les exemple existant.

J'arrive a un début de quelque chose : allumer ou éteindre un dummy switch avec ce type de fonction :

Code : Tout sélectionner

msg1={};

if ( msg.payload.string) {
msg1.payload = {
"command" : "switchlight",
"idx" : 9274,
"switchcmd" : 'On'
}
} else {
msg1.payload = {
"command" : "switchlight",
"idx" : 9274,
"switchcmd" : 'Off'
}
}

return [msg1];

Mais le message envoyer est toujours le même :

Code : Tout sélectionner

09/02/2019 à 18:58:07node: 95d98189.f02ea
msg.payload : Object
{ command: "switchlight", idx: 9274, switchcmd: "Off" }
Je n'ai jamais le ON, normal vous allez me dire, car je suis dans le else.

Avez Vous une idée ou une source pour parser ce fichu "String" ON ou OFF ?

Merci
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Jeff
Messages : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Convertion MQTT Node Red String -> message

Message par Jeff » 09 févr. 2019, 22:53

Tu dois juste tester le msg.payload.
Le string ne t'indique que le nombre de caractère du message.
Perso je préfère utiliser la republication en json. Tu as des exemples ici
Voila ce que je te propose :)

Code : Tout sélectionner

[{"id":"16267dc.014fc82","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"13dc4857.d84438","type":"function","z":"16267dc.014fc82","name":"Test","func":"if(msg.payload == \"On\")\n{\nvar url = \"http://192.168.1.100:8080/json.htm?type=command&param=switchlight&idx=41&switchcmd=On\"; \n}\n\nelse if(msg.payload == \"Off\")\n{\nvar url = \"http://192.168.1.100:8080/json.htm?type=command&param=switchlight&idx=41&switchcmd=Off\"; \n}\n\nmsg.url = url;\n\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":160,"wires":[["7dd4affc.e0963"]]},{"id":"90279305.a3441","type":"debug","z":"16267dc.014fc82","name":"","active":true,"console":"false","complete":"payload","x":810,"y":160,"wires":[]},{"id":"7dd4affc.e0963","type":"http request","z":"16267dc.014fc82","name":"","method":"GET","ret":"txt","url":"","tls":"","x":610,"y":160,"wires":[["90279305.a3441"]]},{"id":"b8f298aa.4ab2c8","type":"inject","z":"16267dc.014fc82","name":"","topic":"","payload":"On","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":100,"wires":[["13dc4857.d84438"]]},{"id":"32ad9bef.e4ee64","type":"inject","z":"16267dc.014fc82","name":"","topic":"","payload":"Off","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":160,"wires":[["13dc4857.d84438"]]}]
Version: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

deennoo
Messages : 4006
Enregistré le : 25 janv. 2015, 02:00

Re: Convertion MQTT Node Red String -> message

Message par deennoo » 09 févr. 2019, 23:09

Jeff a écrit :
09 févr. 2019, 22:53
Tu dois juste tester le msg.payload.
Le string ne t'indique que le nombre de caractère du message.
Perso je préfère utiliser la republication en json. Tu as des exemples ici
Voila ce que je te propose :)

Code : Tout sélectionner

[{"id":"16267dc.014fc82","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"13dc4857.d84438","type":"function","z":"16267dc.014fc82","name":"Test","func":"if(msg.payload == \"On\")\n{\nvar url = \"http://192.168.1.100:8080/json.htm?type=command&param=switchlight&idx=41&switchcmd=On\"; \n}\n\nelse if(msg.payload == \"Off\")\n{\nvar url = \"http://192.168.1.100:8080/json.htm?type=command&param=switchlight&idx=41&switchcmd=Off\"; \n}\n\nmsg.url = url;\n\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":160,"wires":[["7dd4affc.e0963"]]},{"id":"90279305.a3441","type":"debug","z":"16267dc.014fc82","name":"","active":true,"console":"false","complete":"payload","x":810,"y":160,"wires":[]},{"id":"7dd4affc.e0963","type":"http request","z":"16267dc.014fc82","name":"","method":"GET","ret":"txt","url":"","tls":"","x":610,"y":160,"wires":[["90279305.a3441"]]},{"id":"b8f298aa.4ab2c8","type":"inject","z":"16267dc.014fc82","name":"","topic":"","payload":"On","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":100,"wires":[["13dc4857.d84438"]]},{"id":"32ad9bef.e4ee64","type":"inject","z":"16267dc.014fc82","name":"","topic":"","payload":"Off","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":160,"wires":[["13dc4857.d84438"]]}]

Et notre grand gagnant est Jeff avec son

Code : Tout sélectionner

if ( msg.payload == "ON")
Pour le reste je garde le MQTT de bout en bout, plus simple pour moi et ma structure.

Encore merci
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr

Jeff
Messages : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Convertion MQTT Node Red String -> message

Message par Jeff » 09 févr. 2019, 23:38

:D content de t'avoir aidé.
Version: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


deennoo
Messages : 4006
Enregistré le : 25 janv. 2015, 02:00

Re: Convertion MQTT Node Red String -> message

Message par deennoo » 10 févr. 2019, 01:49

Jeff a écrit :
09 févr. 2019, 23:38
:D content de t'avoir aidé.
je vais surement avoir besoin de toi, cart il a le chemin inverse a faire :

Depuis Domoticz et son json vers la camera avec des message du type : myhome/dafang/motion/detection/set OFF

https://github.com/EliasKotlyar/Xiaomi- ... control.sh

Alors oui on peut le faire en http mais c'est pas drôle, surtout qu'en plus j'aimerai profiter du retour d’état que la cam envoie toutes les 30 secondes (delai configurable).

Le but etant de completer le debut minimaliste d'integration proposer : https://gadget-freakz.com/xiaomi-dafang ... ra-review/
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr

Jeff
Messages : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Convertion MQTT Node Red String -> message

Message par Jeff » 10 févr. 2019, 10:39

Et tu souhaites utiliser quoi comme device domoticz ?
Switch, sélecteur...
Je sais récupérer les messages sortant de domoticz, les filtrer par idx ou nom, et reste à les republier. :)
Version: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

Jeff
Messages : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Convertion MQTT Node Red String -> message

Message par Jeff » 10 févr. 2019, 11:08

Je te propose cela avec un interrupteur selecteur.
J'ai un doute sur la commande : myhome/dafang/motion/detection/set OFF
J'ai considéré que c'est seulement le topic qui fait la commande msg.topic => "myhome/dafang/motion/detection/set ON" :?

Code : Tout sélectionner

[{"id":"cd291d65.fa05d","type":"function","z":"b409198c.0f01f8","name":"Fonctions","func":"if (msg.payload.svalue1 == \"10\")\n{\nmsg.topic = \"myhome/dafang/motion/detection/set ON\";\n//msg.payload = \"ON\";\n}\n\nelse if (msg.payload.svalue1 == \"20\")\n{\nmsg.topic = \"myhome/dafang/motion/detection/set OFF\";\n//msg.payload = \"OFF\"; \n}\n\nreturn msg;","outputs":1,"noerr":0,"x":600,"y":160,"wires":[["ab5ffea3.66303"]]}]
Version: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

Jeff
Messages : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Convertion MQTT Node Red String -> message

Message par Jeff » 14 févr. 2019, 17:53

deennoo a écrit :
10 févr. 2019, 01:49
Jeff a écrit :
09 févr. 2019, 23:38
:D content de t'avoir aidé.
je vais surement avoir besoin de toi, cart il a le chemin inverse a faire :

Depuis Domoticz et son json vers la camera avec des message du type : myhome/dafang/motion/detection/set OFF

https://github.com/EliasKotlyar/Xiaomi- ... control.sh

Alors oui on peut le faire en http mais c'est pas drôle, surtout qu'en plus j'aimerai profiter du retour d’état que la cam envoie toutes les 30 secondes (delai configurable).

Le but etant de completer le debut minimaliste d'integration proposer : https://gadget-freakz.com/xiaomi-dafang ... ra-review/
Ca donne quoi ce projet, j'attends la suite ;)
Version: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

deennoo
Messages : 4006
Enregistré le : 25 janv. 2015, 02:00

Re: Convertion MQTT Node Red String -> message

Message par deennoo » 02 mars 2019, 15:21

c'est parti um peu differement.

Par le MQTT on peut piloter la position horizontal (x) et vertical (y) de la cam.

La cam ayant la detection auto et le motion tracking c'est presque nickel, sauf que si elle est a x: 2500 et qu'il y a un mouvement a x : 400 elle ne le voit pas.

Dans mon cas a x: 400 il y a une porte avec un detecteur d'ouverture.

L'idee est de ce servir de ce capteur pour tourner la cam vers le bon coté.

J'ai reussit a faire ceci qui fonctionne :
Capture.PNG
Capture.PNG (32.56 Kio) Vu 1382 fois
Reste maintenant a "convertir" mon selector :
Capture dafang.PNG
Capture dafang.PNG (15.57 Kio) Vu 1382 fois
Ou

off : svalue1 = 0
Cuisine : svalue1 = 10
Salon : svalue1 = 20

j'ai commencer a travailler sur un truc comme cela :

Code : Tout sélectionner

if  (msg.payload.idx === 10665) 
{
    if (msg.payload.svalue1 == "0")
    {
    //msg.topic = "myhome/dafang/motors/horizontal/set";
    msg.payload == "2350";
    }

    else if (msg.payload.svalue1 == "10")
    {
    //msg.topic = "myhome/dafang/motors/horizontal/set";
    msg.payload == "800"; 
    }

    else if (msg.payload.svalue1 == "20")
    {
    //msg.topic = "myhome/dafang/motors/horizontal/set";
    msg.payload == "1400"; 
    }


return msg;
}
 
qui ne fonctionne pas biensur, il n'est meme pas trigger
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr

deennoo
Messages : 4006
Enregistré le : 25 janv. 2015, 02:00

Re: Convertion MQTT Node Red String -> message

Message par deennoo » 02 mars 2019, 18:17

Jeff a écrit :
14 févr. 2019, 17:53
deennoo a écrit :
10 févr. 2019, 01:49
Jeff a écrit :
09 févr. 2019, 23:38
:D content de t'avoir aidé.
je vais surement avoir besoin de toi, cart il a le chemin inverse a faire :

Depuis Domoticz et son json vers la camera avec des message du type : myhome/dafang/motion/detection/set OFF

https://github.com/EliasKotlyar/Xiaomi- ... control.sh

Alors oui on peut le faire en http mais c'est pas drôle, surtout qu'en plus j'aimerai profiter du retour d’état que la cam envoie toutes les 30 secondes (delai configurable).

Le but etant de completer le debut minimaliste d'integration proposer : https://gadget-freakz.com/xiaomi-dafang ... ra-review/
Ca donne quoi ce projet, j'attends la suite ;)
Bon apres de belle lecture et beaucoup de test, j'ai enfin voulu prendre ton exemple et cela fonctionne.

Voici le visuel
Capture.PNG
Capture.PNG (15.18 Kio) Vu 1366 fois
Avec le script LUA lié a mon alarme et des PIR c'est nickel ;-)
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre