Message populaire Berale64 Posté(e) le 1 juin 2015 Message populaire Signaler Posté(e) le 1 juin 2015 En convertissant une scène en mode block je suis tombé sur la fonction setTimeout. Cette fonction retarde d'un delay défini l'exécution d'une séquence lua. Si la fonction sleep suspend le déroulement d'une scène, la fonction setTimeout met en arrière plan les instructions de la fonction, mais la scène lua poursuit son cours. --[[ %% properties 52 value 52 armed %% globals --]] fibaro:debug("Start"); fibaro:debug("scene n "..fibaro:countScenes()); local val = fibaro:getValue(52, "value"); local arm = fibaro:getValue(52, "armed"); fibaro:debug("Etat "..val.." "..arm); setTimeout(function() ------ début de la fonction local delayedCheck0 = false; local tempDeviceState0, deviceLastModification0 = fibaro:get(52, "value"); fibaro:debug("Temps écoulé "..os.time() - deviceLastModification0); if (( (tonumber(val) == 0 and tonumber(arm) == 0) ) and (os.time() - deviceLastModification0) >= 120) then delayedCheck0 = true; end if ( delayedCheck0 == true ) then fibaro:call(163, "turnOff"); end end, 120000) ------- fin de lafonction avec delai de 120 secondes fibaro:debug("End"); Le but de ce script est d'éteindre une lampe si plus d'activité (52 = détecteur de mouvement) pendant 2 mn. Analyse du debug. On voit que la scène s'exécute de Start à End en mettant la fonction timeout en attente. A chaque passage, il y a deux scènes qui démarrent. Val = 1 activation du détecteur, val = 0 retour au repos après 20 secondes. Quand le délai arrive à 120 secondes et pas de modification de l'état du détecteur, les instructions sont exécutées. Ici, éteindre la lumière. Il me semble que cette fonction peut ouvrir des horizons pour nos petit bidouillages. 13
Krikroff Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 Oui exactement. Un exemple que j'ai utilisé ici http://www.domotique-fibaro.fr/index.php/topic/2226-thermostat-greenmomit-et-hc2/ afin d'attendre la vérification d'une condition sans bloquer l’exécution du script --! async object async={} --! wait function --@ param condition The condition --@ param callback The callback function function async:wait(condition, callback) --print('wait') assert(type(condition)=='function', 'wait(condition*) arg should be a function!') if (condition()) then if (callback and type(callback)=='function') then callback() end return else setTimeout(function() self:wait(condition, callback) end, 300) end end function GreenMomit:getData() async:wait((function(...) return (self.isLogged==true) end), function() self:onLogged() self:getUserThermostats() self:update() end) end function GreenMomit:lunchConfig() self:connectApi() async:wait((function(...) return (self.isConnected==true) end), function() self:onConnected() self:loginApi() self:getData() end) end 5
Berale64 Posté(e) le 1 juin 2015 Auteur Signaler Posté(e) le 1 juin 2015 Quand je clique sur ton lien j'ai droit à"Vous n’avez pas la permission de voir ce forum."
pepite Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 alors la j'ai pas tout bien compris, Le sleep met en pause avant de lire la suite du script et le settimeout met en pause sans empecher de lire la suite du script. je ne comprends pas ce qui est mis en pause dans ce cas ?
Berale64 Posté(e) le 1 juin 2015 Auteur Signaler Posté(e) le 1 juin 2015 J'ai mis des commentaires au début et àla fin de la fonction setTimeout. C'est cette partie qui est mise en attente.
pepite Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 le function qui est en attente OK, ca permet d'attendre la verif de tes conditions et de terminer malgre tout le script J'ai bon ? ;-)
mprinfo Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 Merci berale24 j'avais déjàvu cette fonction mais je n'avais pas eu le temps de voir ca fonction j'ai ma réponse Merci Envoyé de mon SM-G900F
Berale64 Posté(e) le 1 juin 2015 Auteur Signaler Posté(e) le 1 juin 2015 Voilà en fait ce que je voulais faire. Les Mamies c'est bien, mais ça se lève la nuit pour satisfaire un besoin bien naturel. Seulement les Mamies ça ne veut pas déranger, alors ça n'allume pas la lumière. Résultat, ça se casse la gueule dans les meubles et ça réveille toute la maison. J'ai donc mis un détecteur FGMS001 dans le couloir. Dès que Mamie sort de sa chambre, une lampe du salon s'allume et donne assez de lumière pour rejoindre les toilettes. Tant que Mamies baguenaude entre sa chambre, les toilettes ou la salle de bain, la lumière reste allumée. Après 2 mn ça s’éteint. --[[ %% properties 52 value 52 armed %% globals --]] -- c'est le jour alors stop if (fibaro:getGlobalValue("Day_Night") == "DAY") then fibaro:abort(); end fibaro:debug("Start"); local val = fibaro:getValue(52, "value"); local arm = fibaro:getValue(52, "armed"); local scenenum = fibaro:countScenes(); fibaro:debug("Etat "..val.." "..arm); fibaro:debug("scene n "..scenenum); -- premier déclanchement du détecteur -- on allume et stop if (val == "1" and scenenum == 1) then fibaro:call(163, "turnOn"); fibaro:abort(); end -- déclanchements suivants on attend 120s -- pour éteindre setTimeout(function() local delayedCheck0 = false; local tempDeviceState0, deviceLastModification0 = fibaro:get(52, "value"); fibaro:debug("Temps écoulé "..os.time() - deviceLastModification0); if (( (tonumber(val) == 0 and tonumber(arm) == 0) ) and (os.time() - deviceLastModification0) >= 120) then delayedCheck0 = true; end if ( delayedCheck0 == true ) then fibaro:call(163, "turnOff"); end end, 120000) fibaro:debug("End"); 1
Nico Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 Mais pourquoi ne pas avoir mis cela dans GEA du coup ?
mprinfo Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 Parce tout le monde n'utilise pas GEA certains préfère faire leurs propres codes lua Envoyé de mon SM-G900F
Berale64 Posté(e) le 1 juin 2015 Auteur Signaler Posté(e) le 1 juin 2015 Tu as raison Nico, mais si j'installe GEA je n'apprends pas LUA.... CQFD !!! PS: Si Fibaro avait de la jujotte, ils achèteraient les droits de GEA, écriraient une interface graphique avec plein de zolis widgets, ça génèrerait les commandes GEA automatiquement et hop!!!ils auraient un outils extraordinaire. Oui, heu !!! ils ont du boulot avec la V4.... 2
mprinfo Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 une solution tu remplaces la mamie de 40ans par 2 jeunes de 20 ans mais je suis pas sur que tu dormes mieux 2
Berale64 Posté(e) le 1 juin 2015 Auteur Signaler Posté(e) le 1 juin 2015 Non,non, je parle de mamies de 80, alors ça fait 4 de 20 et là, je ne crois pas pouvoir suivre la cadence .....
Nico Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 Berale24 : Oui bien sûr pour l'apprentissage du lua, sorry En fait je suis partisans de la simplification maximum, donc j'essaie d'avoir le minimum de chose qui tourne en même temps.
Did Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 @mprinfo, Des mamies de 40 ans, ça va pas mieux, toi?
mprinfo Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 @nico a trop vouloir simplifier on complique tout......
Berale64 Posté(e) le 1 juin 2015 Auteur Signaler Posté(e) le 1 juin 2015 @Nico: Moi aussi. la grande majorité de mes scènes est actionnée par des triggers. Tout ce qui dépend d'un timer est géré par le petit scheduler que j'ai publié quelque part sur le forum. Il ne reste que la filtration de la piscine et de la PaC qui méritent un traitement à part. Avec la HCL j'avais plein de scène, maintenant en LUA et en rationalisant c'est de désert !
Nico Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 Moi j'en suis à4, et encore je pourrai en supprimer une en la GEATISANT, mais pas eu le temps encore
Berale64 Posté(e) le 1 juin 2015 Auteur Signaler Posté(e) le 1 juin 2015 @Nico: Quand j'ai lu "moi j'en 4" ça m'a foutu un coup !!! Non,non, je parle de mamies de 80, alors ça fait 4 de 20 et là, je ne crois pas pouvoir suivre la cadence .....
mprinfo Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 4 ben il est bien plus speed que je ne le pensé mon voisin GEATISANT c'est une marque de pilules bleue? Envoyé de mon SM-G900F 2
Nico Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 :) De 20 ans en plus, mes nuits seraient chaudes mouarf Maintenant j'en ai déjà3 des femmes àla maison lol
cybersquat Posté(e) le 1 juin 2015 Signaler Posté(e) le 1 juin 2015 moi je veux bien les adopter si sont majeurs hein ^^ Toujours dis a ma femme, si elle veut un 3ieme (fille) j'adopte mais majeur direct
MasterBT Posté(e) le 3 juin 2015 Signaler Posté(e) le 3 juin 2015 Merci Berale pour ce script, Ca donne une bonne base pour tricoter autour.
Messages recommandés