Aller au contenu

Exécution Automatique Scéne Tous Les Jours (Même Heure)


emanet

Messages recommandés

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 ;-)

Lien vers le commentaire
Partager sur d’autres sites

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

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é

Lien vers le commentaire
Partager sur d’autres sites

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..

Lien vers le commentaire
Partager sur d’autres sites

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

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

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

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 !  :D

 

Je n'utilise pas le jour de la semaine TriggerDay (valeur de 0 à  6) pour n'actionner que certains jours.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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 !  :D

 

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:

post-4853-0-34154200-1439579780_thumb.png

Lien vers le commentaire
Partager sur d’autres sites

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!

Lien vers le commentaire
Partager sur d’autres sites

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

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...