Aller au contenu
chrispec

Intégration Multiple Lua

Recommended Posts

tu avais oublier un end et la boucle for next pour le traitement des tables

Partager ce message


Lien à poster
Partager sur d’autres sites

voila ce que me sort le DEBUG:

 

[DEBUG]: Nombre de scènes en cours = 1

[ERROR]: line 13: attempt to concatenate local 'J_N' (a nil value)

fibaro:debug("Jour_Nuit = " ..J_N)

Partager ce message


Lien à poster
Partager sur d’autres sites

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


Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

no comprendo jefe ?

 

A la variable Jour_Nuit, j'ai ajouté la valeur Nuit+20mn

 

J'ai créé une scène :

 

Nuit 20mn

Partager ce message


Lien à poster
Partager sur d’autres sites

A ok je pouvais pas savoir☺

Envoyé de mon SM-G900F en utilisant Tapatalk

Partager ce message


Lien à poster
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 ...

Partager ce message


Lien à poster
Partager sur d’autres sites

Si tu veux aussi ouvrir tes volets le matin tu peux le faire dans cette scene en ajoutant quelques lignes si cela t intéresse dit le moi

Envoyé de mon SM-G900F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

As tu exécuter la scene et sur cocher la case executer au demarrage

Envoyé de mon SM-G900F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour la scène Nuit+20mn ? je viens de la cocher.

 

Le DEBUG me ressort une valeur 'nil' ... vide, nada, 0 ?

 

Par contre pour la scène des volets, démarré en LUA, je n'ai pas cette case.

Partager ce message


Lien à poster
Partager sur d’autres sites

peut-être serait-ce mieux d'utiliser

fibaro:sleep(20*60*1000);

non ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Normal tu la declanche avec un trigger

Envoyé de mon SM-G900F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu ne la démarre pas au demarrage de la hc2

Envoyé de mon SM-G900F en utilisant Tapatalk

Partager ce message


Lien à poster
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


Partager ce message


Lien à poster
Partager sur d’autres sites

%% autostart pour que le script s’exécute au démarrage.

Partager ce message


Lien à poster
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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut

Oui, car en lua le 'lancer au demarrage' correspond à'autostart' dans l'entête du code.

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

tu as quoi comme scène pour mettre a jours ta variable jour_nuit

 

la ligne 10 sert a quoi ?

c'est la variable jour_nuit qui démarre ta scéne

Pour le reste du code je vais voir cela ce week pour faire un test chez moi

Partager ce message


Lien à poster
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 ...

Partager ce message


Lien à poster
Partager sur d’autres sites

tu as fais un décalage de 15 mn dans ta boucle jour nuit

Partager ce message


Lien à poster
Partager sur d’autres sites

où les 15 minutes ? :huh:

 

Je me réponds à  moi-même ... lignes 10 et 11 :D

Partager ce message


Lien à poster
Partager sur d’autres sites

×