Aller au contenu

Scene LUA pour effectuer une action si ouverture d’une fenêtre plus d’un certain temps


Messages recommandés

Posté(e)

Bonjour, je voudrais effectuer une action si ma fenêtre reste ouverte plus de 10 secondes. Je maîtrise bien le script pour effectuer l’action immédiatement quand la fenêtre s'ouvre, mais pas au bout de 10 secondes :-(

Auriez-vous un script pour m’aider?

Bien cordialement

Posté(e) (modifié)

Bonjour,

La première chose est de commencer ton script par le trigger de celui-ci : le module qui s'activera lorsque la fenêtre s'ouvrira.

--[[
%% properties
10 value
--]]

Ce module doit avoir une valeur "contact ouvert" (fenêtre ouverte) et une valeur "contact fermé" (fenêtre fermée). Il faut donc ensuite vérifier l'état de ce contact, puisque la vérification n'est pas nécessaire si la porte vient d'être fermée.

if fibaro:getValue(10, "value") == "contact ouvert" then fibaro:abort(); end

La suite du code vérifiera toutes les x secondes si la fenêtre est encore ouverte. Si elle est ouverte depuis plus de x secondes -> action.

Pour cela, il faut tu te renseignes sur la fonction setTimeout() qui te permettra de temporiser une partie de ton script.

 

Ta scène pourrait ressembler à cela (non testée et à ajuster avec les bonnes valeurs/bons ids) :

--[[
%% properties
10 value
--]]

local duree = 10; -- Actions effectuées après x secondes d'ouverture
local intervalle = 1; -- Vérification toutes les x secondes
local HeureOuverture = os.time();

local function actions()
  -- Liste actions à effectuer si toujours ouverte après valeur de la variable duree
end

local function verif()
  if fibaro:getValue(10, "value") == "contact fermé" or fibaro:countScene() > 1 then
    fibaro:debug("Fenêtre fermée ou scène déjà active. Arrêt de cette instance.");
    fibaro:abort();
  end
  local diff = tonumber(os.time() - HeureOuverture);
  if diff <= tonumber(duree) then`
    fibaro:debug("Fenêtre ouverte depuis "..diff.." secondes");
    setTimeout(verif,intervalle*1000)
  else
    actions();
    fibaro:debug("Actions effectuées");
  end
end

verif();

 

Modifié par J3R3M
×
×
  • Créer...