Hallo zusammen
Wer kann mir helfen meine Lichtsteuerung zu optimieren? Die Szene funktioniert einwandfrei, möchte aber die ganze Programmierung optimieren und vereinfachen. Gerne möchte ich die Bewegungssensoren zusammenfassen in einen „Array“ was mir leider ohne Fehler nicht gelingt. Bin für eure Hilfe sehr dankbar…!
Freundliche Grüsse fastsnake
--[[
%% properties
101 value
134 value
165 value
%% globals
Sonnenstand
--]]
local scene= 77 -- ID dieser Szene
local motion1= 101 -- ID des Bewegungssensors
local motion2= 134 -- ID des Bewegungssensors
local motion3= 165 -- ID des Bewegungssensors
local Licht= 128
local tuere_freisitz = 87
local starttimer = 1800;
local timer = (starttimer);
local currentDate = os.date("*t");
local sourceTrigger = fibaro:getSourceTrigger();
local SunSet= fibaro:getValue(1, "sunsetHour")
local Sunrise= fibaro:getValue(1, "sunriseHour")
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
--Lösche doppelte Szene(n)
if (fibaro:countScenes() >1)
then
fibaro:debug("Es läuft mehr als eine Instanz");
fibaro:abort();
end
-- Prüfe Tageszeit
if fibaro:getGlobalValue("Sonnenstand") == "Sonnenaufgang"
then
if (tonumber(fibaro:getValue(Licht, "value"))) > 0
then
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:debug("Prüfe Tageszeit");
fibaro:debug(os.date("Es ist der (%d.%m.%Y) %H:%M Uhr"));
Debug("orange",("Die Sonne ist um " ..Sunrise.. " Uhr aufgegangen"));
Debug("yellow",("Licht ist noch eingeschaltet...!"));
Debug("gray",("Licht wurde ausgeschaltet...!"));
Debug("orange",(os.date("Sonnenuntergang heute um " ..SunSet.. " Uhr")));
fibaro:debug("Szene angehalten...!");
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:call(Licht, "turnOff");
fibaro:abort();
fibaro:killScenes(77);
end
end
-- Schalte bei Sonnenuntergang Licht ein / aus
if fibaro:getGlobalValue("Sonnenstand") == "Sonnenuntergang"
and (tonumber(fibaro:getValue(motion1, "value"))) > 0
and (tonumber(fibaro:getValue(Licht, "value"))) < 1
or fibaro:getGlobalValue("Sonnenstand") == "Sonnenuntergang"
and (tonumber(fibaro:getValue(motion2, "value"))) > 0
and (tonumber(fibaro:getValue(Licht, "value"))) < 1
or fibaro:getGlobalValue("Sonnenstand") == "Sonnenuntergang"
and (tonumber(fibaro:getValue(motion3, "value"))) > 0
and (tonumber(fibaro:getValue(Licht, "value"))) < 1
then
fibaro:call(Licht, "turnOn");
timer = (starttimer);
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("white",("Schalte Licht ein..."));
Debug("yellow",(os.date("(%d.%m.%Y) Licht um %H:%M Uhr eingeschaltet!.")));
fibaro:debug("------------------------------------------------------------------------------------------");
end
-- Verzögerung in Minuten nach der letzten erkannten Bewegung, bevor das Licht ausgeschaltet wird
if (tonumber(fibaro:getValue(Licht, "value"))) > 0
then
timer = (starttimer);
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:debug("Starte Timer");
Debug("red",(os.date("Ab %H:%M Uhr / " ..timer /60 .." Minuten bis zum ausschalten...!")))
fibaro:debug("------------------------------------------------------------------------------------------");
repeat
fibaro:sleep(1000);
-- Schalte Licht aus, wenn Schalter manuell betätigt wird und warte 15 Minuten, um ein
-- versehentliches (erneutes) aktivieren der Szene zu verhindern
if (tonumber(fibaro:getValue(Licht, "value"))) < 1
then
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("gray",(os.date("(%d.%m.%Y) Licht um %H:%M Uhr manuel ausgeschaltet...!")));
Debug("red",(os.date("Sensoren für 15 Minuten deaktiviert....!")));
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:sleep(900000);
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("green",(os.date("%H:%M Uhr / Timer (Licht manuel aus) abgelaufen, Sensoren wieder aktiviert....!")));
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:abort();
else
if (tonumber(fibaro:getValue(tuere_freisitz, "value"))) > 0
and (tonumber(fibaro:getValue(Licht, "value"))) > 0
then
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("orange",("Türe Freisitz wurde geöffnet...!"));
Debug("red",(os.date("%H:%M Uhr / Sensoren für 4 Stunden deaktiviert....!")));
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:sleep(14400000);
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("green",(os.date("%H:%M Uhr / Timer Türe Freisitz abgelaufen, Sensoren wieder aktiviert....!")));
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:abort();
break
end
end
timer=timer-1;
-- Timer zurücksetzen, wenn neue Bewegung erkannt wird innherhalb der Verzögerungszeit
if fibaro:getGlobalValue("Sonnenstand") == "Sonnenuntergang"
and (tonumber(fibaro:getValue(motion1, "value"))) > 0
or fibaro:getGlobalValue("Sonnenstand") == "Sonnenuntergang"
and (tonumber(fibaro:getValue(motion2, "value"))) > 0
or fibaro:getGlobalValue("Sonnenstand") == "Sonnenuntergang"
and (tonumber(fibaro:getValue(motion3, "value"))) > 0
then
timer=starttimer;
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:debug(os.date("%H:%M Uhr / Bewegung erkannt, Licht bereits eingeschaltet!"));
Debug("green",(" Timer auf " ..timer /60 .. " Minuten zurückgestellt!"))
fibaro:debug("------------------------------------------------------------------------------------------");
end
until (timer <1)
-- Schalte Licht aus, wenn Timer vollständig abgelaufen ist
fibaro:call(Licht, "turnOff");
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("gray",("Timer abgelaufen, Licht wird ausgeschaltet..."));
Debug("gray",(os.date("(%d.%m.%Y) Licht um %H:%M Uhr ausgeschaltet!.")));
Debug("red",("Szene angehalten"));
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:abort();
end