Extraire des données MQTT via Node Red , concatener ces données et création d'une trame pour domoticz

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
seby90
Messages : 48
Inscription : 21 févr. 2020, 13:12

Extraire des données MQTT via Node Red , concatener ces données et création d'une trame pour domoticz

Message par seby90 »

Bonjour,

je viens solliciter votre aide pour l'écriture d'un script JS sous Node RED . J'ai tenter de fouiller à différent endroit sur le web mais je ne trouve pas ce que je recherche. Notamment des fonctions de recherche de chaine de caractères.
J'utilise Tasmota pour transmettre à domoticz les valeurs de mes 3 compteurs Enedis. Tasmota est censé faire cela nativement mais j'ai mis en évidence récemment une incohérence de transmission des données sur Domoticz (j'ai un décalage de quelques wh tout les jours).
Donc tasmota envoit une trame spécifique pour domoticz (avec un compteur qui se décale dans le temps) et une trame MQTT générale (qui elle est correcte) et je voudrais extraire les données de la trame MQTT générale et refaire une nouvelle trame MQTT pour domoticz en fonction des données extraites auparavant.

Donc tasmota envoit 2 trame qui m’intéresse dans le même timing, et il faut récupérer les données dans une et dans l'autre afin de recompiler un message pour domoticz.

1ere trame
"{"Time":"2021-03-29T18:32:09","Uptime":"2T19:12:21","UptimeSec":241941,"Heap":22,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":6,"Wifi":{"AP":1,"SSId":"XXXXXX","BSSId":"XX:XX:XX:XX:XX:XX","Channel":1,"RSSI":58,"Signal":-71,"LinkCount":1,"Downtime":"0T00:00:03"}}"

Donc là, j'aimerais extraire la puissance du RSSI. On peut lire 58, donc on le divise par 10 et on arrondi au chiffre inférieur soit 5.8 donc à l’arrondi inférieur = 5

Puis voilà la deuxième trame

"{"Time":"2021-03-29T18:32:09","ENERGY":{"TotalStartTime":"2021-03-26T23:18:54","Total":970.841,"Yesterday":3.359,"Today":0.896,"Period":2,"Power":234,"ApparentPower":234,"ReactivePower":0,"Factor":1.00,"Voltage":234,"Current":1.000,"Load":16,"ADSC":"XXXXXXXX","VTIC":2,"NGTF":" BASE ","LTARF":" BASE ","EAST":2083579,"EASF01":970844,"EASF02":1112735,"EASF03":0,"EASF04":0,"EASF05":0,"EASF06":0,"EASF07":0,"EASF08":0,"EASF09":0,"EASF10":0,"EASD01":970844,"EASD02":1112735,"EASD03":0,"EASD04":0,"IRMS1":1,"URMS1":234,"PREF":6,"PCOUP":6,"SINSTS":341,"SMAXSN":689,"SMAXSN-1":1777,"CCASN":96,"CCASN-1":36,"UMOY1":233,"STGE":"003A0001","MSG1":"PAS DE MESSAGE ","PRM":2147483647,"RELAIS":0,"NTARF":1,"NJOURF":0,"NJOURF+1":0,"PJOURF+1":"00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE"}}"

J'aimerais extraire la valeur Power qui est a 234 et le compteur EASF01 qui dans cet exemple est a 970844 .

Voilà tout ce qu'il me faut pour récrire une nouvelle trame domoticz/in

Cette trame est celle utilisé pour le capteur P1 SmartMeter , et avec les données extraites plus haut, voici le résultat que j'aimerais.

"{"idx":26,"nvalue":0,"svalue":"0;970844;0.0;0.0;234;0","Battery":100,"RSSI":5}"

Si vous avez un lien ou je pourrais trouver exemple ça serait vraiment génial, ou ne serait ce que me conseiller.

Merci d'avance pour votre aide.
Répondre