Aller au contenu

Intégration Multiple Lua


chrispec

Messages recommandés

  • Réponses 58
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

Images postées

J'ai trouvé mon erreur ... je voulais changer la ligne 13 ... alors que c'était la valeur 'Nuit' de la variable que je devais changer ...

--[[
%% properties

%% globals
--]]

-- Recupération de la valeur de la variable global Jour_Nuit
local num = fibaro:countScenes () -- nombres d'instances en cours d'excution de la sceme
fibaro:debug("Nombre de scènes en cours = " ..num)
 
if (num == 1) then
local J_N = fibaro:getGlobalValue( "Jour_Nuit" );
fibaro:debug("Jour_Nuit = " ..J_N)
 
 
-- Fermeture des volets des chambres et allumage lumieres rdc
local Id = {}
local IdValue = {}
 
if J_N == "Nuit+20mn" then
    
Id = {16, 18, 20, 28, 34} -- id volets et lumieres
IdValue = {0, 0, 0, TurnOn, TurnOn} -- Valeur 0=Fermer - 99 = Ouvert
VoletPorte = {22, 24, 26} -- Volet si porte fermée
Detecteur = {107, 115, 111} -- detecteur d'ouverture
fibaro:debug("Nuit")
end
 
for i = 1,#Id do
local TestName = fibaro:getName(Id[i])
local TestValue = fibaro:getValue(Id[i], "value")
if IdValue[i] == "open" or IdValue[i] == "close" or IdValue[i] == "turnOn" or IdValue[i] == "turnOff" then
fibaro:call(Id[i], IdValue[i]);
else
fibaro:call(Id[i], "setValue", IdValue[i]); -- Commande Module
end
if i <= #VoletPorte and (tonumber(fibaro:getValue(Detecteur[i], "value")) == 0 ) then
fibaro:call(Detecteur[i], "close");
end
end
else
fibaro:debug("Nombre de Scénes en cours " ..num)
end


Lien vers le commentaire
Partager sur d’autres sites

tu as une erreur ligne 21 Nuit et la valeur (string) de Jour_Nuit tu ne peux pas ajouter 20mn

fibaro:sleep(20*60*1000);

il faut savoir que Jour_Nuit et le déclencheur de ton script la scéne ne sera exécuter que lorsque Jour_Nuit change de valeur

Lien vers le commentaire
Partager sur d’autres sites

Par contre j'ai beau tester ... Le Debug me ressort la valeur Jour à  la variable Jour_Nuit ?

Et pourtant j'ai bien enregistré la scène avec 20 minutes ...après le couché du soleil ???

 

Cela avait marché avec la valeur Nuit (dans le DEBUG). Mais comme la nuit était tombé et je testais plus tard ... pour voir le fonctionnement en réel ... j'ai rajouté 20mn puis 90 lol ...

Lien vers le commentaire
Partager sur d’autres sites

pour mettre a jour la variable Jour_Nuit moi j'utilise ce script

--[[
%% autostart
%% properties
%% globals
--]]
 
while true do
  local Var_Jour = os.date("%H:%M", os.time()+15*60) -- 15 minute avant
  local Var_Nuit = os.date("%H:%M", os.time()-15*60) -- 15 minute Apres  
  local currentDate = os.date("*t");
  local Jour = fibaro:getValue(1, "sunriseHour")
  local Nuit = fibaro:getValue(1, "sunsetHour")  
  
  --fibaro:debug("Jour : " ..Jour .." - Var_Jour = " ..Var_Jour)
  --fibaro:debug("Nuit : " ..Nuit .." - Var_Nuit = " ..Var_Nuit)
  
  if ( Var_Jour == Jour ) then
     fibaro:setGlobal("Jour_Nuit", "Jour");
  elseif ( Var_Nuit == Nuit ) then
     fibaro:setGlobal("Jour_Nuit", "Nuit");
  end
  
  fibaro:sleep(59*1000); -- s'execute toutes les minutes
end


Lien vers le commentaire
Partager sur d’autres sites

@Moicphil

 

A la création d'un nouvelle scène en LUA, j'ai:

sceneLUA01

 

Je coche 'Lancer au démarrage'.

 

Une fois le code LUA écrit, j'enregistre et ensuite, j'ai:

sceneLUA02

 
Et 'Lancer au démarrage' a disparu ... Normal ?
Lien vers le commentaire
Partager sur d’autres sites

Comme dit phil pour une scene lua il n'y a pas de case a coché démarrer avec hc2 il faut mettre dans l entête de la scène %%autostart

Si la scene et actionnée par un trigger ou autre ce n'est pas utile de mettre autostart

Envoyé de mon SM-G900F en utilisant Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

  • 5 semaines après...

