Problème d'activation switch virtuel
Publié : 14 mars 2019, 06:41
Bonjour, pour gérer les températures de chauffage selon les périodes, j'ai créé un switch virtuel "Programmateur chauffage". Quand il est actif, la consigne de température est celle du thermostat confort et quand il est inactif c'est le thermostat eco.
Sur les périodes identifiées comme "travaillées", le switch est bien activé que sur les plages horaires souhaitées. Par contre, lorsqu'il s'agit de période "non travaillées" (ex : week-end, jour férié, vacances scolaires ...), le switch change d'état à chaque minute parce que deux conditions se contredisent (à priori).
Le script complet est celui-là :
et sur les logs, je vois que c'est les conditions suivantes qui activent et désactivent le switch :
j'en déduis que ça vient de la ligne qui demande la mise à l'arrêt du switch mais je ne comprends pas quelle est la condition validée qui conduit à cette mise à l'arrêt (le switch "vacances scolaires" n'est pas activé).
Merci pour votre aide parce que ça fait plusieurs semaines que j'ai ce problème et j'ai beau essayer de changer le contrôle de conditions, je n'y arrive pas.
Sur les périodes identifiées comme "travaillées", le switch est bien activé que sur les plages horaires souhaitées. Par contre, lorsqu'il s'agit de période "non travaillées" (ex : week-end, jour férié, vacances scolaires ...), le switch change d'état à chaque minute parce que deux conditions se contredisent (à priori).
Le script complet est celui-là :
Code : Tout sélectionner
- script pour activer le device "Programmateur chauffage"
local programmateur_chauffage = 'Programmateur chauffage'
local vacances_scolaires = 'Aujourdhui vacances scolaires'
-- retourne le jour actuel
days = {"dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"}
jour = days[(os.date("%w")+1)]
-- retourne l'heure actuelle ex: "12:45"
heure = string.sub(os.date("%X"), 1, 5)
commandArray = {}
-- si le chauffage est en marche entre minuit et 6h du matin, alors
if otherdevices[programmateur_chauffage]=='On' and (heure >= '00:00' and heure < '06:00') then
-- on arrête le chauffage
commandArray[programmateur_chauffage] = 'Off'
print("il est l heure de dormir, je mets le chauffage en mode eco")
end
-- si le chauffage est arrêté entre 6h et 7h30 du matin, alors
if otherdevices[programmateur_chauffage]=='Off' and (heure >= '06:00' and heure < '07:30') then
-- on met le chauffage en marche
commandArray[programmateur_chauffage] = 'On'
print("il est 6h du matin, je chauffe pour que vous soyez bien")
end
-- si le chauffage est arrêté entre 16h30 et minuit, alors
if otherdevices[programmateur_chauffage]=='Off' and (heure >= '16:30' and heure <= '23:59') then
-- on met le chauffage en marche
commandArray[programmateur_chauffage] = 'On'
end
-- si le chauffage est arrêté entre 7h30 et 16h30 et qu'il s'agit d'un jour chômé, alors
if (otherdevices[programmateur_chauffage]=='Off') and (heure >= '07:30' and heure < '16:30') and (otherdevices[vacances_scolaires]=='On' or uservariables['jf']=='true' or jour=='mercredi' or jour=='vendredi' or jour=='samedi' or jour=='dimanche') then
-- on met le chauffage en marche
commandArray[programmateur_chauffage] = 'On'
print("vous etes a la maison, je maintien en temperature confort")
end
-- si le chauffage est en fonctionnement entre 7h30 et 16h30 et qu'il s'agit d'un jour travaillé, alors
if (otherdevices[programmateur_chauffage]=='On') and (heure >= '07:30' and heure < '16:30') and (otherdevices[vacances_scolaires]=='Off' or uservariables['jf']=='false' or jour=='mardi' or jour=='jeudi') then
commandArray[programmateur_chauffage] = 'Off'
print("vous travaillez, je mets le chauffage en mode eco")
end
return commandArray
Code : Tout sélectionner
-- si le chauffage est arrêté entre 7h30 et 16h30 et qu'il s'agit d'un jour chômé, alors
if (otherdevices[programmateur_chauffage]=='Off') and (heure >= '07:30' and heure < '16:30') and (otherdevices[vacances_scolaires]=='On' or uservariables['jf']=='true' or jour=='mercredi' or jour=='vendredi' or jour=='samedi' or jour=='dimanche') then
-- on met le chauffage en marche
commandArray[programmateur_chauffage] = 'On'
print("vous etes a la maison, je maintien en temperature confort")
end
-- si le chauffage est en fonctionnement entre 7h30 et 16h30 et qu'il s'agit d'un jour travaillé, alors
if (otherdevices[programmateur_chauffage]=='On') and (heure >= '07:30' and heure < '16:30') and (otherdevices[vacances_scolaires]=='Off' or uservariables['jf']=='false' or jour=='mardi' or jour=='jeudi') then
commandArray[programmateur_chauffage] = 'Off'
print("vous travaillez, je mets le chauffage en mode eco")
endMerci pour votre aide parce que ça fait plusieurs semaines que j'ai ce problème et j'ai beau essayer de changer le contrôle de conditions, je n'y arrive pas.