Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

je metterais ce script dans la manillon d'un VD (virtual device). La main loop s'exécute toutes les 3 sec

Posté(e)

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.

Posté(e)

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
Posté(e)

Pour moi la scène ne s'exécute qu'une seule fois au démarrage

Utilise GEA c'est bien plus facile lol

Envoyé de mon SM-G900F en utilisant Tapatalk

  • Upvote 1
Posté(e)

@mprinfo.

Fait attention àmon coeur de vieillard.

J'ai faillit avoir un arrêt cardiaque en lisant ton post.

TOI qui ferait de la promotion de GEA ?????

Posté(e)

Oui mais depuis que pitp2 et lazer sont passer je suis un autre homme. Je sais enfin que j'en ai une petite ils ont jamais vu cela lol

Envoyé de mon SM-G900F en utilisant Tapatalk

  • Upvote 2
Posté(e)

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é

Posté(e)

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

Posté(e)

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
Posté(e)

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

Posté(e)

 

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

Posté(e)

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
Posté(e)

si je puis me permettre, je ferais une condition >= au lieu de ==, s'il y avait une retard quelconque dans la box et le test si la lampe est éteinte

Posté(e)

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

Posté(e)

vérifie les guillemets, souvent le copier/coller ne se fait pas comme il faut. remplace ceux que tu a collés et les retappants

Posté(e)

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!

Posté(e)

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
×
×
  • Créer...