lancé l'execution toute les x minutes

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Répondre
miralant
Messages : 108
Enregistré le : 02 mars 2018, 14:33

lancé l'execution toute les x minutes

Message par miralant » 13 sept. 2019, 09:29

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

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


denis_brasseur
Messages : 193
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: lancé l'execution toute les x minutes

Message par denis_brasseur » 13 sept. 2019, 12:54

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
Domoticz + Raspberry Pi3 + Disque Dur PiDrive + RFXtrx433
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro RC 5CH
2 CHACON DiO 54781 (contacteur porte)
1 Compteur de consommation OWL Micro+ CM180

miralant
Messages : 108
Enregistré le : 02 mars 2018, 14:33

Re: lancé l'execution toute les x minutes

Message par miralant » 13 sept. 2019, 18:38

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 : 219
Enregistré le : 15 juin 2017, 14:41

Re: lancé l'execution toute les x minutes

Message par ogulf » 14 sept. 2019, 12:46

Conditionner la notification que si LastSeen > 60 (en secondes).
Importer Modules.lua de Vil1driver ;)
Domoticz Beta sur Raspberry Pi3 + RFPlayer + ZWave+ + RFLink R48 :
- 11 x RF660P (gestion chauffage)
- 1 x FGSD-002 (détecteur fumée)
- 10 x F007TH (sonde température/hygro)
- 5 x Emcoluxr EV1527 (contacteur ouverture porte)

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


miralant
Messages : 108
Enregistré le : 02 mars 2018, 14:33

Re: lancé l'execution toute les x minutes

Message par miralant » 14 sept. 2019, 13:41

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 : 5096
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: lancé l'execution toute les x minutes

Message par vil1driver » 14 sept. 2019, 13:57

Salut,

J'aurais tendance à Préférer l'idée de Denis ;)
Elle colle complètement à la demande

miralant
Messages : 108
Enregistré le : 02 mars 2018, 14:33

Re: lancé l'execution toute les x minutes

Message par miralant » 14 sept. 2019, 14:11

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 : 5096
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: lancé l'execution toute les x minutes

Message par vil1driver » 14 sept. 2019, 14:17

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

miralant
Messages : 108
Enregistré le : 02 mars 2018, 14:33

Re: lancé l'execution toute les x minutes

Message par miralant » 16 sept. 2019, 10:19

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.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre