Récupérer IDX en LUA
Récupérer IDX en LUA
Bonjour,
J'ai besoin de récupérer l'IDX de plusieurs uservariables en LUA mais je n'y arrive pas.
Ou est-il possible de lancer en LUA '/json.htm?type=command¶m=getuservariables' et stocker le résultat dans une variable LUA ?
Google ne m'a pas apporté de réponse que ce soir sur des sites anglais ou français...
Merci d'avance !
J'ai besoin de récupérer l'IDX de plusieurs uservariables en LUA mais je n'y arrive pas.
Ou est-il possible de lancer en LUA '/json.htm?type=command¶m=getuservariables' et stocker le résultat dans une variable LUA ?
Google ne m'a pas apporté de réponse que ce soir sur des sites anglais ou français...
Merci d'avance !
Dernière modification par ColdFace le 25 août 2017, 16:09, modifié 1 fois.
Re: Récupérer IDX en LUA
avec un truc du genre?
Code : Tout sélectionner
local config=assert(io.popen('/usr/bin/curl -m5 "http://127.0.0.1:8080/json.htm?type=command¶m=getuservariables"'))
local blocjson = config:read('*all')
config:close()
jsonValeur = json:decode(blocjson)
for index, variable in pairs(jsonValeur.result) do
print(variable.idx, variable.Name, variable.Value, variable.LastUpdate)
endRe: Récupérer IDX en LUA
J'arrive avec un peu de retard mais cela fonctionne.
Je me suis un peu cassé les dents sur une ligne manquante :
Mais merci beaucoup !
Je me suis un peu cassé les dents sur une ligne manquante :
Code : Tout sélectionner
JSON = (loadfile '/home/pi/domoticz/scripts/lua/JSON.lua')()Re: Récupérer IDX en LUA
Propose nous ton script une fois fini c'est toujours sympa de voir ce que d'autres font
Re: Récupérer IDX en LUA
C'est un peu compliqué mais je vais essayer de faire simple.
Sur domoticz, j'ai viré tous mes plannings dès que j'ai découvert le LUA. J'ai donc tout passé en LUA et vu les possibilités du langage j'ai essayé d'étoffer les scénarios.
Mes 2 gamins s'endorment avec de la musique. Ils ont chacun un poste radio CD/MP3 sur une prise 433 MHz.
Ce que je veux faire c'est couper les prises 1h après leur allumage. J'ai vu sur DzVents des switchOn.forMin // switchOff.afterMin mais cela fonctionnait à priori sur quelques minutes. J'ai testé 59, 60 et 61 min et je n'ai eu aucune réaction des prises. Le wiki DzVents ne donne aucune infos sur les bornes min/max du paramètre des fonctions for/AfterMin.
Déçu que DzVents ne fonctionne pas, je suis repassé en LUA pur mais j'avais un problème car j'utilise un script de renforcement qui me renvoie les commandes toutes les 30 mins car il n'y pas de retour d'état sur les prises 433 MHz. Je n'avais pas le courage pour modifier le script de renforcement uniquement pour ces 2 prises sachant qu'il me sert également pour d'autres appareils.
Bref, le fonctionnement de mes scripts =>
script_time => allumage à 20h10 (c'est les vacances
) et extinction après 1h
script_device (création d'une variable utilisateur à l'allumage de la prise avec une valeur au pif vu que je n'ai besoin que de l'idx et lastUpdate)
Fonctions de mon modules.lua => si le délai est passé (calculé à partir du lastUpdate de la variable utilisateur), je renvoie TRUE pour la fonction appelante qui coupe la prise et je supprime ici la variable utilisateur à l'aide de l'IDX
J'ai testé vite fait cela a l'air de fonctionner. Verdict ce soir !
Sur domoticz, j'ai viré tous mes plannings dès que j'ai découvert le LUA. J'ai donc tout passé en LUA et vu les possibilités du langage j'ai essayé d'étoffer les scénarios.
Mes 2 gamins s'endorment avec de la musique. Ils ont chacun un poste radio CD/MP3 sur une prise 433 MHz.
Ce que je veux faire c'est couper les prises 1h après leur allumage. J'ai vu sur DzVents des switchOn.forMin // switchOff.afterMin mais cela fonctionnait à priori sur quelques minutes. J'ai testé 59, 60 et 61 min et je n'ai eu aucune réaction des prises. Le wiki DzVents ne donne aucune infos sur les bornes min/max du paramètre des fonctions for/AfterMin.
Déçu que DzVents ne fonctionne pas, je suis repassé en LUA pur mais j'avais un problème car j'utilise un script de renforcement qui me renvoie les commandes toutes les 30 mins car il n'y pas de retour d'état sur les prises 433 MHz. Je n'avais pas le courage pour modifier le script de renforcement uniquement pour ces 2 prises sachant qu'il me sert également pour d'autres appareils.
Bref, le fonctionnement de mes scripts =>
script_time => allumage à 20h10 (c'est les vacances
Code : Tout sélectionner
if (time.hour == 20 and time.min == 10 and otherdevices ['Romain_Radio'] == 'Off') then
commandArray ['Romain_Radio'] = 'On'
print ("Romain_Radio = On")
end
if testRadioTimer ('Romain', 3600) then
commandArray ['Romain_Radio'] = 'Off'
end
Code : Tout sélectionner
for deviceName, deviceValue in pairs (devicechanged) do
if (deviceName == 'Romain_Radio' or deviceName == 'Raphael_Radio') then
if (deviceValue == 'On') then
nom_variable = string.sub (deviceName, 1, 2) .. '_RadioTimer'
if (uservariables [nom_variable] == nil) then
print ('Création variable => ' .. nom_variable)
commandArray ['OpenURL'] = ip .. '/json.htm?type=command¶m=saveuservariable&vname=' .. urlencode (nom_variable) .. '&vtype=0&vvalue=' .. urlencode ('1')
end
end
end
end
Code : Tout sélectionner
function testRadioTimer (nom_enfant, delai)
resultat = false
nom_variable = string.sub (nom_enfant, 1, 2) .. '_RadioTimer'
nom_device = nom_enfant .. '_Radio'
if (uservariables [nom_variable] ~= nil and otherdevices [nom_device] == 'On') then
idx, heure_debut = getIdxDate (nom_variable)
if (timedifference (heure_debut) > delai) then
resultat = true
commandArray ['OpenURL'] = ip .. '/json.htm?type=command¶m=deleteuservariable&idx=' .. urlencode (idx)
end
end
return resultat
end
function getIdxDate (var_name)
JSON = (loadfile '/home/pi/domoticz/scripts/lua/JSON.lua')()
local config = assert (io.popen ('/usr/bin/curl -m5 "http://' .. ip .. '/json.htm?type=command¶m=getuservariables"'))
local blocjson = config:read ('*all')
config:close ()
jsonValeur = JSON:decode (blocjson)
for index, variable in pairs (jsonValeur.result) do
if (variable.Name == var_name) then
return variable.idx, variable.LastUpdate
end
end
end
Re: Récupérer IDX en LUA
Bonjour, joli script mais ça ne fonctionne pas de tout simplement mettre "off delay = xxx" au niveau du switch dans l'interface ?
J'avais fait cas sur un fer à repasser qui était resté allumé toute une journée... off delay=1800
J'avais fait cas sur un fer à repasser qui était resté allumé toute une journée... off delay=1800
Re: Récupérer IDX en LUA
Merci.
Je ne connaissais pas cela dans l'interface. Je n'y avais prêté aucune attention.
C'est con car je me suis bien faire chier alors que c'est réglé en un clin d'oeil...
Je ne connaissais pas cela dans l'interface. Je n'y avais prêté aucune attention.
C'est con car je me suis bien faire chier alors que c'est réglé en un clin d'oeil...
Re: Récupérer IDX en LUA
Mais non
Ca t'as permis d'apprendre plein de choses en LUA 