Page 1 sur 1

Envoi sms si porte ouverte pendant plus de x secondes

Publié : 13 nov. 2015, 19:01
par cyberfrk
Bonjour,

Me revoilà... Maintenant que j'ai gouté aux scripts LUA, je ne peux plus m'en passer...!
Plus sérieusement, j'aimerais envoyer 2 sms (madame et moi) si j'ai oublié de fermer la porte 60 secondes après l'avoir ouverte. Par contre, un plus serait même de m'envoyer un sms si la porte est restée fermée pendant plus de 20sec (temps indicatif) après l'avoir ouverte puis refermée. Je sais, c'est un peu tordu...

Porte fermée (Off) ---- J'ouvre la porte (On) ---- Si Toujours ouverte (On) pendant +60sec:
=>2 sms envoyés "porte restée ouverte"
Porte fermée (Off) ---- J'ouvre la porte (On) ---- Si refermée (Off) avant les 60 sec:
=> 2 sms envoyés "porte fermée"
Est-ce plus clair? *espérè...*

Sachant que le pushbullet et mails seront utilisés aussi mais "je maîtrise" ces types de notifications.

Je me suis inspiré de ce script:

Code : Tout sélectionner

-- script_time_PriseA1.lua
t1 = os.time()
s = otherdevices_lastupdate['PriseA1']
-- returns a date time like 2013-07-11 17:23:12

year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)

commandArray = {}
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = (os.difftime (t1, t2))
if (otherdevices['PriseA1'] == 'On' and difference > 30 and difference < 60) then
-- pushbullet et mail
  	commandArray['SendNotification']='Sujet du message#mon contenu!'
-- envoi sms
    -- Ici pour moi
	os.execute('curl -k "https://smsapi.free-mobile.fr/sendmsg?user=123456789&pass=azerty&msg=ATTENTION porte ouvert! "')
    -- Ici pour madame
	os.execute('curl -k "https://smsapi.free-mobile.fr/sendmsg?user=987654321&pass=ytreza&msg=ATTENTION porte ouvert! "')

end
return commandArray
Ayant fait plusieurs essais dont 1 qui a fonctionné, impossible de réussir à nouveau. Je suis perdu...!

Re: Envoi sms si porte ouverte pendant plus de x secondes

Publié : 13 nov. 2015, 19:36
par vil1driver
Salut,

Les scripts time sont lancés toutes les minutes..

Je pense que ta fenêtre de tire (30s à 60s) est trop juste.

Exemple:

Porte ouverte à 20h59 et 50 secondes
À 21h le script se lance, on à pas dépassé les 30s de temps d'ouverture,
À 21h01 le script se lance de nouveau, on est à 70 secondes,

Re: Envoi sms si porte ouverte pendant plus de x secondes

Publié : 14 nov. 2015, 10:54
par oula85
C est un script_device qu il te faut

Re: Envoi sms si porte ouverte pendant plus de x secondes

Publié : 14 nov. 2015, 22:59
par heartblood
oula85 a écrit :C est un script_device qu il te faut
Un scritp_device avec un stop ? Le mieux c'est encore un script_time même si le temps va varier...
A moins d'avoir un site internet avec API qui permet de créer un chronomètre virtuel sur Domoticz. Par exemple si le chrono se met en route module virtuel = on, à la fin du compte à rebours, le site envoi un off. (IFTTT possible ??)

Re: Envoi sms si porte ouverte pendant plus de x secondes

