ça fonctionne super bien (voir meme trop bien = domoticz ne réponds plus au bout d'un certain temps)
Code : Tout sélectionner
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- charger les fonctions d'analyse du Json (logiciel de décodage json)
function split(inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={} ; i=1
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
t[i] = str
i = i + 1
end
return t
end -- usage : valeurs = split(variable,";")
commandArray = {}-- les commandes a exécuter
local indexHPDeviceIdx = 167 --- idx dummy crée en compteur index edf HP
local indexHCDeviceIdx = 168 --- idx dummy crée en compteur index edf HC
config=assert(io.popen('/usr/bin/curl "http://127.0.0.1:8080/json.htm?type=devices&rid=161"'))--lance l'appel API pour lire les infos du widget desiré (json brut)
blocjson = config:read('*all')--Enregistre les données Json brut dans une variable
config:close()--ferme l'appel API
jsonValeur = json:decode(blocjson)--Décode le format brut du json pour qu'on puisse récupérer les données via un tableau
valeurs = split(jsonValeur.result[1].Data,";") -- récupérer la valeur qui nous intéresse avec la "fonction split"
-- print(valeurs[1]) --message dans log, valeur choisi selon l'emplacement des ";" (1er valeur = HP)
-- print(valeurs[5]) --message dans log, valeur choisi selon l'emplacement des ";" (5eme valeur = HC)
commandArray[indexHPDeviceIdx] = { ['UpdateDevice'] = indexHPDeviceIdx..'|0|'..valeurs[1] }-- envoi de la valeur dans le compteur HP
commandArray[indexHCDeviceIdx] = { ['UpdateDevice'] = indexHCDeviceIdx..'|0|'..valeurs[5] }-- envoi de la valeur dans le compteur HC
return commandArray--fin de la commande a exécuteredit 16h47
version "final" avec le déclanchement toutes les heures
Code : Tout sélectionner
local time = os.date("*t") -- connaitre l'heure pour permettre l'exécution a heure défini
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- charger les fonctions d'analyse du Json (logiciel de décodage json)
function split(inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={} ; i=1
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
t[i] = str
i = i + 1
end
return t
end -- usage : valeurs = split(variable,";")
commandArray = {}-- les commandes a exécuter
if (time.min % 60)==0 then -- pour executer le script toutes les 60 minutes
local indexHPDeviceIdx = 167 -- idx dummy crée en compteur index edf HP
local indexHCDeviceIdx = 168 -- idx dummy crée en compteur index edf HC
config=assert(io.popen('/usr/bin/curl "http://127.0.0.1:8080/json.htm?type=devices&rid=161"'))-- lance l'appel API pour lire les infos du widget desiré (json brut)
blocjson = config:read('*all')-- Enregistre les données Json brut dans une variable
config:close()-- ferme l'appel API
jsonValeur = json:decode(blocjson)-- Décode le format brut du json pour qu'on puisse récupérer les données via un tableau
valeurs = split(jsonValeur.result[1].Data,";") -- récupérer la valeur qui nous intéresse avec la "fonction split"
-- print(valeurs[1]) -- message dans log, valeur choisi selon l'emplacement des ";" (1er valeur = HP)
-- print(valeurs[5]) -- message dans log, valeur choisi selon l'emplacement des ";" (5eme valeur = HC)
commandArray[indexHPDeviceIdx] = { ['UpdateDevice'] = indexHPDeviceIdx..'|0|'..valeurs[1] } -- envoi de la valeur dans le compteur HP
commandArray[indexHCDeviceIdx] = { ['UpdateDevice'] = indexHCDeviceIdx..'|0|'..valeurs[5] } -- envoi de la valeur dans le compteur HC
end -- fin de l'exécution toute les 60 minutes
return commandArray -- fin de la commande a exécuterEn pratique ça fonctionne (mais ça doit pas être très beau/propre comme script)
Un grand MERCI Keros : je n'y serais jamais arrivé sans toi