Moin zusammen,
ich habe schon seit Jahren die Weihnachtsbeleuchtungssteuerung im Einsatz.
Die möchte ich nun eigentlich mit der „Bewegung erkannt - Licht an und nach Zähler wieder aus, wenn keine neue Bewegung erkannt wurde“ kombinieren.
Hätte da jemand einen Vorschlag wie man das vermischen könnte?
Ich möchte damit eigentlich erreichen, das wenn der Bewegungssensor eine Bewegung entdeckt, in einer bestimmten Zeit, also ab bspw. Sonnenuntergang bis 23 Uhr die Gartenbeleuchtung eingeschaltet wird und dann über Nacht ausbleibt, aber morgens ab einer gewissen Zeit die Bewegungserkennung wieder aktiviert wird, und ab Sonnenaufgang, die Szene zum ruhen kommt und die Gartenbeleuchtung ausbleibt, wenn eine Bewegung erkannt wird.
Weihnachtsbeleuchtung:
--[[
%% properties
%% autostart
%% globals
--]]
--Script schaltet die Relais für die Weihnachtsbeleuchtung morgens in der Früh an,
--mit einer zeitlichen Verzögerung nach Sonnenaufgang ab und Nachmittags kurz vor
--Sonnenuntergang wieder ein und in der Nacht wieder aus.
fibaro:debug('Erstmalig gestartet')
local sourceTrigger = fibaro:getSourceTrigger();
local version = '1.0';
fibaro:debug('XMasTime-Controller (Ver.' .. version .. ')');
function varTime()
local morning = {4, 00}; -- HH:MM für Lichter An morgens in der früh
local night = {23, 50}; -- HH:MM für Lichter Aus in der Nacht
local vorher = 40 -- 40 Minuten vor Sonnenuntergang angehen
local nachher = 40 -- 40 Minuten Verzögerung nach Sonnenaufgang zum ausgehen
local switches = {335}; -- ID der Switches,
---------------------------------------------------------------------------
local SunSet = fibaro:getValue(1, "sunsetHour")
--fibaro:debug('Sonne geht unter: ' ..SunSet);
local Sunrise = fibaro:getValue(1, "sunriseHour")
--fibaro:debug('Sonne geht auf: ' ..Sunrise);
---------------------------------------------------------------------------
if fibaro:countScenes() > 1 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 ostime = os.date("%H:%M", os.time());
--fibaro:debug('Funktion gestartet')
-- Licht AN
--in der Früh
if ostime == morning then
for i = 1,#switches do
fibaro:call(switches[i],"turnOn")
fibaro:debug("Aktuelle Dev ID: "..switches[i])
end
fibaro:debug("Licht in der Früh an........");
--Am Nachmittag
elseif os.date("%H:%M", os.time()+vorher*60) == SunSet -- 20 Minuten vor Sonnenuntergang
then
local Count = 0
for Index, Value in pairs( switches ) do
Count = Count + 1
fibaro:debug("Aktuelle Dev ID: "..switches[Count])
fibaro:call(switches[Count], "turnOn")
end
fibaro:debug("Licht am Nachmittag an........");
--Licht AUS
--am Vormittag
elseif ostime == Sunrise
then
fibaro:sleep(nachher*60*1000) -- 20 Minuten Verzögerung
local Count = 0
for Index, Value in pairs( switches ) do
Count = Count + 1
fibaro:debug("Aktuelle Dev ID: "..switches[Count])
fibaro:call(switches[Count], "turnOff")
end
fibaro:debug("Licht Vormittags aus........");
--In der Nacht
elseif ostime == night then
local Count = 0
for Index, Value in pairs( switches ) do
Count = Count + 1
fibaro:debug("Aktuelle Dev ID: "..switches[Count])
fibaro:call(switches[Count], "turnOff")
end
fibaro:debug("Licht in der Nacht aus.......");
else
--fibaro:debug("No action");
end
setTimeout(varTime, 60*1000)
end
if (sourceTrigger["type"] == "autostart")
then varTime()
--fibaro:debug("Type Autostart");
end
Zeitsteuerung:
%% properties
338 value
335 value
%% globals
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 65 -- ID dieser Szene
local motion = 338 -- ID des Bewegungssensors
local switch = 335 -- 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 = 300;
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("Resete Time, Bewegung erkannt bzw. Motionsensor sendet noch nicht (vgl. Parameter 6)");
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
Nicht wundern warum die 335 in beiden ist. Das ist der Switch der derzeit noch in der Weihnachtsbeleuchtung drin ist. Die neue Zeitsteuerung habe ich bereits angelegt, aber noch nicht eingeschaltet.