Rollladen-Steuerung (Sonnenaufgang/-untergang)

Hi wo kann man das aktuelle Script runterladen und gibt es dafür eine Anleitung?
Viele Grüße

Habe jetzt soviel rumgespielt, dass es auf einmal klappt. Ich habe keine Ahnung wieso. Aber egal, Hauptsache klappt.
Jetzt würde ich gerne den Sonnenschutz noch integrieren, aber nur Anhand der Temperatur. Lux brauche ich nicht. Kann ich die Lux Werte einfach auskommentieren oder reicht 1 oder 0 als Wert?

@treblade
Kopier Dir einfach das Skript hier aus dem Thread, achte nur darauf, dass jeder das anders angepasst hat. Meins ist glaube ich von Seite 17 (Version 2.3) und wie Du an mir siehst wird Dir hier bei Fragen immer gut geholfen

Nimm einfach die Werte ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux ) raus.
Denk aber dran das du bei Sonnenschutz runterfahren und rauffahren die Werte rausnehmen muss.

Um bei dem Script alle Werte auf Anfang zusetzen muss du es 2mal manuell ausführen. Dann fahren deine Rollläden in die Ausgangsposition.

Grüße

Danke für den Hinweis, ich dachte schon ich bin blind und finde den Download Bereich nicht =)

Kann ich statt rs_wohnraum1 auch Buero-Fenster schreiben?

local rs_wohnraum1 = 35; – IDs der Roller Shutter.
local rs_wohnraum2 = 32;
–local rs_wohnraum3 = 0;
–local rs_arbeitszimmer1 = 0;
–local rs_arbeitszimmer2 = 0;
–local rs_bad1 = 0;
–local rs_bad2 = 0;

insoweit Du das im kompletten Code abänderst, sollte nichts dagegen sprechen.

Moin das hab ich jetzt verstanden. Aber funktionieren tut es trotzdem noch nicht =)
Was muss man den Grundlegend tun damit die Szene läuft?
rebootSceneID was tut die eigentlich?
Jetzt steht unter der Szene “Laufende Instanz 1” ist das richtig?

local minSonAuf = '-15' 				-- Verzögerungszeit in Minuten zum öffnen der Rolläden bei Sonnenaufgang.
local minSonUnt = '15' 					-- Verzögerungszeit in Minuten zum schließen der Rolläden bei Sonnenuntergang.
local zeitFruehstensAuf = '06:00'  		-- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitSpaetestensAuf = '08:30'  	-- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitWeFtAuf = '09:00'				-- Zeitpunkt, an dem am Wochenende und an Feiertagen die Rolläden öffnen (fixer Zeitpunkt)
local zeitMaxUntergang = '22:00'    	-- Spätester Zeitpunkt, an dem die Rolläden schließen
--local maxTempStart = 7					-- Temperatur unterhalb der die Rolladen abends schließen sollen

local startSunLux = 5000; 				-- über 5.000 Lux für zu
local startSunDelay = 5;				-- 5 Min bis zu
local endSunLux = 1000;					-- unter 1.000 Lux für auf
local endSunDelay = 20;					-- 20 Min bis auf
local sunProtectPosition = 25;			-- Sonnenschutzposition für Rolladen
local sunProtectPosition1 = 0;   -- Sonnenschutzposition für Raffstores
local sunProtectLamella = 25;    -- Sonnenschutzposition Lamellen

local luxSensor = 91				-- ID des Hellichkeitssensors
--local tempSensor = 11					-- ID des Temperatursensors
local rebootSceneID = 13	   	    	-- ID der eigenen Scene die rebotet wird.
local meldungenDebug = 0;				-- Hilfsvariable um die Meldungen nicht andauernd zu wiederholen.

local rs_wohnraum1 = 32;			   -- Schiebetür Raffst.
local rs_wohnraum2 = 35;        -- Fenster Raffst.
--local rs_wohnraum3 = 54;        -- Wohnzimmer Fenster Raffst.
--local rs_arbeitszimmer1 = 58;   -- Büro
--local rs_bad1 = 60;             -- G-WC
--local rs_bad2 = 42;             -- Bad
--local rs_kueche1 = 44;          -- Fenster Garage
--local rs_kueche2 = 46;          -- Fenster Garten Raffst.
--local rs_kueche3 = 48;          -- Tür Garten Raffst.
--local rs_theo = 40;             -- Fenster Theo
--local rs_flurEG = 62;           -- Fenster Flur EG

local doorID1 = 278;					-- ID des Türkontakts Schiebetür
--local doorID2 = ;						--Platzhalter für weitere Türkontakte (siehe WHILE-Schleifen bei ca. Zeile 275)
--local doorID3 = ;						--Platzhalter für weitere Türkontakte (siehe WHILE-Schleifen bei ca. Zeile 275)

Ich starte die Szene und dabei kommt das raus:
[DEBUG] 09:31:09: 05:11 … Sonnenaufgang
[DEBUG] 09:31:09: -15 min… Zeitverzögerung zum Sonnenaufgang.
[DEBUG] 09:31:09: 04:56 Öffnen der Rolladen.
[DEBUG] 09:31:09: 21:51 … SonnenUntergang
[DEBUG] 09:31:09: 15 min. Zeitverzögerung Sonnenuntergang.
[DEBUG] 09:31:09: 22:06 schließen der Rolladen
[DEBUG] 09:31:09: Heute ist Wochenende oder ein Feiertag.
[DEBUG] 09:31:09: Die Rolladen werden um 09:00 öffnen.
[DEBUG] 09:31:09: Die Rolladen werden um 22:00 zuzüglich einer zufälligen Verzögerung geschlossen
[DEBUG] 09:31:09: Rolladen-Controller startet das erste mal!
[DEBUG] 09:31:10: [1;31m2018-06-23 09:31:10.005372 [ fatal] Unknown exception: /opt/fibaro/FibaroSceneAPI.lua:334: attempt to concatenate local ‘deviceID’ (a nil value)

Du hast leider nicht den ganzen Code geposted aber Fehlermeldung müsste an dem auskommentierten ID des Temp Sensors liegen. Nimm den mal wieder rein.
maxtempstart würde ich auch wieder rein nehmen und lieber auf einen hohen Wert setzen. 40 funktioniert bei mir

hi,
hab leider auch nochmal probleme mit meinem skript.
seit ein paar tagen fahren die rolladen nicht mehr runter. geöffnet wird noch (wenn auch nicht zu der korrekten uhrzeit) aber die rolladen bleiben abends einfach oben…

ich hab nichts geändert oder sonstwo dran gefummelt… es geht einfach von einem Tag auf den anderen nicht mehr…

--[[
%% autostart
%% properties
%% globals
--]]
-- Bisherige Hauptarbeiten an dem Skript: http://www.Siio.de,  boomx, parip69 und thebrain. Kleine Modifikationen von alando22
-- Version 2.3
-- Dieses Skript realisiert eine Rolladen-Steuerung zum Sonnenaufgang und - untergang mit Verzögerungszeiten und einer
-- Temperaturschwelle, die zum schließen der Rolläden unterschritten werden muss.
-- Zusätzlich ist eine zufällige Verzögerung von 1-30 Minuten eingebaut, um die Aktivitäten nicht nachvollziehbar zu machen.
-- Zudem ist ein Sonnenschutz über einen Helligkeitssensor integriert. Eine Prüfung ggf. offener Türen ist ebenfalls enthalten.
-- Bei morgendlichen Öffnen wird zwischen Werktagen und Wochenenden & Feiertagen unterschieden.
-- Wochentags wird nach Sonnenaufgang geöffnet, am Wochenende & an Feiertagen zu fester Uhrzeit.
-- Dazu ist das Skript "Variable für Feiertage" von https://www.siio.de/board/thema/variable-fuer-feiertage/#post-42440 notwendig.
-- Ohne Verwendung des Feiertagsscripts bitte die Zeile 89 auskommentieren!!!
-- Notwendige globale Variablen (vorher anlegen!):
--
--	SunFirstMaxTimeLux	Startwert = 0 (Interne Zeitvariable)
--	SunFirstMinTimeLux	Startwert = 0 (Interne Zeitvariable)
--	SonnenSchutz		Startwert = 0 (Variable gibt an, ob der Sonnenschutz aktiv '1' oder inaktiv '0' ist
--	RolloUnten0Oben1	Startwert = 1 (Variable gibt an, ob Rolladen unten '0' oder oben '1' ist

--#####################################################################################################################

local minSonAuf = '-15' 				-- Verzögerungszeit in Minuten zum öffnen der Rolläden bei Sonnenaufgang.
local minSonUnt = '15' 					-- Verzögerungszeit in Minuten zum schließen der Rolläden bei Sonnenuntergang.
local zeitFruehstensAuf = '06:00'  		-- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitSpaetestensAuf = '08:30'  	-- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitWeFtAuf = '08:30'				-- Zeitpunkt, an dem am Wochenende und an Feiertagen die Rolläden öffnen (fixer Zeitpunkt)
local zeitMaxUntergang = '22:00'    	-- Spätester Zeitpunkt, an dem die Rolläden schließen
-- local maxTempStart = 7					-- Temperatur unterhalb der die Rolladen abends schließen sollen

local startSunLux = 7000 				-- war auf 8.000 Lux
local startSunDelay = 5					-- 5 Min bis zu
local endSunLux = 4000					-- unter 1.000 Lux für auf
local endSunDelay = 20					-- 20 Min bis auf
local sunProtectPosition = 25;			-- Sonnenschutzposition für Rolladen
local sunProtectPosition1 = 0;   -- Sonnenschutzposition für Raffstores
local sunProtectLamella = 25;    -- Sonnenschutzposition Lamellen

local luxSensor = 404				-- ID des Helligkeitssensors
-- local tempSensor = 11					-- ID des Temperatursensors (Außentemperatur)
local rebootSceneID = 86	   	    	-- ID der eigenen Scene die rebotet wird.
local meldungenDebug = 0				-- Hilfsvariable um die Meldungen nicht andauernd zu wiederholen.

local rs_wohnraum1 = 50;			   -- Schiebetür Raffst.
local rs_wohnraum2 = 52;        -- Fenster Raffst.
local rs_wohnraum3 = 54;        -- Wohnzimmer Fenster Raffst.
local rs_arbeitszimmer1 = 58;   -- Büro
local rs_bad1 = 60;             -- G-WC
local rs_bad2 = 42;             -- Bad
local rs_kueche1 = 44;          -- Fenster Garage
local rs_kueche2 = 46;          -- Fenster Garten Raffst.
local rs_kueche3 = 48;          -- Tür Garten Raffst.
local rs_theo = 40;             -- Fenster Theo
local rs_flurEG = 62;           -- Fenster Flur EG
local rs_ankleide = 32          -- Fenster Ankleide
local rs_elternGarten = 36      -- Fenster Eltern Garten
local rs_karla = 38             -- Fenster Karla
local rs_elternTerrasse = 34    -- Fenster Eltern Terrasse

local doorID1 = 278;					-- ID des Türkontakts Schiebetür
local doorID2 = 338;				  -- ID Balkontür Küche
local doorID3 = 408;					-- ID Tür Terrasse Eltern (siehe WHILE-Schleifen bei ca. Zeile 275)
-------------------------------------------------------------------------------------------------------------------------
--################################ ab hier nichts mehr ändern! ##########################################################
-------------------------------------------------------------------------------------------------------------------------

debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
--#######################################################################################
local sourceTrigger = fibaro:getSourceTrigger();
function sceneReboot()
		local currentDate = os.date("*t");
        if ((currentDate.hour == 2) and (currentDate.min >= 0)and (currentDate.min < 1))
        or sourceTrigger["type"] == "other" then
              debug('salmon',"Neustart der Szene!")
              fibaro:sleep(1*60*1000)
              fibaro:startScene(rebootSceneID);
        end
        setTimeout(sceneReboot, 1*60*1000)
end
--########## Berechnung versetzter Sonnenaufgang und versetzter Sonnenuntergang ############
    debug('gold', ""..fibaro:getValue(1,'sunriseHour').." ...  Sonnenaufgang")
    debug('steelblue', ""..minSonAuf.." min... Zeitverzögerung zum Sonnenaufgang.")
    local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
    local VersetzterSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
    debug('yellow',""..VersetzterSonnenAufgang.." Öffnen der Rolladen.")
----------------------------------------------------------------------------------------
    debug('orangered',""..fibaro:getValue(1,'sunsetHour').. " ... SonnenUntergang")
    debug('steelblue', ""..minSonUnt.." min. Zeitverzögerung Sonnenuntergang.")
    local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
    local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
    debug('orangered',""..VersetzterSonnenUntergang..' schließen der Rolladen')

--############################## Feststellung ob Wochenende oder Feiertag ##################
local Feiertag_heute = tonumber(fibaro:getGlobalValue("Feiertag_heute")) -- Diese Zeile auskommentieren, wenn kein Feiertagsscript genutzt wird
local currentDate = os.date("*t")
local werktag = 1

---------------------------------------------------------------------------------------
--############ Prüfung wann Rolladen tatsächlich öffnen werden ########################
            if werktag == 0 then
				debug ('yellow', "Die Rolladen werden um "..zeitWeFtAuf.." öffnen.")
			elseif
			VersetzterSonnenAufgang > zeitFruehstensAuf and VersetzterSonnenAufgang < zeitSpaetestensAuf then
                debug('yellow',"Die Rolladen werden um "..VersetzterSonnenAufgang.. " zuzüglich einer zufälligen Verzögerung öffnen.")
              elseif VersetzterSonnenAufgang < zeitFruehstensAuf then
                debug('yellow',"Die Rolladen werden um "..zeitFruehstensAuf.. " zuzüglich einer zufälligen Verzögerung öffnen.")
              elseif VersetzterSonnenAufgang > zeitSpaetestensAuf then
                debug('yellow',"Die Rolladen werden um "..zeitSpaetestensAuf.. " zuzüglich einer zufälligen Verzögerung öffnen.")
              end
            --------------------------------------------------------------------------------------------
            if VersetzterSonnenUntergang > zeitMaxUntergang then
                debug('steelblue',"Die Rolladen werden um "..zeitMaxUntergang.. ' zuzüglich einer zufälligen Verzögerung geschlossen')
			  else
                debug('steelblue',"Die Rolladen werden um "..VersetzterSonnenUntergang.. ' zuzüglich einer zufälligen Verzögerung geschlossen')
              end
--#########################################################################################
	  debug('darkgreen',"Rolladen-Controller startet das erste mal!");

function rollerShutter()

--######## Berechnung der Variablen  ########
    local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
    local VersetzterSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
----------------------------------------------------------------------------------------
    local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
    local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
----------------------------------------------------------------------------------------
	local currentDate = os.date('*t');
	local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
	local SonnenSchutz = tonumber(fibaro:getGlobalValue('SonnenSchutz'));

----------------------------------------------------------------------------------------
	local version = '2.3';
	local currentDate = os.date('*t');
	local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
	local random = math.random(5);			-- Hier wird die zufällige Verzögerung beeinflusst.
	local min = math.floor((random*100)/60);
--------------------------------------------------------------------------------------------

	if ((Feiertag_heute == 1 or currentDate.wday == 7 or currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 6))
	then
		werktag = 0
		-- debug('grey', "Heute ist Wochenende oder ein Feiertag.")
	else
		werktag = 1
		-- debug('grey',"Heute ist ein Werktag und kein Feiertag.")
	end
------------------------------------------------------------------------------------------
---#################   SonnenSchutz... Rolladen runterfahren !!   #########################---
------------------------------------------------------------------------------------------

if  ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
	-- and sunProtectTempMin <= tonumber(fibaro:getValue(tempSensor, "value"))
    and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
    and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
    and (tonumber(SonnenSchutz) == 0)
    then

    	fibaro:setGlobal('SunFirstMaxTimeLux', '1');
        local gSunFirstMaxTimeLux = fibaro:getGlobalModificationTime('SunFirstMaxTimeLux')

     if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
      and ((os.time() - gSunFirstMaxTimeLux) >= startSunDelay*60)
      then
      ---------------- Rolladen eintragen  ----------------------------------------

    --fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1); --Fenster Esszimmer
    --fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); --Lamellen
		--fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1); --Fenster Wohnzimmer
    --fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); --Lamellen
    fibaro:call(rs_arbeitszimmer1, "setValue", sunProtectPosition); --Fenster Büro
		fibaro:call(rs_bad1, "setValue", sunProtectPosition); -- Fenster G-WC
		-- fibaro:call(rs_bad2, "setValue", sunProtectPosition); --Fenster Bad
		fibaro:call(rs_kueche1, "setValue", sunProtectPosition); --Fenster Garage
    --fibaro:call(rs_kueche2, "setValue", sunProtectPosition1); --Fenster Garten
    --fibaro:call(rs_kueche2, "setValue2", sunProtectLamella); --Lamellen
    --fibaro:call(rs_kueche3, "setValue", sunProtectPosition1); --Tür Garten
    --fibaro:call(rs_kueche3, "setValue2", sunProtectLamella); --Lamellen
    -- fibaro:call(rs_theo, "setValue", sunProtectPosition); --Fenster Theo
    fibaro:call(rs_flurEG, "setValue", sunProtectPosition); --Fenster Flur
    --fibaro:call(rs_ankleide, "setValue", sunProtectPosition); --Fenster Ankleide
    --fibaro:call(rs_elternTerrasse, "setValue", sunProtectPosition) --Fenster Terrasse

      ---------------------------------------------------------------------------
        debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Lux  ... Die Rolladen fahren auf ' ..sunProtectPosition..'%!!!')
        fibaro:setGlobal('SunFirstMaxTimeLux', '0');
        fibaro:setGlobal('SunFirstMinTimeLux', '0');
        fibaro:setGlobal('SonnenSchutz', '1'); --SonnenSchutz wurde gesetzt.
        fibaro:setGlobal('RolloUnten0Oben1', '0');
        meldungenDebug = 0
      elseif meldungenDebug == 0 then
    	debug('lightsteelblue','Die Rolladen bleiben oben... es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux  und '..startSunDelay..' min bis die Rollos auf ' ..sunProtectPosition..'% fahren.')
		meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
    end
