interrogations sur PiTInfo

Forum dédié aux questions concernant la configuration de votre serveur sous Linux
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

Je pense que le plus compliqué à comprendre était la partie pour aller trouver la donnée dans le Json. Tu l'as trouvé avec jsonValeur.result.[1].Counter. Tu as fait le plus dur !!

Tu reprends le code de l'exemple, tu remplaces le lien de l'appel API après config=assert(io.popen('/usr/bin/curl, tu gardes une variable avec le jsonValeur.result.[1].Counter, tu modifies la ligne de log pour afficher la variable et tu es bon.

Ne te décourage pas maintenant, tu es au bout du tunnel ;)
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
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

je dirais que pour localiser Json et transcrire "Counter" j'ai compris la logique, donc assez simple maintenant.

Pour la suite, je vais faire "betement" ce que tu me dit (sans rien comprendre de la logique de programmation)

Code : Tout sélectionner

commandArray = {}
  config=assert(io.popen('/usr/bin/curl "http://192.168.0.25:8080/json.htm?type=devices&rid=161"'))
  blocjson = config:read('jsonValeur.result.[1].Counter')
  config:close()
  jsonValeur = json:decode(blocjson)
     Counter = jsonValeur.result.[1].Counter 
         msg = 'Index EDF '..Counter..
         print(msg)   
        return commandArray 
         
Sans aucune surprise, le log en rouge Error: EventSystem: in Script #2: [string "commandArray = {} ..."]:6: <name> expected near '['
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

L'erreur indiquait la ligne 6 où il ne faut pas de point entre result et [1].
Une autre erreur était sur la ligne 3 que tu avais modifiée > Pas besoin.
Il manque la ligne qui permet de charger les fonctions d'analyse du Json.

Essaye ceci :

Code : Tout sélectionner

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- for PI
commandArray = {}
  config=assert(io.popen('/usr/bin/curl "http://127.0.0.1:8080/json.htm?type=devices&rid=161"'))
  blocjson = config:read('*all')
  config:close()
  jsonValeur = json:decode(blocjson)
     Counter = jsonValeur.result[1].Counter 
         msg = 'Index EDF '..Counter
         print(msg)   
return commandArray 
La première ligne est celle pour un PI : le chemin est à ajuster pour ton système.
Il vaut mieux préférer l'adresse http://127.0.0.1:8080 à http://192.168.0.25:8080 : si DomoticZ change d'IP, tu n'auras pas besoin de modifier ton script.
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
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

Je n'avais jamais réussi a utiliser 127.0.0.1:8080 mais ça fonctionne. (perso, l'IP est fixer sur le raspberry et sur la box internet)

j'aimerais comprendre chaque ligne :

Code : Tout sélectionner

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- charger les fonctions d'analyse du Json (logiciel de décodage json)
commandArray = {}-- les commandes a exécuter
  config=assert(io.popen('/usr/bin/curl "http://127.0.0.1:8080/json.htm?type=devices&rid=161"'))--ouvrir la page json du widget desiré
  blocjson = config:read('*all')--lecture du json ?
  config:close()--fermer la page internet
  jsonValeur = json:decode(blocjson)--"décryptage" du json???
     Counter = jsonValeur.result[1].Counter--récupérer la valeur qui nous intéresse
         msg = 'Index EDF '..Counter--mise en page du message a afficher
         print(msg)-- écrire le message dans le log
return commandArray--fin de la commande a exécuter, recommence depuis le début
c'est a peu près ça?
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

Le 127.0.0.1 c'est l'IP interne du serveur. Si tu mets cette adresse dans un script de DomoticZ ou le navigateur de Pi, ça fonctionnera. Si tu le mets sur le navigateur de ton Pc, là ça ne marchera pas puisque cela va chercher l'IP interne de ton PC.

Code : Tout sélectionner

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- charger les fonctions d'analyse du Json (logiciel de décodage json)
commandArray = {}-- les commandes a exécuter
  config=assert(io.popen('/usr/bin/curl "http://127.0.0.1:8080/json.htm?type=devices&rid=161"'))--lance l'appel API pour lire les infos du widget desiré (json brut)
  blocjson = config:read('*all')--Enregistre les données Json brut dans une variable
  config:close()--ferme l'appel API
  jsonValeur = json:decode(blocjson)--Décode le format brut du json pour qu'on puisse récupérer les données via un tableau
     Counter = jsonValeur.result[1].Counter--récupérer la valeur qui nous intéresse
         msg = 'Index EDF '..Counter--mise en page du message a afficher
         print(msg)-- écrire le message dans le log
return commandArray--fin de la commande a exécuter
Tu as un index maintenant ?

Étape suivante : Tu modifies le script pour mettre les deux index dans les logs ?
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
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

Je comprend mieux pour le 127 :lol:

Pas trop vite.

avec le tuto de Joebuz (viewtopic.php?p=82679#p82679), -> tranfert de la valeur dans le widget

Code : Tout sélectionner

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- 
commandArray = {}-- les commandes a executer
--    if (time.min % 20)==0 then                 -- pour exécuter le script toutes les 20 minutes
    local CounterDeviceIdx     = 175  --- idx dummy crée en compteur
    config=assert(io.popen('/usr/bin/curl "http://127.0.0.1:8080/json.htm?type=devices&rid=161"'))--
  blocjson = config:read('*all')--
  config:close()--
  jsonValeur = json:decode(blocjson)--
     Counter = jsonValeur.result[1].Counter--
         msg = 'Index EDF '..Counter--
         print(msg)-- 
 commandArray[CounterDeviceIdx] = { ['UpdateDevice'] = CounterDeviceIdx..'|0|'..Counter }-- envoi de la valeur dans le compteur
return commandArray--
ligne 3, 4 et 12 ajouté
ça fonctionne


Edit Je pense que je vais faire 2 compteurs (1 HP et 1 HC), le chiffres seront écrit plus gros et plus simple pour mon père
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

Content que t'y sois arriver :)

Si le Widget se met à jour avec la bonne valeur, tu peux désactiver le print() : il n'est pas nécessaire de surcharger les logs.
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
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

Un grand MERCI Keros, je n'y serais jamais arrivé sans toi :D

J'ai encore une question :
le json de mon père est "atypique" dans le sens ou il y a plusieurs valeurs sur une meme ligne séparé par un point virgule.

Code : Tout sélectionner

"Data" : "22916845;24111445;0;0;220;0",

Code : Tout sélectionner

"Data" : "index HP ; index HC;?;?;?;?",
avec Data = jsonValeur.result[1].Data je recupere bien mon index HP.

Comment faire pour récupérer la seconde valeur (celle après le ; )?
J'aurais bien essayé Data = jsonValeur.result[1].Data; mais la connection internet est coupé chez mon père (vive la campagne :lol: )
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

J'ai mis un peu de temps, mais j'y suis arrivé… enfin plutôt : j'ai retrouvé un exemple de papoo :mrgreen:

En haut de ton script, il faut que tu rajoutes la fonction :

Code : Tout sélectionner

function split(inputstr, sep)
        if sep == nil then
                sep = "%s"
        end
        local t={} ; i=1
        for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                t[i] = str
                i = i + 1
        end
        return t
end -- usage : valeurs = split(variable,";")
Et pour y faire appel :

Code : Tout sélectionner

valeurs = split(jsonValeur.result[1].data,";")
print(valeurs[2])
Et tu devrais avoir la deuxième valeur dans les logs.
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
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

Merci beaucoup Keros.

Je testerais sur place (pb de connexion internet avec Domoticz de mon père)
Je ne manquerais pas de confirmé le bon fonctionnement du code :D
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Répondre