Page 1 sur 1

Temps declenchement envoi variable

Publié : 21 avr. 2017, 13:02
par Starnight
Salut à tous.
Voilà je m'explique.
Lorsque je mets mon alarme, je veux savoir si malgré tout quelqu'un ouvre le portail. Evidemment comme on passe tous par le portail je mets un temps d'attente avant le declenchement.
Le seul soucis c'est que je decale le temps de declenchement de la variable mais si l'état d'une des deux variables change entre temps, il ne le prend pas en compte et procede quand meme au premier changement. Je vous met le script pour mieux comprendre :

Code : Tout sélectionner

commandArray = {}
Alarme=uservariables["Alarme"]
Portail=uservariables["Portail"]
debug=uservariables["debug"]

 if (debug == "OUI") then
        print("Variables de base :")
        print("Alarme = "..Alarme)
        print("Portail = "..Portail)
    
        end 

-- Si mon alarme est en route (1) et que le portail s'ouvre (1), je passe l'alarme en statut 2
if Alarme == 1 and Portail == 1 then
         commandArray["Variable:Alarme"]='2 AFTER 20' 
         -- le probleme est ici dans le decalage de 20secondes. Si je change l'état de mon alarme après que alerme=1 et portail=1  (c'est a dire j'ai passé le portail pour entrer ma voiture et je vais desactiver l'alarme (0)), le script va quand meme continuer à compter les 20 secondes et la passer à 2 et donc m'envoyer les alertes.
 end
 
---Si mon alarme passe au statut 2 : j'envoi les différentes alertes et la passe au statut 3 pour ne pas avoir des millions de notifications
if Alarme == 2 then
    print ("Portail ouvert malgré l'alarme !!!")
    commandArray["Variable:Alarme"]='3'
  --  commandArray["OpenURL"]='******'
  --  commandArray["SendEmail"]='****'
end



---Retour au statut initial si le portail se ferme entre temps
if Alarme == 3 and Portail == 0 then
         commandArray["Variable:Alarme"]='1'

     end
     return commandArray
Merci d'avance

Re: Temps declenchement envoi variable

Publié : 21 avr. 2017, 13:31
par vil1driver
Salut,

j'imagine que ton script est de type VARIABLE
(préférer uservariablechanged['ma variable'] à uservariables['ma variable'] lorsque l'on veut explicitement réagir à la maj d'une variable, plus qu'à son statut))

passe le statut à 2 sans délai
et gères les notifications ailleurs dans un script de type TIME en regardant que ça fait plus de 20s que le statut est à 2
ça va rallonger le délai avant notification (max 1min et 20s)
mais si ça te convient, tu ne sera plus importuné ;)

Re: Temps declenchement envoi variable

Publié : 21 avr. 2017, 14:51
par Starnight
Merci pour la réponse.
J'ai tenté le script suivant mais rien ne se passe. J'ai du faire une erreur de syntaxe dans le calcul :

Code : Tout sélectionner


Alarme=uservariables["Alarme"]
Temps=10
--recupere les minutes
time=os.time()
secondes=tonumber(os.date('%S',time))
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))
print ("il est "..secondes)
commandArray = {}


    if (Alarme == 2 and secondes == secondes + Temps ) then
        
         print("Alarme declenchée")
         commandArray["Variable:Alarme"]='3'

   end



return commandArray

Et pour mon script précédent j'ai retiré le temps pour passer la variable à 2 et du coup bah ca ne fonctionne plus elle ne passe pas à 2 ?! Peut etre que je devrai mettre un temps d'une seconde ?!

Re: Temps declenchement envoi variable

Publié : 21 avr. 2017, 16:22
par vil1driver
j'aurais plutôt fait ainsi

Code : Tout sélectionner


	Alarme=uservariables["Alarme"]
	
	s = uservariables_lastupdate['Alarme']
	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)
	
commandArray = {}


    if (Alarme == 2 and difference >= 20 ) then
        
         print("Alarme declenchée")
         commandArray["Variable:Alarme"]='3'

   end



return commandArray

Re: Temps declenchement envoi variable

Publié : 21 avr. 2017, 16:51
par Starnight
Ok je vais essayer ca merci. Par contre pour ne pas recopier betement tu peux m'expliquer a quoi correspondent les chiffres apres chaque srting.sub ?
Merci

Re: Temps declenchement envoi variable

Publié : 21 avr. 2017, 16:55
par vil1driver
string.sub(s, i [, j])

s:sub(i [,j])

Return a substring of the string passed. The substring starts at i. If the third argument j is not given, the substring will end at the end of the string. If the third argument is given, the substring ends at and includes j.

> = string.sub("Hello Lua user", 7) -- from character 7 including 7 until the end
Lua user
> = string.sub("Hello Lua user", 7, 9) -- from character 7 until and including 9
Lua
> = string.sub("Hello Lua user", -8) -- 8 from the end until the end
Lua user
> = string.sub("Hello Lua user", -8, 9) -- 8 from the end until 9 from the start
Lua
> = string.sub("Hello Lua user", -8, -6) -- 8 from the end until 6 from the end
Lua
http://lua-users.org/wiki/StringLibraryTutorial

Re: Temps declenchement envoi variable

Publié : 21 avr. 2017, 18:48
par Starnight
Oui j'avais vu ca mais je t'avouerai ne pas etre sur.
En fait tu inscris les valeurs dans un tableau et ces chiffres correspondent a une case ? Tu aurais donc pu mettre n'importe quel numero ?

Re: Temps declenchement envoi variable

Publié : 21 avr. 2017, 18:55
par vil1driver
non, si tu regardes ta page de variables, tu as tout à droite le moment de la dernière mise à jour (ex:2017-04-19 10:05:11)

c'est cette valeur que l'on récupère par

Code : Tout sélectionner

s = uservariables_lastupdate....
en suite de cette valeur on ne va prendre que les 4 premiers chiffre (de 1 à 4 en partant de la gauche)

Code : Tout sélectionner

year = string.sub(s, 1, 4)
et ainsi de suite jusqu'à extraire chaque infos, heures, minutes...
on re mouline le tout pour n'avoir au final qu'un énnnnnnorme nombre en seconde

Code : Tout sélectionner

t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
on fait la même avec l'heure actuelle

Code : Tout sélectionner

t1 = os.time()
puis on compare..

Code : Tout sélectionner

difference = os.difftime(t1, t2)
au final on à le laps de temps écoulé entre la dernière mise à jour de ta variable et maintenant

Re: Temps declenchement envoi variable

Publié : 21 avr. 2017, 19:08
par Starnight
Ok je comprends mieux. Il faut donc sue je crée cette nouvelle variable que je n'avais pas.
Merci d'avoir prit le temps pour ces explications je me coucherai moins bete ce soir. Je teste et te redis ca.

Re: Temps declenchement envoi variable

Publié : 21 avr. 2017, 19:46
par vil1driver
Non tu n'as rien à créer, le script fonctionne tel que
C'est une des capacités de domoticz que de savoir quand une variable ou même un switch ou une sonde, etc.. à été mise à jour

De la même façon ceci te donnera la date pour ton portail

Code : Tout sélectionner

print(uservariables_lastupdate['Portail'])