------------------------------------------------------------------------------------------
---#################   SonnenSchutz... Rolladen hochfahren !!  ###########################---
------------------------------------------------------------------------------------------
elseif ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
    and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
    and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
    and (tonumber(SonnenSchutz) == 1)
    then
    	fibaro:setGlobal('SunFirstMinTimeLux', '1');
		local gSunFirstMinTimeLux = fibaro:getGlobalModificationTime('SunFirstMinTimeLux')

     if ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
      and ((os.time() - gSunFirstMinTimeLux) >= endSunDelay*60)
      then
---------------- Rolladen eintragen  --------------------------------------------------

    --fibaro:call(rs_wohnraum1, 'open');
    --fibaro:call(rs_wohnraum2, 'open');
    --fibaro:call(rs_wohnraum3, 'open');
		fibaro:call(rs_arbeitszimmer1, 'open');
		fibaro:call(rs_bad1, 'open');
		-- fibaro:call(rs_bad2, 'open');
		fibaro:call(rs_kueche1, 'open');
    --fibaro:call(rs_kueche2, 'open');
    --fibaro:call(rs_kueche3, 'open');
    -- fibaro:call(rs_theo, 'open');
    fibaro:call(rs_flurEG, 'open');
    --fibaro:call(rs_ankleide, "open");
    --fibaro:call(rs_elternTerrasse, "open");

--------------------------------------------------------------------------------------
        debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Die Rolladen fahren hoch!!!')
        fibaro:setGlobal('SunFirstMaxTimeLux', '0');
        fibaro:setGlobal('SunFirstMinTimeLux', '0');
        fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
        fibaro:setGlobal('RolloUnten0Oben1', '1');
        meldungenDebug = 0
     elseif meldungenDebug == 0 then
        debug('lightsteelblue','Rollos bleiben auf ' ..sunProtectPosition..' % ...  es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')
   		meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
    end
------------------------------------------------------------------------------------------
---#################   Sonnenaufgang Werktags!!  ###############################################--
------------------------------------------------------------------------------------------
elseif werktag == 1 and ((VersetzterSonnenAufgang > zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzterSonnenAufgang)
 or (VersetzterSonnenAufgang < zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
 or (VersetzterSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
 and (tonumber(rollershutter_runs) == 0))
    then
		debug('green', 'Werktag = '.. werktag)
        debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('gold', 'Sonnenaufgang... öffne Rolladen');
		debug('gold', 'Waiting ' .. min .. ' min');
		fibaro:sleep(random*100000);

		fibaro:call(rs_wohnraum1, 'open');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_wohnraum2, 'open');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_wohnraum3, 'open');
    fibaro:sleep(math.random(5000,10000));
		fibaro:call(rs_arbeitszimmer1, 'open');
    fibaro:sleep(math.random(5000,10000));
		fibaro:call(rs_bad1, 'open');
    fibaro:sleep(math.random(5000,10000));
		fibaro:call(rs_bad2, 'open');
    fibaro:sleep(math.random(5000,10000));
		fibaro:call(rs_kueche1, 'open');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_kueche2, 'open');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_kueche3, 'open');
    fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_theo, 'open');
    --fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_flurEG, 'open');
    fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_karla, 'open');
    --fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_elternTerrasse, 'open');
    --fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_elternGarten, 'open');
    --fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_ankleide, 'open');
    --fibaro:sleep(math.random(5000,10000));

      debug('yellow',"Rolladen wurden geöfnet.");
      fibaro:setGlobal('SunFirstMaxTimeLux', '0');
      fibaro:setGlobal('SunFirstMinTimeLux', '0');
      fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
      fibaro:setGlobal('rollershutter_runs', '0');
      fibaro:setGlobal('RolloUnten0Oben1', '1');

      if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang) then
          debug('coral',"Es ist Tag.");
      end
------------------------------------------------------------------------------------------
---#################   Sonnenaufgang Wochenende und Feiertags!!  ###################################--
------------------------------------------------------------------------------------------
elseif werktag == 0 and ((string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == zeitWeFtAuf)
 and (tonumber(rollershutter_runs) == 0))
    then
		debug('green', 'Werktag = '.. werktag)
        debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('yellow','Es ist '..zeitWeFtAuf..'Uhr, Öffne Rolladen');

		fibaro:call(rs_wohnraum1, 'open');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_wohnraum2, 'open');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_wohnraum3, 'open');
    fibaro:sleep(math.random(5000,10000));
		fibaro:call(rs_arbeitszimmer1, 'open');
    fibaro:sleep(math.random(5000,10000));
		fibaro:call(rs_bad1, 'open');
    fibaro:sleep(math.random(5000,10000));
		fibaro:call(rs_bad2, 'open');
    fibaro:sleep(math.random(5000,10000));
		fibaro:call(rs_kueche1, 'open');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_kueche2, 'open');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_kueche3, 'open');
    fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_theo, 'open');
    --fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_flurEG, 'open');
    fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_karla, 'open');
    --fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_elternTerrasse, 'open');
    --fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_elternGarten, 'open');
    --fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_ankleide, 'open');
    --fibaro:sleep(math.random(5000,10000));

      debug('yellow',"Rolladen wurden geöfnet.");
      fibaro:setGlobal('SunFirstMaxTimeLux', '0');
      fibaro:setGlobal('SunFirstMinTimeLux', '0');
      fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
      fibaro:setGlobal('rollershutter_runs', '0');
      fibaro:setGlobal('RolloUnten0Oben1', '1');

	  debug('coral',"Es ist Tag.");

-----------------------------------------------------------------------------------------
---################    SonnenUntergang !!  ###########################################---
-----------------------------------------------------------------------------------------
elseif (tonumber(rollershutter_runs) == 0) and ((VersetzterSonnenUntergang < zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzterSonnenUntergang)
 or (VersetzterSonnenUntergang > zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang))
    then

       	debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('steelblue', 'Sonnenuntergang... schließe Rolladen')
		-- debug('sttelblue', 'Die Temperatur beträgt '..tonumber(fibaro:getValue(tempSensor, "value"))..'°C.')
		debug('steelblue', 'Die zufällige Verzögerung beträgt ' .. min .. ' min.');
		fibaro:sleep(random*100000);

		fibaro:call(rs_arbeitszimmer1, 'close')	--ID für close ohne prüfung eines offenen Fensters
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_bad1, 'close');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_bad2, 'close');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_kueche1, 'close');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_kueche2, 'close');
    fibaro:call(rs_kueche2,'setValue2', '0')
    fibaro:sleep(math.random(5000,10000));
    --fibaro:call(rs_kueche3, 'close');
    --fibaro:call(rs_kueche3,'setValue2', '0')
    fibaro:sleep(math.random(5000,10000));
		fibaro:call(rs_wohnraum2, 'close');
    fibaro:call(rs_wohnraum2,'setValue2', '0')
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_wohnraum3, 'close');
    fibaro:call(rs_wohnraum3,'setValue2', '0')
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_theo, 'close');
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_flurEG, "close");
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_ankleide, 'close')
    fibaro:sleep(math.random(5000,10000))
    fibaro:call(rs_elternGarten,'close')
    fibaro:sleep(math.random(5000,10000));
    fibaro:call(rs_karla,'close');
    fibaro:sleep(math.random(5000,10000));

		while
			(tonumber(fibaro:getValue(doorID1, 'value')) > 0) do	--prüft ob Fester offen, wenn ja wird Rolladen nicht geschlossen
  			fibaro:sleep(10*1000)
		end
			fibaro:call(rs_wohnraum1, 'close');
      fibaro:call(rs_wohnraum1,"setValue2", '0')

		while
			(tonumber(fibaro:getValue(doorID2, 'value')) > 0) do	--prüft ob Fester offen, wenn ja wird Rolladen nicht geschlossen
			fibaro:sleep(10*1000)
		end
 			fibaro:call(rs_kueche3, 'close');
      fibaro:call(rs_kueche3, "setValue2","0")

		while
			(tonumber(fibaro:getValue(doorID3, 'value')) > 0) do	--prüft ob Fester offen, wenn ja wird Rolladen nicht geschlossen
			fibaro:sleep(10*1000)
		end
 			fibaro:call(rs_elternTerrasse, 'close');

      debug('royalblue',"Rolladen wurden geschlossen.");
      fibaro:setGlobal('SunFirstMaxTimeLux', '0');
      fibaro:setGlobal('SunFirstMinTimeLux', '0');
      fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
      fibaro:setGlobal('rollershutter_runs', '0');
      fibaro:setGlobal('RolloUnten0Oben1', '0');

      if (os.date("%H:%M", os.time()) >= VersetzterSonnenUntergang) then
      debug('royalblue',"Es ist Nacht.");
      end

end
---#######################################################################################
   setTimeout(rollerShutter, 60*1000);
end

--########################################################################################

if (sourceTrigger['type'] == 'autostart') then
	rollerShutter();
	sceneReboot();
elseif (sourceTrigger['type'] == 'property') then
  debug('orangered', 'Source device = ' .. sourceTrigger['deviceID'])
elseif (sourceTrigger['type'] == 'global') then
  debug('orangered', 'Global variable source = ' .. sourceTrigger['name'])
