emanet Posté(e) le 11 août 2015 Signaler Posté(e) le 11 août 2015 Bonjour, Je débute dans les scripts lua et je me prends la tête depuis quelques jours sur un cas qui doit faire sourire les experts... Bref, c'est très simple... Je souhaterai enclencher à 23h et déclencher à 01h une scène et ceci tous les jours. Grâce aux différents tutos et docs trouvés sur le net, j'ai réussi à poser un script.. mais il est exécuté uniquement au démarrage de la box ou manuellement. Est-ce que vous pourriez m'indiquer ce qu'il manque pour qu'il soit exécuté automatiquement tous les jours. Mon script: --[[ %% autostart %% properties %% globals --]] local currentDate = os.date("*t") --stock la date et heure actuelle du système sous forme d'un tableau à l'intérieur de la variable currentDate fibaro:debug('Heure actuelle:' ..currentDate.hour) if (currentDate['hour'] >= 23 or currentDate['hour'] < 01) then fibaro:call(8, 'turnOn') else fibaro:call(8, 'turnOff') end Merci d'avance pour votre support ;-)
jojo Posté(e) le 12 août 2015 Signaler Posté(e) le 12 août 2015 je metterais ce script dans la manillon d'un VD (virtual device). La main loop s'exécute toutes les 3 sec
Berale64 Posté(e) le 12 août 2015 Signaler Posté(e) le 12 août 2015 Regarde si la case scène active est bien cochée. Pour apprendre, une approche simple est de faire un scène en mode block puis de convertir en LUA et analyser le résultat.
jojo Posté(e) le 12 août 2015 Signaler Posté(e) le 12 août 2015 la case scène active devrait être cochée, vu que la scène s'exécute bien au démarrage de la box. En fait il faut qu'elle vérifie "continuellement" l"heure, c'est pour cela que j'ai proposé le main loop. Mais j'y pense, il fait faire attention, car ainsi ton script s'exécutera toutes les 3 sec à partir de entre 23 h et 01h ? En fait de script, tu allumes une lumière. Perso, pour ne pas fatiguer inutilement le relais, je rajouterais une condition que la lampe soit éteinte pour l'allumer if (tonumber(fibaro:getValue(8, "value")) == 0 AND (currentDate['hour'] >= 23 or currentDate['hour'] < 01)) then
mprinfo Posté(e) le 12 août 2015 Signaler Posté(e) le 12 août 2015 Pour moi la scène ne s'exécute qu'une seule fois au démarrage Utilise GEA c'est bien plus facile lol Envoyé de mon SM-G900F en utilisant Tapatalk 1
jojo Posté(e) le 12 août 2015 Signaler Posté(e) le 12 août 2015 @mprinfo. Fait attention àmon coeur de vieillard. J'ai faillit avoir un arrêt cardiaque en lisant ton post. TOI qui ferait de la promotion de GEA ?????
mprinfo Posté(e) le 12 août 2015 Signaler Posté(e) le 12 août 2015 Oui mais depuis que pitp2 et lazer sont passer je suis un autre homme. Je sais enfin que j'en ai une petite ils ont jamais vu cela lol Envoyé de mon SM-G900F en utilisant Tapatalk 2
mprinfo Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 Pour la tienne utilise l'antenne de la HC2 ? mdr
HANSOLO Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 Déjàremplacée par une grande (antenne)
mprinfo Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 Bonjour, Je débute dans les scripts lua et je me prends la tête depuis quelques jours sur un cas qui doit faire sourire les experts... Bref, c'est très simple... Je souhaterai enclencher à 23h et déclencher à 01h une scène et ceci tous les jours. Grâce aux différents tutos et docs trouvés sur le net, j'ai réussi à poser un script.. mais il est exécuté uniquement au démarrage de la box ou manuellement. Est-ce que vous pourriez m'indiquer ce qu'il manque pour qu'il soit exécuté automatiquement tous les jours. Mon script: --[[ %% autostart %% properties %% globals --]] local currentDate = os.date("*t") --stock la date et heure actuelle du système sous forme d'un tableau à l'intérieur de la variable currentDate fibaro:debug('Heure actuelle:' ..currentDate.hour) if (currentDate['hour'] >= 23 or currentDate['hour'] < 01) then fibaro:call(8, 'turnOn') else fibaro:call(8, 'turnOff') end Merci d'avance pour votre support ;-) Revenons a nos moutons Le probléme de cette scène c'est qu'elle ne s'exécute qu'une seule fois il faut donc utilisé le fameux do while true avec un sleep ou alors utiliser la scéne horaires que j'ai partagé
emanet Posté(e) le 13 août 2015 Auteur Signaler Posté(e) le 13 août 2015 Merci pour vos nombreux commentaires! Alors, Regarde si la case scène active est bien cochée. Pour apprendre, une approche simple est de faire un scène en mode block puis de convertir en LUA et analyser le résultat. Oui la scéna active est bien cochée. Pas bête, je vais y penser mode bloc > LUA. Mode block, c'est du GEA? la case scène active devrait être cochée, vu que la scène s'exécute bien au démarrage de la box. En fait il faut qu'elle vérifie "continuellement" l"heure, c'est pour cela que j'ai proposé le main loop. Mais j'y pense, il fait faire attention, car ainsi ton script s'exécutera toutes les 3 sec à partir de entre 23 h et 01h ? En fait de script, tu allumes une lumière. Perso, pour ne pas fatiguer inutilement le relais, je rajouterais une condition que la lampe soit éteinte pour l'allumer if (tonumber(fibaro:getValue(8, "value")) == 0 AND (currentDate['hour'] >= 23 or currentDate['hour'] < 01)) then Bonne remarque jojo, en effet il faut que je rajoute cette condition pour éviter qu'elle s'écute en permanence. Mais mon problème pour l'instant s'est qu'elle ne s'éxecute pas en permanence justement... C'est quoi la "main loop"? Virtual Server? @mprinfo: la scéne ne s'execute en effet 1x seule fois, mais au démarrage de la box ou lancer la scène manuellement..
Shad Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 En même temps ce serait pas mal que tu dises àquoi sert ta scène pour qu'on mieux t'aider.
mprinfo Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 pour ceux qui n'utilisent pas GEA j'ai crée un scène qui mets a jours des VG toutes les 30mn cela permet de pouvoir déclencher une scéne a l'heure que l'on veut sans avoir a faire une do while true et le sleep ne dépassera jamais 30mn on utilise les vg pour le déclenchement et ensuite on filtre en fonction de l'heure que l'on veut Voici un exemple pour un déclenchement a 6h --[[ %% globals Heure --]] ---------------------------------------------------------------------- -- Contrôle si 1 Scène et déjà en cours et le déclencheur a 6h -- ---------------------------------------------------------------------- local NbreScene = fibaro:countScenes() local heureDeclenchement = tonumber(fibaro:getGlobalValue( "Heure" )) if NbreScene ~= 1 then fibaro:debug("Il y a déjà une instance en cours... ") fibaro:abort(); elseif heureDeclenchement ~= 6 then fibaro:debug("le déclencheur n'est pas 6h") fibaro:abort(); end
mprinfo Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 voila la scéne qui crée les déclenchements toute les 30 mn il faut 2 VG DemiHeure Heure --[[ %% autostart %% globals DemiHeure --]] fibaro:debug("Demarrage en cours...") local NbreScene = fibaro:countScenes() fibaro:debug("Nombres de Scéne en cours : "..NbreScene) fibaro:sleep(60*1000) local Minutes = tonumber(os.date("%M", os.time())) 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(Minutes) fibaro:setGlobal("DemiHeure", Minutes) if Minutes == 0 then local Heure = tonumber(os.date("%H", os.time())) fibaro:setGlobal("Heure", Heure) end
jojo Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 Bonne remarque jojo, en effet il faut que je rajoute cette condition pour éviter qu'elle s'écute en permanence. Mais mon problème pour l'instant s'est qu'elle ne s'éxecute pas en permanence justement... C'est quoi la "main loop"? Virtual Server? En fait je te propose de NE PAS utiliser de scène. Donc tu cliques sur le tab devices -> add or remove device -> add a Virtual Device Là tu dis que c'est un VD en LUA et tu rentres ton code dans la main loop. Cette main loop c'est "la même chose" qu'une scène avec une boucle infinie, car le code de cette main loop s'exécute toutes les 3 secondes
mprinfo Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 les Vd et les scénes sont complémentaires le soucis des VD c'est qu'il n'y aura aucune évolution
Berale64 Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 Voilà une scène toute simple pour commencer. --[[ %% autostart %% properties %% globals --]] while true do local currentDate = os.date("*t"); local TriggerTime = string.format("%02d",currentDate.hour)..":"..string.format("%02d",currentDate.min); local TriggerDay = currentDate.wday; if (TriggerTime == "23:00") then fibaro:call(8,turnOn); elseif (TriggerTime == "01:00") then fibaro:call(8,turnOff); end fibaro:sleep(60*1000); end Fait attention à Jojo c'est un obsédé du Vd ! Je n'utilise pas le jour de la semaine TriggerDay (valeur de 0 à 6) pour n'actionner que certains jours. 1
mprinfo Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 Et des icones lol si il savait ce que je suis entrain de faire avec les icônes..... Envoyé de mon SM-G900F en utilisant Tapatalk
jojo Posté(e) le 14 août 2015 Signaler Posté(e) le 14 août 2015 si je puis me permettre, je ferais une condition >= au lieu de ==, s'il y avait une retard quelconque dans la box et le test si la lampe est éteinte
emanet Posté(e) le 14 août 2015 Auteur Signaler Posté(e) le 14 août 2015 C'est super! Merci pour vos commentaires, je comprends de mieux et mieux l'environnement. Mais ce n'est pas encore gagné... En même temps ce serait pas mal que tu dises à quoi sert ta scène pour qu'on mieux t'aider. C'est pour enclencher la pompe de filtrage de la piscine, je souhaite le faire uniquement pendant les heures creuses. En fait je te propose de NE PAS utiliser de scène. Donc tu cliques sur le tab devices -> add or remove device -> add a Virtual Device Là tu dis que c'est un VD en LUA et tu rentres ton code dans la main loop. Cette main loop c'est "la même chose" qu'une scène avec une boucle infinie, car le code de cette main loop s'exécute toutes les 3 secondes Merci pour l'explicatif, en effet VD peut être très utile. Je prends conscience que les scènes ne sont pas exécuté en permanence... Voilà une scène toute simple pour commencer. --[[ %% autostart %% properties %% globals --]] while true do local currentDate = os.date("*t"); local TriggerTime = string.format("%02d",currentDate.hour)..":"..string.format("%02d",currentDate.min); local TriggerDay = currentDate.wday; if (TriggerTime == "23:00") then fibaro:call(8,turnOn); elseif (TriggerTime == "01:00") then fibaro:call(8,turnOff); end fibaro:sleep(60*1000); end Fait attention à Jojo c'est un obsédé du Vd ! Je n'utilise pas le jour de la semaine TriggerDay (valeur de 0 à 6) pour n'actionner que certains jours. Ton bout de code me plaît bien et en plus je le comprends... Il me semble correct, mais cela génère l'erreur suivante:
Berale64 Posté(e) le 15 août 2015 Signaler Posté(e) le 15 août 2015 Je viens de faire un copier/coller de la scène que je t'ai proposé et ça marche très bien. Tu as surement raté un truc en la copiant.
jojo Posté(e) le 15 août 2015 Signaler Posté(e) le 15 août 2015 vérifie les guillemets, souvent le copier/coller ne se fait pas comme il faut. remplace ceux que tu a collés et les retappants
emanet Posté(e) le 16 août 2015 Auteur Signaler Posté(e) le 16 août 2015 Le copier/coller n'a pas fonctionné correctement dans mon cas?!? J'ai essayé de retaper les guillemets, effacer les espaces, ... Bref, j'ai finalement retapé le code entièrement à la main... Et là , ça a fonctionné... Tout fonctionne à merveille! Voici le dernière version du script (owner: Berale24) avec juste quelques commentaires en plus pour comprendre le déroulement du programme. Pour les novice comme moi ;-) --[[ %% autostart %% properties %% globals --]] while true do local currentDate = os.date("*t"); local triggerTime = string.format("%02d",currentDate.hour)..":"..string.format("%02d",currentDate.min); local triggerDay = currentDate.wday; fibaro:debug("Contrôle conditions démarrage programme fitration piscine") if (triggerTime == "21:00") then fibaro:call(22, "turnOn"); fibaro:debug("Démarrage pompe de filtration piscine"); elseif (triggerTime == "01:00") then fibaro:call(22, "turnOff"); fibaro:debug("Arrêt pompe de filtration piscine"); end fibaro:debug("Programme filtration piscine en stand-by"); fibaro:sleep(60*1000); end Merci @jojo, @mpinfo et @Berale24 pour le support!
jojo Posté(e) le 16 août 2015 Signaler Posté(e) le 16 août 2015 content pour toi que ça fonctionne. Perso j'aurais fais une condition (>= "21:00" et >= "01:00") au lieu de (== "21:00" et == "01:00") car si pour une raison ou une autre (panne de courant, la box est allé prendre un apéro, ...) elle loupe l'heure précise ta pompe ne démarre pas ou ne s'arrête pas. Et pour éviter avec le >= que le relais trinque, faire un test si le relais est on ou off 1
Messages recommandés