Ça y est, j'ai de nouveau l'électricité
Bon j'ai suivi ton idée, voilà ce que ça donne :
J'ai créé une fonction à charger dans les scripts pour lesquels on veut connaître l'état d'un groupe ou d'une scene.
Mon script s'appelle comme la fonction, et doit être enregistré dans /home/pi/domoticz/scripts/lua.
Attention, la fonction utilise le décodeur json de Jeffrey Friedl disponible sur
http://regex.info/blog/lua/json.
Ce script JSON.lua doit lui aussi être enregistré dans /home/pi/domoticz/scripts/lua.
Code : Tout sélectionner
--[[ Script décrivant la fonction permettant
de connaitre l'état d'un groupe ou d'une scene.
~/domoticz/scripts/lua/getscenestatus.lua
-- Autors ----------------------------------------------------------------
V1.0 - Chrominator
-- Require --------------------------------------------------------------
input : index de la scene ou du groupe
output : etat de la scene, nom de la scene
-- Versions -------------------------------------------------------------
2017-01-15 : Initial version
]]--
-- chargement de l'encodeur/décodeur json
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
-- Remplacer ip_port_domoticz par l'ip et le port de votre Domoticz sous la forme 127.0.0.1:8080 par exemple
local ipportdomoticz = 'ip_port_domoticz'
function getscenestatus(Scene_idx)
local Events = assert(io.popen('curl "http://'..ipportdomoticz..'/json.htm?type=scenes"'))
local Scene = Events:read('*all')
Events:close()
local jsonScene = json:decode(Scene)
if jsonScene == nil then
print("Erreur dans l'url json")
end
Groups = jsonScene['result']
for response,results in pairs(Groups) do
if results['idx'] == Scene_idx then
status = results['Status']
name = results['Name']
end
end
return status, name
end
Ensuite pour utiliser la fonction dans les scripts, c'est assez simple.
On l'appelle avec l'index de la scene ou du groupe, et elle revoie l'état et le nom de la scene/du groupe.
Exemple :
Code : Tout sélectionner
-- chargement des modules
package.path = package.path..";/home/pi/domoticz/scripts/lua/?.lua"
require "getscenestatus"
commandArray = {}
local idx = '1'
local status, scene = getscenestatus(idx)
if status == 'Off' then
print ( 'le groupe ou scene '..scene..' est Off')
else
print ( 'le groupe ou scene '..scene..' est On')
end
return commandArray
Si on se moque de savoir comment s'appelle la scene qui a l'index n°idx, on peut simplement utiliser la fonction comme ça :
Code : Tout sélectionner
if getscenestatus(idx) == 'Off' then
print ( 'le groupe ou scene est Off')
else
print ( 'le groupe ou scene est On')
end
Dans une version ultérieure, une amélioration pourrait être de passer le nom de la scene ou du groupe comme paramètre d'entrée.
Pas trop dur à faire je pense.