Hilfe bei Szenentrigger

Hallo alle,
ich habe folgende Szene die noch einer kleinen Erweiterung bedarf. Ich weiss nur nicht wie.
Ich habe einen Bewegungsmelder, der meinen Switch schaltet (0/1)
Sobald der Bewegungsmelder aktiv ist und es eine bestimmte Tageszeit ist, sollen verschiedene Lichtkreise zugeschaltet werden. Es handelt sich um eine Große offene Halle mit 40 Neonröhren, die in 3 Stufen , je nach Dunkelheit, zugeschaltet werden.
Bitte schlagt nicht die Hände Überm Kopf zusammen wenn ihr mein Script lest. Ich bastel mir das immer aus anderen Szenen zusammen.
Das Script funktioniert auch soweit, außer wenn der Bewegungsmelder durchgehend getriggert wird, also ständig auf 1 bleibt. Dann wird die Szene nämlich nicht mehr erneut getriggert und es schaltet sich nur der erste Lampenschalter zu.
Ich hatte jetzt die Idee zusätliche noch einen zeitgesteuerten Trigger dazu zu packen (Var Time: Abenddämmerung, Sonnenuntergang, dunkelheit) aber das klappt leider nie bei mir. Wichtig ist halt, dass der Bewegungsmelder auf jedenfall ein Trigger sein muss.
Vielleicht habt ihr ja ne ganz andere bessere Idee.
Liebe Grüße
Christoph

--[[
%% properties
458 value
%% globals

--]]

 
fibaro:debug('Erstmalig gestartet')
 
--local sourceTrigger = fibaro:getSourceTrigger();
local version = '1.1';
fibaro:debug('Gr. Reithalle (Ver.' .. version .. ')');
local meldervalue = tonumber(fibaro:getValue(458,"value")) 	--Reithalle 
--function varTime() 
 
local morning  = {7,30}; -- HH:MM für Lichter An morgens in der früh
local morgendaemmerung  = 30
local night  = {22, 00}; -- HH:MM für Lichter Aus in der Nacht
local abenddaemmerung  = 30
local sundaynight  = {16, 00}; -- HH:MM für Lichter Aus an Sonntagen 
local nachher = 30		 -- 20 Minuten Verzögerung nach Sonnenaufgang zum ausgehen
local vorher = 1		 -- 20 Minuten vor Sonnenuntergang angehen
local nachher = 30		 -- 20 Minuten Verzögerung nach Sonnenaufgang zum ausgehen
local melder = 458 
local switchesabends = {459,465,466}
local schalter1 = 459
local schalter2 = 465
local schalter3 = 466

 

  ---------------------------------------------------------------------------
local SunSet = fibaro:getValue(1, "sunsetHour") --or  {17,00};
fibaro:debug('Sonne geht unter: ' ..SunSet);
local Sunrise = fibaro:getValue(1, "sunriseHour")
fibaro:debug('Sonne geht auf: ' ..Sunrise);
---------------------------------------------------------------------------
local Handychristoph = tonumber(fibaro:getGlobalValue("HandyIDChris"))
local HandyNici = tonumber(fibaro:getGlobalValue("HandyIDNici"))
local Nadinehandy = tonumber(fibaro:getGlobalValue("HandyIDNadine"))
---------------------------------------------------------------------------
if fibaro:countScenes() > 3 then
  fibaro:debug("stop scene");
  fibaro:abort();
end
 
local morning = os.date("%H:%M", -3600+ morning[1]*60*60 + morning[2]*60);
local night = os.date("%H:%M", -3600+ night[1]*60*60 + night[2]*60);
local sundaynight = os.date("%H:%M", -3600+ sundaynight[1]*60*60 + sundaynight[2]*60);
local ostime = os.date("%H:%M", os.time());
 
fibaro:debug('Funktion gestartet')
 

--------------------------Licht AN -----------------------------------------
---------------------------Morgendämmerung-------------------------------------------
 if  tonumber (fibaro:getValue(melder,"value")) > 0 -- Wenn der Bewegungsmelder aktiv wird--
and	ostime == morning and os.date("%H:%M", os.time()-morgendaemmerung*60) < Sunrise 
    then fibaro:call(schalter1,"turnOn")
    fibaro:debug("morgens Licht AN");
	fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Licht morgendämmerung an"));
      
-----------------------------------------------------------------------------  

--------------------------Licht AN -----------------------------------------
---------------------------Abenddämmerung-------------------------------------------
 elseif fibaro:getGlobal("Feiertag_heute") == '0' 
 and 	tonumber (fibaro:getValue(melder,"value")) > 0 -- Wenn der Bewegungsmelder aktiv wird--
 and 	os.date("%H:%M", os.time()+abenddaemmerung*60) > SunSet 
    then fibaro:call(schalter1,"turnOn")
    fibaro:debug("abenddämmerung Licht AN");
	fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Licht abenddämmerung an"));
	
 -----------------------------------------------------------------------------  
  

