Hallo Leute,
Ich habe mir aus Beispielen hier im Forum ein Skript erstellt, das mir im WC über einen Bewegungsmelder (ID:222) das Licht eischaltet.
Solange sich was bewegt, soll ein Timer immer wieder auf 15min erneuern und wenn 15 Min lang keine Bewegung ist soll das Licht (ID:43) abschalten.
Ich habe in der Config des Motion Sensors einige Einstellungen geändert, weil der Sensor ursprünglich so langsam ausgelöst hat, dass man den Lichtschalter INNEN drücken konnte, bevor er hell wurde.
Folgende Parameter hab ich geändert:
Parameter1 = 8
Parameter2 = 8
Parameter3 = 0-1 Pulse
Parameter4 = 2-12 Seconds
Parameter6 = 10s
Sonst ist alles DEFAULT!
Das Skript funktioniert zwar gut, aber manchmal schaltet sich das Skript unmotiviert ein obwohl niemand im Raum ist.
Oft sogar bei geschlosener Tür!! Der Raum hat auch keine Fenster!
Ich kann aber nicht sagen wieso!?
Ich hab das Skript in ZWEI Räumen laufen und in BEIDEN Räumen habe ich das Symptom!
Habt ihr einen Tipp, wie ich das Problem finden kann?
Bei der Gelegenheit gleich eine Frage:
local scene = 2 – ID dieser Szene
Habe ich in JEDEM Skript eine EIGENE Szenen ID gegeben.
Ist das richtig?
Muss ich die Szene überhaupt killen?
fibaro:killScenes(scene);
Oder ist das eh sinnlos?
Anbei der komplette Code:
--[[
%% properties
220 value
%% globals
--]]
-- automatisches Licht WC 1.0
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 2 -- ID dieser Szene
local motion = 220 -- ID des Bewegungssensors
local switch = 43 -- ID des Relay Switches
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
fibaro:abort();
end
-- SCHALTE LICHT EIN & AUS
if (tonumber(fibaro:getValue(motion, "value")) > 0 ) and (tonumber(fibaro:getValue(switch, "value"))) < 1 then
fibaro:call(switch, "turnOn");
fibaro:debug("Schalte Licht ein");
end
-- Verzögerung in Sekunden nach der letzten erkannten Bewegung, bevor das Licht ausgeschaltet wird
if (tonumber(fibaro:getValue(switch, "value"))) > 0 then
local starttimer = 900;
local timer = (starttimer);
fibaro:debug("Starte Timer");
repeat
fibaro:sleep(1000);
-- Schalte Licht aus, wenn Schalter manuell betätigt wird und warte 10 Sekunden, um ein
-- versehentliches (erneutes) Aktivieren der Szene zu verhindern
if (tonumber(fibaro:getValue(switch, "value"))) < 1 then
timer=1;
fibaro:call(switch, "turnOff");
fibaro:sleep(10000);
break
end
timer=timer-1;
-- Timer zurücksetzen, wenn neue Bewegung erkannt wird innherhalb der Verzögerungszeit
if (tonumber(fibaro:getValue(motion, "value"))) > 0 then
timer=starttimer;
fibaro:debug("Bewegung erkannt bzw. MS sendet nicht - Resete Time");
end
until (timer<1)
-- Schalte Licht aus, wenn Timer vollständig abgelaufen ist
fibaro:call(switch, "turnOff");
fibaro:debug("Timer abgelaufen/Schalte Licht aus");
fibaro:killScenes(scene);
end