Orups Posté(e) le 31 octobre 2014 Signaler Posté(e) le 31 octobre 2014 Bonjour, Dans mon main loop j'ai écrit un truc comme ça (pour l'entrainement) : if (MonObjet == nil) then MonObjet { test = function (self, aValue) fibaro:debug('appel de la fonction test') end } fibaro:sleep(1000 * 3600) Et ensuite sur un bouton de mon virtual device le code suivant local mO = MonObjet mo:test(mO, 20) Et là c'est le drame... Il m'insulte en me disant que mO est 'a nil value'... Comment ça marche ? Merci d'avance
Steven Posté(e) le 31 octobre 2014 Signaler Posté(e) le 31 octobre 2014 Attends ... C'est pas possible ça. Il n'est pas possible de mettre du code quelque part et de l'utiliser ailleurs.
Orups Posté(e) le 31 octobre 2014 Auteur Signaler Posté(e) le 31 octobre 2014 Ca veut dire que je suis contraint de répéter le même code pour chaque bouton si je veux une zapette pour éteindre mes 3 ou 4 lumières de mon salon (pas en même temps ) par exemple ?
Kriek Posté(e) le 31 octobre 2014 Signaler Posté(e) le 31 octobre 2014 A moins que la variable ne soit une variable globale... Tu peux faire ce que tu souhaites en utilisant les fonctions fibaro:getGlobal et fibaro:setGlobal et en utilisant une variable globale comme interface entre tes deux codes.
Steven Posté(e) le 31 octobre 2014 Signaler Posté(e) le 31 octobre 2014 C'est bien cela. Chaque bouton, scénario, main loop tourne dans un environnement imperméable. La seule chose qui peux être accéder depuis ces environnements sont les variables globales. Dans ton cas, je verrais les choses ainsi : Tu crées une variable globale du nom de "Zapette_Id_Module" Derrière chaque bouton tu mets le code suivant fibaro:setGlobal("Zapette_Id_Module", <ID du module>) Ensuite tu crées un scénario en mode LUA avec --[[ %% autostart %% properties %% globals Zapette_Id_Module --]] -- la ligne ci-dessus demande à ce scénario de se déclencher au changement -- de la variable globale Zapette_Id_Module -- On reprend l'ID stocké dans la variable globale local idmodule = fibaro:getGlobalValue("Zapette_Id_Module") -- S'il est vide on stop ce scénario if (idmodule == "") then return end local mode = "turnOn" if (tonumber(fibaro:getValue(idmodule, "value")) == 1) then -- Si le module est allumé alors on va l'éteindre, sinon on l'allume mode = "turnOff" end fibaro:call(idmodule, mode) -- On remet la variable à vide fibaro:setGlobal("Zapette_Id_Module", "") Attention : Changer la valeur de Zapette_Id_Module directement depuis le panneau des variables ne déclenchera pas le scénario, il faut que la valeur de Zapette_Id_Module soit changé à travers du code LUA.
Orups Posté(e) le 31 octobre 2014 Auteur Signaler Posté(e) le 31 octobre 2014 Je sens que ça vient... Encore merci!!!
Messages recommandés