Aller au contenu
Bloug

notification lumineuse rgbw

Recommended Posts

Bonjour,

 

J'utilise un bout de code pour me notifier quand le DoorBird sonne :

 

--Si un programme led est actif
local currentProgramID = tonumber(fibaro.getValue(1185, "currentProgramID"));
if (currentProgramID > 0) then
-- Stoper le prog en cours
fibaro.call(1185, "turnOff");
--Lancer la notification lumineuse
fibaro.call(1185, "setColor", "220","00","200","0");
--Passer en lunimosite maximal 100
fibaro.call(1185, "setValue", "100");
--Fait une pause de 3 secondes
fibaro.sleep(3000);
--apres 3 secondes, relancer le programme precedent
fibaro.call(1185, "startProgram", currentProgramID);
elseif
( tonumber(fibaro.getValue(1185, "value")) == 0 ) then
--Lancer la notification lumineuse
fibaro.call(1185, "setColor", "220","0","200","0");
--Passer en lunimosite maximal 100
fibaro.call(1185, "setValue", "100");
--Fait une pause de 3 secondes
fibaro.sleep(3000);
--apres 3 secondes, relancer eteindre le module
fibaro.call(1185, "turnOff");
else
--get last color
local colorSet = fibaro.getValue(1185, "lastColorSet");        
--set old color
local RGBWTable= {};
local i = 1;
for value in string.gmatch(colorSet,"(%d+)") do
RGBWTable[i] = value;
i = i + 1;
end

--Lancer la notification lumineuse
fibaro.call(1185, "setColor", "220","000","200","0");
--Passer en lunimosite maximal 100
fibaro.call(1185, "setValue", "100");
--Fait une pause de 3 secondes
fibaro.sleep(3000);

--apres 3 secondes, relancer la couleur fixe precedent
fibaro.call(1185, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4]);

end

 

depuis mon changement de module RGBW ( j'ai bien changé l'id ) , j'ai l'erreur suivante :

 

[23.12.2023] [19:27:58] [ERROR] [SCENE62]: (load):30: bad argument #1 to 'gmatch' (string expected, got nil)

ligne 30

for value in string.gmatch(colorSet,"(%d+)") do

 

mais si la led est éteinte la notification lumineuse marche ...

 

Une idée ??? Merci :D

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

Ta variable colorSet est définie un peu plus haut, donc c'est de là que doit provenir le problème :

local colorSet = fibaro.getValue(1185, "lastColorSet");

Vérifie si la propriété lastColorSet existe bien dans le JSON du module 1185.

Partager ce message


Lien à poster
Partager sur d’autres sites

table.JPG.dcf71746da19fefcd4186904e64ab57a.JPG

 

Effectivement il n'y a plus : le " lastColorSet " j'ai  "color

 

mais j'ai un truc qui cloche ( en periode de noel c'est le bon jeu de mots :p )

 

fibaro.call(1185, "setColor", "100","150","200","0");
fibaro.sleep(3000);   
local PrevColor = fibaro.getValue(1185, "color"); -- récup les couleurs du module
print('ma couleur : ' ..PrevColor)

-- je change de couleur .... Ding Dong 
fibaro.call(1185, "setColor", 2,2,2,0); 
local DingDong = fibaro.getValue(1185, "color");
print('Ding Dong  : ' ..DingDong)

-- je cherche a re-injecter ma couleur d'avant
fibaro.sleep(3000);   
hub.call(1185, "setColor", PrevColor)

-- je check :
local check = fibaro.getValue(1185, "color");
print('Je check  :  ' ..check)

 

une idée pour le :   hub.call(1185, "setColor", PrevColor)   ???

 

Mci

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Ta variable PrevColor, elle récupère une chaine de caractères de type "string" (qui contient des valeurs numériques séparées par des virgules)

Tu ne peux pas injecter directement la string dans la fonction hub.call() qui attend des arguments composés de valeurs numériques.

Donc il faut décomposer PrevColor pour extraire les valeurs numériques.
Il te faut utiliser la fonction split() qui n'existe pas nativement en LUA mais que tu trouveras sur le forum ou chez notre ami commun Google.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon alors c'est pas le plus simple :

 

-- Pour le test je donne une couleur : 

fibaro.call(1185, "setColor", 111,222,333,0);
fibaro.sleep(3000);

-- Je récupère la variable Lastolor :
local LastColor = fibaro.getValue(1185, "color");

-- Je la décompose :

local result = {}
local i = 1
LastColor = LastColor .. ','
for w in LastColor:gmatch("(.-),") do
result[i] = w
i = i + 1
end
local b = result[1]
local g = result[2]
local r = result[3]
local w = result[4]

-- J active un Ding dong avec une autre couleur :

fibaro.call(1185, "setColor", 50,60,70,0);
fibaro.sleep(3000);

-- Je récupère ma première couleur

hub.call(1185, "setColor", b , g , r , w )
fibaro.sleep(3000);

 

 

 

 

 

Modifié par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

×