Page 1 sur 1

LUA - Status d'un device particulier

Publié : 28 sept. 2018, 09:58
par mma13
Bonjour,

Je souhaite retrouver l'ensemble des données d'un device particulier. Je fais référence à :
http://adrIp:port/json.htm?type=devices&rid=169
Dans mon navigateur ça fonctionne parfaitement...
Avec le script lua suivant :

Code : Tout sélectionner

json = assert(loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
local config = assert(io.popen('/usr/bin/curl http://adrIp:port/json.htm?type=devices&rid=169'))
local blocjson = config:read('*all')
config:close()
print(blocjson)
local jsonValeur = json:decode(blocjson)
nom = jsonValeur.result[1].Name
data = jsonValeur.result[1].Data
print("---------------------------------------------")
print(nom.." : "..data)
commandArray = {}
print("---------------------------------------------")
return commandArray
J'obtiens l'ensembles des données des switch...
Du coup jsonValeur.result[1].Name ne pointe pas vers le bon device... y a-t'il une différence entre l'URL dans le navigateur et la manière de l'utiliser dans les scripts ?

Re: LUA - Status d'un device particulier

Publié : 28 sept. 2018, 10:35
par vil1driver
Salut,

De mémoire j'ai résolu ce souci en évitant le mot json dans les variables

Exemple

local bloc

Au lieu de

local blocjson

Re: LUA - Status d'un device particulier

Publié : 28 sept. 2018, 10:44
par jackslayter
j'ai changé les noms et ça ne marche toujours pas

Code : Tout sélectionner

commandArray={}

donnee = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
local config = assert(io.popen('/usr/bin/curl http://IP/json.htm?type=devices&rid=170'))
local bloc = config:read('*all')
config:close()
--print(bloc)
local Valeur = donnee:decode(bloc)
nom = Valeur.result[1].Name
data = Valeur.result[1].Data
print("---------------------------------------------")
print(tostring(nom).." : "..tostring(data))
print("---------------------------------------------")

return commandArray
bizarre ce truc

Re: LUA - Status d'un device particulier

Publié : 28 sept. 2018, 10:50
par mma13
Merci pour la réponse... mais pas mieux

Code : Tout sélectionner

print("TestDeviceValue")
recup = assert(loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
local config=assert(io.popen('/usr/bin/curl http://adrIp:port/json.htm?type=devices&rid=169'))
local bloc = config:read('*all')
config:close()
print(bloc)
local valeur = recup:decode(bloc)
nom = valeur.result[1].Name
data = valeur.result[1].Data
print("---------------------------------------------")
print(nom.." : "..data)
commandArray = {}
print("---------------------------------------------")
return commandArray

Re: LUA - Status d'un device particulier

Publié : 28 sept. 2018, 11:02
par vil1driver
Tu peux te rabattre sur la fonction que j'utilise

Voir ma signature

Code : Tout sélectionner

-- récupère les infos json du périphérique
-- usage
-- local lampe = jsonInfos('ma lampe')
-- print(lampe.Name)
-- print(lampe.Status)
-- etc..
function jsonInfos(device)
	local rid = assert(io.popen(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=devices&rid='..otherdevices_idx[device]..'"'))
	local list = rid:read('*all')
	rid:close()
	return json:decode(list).result[1]
end

Re: LUA - Status d'un device particulier

Publié : 28 sept. 2018, 11:03
par mma13
Ok, je vais regarder

Re: LUA - Status d'un device particulier

Publié : 28 sept. 2018, 12:01
par mma13
Effectivement ça fonctionne... même si ça me frustre un peu ;-)
Bon j'avance dans mes découvertes... Saurais-tu me dire :
- Est-ce que je peu modifier certaines valeurs dans la structure renvoyée pour, par exemple modifier ce que je suppose être des coefficients ?
- Comment retrouver les valeurs brutes envoyées par mon RFLink à Domoticz... toujours pour analyser mon périphériques Revolt...
EHS-5050 RFLink.JPG
EHS-5050 RFLink.JPG (12.63 Kio) Consulté 4872 fois
Par avance merci... Je vais jeter également un œil à tes différentes fonctions...