Page 1 sur 2
dzvents... je suis planté
Publié : 07 févr. 2022, 10:51
par PatriceN
Bonjour,
J'essaie de scripter mais ce n'est pas terrible...
Ce que je voudrais faire : Si la fenêtre est ouverte, j'arrête le chauffage (ça j'y arrive + ou moins), mais si la fenêtre est déjà ouverte et que le chauffage démarre car programmé, je voudrais l'éteindre en déclenchant la fonction toutes les 5 min (si la fenêtre est déjà ouverte, plus de changement d'état de la fenêtre donc il faut faire autrement), et là patatras, je n'arrive pas à faire...
Si je décommente dz.log..., j'obtiens l'erreur suivante :
Code : Tout sélectionner
"Error: dzVents: Error: (3.1.8) ...zVents/generated_scripts/Chambre ouverte stop aircon.lua:16: attempt to concatenate a nil value (field 'trigger')"
Si je garde le commentaire, plus d'erreur, mais ça ne fonctionne pas.
Quelqu'un peut m'aider?
Merci!
Code : Tout sélectionner
return
{
on =
{
timer = {
'every 5 minutes',
},
devices = {
'Fenetres chambre',
},
},
execute = function(dz, item)
Window_open = dz.devices('Fenetres chambre')
AirconChambre = dz.devices('MELCloud - Chambre - Mode')
--dz.log('The rule that triggered the event was: ' .. item.trigger )
if (Window_open == 1)
then
AirconChambre.switchSelector('Off').checkFirst()
end
end
}
Re: dzvents... je suis planté
Publié : 07 févr. 2022, 11:22
par Neutrino
Tu es à jour niveau version de Domoticz ?
Re: dzvents... je suis planté
Publié : 07 févr. 2022, 12:02
par PatriceN
Bonjour,
Oui, 2022.1
Re: dzvents... je suis planté
Publié : 07 févr. 2022, 12:41
par Keros
Si je réécrit ton code, la condition est :
if (dz.devices('Fenetres chambre') == 1), or dz.devices('Fenetres chambre') correspond au paramètre : il te manque des attributs derrière.
Si ton widget est de type on/off, il faudrait vérifier dz.devices('Fenetres chambre').state == 'On'
Plus d'infos.
Re: dzvents... je suis planté
Publié : 07 févr. 2022, 15:26
par boum
Rigolo, c'est un cas tordu du dzVents que je n'avais jamais croisé.
La doc le précise pourtant (
item) :
trigger: string the timer rule, the security state, the customEvent or the http response callback string that actually triggered your script.
Et oui, dans le cas d'un dispositif,
trigger n'existe pas! Il faut "ruser" :
Code : Tout sélectionner
local trigger = item.isDevice and item.name or item.trigger
dz.log('The rule that triggered the event was: ' .. trigger )
Ceci dit, l'usage de
trigger est en effet plus répandu pour différencier entre plusieurs réponses HTTP ou timers une fois que le type de déclencheur a été déterminé (
item.isTimer…). Pour les dispositifs, on utilise alors le nom ou l'ID.
Re: dzvents... je suis planté
Publié : 07 févr. 2022, 16:26
par PatriceN
Keros a écrit : 07 févr. 2022, 12:41
Si je réécrit ton code, la condition est :
if (dz.devices('Fenetres chambre') == 1), or dz.devices('Fenetres chambre') correspond au paramètre : il te manque des attributs derrière.
Si ton widget est de type on/off, il faudrait vérifier dz.devices('Fenetres chambre').state == 'On'
Plus d'infos.
Merci, ça marche!

