json et récupération des valeurs de "Paramètres" (settings)

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

json et récupération des valeurs de "Paramètres" (settings)

Message par denis_brasseur »

Code : Tout sélectionner

http://mon_ip:8060/json.htm?type=settings
permet de récupérer des valeurs comme celle ci :
{
"AcceptNewHardware": 0,
"ActiveTimerPlan": 0,
---
"ElectricVoltage": 230,
---
"EmailFrom": "mon_ip@gmail.com"
}
Pour récupérer une valeur en particulier, ElectricVoltage par exemple, plutôt simple :

Code : Tout sélectionner

local settings = assert(io.popen(curl..'-u "mon_ip:8060/json.htm?type=settings"'))
    local list = settings:read('*all')
    settings:close()
    local sValue = json:decode(list).ElectricVoltage
Je me suis mis dans l'idée d'une fonction générique permettant de récupérer la valeur envoyer en paramètre via key :

Code : Tout sélectionner

--Pref('ElectricVoltage')
function Pref(key)
    local settings = assert(io.popen(curl..'-u "mon_ip:8060/json.htm?type=settings"'))
    local list = settings:read('*all')
    settings:close()
    local sValue = json:decode(list).ElectricVoltage
    return sValue
end
Problème, comment concaténer la valeur envoyer en parametre
local sValue = json:decode(list).key
afin d'obtenir ainsi
local sValue = json:decode(list).ElectricVoltage
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: json et récupération des valeurs de "Paramètres" (settings)

Message par Keros »

J'utilise ce type de formatage avec le i qui est une variable :

Code : Tout sélectionner

[code]json:decode(list).hourly[i]["rain"]
json:decode(list).daily[i+1].dt
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
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: json et récupération des valeurs de "Paramètres" (settings)

Message par vil1driver »

Salut,

sans avoir testé je dirais

Code : Tout sélectionner

--Pref('ElectricVoltage')
function Pref(key)
    local settings = assert(io.popen(curl..'-u "mon_ip:8060/json.htm?type=settings"'))
    local list = settings:read('*all')
    settings:close()
    local sValue = json:decode(list)
    for name, value in pairs sValue do
    	if name == key then
    		return value
    	end	
    end
end

MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: json et récupération des valeurs de "Paramètres" (settings)

Message par denis_brasseur »

Il n'aime pas ta boucle !
Error: EventSystem: in toute_les_5_mn: [string "-- chargement des modules ..."]:30: 'do' expected near 'sValue'
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: json et récupération des valeurs de "Paramètres" (settings)

Message par boum »

En Lua, nomTable.nomClef est l'équivalent de nomTable["nomClef"]

Code : Tout sélectionner

--Pref('ElectricVoltage')
function Pref(key)
    local settings = assert(io.popen(curl..'-u "mon_ip:8060/json.htm?type=settings"'))
    local list = settings:read('*all')
    settings:close()
    local jsonTable = json:decode(list)
    local sValue = jsonTable[key]
    return sValue
end
(et pour l'erreur, c'est pairs(sValue) mais itérer sur la table est inutile si tu connais l'index)
Dernière modification par boum le 17 août 2020, 15:07, modifié 1 fois.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: json et récupération des valeurs de "Paramètres" (settings)

Message par vil1driver »

Probablement plus simple ainsi effectivement

Pour l'erreur c'est surtout que j'avais oublié le do (que j'ai rajouté plus tard mais tu as du voir mon message avant ça)
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

[Resolu] json et récupération des valeurs de "Paramètres" (settings)

Message par denis_brasseur »

@boum : Nickel, cela fonctionne avec ta méthode, merci

@vil1driver : Ce n'est pas le do le probleme, mais bien la parenthèse manquante pairs(sValue), ça fonctionne également.

merci à vous 2, efficace et clair.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: json et récupération des valeurs de "Paramètres" (settings)

Message par vil1driver »

;)
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Répondre