Rollladen-Steuerung (Sonnenaufgang/-untergang)

guten morgen zusammen,
habe da folgende skript für die rolläden laufen.
anscheinend funktioniert die feiertags bzw Wochenendsteuerung nicht.
die rollos fahren trotzdem zum sonnenaufgang hoch. die feiertagsprüfung scheint zu funktionieren. aber er hält sich dann nicht dran.
ich habe eigentlich nur den freitag und den montag zum WE hinzugefügt…

--[[
%% autostart
%% properties
%% globals
--]]
-- Bisherige Hauptarbeiten an dem Skript: http://www.Siio.de,  boomx, parip69 und thebrain. Kleine Modifikationen von alando22
-- Version 2.1
-- 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 = '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 = 172				-- ID des Hellichkeitssensors
--local tempSensor = 11					-- ID des Temperatursensors
local rebootSceneID = 79	   	    	-- 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 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)
-------------------------------------------------------------------------------------------------------------------------
--################################ 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
--------------------------------------------------------------------------------------------

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
---------------------------------------------------------------------------------------
--############ 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.2';
	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);

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

if  ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
    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
    
    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, "setValue", sunProtectPosition1); --Schiebetür
      fibaro:call(rs_wohnraum1, "setValue2", sunProtectLamella); --Lamellen

      ---------------------------------------------------------------------------
        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');

--------------------------------------------------------------------------------------
        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 ((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) and werktag == 1)
    then

        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));

      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 ((string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == zeitWeFtAuf)
 and (tonumber(rollershutter_runs) == 0) and werktag == 0)
    then

        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));

      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 ((VersetzterSonnenUntergang < zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzterSonnenUntergang)
 or (VersetzterSonnenUntergang > zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang)
 and (tonumber(rollershutter_runs) == 0))
    then

       	debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('steelblue', 'Sonnenuntergang... schließe Rolladen');
		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, "setValue", "50");
    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  
      fibaro:sleep(120*60*1000) do
      end
 		fibaro:call(rs_flurEG, 'close');

		--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_wohnraum1, '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');
        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
--###########################################################################################

debug:
[DEBUG] 03:03:26: 07:20 … Sonnenaufgang
[DEBUG] 03:03:26: -15 min… Zeitverzögerung zum Sonnenaufgang.
[DEBUG] 03:03:26: 07:05 Öffnen der Rolladen.
[DEBUG] 03:03:26: 18:11 … SonnenUntergang
[DEBUG] 03:03:26: 15 min. Zeitverzögerung Sonnenuntergang.
[DEBUG] 03:03:26: 18:26 schließen der Rolladen
[DEBUG] 03:03:26: Heute ist Wochenende oder ein Feiertag.
[DEBUG] 03:03:26: Die Rolladen werden um 09:00 öffnen.
[DEBUG] 03:03:26: Die Rolladen werden um 18:26 zuzüglich einer zufälligen Verzögerung geschlossen
[DEBUG] 03:03:26: Rolladen-Controller startet das erste mal!
[DEBUG] 07:05:29: Rolladen-Controller ist gestartet (Ver.2.2)
[DEBUG] 07:05:29: Sonnenaufgang… öffne Rolladen
[DEBUG] 07:05:29: Waiting 6 min
[DEBUG] 07:13:30: Rolladen wurden geöfnet.
[DEBUG] 07:13:30: Es ist Tag.
[DEBUG] 09:00:31: Rolladen-Controller ist gestartet (Ver.2.2)
[DEBUG] 09:00:31: Es ist 09:00Uhr, Öffne Rolladen
[DEBUG] 09:01:52: Rolladen wurden geöfnet.
[DEBUG] 09:01:52: Es ist Tag.

ich finde den fehler nicht im skript. trotz Feiertagsvariable etc startet um kurz nach 7 das skript und fährt die rolläden hoch. und dann um 9 nochmal…

danke für eure hilfe.

Mit freundlichen Grüßen
bademeister

Guten Morgen,

das Problem hatte ich auch und habe daher die Prüfung etwas umgeschrieben. Bis jetzt läuft es bei mir.
Zusätzlich habe ich für den Sonnenschutz noch eine Mindesttemperatur eingebaut, da ich es dieser tage hatte, dass wir tollen Sonnenschein hatten und der Sonnenschutz sich aktivierte, bei 4°C… Bei den Temperaturen bin ich über jeden Heizbeitrag dankbar.
Daher habe ich dem Script nun die Version 2.3 zugewiesen.

