Aller au contenu
jjacques68

Help Interrompre Séquence Allumage D'un Simulateur D'aube

Recommended Posts

bonjour à  tous,

 

je bug devant un problème certainement tout bête, mais je bloque...

 

J'ai réalisé un simulateur d'aube avec les lampes de chevet de mon lit.

Un module FGD-211, un module virtuel qui me permet d'activer ou non le réveil et de choisir l'heure de celui-ci.

Ces valeurs sont stockées dans des variables.

 

Tout marche nickel sauf que je n'arrive pas à  interrompre la séquence d'allumage (qui dure 15 min).

Soit je dois attendre la fin, soit je dois allé sur la HC et arrêter manuellement la scène.

 

Je souhaiterai pour l'arrêter, allumer complètement la lumière l'éteindre ! avec son interrupteur classique !

Qui réagit bien d'ailleurs car si je fait 2 actions sur l'interrupteur, la lampe s'allume à  fond (1 pression l'éteint)

Mais 9 secondes après (voir mon script) elle reprend le cycle d'allumage !!!! :angry:

 

voici le code de ma scène (très court...)

--[[
%% autostart
%% properties
%% events
%% globals
--]]

local i,j

function ReveilG()
  	--si l'heure correspond et que la variable auto = oui
	if os.date("%H:%M") == fibaro:getGlobal("HeureReveilG") and fibaro:getGlobal("ReveilAutoG") == "oui"  then
    	    i=1
            fibaro:debug("début du réveil")
    	    --boucle de 1 à  100 correspondant à  la valeur du module ET devrait s'interrompre si le module arrive à  99 ou plus
    	    while i < 100 and tonumber(fibaro:getValue(30, "value")) <= 99 do
      		
      		--envoie la valeur au module
        	fibaro:call(30, "setValue", i)
      		--incrémente la valeur
      		i=i+1
      		--attend 9 seconde (qui me fera au total 9*100 soit 15 min)
        	fibaro:sleep(9*1000)
      
	    end
	    fibaro:debug("Fin du réveil")    
        end
        setTimeout(ReveilG, 60*1000)
end

ReveilG()

Ma 2eme condition dans la boucle while devrait me faire sortir de la boucle ! nan ?!

 

si vous avez des idées ??!!!

 

Merci à  vous !!!

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors je me réponds à  moi-même :

 

j'ai changé la condition de la loop

--boucle tant que la valeur du module est < 99
while tonumber(fibaro:getValue(30, "value")) < 99 do

en fait, je test que la valeur du module.

Et quand celui-ci est allumé à  fond (suite à  un double appui sur l'interrupteur) il passe à  99 et non 100 !

 

donc c'est normal qu'avant il ne sortait pas de ma boucle.

 

j'ai ajouter un décalage de 15 min pour le début du cycle pour que l'ampoule soit allumé au maximum à  l'heure sélectionnée dans le VD.

if os.date("%H:%M", os.time()+15*60) == fibaro:getGlobal("HeureReveilG") and fibaro:getGlobal("ReveilAutoG") == "oui"  then

et je fait éteindre 2h après l'ampoule (pour pas qu'elle reste allumé si je suis pas là )

--extinction 2 heures après
if os.date("%H:%M", os.time()-2*60*60)==fibaro:getGlobal("HeureReveilG") then
    	fibaro:debug("extinction 2h après")
    	fibaro:call(30, "turnOff")
end

et je prévois un petit réveil à  pile au cas où :P !

Partager ce message


Lien à poster
Partager sur d’autres sites

×