Aller au contenu

Pb Scene Qui Boucle


LMSI

Messages recommandés

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)
Lien vers le commentaire
Partager sur d’autres sites

Pour que ton code soit plus lisible, introduit le en cliquant sur le bouton <> juste en dessous du smily  :D

 

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...