Door/Motion-LUA-Skript

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

Hallo zusammen, ich finde das Script echt gut. Habe es bei mir im Bad auch so übernommen. Da das Licht jetzt bei jedem Eintreten angeht möchte ich das Licht erst ab einem bestimmten Lux Wert des Motion Sensors einschalten.
Kann mir hier jemand einen Tipp geben wie und wo im Script ich etwas hinzufügen muss?
Vielen Dank im Voraus.

Gruß
Erich

Hi,

da kannst du einfach vor den fibaro:call(lightID, ‘turnOn’) eine neue if-Schleife machen, welche dann den LUX-Wert des Raumes prüft. Sollte diese unter einem bestimmten Wert sein, dann mach nichts, ansonsten Licht an.

Gruß

Hallo boomx, vielen Dank für die Info. Aber kannst du mir bitte das Beispiel der Schleife zukommen lassen, wo ich nur den Lux Wert anpassen muss. Bin nicht so fit in LUA.
Das wäre sehr nett von dir.
Vielen Dank im Voraus.

Gruß
Erich