mprinfo Posté(e) le 10 mai 2015 Signaler Posté(e) le 10 mai 2015 (modifié) Objectif : Crée des déclencheurs (trigger) toutes les 30mn sans avoir besoin de faire une boucle "while true do" afin de mettre a jours 2 variables globale qui nous servirons a déclencher des scènes. Méthode : Utiliser la variable Globale que l'on mets a jour pour lancer la scèneVariable Globale a créée : Heure DemiHeure Ce script va mettre a jour : La variable DemiHeure sera mis a jour à chaque fois que les minutes seront égales a 0 ou 30 La variable Heure sera mis a jour si les minutes sont égale à 0 Nous aurons donc 1 déclenchement par heure pour la VG: Heure et 2 déclenchements par heure pour la VG DemiHeure Voici le script (a copier dans une scène) : --[[ %% autostart %% globals DemiHeure --]] local Minutes = tonumber(os.date("%M", os.time())) local trigger = fibaro:getSourceTrigger() if (trigger['type'] == 'autostart') then fibaro:setGlobal("DemiHeure", "0"..Minutes) fibaro:debug("Demarrage via autostart") fibaro:abort() end fibaro:debug("Demarrage en cours...") local NbreScene = fibaro:countScenes() fibaro:debug("Nombres de Scéne en cours : "..NbreScene) fibaro:sleep(60*1000) local Pause = 0 if Minutes > 30 then Pause = 60 - Minutes else Pause = 30 - Minutes end fibaro:debug("Mise a jour Variable : "..Pause.."mn") fibaro:sleep(Pause*60*1000) Minutes = tonumber(os.date("%M", os.time())) fibaro:debug("mise a jour VG DemiHeure"..Minutes) fibaro:setGlobal("DemiHeure", Minutes) if Minutes == 0 then local Heure = tonumber(os.date("%H", os.time())) fibaro:setGlobal("Heure", Heure) fibaro:debug("mise a jour VG Heure"..Minutes) end Exemple d'utilisation : Je veux que ma scène se lance à 17h --[[ %% globals Heure --]] local heure = fibaro:getGlobalValue("Heure") if heure ~= 17 then; fibaro:abort(); end fibaro:debug("le script peut être exécuté ") Un peut plus compliquer --[[ %% globals DemiHeure --]] local trigger = fibaro:getSourceTrigger() if (trigger['type'] == 'global') then nomTrigger = trigger['name'] valeurTrigger = tonumber(fibaro:getGlobalValue(nomTrigger)) print("Nom du déclencheur = ", nomTrigger, " - Minutes : ", valeurTrigger) if valeurTrigger ~= 17 then; fibaro:abort(); end else fibaro:debug("La scéne ne peut être lancer que par une Variable Globale") fibaro:abort(); end if nomTrigger="Heure" and valeurTrigger ~= 17 then fibaro:abort() end Modifié le 1 décembre 2015 par mprinfo 5
Rocketlud Posté(e) le 10 mai 2015 Signaler Posté(e) le 10 mai 2015 Merci pour ce tuto super intéressant
pepite Posté(e) le 11 mai 2015 Signaler Posté(e) le 11 mai 2015 Excellent mrpinfo, merciiiiiiiii le king of tuto ;-)
kinou.69 Posté(e) le 26 août 2015 Signaler Posté(e) le 26 août 2015 bonjour, j'ai créé une scène avec le script et les variables globales Heure et Demiheure. Seulement, les VG ne change d'état qu'une seule fois. une fois le premier changement des VG, la scéne n'est plus exécutée.
mprinfo Posté(e) le 26 août 2015 Auteur Signaler Posté(e) le 26 août 2015 tu as bien mis les triggers ? car c'est eux qui relance la scène
kinou.69 Posté(e) le 27 août 2015 Signaler Posté(e) le 27 août 2015 J'ai mis dans une scène le premier script du post. celui qui permet de faire varier les variables Heure et DemiHeure. d’après ce que j'ai compris, le trigger de cette scène est la la variable Heure qu'il y a ligne 5. Celle-ci permet automatiquement de relancer la scène et ainsi de mettre a jour les VG. Ma scène ne s'exécute qu'une seule fois. Ce matin, a 9h00, j'avais Heure = 21 et DemiHeure = 30 avant que j'exécute la scène. les VG se sont mise a jour, mais la scène n'est plus exécutée maintenant.
mprinfo Posté(e) le 27 août 2015 Auteur Signaler Posté(e) le 27 août 2015 regarde dans le dashboard si la scène est bien lancer Envoyé de mon SM-G900F en utilisant Tapatalk
kinou.69 Posté(e) le 27 août 2015 Signaler Posté(e) le 27 août 2015 Justement c'est en regardant le dashboard que je sais si la scène est exécutée. Et ne l'est pas.
mprinfo Posté(e) le 27 août 2015 Auteur Signaler Posté(e) le 27 août 2015 Je crois qu'il y a un petit bug dans la scène dsl essai de lancer la scène dans la 1er demi heure si cela fonctionne je corrigerai le code Envoyé de mon SM-G900F en utilisant Tapatalk
kinou.69 Posté(e) le 27 août 2015 Signaler Posté(e) le 27 août 2015 dans le dashboard, quand j'exécute une scène, j'ai le bouton gris play qui devient un bouton un bouton bleu stop. Jusque la, je trouve ça normal. Ensuite, je ferme dashboard puis je le réouvre. La scène precedement executée se retrouve avec le bouton gris play.
mprinfo Posté(e) le 28 août 2015 Auteur Signaler Posté(e) le 28 août 2015 Je viens de faire de nouveau test aucun soucis avec le code
kinou.69 Posté(e) le 28 août 2015 Signaler Posté(e) le 28 août 2015 dans le Dashboard, la scène doit toujours être executee (bouton bleu)? Comment faut il déclarer Heure et DemiHeure : s'agit il de variables prédéfinies?
mprinfo Posté(e) le 28 août 2015 Auteur Signaler Posté(e) le 28 août 2015 Non des variables globale normale Envoyé de mon SM-G900F en utilisant Tapatalk
kinou.69 Posté(e) le 28 août 2015 Signaler Posté(e) le 28 août 2015 C'est en variables globales qu'elles sont déclarées. Je laisse tombé, je faire que des scènes basiques en bloc. Merci pour ton aide mprinfo.
kinou.69 Posté(e) le 28 août 2015 Signaler Posté(e) le 28 août 2015 je passe des heures sur la box àla programmer et rien ne marche. cela me désespère et je me demande pourquoi je l'ai acheté. une HCL m'aurait plus convenu. Je suis frustré car je me rend bien compte du potentiel de la HC2, c'est dommage. Heureusement que le forum existe car on peut compter sur votre aide.
mprinfo Posté(e) le 28 août 2015 Auteur Signaler Posté(e) le 28 août 2015 C'est normal c'est le début il faut que tu t'habitues a l'interface et au termes qui sont utilisé sur le forum c'est pas évident qu'en on commence
kinou.69 Posté(e) le 29 août 2015 Signaler Posté(e) le 29 août 2015 cette nuit j'ai mis en trigger en plus la variable DemiHeure et cela semble fonctionner. Ma box a planté ce matin vers 6H30. Je pense que j'ai eu autre scène (alarme automatique) a débugger, plutot a faire débugger. Par contre, je ne comprends pas pourquoi cela ne fonctionne pas avec uniquement la variable Heure en trigger. si tout fonctionne bien, je poursuivrais avec ton tuto Scene LUA - ouverture et fermeture des volets Merci
mprinfo Posté(e) le 29 août 2015 Auteur Signaler Posté(e) le 29 août 2015 Ah ok il faut les 2 trigger càla scène doit ce lancer toutes les 30 mn Envoyé de mon SM-G900F en utilisant Tapatalk
mprinfo Posté(e) le 1 décembre 2015 Auteur Signaler Posté(e) le 1 décembre 2015 Ajout d'une correctif suite a un bug rencontré, lorsque l'on mets une VG àjour avec la même valeur il n'y a pas de déclenchement et la scène s’arrête voici donc un correctif local Minutes = tonumber(os.date("%M", os.time())) local trigger = fibaro:getSourceTrigger() if (trigger['type'] == 'autostart') then fibaro:setGlobal("DemiHeure", "0"..Minutes) fibaro:debug("Demarrage via autostart") fibaro:abort() end J'ai mis a jour le poste 1
kinou.69 Posté(e) le 26 janvier 2016 Signaler Posté(e) le 26 janvier 2016 Bonjour, depuis la mise a jour V4.70, j'ai un problème avec cette scène. La variable globale "Heure" ne change plus, uniquement la variable "DemiHeure". J'en ai profité du coup pour ajouter le correctif du dernier message, mais cela ne change rien. de plus dans le debug, il est marqué que la scène tourne deux fois. une idée!? Merci
kinou.69 Posté(e) le 26 janvier 2016 Signaler Posté(e) le 26 janvier 2016 J'ai l'impression que c'est les variables Heure et DemiHeure qui n'exécute pas la scène. Sinon c'est le nombre de scène exécutée qui la fait planter.
mprinfo Posté(e) le 26 janvier 2016 Auteur Signaler Posté(e) le 26 janvier 2016 J'ai eu aussi quelques soucis avec cette scène car a priori les triggers ne fonctionne pas toujours bien j'ai donc utilisé la fameuse boucle et plus aucun soucis --[[ %% autostart --]] fibaro:debug("Demarrage en cours...") local NbreScene = fibaro:countScenes() if NbreScene > 1 then fibaro:abort() end local Minutes = tonumber(os.date("%M", os.time())) local Pause = 0 -------------------------------------------------------------- function CalPause(Minutes) if Minutes > 30 then Pause = 60 - Minutes fibaro:debug("Mise a jour dans "..Pause.." Minutes") fibaro:sleep(Pause*60*1000) Minutes = tonumber(os.date("%M", os.time())) local Heure = tonumber(os.date("%H", os.time())) fibaro:debug(string.format("mise a jour VG Heure = %s h DemiHeure = %s mn",Heure , Minutes)) fibaro:setGlobal("DemiHeure", Minutes) fibaro:setGlobal("Heure", Heure) else Pause = 30 - Minutes fibaro:debug("Mise a jour dans "..Pause.." Minutes") fibaro:sleep(Pause*60*1000) Minutes = tonumber(os.date("%M", os.time())) Heure = tonumber(os.date("%H", os.time())) fibaro:debug(string.format("mise a jour VG DemiHeure = %s mn", Minutes)) fibaro:setGlobal("DemiHeure", Minutes) end end CalPause(Minutes) fibaro:debug("Demmarrage boucle while true do ....") while true do fibaro:sleep(60*1000) Minutes = tonumber(os.date("%M", os.time())) CalPause(Minutes) end
vjoubin Posté(e) le 31 octobre 2016 Signaler Posté(e) le 31 octobre 2016 Bonjour à tous je souhaite ouvrir mes volets à un horaire different en fonction de la variable JourChome voici ce que j ai fait cela vous semble t il correct? --[[ %% autostart %% properties %% events %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); function tempFunc() local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( (JourChome == NON) and os.date("%H:%M", os.time()-30*60) == fibaro:getValue(1, "sunriseHour")) or ((JourChome == OUI) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "08:45")) then fibaro:call(112, "open"); fibaro:call(255, "pressButton", "2"); setTimeout(function() fibaro:startScene(33); end, 10000) setTimeout(function() fibaro:startScene(32); end, 15000) setTimeout(function() fibaro:startScene(34); end, 20000) setTimeout(function() fibaro:startScene(37); end, 25000) end setTimeout(tempFunc, 60*1000) end if (sourceTrigger["type"] == "autostart") then tempFunc() else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other" ) then fibaro:call(112, "open"); setTimeout(function() fibaro:startScene(33); end, 10000) setTimeout(function() fibaro:startScene(32); end, 15000) setTimeout(function() fibaro:startScene(34); end, 20000) setTimeout(function() fibaro:startScene(37); end, 25000) end end MERCI por votre aide
Messages recommandés