Comme il n'y a pas de retour d'état, Domoticz "ne s'en rend pas compte" et ne ré-essaie pas d'envoyer l'ordre.
Pour éviter ça, un petit script de rappel ci-dessous va considérer l'état dans lequel Domoticz place les interrupteurs, et envoyer les ordres correspondants à l'actionneur.
C'est particulièrement utile pour les actionneurs en relation avec des consommations (eau, électricité ou autre).
Quand l'actionneur laisse s'échapper inutilement la ressource, c'est la facture qui s’alourdit.
Ça ne surcharge pas les logs; si l'actionneur a déjà bougé, on ne trouve pas trace du nouvel ordre.
Par contre, si l'actionneur n'était pas dans l'état attendu, alors le script le fait changer d'état en conformité avec l'état dans lequel il est dans Domoticz.
Exemple hier soir, ma guirlande électrique extérieure aurait dû s'éteindre grâce au timer, mais en fait c'est le script un peu plus tard qui a rappelé l'ordre et éteint la guirlande :
Le script est simple, écrit pour DzVents.
A placer dans /home/pi/domoticz/scripts/dzVents/scripts
Vous devrez spécifier les noms des interrupteurs que vous voulez contrôler avec ce script (tableau actuators) et adapter la fréquence d'appel du script à ce que vous souhaitez faire (timer).
Le script :
Code : Tout sélectionner
--[[
Rappel de l'ordre de mise en route aux actionneurs
(DI-O, pas de retour d'état)
2020-11-26 : Initial version
Author : chrominator@free.fr
Principe :
--]]
local actuators = { "VMC-OnOff",
"VMC-GV",
"Circulateur",
"Chargeur tablette",
"Guirlande"
}
return
{
active = true,
on =
{
timer = {
"every 15 minutes",
},
},
logging = {
-- level = domoticz.LOG_INFO, -- Seulement un niveau peut être actif; commenter les autres
-- level = domoticz.LOG_ERROR,
level = domoticz.LOG_DEBUG,
-- level = domoticz.LOG_MODULE_EXEC_INFO,
marker = string.match(debug.getinfo(1, "S").short_src, "([^\\/]-)$")
},
execute = function(dz, switch)
local log_info = {}
for i, j in pairs(actuators) do
local actuator = dz.devices(j)
if actuator.state == 'On' then
actuator.switchOn()
else
actuator.switchOff()
end
log_info[i] = actuator.name .. " : " .. actuator.state
-- dz.log("Actuator " .. actuator.name .. " has been refreshed on state " .. actuator.state .. ".", dz.LOG_DEBUG)
end
dz.log("The following actuators have been refreshed:", dz.LOG_DEBUG)
for i, j in pairs(log_info) do
dz.log(j, dz.LOG_DEBUG)
end
end
}