Temps declenchement envoi variable

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 <\>.
Répondre
Starnight
Messages : 65
Inscription : 20 déc. 2016, 10:54

Temps declenchement envoi variable

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

Re: Temps declenchement envoi variable

Message 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é ;)
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
Starnight
Messages : 65
Inscription : 20 déc. 2016, 10:54

Re: Temps declenchement envoi variable

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

Re: Temps declenchement envoi variable

Message 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
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
Starnight
Messages : 65
Inscription : 20 déc. 2016, 10:54

Re: Temps declenchement envoi variable

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

Re: Temps declenchement envoi variable

Message 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
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
Starnight
Messages : 65
Inscription : 20 déc. 2016, 10:54

Re: Temps declenchement envoi variable

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

Re: Temps declenchement envoi variable

Message 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
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
Starnight
Messages : 65
Inscription : 20 déc. 2016, 10:54

Re: Temps declenchement envoi variable

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

Re: Temps declenchement envoi variable

Message 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']) 
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
Répondre