Aller au contenu

Messages recommandés

Posté(e)

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

 

Posté(e)

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 ?

Posté(e)

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.

Posté(e)

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.

×
×
  • Créer...