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 »

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
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
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Table counterCalendar

Message 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.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Table counterCalendar

Message 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...
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Table counterCalendar

Message 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..
Dernière modification par knasson le 13 avr. 2021, 21:51, modifié 1 fois.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Table counterCalendar

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

Re: Table counterCalendar

Message 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].
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 »

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

Re: Table counterCalendar

Message 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 :?
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 »

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?
Répondre