Aller au contenu

Scene Lua - Trigger Horaire Sans Boucle While ... Do


mprinfo

Messages recommandés

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ène

Variable 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é par mprinfo
  • Upvote 5
Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...
  • 2 semaines après...

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

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

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

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

Lien vers le commentaire
Partager sur d’autres sites

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

  • 9 mois après...

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

×
×
  • Créer...