Je crois avoir vu dans le forum cette demande il y a quelques temps. Ayant eu ce besoin j'ai réalisé ce script en Dzvents.
Je vous le partage, à adapter selon les besoins. Les informations sont en fin de ligne.
Les déclencheurs peuvent être différents ( interrupteur ou autres) moi j'avais besoin de variables car utilisées dans d'autres scripts.
Si besoin sur Planning spécifique, possibilité de rajouter une des valeurs et faire des conditions dessus.
Si sélection de plusieurs devices essayer de choisir un début de nom identique pour les devices sinon la liste des "callback" risque d’être longue.
Code : Tout sélectionner
-- Script pour Activation/Désactivation planning des radiateurs ---
local scriptName = 'script_device_Enable-Disable_Planning'
local scriptVersion = '1.00'
local Rad = {}
Rad[1] = "Radiateur_Cuisine"
Rad[2] = "Radiateur_Entree"
Rad[3] = "Radiateur_Ch1"
Rad[4] = "Radiateur_Ch2"
Rad[5] = "Radiateur_Ch3"
Rad[6] = "Radiateur_SdB"
return {
on =
{
variables = { 'ChauffageOnOff', 'Chauffage_Ch3_OnOff', 'Chauffage_SdB_OnOff', 'Chauffage_SdB_1H' }, -- Liste des variables qui déclenchent le script
httpResponses = { 'Radiateur_*'}, -- Liste des callback (* permet de sélectionner tous les callback générés pour chaque radiateur.).
},
logging =
{
-- La section de journalisation facultative vous permet de remplacer le paramètre de journalisation globale de dzVents
-- comme défini dans Configuration> Paramètres> Autre> Système d'événements> Niveau de journalisation dzVents.
-- Cela peut être pratique lorsque vous voulez que ce script ait une journalisation de débogage étendue pendant que le reste de votre script s'exécute en mode silencieux.
level = domoticz.LOG_ERROR, -- domoticz.LOG_INFO, domoticz.LOG_MODULE_EXEC_INFO, domoticz.LOG_DEBUG or domoticz.LOG_ERROR, domoticz.LOG_FORCE,
marker = scriptName..' v'..scriptVersion
},
execute = function(domoticz, item)
if item.isVariable then
varname = item.trigger -- Nom de la variable qui declenche le script.
-- msg = 'Variable de déclenchement: ' .. varname
-- print(msg)
if item.value == 1 then NewPlanning = 'enable' else NewPlanning = 'disable' end -- valeur de la variable qui declenche le script (0 ou 1).
if varname == "ChauffageOnOff" then
for i = 1,6 do -- Boucle pour traiter tous les radiateurs.
RadIdx = domoticz.devices(Rad[i]).idx -- récupération de l'IDX pour commande json
--msg = 'Radiateur: '..Rad[i]..' idx: '..tostring(RadIdx)
--print(msg)
coderetour = Rad[i]..NewPlanning -- creation d'un callback unique pour le HTTPResponse avec information si enable ou disable des plannings.
--msg = coderetour
--print(msg)
domoticz.openURL({
url = 'http://127.0.0.1/json.htm?idx='..RadIdx..'&type=timers', -- Récuperation de tous les plannings du device sélectionné.
callback = coderetour, -- Passage du callback unique.
})
end
end
if varname == "Chauffage_SdB_1H" then
i = 6 -- Pour traitement d'un seul device.
RadIdx = domoticz.devices(Rad[i]).idx
--msg = 'Radiateur: '..Rad[i]..' idx: '..tostring(RadIdx)
--print(msg)
coderetour = Rad[i]..NewPlanning
--msg = coderetour
--print(msg)
domoticz.openURL({
url = 'http://127.0.0.1/json.htm?idx='..RadIdx..'&type=timers',
callback = coderetour, --
})
end
if varname == "Chauffage_SdB_OnOff" then
i = 6
RadIdx = domoticz.devices(Rad[i]).idx
--msg = 'Radiateur: '..Rad[i]..' idx: '..tostring(RadIdx)
--print(msg)
coderetour = Rad[i]..NewPlanning
--msg = coderetour
--print(msg)
domoticz.openURL({
url = 'http://127.0.0.1/json.htm?idx='..RadIdx..'&type=timers',
callback = coderetour,
})
end
if varname == "Chauffage_Ch3_OnOff" then
i = 5
RadIdx = domoticz.devices(Rad[i]).idx
--msg = 'Radiateur: '..Rad[i]..' idx: '..tostring(RadIdx)
--print(msg)
coderetour = Rad[i]..NewPlanning
--msg = coderetour
--print(msg)
domoticz.openURL({
url = 'http://127.0.0.1/json.htm?idx='..RadIdx..'&type=timers',
callback = coderetour,
})
end
end
if item.isHTTPResponse and item.isJSON then
varname = item.trigger -- Nom du callback qui declenche le script.
--msg = 'Callback de déclenchement: ' .. varname
--print(msg)
if string.find(varname , "enable") ~= nil then -- Analyse si lancemenent avec mise à ON des plannings.
urljson = 'http://127.0.0.1/json.htm?type=command¶m=enabletimer&idx=' -- Génération de l'url JSON pour l'activation de tous les plannings d'un device (ici un radiateur).
end
if string.find(varname , "disable") ~= nil then -- Analyse si lancemenent avec mise à OFF des plannings.
urljson = 'http://127.0.0.1/json.htm?type=command¶m=disabletimer&idx=' --Génération de l'url JSON pour la désactivation de tous les plannings d'un device (ici un radiateur).
end
local json = domoticz.utils.fromJSON(item.data) -- Récupération du tableau JSON.
-- domoticz.utils.dumpTable(item.json) -- Pour debug.
for j = 1,10 do -- Nombre maximum d'itération pour les plannings (si plus de 10 augmenter cette valeur).
if json.result[j] ~= nil then -- détection de ligne vide
StateSched = json.result[j].Active -- Pour information pour debug.
IdxSched = json.result[j].idx -- Recupération de l'idx du Timer
--print(StateSched) -- Pour debug
--print(IdxSched) -- Pour debug
domoticz.openURL({url = urljson..IdxSched})
end
end
end
end
}