Node-red function

Forum dédié aux questions concernant la configuration de votre serveur sous Linux
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Node-red function

Message par dokho »

Bonsoir,

Je souhaiterais utiliser node-red pour récupérer et envoyer via mqtt la valeur de consommation électrique issue de ma teleinfo wifi.

J'ai bricolé une fonction qui me permet de publier la valeur sur un topic mais elle est au format 00520.
Je souhaiterais supprimer les 00 devant n'avoir que 520.

J'ai bien trouvé des fonctions Java script pour arrondir à x chiffres après la virgule, d'autres pour arrondir à l'entier supérieur mais je ne pense pas que cela fasse l'affaire.

Quelqu'un aurait il une idée ?

Merci d'avance.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Node-red function

Message par vil1driver »

Salut,

sans connaitre ça sent l'usage de chaîne de caractères au lieu d'entier..
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
filoo
Messages : 27
Inscription : 14 sept. 2017, 10:58

Re: Node-red function

Message par filoo »

Effectivement c'est une chaîne de caractère et on doit pouvoir faire un truc comme ça :
var bidule = ta_variable.substring(2,5);
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: Node-red function

Message par dokho »

Bonjour,

Merci à vous deux, ça fonctionne :)

Code : Tout sélectionner

msg.topic = "domoticz/out/"+msg.payload.name+"/Energy";

if  (msg.payload.idx === 1277) 
{
msg.payload = msg.payload.svalue5.substring(2,5)
return msg;
}
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: Node-red function

Message par dokho »

filoo a écrit :Effectivement c'est une chaîne de caractère et on doit pouvoir faire un truc comme ça :
var bidule = ta_variable.substring(2,5);
En fait ça fonctionne tant que ma conso n'excède pas 999 Watts, au delà ça va tronquer le 1er chiffre non ?
filoo
Messages : 27
Inscription : 14 sept. 2017, 10:58

Re: Node-red function

Message par filoo »

Tu testes ce que tu trouves avant tes 3 dernières lettres et tu passes à : variable.substring(1,5);
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Node-red function

Message par vil1driver »

Effectivement,

J'avais une autre approche en tête en parlant d'entiers
C'est la conversion chaîne > entier
Exemple en lua c'est tonumber()
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
dokho
Messages : 685
Inscription : 28 déc. 2014, 19:32

Re: Node-red function

Message par dokho »

J'ai réussi avec:

Code : Tout sélectionner

msg.payload = Math.round(msg.payload.svalue5)
filoo
Messages : 27
Inscription : 14 sept. 2017, 10:58

Re: Node-red function

Message par filoo »

C'est encore mieux, parfait
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Node-red function

Message par vil1driver »

C'est tordu.. Même si ça fait le job, ce n'est pas la bonne façon de le faire.. Math.round sert à arrondir un entier pas à convertir une chaîne en entier.

Alors j'ai pris 10min sur google et je suis tombé là dessus

https://www.google.fr/search?q=nodered+ ... to+integer

Donc regarde plutôt du côté de parseInt() qui doit être l'équivalent de tonumber() en lua et plus encore.

https://www.w3schools.com/jsref/jsref_parseint.asp
The parseInt() function parses a string and returns an integer.
Ce sera certainement meilleur et plus fiable
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Répondre