lua et json

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 <\>.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

lua et json

Message par papoo »

bonjour,
dans un script lua, j'extrais des données d'une API via JSON. jusqu'ici pas de problème.
cette API a une particularité : lorsque des données sont absentes le champs dédié disparaît et du coup mon script est en erreur jusqu’à ce que ce champs réapparaisse.
exemple avec le tutoriel https://easydomoticz.com/lua-et-json/
si le champs

Code : Tout sélectionner

"latitude": "37.77500916",
disparait de l'API
le code si référant

Code : Tout sélectionner

latitude = jsonLocation.current_observation.display_location.latitude
retourne une erreur de type

Code : Tout sélectionner

Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_test.lua: /home/pi/domoticz/scripts/lua/script_time_test.lua:21: attempt to index field 'latitude' (a nil value)
j'ai bien sur tenté les

Code : Tout sélectionner

if jsonLocation.current_observation.display_location.latitude ~= nil then 
ou

Code : Tout sélectionner

latitude = jsonLocation.current_observation.display_location.latitude or nil
ou

Code : Tout sélectionner

latitude = jsonLocation.current_observation.display_location.latitude or ""
tout cela sans succès
Auriez vous une solution à ce problème?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: lua et json

Message par vil1driver »

Salut,

Code : Tout sélectionner

local infos = jsonLocation.current_observation.display_location

for v,i in pairs(infos) do
		if v=='latitude' then
			latitude=i
			break
		else
			latitude='not found'
		end
end
print(latitude)	
;)
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
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: lua et json

Message par papoo »

merci
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: lua et json

Message par papoo »

mince
cela fonctionne si je recherche une valeur mais j'en ai plusieurs
et ça ne me retourne que la dernière (longitude) il ne trouve pas la première (latitude)
local infos = jsonLocation.current_observation.display_location

Code : Tout sélectionner

for v,i in pairs(infos) do
      if v=='latitude' then latitude=i break else latitude='not found' end
      if v=='longitude' then longitude=i break else longitude='not found' end
end
print(latitude) 
print(longitude)  
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: lua et json

Message par vil1driver »

Normal le break stop la recherche des qu'une valeur est trouvée.

Il te faut dupliquer le bloc complet pour chaque valeur recherchée

Code : Tout sélectionner


local infos = jsonLocation.current_observation.display_location

for v,i in pairs(infos) do
      if v=='latitude' then
         latitude=i
         break
      else
         latitude='not found'
      end
end
for v,i in pairs(infos) do
      if v=='longitude' then
         longitude=i
         break
      else
         longitude='not found'
      end
end
print(latitude)   
print(longitude) 

Ou alors

Code : Tout sélectionner


local infos = jsonLocation.current_observation.display_location
local latitude ='not found'
local longitude ='not found'
for v,i in pairs(infos) do
      if v=='latitude' then
         latitude=i
       end
      if v=='longitude' then
         longitude=i
       end
end
print(latitude)   
print(longitude) 

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
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: lua et json

Message par papoo »

merci

Code : Tout sélectionner

local infos = jsonLocation.current_observation.display_location

for v,i in pairs(infos) do
      if v=='latitude' then print(i) end
      if v=='longitude' then print(i) end
end
semble fonctionner
je vais donc tenter de mette à jour mes devices directement dans la boucle for
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Répondre