Licht Scene mit Variablen

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

%% globalsaa

^^ Ist falsch. Wie ist die Fehlermeldung?

Gruß

Ok, hab das nochmal verändert und die variable TimeOfDay oben hinzugefügt ! Ist mir gerade aufgefallen das, dass fehlte.

Die Fehlermeldung kann ich dir erst morgen sagen, da diese immer erst am nächsten Tag erscheint ! Soweit ist aber das Script i.O. und die ‘reset’- Funktion in Ordnung ?

Gruß

Sieht ok aus. Hab sie aber nicht debuggt.

Gruß

Morgen,

also die Fehlermeldung ist weg. Lag an den Fehlern wie oben. Allerdings setzt die Variable controllchirstmas mit der “reset” Funktion nicht den Wert auf 0.

Ich wollte das 2.00 Uhr die Szene neu startet und die Variabel controllchristmas neu gesetzt wird. Hat jemand noch eine andere Idee wie ich das machen könnte!?

Danke und Grüße

Füge doch anstatt der reset-Funktion einfach eine weitere Zeit-Variable die um 02:00Uhr die GlobaleVariable auf 0 setzt.

Ja ist eine Idee. Ich wollte aber mal die Reset Funktion probieren. Hab noch mal nach geschaut. Scheint doch zu funktionieren. Allerdings hat die Szene gestoppt, da mehr Instanzen ausgeführt worden. Hab mal den Stop nach der 1 Instanz raus genommen. Werde weiter testen. Bin noch dabei das Script zu erweitern und eine WE und Feiertagsszene zu schreiben. Danke erstmal für eure Hilfe. Grüße

Wenn ich die Szene posten will, weiss ich nicht wie ich die hier im Blog ordentlich darstellen kann. Vielleicht könnte man hier im Forum noch ein Hilfe - Blog erstellt werden für solche Dinge.

Grüße