elseif (sourceTrigger['type'] == 'other') then
        ---------------- Rolladen eintragen  ----------------------------------------
      if(os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
        and(os.date("%H:%M", os.time()) < VersetzterSonnenUntergang) then

       fibaro:call(rs_wohnraum1, 'open');
    fibaro:call(rs_wohnraum2, 'open');
    fibaro:call(rs_wohnraum3, 'open');
		fibaro:call(rs_arbeitszimmer1, 'open');
		fibaro:call(rs_bad1, 'open');
		fibaro:call(rs_bad2, 'open');
		fibaro:call(rs_kueche1, 'open');
    fibaro:call(rs_kueche2, 'open');
    fibaro:call(rs_kueche3, 'open');
    fibaro:call(rs_theo, 'open');
    fibaro:call(rs_flurEG, 'open');
    fibaro:call(rs_ankleide, "open");
    fibaro:call(rs_elternTerrasse, "open");
    fibaro:call(rs_elternGarten, "open");
    fibaro:call(rs_karla, "open");
        debug('coral',' Die Rolladen fahren in Grundstellung!!!')
        fibaro:setGlobal('SunFirstMaxTimeLux', '0');
        fibaro:setGlobal('SunFirstMinTimeLux', '0');
        fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
        fibaro:setGlobal('RolloUnten0Oben1', '1');
      else
        debug('royalblue',' Es ist Nacht.')
        fibaro:setGlobal('SunFirstMaxTimeLux', '0');
        fibaro:setGlobal('SunFirstMinTimeLux', '0');
        fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
      end
      ---------------------------------------------------------------------------
  debug('orangered', 'Other source.')
end
--###########################################################################################

der Debug schreibt auch immer nur morgens das öffnen rein…

[DEBUG] 03:04:24: 05:26 … Sonnenaufgang
[DEBUG] 03:04:24: -15 min… Zeitverzögerung zum Sonnenaufgang.
[DEBUG] 03:04:24: 05:11 Öffnen der Rolladen.
[DEBUG] 03:04:24: 21:45 … SonnenUntergang
[DEBUG] 03:04:24: 15 min. Zeitverzögerung Sonnenuntergang.
[DEBUG] 03:04:24: 22:00 schließen der Rolladen
[DEBUG] 03:04:24: Die Rolladen werden um 06:00 zuzüglich einer zufälligen Verzögerung öffnen.
[DEBUG] 03:04:24: Die Rolladen werden um 22:00 zuzüglich einer zufälligen Verzögerung geschlossen
[DEBUG] 03:04:24: Rolladen-Controller startet das erste mal!
[DEBUG] 08:30:30: Werktag = 0
[DEBUG] 08:30:30: Rolladen-Controller ist gestartet (Ver.2.3)
[DEBUG] 08:30:30: Es ist 08:30Uhr, Öffne Rolladen
[DEBUG] 08:31:54: Rolladen wurden geöfnet.
[DEBUG] 08:31:54: Es ist Tag.
[DEBUG] 09:28:55: Die Rolladen bleiben oben… es sind 7299 Lux und 5 min bis die Rollos auf 25% fahren.
[DEBUG] 09:38:55: 7506 Lux … Die Rolladen fahren auf 25%!!!
[DEBUG] 09:41:55: Rollos bleiben auf 25 % … es sind 3628 Lux und 20 min bis die Rollos rauf fahren.
[DEBUG] 10:01:56: 2312 Die Rolladen fahren hoch!!!
[DEBUG] 13:18:59: Die Rolladen bleiben oben… es sind 7962 Lux und 5 min bis die Rollos auf 25% fahren.
[DEBUG] 13:24:00: 7921 Lux … Die Rolladen fahren auf 25%!!!
[DEBUG] 15:20:02: Rollos bleiben auf 25 % … es sind 3939 Lux und 20 min bis die Rollos rauf fahren.
[DEBUG] 15:41:02: 3276 Die Rolladen fahren hoch!!!
[DEBUG] 02:00:12: Neustart der Szene!
[DEBUG] 02:01:12: 05:26 … Sonnenaufgang
[DEBUG] 02:01:12: -15 min… Zeitverzögerung zum Sonnenaufgang.
[DEBUG] 02:01:12: 05:11 Öffnen der Rolladen.
[DEBUG] 02:01:12: 21:45 … SonnenUntergang
[DEBUG] 02:01:12: 15 min. Zeitverzögerung Sonnenuntergang.
[DEBUG] 02:01:12: 22:00 schließen der Rolladen
[DEBUG] 02:01:12: Die Rolladen werden um 06:00 zuzüglich einer zufälligen Verzögerung öffnen.
[DEBUG] 02:01:12: Die Rolladen werden um 22:00 zuzüglich einer zufälligen Verzögerung geschlossen
[DEBUG] 02:01:12: Rolladen-Controller startet das erste mal!
[DEBUG] 02:01:12: Es ist Nacht.
[DEBUG] 02:01:12: Other source.
[DEBUG] 08:30:18: Werktag = 0
[DEBUG] 08:30:18: Rolladen-Controller ist gestartet (Ver.2.3)
[DEBUG] 08:30:18: Es ist 08:30Uhr, Öffne Rolladen
[DEBUG] 08:31:25: Rolladen wurden geöfnet.
[DEBUG] 08:31:25: Es ist Tag.

[DEBUG] 02:00:41: Neustart der Szene!
[DEBUG] 02:01:41: 05:26 … Sonnenaufgang
[DEBUG] 02:01:41: -15 min… Zeitverzögerung zum Sonnenaufgang.
[DEBUG] 02:01:41: 05:11 Öffnen der Rolladen.
[DEBUG] 02:01:41: 21:45 … SonnenUntergang
[DEBUG] 02:01:41: 15 min. Zeitverzögerung Sonnenuntergang.
[DEBUG] 02:01:41: 22:00 schließen der Rolladen
[DEBUG] 02:01:41: Die Rolladen werden um 06:00 zuzüglich einer zufälligen Verzögerung öffnen.
[DEBUG] 02:01:41: Die Rolladen werden um 22:00 zuzüglich einer zufälligen Verzögerung geschlossen
[DEBUG] 02:01:41: Rolladen-Controller startet das erste mal!
[DEBUG] 02:01:41: Es ist Nacht.
[DEBUG] 02:01:41: Other source.
[DEBUG] 08:30:48: Werktag = 0
[DEBUG] 08:30:48: Rolladen-Controller ist gestartet (Ver.2.3)
[DEBUG] 08:30:48: Es ist 08:30Uhr, Öffne Rolladen
[DEBUG] 08:31:58: Rolladen wurden geöfnet.
[DEBUG] 08:31:58: Es ist Tag.

[DEBUG] 09:59:00: Die Rolladen bleiben oben… es sind 7299 Lux und 5 min bis die Rollos auf 25% fahren.
[DEBUG] 10:04:00: 7299 Lux … Die Rolladen fahren auf 25%!!!
[DEBUG] 17:59:08: Rollos bleiben auf 25 % … es sind 3960 Lux und 20 min bis die Rollos rauf fahren.
[DEBUG] 18:19:09: 3628 Die Rolladen fahren hoch!!

für das skript ist auch immer werktag gleich 0, obwohl es mittwoch bis donnerstag =1 sein sollte und die läden um 6 uhr aufgehen sollten…
kann das feiertagsskript einfluss auf das schliessen der rolläden haben??
22 uhr sollten eigentlich immer die rolladen runterfahren…

danke
Mit freundlichen Grüßen
bademeister

Moin Bademeister,

das gleiche Problem tritt bei mir auch hin und wieder auf. Ich glaube in meinem Fall passiert das meist wenn ich abseits von der Szene (ebenfalls Release 2.3 mit kleinen Anpassungen) den Rollladen manuell schalte. Einzige Lösung die bei mir funktioniert ist wenn ich eine winzige Änderung im Script vornehme (e.g. zusätzliches Leerzeichen in einem Kommentar einfügen) und dann die Szene neu abspeichere. Zum nächsten Schalttermin triggert die Szene dann wieder zur gewünschten Zeit und setzt auch die Variable “Werktag” korrekt. Seltsamerweise löst ein einfacher Neustart der Szene das Problem nicht.

Ich habe bisher nie ganz verstanden was eigentlich passiert wenn zwei Instanzen der Szene starten und eine davon “gekillt” wird. Mir scheint es das die meisten Probleme mit dem Rollladenscript in dem nächtlichen Neustart der Szene begründet sind. Dabei wird m.E. die alte Instanz nicht immer gestoppt und dümpelt noch im Hintergrund herum. Habe mittlerweile die maximale Anzahl der Instanzen aus 1 heruntergesetzt und stelle aber auch gerade fest das n der Szene kein Schleifenschutz implementiert ist. Vielleicht würde das ja helfen.
Güße
Alex

Hi lodi,

probleme habe ich mit dem skript in regelmässigen abständen bzw. nachdem ich was geändert habe (wg Urlaub noch rolladen hinzugefügt etc)
normalerweise hat dann wie von dir beschrieben, eine kleine änderung und abspeichern genügt und alles lief wieder.
diesmal hat nach dem urlaub alles für ne woche funktioniert und dann plötzlich nicht mehr…
werde jetzt das skript mal komplett neu anlegen und dann mal schauen…

obs an den instanzen liegt weiss ich nicht. bei mir tritt zum ersten mal das problem mit dem werktag auf… allerdings nur dienstag und mittwoch, am donnerstag hat er erkannt, dass werktag ist und die rolladen um 6 uhr geöffnet…
das abends nicht schliessen liegt aber eher nicht am werktag problem, oder?

Mit freundlichen Grüßen
bademeister

Hallo Zusammen,

mich störte bisher, das der Sonnenschutz manachmal zurückgenommen wurde, nur weil zufällig nach 20 minuten wieder eine kleine Wolke da war.

Durch die Berechnung des gleitenden Mittelwertes werden nun kurze positive und negative Spitzen gefiltert. Nur wenn der Mittelwert die eingestellten Grenzwerte verletzt bewegen sich die Rolläden. Die Mittelwertbildung erfolgt bei jedem Aufruf des Scripts, also jede Minute. Die Filterung kann über n Zyklen stattfinden, also über n Minuten.


      -- Mittelwert berechnung
  	  local n = 10;
          local luxMittelwert = tonumber(fibaro:getGlobalValue('luxMittelwert'));
  	  local luxMittelwert = (1/(n+1)) * (lux-luxMittelwert) + luxMittelwert;
 	  fibaro:setGlobal('luxMittelwert', luxMittelwert);
	  debug('gold', ""..luxMittelwert.." ... Helligkeit Außenmodul (gemittelt)")

Man benötigt dafür eine weitere Globale Variable luxMittelwert. Die dazugehörigte Ausgabe kann dann wie folgt aussehen (Sensor wurde zum Test kurz zugehalten):


...
[DEBUG] 11:45:02: 3408 ... Helligkeit Außenmodul
[DEBUG] 11:45:02: 2791.5500587852 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:46:02: 3408 ... Helligkeit Außenmodul
[DEBUG] 11:46:02: 2847.590962532 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:47:02: 0 ... Helligkeit Außenmodul
[DEBUG] 11:47:02: 2798.5372386655 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:48:02: 3408 ... Helligkeit Außenmodul
[DEBUG] 11:48:02: 2844.8520351505 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:49:02: 3408 ... Helligkeit Außenmodul
[DEBUG] 11:49:02: 2986.9563955914 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:50:02: 3404 ... Helligkeit Außenmodul
...

Nimmt man dann anstelle des Sensorwerts den gemittelten Wert, wird die Steuerung wesentlich robuster.

Vielleicht sind die globalen Parameter falsch initialisiert oder die Rolläden sind auf einer falschen initial Position.

Dafür wurde am Ende des Scripts eine kleine Routine vorgesehen. Wenn man eine Änderung im Scipt macht, immer die Routinge manuell Starten, damit die Rolläden in Grundstellung fahren und die globalen Parameter richtig initialiesiert werden.

hallo ewald113,

alles schon probiert, liefert leider keine verbesserung…

mfg

Ich habe gestern einen interessanten Fall im Zusammenhang mit dem Sonnenschutz beobachtet:

Nachdem am Sonntag nachmittags die Sonne kurzzeitig sehr hell schien, wurde der Code für den Sonnenschutz aktiviert. Meine Version des Skripts prüft nach einigen Minuten nochmals, ob der Wert für die Aktivierung des Sonnenschutzes überschritten wird (um zu verhindern, dass bei sehr kurzzeitiger Sonne gleich die Rollläden auf Sonnenschutz fahren). Dieser Fall war am Sonntag bei uns aber nicht mehr gegeben, da sich die Sonne wohl gleich für den Rest des Nachmittags wieder hinter Wolken verabschiedet hatte. Also fuhren die Rollläden am Sonntag nicht auf Sonnenschutz, wie beabsichtigt.

Aber am Montag fuhr das Skript nach erneutem Überschreiten des Wertes um die Mittagszeit die Rollläden sofort auf Sonnenschutz, ohne erneute Prüfung. Eigentlich hatte ich gedacht, dass in diesem Fall (neuer Tag) auch nochmal eine zweite Prüfung passiert, was aber so nicht der Fall ist.

Nun habe ich deshalb wieder die Codevariante aktiviert, wo die Szene nachts rebootet wird. Dann werden alle Variablen auf Grundstellung gesetzt und damit wird auch an einem neuen Tag die Helligkeit ein zweites Mal überprüft, bevor der Sonnenschutz aktiviert wird.

Die Idee oben mit den Mittelwerten ist auch gut, werde ich eventuell auch mal ausprobieren.

Hallo liebes Forum,

ich habe seit fast zwei Jahren das unten aufgeführte Skript ohne Problame am laufen. Seit einiger Zeit erhalte ich die folgende Fehlermeldung im Debug:
[DEBUG] 20:54:35: 2019-05-15 20:54:35.796610 [ error] timer handler failed with error: /opt/fibaro/scenes/366.lua:231: attempt to concatenate a nil value
Kann mir jemand mitteilen, woran das liegt und wie ich diese Meldung abstellen kann? firmware der HC2 ist 4.540


--[[
%% autostart
%% properties
%% globals
--]]
 
local minSonAuf = '00' 				-- Vohrzeichen - + min. wo die Sonne Frueher auf geht... SonnenAufgang.
local minSonUnt = '00' 				-- Vohrzeichen - + min. wo die Sonne Spaeter unter geht... SonnenUntergang.
local zeitFruehstensAuf = '06:00'   --Fruehstens wenn die Sonne auf geht.
local zeitSpaetestensAuf = '08:00'  --Spaetestens wenn die Sonne auf geht.
local zeitMaxUntergang = '23:00'    --Spaetestens wenn die Sonne unter geht.
 
local startSunLux = 20000; 			-- über 22.000 Lux für zu
local startSunTemp = 25;			-- min 22 Grad damit Sonnenschutz
local startSunDelay = 5;			-- 5 Min bis zu
local endSunLux = 7000;				-- unter 7.000 Lux für auf
local endSunDelay = 20;				-- 10 Min bis auf
local luxSensor = 67				-- Helichkeits sensor.
local tempSensor = 379				-- Temperatursensor
local rebootSceneID = 207		    -- ID der eigenen Scene die rebotet wird.
local meldungenDebug = 0			-- hilfs vareable um die meldungen nicht an dauernd zu wiederholen.

local rs_living_1 = 152;
local rs_living_2 = 150;
local rs_living_3 = 154;
local rs_living_4 = 175;
local rs_kueche_1 = 181;
local rs_hwr_1 = 183;
local rs_bad_1 = 185;

local doorID1 = 22;
local doorID2 = 26;
local doorID3 = 30;

local maxID = 2000
-----------------------------------------------------------------------------------------
debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
--#######################################################################################
local sourceTrigger = fibaro:getSourceTrigger();
function sceneReboot()
		local currentDate = os.date("*t");
        if ((currentDate.hour == 2) and (currentDate.min >= 0)and (currentDate.min < 1))
        or sourceTrigger["type"] == "other" then
              debug('salmon',"Neustart der Scene!")
              fibaro:sleep(1*60*1000)
              fibaro:startScene(rebootSceneID);
        end
        setTimeout(sceneReboot, 1*60*1000)
end
--#######################################################################################
    debug('gold', ""..fibaro:getValue(1,'sunriseHour').." ... echte SonnenAufgang")
    --debug('steelblue', ""..minSonAuf.." min... Aufgesetzte zeit in minuten bis Sonnen Aufgang.")
    local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
    local VersetzteSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
    --debug('yellow',""..VersetzteSonnenAufgang.." Versetzte.... SonnenAufgang")
----------------------------------------------------------------------------------------
    debug('orangered',""..fibaro:getValue(1,'sunsetHour').. " ... echte SonnenUntergang")
    --debug('steelblue', ""..minSonUnt.." min... Aufgesetzte zeit in minuten bis Sonnen Untergang.")
    local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
    local VersetzteSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
    --debug('orangered',""..VersetzteSonnenUntergang.." Versetzte... SonnenUntergang")
--########################################################################################
            if VersetzteSonnenAufgang > zeitFruehstensAuf and VersetzteSonnenAufgang < zeitSpaetestensAuf then
                debug('yellow',"Die Rollos werden um "..VersetzteSonnenAufgang.. " auf gehen.")
              elseif VersetzteSonnenAufgang < zeitFruehstensAuf then
                debug('yellow',"Die Rollos werden um "..zeitFruehstensAuf.. " auf gehen.")
              elseif VersetzteSonnenAufgang > zeitSpaetestensAuf then
                debug('yellow',"Die Rollos werden um "..zeitSpaetestensAuf.. " auf gehen.")  
              end
            --------------------------------------------------------------------------------------------
            if VersetzteSonnenUntergang > zeitMaxUntergang then
                debug('steelblue',"Die Rollos werden um "..zeitMaxUntergang.. " unter gehen.")
			  else
                debug('steelblue',"Die Rollos werden um "..VersetzteSonnenUntergang.. " runter gehen.")
              end
--#########################################################################################
	  debug('darkgreen',"Rollershutter-Controller startet das erste mal!");
 
function rollerShutter()
----------------------------------------------------------------------------------------
    local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
    local VersetzteSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
----------------------------------------------------------------------------------------
    local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
    local VersetzteSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
----------------------------------------------------------------------------------------
	local currentDate = os.date('*t');
	local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
	local SonnenSchutz = tonumber(fibaro:getGlobalValue('SonnenSchutz'));
	  
----------------------------------------------------------------------------------------
	local version = '4.3';
	local currentDate = os.date('*t');
	local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
	local random = math.random(27);  --Zufallswert von 0-45min
	local min = math.floor((random*100)/60);
	
----------------------------------------------------------------------------------------
-----------------------------Random Sonnenuntergang-------------------------------------
	local randomzu = math.random(5,18);	--Zufallswert zwischen 15min (9) und 60min (36)
	local minzu = math.floor((randomzu*100)/60);  
  	--debug('darkgreen',"Waiting " .. minzu .. " min bis Rollläden schließen");
  	--debug('darkgreen',"Waiting " .. min .. " min bis Rollläden öffnen");
------------------------------------------------------------------------------------------
---#################   SonnenSchutz... rollos runter fahren !!   #########################---
------------------------------------------------------------------------------------------
 
if  ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
	and ( tonumber(fibaro:getValue(tempSensor, "value")) > startSunTemp )
    and (os.date("%H:%M", os.time()) > VersetzteSonnenAufgang)
    and (os.date("%H:%M", os.time()) < VersetzteSonnenUntergang)
    and (tonumber(SonnenSchutz) == 0)
    then
 
    	fibaro:setGlobal('SunFirstMaxTimeLux', '1');
        local gSunFirstMaxTimeLux = fibaro:getGlobalModificationTime('SunFirstMaxTimeLux')
 
     if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
      and ((os.time() - gSunFirstMaxTimeLux) >= startSunDelay*60)
      then
      ---------------- Rollos eintragen  ----------------------------------------

		fibaro:call(rs_living_1, "setValue", "35")
		fibaro:call(rs_living_2, "setValue", "70");
		fibaro:call(rs_living_3, "setValue", "35");
      	--fibaro:call(rs_living_4, "setValue", "70");
      ---------------------------------------------------------------------------
        debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Lux  ... Die Rollos fahren auf Sonnenschutz') 
		debug('greenyellow', fibaro:getValue(tempSensor, "value")..' Temp  ... Die Rollos fahren auf')		
        fibaro:setGlobal('SunFirstMaxTimeLux', '0');
        fibaro:setGlobal('SunFirstMinTimeLux', '0');
        fibaro:setGlobal('SonnenSchutz', '1'); --SonnenSchutz wurde gesetzt.
        fibaro:setGlobal('RolloUnten0Oben1', '0');
        meldungenDebug = 0
      elseif meldungenDebug == 0 then
    	debug('lightsteelblue','Die Rollos bleiben oben... es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux  und '..startSunDelay..' min bis die Rollos auf Sonnenschutz fahren.')
		meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
    end
------------------------------------------------------------------------------------------
---#################   SonnenSchutz... rollos rauf fahren !!  ###########################---
------------------------------------------------------------------------------------------ 
elseif ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
    and (os.date("%H:%M", os.time()) > VersetzteSonnenAufgang)
    and (os.date("%H:%M", os.time()) < VersetzteSonnenUntergang)
    and (tonumber(SonnenSchutz) == 1)
    then
    	fibaro:setGlobal('SunFirstMinTimeLux', '1');
		local gSunFirstMinTimeLux = fibaro:getGlobalModificationTime('SunFirstMinTimeLux')
    
     if ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux ) 
      and ((os.time() - gSunFirstMinTimeLux) >= endSunDelay*60)
      then