Publié : 14 nov. 2015, 23:32
par cyberfrk
En effet, en me documentant un peu, j'ai compris la différence et surtout l'incidence de script_time (lancé chaque minutes) et script_device (en fonction du changement d'état). ;)

D'après vos échanges, je déduis que je dois nommer le script en fonction de :
-vérification toutes les minutes que ma porte est bien fermée (script_time)
-vérification à partir du moment où j'ouvre la porte (script_device) et que je la ferme

A mon avis, le resultat sera le même à quelques 10aines de secondes près, non?
J'avoue être perdu et voudrais savoir comment vous gérez cela?

Re: Envoi sms si porte ouverte pendant plus de x secondes

Publié : 14 nov. 2015, 23:53
par oula85
script_device avec condition de temps entre 2 changements d'état du capteur

la c'est mon code de détection de soucis de pile ou disfonctionnement de mes sondes oregon mais suffit d'adapter avec une condition de changement d'état de ta porte

Code : Tout sélectionner

--------------------------------
------ Variables à éditer ------
--------------------------------

local sonde = 'Temp Salon' -- Nom de la sonde de température


--------------------------------
-- Fin des variables à éditer --
--------------------------------

time = os.date("*t")  

function timedifference(d)
   s = otherdevices_lastupdate[d]
   year = string.sub(s, 1, 4)
   month = string.sub(s, 6, 7)
   day = string.sub(s, 9, 10)
   hour = string.sub(s, 12, 13)
   minutes = string.sub(s, 15, 16)
   seconds = string.sub(s, 18, 19)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference
end


-- on regarde de quand date la dernière relève de température

local lastSeen = timedifference(sonde)

commandArray = {}


-- lance une alarme par zone au dessus du seuil 600s si l'alarme est à OFF et la coupe en dessous si l'alarme est à On 

if (lastSeen > 600 ) and (otherdevices['Pile Salon'] == 'Off') then
      commandArray['Pile Salon']='On'
end

if (lastSeen < 600 ) and (otherdevices['Pile Salon'] == 'On') then
      commandArray['Pile Salon']='Off'
end


   
    
   
  return commandArray

Re: Envoi sms si porte ouverte pendant plus de x secondes

Publié : 15 nov. 2015, 23:51
par rimram31
En fait ta logique envoie des sms que la porte soit ou non fermée :-) seul le contenu du message change je suppose. Désolé, je n'ai pas de script tout fait a te proposer mais étant donné la logique que tu souhaites décrites plus haut: j'ouvre la porte puis selon > 60 s ou fermée, j'effectue une action, je verrais en réalité deux scripts.

Un premier script "device" capture le changement d'etat On/Off de ta porte. Si passage a On, il "arme" (créé) une variable contenant la date/heure de l'événement. A écrire mais en gros: porte_ouverte = os.time()) Dans le même script si au contraire passage a Off et la variable "armée" (non vide, existante ?) => cas Off "avant les 60 secs".
Un 2eme script "time" celui là s'exécute et contrôle l'existence de la variable, si elle existe checke (elle contient la date/heure) si > 60 secs (en réalité jusqu'à 2 minutes au pire) et envoie le SMS pas fermé (et désarme la variable ...).

Ta variable armée lors du passage a On de la porte sera désarmée, soit par le script device parce que la porte est fermée "a temps", soit par le script time en voiture balai (:-)) si pas de changement dans un temps "raisonnable". La "variable" te permet de communiquer de l'appel s'un script a un autre.

Re: Envoi sms si porte ouverte pendant plus de x secondes

Publié : 17 nov. 2015, 01:06
par ben33880
Tu as la commande "at" qui te permet de lancer une commande à une heure donnée ( now + 1 minutes par exemple), mais c'est du shell pas du lua.

Re: Envoi sms si porte ouverte pendant plus de x secondes

Publié : 17 nov. 2015, 10:53
par patrice
Bonjour

Dans l'idée de la soluce de rimram31 ,une autre piste que je vois est de jouer avec 3 scripts

Un 1er script lié à l' action ON de la porte renomme un fichier device_time_aaa.XXXX en device_time_aaa.lua
Un 2eme script lié à l'action OFF de ta porte recopie le fichier device_time_aaa.lua en device_time_aaa.XXX

ET donc durant le ON de ta porte tu as un fichier device_time_aaa.lua qui se declenche tt les minutes qui peut vérifier le temps depuis lequel elle est ouverte par un lastupdate et faire le job que tu veux

le OFF en renommant le script time arrete ce mecanisme

Bon ca vaut, ce que ca vaut