Lichtsteuerung / Prob. m. Variable

Hallo zusammen

Ich stehe bei LUA noch am Anfang und versuche für meine Küche eine gut programmierte Steuerung hinzukriegen. Viele Ideen und auch Code wurde von diversen Scripts übernommen. Nun befinde ich mich irgendwie in einer Sackgasse was den LUA Code meiner Steuerung betrifft.

Idee:
Das Licht soll bei Bewegung o. Schalter eingeschaltet und der Dimmer auf einen definierten Wert gesetzt werden. Es beginnt ein Timer zu laufen welcher bei Bewegung wieder auf den Ausgangswert springt. Läuft dieser Timer gegen <= 8s so wird der Dimmer für die restliche Zeit auf 1 gesetzt. Wird jedoch innerhalb dieser 8s eine Bewegung registriert, so soll der Dimmer wieder auf den definierten Ausgangwert gesetzt werden.
Nun möchte ich jedoch die Möglichkeit haben, die Helligkeit via App zu verändern und zwar so, dass wenn der Timer <= 8s ist, und nun eine Bewegung registriert wird, dass die Helligkeit auf den manuell also durch die App eingestellten Wert zurück gesetzt wird.

Code:

--[[ 
%% properties 
9 value
19 value
%% globals 
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 1 -- ID dieser Szene
local motion = 19 -- ID des Bewegungssensors
local switch = 9 -- ID des Schalters
local dimmer = 17 -- ID des Dimmers
DimmerKuecheWert = 15 -- Startwert des Dimmers
DimTempKuecheWert = 1 -- Wert des <=8s Bereichs
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1)
  then 
  fibaro:abort()
end
-- Schalten des Lichts
if (tonumber(fibaro:getValue(motion, "value")) > 0 ) 
  and (tonumber(fibaro:getValue(switch, "value"))) < 1 then
  fibaro:debug("Schalte Licht ein")
  fibaro:call(switch, "turnOn")
  fibaro:sleep(1000)
  fibaro:call(dimmer,"setValue",DimmerKuecheWert)
end
-- Verzögerung in Sekunden
if (tonumber(fibaro:getValue(switch, "value"))) > 0 then
 local starttimer = 30
 local timer = (starttimer)
 fibaro:debug("Starte Timer")
 --fibaro:call(dimmer,"setValue",DimmerKuecheWert);
  repeat
    fibaro:sleep(1000) --fraglich
 --   DimmerKuecheWert = fibaro:getValue(dimmer, "value")
 -- Schalte Licht aus, wenn Schalter manuell betätigt wird und warte 5 Sekunden, um ein 
 -- versehentliches (erneutes) aktivieren der Szene zu verhindern
 	if (tonumber(fibaro:getValue(switch, "value"))) < 1 then 
	timer=1
      	fibaro:debug("Licht wird ausgeschaltet")
      	fibaro:call(dimmer,"setvalue", "0")
      	fibaro:sleep(1000) 
	fibaro:call(switch, "turnOff")
	fibaro:sleep(4000)
      break
    end 
 -- Helligkeit reduzieren während den letzten 8 Sekunden
    if timer <= 8 then
      fibaro:debug("Das Licht wird in 8 Sekunden ausgeschaltet wenn keine Bewegung erfolgt");
      fibaro:debug(DimmerKuecheWert)
      fibaro:sleep(1000)
      fibaro:call(dimmer,"setValue",DimTempKuecheWert)
      fibaro:sleep(3000)
      fibaro:debug("Wert sollte 1 sein")   
      fibaro:debug(DimTempKuecheWert)
      fibaro:debug("Wert sollte X sein")   
      fibaro:debug(DimmerKuecheWert)
     end
 timer=timer-1;
 -- Setze Timer zurück wenn Bewegung erkannt
      if (tonumber(fibaro:getValue(motion, "value"))) > 0 then
      timer=starttimer;     
--    --Wert bei Bewegung auf Ausgangswert zurücksetzen
      fibaro:call(dimmer,"setValue",DimmerKuecheWert)
      fibaro:debug("Bewegung erkannt bzw. Motionsensor sendet noch nicht (vgl. Parameter 6)");
      fibaro:debug(DimmerKuecheWert)
    end
--    --Dimmer auslesen und in Variabel schreiben
--   DimmerKuecheWert = fibaro:getValue(dimmer, "value")
    fibaro:debug("Ende Repeat Schleife")    
    fibaro:debug(DimmerKuecheWert)
  until (timer < 1) 
 -- Schalte Licht aus, wenn Timer vollständig abgelaufen ist
 fibaro:call(dimmer,"setValue", "0")
 fibaro:sleep(1000)
 fibaro:debug("Timer abgelaufen. Licht wird ausgeschaltet")
 fibaro:call(switch, "turnOff")
 fibaro:killScenes(scene)
end

Problem
Da ich die Helligkeit auch mal ändern möchte wenn mehr Licht benötigt wird als der definierte Standardwert (DimmerKuecheWert), muss ich irgendwo den aktuellen Wert des Dimmers auslesen, welche ich dann in der Variable (DimmerKuecheWert) speichere. Gibt es nun eine Bewegung in den letzten 8s so soll der Dimmer auf den zuletzt ausgelesenen Wert gesetzt werden. Mir ist bewusst, dass ich mich in einer Repeat Schleife befinde und ich habe immer das Problem, dass ich mir die Variable (DimmerKuecheWert) überschreibe. Dies geschieht sobald die Bedingung <= 8s greift und in dieser Zeit eine Bewegung registriert wird. Ich komme nicht weiter, wo ich den aktuellen Wert abfragen und in der Variable speichern soll.

Wenn mir da jemand auf die Sprünge helfen könnte wäre ich wirklich dankbar.

Grüsse

mrfunky