---------------- Rollos eintragen  --------------------------------------------------
      
        fibaro:call(rs_living_1, 'open');
        fibaro:call(rs_living_2, 'open');
        fibaro:call(rs_living_3, 'open');
      	--fibaro:call(rs_living_4, 'open');
--------------------------------------------------------------------------------------
        debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Die Rollos fahren rauf!!!') 
        fibaro:setGlobal('SunFirstMaxTimeLux', '0');
        fibaro:setGlobal('SunFirstMinTimeLux', '0');
        fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
        fibaro:setGlobal('RolloUnten0Oben1', '1');
        meldungenDebug = 0
     elseif meldungenDebug == 0 then
        debug('lightsteelblue','Rollos bleiben auf Sonnenschutz es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')       
   		meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
    end
------------------------------------------------------------------------------------------
---#################   SonnenAufgang !!  ###############################################--
------------------------------------------------------------------------------------------
elseif (
			(
				(VersetzteSonnenAufgang > zeitFruehstensAuf  and os.date("%H:%M", os.time()) == VersetzteSonnenAufgang)
				or ( VersetzteSonnenAufgang < zeitFruehstensAuf  and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
				or ( VersetzteSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf) 
			)
			--and tonumber(fibaro:getValue(tempSensor, "value")) > 0 
			and (tonumber(rollershutter_runs) == 0)
		)
then	
		
        debug('darkkhaki',"--------------------------------------------------------------");
		debug('darkkhaki',"Rollershutter-Controller  gestartet (Ver." .. version .. ")");
		debug('darkkhaki', fibaro:getValue(tempSensor, "value")..' Grad Außentemperatur ');
		fibaro:setGlobal('rollershutter_runs', '1');
		fibaro:debug('Sonnenaufgang... öffne Rollos');
		fibaro:debug('Waiting ' .. min .. ' min bis Rollläden öffnen');
		fibaro:sleep(random*100000);
 
		fibaro:call(rs_living_1, 'open');
        fibaro:call(rs_living_2, 'open');
        fibaro:call(rs_living_3, 'open');
        fibaro:call(rs_living_4, 'open');
    	fibaro:call(rs_kueche_1, 'open');
    	fibaro:call(rs_hwr_1, 'open');
    	fibaro:call(rs_bad_1, 'open');
 
      debug('yellow',"Rollos wurden geoefnet.");
      fibaro:setGlobal('SunFirstMaxTimeLux', '0');
      fibaro:setGlobal('SunFirstMinTimeLux', '0');
      fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
      fibaro:setGlobal('rollershutter_runs', '0');
      fibaro:setGlobal('RolloUnten0Oben1', '1');
    
      if (os.date("%H:%M", os.time()) >= VersetzteSonnenAufgang) then
          debug('coral',"Es ist Tag");
      end

	
-----------------------------------------------------------------------------------------    
---################    SonnenUntergang !!  ###########################################---
-----------------------------------------------------------------------------------------	
elseif (
			(
				(VersetzteSonnenUntergang < zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzteSonnenUntergang)
				or (VersetzteSonnenUntergang > zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang)
			)
			--and tonumber(fibaro:getValue(tempSensor, "value")) > 0 
			and (tonumber(rollershutter_runs) == 0)
		)
then
		
		debug('darkkhaki',"--------------------------------------------------------------");
       	debug('darkkhaki',"Rollershutter-Controller hat gestartet (Ver." .. version .. ")");
		debug('darkkhaki', fibaro:getValue(tempSensor, "value")..' Grad Außentemperatur ');
		fibaro:setGlobal('rollershutter_runs', '1');
		fibaro:debug('Sonnenunter... schließe Rollos');
		fibaro:debug('Waiting ' .. minzu .. ' min bis Rollläden schließen');
		fibaro:sleep(randomzu*100000);
		
	------ID für close ohne prüfung eines offenen Fensters------------
		
		fibaro:call(rs_living_4, 'close')						
    	fibaro:call(rs_kueche_1, 'close');
    	fibaro:call(rs_hwr_1, 'close');
    	fibaro:call(rs_bad_1, 'close');
    -----------------------------------------------------------
		while 	
			(tonumber(fibaro:getValue(doorID1, 'value')) > 0) do 
			fibaro:sleep(10*1000)
		end
			fibaro:call(rs_living_1, "setValue", "50");
			debug('royalblue',"Rollos Südseite links zu 50% geschlossen.");
		
		while 	
			(tonumber(fibaro:getValue(doorID3, 'value')) > 0) do 
			fibaro:sleep(10*1000)	--Warte 10s
		end
			fibaro:call(rs_living_3, "setValue", "50");
			debug('royalblue',"Rollos Südseite rechts zu 50% geschlossen.");
					
		while 	
			(tonumber(fibaro:getValue(doorID2, 'value')) > 0) do 
			fibaro:sleep(10*1000)	--Warte 10s
		end
			fibaro:call(rs_living_2, "setValue", "50");
			debug('royalblue',"Rollos Südseite mitte zu 50% geschlossen.");
			fibaro:sleep(60*60*1000) 	--Warte 20min
			
		while 	
			(tonumber(fibaro:getValue(doorID1, 'value')) > 0) or 
			(tonumber(fibaro:getValue(doorID2, 'value')) > 0) or
			(tonumber(fibaro:getValue(doorID3, 'value')) > 0) do 
			fibaro:sleep(10*1000)
		end
			fibaro:sleep(20*1000)
			fibaro:call(rs_living_1, 'close');
			fibaro:call(rs_living_2, 'close');
			fibaro:call(rs_living_3, 'close');
         	debug('royalblue',"alle Rollos Südseite geschlossen.");
			
	
      fibaro:setGlobal('SunFirstMaxTimeLux', '0');
      fibaro:setGlobal('SunFirstMinTimeLux', '0');
      fibaro:setGlobal('SonnenSchutz', '0'); 
      fibaro:setGlobal('rollershutter_runs', '0');
      fibaro:setGlobal('RolloUnten0Oben1', '0');
    
      if (os.date("%H:%M", os.time()) >= VersetzteSonnenUntergang) then
      debug('royalblue',"Es ist Nacht");
      end
	
end
---#######################################################################################
   setTimeout(rollerShutter, 60*1000);
end
 
--########################################################################################
 
if (sourceTrigger['type'] == 'autostart') then
	rollerShutter();
	sceneReboot(); 
elseif (sourceTrigger['type'] == 'property') then
  fibaro:debug('Source device = ' .. sourceTrigger['deviceID'])
elseif (sourceTrigger['type'] == 'global') then
  fibaro:debug('Global variable source = ' .. sourceTrigger['name'])
elseif (sourceTrigger['type'] == 'other') then
        ---------------- Rollos eintragen  ----------------------------------------
      if(os.date("%H:%M", os.time()) > VersetzteSonnenAufgang)
        and(os.date("%H:%M", os.time()) < VersetzteSonnenUntergang) then
    
       fibaro:call(rs_living_1, 'open');
        fibaro:call(rs_living_2, 'open');
        fibaro:call(rs_living_3, 'open');
        fibaro:call(rs_living_4, 'open');
    	fibaro:call(rs_kueche_1, 'open');
    	fibaro:call(rs_hwr_1, 'open');
    	fibaro:call(rs_bad_1, 'open');
        debug('coral',' Die Rollos fahren in grundstellung!!!') 
        fibaro:setGlobal('SunFirstMaxTimeLux', '0');
        fibaro:setGlobal('SunFirstMinTimeLux', '0');
        fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
        fibaro:setGlobal('RolloUnten0Oben1', '1');
      else
        debug('royalblue',' Es ist Nacht!!!') 
        fibaro:setGlobal('SunFirstMaxTimeLux', '0');
        fibaro:setGlobal('SunFirstMinTimeLux', '0');
        fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
      end
      ---------------------------------------------------------------------------
  fibaro:debug('Other source.')
end
--###########################################################################################

vielen Dank für die Hilfe

Unbenannt-1.jpg

Ich hatte diese Fehlermeldung mal mit einer älteren Version des Skripts. Ursache damals war, dass nicht alle globalen Variablen, die das Skript braucht korrekt angelegt waren.

Überprüfe mal in der Web-Oberfläche unter Steuerungen/Variablensteuerung ob die Variable rollershutter_runs dort korrekt angelegt ist.

Falls sie dort nicht angelegt ist, musst du sie neu definieren.
Falls sie dort aber korrekt auftaucht, würde ich mal das Home Center rebooten und hoffen, dass es nur ein vorübergehendes, intermittierendes Problem ist.

Hallo Mickey,

vielen Dank für die schnelle Antwort. Die Variablen sind alle angelegt, ich konnte hier keinen Fehler feststellen.

var.jpg

Hallo Leute,
seit neustem (ca. 1 Monat) habe ich das Problem das mein aufgebohrtes Script nicht mehr das macht was es soll. Z.B. Rolläden öffnen, oder schließen. Meine Tür/Rolladensteuerung will irgendwie auch nicht mehr wie sie soll. Beim Einrichten geht alles und nach paar Stunden erkennt das Script entweder erst nach > 10 min das die Türen geöffnet wurden oder gar nicht. Vielleicht könnt ihr mir weiterhelfen… bin mittlerweile ratlos.

--[[
%% autostart
%% properties
%% globals
--]]
-- Bisherige Hauptarbeiten an dem Skript: http://www.Siio.de,  boomx, parip69 und thebrain. Kleine Modifikationen von alando22
-- Version 2.3
-- Dieses Skript realisiert eine Rolladen-Steuerung zum Sonnenaufgang und - untergang mit Verzögerungszeiten und einer
-- Temperaturschwelle, die zum schließen der Rolläden unterschritten werden muss.
-- Zusätzlich ist eine zufällige Verzögerung von 1-30 Minuten eingebaut, um die Aktivitäten nicht nachvollziehbar zu machen.
-- Zudem ist ein Sonnenschutz über einen Helligkeitssensor integriert. Eine Prüfung ggf. offener Türen ist ebenfalls enthalten.
-- Bei morgendlichen Öffnen wird zwischen Werktagen und Wochenenden & Feiertagen unterschieden.
-- Wochentags wird nach Sonnenaufgang geöffnet, am Wochenende & an Feiertagen zu fester Uhrzeit.
-- Dazu ist das Skript "Variable für Feiertage" von https://www.siio.de/board/thema/variable-fuer-feiertage/#post-42440 notwendig.
-- Ohne Verwendung des Feiertagsscripts bitte die Zeile 89 auskommentieren!!!
-- Notwendige globale Variablen (vorher anlegen!):
--
--	SunFirstMaxTimeLux	Startwert = 0 (Interne Zeitvariable)
--	SunOstMaxTimeLux	Startwert = 0
--  SunWestMaxTimeLux	Startwert = 0
--	SunFirstMinTimeLux	Startwert = 0 (Interne Zeitvariable)
--  SunOstMinTimeLux	Startwert = 0
--  SunWestMinTimeLux	Startwert = 0
--	SonnenSchutz		Startwert = 0 (Variable gibt an, ob der Sonnenschutz aktiv '1' oder inaktiv '0' ist)
--  SonnenSchutzOst		Startwert = 0
--  SonnenSchutzWest	Startwert = 0
--	RolloUnten0Oben1	Startwert = 1 (Variable gibt an, ob Rolladen unten '0' oder oben '1' ist)
--	Door1Op1Cl0			Startwert = 0
--  Door2Op1Cl0			Startwert = 0

--#####################################################################################################################

local minSonAuf = '15' 					    -- Verzögerungszeit in Minuten zum öffnen der Rolläden bei Sonnenaufgang.
local minSonUnt = '0' 					    -- Verzögerungszeit in Minuten zum schließen der Rolläden bei Sonnenuntergang.
local zeitFruehstensAuf = '07:00'  			-- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitSpaetestensAuf = '09:00'  		-- Spätester Zeitpunkt, an dem die Rolläden öffnen.
local zeitWeFtAuf = '09:30'				  	-- Zeitpunkt, an dem am Wochenende und an Feiertagen die Rolläden öffnen (fixer Zeitpunkt)
local zeitMaxUntergang = '22:30'    		-- Spätester Zeitpunkt, an dem die Rolläden schließen
local maxTempStart = 40					    -- Temperatur unterhalb der die Rolladen abends schließen sollen
local Deliahaufstehen = '07:30'				-- Deliah Aufstehzeit
local zeitDeliah = '18:30'  				-- Deliah Schlafenszeit

local startSunLux = 17000 				    -- über 5.000 Lux für zu
local startSunLuxOst = 17000				
local startSunLuxWest = 17000
local startSunDelay = 10					-- 5 Min bis zu
local endSunLux = 10000					    -- unter 1.000 Lux für auf
local endSunLuxOst = 10000
local endSunLuxWest = 10000
local endSunDelay = 30					    -- 20 Min bis auf
local sunProtectPosition = 25 				-- Sonnenschutzposition für Rolladen
local sunProtectPosition1 = 0   			-- Sonnenschutzposition für Raffstores
local sunProtectLamella = 60    			-- Sonnenschutzposition Lamellen
local sunProtectTempMin = 10			  	-- Grenztemperatur, überhalb derer der Sonnenschutz aktiviert werden soll
local sunDownLamella = 0					-- Lamellenposition Sonnenuntergang
local sunUpLamella = 100					-- Lamellenposition Sonnenaufgang

local luxSensor = 292					    -- ID des Helligkeitssensors
local luxSensorOst = 364
local luxSensorWest = 370
local tempSensor = 192					    -- ID des Temperatursensors (Außentemperatur)
local rebootSceneID = 15   	    			-- ID der eigenen Scene die rebootet wird.
local meldungenDebug = 0				    -- Hilfsvariable um die Meldungen nicht andauernd zu wiederholen.

local rs_wohnraum1 = 83 			   	  	-- Wohnzimmer Raffst.
local rs_wohnraum2 = 230         			-- Terrasse Raffst.
local rs_wohnraum3 = 89         			-- Esszimmer Raffst.
local rs_wohnraum4 = 80         			-- Esszimmer Fenster
local rs_kueche1 = 127          			-- Küchenfenster
local rs_kinderzimmer1 = 113  				-- Kinderzimmer Deliah Fenster
local rs_kinderzimmer2 = 116 			  	-- Kinderzimmer Deliah Balkon
local rs_kinderzimmer3 = 319		  		-- Kinderzimmer 2 Fenster
local rs_kinderzimmer4 = 322		  		-- Kinderzimmer 2 Balkon
local rs_bad1 = 95             		  		-- Bad Dusche
local rs_bad2 = 92	             			-- Bad Toilette
local rs_schlafzimmer1 = 98         		-- Schlafzimmer Fenster
local rs_schlafzimmer2 = 101        		-- Schlafzimmer Großes Fenster

local doorID1 = 378   						-- ID des Türkontakts Terrasse
local doorID2 = 375	 					    -- ID des Türkontakts Esszimmer

-------------------------------------------------------------------------------------------------------------------------
--################################ ab hier nichts mehr ändern! ##########################################################
-------------------------------------------------------------------------------------------------------------------------

debug = function ( color, message )
	fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

--#######################################################################################

local sourceTrigger = fibaro:getSourceTrigger();
function sceneReboot()
	local currentDate = os.date("*t")    
	if ((currentDate.hour == 2) and (currentDate.min >= 0)and (currentDate.min < 1))
		or sourceTrigger["type"] == "other" then
    		debug('salmon',"Neustart der Szene!")
        	fibaro:sleep(1*30*1000)
            fibaro:startScene(rebootSceneID);
    end
    setTimeout(sceneReboot, 1*30*1000)
end

--########## Berechnung versetzter Sonnenaufgang und versetzter Sonnenuntergang ############

debug('gold', ""..fibaro:getValue(1,'sunriseHour').." ...  Sonnenaufgang")
debug('steelblue', ""..minSonAuf.." min... Zeitverzögerung zum Sonnenaufgang.")
local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
debug('yellow',""..VersetzterSonnenAufgang.." Öffnen der Rolladen.")
----------------------------------------------------------------------------------------
debug('orangered',""..fibaro:getValue(1,'sunsetHour').. " ... SonnenUntergang")
debug('steelblue', ""..minSonUnt.." min. Zeitverzögerung Sonnenuntergang.")
local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
debug('orangered',""..VersetzterSonnenUntergang..' schließen der Rolladen sofern die Temperatur '..maxTempStart..' °C unterschreitet')

--################### Feststellung ob Wochenende oder Feiertag ##################

local Feiertag_heute = tonumber(fibaro:getGlobalValue("Feiertag_heute")) -- Diese Zeile auskommentieren, wenn kein Feiertagsscript genutzt wird
local currentDate = os.date("*t")
local werktag = 1

--############ Prüfung wann Rolladen tatsächlich öffnen werden ########################

if werktag == 0 then
	debug ('yellow', "Die Rolladen werden um "..zeitWeFtAuf.." öffnen.")
	elseif
		VersetzterSonnenAufgang > zeitFruehstensAuf and VersetzterSonnenAufgang < zeitSpaetestensAuf then
        debug('yellow',"Die Rolladen werden um "..VersetzterSonnenAufgang.. " zuzüglich einer zufälligen Verzögerung öffnen.")
    elseif VersetzterSonnenAufgang < zeitFruehstensAuf then
        debug('yellow',"Die Rolladen werden um "..zeitFruehstensAuf.. " zuzüglich einer zufälligen Verzögerung öffnen.")
	elseif VersetzterSonnenAufgang > zeitSpaetestensAuf then
        debug('yellow',"Die Rolladen werden um "..zeitSpaetestensAuf.. " zuzüglich einer zufälligen Verzögerung öffnen.")
end
--------------------------------------------------------------------------------------------
if VersetzterSonnenUntergang > zeitMaxUntergang then
	debug('steelblue',"Die Rolladen werden um "..zeitMaxUntergang.. ' zuzüglich einer zufälligen Verzögerung geschlossen, sofern die Temperatur '..maxTempStart..' °C unterschreitet.')
	else
		debug('steelblue',"Die Rolladen werden um "..VersetzterSonnenUntergang.. ' zuzüglich einer zufälligen Verzögerung geschlossen, sofern die Temperatur '..maxTempStart..' °C unterschreitet.')
end

--#########################################################################################

debug('darkgreen',"Rolladen-Controller startet das erste mal!");

function rollerShutter()

--######## Berechnung der Variablen  ########

	local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
	local VersetzterSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
---------------------------------------------------------------------------------------
	local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
	local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
----------------------------------------------------------------------------------------
	local currentDate = os.date('*t');
	local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
	local SonnenSchutz = tonumber(fibaro:getGlobalValue('SonnenSchutz'));
	local SonnenSchutzOst = tonumber(fibaro:getGlobalValue('SonnenSchutzOst'));
	local SonnenSchutzWest = tonumber(fibaro:getGlobalValue('SonnenSchutzWest'));
	local TerrRaffOp0Sun1Cl2 = tonumber(fibaro:getGlobalValue('TerrRaffOp0Sun1Cl2'));
	local RolloDeliahU0O1 = tonumber(fibaro:getGlobalValue('RolloDeliahU0O1'));
----------------------------------------------------------------------------------------
	local version = '2.3';
	local currentDate = os.date('*t');
	local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
	local random = math.random(18);			-- Hier wird die zufällige Verzögerung beeinflusst.
	local min = math.floor((random*100)/60);
--------------------------------------------------------------------------------------------

	if ((Feiertag_heute == 1 or currentDate.wday == 7 or currentDate.wday == 1))
		then
			werktag = 0
			--debug('grey', "Heute ist Wochenende oder ein Feiertag.")
		else
			werktag = 1
			--debug('grey', "Heute ist ein Werktag und kein Feiertag.")
	end
  

------------------------------------------------------------------------------------------
---#################   SonnenSchutz... Rolladen runterfahren !!   #########################---
------------------------------------------------------------------------------------------

if  ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
	and sunProtectTempMin <= tonumber(fibaro:getValue(tempSensor, "value"))
    and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
    and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
    and (tonumber(SonnenSchutz) == 0)
    then
    	fibaro:setGlobal('SunFirstMaxTimeLux', '1');
        local gSunFirstMaxTimeLux = fibaro:getGlobalModificationTime('SunFirstMaxTimeLux')
     	if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
      		and ((os.time() - gSunFirstMaxTimeLux) >= startSunDelay*60)
      		then
      	
                ---------------- Rolladen eintragen  ------------------
          		
      			fibaro:call(rs_wohnraum1, "setValue", sunProtectPosition1); 	        --Fenster Wohnzimmer Raffst.
          		fibaro:call(rs_wohnraum1, "setValue2", sunProtectLamella); 		        --Lamellen
				
				if (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
					then 
						fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1);     --Fenster Esszimmer Raffst.
						fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); 	    --Lamellen
						fibaro:setGlobal('Door1Op1Cl0', '1'); 	
				elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
					then 
						fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1);     --Fenster Terrasse Raffst.
						fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); 	    --Lamellen
						fibaro:setGlobal('Door2Op1Cl0', '1'); 
				elseif (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
					then
						fibaro:setGlobal('Door1Op1Cl0', '1'); 
						fibaro:setGlobal('Door2Op1Cl0', '1'); 
				elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
					then
						fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1); 	--Fenster Terrasse Raffst.
						fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); 		--Lamellen
						fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1); 	--Fenster Esstimmer Raffst.
						fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); 		--Lamellen
						fibaro:setGlobal('Door1Op1Cl0', '0'); 
						fibaro:setGlobal('Door2Op1Cl0', '0'); 
				end
          		
          		if (os.date("%H:%M", os.time()) < zeitDeliah) 
          		    then 
          		        fibaro:call(rs_kinderzimmer1, "setValue", sunProtectPosition); 	--Fenster Kinderzimmer Deliah
          		end
          		
          		fibaro:call(rs_schlafzimmer2, "setValue", sunProtectPosition); 	  	    --Fenster Schlafzimmer Groß
				
		        ---------------------------------------------------------------------------
		
                debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Lux  ... Die Rolladen im Sueden fahren auf ' ..sunProtectPosition..'%!!!')
                fibaro:setGlobal('SunFirstMaxTimeLux', '0');
                fibaro:setGlobal('SunFirstMinTimeLux', '0');
                fibaro:setGlobal('SonnenSchutz', '1'); 									--SonnenSchutz wurde gesetzt.
                fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '1');
                meldungenDebug = 0
        elseif meldungenDebug == 0 
            then
    	        debug('lightsteelblue','Die Rolladen im Sueden bleiben oben... es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux  und '..startSunDelay..' min bis die Rollos auf ' ..sunProtectPosition..'% fahren.')
		        meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
        end
        
        
