Page 2 sur 4

Re: Table counterCalendar

Publié : 13 avr. 2021, 19:41
par Keros
Je ne suis pas fou, ton script n'était pas dans ton message et tu l'as rajouté suite à ma remarque.

On va pouvoir avancer :)

Je pense que ton problème est que tu demandes une valeur de v, mais tu en as plusieurs possibles dans le Json.

Qu'est ce que cela donne si tu essayes :

Code : Tout sélectionner

cumul_jour = jsonValeur.[1].v

Re: Table counterCalendar

Publié : 13 avr. 2021, 19:41
par denis_brasseur
Pas grave, t'inquiète !

Code : Tout sélectionner

config= assert(io.popen (curl.."http://raspberrypi:8080/json.htm?type=graph&sens$
Je pense qu'il manque déjà un bout de code dans ta ligne de commande.

Re: Table counterCalendar

Publié : 13 avr. 2021, 21:27
par knasson
oui il manque un bout c'est un copier coller qui a mal fonctionné:
la ligne complète est la suivante
config= assert(io.popen (curl.."http://raspberrypi:8080/json.htm?type=g ... ange=month"))
désolé ...
mais je pense en effet que la raison est que il y a plusieurs valeurs V dans le résultat, je vais chercher a sélectionner cette valeur..avec peut être la syntaxe proposé par Keros..je vais tester...

Re: Table counterCalendar

Publié : 13 avr. 2021, 21:39
par knasson
quand je rajoute

Code : Tout sélectionner

cumul_jour = jsonValeur.[1].v 
j'obtiens cela dans le log:
"2021-04-13 21:31:34.163 Error: EventSystem: in /home/kan/domoticz/scripts/lua/script_device_compteurjour.lua: .../kan/domoticz/scripts/lua/script_device_compteurjour.lua:9: <name> expected near '['"
je vais essayer autrement..

Re: Table counterCalendar

Publié : 13 avr. 2021, 21:46
par Keros
Je pense qu'il te manque un point entre le jsonValeur et [1] ?

Pour info : tu as ta balise code qui est mal fermée et l'affichage de la fin de ton message est bizarre.

Re: Table counterCalendar

Publié : 13 avr. 2021, 22:02
par knasson
Ok j'avais bien le point dans le script donc rien de changé...
si j'enlève [1]
voila ce que j'obtiens sur le log
2021-04-13 22:00:17.296 Error: EventSystem: in /home/kan/domoticz/scripts/lua/script_device_compteurjour.lua: .../kan/domoticz/scripts/lua/script_device_compteurjour.lua:11: attempt to concatenate a nil value (global 'cumul_jour')

Re: Table counterCalendar

Publié : 13 avr. 2021, 22:31
par Keros
Normalement le code devrait être result

Code : Tout sélectionner

cumul_jour = jsonValeur.result[1].v
Ou

Code : Tout sélectionner

cumul_jour = jsonValeur.result[1]["v"]
Mais ce que je ne comprends pas, c'est que tu devrais avoir des "" autour des noms de variables :

Code : Tout sélectionner

{
"ValueQuantity": "",
"ValueUnits": "",
"counter": "4096.038",
"result": [
{
"c": "3905.098",
"d": "2021-03-31",
"v": "15.700"
},
Quand je le modifie et que je teste sur https://developer.mozilla.org/en-US/doc ... JSON/parse, ça fonctionne avec :

Code : Tout sélectionner

const json = '{"ValueQuantity": "","ValueUnits": "","counter": "4096.038","result": [{"c": "3905.098","d": "2021-03-31","v": "15.700"}],"status": "OK","title": "Graph counter month"}';
const obj = JSON.parse(json);

console.log(obj.result[0].v);
Attention néanmoins, la table [0] n'existe pas en LUA : ça commence à [1].

Re: Table counterCalendar

Publié : 14 avr. 2021, 10:05
par knasson
avec jsonValeur.result[1].v
2021-04-14 09:48:23.596 Error: EventSystem: in /home/kan/domoticz/scripts/lua/script_device_compteurjour.lua: .../kan/domoticz/scripts/lua/script_device_compteurjour.lua:10: attempt to index a nil value (field 'result')

avec jsonValeur.result[1]["v"]
2021-04-14 09:56:21.422 Error: EventSystem: in /home/kan/domoticz/scripts/lua/script_device_compteurjour.lua: .../kan/domoticz/scripts/lua/script_device_compteurjour.lua:10: attempt to index a nil value (field 'result')

tout se passe comme si "result" était interprété comme une variable vide. Peut être a t il besoin d'être défini?
je regarde..En effet les résultats de la commande json
http://raspberrypi:8080/json.htm?type=g ... ange=month
dans le navigateur donne des valeurs entre "" mais pas les étiquettes.
Merci pour ton aide...en bash je saurai extraire la donnée de domoticz.db de la table Meter_Calendar je vais essayer pour voir ce que ca pourrait donner.
je remets le script testé:

Code : Tout sélectionner

json = (loadfile "/home/kan/domoticz/scripts/lua/JSON.lua")()
commandArray = {}

curl='/usr/bin/curl -m 15 '
config= assert(io.popen (curl.."http://raspberrypi:8080/json.htm?type=graph&sensor=counter&idx=9&range=month"))
blocjson = config:read ('*all')
config:close()
jsonValeur = json:decode(blocjson)
--print (jsonValeur)
cumul_jour = jsonValeur.result[1]"[v]"
msg = 'le cumul production du jour est'..cumul_jour..'kWh'
print (msg)
return commandArray

Re: Table counterCalendar

Publié : 14 avr. 2021, 12:41
par Keros
knasson a écrit : 14 avr. 2021, 10:05 tout se passe comme si "result" était interprété comme une variable vide. Peut être a t il besoin d'être défini?
L'erreur t'indique a Nil Value car le résultat de la recherche Json est vide. Ton Json aurait result écrit entre "", ça fonctionnerait. Et je n'ai pas trouvé d'exemple avec result sans guillements :?

Re: Table counterCalendar

Publié : 17 avr. 2021, 16:50
par knasson
Apres quelques recherches, lectures etc.. je me suis tourné vers "jq" qui me permet d'obtenir la valeur du compteur que je cherche.
j'écris en ligne de commande dans mon terminal raspian.

Code : Tout sélectionner

curl -s "http://raspberrypi:8080/json.htm?type=graph&sensor=counter&idx=9&range=week" | jq .result[7].v
resultat:
"1.234"
c'est donc bien la valeur de mon cumul journalier donc cette commande fonctionne en bash
je voudrai l'integrer dans lua alors j'ai ecrit

Code : Tout sélectionner

commandArray = {}
nrj_jour = os.execute("curl -s 'http://raspberrypi:8080/json.htm?type=graph&sensor=counter&idx=9&range=week' | jq .result[7].v")
euro_jour= nrj_jour*uservariables[prixKWh]
msg = 'la valeur euro du jour est'..euro_jour..'Euros'
print (msg)
return commandArray
j'obtiens l'erreur suivante:

Code : Tout sélectionner

2021-04-17 16:46:38.690 Error: EventSystem: in /home/kan/domoticz/scripts/lua/script_device_compteurjour.lua: .../kan/domoticz/scripts/lua/script_device_compteurjour.lua:3: attempt to perform arithmetic on a boolean value (global 'nrj_jour')
il semble que le résultat de la ligne 2 n'est pas conforme a ce que j'obtenais dans mon terminal, avez des suggestions de code?