Hallo,
ich bin gerade beim Schreiben eine Weihnachtslicht Szene. Das Licht soll Morgens und Abends entweder zu einer bestimmten Uhrzeit angehen oder wenn die Variable Morning bzw. Evening schaltet. Alles geht ! Ich möchte das Abends das Licht nur zu einer bestimmten Uhrzeit ausgeht und das auch bleibt wenn die Variable noch Evening anzeigt. Ich habe das mit deine Variable “christmascontroll” angelegt. Die möchte ich aber gerne Nachts wieder auf ‘0’ setzen. Habe das eine Reboot Scene geschrieben. Leider stürzt LUA dann nachts mit einem Fehler ab. Habt ihr eine eleganter Methode das wie ich die Variable “christmascontroll” wieder auf 0 setze !!
Grüße
Hier das Script :
--[[
%% properties
%% autostart
%% globalsaa
christmascontroll
--]]
--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 .. ')');
------------------------------------------------------------------------------------------
-----------------------------------Werktag Einstellungen----------------------------------
local morningWerk = {6, 30}; -- HH:MM für Lichter An morgens in der früh Werktags
local morningWerkEnd = {7, 30}; -- HH:MM für Lichter Aus morgens in der früh Werktags
local nightWerk = {20, 00}; -- HH:MM für Lichter AN am Abend Werktags wenn Sonnenuntergang Später
local nightWerkEnd = {22, 00}; -- HH:MM für Lichter AUS am Abend Werktags
local switches = {143}; -- ID der Switches, Stecker
local luxSensor = 137 -- ID desHellichkeitssensors
local startSunLux = 100 -- unter 150 Lux schaltet Beleuchtung ein
------------------------------------------------------------------------------------------
local SunSet = fibaro:getValue(1, "sunsetHour")
fibaro:debug('Sonne geht unter: ' ..SunSet);
local Sunrise = fibaro:getValue(1, "sunriseHour")
fibaro:debug('Sonne geht auf: ' ..Sunrise);
function reset()
local currentDate = os.date("*t");
if ((currentDate.hour == 2) and (currentDate.min >= 0)and (currentDate.min < 1))
then
fibaro:sleep(1*60*1000)
fibaro:startScene(154);
fibaro:setGlobal('christmascontroll', '0');
end
setTimeout(reset, 1*60*1000)
end
function christmas()
------------------------------------------------------------------------------------------
if fibaro:countScenes() > 1 then
fibaro:debug("stop scene");
fibaro:abort();
end
------------------------------------------------------------------------------------------
--------------------------Definieren der Zeit---------------------------------------------
local morningWerk = os.date("%H:%M", -3600+ morningWerk[1]*60*60 + morningWerk[2]*60);
local morningWerkEnd = os.date("%H:%M", -3600+ morningWerkEnd[1]*60*60 + morningWerkEnd[2]*60);
local nightWerk = os.date("%H:%M", -3600+ nightWerk[1]*60*60 + nightWerk[2]*60);
local nightWerkEnd = os.date("%H:%M", -3600+ nightWerkEnd[1]*60*60 + nightWerkEnd[2]*60);
local ostime = os.date("%H:%M", os.time());
------------------------------------------------------------------------------------------
------------------------Berechnung Werktages für Licht AN / Licht AUS---------------------
------------------------in der Früh-AN------------------------------------------------------
if ostime == morningWerk and (( tonumber(fibaro:getValue(luxSensor, "value")) < startSunLux ))
or ( fibaro:getGlobalValue("TimeOfDay") == "Morning") and (( tonumber(fibaro:getValue(luxSensor, "value")) < startSunLux )) and ( fibaro:getGlobalValue("christmascontroll") == "0")
then
for i = 1,#switches do
fibaro:call(switches[i],"turnOn");
fibaro:setGlobal('christmascontroll', '1');
fibaro:debug("Aktuelle Dev ID: "..switches[i]);
end
fibaro:debug("Licht in der Früh an........");
--------------------------Am Abend / Nachmittag-AN-------------------------------------------
elseif ostime == nightWerk and ( tonumber(fibaro:getValue(luxSensor, "value")) < startSunLux )
or ( fibaro:getGlobalValue("TimeOfDay") == "Evening") and ( tonumber(fibaro:getValue(luxSensor, "value")) < startSunLux ) and ( fibaro:getGlobalValue("christmascontroll") == "0")
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")
fibaro:setGlobal('christmascontroll', '1');
end
fibaro:debug("Licht am Abend an........");
end
------------------------in der Früh-AUS------------------------------------------------------
if ostime == morningWerkEnd
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 Vormittags aus..'..ostime..'......");
------------------------in der Früh-AUS------------------------------------------------------
elseif ostime == nightWerkEnd 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(christmas, 60*1000)
end
if (sourceTrigger["type"] == "autostart")
then christmas();
reset();
--fibaro:debug("Type Autostart");
end