Re: dzvents... je suis planté
Publié : 07 févr. 2022, 20:29
par Keros
@PatriceN, top
@boum, pour moi, c'est le item dans la fonction function(dz, item) qui est déjà le trigger donc item.trigger ne veut rien dire.
J'utilise item.name pour connaitre le nom du trigger. Je ne vois pas ce qui trigger apporte de plus où dans quel cas il est utile.
Re: dzvents... je suis planté
Publié : 12 févr. 2022, 13:19
par PatriceN
Bon, réfléchir à une automatisation c'est bien, mais ça donne envie de faire mieux!
Actuellement, et grâce aux bons conseils de @Keros, ça marche!
A présent, ce qui serait chouette :
Déclencher sur ouverture de fenêtre, ça je sais faire
Déclencher sur changement d'état de "AirconChambre.switchSelector" au lieu de toutes les 5 min (dans le cas où la PAC démarre d'après sa programmation et que la fenêtre est ouverte), ça je ne sais pas faire
Ensuite, enregistrer l'état dans lequel est "AirconChambre.switchselector" avant de faire
pour pouvoir restaurer l'état initial une fois que la fenêtre est refermée.
C'est une belle idée, mais j'ai besoin d'aide, je patauge dans le code, ce n'est pas mon élément...
Re: dzvents... je suis planté
Publié : 12 févr. 2022, 13:29
par Keros
Regarde dans ma signature, il y a des liens vers ma présentation où j'ai écrit des petits guides. Il y en a un concernant le DzVents et j'y parle des déclencheurs.
Et pour "sauvegarder" une valeur, le DzVents a une fonction native : les
persistent data.
Re: dzvents... je suis planté
Publié : 12 févr. 2022, 21:47
par PatriceN
Super, merci, les tutos sont au top, j'ai bien avancé mais je ne dois pas réussir à initialiser correctement la variable persistante, je me fais jeter...
J'ai cette erreur, mais je n'arrive pas à m'en sortir...
Je n'arrive pas à visualiser ma variable " dz.log(domoticz.data.Clim_avant_stop)" et apparemment il y a un "nil" qui ne lui plait pas beaucoup.
2022-02-12 21:42:00.507 Status: dzVents: Info: Chambre ouverte: ------ Start internal script: Script #1 chambre WIP:, trigger: "every 1 minutes"
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: The rule that triggered the event was: every 1 minutes
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: Valeur Window_open : Off
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: position clim chambre " Warm "
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: Clim avant stop
2022-02-12 21:42:00.508 Status: dzVents: Info: Chambre ouverte: ------ Finished Script #1 chambre WIP
2022-02-12 21:42:00.508 Error: dzVents: Error: (3.1.8) Chambre ouverte: An error occurred when calling event handler Script #1 chambre WIP
2022-02-12 21:42:00.508 Error: dzVents: Error: (3.1.8) Chambre ouverte: ...ipts/dzVents/generated_scripts/Script #1 chambre WIP.lua:31: attempt to index a nil value (global 'domoticz')
Code : Tout sélectionner
return
{
on =
{
timer = {
'every 1 minutes',
},
devices = {
'Fenetres chambre',
--'MELCloud - Chambre - Mode',
},
},
data =
{
Clim_avant_stop = { initial = 'Off'}
},
logging =
{
level = domoticz.LOG_DEBUG, -- change to domoticz.LOG_ERROR when script is tested and OK
marker = 'Chambre ouverte',
},
execute = function(dz, item)
local trigger = item.isDevice and item.name or item.trigger
Window_open = dz.devices('Fenetres chambre').state
AirconChambre = dz.devices('MELCloud - Chambre - Mode')
dz.log('The rule that triggered the event was: ' .. trigger )
dz.log('Valeur Window_open : ' .. Window_open )
dz.log('position clim chambre " '.. AirconChambre.levelName .. ' "')
dz.log('Clim avant stop')
dz.log(domoticz.data.Clim_avant_stop)
--if (AirconChambre.levelName == 'Off')
--then
-- dz.log('Déjà arrêté')
--else
domoticz.data.Clim_avant_stop = AirconChambre.levelName
--end
if (Window_open == 'On')
then
AirconChambre.switchSelector('Off').checkFirst().aftersec(5)
--else
-- dz.log('Fermé, on redémarre')
-- AirconChambre.switchSelector('Warm').checkFirst()
end
end
}