------------------------------------------------------------------------------------------
---#################   SonnenSchutzOst... Rolladen runterfahren !!   #########################---
------------------------------------------------------------------------------------------

elseif ( tonumber(fibaro:getValue(luxSensorOst, "value")) > startSunLuxOst ) and sunProtectTempMin <= tonumber(fibaro:getValue(tempSensor, "value"))
    and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang) and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
    and (tonumber(SonnenSchutzOst) == 0)
    then
    	fibaro:setGlobal('SunOstMaxTimeLux', '1');
        local gSunOstMaxTimeLux = fibaro:getGlobalModificationTime('SunOstMaxTimeLux')

     	if ( tonumber(fibaro:getValue(luxSensorOst, "value")) > startSunLuxOst )
      		and ((os.time() - gSunOstMaxTimeLux) >= startSunDelay*60)
      		then
        
      	        ---------------- Rolladen eintragen  ----------------------------------------
        
      			fibaro:call(rs_wohnraum4, "setValue", sunProtectPosition); 		        --Fenster Esszimmer
          		fibaro:call(rs_kueche1, "setValue", sunProtectPosition); 		        --Fenster Küche
          		fibaro:call(rs_bad2, "setValue", sunProtectPosition); 		            --Fenster Bad Toilette
          		fibaro:call(rs_schlafzimmer2, "setValue", sunProtectPosition); 	  	    --Fenster Schlafzimmer Groß
          
		        -----------------------------------------------------------------------------
		
        	    debug('greenyellow', fibaro:getValue(luxSensorOst, "value")..' Lux  ... Die Rolladen im Osten fahren auf ' ..sunProtectPosition..'%!!!')
        	    fibaro:setGlobal('SunOstMaxTimeLux', '0');
        	    fibaro:setGlobal('SunOstMinTimeLux', '0');
        	    fibaro:setGlobal('SonnenSchutzOst', '1'); 							    --SonnenSchutzOst wurde gesetzt.
        	    --fibaro:setGlobal('RolloUnten0Oben1', '0');
        	    meldungenDebug = 0
      	elseif meldungenDebug == 0 
      	    then
    		    debug('lightsteelblue','Die Rolladen im Osten bleiben oben... es sind ' ..fibaro:getValue(luxSensorOst, "value")..' Lux  und '..startSunDelay..' min bis die Rollos auf ' ..sunProtectPosition..'% fahren.')
			    meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
    	end	
	
	
------------------------------------------------------------------------------------------
---#################   SonnenSchutzWest... Rolladen runterfahren !!   #########################---
------------------------------------------------------------------------------------------

elseif  ( tonumber(fibaro:getValue(luxSensorWest, "value")) > startSunLuxWest )
	and sunProtectTempMin <= tonumber(fibaro:getValue(tempSensor, "value"))
    and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
    and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
    and (tonumber(SonnenSchutzWest) == 0)
    then
    	fibaro:setGlobal('SunWestMaxTimeLux', '1');
        local gSunWestMaxTimeLux = fibaro:getGlobalModificationTime('SunWestMaxTimeLux')

     	if ( tonumber(fibaro:getValue(luxSensorWest, "value")) > startSunLuxWest )
      		and ((os.time() - gSunWestMaxTimeLux) >= startSunDelay*60)
      		then
      
                ---------------- Rolladen eintragen  ----------------------------------------
      
      			if (os.date("%H:%M", os.time()) < zeitDeliah) 
      			    then 
        			    fibaro:call(rs_kinderzimmer2, "setValue", sunProtectPosition);      --Fenster Kinderzimmer Deliah Balkon
      			end
      			
          		fibaro:call(rs_kinderzimmer4, "setValue", sunProtectPosition); 	  	    --Fenster Kinderzimmer 2 Balkon
          
		        ---------------------------------------------------------------------------
		
        	    debug('greenyellow', fibaro:getValue(luxSensorWest, "value")..' Lux  ... Die Rolladen im Westen fahren auf ' ..sunProtectPosition..'%!!!')
        	    fibaro:setGlobal('SunWestMaxTimeLux', '0');
        	    fibaro:setGlobal('SunWestMinTimeLux', '0');
        	    fibaro:setGlobal('SonnenSchutzWest', '1'); 								--SonnenSchutzWest wurde gesetzt.
        	    --fibaro:setGlobal('RolloUnten0Oben1', '0');
        	    meldungenDebug = 0
      	elseif meldungenDebug == 0 
      	    then
    		    debug('lightsteelblue','Die Rolladen im Westen bleiben oben... es sind ' ..fibaro:getValue(luxSensorWest, "value")..' Lux  und '..startSunDelay..' min bis die Rollos auf ' ..sunProtectPosition..'% fahren.')
			    meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
    	end	
	
	
------------------------------------------------------------------------------------------
---#################   SonnenSchutz... Rolladen hochfahren !!  ###########################---
------------------------------------------------------------------------------------------

elseif ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
    and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
    and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
    and (tonumber(SonnenSchutz) == 1)
    then
    	fibaro:setGlobal('SunFirstMinTimeLux', '1');
		local gSunFirstMinTimeLux = fibaro:getGlobalModificationTime('SunFirstMinTimeLux')

     	if ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
      		and ((os.time() - gSunFirstMinTimeLux) >= endSunDelay*60)
      		then
      
                ---------------- Rolladen eintragen  --------------------------------------------------
        
      			fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella); 
        		fibaro:call(rs_wohnraum1, 'open'); 		    			                --Fenster Wohnzimmer Raffst.
        		fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella); 		
        		fibaro:call(rs_wohnraum2, 'open'); 		    			                --Fenster Terrasse Raffst.
        		fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella); 
        		fibaro:call(rs_wohnraum3, 'open'); 		    			                --Fenster Esszimmer Raffst. 
        		fibaro:call(rs_schlafzimmer2, 'open'); 	  				                --Fenster Schlafzimmer Groß
      			if (os.date("%H:%M", os.time()) < zeitDeliah) 
      			    then 
        			    fibaro:call(rs_kinderzimmer1, 'open'); 	  			                --Fenster Kinderzimmer Deliah
      			end
      
		        --------------------------------------------------------------------------------------
       
      			debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Die Rolladen im Sueden fahren hoch!!!')
        		fibaro:setGlobal('SunFirstMaxTimeLux', '0');
        		fibaro:setGlobal('SunFirstMinTimeLux', '0');
        		fibaro:setGlobal('SonnenSchutz', '0'); 					                --SonnenSchutz wurde entfernt.
        		--fibaro:setGlobal('RolloUnten0Oben1', '1');
      			fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');
        		meldungenDebug = 0
     	elseif meldungenDebug == 0 
     	    then
        	    debug('lightsteelblue','Rollos im Sueden bleiben auf ' ..sunProtectPosition..' % ...  es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')
       			meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
    	end
	
	
------------------------------------------------------------------------------------------
---#################   SonnenSchutzOst... Rolladen hochfahren !!  ###########################---
------------------------------------------------------------------------------------------

elseif ( tonumber(fibaro:getValue(luxSensorOst, "value")) < endSunLuxOst )
    and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
    and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
    and (tonumber(SonnenSchutzOst) == 1)
    then
    	fibaro:setGlobal('SunOstMinTimeLux', '1');
		local gSunOstMinTimeLux = fibaro:getGlobalModificationTime('SunOstMinTimeLux')

     	if ( tonumber(fibaro:getValue(luxSensorOst, "value")) < endSunLuxOst )
      		and ((os.time() - gSunOstMinTimeLux) >= endSunDelay*60)
      		then
      
                ---------------- Rolladen eintragen  --------------------------------------------------
       
        		fibaro:call(rs_wohnraum4, 'open'); 		   	 	                        --Fenster Esszimmer
        		fibaro:call(rs_kueche1, 'open'); 		     	                        --Fenster Küche
        		fibaro:call(rs_bad2, 'open'); 		        	                        --Fenster Bad Toilette
        		fibaro:call(rs_schlafzimmer2, 'open'); 	  		                        --Fenster Schlafzimmer Groß
      
		        --------------------------------------------------------------------------------------
        
      			debug('greenyellow', fibaro:getValue(luxSensorOst, "value")..' Die Rolladen im Osten fahren hoch!!!')
       	 		fibaro:setGlobal('SunOstMaxTimeLux', '0');
        		fibaro:setGlobal('SunOstMinTimeLux', '0');
        		fibaro:setGlobal('SonnenSchutzOst', '0'); 		                        --SonnenSchutzOst wurde entfernt.
        		--fibaro:setGlobal('RolloUnten0Oben1', '1');
        		meldungenDebug = 0
     	elseif meldungenDebug == 0 
     	    then
        	    debug('lightsteelblue','Rollos im Osten bleiben auf ' ..sunProtectPosition..' % ...  es sind ' ..fibaro:getValue(luxSensorOst, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')
   			    meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
    	end

------------------------------------------------------------------------------------------
---#################   SonnenSchutzWest... Rolladen hochfahren !!  ###########################---
------------------------------------------------------------------------------------------

elseif ( tonumber(fibaro:getValue(luxSensorWest, "value")) < endSunLuxWest )
    and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
    and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
    and (tonumber(SonnenSchutzWest) == 1)
    then
    	fibaro:setGlobal('SunWestMinTimeLux', '1');
		local gSunWestMinTimeLux = fibaro:getGlobalModificationTime('SunWestMinTimeLux')

     	if ( tonumber(fibaro:getValue(luxSensorWest, "value")) < endSunLuxWest )
      		and ((os.time() - gSunWestMinTimeLux) >= endSunDelay*60)
      		then
      
                ---------------- Rolladen eintragen  --------------------------------------------------
        
        		fibaro:call(rs_kinderzimmer4, 'open'); 	                                --Fenster Kinderzimmer 2 Balkon
      			if (os.date("%H:%M", os.time()) < zeitDeliah) 
      			    then 
        		        fibaro:call(rs_kinderzimmer2, 'open'); 	                            --Fenster Kinderzimmer Deliah Balkon
				end
      
		        --------------------------------------------------------------------------------------
        
      			debug('greenyellow', fibaro:getValue(luxSensorWest, "value")..' Die Rolladen im Westen fahren hoch!!!')
        		fibaro:setGlobal('SunWestMaxTimeLux', '0');
        		fibaro:setGlobal('SunWestMinTimeLux', '0');
        		fibaro:setGlobal('SonnenSchutzWest', '0');                              --SonnenSchutzWest wurde entfernt.
        		--fibaro:setGlobal('RolloUnten0Oben1', '1');
        		meldungenDebug = 0
     	elseif meldungenDebug == 0 
     	    then
        	    debug('lightsteelblue','Rollos im Westen bleiben auf ' ..sunProtectPosition..' % ...  es sind ' ..fibaro:getValue(luxSensorWest, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')
   			    meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
    	end
	
	
------------------------------------------------------------------------------------------
---#################   Sonnenaufgang Werktags!!  ###############################################--
------------------------------------------------------------------------------------------

elseif werktag == 1 and ((VersetzterSonnenAufgang > zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzterSonnenAufgang)
 	or (VersetzterSonnenAufgang < zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
 	or (VersetzterSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
 	and (tonumber(rollershutter_runs) == 0))
    then
		debug('green', 'Werktag = '.. werktag)
        debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('gold', 'Sonnenaufgang... öffne Rolladen');
		debug('gold', 'Waiting ' .. min .. ' min');
		fibaro:sleep(random*100000);
    
    	---------------- Rolladen eintragen  --------------------------------------------------
    
      	fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella); 	
      	fibaro:call(rs_wohnraum1, 'open');
        	fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella); 	
      	fibaro:call(rs_wohnraum2, 'open');
    		fibaro:sleep(math.random(5000,10000));
      	fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella); 	
    	fibaro:call(rs_wohnraum3, 'open');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_wohnraum4, 'open');
    		fibaro:sleep(math.random(20000,60000));
    	fibaro:call(rs_kueche1, 'open');
    		fibaro:sleep(math.random(20000,60000));
      	fibaro:call(rs_bad1, 'open');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_bad2, 'open');
    		fibaro:sleep(math.random(20000,60000));
    	--fibaro:call(rs_kinderzimmer1, 'open');
    		--fibaro:sleep(math.random(5000,10000));
      	--fibaro:call(rs_kinderzimmer2, 'open');
    		--fibaro:sleep(math.random(20000,60000));
      	fibaro:call(rs_kinderzimmer3, 'open');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_kinderzimmer4, 'open');
    		fibaro:sleep(math.random(20000,60000));
    	fibaro:call(rs_schlafzimmer1, 'open');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_schlafzimmer2, 'open');
    		fibaro:sleep(math.random(5000,10000));
    
    	--------------------------------------------------------------------------------------
   
      	debug('yellow',"Rolladen wurden geöffnet.");
      	fibaro:setGlobal('SunFirstMaxTimeLux', '0');
	  	fibaro:setGlobal('SunOstMaxTimeLux', '0');
	  	fibaro:setGlobal('SunWestMaxTimeLux', '0');
      	fibaro:setGlobal('SunFirstMinTimeLux', '0');
	  	fibaro:setGlobal('SunOstMinTimeLux', '0');
	  	fibaro:setGlobal('SunWestMinTimeLux', '0');
      	fibaro:setGlobal('SonnenSchutz', '0'); 		                                    --SonnenSchutz wurde entfernt.
	  	fibaro:setGlobal('SonnenSchutzOst', '0'); 	
	  	fibaro:setGlobal('SonnenSchutzWest', '0'); 	
      	fibaro:setGlobal('rollershutter_runs', '0');
      	fibaro:setGlobal('RolloUnten0Oben1', '1');
	  	fibaro:setGlobal('RolloDeliahU0O1', '1');
      	fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');

      	if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang) 
      	    then
        	    debug('coral',"Es ist Tag.");
      	end