--------------------------Licht AN -----------------------------------------    
---------------------------Sonnenuntergang-------------------------------------------
elseif 	fibaro:getGlobal("Feiertag_heute") == '0' 
and 	meldervalue > 0 -- Wenn der Bewegungsmelder aktiv wird--
and 	ostime == SunSet
	then   	fibaro:call(schalter1,"turnOn")
 			fibaro:call(schalter2,"turnOn")
    	 	fibaro:debug("Sonnenuntergang Licht AN");
			fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Lichter sonnenuntergang an"));
-----------------------------------------------------------------------------


--------------------------Licht AN -----------------------------------------    
---------------------------Dunkelheit-------------------------------------------
elseif 	fibaro:getGlobal("Feiertag_heute") == '0' 
and 	tonumber (fibaro:getValue(melder,"value")) > 0 -- Wenn der Bewegungsmelder aktiv wird--
and 	os.date("%H:%M", os.time()-abenddaemmerung*60) > SunSet 
	then   	fibaro:call(schalter1,"turnOn")
 			fibaro:call(schalter2,"turnOn")
 			fibaro:call(schalter3,"turnOn")
    	 	fibaro:debug("Abends Licht AN");
			fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Alle Lichter in Halle an"));
	    
    

--------------------------Licht an, an Feiertagen----------------------------      
---------------------------------Abends--------------------------------------
elseif 	fibaro:getGlobal("Feiertag_heute") == '1' 
and SunSet < sundaynight  
and ostime == SunSet
    then 
 	fibaro:call(schalter1,"turnOn")
 			fibaro:call(schalter2,"turnOn")
 			fibaro:call(schalter3,"turnOn")
    fibaro:debug("Feiertag Licht AN");
    fibaro:call(Handychristoph, "sendPush", " Trotz Feiertag Licht Gr Halle AN");
-----------------------------------------------------------------------------
 
-----------------Licht AUS ---- bei Sonnaufgang------------------------------
elseif os.date("%H:%M", os.time()-nachher*60) == Sunrise   -- 30 Minuten vor Sonnenuntergang 
  	then
	local Count = 0
	for Index, Value in pairs( switchesabends ) do
	Count = Count + 1
	fibaro:debug("Aktuelle Dev ID: "..switchesabends[Count])
	fibaro:call(switchesabends[Count], "turnOff") 
	end
    --fibaro:call(Handychristoph, "sendPush", "morgens Licht AUS");
    fibaro:debug("Licht morgens aus.......");
  
-----------------------------------------------------------------------------

--------------------------Licht AUS -----------------------------------------     
---------------------------Nachts--------------------------------------------
elseif ostime == night then
	local Count = 0
	for Index, Value in pairs( switchesabends ) do
	Count = Count + 1
	fibaro:debug("Aktuelle Dev ID: "..switchesabends[Count])
	fibaro:call(switchesabends[Count], "turnOff") 
	end
    --fibaro:call(Handychristoph, "sendPush", "Abendbeleuchtung AUS");
    fibaro:debug("Licht in der Nacht aus.......");

--------------------------Licht AUS -----------------------------------------     
---------------------------wenn keine Bewegung--------------------------------------------
elseif tonumber (fibaro:getValue(melder,"value")) < 1 -- Wenn der Bewegungsmelder inaktiv wird--
	then   	fibaro:call(schalter1,"turnOff")
 			fibaro:call(schalter2,"turnOff")
 			fibaro:call(schalter3,"turnOff")
    	 	fibaro:debug("keine Bewegung - Licht AUS");
			--fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." Alle Lichter in Halle an"));
	    
  -----------------------------------------------------------------------------  
--[[

--------------------------Test Licht AN -----------------------------------------
---------------------------Test-------------------------------------------
 elseif fibaro:getGlobal("Feiertag_heute") == '0' 
 and 	tonumber (fibaro:getValue(melder,"value")) > 0 -- Wenn der Bewegungsmelder aktiv wird--
 and 	os.date("%H:%M", os.time()+abenddaemmerung*60) < SunSet 
    then fibaro:call(schalter1,"turnOn")
    fibaro:debug("TEST Licht AN");
	fibaro:call(Handychristoph, "sendPush",os.date(" (%d.%m.%Y) "..fibaro:getName(melder).." TEST Licht an"));
	
 ----------------------------------------------------------------------------- 
]]
  
  
else
	fibaro:debug("No action");
end
   
--setTimeout(varTime, 60*1000)
--end
 
  -----------------------------------------------------------------------------

ohne die Szene genauer gelesen zu haben ein Vorschlag:
das schrittweise Einschalten der weiteren Beleuchtung in eine zweite Szene packen;
sie prüft z.B. alle 5 Minuten die Helligkeit, um ggf. die zweite oder dritte Beleuchtung einzuschalten;
wenn ausgeschaltet werden soll, diese Szene vorsichthalber „killen“

NB

  • um Parameter nicht mehrfach eingeben zu müssen:
    local schalter1 = 459
    local schalter2 = 465
    local schalter3 = 466
    local switchesabends = {schalter1, schalter2, schalter3}

  • für Interesse an LUA
    Programmieren in LUA von R. Ierusalimschy (ISBN 978-3-95539-020-4)
    natürlich sehr ausführlich, aber viele Sachen, die man gut verwenden kann

Viel Erfolg!