--[[
%% 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 = '-30' 				-- Verzögerungszeit in Minuten zum öffnen der Rolläden bei Sonnenaufgang.
local minSonUnt = '30' 					-- 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 = 20000 				-- über 10.000 Lux für zu
local startSunDelay = 5					-- 5 Min bis zu
local endSunLux = 5000					-- unter 1.000 Lux für auf
local endSunDelay = 20					-- 20 Min bis auf
local sunProtectPosition = 25			-- Sonnen schutz position für Rollos.
local sunProtectTempMin = 18			-- Grenztemperatur, überhalb derer der Sonnenschutz aktiviert werden soll

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

local rs_wohnraum1 = 90;				-- IDs der Roller Shutter.
local rs_wohnraum2 = 88;
local rs_wohnraum3 = 92;
local rs_arbeitszimmer1 = 41;
local rs_arbeitszimmer2 = 43;
local rs_bad1 = 62;
local rs_bad2 = 64;

local doorID1 = 215;					-- ID des Türkontakts
--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)
-------------------------------------------------------------------------------------------------------------------------
--################################ 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 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 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", sunProtectPosition); --Tür links
		fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition); --Tür mitte
		fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition); --Tür rechts.
        fibaro:call(rs_arbeitszimmer1, "setValue", sunProtectPosition+5); --Fenster links
		fibaro:call(rs_arbeitszimmer2, "setValue", sunProtectPosition); --Fenster rechts
		fibaro:call(rs_bad1, "setValue", sunProtectPosition+10); --Fenster
		fibaro:call(rs_bad2, "setValue", sunProtectPosition); --Balkontür

      ---------------------------------------------------------------------------
        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_arbeitszimmer2, 'open');
		fibaro:call(rs_bad1, 'open');
		fibaro:call(rs_bad1, '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:call(rs_wohnraum2, 'open');
        fibaro:call(rs_wohnraum3, 'open');
        fibaro:call(rs_arbeitszimmer1, 'open');
    	fibaro:call(rs_arbeitszimmer2, 'open');
    	fibaro:call(rs_bad1, 'open');
    	fibaro:call(rs_bad2, 'open');

      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:call(rs_wohnraum2, 'open');
        fibaro:call(rs_wohnraum3, 'open');
        fibaro:call(rs_arbeitszimmer1, 'open');
    	fibaro:call(rs_arbeitszimmer2, 'open');
    	fibaro:call(rs_bad1, 'open');
    	fibaro:call(rs_bad2, 'open');

      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(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('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:call(rs_arbeitszimmer2, 'close');
    	fibaro:call(rs_bad1, 'close');
    	fibaro:call(rs_bad2, 'close');
		fibaro:call(rs_wohnraum1, 'close');

		while
			fibaro:getGlobalValue("HolidayLights") == "On" do
			fibaro:sleep(10*1000)
		end

			fibaro:call(rs_wohnraum2, 'close');

		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_wohnraum3, 'close');

		--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_wohnraum2, 'close');

		--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_wohnraum1, '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_arbeitszimmer2, 'open');
    	fibaro:call(rs_bad1, 'open');
    	fibaro:call(rs_bad2, '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
--###########################################################################################

Hallo alando22,

danke für das tolle Script. Wo genau hast du die Prüfung der Temperatur versteckt? Den Sensor hast du oben im Script hinterlegt, finde aber die Abfrage nicht.

Grüße

Hannibal,

schau mal in Zeile 148.

Da hab ich doch glatt Version 2.1 genommen und nicht deine aktuelle…

Danke und Gruß

hallo zusammen,
jetzt habe ich das problem in der genau anderen richtung.
das skript erkennt zwar, dass wochentag ist, aber die rolläden öffnen trotzdem erst zur WE-Zeit…
hatte die szene nur eine woche deaktiviert wg urlaubsabwesenheit und am sonntag wieder aktiviert, und seit dem funktionierts nicht mehr.

--[[
%% autostart
%% properties
%% globals
--]]
-- Bisherige Hauptarbeiten an dem Skript: http://www.Siio.de,  boomx, parip69 und thebrain. Kleine Modifikationen von alando22
-- Version 2.1
-- 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 = '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 = 172				-- ID des Hellichkeitssensors
--local tempSensor = 11					-- ID des Temperatursensors
local rebootSceneID = 79	   	    	-- 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 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)
-------------------------------------------------------------------------------------------------------------------------
--################################ 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
--------------------------------------------------------------------------------------------

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
---------------------------------------------------------------------------------------
--############ 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.2';
	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);

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

if  ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
    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
    
    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, "setValue", sunProtectPosition1); --Schiebetür
      fibaro:call(rs_wohnraum1, "setValue2", sunProtectLamella); --Lamellen

      ---------------------------------------------------------------------------
        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');

