Hallo zusammen,
in Anlehung an “Bewegung im Raum erkennen” habe ich ein Script gebastelt, welches PresnetState und TimeOfDay berücksichtigt. Hier werden diverse Hue Lampen und ein appar Meter LED Stripe (mit RGBW Controller von Fibaro gesteuert) im Innen und Außenbereich durch 2 Außenmotionsensoren getriggert. Die Szene soll eine gemütliche Atmosphäre Im Außenbereich generieren, wenn man sich im Garten aufhält. Nachdem ich die Variablen für Anwesenheit und Stand der Sonne eingebaut habe, geht der Delay immer nur bis 120 Sekunden. In Folge wird die Szene, insofern nicht erneut getriggert, nach 120 Sekunden abgebrochen. Dies ist für diese Anwendung zu kurz. Woran kann das liegen? Die Variable TimeOfDay frage ich alle 5 Minuten ab. Mir fällt nichts auf, woran sich die 120 Sekunden trotz längeren Delays herleiten. Ich wäre über einen Tipp dankbar.
--[[
%% properties
201 value
189 value
%% globals
TimeOfDay
PresentState
--]]
local sensors = {201,189}
local delay = 360
local debug = true
function actionsMotion()
fibaro:debug('Führe Aktionen bei Bewegungserkennung aus')
if (fibaro:getGlobal('TimeOfDay') == 'Night') or (fibaro:getGlobal('TimeOfDay') == 'Evening') and (fibaro:getGlobal('PresentState') == 'Home') then
fibaro:debug('Bewegung erkannt, es ist Nacht')
fibaro:call(53, "turnOn")
fibaro:call(53, "changeSaturation", 255)
fibaro:call(53, "changeBrightness", 255)
fibaro:call(53, "changeHue", 4500)
fibaro:call(57, "turnOn")
fibaro:call(57, "changeSaturation", 255)
fibaro:call(57, "changeBrightness", 255)
fibaro:call(57, "changeHue", 13797)
fibaro:call(60, "turnOn")
fibaro:call(60, "changeSaturation", 255)
fibaro:call(60, "changeBrightness", 255)
fibaro:call(60, "changeHue", 4500)
fibaro:call(59, "turnOn")
fibaro:call(59, "changeSaturation", 255)
fibaro:call(59, "changeBrightness", 255)
fibaro:call(59, "changeHue", 13797)
fibaro:call(58, "turnOn")
fibaro:call(58, "changeSaturation", 255)
fibaro:call(58, "changeBrightness", 255)
fibaro:call(58, "changeHue", 13797)
fibaro:call(55, "turnOn")
fibaro:call(55, "changeBrightness", 255)
fibaro:call(240, "startProgram", "3")
fibaro:call(287, "turnOn")
fibaro:call(287, "changeBrightness", 255)
fibaro:call(287, "startProgram", "3")
end
end
function actionsNoMotion()
fibaro:call(48, "turnOff")
fibaro:call(60, "turnOff")
fibaro:call(59, "turnOff")
fibaro:call(57, "turnOff")
fibaro:call(58, "turnOff")
fibaro:call(55, "turnOff")
fibaro:call(53, "turnOff")
fibaro:call(287, "turnOff")
fibaro:call(240, "turnOff")
fibaro:debug('Führe Aktionen nach Ende Bewegung aus')
end
local instances = tonumber(fibaro:countScenes());
function getSensorStatus()
for i,n in ipairs(sensors) do
if (tonumber(fibaro:getValue(n, "value")) > 0) then
return 1;
end
end
return 0;
end
function getLastBreach()
local breach = 0;
for i,n in ipairs(sensors) do
local nBreach = tonumber(fibaro:getValue(n, "lastBreached"));
if(nBreach > breach) then
breach = nBreach;
end
end
return breach;
end
function checkMotion()
lastBreached = getLastBreach();
time = os.time();
if (debug) then fibaro:debug("Zuletzt ausgelöst: Vor "..(time-lastBreached).." Sekunden"); end
if (getSensorStatus() == 1) then
return true;
end
if ((time-lastBreached)>=delay) then
return false;
end
return true;
end
local lastBreached = getLastBreach()
if (fibaro:getSourceTriggerType() == 'property' and getSensorStatus() == 1) then
if (instances > 1) then fibaro:abort(); end
fibaro:debug('Bewegung im Raum erkannt - Starte Timer')
actionsMotion()
while (checkMotion()) do
fibaro:sleep(5000);
end
if (debug) then fibaro:debug("Keine Bewegung mehr erkannt."); end
actionsNoMotion()
end