Hi Leute,
Habe mir für meine HC2 etwas mehr Zeut genommen und würde gerne ein Skript perfektionieren.
Es läuft schon sehr gut aber es geht darum ein zusätzliches Event abzufangen.
Wenn man kurz hinter jemandem ins WC geht, der das Licht händisch abgeschaltet hat, dann funktioniert mein Skript nicht!
Bis jetzt ist es so, dass das Skript in so einem Fall weiterläuft und der Bewegungsmelder solange nicht reagiert bis es fertig abgelaufen ist.
Ich hätte gerne dass wenn jemand das Licht händisch abschaltet, dann soll die laufende Szene unterbrochen werden.
Eventuell mit einer kurzen Verzögerung von ca. 5-10 Sekunden!
Die Prüfung wäre meiner Meinung nach dass man das Script beendet sobald der “switch” mit ID 43 AUS ist.
Ich habe nur noch keine Ahnung WO man WELCHEN Befehl dazu einbaue könnte.
Vielleicht hat jemand einen Tipp??
Vielleicht gibt es ja auch sinnvolle Verbesserungsmöglichkeiten …
Hier das Skript:
--[[
%% properties
232 value
%% globals
--]]
local sensors = {232} -- ID der Sensoren (auch mehrere möglich!)
local switch = 43 -- ID des Relay Switches
local delay = 300 -- Zeit in Sekunden bis zur Abschaltung
local debug = true
-- Debug in Farben
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end
function actionsMotion()
-- Aktion bei Beginn der Bewegung
fibaro:call(switch, "turnOn")
Debug("yellow",(os.date("%A %d %B %Y - Schalte Licht ein")))
end
function actionsNoMotion()
-- Aktion nach Ende der Bewegung
fibaro:call(switch, "turnOff")
Debug("purple",(os.date("%A %d %B %Y - Schalte Licht 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 Debug( "grey", "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
Debug("green",(os.date("%A %d %B %Y - Bewegung im Raum erkannt - Starte Timer - "..delay.." Sekunden")))
actionsMotion()
while (checkMotion()) do
fibaro:sleep(5000)
end
if (debug) then Debug( "green", "Keine Bewegung mehr erkannt."); end
actionsNoMotion()
end