Aller au contenu

Messages recommandés

Posté(e)

Ai besoin de vous, je buggue, je ne sais pas faire.

 

Dans l'entete

%%properties

a value

b value

 

Soit une table

t = {a, b, c, y}

Je recup le trigger

local source = fibaro:getSourceTrigger()
local declencheur = source["deviceID"]

Dans une fonction, je compare le declencheur avec un element de la table

function GetValue()
   for i,v in ipairs(t) do
     if (declencheur == t[i]) then
        local toto = fibaro:getValue(t[i], "value")
        fibaro:call(t[b] ou t[c] ou t[x], "setValue", toto)
   end
end

Si t["a"] est le declencheur, comment appeler dans le "call" les 3 autres, cad t["b"], t["c"] et t["y"] ?

 

Je sais l'ecrire avec les IF sans etre dans une boucle, mais je voudrais l'ecrire un peu plus "pro" pour permettre de mettre autant de valeur que l'on veut dans la table

 

L'idée est pour des volets, si 1 des volets change de valeur, synchroniser les autres à  la meme valeur ;-)

 

Posté(e)

Suis pas inquiet, ca fait partie de ma progression LUA et la je seche ;-) et google n'est pas trop mon ami sur ce coup ;-)

 

merci @jojo

Posté(e)

Excellente idee DGK :13:

 

Comme ceci ca vous semble correct ?

local source = fibaro:getSourceTrigger()
local declencheur = source["deviceID"]
 
function GetTrigger()
        for i,v in ipairs(t) do
            if (declencheur == t[i]) then
                fibaro:debug("Trigger : " ..declencheur)
                local toto = fibaro:getValue(declencheur, "value")
            end    
            return toto
            end
        end
end
        
 
function GetValue()
   for i,v in ipairs(t) do
     if (declencheur ~= t[i]) then
        fibaro:call(t[i], "setValue", toto)
     end   
   end
end
Posté(e)

Ca me semble bien (mais je peux pas le vérifier pour l'instant). Cela dit je ne connais pas suffisamment le LUA pour connaitre la portée de la variable toto. Etant donné que tu la déclares dans la fonction getTrigger, je ne sais pas si getValue la connait, si ce n'est pas le cas, il faut que tu la crée sous le déclencheur.

 

"Esthétiquement" je trouve le getTrigger très lourd pour pas grand chose, je ne sais pas si il y un moyen de récupérer l'index dans un tableau sans faire cette boucle.

Posté(e)

Sans la boucle je ne sais pas, mais ca me parait plus lourd a ecrire pour x valeurs d'un tableau.

 

La fonction GetValue connaitra "toto" grace au return, sauf si je me trompe hihi

Posté(e)

En fait, ce que je voulais dire par boucle, c'est avoir une méthode du type : indexOf(t,déclencheur) qui te retourne le "i" correspondant à  déclencheur.

 

toto sera connue grâce au return si tu la stockes dans une autre variable selon moi (à  nouveau je me base sur d'autres langages). En gros si tu déclares un "local" dans une fonction, seule la fonction connait cette variable. Mais c'est à  tester.

Posté(e)

@Pepite,

Dois-je encore me plonger dedans comme promis vendredi, ou il me semble que @D-GK t'a dépanné comme il faut ?

Posté(e)

Bonjour messieurs,

 

Exact @D-GK, tu as raison, la variable toto declarée que dans la fonction n'est connue que par la fonction

 

@jojo, ton avis est toujours bon à  prendre pour moi, mais oui D-GK m'a fait avancer ;-)

 

J'ai ca en test en ce moment, ca a l'air pas mal, ce n'est pas pour moi c'est pour un membre du forum ;-) mais petite progression pour moi en mode fonction ;-)

-- Limitation à  1 seule instance en cours -----
if (fibaro:countScenes() > 1) then
    fibaro:abort()
end

t = {46, 39}

local source = fibaro:getSourceTrigger()
local declencheur = source["deviceID"]
local toto

function GetTrigger()
        for i = 1, #t do
            if (declencheur == t[i]) then
                fibaro:debug("Trigger : " ..declencheur)
                toto = fibaro:getValue(40, "value")
                  return toto
            end    
            
        end      
end
        
 
function GetValue()
   for i = 1, #t do
     if (declencheur ~= t[i]) then
        --fibaro:call(t[i], "setValue", toto)
      fibaro:setGlobal("FreeSms", toto)
     end   
   end
end

GetTrigger()
GetValue()


fibaro:debug("toto : "..toto)
×
×
  • Créer...