N’abend,
anbei ein Script, welches das Licht über ein DoorSensor und zusätzlich über ein MotionSensor steuert. Eignet sich perfekt als Steuerung des Lichtes im Bad.
Kurze Erklärung zur Funktionsweise:
Angenommen die Tür zum Badezimmer ist geschlossen. Öffnet man nun die Tür und schließt diese innerhalb von 10 Sekunden (timeToEnter), dann geht das Skript davon aus, dass jemand den Raum betreten hat und schaltet das Licht dauerhaft auf on. Verlässt man das Bad indem man die Tür wieder öffnet und innerhalb der timeToEnter-Zeit wieder schließt, dann wird das Licht wieder ausgeschaltet. Sollte beim Hinausgehen, die Tür nicht wieder geschlossen, schaltet der MotionSensor das Licht nach 30 Sekunden (timeWithOutMotion) aus. Bleibt die Tür auf und es geht jemand in den Raum, dann wird das Licht über den MotionSensor wieder eingeschaltet. Solange der MotionSensor ausgelöst ist, bleibt das Licht an.
Gruß
--[[
%% properties
57 value
76 value
%% globals
--]]
-- BAD (DOOR & MOTION) (works with 4.054) by Daniel König:
-- Keine zusätzlichen Variablen benötigt. Bitte drauf achten den Sensor aus dem Alarmpanel zu entfernen.
-- Automatisches Licht anhand eines DoorSensor/MotionSensor
-- timeToEnter - Zeit in der die Tür geöffnet und wieder geschlossen wird
-- timeWithoutMotion - Zeit nach der ohne Bewegung das Licht ausgeht (if armed = 0)
-- DEVICE-IDs ÄNDERN (Auch in dem Header oben)
doorID = 57;
lightID = 90;
motionID = 76;
-- Zeit die Tür zu öffnen und wieder zu schließen
timeToEnter = 10;
-- Zeit ohne Bewegung
timeWithOutMotion = 30;
local light = fibaro:getValue(lightID, 'value');
local door = fibaro:getValue(doorID, 'value');
local motion = fibaro:getValue(motionID, 'value');
local armed, lastArmed = fibaro:get(doorID, 'armed');
local armedMotion, lastArmedMotion = fibaro:get(motionID, 'armed');
local trigger = fibaro:getSourceTrigger();
if (tonumber(fibaro:countScenes())>1) then
fibaro:debug('Kill 2 scene!');
fibaro:abort();
end
if (trigger['type']=='property') then
-- TÜR-TRIGGER
if (tonumber(trigger['deviceID'])==tonumber(doorID)) then
-- TÜR GEÖFFNET
if (tonumber(door)==1) then
fibaro:debug('Tür geöffnet.');
if (tonumber(armed)==0) then
fibaro:call(lightID, 'turnOn');
fibaro:call(doorID, 'setArmed', '1');
fibaro:call(doorID, 'setArmed', '0');
fibaro:debug('Licht an"');
end
-- TÜR GESCHLOSSEN
elseif (tonumber(door)==0) then
fibaro:debug('Tür geschlossen. Auf Motion warten.');
if (tonumber(armed)==1 or (os.time()-lastArmed)>=timeToEnter) then
while (tonumber(fibaro:getValue(motionID, 'value'))==1) do
fibaro:debug('Motion erkannt. Es ist jemand im Raum. Warten.');
fibaro:sleep(5*1000);
end
fibaro:call(doorID, 'setArmed', '0');
fibaro:debug('Licht aus, Raum leer');
fibaro:call(lightID, 'turnOff');
else
fibaro:call(doorID, 'setArmed', '1');
fibaro:debug('Jemand im Raum');
end
end
-- BEWEGUNG UND KEINER IST IM RAUM
elseif (tonumber(trigger['deviceID'])==tonumber(motionID) and tonumber(armed)==0) then
-- MOTION-TRIGGER
if (tonumber(motion)==1) then
fibaro:debug('Bewegung erkannt. Licht an');
fibaro:call(motionID, 'setArmed', '1');
fibaro:call(motionID, 'setArmed', '0');
fibaro:call(lightID, 'turnOn');
-- KEINE BEWEGUNG MEHR IM RAUM
elseif (tonumber(motion)==0 and (os.time()-lastArmed)>=timeWithOutMotion) then
fibaro:debug('Keine Bewegung mehr erkannt. Licht aus.');
fibaro:call(lightID, 'turnOff');
end
end
end