Page 1 sur 1
lancé l'execution toute les x minutes
Publié : 13 sept. 2019, 09:29
par miralant
Bonjour à tous,
j'ai écrit un petit script qui scrute mes PIR et détecteurs de portes et qui m'envoi une alerte sur mon mobile via ifttt.
Il fonctionne bien mais j'aimerai n’envoyer l'alerte que toute les minutes pour éviter les salves de notifications. Pouvez vous m'indiquer comment procéder.
merci
Code : Tout sélectionner
commandArray = {}
--- Each Time a device with a name who start by : PIR, statut change On or Off and Alarm is On : Timer 30 = On and led blanche ON quand timer off led blanche off
tc=next(devicechanged)
v=tostring(tc)
if ((v:sub(1,3) == 'PIR') or (v:sub(1,3) == 'DET')) and otherdevices['Alarme en service'] == 'On' then
print("******Intrusion******")
commandArray['Alarme détection'] = 'On'
commandArray['OpenURL'] = 'https://maker.ifttt.com/trigger/notification/with/key/blabla?value1=Intrusion%20maison'
end
return commandArray
Re: lancé l'execution toute les x minutes
Publié : 13 sept. 2019, 12:54
par denis_brasseur
https://easydomoticz.com/mon-premier-s ... dations/
N’oubliez pas que les scripts Lua peuvent se déclencher suivant 4 types d’événements :
toutes les minutes,
au changement d’état d’un des périphériques,
au changement d’état d’une variable,
au changement d’état du panel de sécurité.
ajoute éventuellement une condition pour ne faire le test que toute les x mn, à cause de la limite d'un script de type time :
Attention :
Sachez que suivant le type de script vous accéderez ou pas a telle ou telle table.
Les scripts_device utilisent 6 tables de Domoticz: devicechanged, otherdevices, otherdevices_lastupdate, otherdevices_svalues, uservariables et uservariables_lastupdate
Les scripts_variable : 6 tables : otherdevices, otherdevices_lastupdate, otherdevices_svalues, uservariables, uservariables_lastupdate et uservariablechanged
Les script_time connaissent 5 tables Domoticz : otherdevices, otherdevices_lastupdate, otherdevices_svalues, uservariables et uservariables_lastupdate
Cela signifie que dans un script_time_xxxx.lua si j’utilise la fonction devicechanged j’aurais une erreur :Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_xxxx.lua:9: attempt to index global ‘devicechanged’ (a nil value)
car cette fonction n’existe pas pour les script Time.
Cherche du côté de
Re: lancé l'execution toute les x minutes
Publié : 13 sept. 2019, 18:38
par miralant
Merci mais non, je ne veux pas un script Time, avec cette méthode je passe a côté des évènements.
Je veux qu'il se déclenche sur un devicechanged mais qu'il n'envoie la notif qu'une fois toute les minutes.
Re: lancé l'execution toute les x minutes
Publié : 14 sept. 2019, 12:46
par ogulf
Conditionner la notification que si LastSeen > 60 (en secondes).
Importer Modules.lua de Vil1driver

Re: lancé l'execution toute les x minutes
Publié : 14 sept. 2019, 13:41
par miralant
J'ai déjà module.lua car je crois qu'il est utilisé dans mon script de gestion de piscine. Je vais regarder ça

Re: lancé l'execution toute les x minutes
Publié : 14 sept. 2019, 13:57
par vil1driver
Salut,
J'aurais tendance à Préférer l'idée de Denis

Elle colle complètement à la demande
Re: lancé l'execution toute les x minutes
Publié : 14 sept. 2019, 14:11
par miralant
vil1driver a écrit : 14 sept. 2019, 13:57
Salut,
J'aurais tendance à Préférer l'idée de Denis

Elle colle complètement à la demande
J'avoue ne pas comprendre.
Si je transforme mon script en Time et que je contrôle toutes les minutes, je vais passer a côté d'événements. Mes PIR et détecteurs de portes revoient des impulsions (10s pour PIR et la durée d'ouverture pour porte).
Re: lancé l'execution toute les x minutes
Publié : 14 sept. 2019, 14:17
par vil1driver
Ton script peut rester de type device
Je parle de cela
Ce code signifie toutes les minutes
Ou toutes les x minutes en remplaçant le 1 par x
Il doit juste être précèdé par
(a placer au début du script)
Ce qui donnerait
Code : Tout sélectionner
commandArray = {}
--- Each Time a device with a name who start by : PIR, statut change On or Off and Alarm is On : Timer 30 = On and led blanche ON quand timer off led blanche off
local tc=next(devicechanged)
local v=tostring(tc)
local time = os.date("*t")
if ((v:sub(1,3) == 'PIR') or (v:sub(1,3) == 'DET')) and otherdevices['Alarme en service'] == 'On' then
print("******Intrusion******")
commandArray['Alarme détection'] = 'On'
if time.min % 1 == 0 then
commandArray['OpenURL'] = 'https://maker.ifttt.com/trigger/notification/with/key/blabla?value1=Intrusion%20maison'
end
end
return commandArray
Maintenant que je re lis le code, non ça ne va pas fonctionner..
Il vaudrait mieux avoir 2 script.
Un de type device pour passer ton device alarme à On
Code : Tout sélectionner
commandArray = {}
--- Each Time a device with a name who start by : PIR, statut change On or Off and Alarm is On : Timer 30 = On and led blanche ON quand timer off led blanche off
local tc=next(devicechanged)
local v=tostring(tc)
if ((v:sub(1,3) == 'PIR') or (v:sub(1,3) == 'DET')) and otherdevices['Alarme en service'] == 'On' then
print("******Intrusion******")
commandArray['Alarme détection'] = 'On'
end
return commandArray
Et un de type Time pour checker son état et notifier toutes les minutes.. Ou plus comme expliqué
Code : Tout sélectionner
commandArray = {}
-- send notification each 5 min when alarm is On
local time = os.date("*t")
if otherdevices['Alarme détection'] == 'On' and time.min % 5 == 0 then
commandArray['OpenURL'] = 'https://maker.ifttt.com/trigger/notification/with/key/blabla?value1=Intrusion%20maison'
end
return commandArray
Que tu peux, à souhait agrémenter de la fonction lastseen pour par exemple stopper les notifications après 1h d'alarme.
Il faudra aussi penser à repasser alarme à Off
Re: lancé l'execution toute les x minutes
Publié : 16 sept. 2019, 10:19
par miralant
top ça. Merci beaucoup.
j'ai découpé en 2 scripts. Je déclenche le time toutes les 60s et je remets à off Alarme détection toutes les 90s.