lancé l'execution toute les x minutes

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
miralant
Messages : 157
Inscription : 02 mars 2018, 14:33

lancé l'execution toute les x minutes

Message 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
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: lancé l'execution toute les x minutes

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
miralant
Messages : 157
Inscription : 02 mars 2018, 14:33

Re: lancé l'execution toute les x minutes

Message 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.
ogulf
Messages : 445
Inscription : 15 juin 2017, 14:41

Re: lancé l'execution toute les x minutes

Message par ogulf »

Conditionner la notification que si LastSeen > 60 (en secondes).
Importer Modules.lua de Vil1driver ;)
Domoticz Stable sur RPi3 + RFPlayer + ZWave+ + RFLink R48 :
- 11 x RF660P
- 1 x FGSD-002
- 10 x F007TH
- 5 x Emcoluxr EV1527 + 4 x NAS-DS01Z
- 4 x NAS-PD02Z
- 1 x Shelly 1PM
miralant
Messages : 157
Inscription : 02 mars 2018, 14:33

Re: lancé l'execution toute les x minutes

Message 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:
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: lancé l'execution toute les x minutes

Message par vil1driver »

Salut,

J'aurais tendance à Préférer l'idée de Denis ;)
Elle colle complètement à la demande
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
miralant
Messages : 157
Inscription : 02 mars 2018, 14:33

Re: lancé l'execution toute les x minutes

Message 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).
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: lancé l'execution toute les x minutes

Message 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
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
miralant
Messages : 157
Inscription : 02 mars 2018, 14:33

Re: lancé l'execution toute les x minutes

Message 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.
Répondre