LMSI Posté(e) le 22 août 2015 Signaler Posté(e) le 22 août 2015 Bonjour à tous, J'ai écrit un scène, déclenchée en autostart uniquement, qui check toutes les heures si nous passons en MODE JOUR ou MODE NUIT. Bon, ça, ça fonctionne... Spécificité, en MODE NUIT, je demande l'exécution d'une scène supplémentaire "Nuit" qui est chargée de réaliser quelques actions, via IPX800, sur mon vieux réseau EIB TEBIS TS. Bref, cette scène s'exécute bien à l'heure du passage MODE NUIT mais le problème, c'est qu'elle boucle toutes les heures et je n'ai rien demandé de tel... Quelqu'un a une idée. Voici mes 2 scènes en questions: Celle qui tourne toutes les minutes: --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); function tempFunc() local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); fibaro:debug("ANALYSE="..string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min).." levé "..fibaro:getValue(1, "sunriseHour").." couché "..fibaro:getValue(1, "sunsetHour")) if string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == fibaro:getValue(1, "sunriseHour") then fibaro:setGlobal("MODE_JN", "Jour"); fibaro:debug("Passage en mode JOUR") fibaro:call(21, "setProperty", "ui.status.value", "Jour depuis "..fibaro:getValue(1, "sunriseHour")); end if string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == fibaro:getValue(1, "sunsetHour") then fibaro:setGlobal("MODE_JN", "Nuit"); fibaro:debug("Passage en mode NUIT") fibaro:call(21, "setProperty", "ui.status.value", "Nuit depuis "..fibaro:getValue(1, "sunriseHour")); fibaro:debug("Execution scénario sur volets") fibaro:startScene(31) 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 if string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == fibaro:getValue(1, "sunriseHour") then fibaro:setGlobal("MODE_JN", "Jour"); fibaro:debug("Passage en mode JOUR") fibaro:call(21, "setProperty", "ui.status.value", "Jour depuis "..fibaro:getValue(1, "sunriseHour")); end if string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == fibaro:getValue(1, "sunsetHour") then fibaro:setGlobal("MODE_JN", "Nuit"); fibaro:debug("Passage en mode NUIT") fibaro:call(21, "setProperty", "ui.status.value", "Nuit depuis "..fibaro:getValue(1, "sunsetHour")); end end end Pour la suivante: --[[ %% properties %% globals --]] local trigger=fibaro:getSourceTrigger() local _ACTION if fibaro:countScenes()>1 then fibaro:debug("Dépassement du nombre d'éxécution...") fibaro:abort() end -- Eclairage entrée fibaro:call(83, "pressButton", "2") -- Extérieur ON math.randomseed(os.time()) -- Pour ne pas avoir toujours les mêmes nbres local _t1=math.random(10,14) math.randomseed(os.time()) local _t2=math.random(6,12) math.randomseed(os.time()) local _t3=math.random(7,12) fibaro:debug("Début fermeture dans ".._t1.."mn (pause ".._t2.."s), puis totale ".._t3.."mn plus tard") fibaro:sleep(_t1*60*1000) -- Pause de 10 à 14mn -- Fermeture partielle fibaro:call(18, "pressButton", "4") fibaro:sleep(_t2*1000) -- Pause de 6 à 12s fibaro:call(18, "pressButton", "4") -- NOTIFICATION PUSHOVER fibaro:debug("Fermeture partielle de tous les volets") fibaro:setGlobal("PushOver_message", "Fermeture partielle de tous les volets") fibaro:setGlobal("PushOver_titre", "ACTION VOLETS") fibaro:setGlobal("PushOver_priorite", "0") fibaro:setGlobal("PushOver_son", "falling") fibaro:call(6, "pressButton", "1") -- Fermeture complète fibaro:sleep(_t3*60*1000) -- Pause de 7 à 12mn fibaro:call(18, "pressButton", "4") -- NOTIFICATION PUSHOVER fibaro:debug("Fermeture totale de tous les volets") fibaro:setGlobal("PushOver_message", "Fermeture totale de tous les volets") fibaro:setGlobal("PushOver_titre", "ACTION VOLETS") fibaro:setGlobal("PushOver_priorite", "0") fibaro:setGlobal("PushOver_son", "pushover") fibaro:call(6, "pressButton", "1") fibaro:call(83, "pressButton", "3") -- Extérieur OFF fibaro:killScenes(31)
jojo Posté(e) le 22 août 2015 Signaler Posté(e) le 22 août 2015 Pour que ton code soit plus lisible, introduit le en cliquant sur le bouton <> juste en dessous du smily Maintenant, je ne comprends pas pourquoi tu a mis ceci : if (sourceTrigger["type"] == "autostart") then tempFunc() else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if startSource["type"] == "other" then if string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == fibaro:getValue(1, "sunriseHour") then fibaro:setGlobal("MODE_JN", "Jour"); fibaro:debug("Passage en mode JOUR") fibaro:call(21, "setProperty", "ui.status.value", "Jour depuis "..fibaro:getValue(1, "sunriseHour")); end if string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == fibaro:getValue(1, "sunsetHour") then fibaro:setGlobal("MODE_JN", "Nuit"); fibaro:debug("Passage en mode NUIT") fibaro:call(21, "setProperty", "ui.status.value", "Nuit depuis "..fibaro:getValue(1, "sunsetHour")); end end end j'aurais simplement fait appel à ta fonction. Je ne connais pas cette instruction, setTimeout(tempFunc, 60*1000) mais elle doit dire de ré-exécuter les fonction tempFunc après 60 sec ? (je ne vois pas où il serait dit toutes les heures ? Je te crois, mais montre moi où. En tout cas, si la deuxième scène s'exécute toutes les heures, c'est qu'elle est appelée toutes les heures par le première ?
LMSI Posté(e) le 22 août 2015 Auteur Signaler Posté(e) le 22 août 2015 Concernant cette fonction, elle est effectivement basée sur un rimer... J'ai mis des traces un peu partout pour essayer de localiser l'origine de l'appel àla fonction NUIT et rien ne laisse apparaître qu'elle le soit par la première!! La seconde est réellement déclenchée toutes les heures piles!! Ce qui me gêne c'est l'action déclenchée: fermeture des volets, même en journée. J'ai mis un test depuis pour contour ce dernier point mais ça ne me plait pas!! Si je commence mes dev sur cette nouvelle box sans maîtriser ce qui se passe, c'est un peu contrariant. Y a-t-il des infos de trace àrécupérer pour connaître l'appelant de cette fonction?
mprinfo Posté(e) le 22 août 2015 Signaler Posté(e) le 22 août 2015 je pense qu'il y a eu un conversion d'une scène bloc Pour la scène jour nuit tu peux utilisé la tiens ou utilisé celle que j'ai partagé elle est optimisé et l'on peut faire des décalages par rapport au levée et au couché je remercie la passage le pére Steven qui ma corrigé le code afin qu'il soit propre Ensuite il faut utilisé un trigger dans ta 2 scènes par exemple une variables globale comme "jour_nuit" qui a 2 état "Jour" et "Nuit" cela lancera la scéne a chaque fois que la variable globale va changer d'etat soit 2 fois par jour chez nous et oui on est pas dans le pole sud lol Il suffit de mettre un if pour dit que si "jour_nuit" = "Jour" on stop la scéne je te conseil de lire ces tutos qui sont de moi ou steven http://www.domotique-fibaro.fr/index.php/topic/4642-scene-lua-jour-nuit-avec-d%C3%A9calge-possible-et-optimisation-du-sleep/ http://www.domotique-fibaro.fr/index.php/topic/4439-cr%C3%A9e-une-variable-globale-ou-une-variable-globale-predefinie-en-lua/ http://www.domotique-fibaro.fr/index.php/topic/4153-tout-sur-le-d%C3%A9clenchement-dune-sc%C3%A9ne-en-lua-by-steven/ Tu verras est surtout tu vas comprendre comment cela fonctionne PS : Interrogation écrite demain soir lol
LMSI Posté(e) le 23 août 2015 Auteur Signaler Posté(e) le 23 août 2015 Merci pour vos retour. Une bonne nuit de sommeil m'a permis de constater qu'une "vieille" scène BLOC créée pour voir comment ça se passait était à l'origine de cet appel répété. Je l'ai supprimée et c'est parti!! Dans mon affollement, je pensais qu'il y avait un crontab ou autre process horaire qui pouvait tourner sur cette box encore inconnu, dans son utilisation, pour moi.
Messages recommandés