G.RozNCo Posté(e) le 26 juillet Signaler Partager Posté(e) le 26 juillet (modifié) Bonjour à tous, J'essais de faire une QA minuteur modulable, et je coince aux modification pendant un cycle. Le but etant d'activer un module pendant une durée définie (entre 5 et 30min) toutes les 5-60minutes, avec la possibilité de modifer le cycle et la durée mais également de forcer l'allumage ou l'extinction. La QA se lance proprement , mais reste bloqué dans la routine "cycle", et je n'arrives ni a la modifier ni a la forcée (ON ou OFF). Je me doutes que mes timers sont les probèmes ... La fonction "SetTimeout" est peut etre plus adaptée, mais du coup la pause entre les commande n'es pas prise en compte. Avez vous des idées? Merci d'avance. function QuickApp:B_ON(event) self:updateView("Label_Info", "text", "ON... "..os.date('%H:%M')) self:setVariable("Mode","ON") self:onInit() end function QuickApp:B_Off(event) self:updateView("Label_Info", "text", "OFF... "..os.date('%H:%M')) self:setVariable("Mode","OFF") self:onInit() end function QuickApp:B_Cycle() self:debug("Cycle: " , self:getVariable("Cycle"), " on/off | " , self:getVariable("Duree"), "min") self:updateView("Label_Info", "text", os.date('%H:%M').." Cycle: ON/OFF "..self:getVariable("Cycle").."% | "..self:getVariable("Duree").. "min") self:setVariable("Mode","AUTO") self:onInit() end function QuickApp:onInit() self:debug("Init",self:getVariable("Mode")) if self:getVariable("Mode") == "ON" then hub.call(tonumber(self:getVariable("Modul_id")),"turnOn") elseif self:getVariable("Mode") == "OFF" then hub.call(tonumber(self:getVariable("Modul_id")),"turnOff") elseif self:getVariable("Mode") =="AUTO" then local Ratio_ON= ( self:getVariable("Cycle") * self:getVariable("Duree")/100 ) local Ratio_OFF= ( self:getVariable("Duree") ) - Ratio_ON Timer=Ratio_ON *60 hub.call(tonumber(self:getVariable("Modul_id")),"turnOn") while Timer > 0 and self:getVariable("Mode") =="AUTO" do hub.sleep(1000) Timer=Timer-1 end Timer=Ratio_OFF *60 hub.call(tonumber(self:getVariable("Modul_id")),"turnOff") while Timer > 0 and self:getVariable("Mode") =="AUTO" do hub.sleep(1000) Timer=Timer-1 end self:onInit() else self:setVariable("Mode","OFF") end end Modifié le 26 juillet par G.RozNCo Lien vers le commentaire Partager sur d’autres sites More sharing options...
henri-allauch Posté(e) le 26 juillet Signaler Partager Posté(e) le 26 juillet Il y a 3 heures, G.RozNCo a dit : La fonction "SetTimeout" est peut etre plus adaptée OUI Il y a 3 heures, G.RozNCo a dit : mais du coup la pause entre les commande n'es pas prise en compte. ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
henri-allauch Posté(e) le 26 juillet Signaler Partager Posté(e) le 26 juillet (modifié) Tu peux avoir ce genre de code à adapter aux valeurs de tes timer lus dans des variables et des conditions d'arrêt. C'est juste une exemple avec SetTimeOut : function Timer(self) local function TurnON(self) fibaro.call(Id_Device, "turnOn") self:debug("TurnON") end local function TurnOFF(self) fibaro.call(Id_Device, "turnOff") self:debug("TurnOFF") -- Relancer le Timer dans 10 Minutes ( suivant ton besoin Mode AUTO ) if ... mode AUTO == ON then fibaro.setTimeout(10*60*1000, function() Timer(self) end) end end -- Main de la fonction Timer -- Passer le device ON fibaro.setTimeout(0, function() TurnON(self) end) --Passer le device OFF dan 20 minutes fibaro.setTimeout(20*60*1000, function() TurnOFF(self) end) end Modifié le 26 juillet par henri-allauch Lien vers le commentaire Partager sur d’autres sites More sharing options...
G.RozNCo Posté(e) le 30 juillet Auteur Signaler Partager Posté(e) le 30 juillet Merci pour l'idée j'essaie ça ce weekend. Je ne vois pas trop ou s'arrête la fonction setTimeout Je ne me représente pas le déroulement temporel de cette QA. Lien vers le commentaire Partager sur d’autres sites More sharing options...
henri-allauch Posté(e) le 30 juillet Signaler Partager Posté(e) le 30 juillet (modifié) c'est un exemple à adapter pour utiliser setTimeout Tu apelle la fonction Timer. Son "main" (code après les deux fonctions TurnON() et TurnOFF() inclues dans la fonction Timer()) 1- va lancer immédiatement TurnON () qui va allumer le device c'est tout 2 - et ensuite la fonction TurnOFF () qui va éteindre le device dans 20 minutes et si on est toujours en AUTO : va relancer Timer () et ça boucle Et ça boucle tant que ton mode est en AUTO ON. il y a une heure, G.RozNCo a dit : Je ne vois pas trop ou s'arrête la fonction setTimeout la fonction setTimeout lance la fonction désignée en paramètre 2 à la fin du timer passé en paramètre 1 -> 0 : Immédiatement ..... 20*60*100 -> 20 minutes Modifié le 30 juillet par henri-allauch Lien vers le commentaire Partager sur d’autres sites More sharing options...
henri-allauch Posté(e) le 30 juillet Signaler Partager Posté(e) le 30 juillet Tu peux essayer ce QA de quelques lignes ... TEST_-Timer.fqa Lien vers le commentaire Partager sur d’autres sites More sharing options...
G.RozNCo Posté(e) le 1 août Auteur Signaler Partager Posté(e) le 1 août Merci beaucoup, ces explications ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés