Türkontakt Szene mit Timeout

Hi Ihr Lieben,
Ich habe eine einfache Türkontaktszene gebaut, die mir in einem Raum das licht einschaltet wenn die Tür auf geht und abschaltet wenn die Tür zugemacht wird.
Keine Hexerei :wink:
Nun habe ich versucht mein Skript zu erweitern, dass wenn die Türe offen bleibt, das Licht nach 3 Minuten ebenfalls abgeschaltet wird.

Leider klappt das nicht so toll, denn beim 2. Mal öffnen der Türe geht das Licht nicht mehr an oder aus ;-(
Ich bin sicher schon etwas betriebsblind, vielleicht kann mir jemand von euch einen Tipp geben.
Hier mein derzeitiger Versuch:

--[[ 
%% properties 
206 value
%% globals 
--]]
if (fibaro:countScenes()>1) then fibaro:debug("zu viele Szenen, gelöscht!!") fibaro:abort() end
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end

startSource = 206 -- ID des Türkontaktes
DeviceID = 302-- ID des Relay Switches

if (tonumber(fibaro:getValue(startSource, "value")) > 0 ) then 
  fibaro:call(DeviceID, "turnOn")
  Debug("yellow",(os.date("%d.%m.%Y - Schalte Licht ein")))
elseif (tonumber(fibaro:getValue(startSource, "value")) < 1 ) then 
  fibaro:call(DeviceID, "turnOff")
  Debug("green",(os.date("%d.%m.%Y - Schalte Licht über Türkontakt AUS")))
end
function tempFunc()
  fibaro:call(DeviceID, "turnOff")
  Debug("magenta",(os.date("%d.%m.%Y - Schalte Licht nach Zeit AUS")))
end
setTimeout(tempFunc, 3*60*1000)

Wenn ich die Zeitschleife (Zeile 19-23) entferne, dann funktioniert das Skript hervorragend, es muss also etwas mit der Funktion Im Timeout zu tun haben!

Hi pblacky,

so kann das nicht funktionieren weil das Script in der tempFunc() 180 Sekunden nichts tut. Damit es halbwegs funktioniert müsstest Du fibaro:countScenes()>2 setzen. Ich hab mal auf die Schnelle was gebastelt, sollte es nicht funktionieren kannst Du es auch mit einer while Schleife probieren, aber das wäre das Prinzip.

--[[ 
%% properties 
206 value
%% globals 
--]]
if (fibaro:countScenes()>1) then fibaro:debug("zu viele Szenen, gelöscht!!") fibaro:abort() end
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
 
startSource = 206 -- ID des Türkontaktes
DeviceID = 302-- ID des Relay Switches

if (tonumber(fibaro:getValue(startSource, "value")) > 0 ) then 
    local timer = 180 
    fibaro:call(DeviceID, "turnOn")
    Debug("yellow",(os.date("%d.%m.%Y - Schalte Licht ein")))
    repeat 
      fibaro:sleep(1000)
      if (tonumber(fibaro:getValue(startSource, "value")) < 1 ) then 
         fibaro:call(DeviceID, "turnOff")
         Debug("green",(os.date("%d.%m.%Y - Schalte Licht über Türkontakt AUS")))
         timer = 0
         break 
      end
      timer = timer -1  
    until timer < 1
Debug("magenta",(os.date("%d.%m.%Y - Schalte Licht nach Zeit AUS")))
fibaro:call(DeviceID, "turnOff")
end

Hallo @jeep,

Sorry für die verspätete Antwort, habe den Reminder irgendwie übersehen!

Vielen Dank für deinen fertigen Lösungsvorschlag.
Ich finde das super toll von dir!

Habe dein Skript gerade eingebaut und werde is in den nächste Tagen testen…

Habe das Skript jetzt mal einige Tage getestet, funktioniert super, DANKE!

Etwas muss ich noch realisieren:
Wenn nach 30 Sek das Licht ausgeht und ich dann händisch (über den Schalter) einschalte, dann geht das Licht nicht aus, wenn man anschliessend die Türe schließt.
Ich werd mal versuchen diese Option selbst einzubauen, falls ich es nicht schaffe, dann melde ich mich :wink:

Habs schon geschafft, mit diesem Skript wird das Licht beim Schliessen der Türe auch abgeschaltet, wenn es händisch eingeschaltet wurde.
Danke @jeep für deine Hilfe :wink:

--[[ 
%% properties 
206 value
%% globals 
--]]
if (fibaro:countScenes()>1) then fibaro:debug("zu viele Szenen, gelöscht!!") fibaro:abort() end
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
 
startSource = 206 -- ID des Türkontaktes
DeviceID = 302-- ID des Relay Switches

if (tonumber(fibaro:getValue(startSource, "value")) > 0 ) then 
  local timer = 180 
  fibaro:call(DeviceID, "turnOn")
  Debug("yellow",(os.date("%d.%m.%Y - Schalte Licht ein")))
  repeat 
    fibaro:sleep(1000)
    if (tonumber(fibaro:getValue(startSource, "value")) < 1 ) then 
       fibaro:call(DeviceID, "turnOff")
       Debug("green",(os.date("%d.%m.%Y - Schalte Licht über Türkontakt AUS")))
       timer = 0
       break 
    end
    timer = timer -1  
  until timer < 1
Debug("magenta",(os.date("%d.%m.%Y - Schalte Licht nach Zeit AUS")))
fibaro:call(DeviceID, "turnOff")
elseif (tonumber(fibaro:getValue(startSource, "value")) < 1 ) then
  fibaro:call(DeviceID, "turnOff")
  Debug("green",(os.date("%d.%m.%Y - Schalte Licht über Türkontakt AUS")))
end