Page 1 sur 1

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

Publié : 10 oct. 2015, 11:28
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 :( :(

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

Publié : 10 oct. 2015, 11:45
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


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

Publié : 10 oct. 2015, 12:20
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:

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

Publié : 10 oct. 2015, 12:28
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

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

Publié : 10 oct. 2015, 19:26
par jacques68
Ben non je sais pas pourquoi le premier marche pas....
Il ne passe pas regulierement sur on pourtant

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

Publié : 12 oct. 2015, 22:16
par oula85
Tu as juste à remplir un délai d extinction dans ton interrupteur virtuel pas besoin de scripter quoique ce soit !!!

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

Publié : 13 oct. 2015, 09:11
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..

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

Publié : 13 oct. 2015, 19:10
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.

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

Publié : 14 oct. 2015, 16:40
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.