Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Wolfen38 a écrit : ↑02 nov. 2019, 08:30
Je pensais que les scripts de type device ne s’exécutaient que lorsqu'il y avait un changement d'état d'un device, donc si pas de changement, pas d’exécution.
Oui, UN device... n'importe lequel en fait, d’où l'importance de tester que c'est bien celui sur lequel on veut agir qui a changé d'état.
Sinon on se retrouve à déclencher des actions, au mieux inutiles, dans son script chauffage alors qu'un oiseau est passé devant un capteur de mouvement sur sa terrasse!
Wolfen38 a écrit : ↑02 nov. 2019, 08:30
OK, merci Denis.
Je pensais que les scripts de type device ne s’exécutaient que lorsqu'il y avait un changement d'état d'un device, donc si pas de changement, pas d’exécution.
Effectivement, mais dans le cas où la condition est basée sur un changement d'état
-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
-- Récupère l'heure actuelle.
local heure = os.date('%H:%M')
local debug = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local interon1 = otherdevices['Inter chauffage'] == 'On'
local interon2 = otherdevices['Presence-syb'] == 'On'
local alarmeon = otherdevices['Virtuel alarme'] == 'On'
commandArray = {}
if interon1 or interon2 then
if alarmeoff then
commandArray['Thermostat Réglage']='20'
else
if alarmeon and heure >= '19:00' and heure <= '06:30' then
commandArray['Thermostat Réglage']='20'
else
if alarmeon and heure >= '06:31' and heure <= '18:59' then
commandArray['Thermostat Réglage']='18'
else
if interoff1 and interoff2 then
commandArray['Thermostat Réglage']='18'
end
end
end
end
end
return commandArray
Je ne sais pas si ca va fonctionner car c'est un programme qui me sert pour la semaine, mais le bon coté, c'est que pour le moment j'ai plus rien dans mes logs.
Tu n'as pas compris.. Tu fais probablement l'amalgame avec blocky.
Si ton script n'a pas vocation à réagir instantanément à la mise à jour d'un device. (exemple détection de mvt > lampe)
En gros un script qui ne comporte pas l'instruction devicechanged,
Il n'a pas à être de type DEVICE.
Et ne devrait donc pas être nommé
script_device_xxx.lua
Sinon il va constamment être exécuté, et peu même générer une boucle et totalement bloquer ton système.
Ton script doit être de type TIME et donc ne vérifier le statut des capteurs qu'une fois par minute (voir 10, 15min ou plus..)
Il est crucial de comprendre cela, les scripts lua ne devraient même pas être abordés avant d'avoir compris la façon dont domoticz va les exécuter.
De ce qui est de limiter les actions inutiles, il est souvent vérifié dans les scripts le status du device à modifier, modification qui n'a alors lieu que si elle est utile.
Ps: ton script actuel comporte de nouveaux plusieurs erreurs, certaines conditions sont impossibles à remplir. X ne peut être supérieur à 19 et en même temps inférieur à 6..
MAJ = VIDER LE CACHE(<-Clicable) /!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus modules.lua
Bah justement, je veux que mon script agisse instantanément au changement d'un de mes deux inter.
Si "inter chauffage" ou "presence-syb" passe a ON ou a OFF, alors en fonctionne de l'heure et de l'alarme, je veux injecter la valeur de température instantanément dans mon thermostat.
-- chargement des modules
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
local debug = true
commandArray = {}
if devicechanged['Inter chauffage'] == 'on' then
commandArray['Thermostat Réglage']='20'
print("Thermostat sur 20°")
else
if (devicechanged['Inter chauffage'] == 'off' and otherdevices['Presence-syb'] == 'Off') then
commandArray['Thermostat Réglage']='18'
print("Thermostat sur 18°")
end
end
return commandArray
Quand je clique mon inter chauffage pour le passer de on à off, rien ne se passe, aucun script executer.
Le srcipt se lance, mais mon thermostat ne se met pas à jour.... C'est un thermostat netatmo, je peux modifier manuellement la valeur dans le widget de dz, mais avec mon script, la valeur n'est pas intégrer dans le thermostat....