Definir le temps d'allumage d'une lampe via LUA

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 <\>.
jacques68
Messages : 241
Inscription : 10 mai 2015, 12:21

Definir le temps d'allumage d'une lampe via LUA

Message par jacques68 »

Bonjour à tous

J'ai continué à deployer mon reseau domotique.
Je me suis attaqué à la detection entrée dans la maison et en fonction de l'heure de la meteo etc... allumer tel ou tel lampe.
La mise en place des capteurs et lampe fonctionne.
Quand je passe devant le capteur celui-ci allume bien la lampe ou les lampes désirées.

Maintenant je veux aller plus loin et allumer une lampe pour un temps définit. Par exemple une minute.
J'ai donc fait un script tout simple:

Code : Tout sélectionner

-- Allumage lampe quand on rentre la nuit

 commandArray = {}

time = os.date("*t")


 -- Si le capteur passe à on et alarme activé sur on, on allume la lumière pour 1 minute

  if  (devicechanged['Capteur'] == 'On'  and otherdevices['Alarme'] == 'On') then
 
 commandArray['Balcon'] = 'On FOR 1'
  print('balcon allume' )
 
   end

 
return commandArray

La lampe s'allume bien....mais elle ne s'eteind pas après une minute... :oops:
Je ne vois pas ou ça coince???
Chez d'autres ce script fonctionne correctement...pas chez moi...grrrrrrrrrrr :( :(
jacques68
Messages : 241
Inscription : 10 mai 2015, 12:21

Re: Definir le temps d'allumage d'une lampe via LUA

Message par jacques68 »

J'ai aussi éssayé ce genre de script sans plus de succès...

Code : Tout sélectionner

-- Allumage lampe quand on rentre la nuit

 commandArray = {}


t1 = os.time()
s = otherdevices_lastupdate['Balcon']

 
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)
 
 -- Si le capteur passe à on et alarme activé sur on, on allume la lumière pour 1 minute

  if  (devicechanged['Capteur'] == 'On'  and otherdevices['Alarme'] == 'On') then
 
 commandArray['Balcon'] = 'On'
  print('balcon allume' )
 
 
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = (os.difftime (t1, t2))
if (otherdevices['Balcon'] == 'On' and difference > 60 and difference < 70) then
   commandArray['Balcon']='Off'
print('balcon eteind')
end 
 
   end

 
return commandArray

jacques68
Messages : 241
Inscription : 10 mai 2015, 12:21

Re: Definir le temps d'allumage d'une lampe via LUA

Message par jacques68 »

Bon ben je vais répondre à moi meme mais peut etre cela servira à d'autres.. :D
J'y ai passé pourtant quelques heures hier soir à faire fonctionner cela sans résultats. Et ce matin 1/2 heure après avoir posté ce premier message je pense avoir trouvé la solution. :lol:
Peut etre existe t'il une autre façon de faire mais celle là semble fonctionner.

En fait il faut deux scripts: un premier qui detecte une présence et effectue tel ou tel opération donc un script_device, chez moi allumer une lampe, puis un deuxième script qui definit le temps d'allumage de la lampe, ici il faut un script_time.

Voici donc mes deux scripts:

Code : Tout sélectionner

-- Allumage lampe quand on rentre la nuit
-- script_device_entréenuit

 commandArray = {}


 
 -- Si le capteur passe à on et alarme activé sur on, on allume la lumière pour 1 minute

  if  (devicechanged['Capteur'] == 'On'  and otherdevices['Alarme'] == 'On') then
 
 commandArray['Balcon'] = 'On'
  print('balcon allume' )
 
   end

 
return commandArray

Et le second qui definit le temps d'allumage, ici par exemple une minute

Code : Tout sélectionner

-- script_time_entreenuitallumagelampe.lua
t1 = os.time()
s = otherdevices_lastupdate['Balcon']
-- 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['Balcon'] == 'On' and difference > 60 ) then
   commandArray['Balcon']='Off'
print('balcon eteint')
end 
 
return commandArray
Voila. Peut etre peut assembler les 2 codes en un mais je sais pas comment.... :mrgreen:
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Definir le temps d'allumage d'une lampe via LUA

Message par vil1driver »

salut,

franchement je ne sais pas pourquoi ton premier script ne fonctionne pas :?
peut-être que ton capteur passe à On trop régulièrement et relance le décompte d'une minute avant la fin
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
jacques68
Messages : 241
Inscription : 10 mai 2015, 12:21

Re: Definir le temps d'allumage d'une lampe via LUA

Message par jacques68 »

Ben non je sais pas pourquoi le premier marche pas....
Il ne passe pas regulierement sur on pourtant
oula85
Messages : 161
Inscription : 29 avr. 2015, 18:09
Localisation : Challans

Re: Definir le temps d'allumage d'une lampe via LUA

Message par oula85 »

Tu as juste à remplir un délai d extinction dans ton interrupteur virtuel pas besoin de scripter quoique ce soit !!!
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Definir le temps d'allumage d'une lampe via LUA

Message par vil1driver »

Peut-être qu'en temps normal il ne souhaite pas que la lampe s'éteigne seule... ;)

D'ou l'intéret du script, avoir des actions différentes suivant certaines conditions..
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
jacques68
Messages : 241
Inscription : 10 mai 2015, 12:21

Re: Definir le temps d'allumage d'une lampe via LUA

Message par jacques68 »

vil1driver a écrit :Peut-être qu'en temps normal il ne souhaite pas que la lampe s'éteigne seule... ;)

D'ou l'intéret du script, avoir des actions différentes suivant certaines conditions..
Tout a fait!!! :D L'interrupteur me sert en temps normal à allumer la lampe, donc si je lui colle un delai d'extinction...... :mrgreen:
Donc obligé de passer par le script.
J'ai aussi du mettre une condition dans mon script time...car si j'allume la lampe via le bouton de commande elle s’éteint après le temps donner dans le script time.
heartblood
Messages : 189
Inscription : 13 août 2015, 09:50

Re: Definir le temps d'allumage d'une lampe via LUA

Message par heartblood »

Code : Tout sélectionner

 commandArray['Balcon'] = 'On FOR 1'
Tu as essayé en mettant 2 minutes ? Tu as regardé dans les logs si la commande est envoyé mais non recu par le module ? Parce qu'effectivement ça devrait fonctionner. Mais sache que ça devrait eteindre la lumiere au bout d'une minute quelque soit l activation ou non de l'interrrupteur entre cette minute. L extinction n'est pas cassable et s'executera quoi qu'il se passe. C'est pour ça que le script time est éventuellement mieux.
Répondre