------------------------------------------------------------------------------------------
---#################   Sonnenaufgang Deliah!!  ###################################--
------------------------------------------------------------------------------------------

elseif werktag == 1 and ((VersetzterSonnenAufgang > Deliahaufstehen and os.date("%H:%M", os.time()) == VersetzterSonnenAufgang)
 	or (VersetzterSonnenAufgang < Deliahaufstehen and os.date("%H:%M", os.time()) == Deliahaufstehen)
 	or (VersetzterSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
 	and (tonumber(rollershutter_runs) == 0))
    then
		debug('green', 'Werktag = '.. werktag)
        debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('gold', 'Sonnenaufgang... öffne Rolladen');
		debug('gold', 'Waiting ' .. min .. ' min');
		fibaro:sleep(random*100000);
    
    	---------------- Rolladen eintragen  --------------------------------------------------
    
      	fibaro:call(rs_kinderzimmer1, 'open');
    		fibaro:sleep(math.random(5000,10000));
      	fibaro:call(rs_kinderzimmer2, 'open');
    		fibaro:sleep(math.random(20000,60000));
      	
    	--------------------------------------------------------------------------------------
   
      	debug('yellow',"Deliah's Rolladen wurden geöffnet.");
      	--fibaro:setGlobal('SunFirstMaxTimeLux', '0');
	  	--fibaro:setGlobal('SunOstMaxTimeLux', '0');
	  	fibaro:setGlobal('SunWestMaxTimeLux', '0');
      	--fibaro:setGlobal('SunFirstMinTimeLux', '0');
	  	--fibaro:setGlobal('SunOstMinTimeLux', '0');
	  	fibaro:setGlobal('SunWestMinTimeLux', '0');
      	--fibaro:setGlobal('SonnenSchutz', '0'); 		                                    --SonnenSchutz wurde entfernt.
	  	--fibaro:setGlobal('SonnenSchutzOst', '0'); 	
	  	fibaro:setGlobal('SonnenSchutzWest', '0'); 	
      	fibaro:setGlobal('rollershutter_runs', '0');
      	--fibaro:setGlobal('RolloUnten0Oben1', '1');
	  	fibaro:setGlobal('RolloDeliahU0O1', '1');
      	--fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');

      	if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang) 
      	    then
        	    debug('coral',"Es ist Tag.");
      	end
		
		
------------------------------------------------------------------------------------------
---#################   Sonnenaufgang Wochenende Erdgeschoss!!  ###############################################--
------------------------------------------------------------------------------------------

elseif werktag == 0 and ((VersetzterSonnenAufgang > zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzterSonnenAufgang)
 	or (VersetzterSonnenAufgang < zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
 	or (VersetzterSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
 	and (tonumber(rollershutter_runs) == 0))
    then
		debug('green', 'Werktag = '.. werktag)
        debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('gold', 'Sonnenaufgang... öffne Rolladen');
		debug('gold', 'Waiting ' .. min .. ' min');
		fibaro:sleep(random*100000);
    
    	---------------- Rolladen eintragen  --------------------------------------------------
    
      	fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella); 	
      	fibaro:call(rs_wohnraum1, 'open');
        	fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella); 	
      	fibaro:call(rs_wohnraum2, 'open');
    		fibaro:sleep(math.random(5000,10000));
      	fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella); 	
    	fibaro:call(rs_wohnraum3, 'open');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_wohnraum4, 'open');
    		fibaro:sleep(math.random(20000,60000));
    	fibaro:call(rs_kueche1, 'open');
    		fibaro:sleep(math.random(20000,60000));
    
    	--------------------------------------------------------------------------------------
      	   
      	debug('yellow',"Rolladen wurden geöffnet.");
      	fibaro:setGlobal('SunFirstMaxTimeLux', '0');
	  	fibaro:setGlobal('SunOstMaxTimeLux', '0');
	  	fibaro:setGlobal('SunWestMaxTimeLux', '0');
      	fibaro:setGlobal('SunFirstMinTimeLux', '0');
	  	fibaro:setGlobal('SunOstMinTimeLux', '0');
	  	fibaro:setGlobal('SunWestMinTimeLux', '0');
      	fibaro:setGlobal('SonnenSchutz', '0'); 		                                    --SonnenSchutz wurde entfernt.
	  	fibaro:setGlobal('SonnenSchutzOst', '0'); 	
	  	fibaro:setGlobal('SonnenSchutzWest', '0'); 	
      	fibaro:setGlobal('rollershutter_runs', '0');
      	fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');
		fibaro:setGlobal('Door1Op1Cl0', '1'); 
		fibaro:setGlobal('Door2Op1Cl0', '1'); 
      
      	if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang) 
      	    then
          	    debug('coral',"Es ist Tag.");
      	end
  
    
------------------------------------------------------------------------------------------
---#################   Sonnenaufgang Wochenende Obergeschoss!!  ###################################--
------------------------------------------------------------------------------------------

elseif werktag == 0 and ((string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == zeitWeFtAuf)
 	and (tonumber(rollershutter_runs) == 0))
    then
		debug('green', 'Werktag = '.. werktag)
        debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('yellow','Es ist '..zeitWeFtAuf..'Uhr, Öffne Rolladen');
    
    	---------------- Rolladen eintragen  --------------------------------------------------

      	fibaro:call(rs_bad1, 'open');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_bad2, 'open');
    		fibaro:sleep(math.random(20000,60000));
    	fibaro:call(rs_kinderzimmer1, 'open');
    		fibaro:sleep(math.random(5000,10000));
      	fibaro:call(rs_kinderzimmer2, 'open');
    		fibaro:sleep(math.random(20000,60000));
      	fibaro:call(rs_kinderzimmer3, 'open');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_kinderzimmer4, 'open');
    		fibaro:sleep(math.random(20000,60000));
    	fibaro:call(rs_schlafzimmer1, 'open');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_schlafzimmer2, 'open');
    		fibaro:sleep(math.random(10000,20000));
    
    	--------------------------------------------------------------------------------------

      	debug('yellow',"Rolladen wurden geöffnet.");
      	fibaro:setGlobal('SunFirstMaxTimeLux', '0');
	  	fibaro:setGlobal('SunOstMaxTimeLux', '0');
	  	fibaro:setGlobal('SunWestMaxTimeLux', '0');
      	fibaro:setGlobal('SunFirstMinTimeLux', '0');
	  	fibaro:setGlobal('SunOstMinTimeLux', '0');
	  	fibaro:setGlobal('SunWestMinTimeLux', '0');
      	fibaro:setGlobal('SonnenSchutz', '0');                                          --SonnenSchutz wurde entfernt.
	  	fibaro:setGlobal('SonnenSchutzOst', '0'); 
	  	fibaro:setGlobal('SonnenSchutzWest', '0'); 
      	fibaro:setGlobal('rollershutter_runs', '0');
      	fibaro:setGlobal('RolloUnten0Oben1', '1');
	  	fibaro:setGlobal('RolloDeliahU0O1', '1');

	  	if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang) 
	  	    then
          	    debug('coral',"Es ist Tag.");
      	end
	  
    
-----------------------------------------------------------------------------------------
---################    SonnenUntergang Deliah!!  ###########################################---
-----------------------------------------------------------------------------------------

elseif 	(tonumber(fibaro:getValue(tempSensor, "value")) < maxTempStart 
	and (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == zeitDeliah)
	and (tonumber(rollershutter_runs) == 0) and (tonumber(RolloDeliahU0O1) == 1))
    then

       	debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('steelblue', 'Deliahs Schlafenszeit... schließe Rolladen sofern die Temperatur '..maxTempStart..' °C unterschreitet')
		debug('steelblue', 'Die Temperatur beträgt '..tonumber(fibaro:getValue(tempSensor, "value"))..'°C.')
		debug('steelblue', 'Die zufällige Verzögerung beträgt ' .. min .. ' min.');
		
		---------------- Rolladen eintragen  --------------------------------------------------
      	
    	fibaro:call(rs_kinderzimmer1, "setValue", sunProtectPosition);
    		fibaro:sleep(math.random(5000,10000));
      	fibaro:call(rs_kinderzimmer2, 'close');
		
    	--------------------------------------------------------------------------------------

      	debug('royalblue',"Deliahs Rolladen wurden geschlossen.");
      	fibaro:setGlobal('rollershutter_runs', '0');
      	fibaro:setGlobal('RolloDeliahU0O1', '0');      
      	  	  

-----------------------------------------------------------------------------------------
---################    SonnenUntergang !!  ###########################################---
-----------------------------------------------------------------------------------------

elseif 	(tonumber(fibaro:getValue(tempSensor, "value")) < maxTempStart and tonumber(rollershutter_runs) == 0) and 
    	((VersetzterSonnenUntergang < zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzterSonnenUntergang)
 	or (VersetzterSonnenUntergang > zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang))
    then

       	debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('steelblue', 'Sonnenuntergang... schließe Rolladen sofern die Temperatur '..maxTempStart..' °C unterschreitet')
		debug('steelblue', 'Die Temperatur beträgt '..tonumber(fibaro:getValue(tempSensor, "value"))..'°C.')
		debug('steelblue', 'Die zufällige Verzögerung beträgt ' .. min .. ' min.');
		fibaro:sleep(random*100000);
    
    	---------------- Rolladen eintragen  --------------------------------------------------

      	fibaro:call(rs_wohnraum1, 'close');
    	fibaro:call(rs_wohnraum1, "setValue2", sunDownLamella);
    		fibaro:sleep(math.random(5000,10000));
			
		if (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
			then 
				fibaro:call(rs_wohnraum3, 'close');
				fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
				fibaro:setGlobal('Door1Op1Cl0', '1'); 
					fibaro:sleep(math.random(5000,10000));
		elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
			then 
				fibaro:call(rs_wohnraum2, 'close');
				fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
				fibaro:setGlobal('Door2Op1Cl0', '1'); 
					fibaro:sleep(math.random(5000,10000));
		elseif(tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
			then
				fibaro:setGlobal('Door1Op1Cl0', '1'); 
				fibaro:setGlobal('Door2Op1Cl0', '1'); 
					fibaro:sleep(math.random(5000,10000));
		elseif(tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
			then
				fibaro:call(rs_wohnraum2, 'close');
				fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
					fibaro:sleep(math.random(5000,10000));
				fibaro:call(rs_wohnraum3, 'close');
				fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
					fibaro:sleep(math.random(5000,10000));
				fibaro:setGlobal('Door1Op1Cl0', '0'); 
				fibaro:setGlobal('Door2Op1Cl0', '0'); 
		end
		
    	fibaro:call(rs_wohnraum4, 'close');
    		fibaro:sleep(math.random(20000,60000));
    	fibaro:call(rs_kueche1, 'close');
    		fibaro:sleep(math.random(20000,60000));
      	fibaro:call(rs_bad1, 'close');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_bad2, 'close');
    		fibaro:sleep(math.random(20000,60000));
		
		if (tonumber(RolloDeliahU0O1) == 1) 
		    then	
				fibaro:call(rs_kinderzimmer1, "setValue", sunProtectPosition);
					fibaro:sleep(math.random(5000,10000));
				fibaro:call(rs_kinderzimmer2, 'close');
					fibaro:sleep(math.random(20000,60000));
      			debug('royalblue',"Rolladen von Deliah wurden geschlossen.");
      			fibaro:setGlobal('RolloDeliahU0O1', '0');
		end
		
      	fibaro:call(rs_kinderzimmer3, 'close');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_kinderzimmer4, 'close');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_schlafzimmer1, 'close');
    		fibaro:sleep(math.random(5000,10000));
    	fibaro:call(rs_schlafzimmer2, "setValue", sunProtectPosition);
    		fibaro:sleep(math.random(10000,20000));
			
    	--------------------------------------------------------------------------------------

      	debug('royalblue',"Rolladen wurden geschlossen.");
      	fibaro:setGlobal('SunFirstMaxTimeLux', '0');
	  	fibaro:setGlobal('SunOstMaxTimeLux', '0');
	  	fibaro:setGlobal('SunWestMaxTimeLux', '0');
      	fibaro:setGlobal('SunFirstMinTimeLux', '0');
	  	fibaro:setGlobal('SunOstMinTimeLux', '0');
	  	fibaro:setGlobal('SunWestMinTimeLux', '0');
      	fibaro:setGlobal('SonnenSchutz', '0'); 		                                    --SonnenSchutz wurde entfernt.
	  	fibaro:setGlobal('SonnenSchutzOst', '0'); 
	  	fibaro:setGlobal('SonnenSchutzWest', '0'); 
      	fibaro:setGlobal('rollershutter_runs', '0');
      	fibaro:setGlobal('RolloUnten0Oben1', '0');
	  	fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '2');

      	if (os.date("%H:%M", os.time()) >= VersetzterSonnenUntergang) 
      	    then
      		    debug('royalblue',"Es ist Nacht.");
      	end
	
	
