Bloug Posté(e) le 23 décembre 2023 Signaler Posté(e) le 23 décembre 2023 (modifié) 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é le 23 décembre 2023 par Bloug
Lazer Posté(e) le 23 décembre 2023 Signaler Posté(e) le 23 décembre 2023 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.
Bloug Posté(e) le 24 décembre 2023 Auteur Signaler Posté(e) le 24 décembre 2023 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
Lazer Posté(e) le 24 décembre 2023 Signaler Posté(e) le 24 décembre 2023 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. 1
Bloug Posté(e) le 24 décembre 2023 Auteur Signaler Posté(e) le 24 décembre 2023 (modifié) 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é le 24 décembre 2023 par Bloug
Messages recommandés