Hallo zusammen
Wir haben in unserem Schlafzimmer einen Fibaro Button über dem Bett, damit wir alle Leuchten darüber ein- und ausschalten können.
Gerne möchte ich nun die “gedrückt halten”-Funktion vom Button Nutzen, um die eine Hue Leuchte zu dimmen. So wie man dies von Tastern sonst kennt. Das Licht soll zuerst in die eine Richtung dimmen bis Min. oder Max erreicht ist, 1 Sek. warten und danach in die andere Richtung dimmen bis anderen Endstellung erreicht und wieder 1 Sek. warten. Solange halt, bis ich den Taster loslasse.
Habe dazu folgendes Script gemacht, was von der Funktion grundsätzlich auch funktioniert. Aber die Ressourcen oder Programmablauf oder irgendetwas passt nicht.
--[[
%% properties
%% events
47 CentralSceneEvent
%% globals
--]]
--selfId = fibaro:getSelfId()
local a = 0
local scene = 21 -- ID dieser Szene
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
fibaro:abort();
end
local button_source = fibaro:getSourceTrigger()["event"]["data"]
if (tostring(button_source["keyAttribute"]) == "HeldDown") then
fibaro:debug('Fibaro Button gehalten.')
fibaro:debug (fibaro:getValue(95, "ui.sldBrightness.value"))
-- Aktueller Wert aus dem VD als Startwert setzen für den Vergleich
hueBright = tonumber(fibaro:getValue(95, "ui.sldBrightness.value"))
--(a) als Math. Operator definieren
if (hueBright >= 50) then
a = -1
elseif (hueBright < 50) then
a = 1
end
fibaro:debug("a vor Repeat = "..a)
--repeat Schlaufe für den Dimmvorgang
repeat
fibaro:sleep(50)
hueBright = hueBright + a
fibaro:call(95, "setSlider", "1", hueBright)
--Prüfung, ob Min. oder Max. Wert erreicht ist um Operator zu invertieren
if (hueBright == 20) then
fibaro:sleep(1000)
a = 1
elseif (hueBright == 100) then
fibaro:sleep(1000)
a = -1
end
fibaro:debug("a während Repeat = "..a)
until(tostring(button_source["keyAttribute"]) == "Released")
--Slider Value in VD auf den aktuellen Wert setzen
fibaro:call(95, "setProperty", "ui.sldBrightness.value", hueBright)
end
fibaro:killScenes(scene);
Die Szene bricht nicht mehr selber ab, vermutlich weil es den Befehl “übersieht”. Weiter treibt das Skript die CPU ziemlich an die Grenze.
Hat einer eine Idee und kann mir den Richtigen Denkanstoss geben?
Besten Dank und Gruss
Raffael