Annulation des évenements
Annulation des évenements
Bonjour,
Je commence à me battre sérieusement avec l'exécution des évènements Domoticz.
J'ai un script de déclenchement d'alarme qui crée des évènements avec tempo e.g. "Ouvre les volets après 20 sec.".
J'aimerais annuler cet évènement en cas de désactivation de l'alarme (dans les 20 sec imparties). Comment faire ?
PS : je ne peux pas arrêter mes sirènes ("Sirène = 'Off' ne marche pas) donc il est important que je puisse annuler l'évènement.
Nicolas
Je commence à me battre sérieusement avec l'exécution des évènements Domoticz.
J'ai un script de déclenchement d'alarme qui crée des évènements avec tempo e.g. "Ouvre les volets après 20 sec.".
J'aimerais annuler cet évènement en cas de désactivation de l'alarme (dans les 20 sec imparties). Comment faire ?
PS : je ne peux pas arrêter mes sirènes ("Sirène = 'Off' ne marche pas) donc il est important que je puisse annuler l'évènement.
Nicolas
Re: Annulation des évenements
je dirais (pas testé) en lui renvoyant l'état dans lequel il est déjà.
Ex :
Volets à Open dans 20s.
20s plus tard, les volets passe à open.
Volets à Open dans 20s.
~10 s plus tard
Envoie de l'ordre Volets à close (ou off suivant son état) ce qui a pour effet d'écraser l'ancien ordre.
~10s plus tard , les volets ne bougent pas.
Ex :
Volets à Open dans 20s.
20s plus tard, les volets passe à open.
Volets à Open dans 20s.
~10 s plus tard
Envoie de l'ordre Volets à close (ou off suivant son état) ce qui a pour effet d'écraser l'ancien ordre.
~10s plus tard , les volets ne bougent pas.
Re: Annulation des évenements
Gérer du time avec domoticz c'est pas la gloire. Par contre en s'amusant un dummy virtuel et une variable utilisateur ca devrait pouvoir le faire..
J'aurais tendance à faire comme ca :
Tu crées un dummy virtuel virtual_alarm et une variable utilisateur annul_alarm de type entier que tu positionnes a 0
ici on détecte l'intrusion mais avant de tout déclencher on passe le virtuel sur on afin de te laisser le temps de la désactiver :
- Dans la 1ere condition, le changement d'état de ton alarme (en passant d'arm away a disarm) déclenchera le script et si tu le fais pendant les 20s (le virtual sera tjs sur on), tu désactiveras le virtual et la condition étant respectée tu sortira de la condition. Fin de l'histoire.
- Si ce n'est pas le cas, et que tu ne désarme pas ton alarme, alors tu déclancheras quand meme le script quand ton virtual repassera a off et à ce moment tu rentreras dans la 2eme condition et feras tout ce qu'il faut (sirene, sms etc..)
- La variable utilisateur sert uniquement a vérifier que tu n'est pas en train d'activer ton alarme, en effet lorsque tu armeras ton alarme, ces 2 conditions seront également réunies et tu risque de déclencher ton alarme lorsque tu l'armeras. Cette condition te permettra d'éviter ca.
Voilà j'ai peut être oublier quelque chose, mais dans l'idée c'est ca.
Reste plus qu'a savoir si le " set xxx = xxx for xx seconds " fonctionne, la dernière fois que j'ai essayé ca n'a pas fonctionné.
J'aurais tendance à faire comme ca :
Tu crées un dummy virtuel virtual_alarm et une variable utilisateur annul_alarm de type entier que tu positionnes a 0
Code : Tout sélectionner
if security_status = alarm away and detecteur = on do
set virtual_alarm = on for 20 seconds
set annul_alarm = 1
end ifCode : Tout sélectionner
if security_status = disarm and virtual_alarm = on do
set virtual_alarm = off
set annul_alarm = 0
else if security_status = alarm away and virtual_alarm = off do
if annul_alarm = 1 do
ton script d'ouverture de volets
set annul_alarm = 0
end if
end if- Si ce n'est pas le cas, et que tu ne désarme pas ton alarme, alors tu déclancheras quand meme le script quand ton virtual repassera a off et à ce moment tu rentreras dans la 2eme condition et feras tout ce qu'il faut (sirene, sms etc..)
- La variable utilisateur sert uniquement a vérifier que tu n'est pas en train d'activer ton alarme, en effet lorsque tu armeras ton alarme, ces 2 conditions seront également réunies et tu risque de déclencher ton alarme lorsque tu l'armeras. Cette condition te permettra d'éviter ca.
Voilà j'ai peut être oublier quelque chose, mais dans l'idée c'est ca.
Reste plus qu'a savoir si le " set xxx = xxx for xx seconds " fonctionne, la dernière fois que j'ai essayé ca n'a pas fonctionné.
Re: Annulation des évenements
Merci pour ces idées.
Pour être plus précis, j'ai, dans mon script d'alarme :
Si j'envoies, via un autre script,, la commande s'exécute quand même '(i.e. n'est pas écrasée).
Je pense que l'approche la plus fiable est l'utilisation d'une variable (ou, à défaut, interrupteur) comme l'a décrit agadoc.
Nicolas
Pour être plus précis, j'ai, dans mon script d'alarme :
Code : Tout sélectionner
commandArray[1]={[Volets]='On AFTER 20'}
commandArray[2]={[Volets]='Off AFTER 1000'}Code : Tout sélectionner
commandArray['Volets']='On'Code : Tout sélectionner
'Off AFTER 1000' Je pense que l'approche la plus fiable est l'utilisation d'une variable (ou, à défaut, interrupteur) comme l'a décrit agadoc.
Nicolas
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Annulation des évenements
ça devrait pourtant fonctionner
et sans le AFTER 20 ? (juste On)
et sans le AFTER 20 ? (juste On)
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Annulation des évenements
Effectivement ça fonctionne sur mon script de test. J'avais fait un malencontreux copier-coller sur une condition.vil1driver a écrit :ça devrait pourtant fonctionner![]()
Reste plus qu'à trouver pourquoi cela ne marche pas sur mon script d'alarme mais je crois savoir pourquoi.
Merci bcp.
Nicolas