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

Code : Tout sélectionner

if(time.min) % 1 == 0 then

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 :geek:

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

Code : Tout sélectionner

if(time.min) % 1 == 0 then
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

Code : Tout sélectionner

time = os.date("*t")
(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.