Page 1 sur 1

BMP280 MQTT Node-red

Publié : 04 févr. 2019, 16:27
par tigre2010
Bonjour,
J'ai des modules sonoff avec Tasmota qui m'envoient des infos de température et de pression des BMP280
J'aimerais transformer le message envoyer par Mqtt pour ne recevoir que la température mais j'ai beau cherché, j'arrive pas à comprendre comment modifier le message Mqtt par Node red (par le biais de fonction mais je comprends pas le principe)

Donc j'aimerais juste transformer ce message :
"{"idx":45,"nvalue":0,"svalue":"23.3;0.0;0;1023.5;5","Battery":83,"RSSI":10}"

en

"{"idx":55,"nvalue":0,"svalue":"23.3","Battery":83,"RSSI":10}"

est-ce que quelqu'un pourrait m'aider? Je veux juste changer le idx et supprimer un bout du message mais j'y arrive pas :(

Merci d'avance

Re: BMP280 MQTT Node-red

Publié : 04 févr. 2019, 20:11
par Jeff
Si cela peut t'aider, voici comment je travaillais les données à l'époque ou j'utilisais nodered.

Code : Tout sélectionner

[{"id":"f5267101.951fb","type":"mqtt in","z":"d9f74ef.52e2cb","name":"","topic":"domoticz/in","qos":"2","broker":"f0e0a1f2.be3d4","x":130,"y":140,"wires":[["2e1f9d8f.391042","460ea427.1ebc8c"]]},{"id":"2e1f9d8f.391042","type":"debug","z":"d9f74ef.52e2cb","name":"","active":true,"console":"false","complete":"payload","x":530,"y":140,"wires":[]},{"id":"460ea427.1ebc8c","type":"json","z":"d9f74ef.52e2cb","name":"","x":310,"y":220,"wires":[["2e1f9d8f.391042"]]},{"id":"a4b8ad51.536cf","type":"function","z":"d9f74ef.52e2cb","name":"Temperature","func":"msg.topic = \"domoticz/out/\"+msg.payload.name+\"/Temperature\";\n\nif  (msg.payload.dtype === \"Temp + Humidity\") \n{\nmsg.payload = msg.payload.svalue1\nreturn msg;\n}\nelse if (msg.payload.dtype === \"Temp\")\n{\nmsg.payload = msg.payload.svalue1\nreturn msg;\n}\n\n\n","outputs":1,"noerr":0,"x":490,"y":80,"wires":[[]]},{"id":"2c517654.3de8ca","type":"comment","z":"d9f74ef.52e2cb","name":"Temperature et humidity","info":"In this example the IDX in the switch node is \nrepublished to a topic named domoticz/out/[devicename]\nthe repub function translate value 1 to ON","x":179,"y":74,"wires":[]},{"id":"a79a901.851887","type":"function","z":"d9f74ef.52e2cb","name":"Humidity","func":"msg.topic = \"domoticz/out/\"+msg.payload.name+\"/Humidity\";\n\nif  (msg.payload.dtype === \"Temp + Humidity\") \n{\nmsg.payload = msg.payload.svalue2\nreturn msg;\n}\n\n","outputs":1,"noerr":0,"x":480,"y":200,"wires":[[]]},{"id":"f0e0a1f2.be3d4","type":"mqtt-broker","z":"","name":"","broker":"192.168.1.100","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
Je ne connais pas ton niveau, donc je ne sais pas d'où tu pars !
Il faut écouter le topic de domoticz/in (ce qui arrive normalement des nodes qui diffuse vers domoticz ou domoticz/out (ce que rediffuse domoticz)
Tu peux déja visualiser les messages brutes ou transformer avec json (tu coupes ou active les liaisons vers la boite json orange) pense à cocher le carré de la boite verte msg.payload pour voir les logs.
En fonction de cela, tu peux récupérer ce qui t'intéresse sur le principe de msg.payload.XXX (svalue1, stype...)

Code : Tout sélectionner

{
   "Battery" : 100,
   "RSSI" : 6,
   "description" : "Alexa_Name: jardin",
   "dtype" : "Temp + Humidity",
   "id" : "23041",
   "idx" : 13,
   "name" : "Exterieure",
   "nvalue" : 0,
   "stype" : "THGR810, THGN800",
   "svalue1" : "3.8",
   "svalue2" : "96",
   "svalue3" : "3",
   "unit" : 1
}
Tu devrais maintenant t'en sortir.

Re: BMP280 MQTT Node-red

Publié : 05 févr. 2019, 11:25
par tigre2010
Merci :) J'ai réussi
au final : j'ai mis un json pour formater le message, un switch pour n'avoir que le idx 45 puis une fonction :
if (msg.payload.idx === 45)
{
msg.payload.idx = 64
return msg;
}

et ça marche!

Mais au final il y a le Node "change" qui était plus simple mais il faut bien mettre au format json

Merci encore :)

Re: BMP280 MQTT Node-red

Publié : 05 févr. 2019, 12:27
par Jeff
Cool, ca fait plaisir :D
J'ai passé un peu de temps hier à restaurer mes flows ;)

Re: BMP280 MQTT Node-red

Publié : 06 févr. 2019, 09:37
par tigre2010
Merci encore
J'ai une autre petite question.
Est ce qu'il y a un truc pour que node-red puisse envoyer un message Mqtt si aucun message Mqtt n'a été envoyé depuis 1h ?
Genre, si j'ai mon capteur qui n'est plus branché depuis 1h, monde-red envoie un message Mqtt

EDIT : erf, j'ai trouvé par moi même en fait ^^il y a un plug-in ping pour node-red je vais essayer de me débrouiller

Re: BMP280 MQTT Node-red

Publié : 06 févr. 2019, 13:47
par Jeff
Tu peux aussi utiliser ce node :
https://flows.nodered.org/node/node-red ... simpletime
Il permet de récupérer l'heure dans tous ses formats (heure, minutes, secs... )lors de réception d'un message.
Après il faut stocker et comparer, une piste ici avec un exemple :

Re: BMP280 MQTT Node-red

Publié : 06 févr. 2019, 20:23
par tigre2010
j'ai fais un peu moins compliqué :
Input : inject chaque 30min --> ping sur l'ip de mes modules --> switch si message false --> change : set mon message Mqtt --> Mqtt output

Code : Tout sélectionner

[{"id":"373d278c.10fbe","type":"inject","z":"f424d061.3f403","name":"","topic":"1","payload":"","payloadType":"date","repeat":"1800","crontab":"","once":true,"onceDelay":"","x":120,"y":1020,"wires":[["1a51b6d5.ae2d01","3df21847.316638","b9de3586.dd9e9","25b43f8b.7c089","fe59e978.f1dda"]]},{"id":"1a51b6d5.ae2d01","type":"conf ping","z":"f424d061.3f403","name":"Ping Salon 1","host":"192.168.1.101","timeout":"5","requests":"5","x":350,"y":860,"wires":[["573fd08d.2856d"]]},{"id":"573fd08d.2856d","type":"switch","z":"f424d061.3f403","name":"","property":"payload","propertyType":"msg","rules":[{"t":"false"}],"checkall":"true","repair":false,"outputs":1,"x":610,"y":860,"wires":[["e48d18ca.5b3f1"]]},{"id":"e48d18ca.5b3f1","type":"change","z":"f424d061.3f403","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"set","p":"payload.idx","pt":"msg","to":"3","tot":"num"},{"t":"set","p":"payload.nvalue","pt":"msg","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":860,"wires":[["785a838a.585654"]]},{"id":"785a838a.585654","type":"mqtt out","z":"f424d061.3f403","name":"","topic":"domoticz/in","qos":"2","retain":"","broker":"15045d80.c79a83","x":1070,"y":1000,"wires":[]},{"id":"15045d80.c79a83","type":"mqtt-broker","z":"","name":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""}]

Re: BMP280 MQTT Node-red

Publié : 06 févr. 2019, 20:40
par Jeff
Rhooo bien joué, je viens d'apprendre plein de chose :)