pepite Posté(e) le 28 avril 2016 Signaler Posté(e) le 28 avril 2016 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 ;-)
jojo Posté(e) le 29 avril 2016 Signaler Posté(e) le 29 avril 2016 ne t'inquiète pas, je me penche sur ta question ce WE
pepite Posté(e) le 29 avril 2016 Auteur Signaler Posté(e) le 29 avril 2016 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
D-GK Posté(e) le 29 avril 2016 Signaler Posté(e) le 29 avril 2016 Et si tu essayes la même boucle avec différent àla place, en ayant enregistré toto avant la boucle ?
pepite Posté(e) le 29 avril 2016 Auteur Signaler Posté(e) le 29 avril 2016 Excellente idee DGK 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
D-GK Posté(e) le 29 avril 2016 Signaler Posté(e) le 29 avril 2016 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.
pepite Posté(e) le 29 avril 2016 Auteur Signaler Posté(e) le 29 avril 2016 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
D-GK Posté(e) le 29 avril 2016 Signaler Posté(e) le 29 avril 2016 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.
jojo Posté(e) le 30 avril 2016 Signaler Posté(e) le 30 avril 2016 @Pepite, Dois-je encore me plonger dedans comme promis vendredi, ou il me semble que @D-GK t'a dépanné comme il faut ?
pepite Posté(e) le 30 avril 2016 Auteur Signaler Posté(e) le 30 avril 2016 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)
Messages recommandés