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
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!
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
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
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
--[[
%% 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