Page 3 sur 4
Re: Table counterCalendar
Publié : 17 avr. 2021, 21:18
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.
Re: Table counterCalendar
Publié : 18 avr. 2021, 11:00
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')
Re: Table counterCalendar
Publié : 18 avr. 2021, 11:07
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 :
Re: Table counterCalendar
Publié : 18 avr. 2021, 13:48
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
Re: Table counterCalendar
Publié : 18 avr. 2021, 13:59
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 ?
Re: Table counterCalendar
Publié : 18 avr. 2021, 14:20
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 ?
Re: Table counterCalendar
Publié : 18 avr. 2021, 14:45
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.
Re: Table counterCalendar
Publié : 18 avr. 2021, 15:21
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...
Re: Table counterCalendar
Publié : 18 avr. 2021, 15:45
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
Re: Table counterCalendar
Publié : 18 avr. 2021, 17:45
par Keros
Maintenant qu'est-ce qui ce passe si ta consommation est de 10.000 ?
https://www.lua.org/pil/20.html 