--------------------------------------------------------------------------------------
        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('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));

      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('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));

      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 ((VersetzterSonnenUntergang < zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzterSonnenUntergang)
 or (VersetzterSonnenUntergang > zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang)
 and (tonumber(rollershutter_runs) == 0))
    then

       	debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
		fibaro:setGlobal('rollershutter_runs', '1');
		debug('steelblue', 'Sonnenuntergang... schließe Rolladen');
		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, "setValue", "50");
    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  
      fibaro:sleep(120*60*1000) do
      end
 		fibaro:call(rs_flurEG, 'close');

		--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_wohnraum1, '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');
        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
--###########################################################################################

danke für eure tipps.

Mit freundlichen Grüßen
bademeister

Debug-Rollershutter.jpg

Hallo zusammen,

bin wirklich neuling und suche eine gute steuerung für meine rolläden.
Allerdings hapert es bei mir wirklich an grundkenntnissen.
Es fängt schon an bei den Variablen.
Variable rollershutter_runs eintragen. Ich gehe davon aus das hier eine vordefinierte Variable erstellt wird!? Aber welche werte muss ich da setzen?
Entschuldigt meine unwissenheit. ich bin dabei mich einzulesen aber ganz ohne hilfe geht scheint es wohl nicht zu gehen.
Vielleicht kann mir auch jemand sagen wie ich die variable zu sonnen auf/abgang richtig erstelle die hier im script verwendet wird.

Danke und gruße

Hi, je nach dem, welches Script Du meinst, hier gibt es ja unterschiedliche -individuell angepasste- Weiterentwicklung…

Dei globale Var “rollershutter_runs” legst Du Var-Panel im oberen Bereich an, ohne Werte. Die setzt das Script.
Welche " variable zu sonnen auf/abgang " meinst Du genau?
Das:

 local sunriseHour = fibaro:getValue(1,"sunriseHour");
  local sunsetHour = fibaro:getValue(1,"sunsetHour");

In Boomx seinem Script brauchst Du dafür nichts mehr tun. Es muss die GeoLocation Deiner HC korrekt sein.

VG Hoggle

Hey,

ja das hab ich schon gemerkt. Macht es für mich als Anfänger nicht gerade einfach, da wie es scheint sehr viele Wege nach Rom führen.
Aber ok nehme die Herausforderung an.
Ja die Steuerung über den Sonnenstand wird in vielen Scripten verwendet, in der Regel über Variablen. Wenn ich hier keine Brauche wie erkennt fibaro den Sonnenstand?
Was bedeuten die beiden Zeilen genau?

local sunriseHour = fibaro:getValue(1,“sunriseHour”);
local sunsetHour = fibaro:getValue(1,“sunsetHour”);

Noch eine verständnisfrage:

Bei einer vordefinierten Variable Sonnenstand mit den Werten Sonnenaufgang und Sonnenuntergang

Wie oder woher weiß Fibaro was gemeint ist wenn ich eine szene erstelle?

Entschuldigt, aber noch scheint alles sehr kompliziert.

grüße

Hi,

die beiden Zeilen laden den vom HC2 errechneten Sonnenuntergang/-aufgang in 2 lokale Variablen, welche nur in dem Skript gültig sind. Den Rest deiner Frage verstehe ich nicht… Du schreibst doch Szenen mit dem HC und teilst diesem mit, ob es die errechneten Werte nutzen soll, oder eine definierte, globale Variable. Du sagst also dem HC2, welche Form es nutzen soll. Automatisch passiert hier ohne dein Zutun nichts…

Gruß

Ah ok…

Das wollte ich wissen. Das Hc2 kennt die Zeiten von Auf und Abgang.

Danke

Guten morgen,

habe mal die Rolladensteuerung aufgegriffen aber leider scheint sie nicht so zu funktionieren.
Hier mal mein Code mit meinen Id´s.

--[[
%% autostart
%% properties
%% globals
--]]
 
local sourceTrigger = fibaro:getSourceTrigger();
local version = '2.0';
 
fibaro:debug('Rollershutter-Controller started for the first time (Ver.' .. version .. ')');
 
function rollershutter()
   local version = '2.0';
    local sunriseHour = fibaro:getValue(1,'sunriseHour');
   local sunsetHour = fibaro:getValue(1,'sunsetHour');
    local currentDate = os.date('*t');
   local temp = tonumber(fibaro:getValue(3, 'Temperature'));
   local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
   local random = math.random(35);
   local min = math.floor((random*100)/60);
 
