Table counterCalendar

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 <\>.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Table counterCalendar

Message par Keros »

La ligne d'erreur indique un problème de calcul avec une valeur booléenne. Le pense que faire variable = os.execute("curl -s etc ...) retourne vrai ou faux si le script s'est bien exécuter ou pas. Mais pas la valeur calculée par le script.

Fais peut-être une recherche avec curl -s sur le forum : tu trouveras peut-être des exemples.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Table counterCalendar

Message par knasson »

Ok j'ai trouvé l'instruction io.popen qui semble fonctionner et me permet de récupérer la valeur de mon compteur.
la valeur est fournie sous forme d'une chaine comme ceci "1.690"
je n'arrive pas a faire la conversion et la coercition ne fonctionne pas..
le script:

Code : Tout sélectionner

commandArray = {}
local handle  = io.popen("curl -s 'http://raspberrypi:8080/json.htm?type=graph&sensor=counter&idx=9&range=week' | jq .result[7].v")
local nrj_jour = handle:read("*a")
handle:close()
print (nrj_jour)
kw_jour = tonumber(nrj_jour)
euro_jour= kw_jour*uservariables[prixKWh]
msg = 'la valeur euro du jour est'..euro_jour..'Euros'
print (msg)
return commandArray
le message d'erreur du log:
"2021-04-18 10:58:24.970 Status: LUA: "1.690"
2021-04-18 10:58:24.970
2021-04-18 10:58:24.861 Error: EventSystem: in /home/kan/domoticz/scripts/lua/script_device_compteurjour.lua: .../kan/domoticz/scripts/lua/script_device_compteurjour.lua:7: attempt to perform arithmetic on a nil value (global 'kw_jour')
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Table counterCalendar

Message par Keros »

La ligon d'erreur sans aucune information n'est pas normale. Je ne suis pas sur que nrj_jour ait bien une valeur.

Pourrais-tu modifier ton print en affichant le nom de la variable :

Code : Tout sélectionner

print ("nrj_jour = "..nrj_jour)
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Table counterCalendar

Message par knasson »

oui bien sur...
"2021-04-18 13:43:02.229 Status: LUA: nrj_jour="4.871"
2021-04-18 13:43:02.229
2021-04-18 13:43:02.066 Error: EventSystem: in /home/kan/domoticz/scripts/lua/script_device_compteurjour.lua: .../kan/domoticz/scripts/lua/script_device_compteurjour.lua:7: attempt to perform arithmetic on a nil value (global 'kw_jour')"
la valeur "nrj_jour" est bien acquise ("4.871" ) et c'est une "string"! Mais pas moyen de la convertir en nombre!
l'operation "tonumber" donne une valeur nulle.
une idée?

Code : Tout sélectionner

commandArray = {}
local handle  = io.popen("curl -s 'http://raspberrypi:8080/json.htm?type=graph&sensor=counter&idx=9&range=week' | jq .result[7].v")
local nrj_jour = handle:read("*a")
handle:close()
print ("nrj_jour="..nrj_jour)
kw_jour = tonumber(nrj_jour)
euro_jour= kw_jour*uservariables[prixKWh]
msg = 'la valeur euro du jour est'..euro_jour..'Euros'
print (msg)
return commandArray
Merci
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Table counterCalendar

Message par Keros »

Le calcul se fait sur tu forces la valeur en indiquant directement kw_jour=4,871 ?

Ce ne serait pas une histoire de point à la place de la virgule qui bloquerait la conversion en nombre ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Table counterCalendar

Message par Neutrino »

"2021-04-18 13:43:02.229 Status: LUA: nrj_jour="4.871"
C'est pas plutôt les guillemets le problème ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Table counterCalendar

Message par knasson »

si je force la valeur comme tu le suggères et que je corrige une erreur de syntaxe sur uservariables ['prixKWh']
il faut des apostrophes autour du nom de la variable...

Code : Tout sélectionner

commandArray = {}
local handle  = io.popen("curl -s 'http://raspberrypi:8080/json.htm?type=graph&sensor=counter&idx=9&range=week' | jq .result[7].v")
local nrj_jour = handle:read("*a")
handle:close()
print ("nrj_jour="..nrj_jour)
kw_jour = 4.871
print ("prix KWh="..uservariables['prixKWh'])
euro_jour= kw_jour* uservariables['prixKWh']
msg = 'la valeur euro du jour est '..euro_jour..'Euros'
print (msg)
return commandArray
j'ai le résultat:
2021-04-18 14:38:36.994 Status: LUA: nrj_jour="5.996"
2021-04-18 14:38:36.994
2021-04-18 14:38:36.994 Status: LUA: prix KWh=0.56
2021-04-18 14:38:36.994 Status: LUA: la valeur euro du jour est 2.72776Euros
donc j'en suis ramené a convertir le contenu de ma variable nrj_jour --> "5,996" en nombre!
je cherche...En effet le résultat s'affiche avec une virgule alors que le séparateur décimal doit être représenté par un point..
il y a une piste.
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Table counterCalendar

Message par knasson »

Neutrino a écrit : 18 avr. 2021, 14:20
"2021-04-18 13:43:02.229 Status: LUA: nrj_jour="4.871"
C'est pas plutôt les guillemets le problème ?
Merci je reçois la valeur telle quelle avec les guillemets donc effectivement c'est peut être ca le problème mais comment virer les guillemets...je cherche merci pour la piste...
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Table counterCalendar

Message par knasson »

Trouvé! Merci les amis pour votre aide precieuse...
j'utilise la commande string.sub (nrj_jour,2, 6) qui me vire les 2 guillemets
comme ceci..

Code : Tout sélectionner

commandArray = {}
local handle  = io.popen("curl -s 'http://raspberrypi:8080/json.htm?type=graph&sensor=counter&idx=9&range=week' | jq .result[7].v")
local nrj_jour = handle:read("*a")
handle:close()
print ("nrj_jour="..nrj_jour)
kwh_jour = string.sub(nrj_jour,2,6)
print ("kwh_jour="..kwh_jour)
--local kwh_jour = tonumber(nrj_jour)
print ("prix KWh="..uservariables['prixKWh'])
local euro_jour= kwh_jour* uservariables['prixKWh']
msg = 'la valeur euro du jour est '..euro_jour..'Euros'
print (msg)
return commandArray
le resultat:
2021-04-18 15:43:13.355 Status: LUA: kwh_jour=6.993
2021-04-18 15:43:13.356 Status: LUA: prix KWh=0.56
2021-04-18 15:43:13.356 Status: LUA: la valeur euro du jour est 3.91608Euros
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Table counterCalendar

Message par Keros »

Maintenant qu'est-ce qui ce passe si ta consommation est de 10.000 ? :arrow: https://www.lua.org/pil/20.html ;)
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre