Berale64 Posté(e) le 30 août 2015 Auteur Signaler Posté(e) le 30 août 2015 J'ai trouvé un excellent tuto sur le forum fibaro. Malheureusement ça ne asse pas dans google translate. C'est ici: http://forum.fibaro.com/index.php?/topic/18752-example-of-settimeout/
mprinfo Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 Ben tu parles anglais donc au boulot pour la traduction lol Moi je parle que lorrain Envoyé de mon SM-G900F en utilisant Tapatalk
Yannick Posté(e) le 2 septembre 2015 Signaler Posté(e) le 2 septembre 2015 Salut à tous, je viens d'écrire à peu près le même scénario et je voulais juste vous le soumettre. ce que je ne pense pas pouvoir faire c'est le timeout (je suis en V3.6). Ce que je veux faire, c'est entre 18 h et 7h du matin, si la luminosité de ma pièce passe en dessous de 10 lux, j'allume la lampe qui reste allumer tant qu'il y a du mouvement dans la pièce et si après 1 minute de calme rien ne se passe, elle s'éteint. Je vais l'essayer ce soir mais je voulais quand même votre avis. s'il vous plaît Merci les gars !!! --[[ %% properties 31 value 33 value %% globals --]] local delayedCheck0 = false; local tempDeviceState0, deviceLastModification0 = fibaro:get(31, "value"); local HeureActuelle = os.date("*t"); if (fibaro:countScenes() > 1) then fibaro:abort() end; fibaro:debug("Il est "..HeureActuelle['hour']..":"..HeureActuelle['min']) fibaro:debug("le capteur est safe depuis : "..((os.time() - deviceLastModification0)/60).." min") if ((HeureActuelle['hour']>= 18 or HeureActuelle['hour'] <= 7) and ( tonumber(fibaro:getValue(31, "value")) > 0 ) and ( tonumber(fibaro:getValue(33, "value")) <= 10 ) ) then fibaro:call(29, "turnOn"); fibaro:sleep(60*1000); end if (( tonumber(fibaro:getValue(31, "value")) == 0 ) and (os.time() - deviceLastModification0) >= 60) then delayedCheck0 = true; end if ( delayedCheck0 == true ) then fibaro:call(29, "turnOff") end
Yannick Posté(e) le 2 septembre 2015 Signaler Posté(e) le 2 septembre 2015 quelqu'un peu me dire également à quoi sert la variable locale tempDeviceState0 ?
Steven Posté(e) le 23 octobre 2015 Signaler Posté(e) le 23 octobre 2015 A rien :-) Pour info, si on utilise pas un retour de fonction en LUA, la norme voudrait que l'on fasse ceci : local _, deviceLastModification0 = fibaro:get(31, "value"); C'est plus simple pour la compréhension. Bon dans ce cas précis, il aurait fallu utiliser : local deviceLastModitication0 = fibaro:getModificationTime(31, "value") Ok, ok , .... je sors Ps. voici le code de getModificationTime(...) fibaro.getModificationTime = function(self, deviceID, propertyName) local _, modified = fibaro:get(deviceID, propertyName) return modified end 1
pepite Posté(e) le 23 octobre 2015 Signaler Posté(e) le 23 octobre 2015 yes, merki pour la fonction @steven ;-) top comme d'hab :13:
Yannick Posté(e) le 23 octobre 2015 Signaler Posté(e) le 23 octobre 2015 Je suis vraiment nul et j'ai du mal à piger !!! @steven comment tu mets en oeuvre ta fonction getModificationTime ? quoi mettre à quel endroit ? en particulier dans mon script... Comment tu l'introduit ? faut-il un "If" ou autre ? la déclarer comme une variable locale ? J'ai fait ça : --[[ %% properties 92 value 94 value %% globals --]] local id_lampe1= 29 local id_lampe2 = 171 local id_mouv_couloir = 92 local id_lux_couloir = 94 local delayedCheck0 = false; local deviceLastModitication0 = fibaro:getModificationTime(92, "value") local deviceLastModitication1 = fibaro:getModificationTime(29, "value") local deviceLastModitication2 = fibaro:getModificationTime(171, "value") local HeureActuelle = os.date("*t"); fibaro:getModificationTime = function(self, 92, "value") local _, modified = fibaro:get(92, "value") return modified end mais j'ai une erreur qui me lance ça : 8.lua.17; function arguments expected near "=" tu peux m'aider stp ??? merci j'ai fait
Yannick Posté(e) le 23 octobre 2015 Signaler Posté(e) le 23 octobre 2015 enfin en ligne 18 dans le cas présent
Berale64 Posté(e) le 23 octobre 2015 Auteur Signaler Posté(e) le 23 octobre 2015 En lignes 18 et 19 tu as mis une constante "92" alors qu'il faut une variable comme dans l'exemple de Steven.
pepite Posté(e) le 23 octobre 2015 Signaler Posté(e) le 23 octobre 2015 Comme ceci plutot, essaie ;-) la fonction doit etre definie avant d'etre appelee. En fait il est toujours preferable de prendre l'habitude de definir les variables et fonctions avant de les utiliser fibaro.getModificationTime = function(self, deviceID, propertyName) local _, modified = fibaro:get(deviceID, propertyName) return modified end local id_lampe1= 29 local id_lampe2 = 171 local id_mouv_couloir = 92 local id_lux_couloir = 94 local delayedCheck0 = false; local deviceLastModitication0 = fibaro:getModificationTime(92, "value") local deviceLastModitication1 = fibaro:getModificationTime(29, "value") local deviceLastModitication2 = fibaro:getModificationTime(171, "value") local HeureActuelle = os.date("*t");
Yannick Posté(e) le 23 octobre 2015 Signaler Posté(e) le 23 octobre 2015 c'est bien fibaro.getModificationTime et non fibaro:getModificationTime ? Je ne remplace rien dans la fonction ? ni deviceID ni propertyName ?
Yannick Posté(e) le 23 octobre 2015 Signaler Posté(e) le 23 octobre 2015 J'ai des erreurs : --[[ %% properties 92 value 94 value %% globals --]] fibaro.getModificationTime = function(self, deviceID, propertyName) local _, modified = fibaro:get(deviceID, propertyName) return modified end local id_lampe1= 29 local id_lampe2 = 171 local id_mouv_couloir = 92 local id_lux_couloir = 94 local delayedCheck0 = false; local deviceLastModitication0 = fibaro:getModificationTime(92, "value") local deviceLastModitication1 = fibaro:getModificationTime(29, "value") local deviceLastModitication2 = fibaro:getModificationTime(171, "value") local HeureActuelle = os.date("*t"); -- si il y a plus d'une instance en route alors on arrête if (fibaro:countScenes() > 1) then fibaro:abort() end; -- ça c'est pour la forme fibaro:debug("Il est "..HeureActuelle['hour']..":"..HeureActuelle['min']) fibaro:debug("le capteur est safe depuis : "..((os.time() - deviceLastModification0)/60).." min") fibaro:debug("la lumière est éteinte depuis : "..((os.time() - deviceLastModification1)/60).." min") àla ligne 29 et certainement 30 aussi : Attempt to perform arithmetics on global 'lastModificationTime0' a nil value
Yannick Posté(e) le 23 octobre 2015 Signaler Posté(e) le 23 octobre 2015 Bon allez Dodo on verra demain ! Bonne nuit les petits !
jjacques68 Posté(e) le 27 décembre 2015 Signaler Posté(e) le 27 décembre 2015 pour résumé, la fonction settimeout est en quelque sorte une boucle ou l'on défini la durée avant qu'elle ne se reproduise ? c'est bien cela ? Merci !!
Berale64 Posté(e) le 27 décembre 2015 Auteur Signaler Posté(e) le 27 décembre 2015 Non, ce n'est pas une boucle. C'est un bloc d'instructions mis en attente d'exécution. Le temps d'attente étant défini àla dernière ligne de la fonction. Voir exemple en page 1 de ce sujet.
jjacques68 Posté(e) le 27 décembre 2015 Signaler Posté(e) le 27 décembre 2015 je comprends pas bien... j'ai créé une scène toute simple pour que a 9h30 il m'affiche qqch dans debug. Elle marche pas. Si je prends une scène en bloc graphique, que je converti en LUA et que j'adapte pour faire pareil, ça marche. La différence est qu'il y a ce setTimeout et le %%event dans l'entête... c'est flou tout ça... pfffffff
jjacques68 Posté(e) le 27 décembre 2015 Signaler Posté(e) le 27 décembre 2015 ce bout de code ne marche pas, il n'y a pas de settimeout... --[[ %% autostart %% properties %% events %% globals --]] local heure2 = string.format("%02d", os.date("%H")) .. ":" .. string.format("%02d", os.date("%M")) if heure2 == "10:00" then fibaro:debug("condition ok") end celui-ci fonctionne : --[[ %% autostart %% properties %% events %% globals --]] function tempFunc() local currentDate = os.date("*t"); if ( ( (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "10:03") ) ) then fibaro:debug("ok") end setTimeout(tempFunc, 60*1000) end tempFunc() j'aimerai bien savoir pourquoi ?? si qqun a une explication ??
jjacques68 Posté(e) le 27 décembre 2015 Signaler Posté(e) le 27 décembre 2015 désolé de vous embêter, mais d'après ces essais : --[[ %% autostart %% properties %% events %% globals --]] function essai() fibaro:debug("entrée dans la fonction") local heure2 = string.format("%02d", os.date("%H")) .. ":" .. string.format("%02d", os.date("%M")) if heure2 == "10:22" then fibaro:debug("condition ok") --fibaro:abort() end setTimeout(essai, 20*1000) fibaro:debug("sortie de la fonction") end fibaro:debug("start") essai() fibaro:debug("end") le setTimeout fait belle et bien une boucle en arrière plan tant que rien ne l'arrête (ex : fibaro:abort()) ci-joint la fenêtre d'aperçu du debug...
Krikroff Posté(e) le 27 décembre 2015 Signaler Posté(e) le 27 décembre 2015 @jjacques68, ce n'est pas forcement évident mais oui le setTimeout n'est pas une boucle mais (pour faire simple) il exécute du code après un délai déterminé (après le timeout). Effectivement le second script produit une boucle mais c'est la logique du code qui produit une boucle et pas le setTimeout qui est la boucle . Le premier code ne marche pas en boucle car il n'est pas dans un bloc while (true) do end Bon courage 1
kinou.69 Posté(e) le 18 juin 2016 Signaler Posté(e) le 18 juin 2016 bonjour, je bloque sur une temporisation. Je désire utiliser la fonction setTimeout dans un bouton d'un module virtuel, mais cela ne marche pas. pouvez vous m'aider merci.
Lazer Posté(e) le 19 juin 2016 Signaler Posté(e) le 19 juin 2016 setTimeout => Uniquement dans les scènes. Dans les VD, tu n'as que l'instruction sleep()
kinou.69 Posté(e) le 20 juin 2016 Signaler Posté(e) le 20 juin 2016 Merci lazer, tu confirmes ce que je pensais je vais créer une scène alors.
lamparo Posté(e) le 1 novembre 2016 Signaler Posté(e) le 1 novembre 2016 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"); Bonsoir à vous, je désirerais créer un timer qui me donnerait le temps écoulé entre deux changement d'état d'un module. par exemple: "heure actuelle - heure du changement d'état du module"= durée depuis le changement Dans l'exemple cité ci-dessus, comment est renseignée le temps de modification d'état dans la variable "deviceLastModification0" Merci pour vos réponses JP
Messages recommandés