-----------------------------------------------------------------------------------------
---################    Rolladen oeffnen wenn Tuer auf geht  ###########################################---
-----------------------------------------------------------------------------------------	

elseif (tonumber(rollershutter_runs) == 0) and (tonumber(TerrRaffOp0Sun1Cl2) > 0) and ((tonumber(fibaro:getValue(doorID1, "value")) > 0) or (tonumber(fibaro:getValue(doorID2, "value")) > 0))
	then
		if (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door1Op1Cl0) == 0)
			then 
				fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella); 	
				fibaro:call(rs_wohnraum2, 'open');
				fibaro:setGlobal('Door1Op1Cl0', '1');
				fibaro:sleep(math.random(5000,10000));
		elseif 
			(tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0) and (tonumber(Door2Op1Cl0) == 0)
			then 
				fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella); 	
				fibaro:call(rs_wohnraum3, 'open');
				fibaro:setGlobal('Door2Op1Cl0', '1');
				fibaro:sleep(math.random(5000,10000));
		elseif
			(tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0) and (tonumber(Door1Op1Cl0) == 0) and (tonumber(Door2Op1Cl0) == 0)
			then
				fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella); 	
				fibaro:call(rs_wohnraum1, 'open');
				fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella); 	
				fibaro:call(rs_wohnraum3, 'open');
				fibaro:setGlobal('Door1Op1Cl0', '1');
				fibaro:setGlobal('Door2Op1Cl0', '1');
				fibaro:sleep(math.random(5000,10000));
		end
		
		
-----------------------------------------------------------------------------------------
---################    Rolladen schließen nach schließen der Tueren Sonnenschutz  ####################---
-----------------------------------------------------------------------------------------		

elseif (tonumber(rollershutter_runs) == 0) and (tonumber(TerrRaffOp0Sun1Cl2) == 1) and ((tonumber(Door1Op1Cl0) == 1) or (tonumber(Door2Op1Cl0) == 1))
	then
		if (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door1Op1Cl0) == 1)
			then
				fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1);             --Fenster Terrasse Raffst.
				fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); 	            --Lamellen
				fibaro:setGlobal('Door1Op1Cl0', '0');
				fibaro:sleep(math.random(5000,10000));
		elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door2Op1Cl0) == 1)
			then
				fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1);             --Fenster Esszimmer Raffst.
				fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); 	            --Lamellen
				fibaro:setGlobal('Door2Op1Cl0', '0');
				fibaro:sleep(math.random(5000,10000));
		elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0) and (tonumber(Door1Op1Cl0) == 1)
			then
				fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1);             --Fenster Terrasse Raffst.
				fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); 	            --Lamellen
				fibaro:setGlobal('Door1Op1Cl0', '0');
				fibaro:sleep(math.random(5000,10000));
		elseif (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door2Op1Cl0) == 1)
			then
				fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1);             --Fenster Esszimmer Raffst.
				fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); 	            --Lamellen
				fibaro:setGlobal('Door2Op1Cl0', '0');
				fibaro:sleep(math.random(5000,10000));
		end		
			
				
-----------------------------------------------------------------------------------------
---################    Rolladen schließen nach schließen der Tueren Nacht  ####################---
-----------------------------------------------------------------------------------------

elseif (tonumber(TerrRaffOp0Sun1Cl2) == 2) and (tonumber(rollershutter_runs) == 0)  and ((tonumber(Door1Op1Cl0) == 1) or (tonumber(Door2Op1Cl0) == 1))
	then
		if (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door1Op1Cl0) == 1)
			then
				fibaro:call(rs_wohnraum2, 'close');
				fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
				fibaro:setGlobal('Door1Op1Cl0', '0');
				fibaro:sleep(math.random(5000,10000));
		elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door2Op1Cl0) == 1)
			then
				fibaro:call(rs_wohnraum3, 'close');
				fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
				fibaro:setGlobal('Door2Op1Cl0', '0');
				fibaro:sleep(math.random(5000,10000));
		elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0) and (tonumber(Door1Op1Cl0) == 1)
			then
				fibaro:call(rs_wohnraum2, 'close');
				fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
				fibaro:setGlobal('Door1Op1Cl0', '0');
				fibaro:sleep(math.random(5000,10000));
		elseif (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door2Op1Cl0) == 1)
			then
				fibaro:call(rs_wohnraum3, 'close');
				fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
				fibaro:setGlobal('Door2Op1Cl0', '0');
				fibaro:sleep(math.random(5000,10000));
		end		
						
end				
---#######################################################################################
  
	setTimeout(rollerShutter, 30*1000);  
end

--########################################################################################

if (sourceTrigger['type'] == 'autostart') 
    then
	    rollerShutter();
	    sceneReboot();
elseif (sourceTrigger['type'] == 'property') 
    then
  	    debug('orangered', 'Source device = ' .. sourceTrigger['deviceID'])
elseif (sourceTrigger['type'] == 'global') 
    then
  	    debug('orangered', 'Global variable source = ' .. sourceTrigger['name'])
elseif (sourceTrigger['type'] == 'other') 
    then
  
        ---------------- Rolladen eintragen  ----------------------------------------
  
      	if(os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
        and(os.date("%H:%M", os.time()) < VersetzterSonnenUntergang) 
            then

        	    fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella); 
       		    fibaro:call(rs_wohnraum1, 'open'); 			                            --Fenster Wohnzimmer Raffst.
        	    fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella); 
        	    fibaro:call(rs_wohnraum2, 'open'); 		  	                            --Fenster Terrasse Raffst.
        	    fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella); 
        	    fibaro:call(rs_wohnraum3, 'open'); 		  	                            --Fenster Esszimmer Raffst. 
        	    fibaro:call(rs_wohnraum4, 'open'); 		  	                            --Fenster Esszimmer
        	    fibaro:call(rs_kueche1, 'open'); 		                                --Fenster Küche
        	    
        	    if (os.date("%H:%M", os.time()) < zeitDeliah) 
        	        then 
        	            fibaro:call(rs_kinderzimmer1, 'open'); 		                    --Fenster Kinderzimmer Deliah
        	            fibaro:call(rs_kinderzimmer2, 'open'); 		                    --Fenster Kinderzimmer Deliah Balkon
        	            fibaro:setGlobal('RolloDeliahU0O1', '1');
        	    else
        	        fibaro:setGlobal('RolloDeliahU0O1', '0');
        	    end
        	    
        	    fibaro:call(rs_kinderzimmer3, 'open');		                            --Fenster Kinderzimmer 2
        	    fibaro:call(rs_kinderzimmer4, 'open');		                            --Fenster Kinderzimmer 2 Balkon
        	    fibaro:call(rs_bad1, 'open'); 			                                --Fenster Bad Dusche
        	    fibaro:call(rs_bad2, 'open'); 			                                --Fenster Bad Toilette
        	    fibaro:call(rs_schlafzimmer1, 'open'); 		                            --Fenster Schlafzimmer
        	    fibaro:call(rs_schlafzimmer2, 'open'); 		                            --Fenster Schlafzimmer Groß
				    
    	--------------------------------------------------------------------------------------
        
        	    debug('coral',' Die Rolladen fahren in Grundstellung!!!')
        	    fibaro:setGlobal('SunFirstMaxTimeLux', '0');
	  		    fibaro:setGlobal('SunOstMaxTimeLux', '0');
	  		    fibaro:setGlobal('SunWestMaxTimeLux', '0');
      		    fibaro:setGlobal('SunFirstMinTimeLux', '0');
	  		    fibaro:setGlobal('SunOstMinTimeLux', '0');
	  		    fibaro:setGlobal('SunWestMinTimeLux', '0');
      		    fibaro:setGlobal('SonnenSchutz', '0'); 			                        --SonnenSchutz wurde entfernt.
	  		    fibaro:setGlobal('SonnenSchutzOst', '0'); 
	  		    fibaro:setGlobal('SonnenSchutzWest', '0'); 
        	    fibaro:setGlobal('RolloUnten0Oben1', '1');
    		    fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');
				fibaro:setGlobal('Door1Op1Cl0', '0'); 
				fibaro:setGlobal('Door2Op1Cl0', '0');
      	else
        	debug('royalblue',' Es ist Nacht.')
        	fibaro:call(rs_wohnraum1, 'close');
    		fibaro:call(rs_wohnraum1, "setValue2", sunDownLamella);
    			fibaro:sleep(math.random(5000,10000));
			if (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
				then 
					fibaro:call(rs_wohnraum2, 'close');
					fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
					fibaro:setGlobal('Door1Op1Cl0', '1'); 
						fibaro:sleep(math.random(5000,10000));
			elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
				then 
					fibaro:call(rs_wohnraum3, 'close');
					fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
					fibaro:setGlobal('Door2Op1Cl0', '1'); 
						fibaro:sleep(math.random(5000,10000));
			elseif(tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
				then
					fibaro:setGlobal('Door1Op1Cl0', '1'); 
					fibaro:setGlobal('Door2Op1Cl0', '1'); 
						fibaro:sleep(math.random(5000,10000));
			elseif(tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
				then
					fibaro:call(rs_wohnraum2, 'close');
					fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
						fibaro:sleep(math.random(5000,10000));
					fibaro:call(rs_wohnraum3, 'close');
					fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
						fibaro:sleep(math.random(5000,10000));
					fibaro:setGlobal('Door1Op1Cl0', '0'); 
					fibaro:setGlobal('Door2Op1Cl0', '0'); 
			end
    		fibaro:call(rs_wohnraum4, 'close');
    			fibaro:sleep(math.random(20000,60000));
    		fibaro:call(rs_kueche1, 'close');
    			fibaro:sleep(math.random(20000,60000));
      		fibaro:call(rs_bad1, 'close');
    			fibaro:sleep(math.random(5000,10000));
    		fibaro:call(rs_bad2, 'close');
    			fibaro:sleep(math.random(20000,60000));
    			
			if (tonumber(RolloDeliahU0O1) == 1) 
			    then	
				    fibaro:call(rs_kinderzimmer1, "setValue", sunProtectPosition);
					    fibaro:sleep(math.random(5000,10000));
				    fibaro:call(rs_kinderzimmer2, 'close');
					    fibaro:sleep(math.random(20000,60000));
      			    debug('royalblue',"Rolladen von Deliah wurden geschlossen.");
      			    fibaro:setGlobal('RolloDeliahU0O1', '0');
			end	
			
      		fibaro:call(rs_kinderzimmer3, 'close');
    			fibaro:sleep(math.random(5000,10000));
    		fibaro:call(rs_kinderzimmer4, 'close');
    			fibaro:sleep(math.random(5000,10000));
    		fibaro:call(rs_schlafzimmer1, 'close');
    			fibaro:sleep(math.random(5000,10000));
    		fibaro:call(rs_schlafzimmer2, "setValue", sunProtectPosition);
    			fibaro:sleep(math.random(10000,20000));
    								
        	fibaro:setGlobal('SunFirstMaxTimeLux', '0');
	  		fibaro:setGlobal('SunOstMaxTimeLux', '0');
	  		fibaro:setGlobal('SunWestMaxTimeLux', '0');
      		fibaro:setGlobal('SunFirstMinTimeLux', '0');
	  		fibaro:setGlobal('SunOstMinTimeLux', '0');
	  		fibaro:setGlobal('SunWestMinTimeLux', '0');
      		fibaro:setGlobal('SonnenSchutz', '0'); 			                            --SonnenSchutz wurde entfernt.
	  		fibaro:setGlobal('SonnenSchutzOst', '0'); 
	  		fibaro:setGlobal('SonnenSchutzWest', '0'); 
	  		fibaro:setGlobal('RolloUnten0Oben1', '0');
    		fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '2');
      	end
  
      ---------------------------------------------------------------------------
  
  	debug('orangered', 'Other source.')
end

--###########################################################################################

1 „Gefällt mir“