Aller au contenu

Help Lua Table


pepite

Messages recommandés

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

 

Lien vers le commentaire
Partager sur d’autres sites

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

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

×
×
  • Créer...