@mprinfo

 

Trois questions pour toi.

 

En utilisant ton code:

--[[
%% autostart
%% properties

%% globals
Jour_Nuit
--]]

fibaro:sleep(59*1000); -- s'execute toutes les minutes

-- Recupération de la valeur de la variable global Jour_Nuit
local num = fibaro:countScenes () -- nombres d'instances en cours d'excution de la scene
fibaro:debug("Nombre de scènes en cours = " ..num)
 
if (num == 1) then
   local J_N = fibaro:getGlobalValue( "Jour_Nuit" );
   fibaro:debug("Jour_Nuit = " ..J_N)
 
 
   -- Fermeture des volets des chambres et allumage lumieres rdc
   local Id = {}
   local IdValue = {}
 
   if J_N == "Nuit" then
      Id = {16, 18, 20, 28, 34} -- id BSO ETAGE et LUMIERES RDC (BSO: 16:ch.parents; 18:ch.Marie; 20:ch.Maà«l) (Lumieres: 28:cuisine; 32: séjour)
      IdValue = {0, 0, 0, TurnOn, TurnOn} -- Valeur 0=Fermer - 99 = Ouvert
      VoletPorte = {22, 24, 26} -- Volet si porte fermée (BSO: 22:cuisine; 24:salon; 26:séjour)
      Detecteur = {107, 115, 111} -- detecteur d'ouverture (FGK: 107:cuisine; 115:salon; 111: séjour)
      fibaro:debug("Nuit")
   end
 
    for i = 1,#Id do
       local TestName = fibaro:getName(Id[i])
       local TestValue = fibaro:getValue(Id[i], "value")
       if IdValue[i] == "open" or IdValue[i] == "close" or IdValue[i] == "turnOn" or IdValue[i] == "turnOff" then
 	      fibaro:call(Id[i], IdValue[i]);
       else
          fibaro:call(Id[i], "setValue", IdValue[i]); -- Commande Module
       end
       if i <= #VoletPorte and (tonumber(fibaro:getValue(Detecteur[i], "value")) == 0 ) then
          fibaro:call(Detecteur[i], "close");
       end
    end
else
	fibaro:debug("Nombre de scènes en cours " ..num)
end

Les volets sans détecteur se ferment à  la tombée de la nuit. (l'heure du coucher du soleil: 20h22... ils se ferment à  20h10 ??? d'où peut venir ce décalage ?

 

Les volets avec détecteur ne se ferment pas: pour tester, je laisse ouvert une porte fenêtre ...

 

Est-ce que le fait qu'un seul détecteur soit 'ouvert' ne ferme pas ni le volet concerné, ni les autres équipés de détecteur FGBS ???

 

Et pourrais tu m'expliquer le code:

    for i = 1,#Id do
       local TestName = fibaro:getName(Id[i])
       local TestValue = fibaro:getValue(Id[i], "value")
       if IdValue[i] == "open" or IdValue[i] == "close" or IdValue[i] == "turnOn" or IdValue[i] == "turnOff" then
 	      fibaro:call(Id[i], IdValue[i]);
       else
          fibaro:call(Id[i], "setValue", IdValue[i]); -- Commande Module
       end
       if i <= #VoletPorte and (tonumber(fibaro:getValue(Detecteur[i], "value")) == 0 ) then
          fibaro:call(Detecteur[i], "close");
       end
    end

Merci de ton retour.

Lien vers le commentaire
Partager sur d’autres sites

Le code de la scène Jour_Nuit:

--[[
%% autostart
%% properties
%% globals
Jour_Nuit
--]]
 
while true do
  local Var_Jour = os.date("%H:%M", os.time()-15*60) 
  local Var_Nuit = os.date("%H:%M", os.time()+15*60)   
  local currentDate = os.date("*t");
  local Jour = fibaro:getValue(1, "sunriseHour")
  local Nuit = fibaro:getValue(1, "sunsetHour")  
 
  fibaro:debug("Jour : " ..Jour)
  fibaro:debug("Nuit : " ..Nuit)
 
  if ( Var_Jour == Jour ) then
     fibaro:setGlobal("Jour_Nuit", "Jour");
  elseif ( Var_Nuit == Nuit ) then
     fibaro:setGlobal("Jour_Nuit", "Nuit");
  end
 
  fibaro:sleep(59*1000); -- s'execute toutes les minutes
end

Et la ligne 10 vient de :

 

http://www.domotique-fibaro.fr/index.php/topic/4218-sunrisehour-sunsethour-osdate-et-variable-jour-nuit/?hl=jour_nuit

 

...

voili ...

Lien vers le commentaire
Partager sur d’autres sites


×
×
  • Créer...