if ((((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == sunriseHour)) and rollershutter_runs == 0 and tonumber(temp)>=0)
   then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
           fibaro:setGlobal('rollershutter_runs', '1');
       fibaro:debug('Sunrise... Opening rollershutters');
       fibaro:debug('Waiting ' .. min .. ' min');
           fibaro:sleep(random*100000);
                fibaro:call(64, 'open');
                fibaro:call(102, 'open');
                fibaro:call(66, 'open');
                fibaro:call(68, 'open');
                fibaro:call(29, 'open');
                fibaro:call(23, 'open');
       fibaro:debug('Rollershutters opened');
       fibaro:setGlobal('rollershutter_runs', '0');
elseif ((((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == sunsetHour)) and rollershutter_runs == 0 and tonumber(temp)>=0)
 then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
           fibaro:setGlobal('rollershutter_runs', '1'); 
       fibaro:debug('Sunset... Closing rollershutters');
       fibaro:debug('Waiting ' .. min .. ' min');
           fibaro:sleep(random*100000);
                fibaro:call(102, 'close');
                fibaro:call(66, 'close');
                fibaro:call(29, 'close');
    			fibaro:call(23, 'close');
    while 		(tonumber(fibaro:getValue(12, 'value')) > 0) do
  				fibaro:sleep(10*1000)
  end
                fibaro:call(64, 'close');
    while 
    			(tonumber(fibaro:getValue(18, 'value')) > 0) do
 				 fibaro:sleep(10*1000)
  end
    			fibaro:call(68, 'close');
       fibaro:debug('Rollershutters closed');
       fibaro:setGlobal('rollershutter_runs', '0');
elseif ((((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == sunriseHour)) and rollershutter_runs == 0 and tonumber(temp)<=0)
   then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
           fibaro:setGlobal('rollershutter_runs', '1');
       fibaro:debug('Sunrise... Temperatur < 0... Rollershutters stay closed.');
       fibaro:setGlobal('rollershutter_runs', '0');
elseif ((((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == sunsetHour)) and rollershutter_runs == 0 and tonumber(temp)<=0)
 then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
           fibaro:setGlobal('rollershutter_runs', '1');
       fibaro:debug('Sunset... Temperatur < 0... Rollershutters stay opened.');
       fibaro:setGlobal('rollershutter_runs', '0');
end
   setTimeout(rollershutter, 60*1000);
end
 
if (sourceTrigger['type'] == 'autostart') then
 rollershutter();
end

die Szene scheint zu starten wirft aber im debug nur : fibaro:debug(‘Rollershutter-Controller started for the first time (Ver.’ … version … ‘)’); aus.
Weiter passiert nichts. Keine Rollade fährt auf oder ab.
Was ist das falsch.

Schonmal danke für die Hilfe

Du hast die Variable ‘rollershutter_runs’ nicht angelegt. Wenn du diese angelegt hast, dann funktioniert das Skript.

Gruß

Hey,

die war wohl angelegt, allerdings mit Wert 1 …
Habe sie auf 0 umgestellt.

Werde berichten.

Grüße

Damit sollte es behoben sein. Bei dem Wert 1 wird die Bedingung nicht erfüllt…

Gruß

Hey,

hatte die variable auf 0 gesetzt. Auf gingen die rollos heute morgen.allerdings nicht alle zu.
Folgendes spuckt der debug aus:

[DEBUG] 22:51:44: Rollershutter-Controller started for the first time (Ver.2.0)
[DEBUG] 06:56:49: Rollershutter-Controller started (Ver.2.0)
[DEBUG] 06:56:49: Sunrise… Opening rollershutters
[DEBUG] 06:56:49: Waiting 16 min
[DEBUG] 07:13:29: Rollershutters opened
[DEBUG] 20:12:35: Rollershutter-Controller started (Ver.2.0)
[DEBUG] 20:12:35: Sunset… Closing rollershutters
[DEBUG] 20:12:35: Waiting 33 min
[DEBUG] 20:45:55: [1;31m2017-04-05 20:45:55.773151 [ fatal] LUA error: /opt/fibaro/scenes/28.lua:48: attempt to compare number with nil

und hab jetzt nochmal die Variable angeschaut. Steht jetzt wieder auf 1.

Was ist nun falsch?

Danke für die Hilfe

while (tonumber(fibaro:getValue(12, 'value')) > 0) do

ID 12 gibt es sicherlich nicht. Hier hat jemand mein Skript erweitert, um einen Fensterkontakt zu überprüfen. Dies kannst du aus dem Skript entfernen, sofern du es nicht brauchst.

Gruß

Oh ja natürlich… Habe den Fensterkontakt nochmal neu angelernt. hat sich die ID geändert. Logisch.

Danke dir

Nochmal ne andere Frage.
Wenn ich im code sunrise und sunset eine Uhrzeit zuweise bleibt da die Randomfunktion trotzdem erhalten oder wird diese dann automatsch ausgehebelt?

Die random-Funktion bleibt erhalten, egal was für eine Zeit eingestellt ist und verwendet wird. :slight_smile:

Gruß

Ok super… Danke.

Gute Nacht