Rollladen-Steuerung (Sonnenaufgang/-untergang)

Hallo zusammen,

ich bin blutiger Anfänger was das coden angeht, habe mich aber mal daran versucht, das Rollladenskript an meine Bedürfnisse anzupassen.
Ich möchte dieses für die jeweiligen Schlafräume separieren und über eine jeweilige Variable mit den Werten “Manuell” und “Auto” entweder automatisch oder manuell steuern lassen (falls man einen längeren Abend hatte und am Tag drauf nicht um 7 Uhr von den Sonnenstrahlen geweckt werden möchte).

Hier mal das Skript - es funktioniert leider nicht. Ich habe zwei Variablen gemacht: RolloRun_SchlafenD mit den Werten “0” und “1” (identisch mit rollershutter_runs) und Rollo_Schlafen_D mit den Werten “Auto” und “Manuell”. Wahrscheinlich passen die Bedingungen nicht, aber ich finde den Fehler nicht.

--[[
%% autostart
%% properties
%% globals
--]]
 
local minSonAuf = 0 	-- Zeit in min. wo die Sonne Frueher auf geht... Sonnenaufgang.
local minSonUnt = 60 	-- Zeit in min. wo die Sonne Spaeter unter geht... Sonnenaufgang.
local zeitFruehstensAuf = '06:45'  --Fruehstens wenn die Sonne auf geht.
local zeitSpaetestensAuf = '07:00' --Spaetestens wenn die Sonne auf geht.
local zeitMaxUntergang = '21:00'   --Spaetestens wenn die Sonne unter geht.
 
---------------------------------------------------------------------------------
debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
---------------------------------------------------------------------------------------
 
	local Sonnenaufgang = fibaro:getValue(1,'sunriseHour');
    debug('gold', ""..Sonnenaufgang.." ... echter Sonnenaufgang")
 
debug('steelblue', ""..minSonAuf.." Aufgesetzte Zeit in Minuten... Sonnenaufgang.")
local string = Sonnenaufgang
local a, b = string:match("([^,]+):([^,]+)")
-------     Hier nur das - oder + aendern    --->----v---->----v
local VersetzteSonnenaufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
debug('yellow',""..VersetzteSonnenaufgang.." Versetzter.... Sonnenaufgang")
 
----------------------------------------------------------------------------------------
 
    local Sonnenuntergang = fibaro:getValue(1,'sunsetHour');
    debug('orangered',""..Sonnenuntergang.. " ... echter Sonnenuntergang")
 
debug('steelblue', ""..minSonUnt.." Aufgesetzte Zeit in Minuten... Sonnenuntergang.")
local string = Sonnenuntergang
local a, b = string:match("([^,]+):([^,]+)")
-------     Hier nur das - oder + aendern     --->-----v---->----v
local VersetzteSonnenuntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
debug('red',""..VersetzteSonnenuntergang.." Versetzte... Sonnenuntergang")
 
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
local sourceTrigger = fibaro:getSourceTrigger();
local version = '2.0';
 
debug('lavender',"Rollershutter-Controller startet das erste mal (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 RolloRun_SchlafenD = tonumber(fibaro:getGlobalValue('RolloRun_SchlafenD'));
   local Rollo_Schlafen_D = fibaro:getValue(1,'Rollo_Schlafen_D')
-----------------------------------------------------------------------------------------
---#################   Sonnenaufgang !!  ###############################################
-----------------------------------------------------------------------------------------
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 ((VersetzteSonnenaufgang >= zeitFruehstensAuf and (os.date("%H:%M", os.time()) == VersetzteSonnenaufgang or os.date("%H:%M", os.time()) == zeitSpaetestensAuf))
 or (VersetzteSonnenaufgang <= zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf ))
 and RolloRun_SchlafenD == 0) 
 and Rollo_Schlafen_D == 'Auto'
 then	
	
       debug('darkkhaki',"Rollershutter-Controller hat gestartet (Ver." .. version .. ")");
           fibaro:setGlobal('RolloRun_SchlafenD', '1');
    	
                fibaro:call(222, 'open');
 
       debug('yellow',"Rollladen Schlafzimmer Daniel wurde geöfnet.");
       fibaro:setGlobal('RolloRun_SchlafenD', '0');
-----------------------------------------------------------------------------------------    
---################    Sonnenuntergang !!  ##########################################---
-----------------------------------------------------------------------------------------	
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 ((VersetzteSonnenuntergang <= zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzteSonnenuntergang)
  or (VersetzteSonnenuntergang >= zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang))
 and RolloRun_SchlafenD == 0) 
 and Rollo_Schlafen_D == 'Auto'
	then
	
       debug('darkkhaki',"Rollershutter-Controller hat gestartet (Ver." .. version .. ")");
           fibaro:setGlobal('RolloRun_SchlafenD', '1');
		
                fibaro:call(222, 'close');

       debug('royalblue',"Rolllladen Schlafzimmer Daniel wurde geschlossen.");
       fibaro:setGlobal('RolloRun_SchlafenD', '0');
    
end
---#######################################################################################
   setTimeout(rollershutter, 60*1000);
end
 
if (sourceTrigger['type'] == 'autostart') then
 rollershutter();
end
------------------------------------------------------------------------------------------
----######## Wird geschaut ob tag oder nacht ist. #####################################---
------------------------------------------------------------------------------------------
if (os.date("%H:%M", os.time()) > fibaro:getValue(1, "sunriseHour"))
and (os.date("%H:%M", os.time()) < fibaro:getValue(1, "sunsetHour")) then
    debug('yellow',"Es ist Tag");
else
    debug('royalblue',"Es ist Nacht");
end
---#############################################################################

Hi,

hast Du mal für deine Variablen:

 local RolloRun_SchlafenD  
   local Rollo_Schlafen_D 

einen Debug eingebaut?
Und Du solltest diese Variablen weiter oben definieren, also im Anschluss an Zeile 11.

In Zeile 61 geht hinten noch eine Klammer zu? Absicht? weil das beeinflusst ja die Logik

Was jetzt nichts mit der Funktion des Scripts zu tun hat:
Da Deine Var recht identisch klingen und das eine eins String und das andere eine Zahl ist, solltest Du das optimieren.

VG Hoggle

Hallo Hoggle,

wie gesagt, beschäftige mich das erste Mal mit den Codes. Kannst du mir helfen, wie ich den debug zur Abfrage des Variableninhalts einbaue? Die übrigen debugs sind nach then-codes eingebaut… Danke dir!

fibaro:debug("RolloRun_SchlafenD: "…RolloRun_SchlafenD)

So, habe es so gelöst, dass ich anstelle der Variablen “Auto” und “Manuell” nun “0” und “1” genommen habe - jetzt läuft es. Verstehe auch nicht, warum… Aber das Ergebnis zählt

Moin moin,

ich habe mir nun das für mich Beste aus allen Skripten zusammengebastelt und auch ein wenig modifiziert, so dass z.B. am Wochenende und an Feiertagen die Rolladen morgens zu einer festen Zeit geöffnet werden. Ebenso habe ich mir eine eine Temperaturschwelle zum abendlichen Schließen eingebaut, da ich im Sommer die Rolladen nicht schließen sondern im Winter nur als zusätzlichen Kälteschutz nutzen möchte.
Nun habe ich noch ein Problem:
Wenn im Sommer der Sonnenschutz herunterfährt, könnte ich mich aussperren, da der vorhandene Türkontakt durchaus geschlossen sein kann, damit die Hitze nicht in die Wohnung gelangt. Ich habe aber draußen einen Bewegungsmelder (Fibaro Multisensor), den ich involvieren möchte.
Wie mache ich das am schlausten an welcher Stelle im Skript?

Hi,

es gibt zu diesem Punkt bereits eine Lösung hier im Thread.

https://www.siio.de/board/thema/rollladen-steuerung-sonnenaufgang-untergang/page/3/

Gruß

Hi,
dem MS musst du dann aber in bestimmten Abständen immer eine Bewegung vortäuschen.
Wenn Du mal auf der Sonnenliege einschläfst…
Oder Dich mal außerhalb des Bereiches des MS aufhälst…

Daher arbeite ich an einer Terrassentür mit einer Verzögerung (while Schleife).
Wenn alle übrigen Rollos schließen, habe ich 2 Min Zeit die Tür wieder zuöffen (und zu schließen) damit das Rollo an der Tür oben bleibt.
Die Zeit reicht auch, einmal um das Haus zu gehen, falls man mal auf der Straße steht etc.

Viele Grüße Hoggle

Zunächst danke für die Antworten!

@boomx
Der Fensterkontakt ist auch nicht das Problem. Nur taugt der nicht als Trigger, da wir die Tür beim rausgehen hinter uns schließen. Deswegen soll der Rolladen dann öffnen, wenn vor der Tür Bewegung stattfindet.

@Hoggle
Die Tür befindet sich im 2. OG und im 3. OG haben wir eine Dachterrasse. Es kann also sein, dass der Sonnenschutz erst dann runter fährt, wenn wir nach oben gegangen sind. Von daher hilft mir die 2 Minuten Verzögerung nicht.

Hi,

wenn du den Rollladen bei Bewegungserkennung öffnen willst, dann würde ich dazu ein eigenes Skript schreiben. Alternativ kann man natürlich das Skript auch erweitern und eine Erkennung des Triggers einbauen. Dies wäre aber entfernt von allen Funktionen dieses Skriptes.

Gruß

Ok, mit der Aussage kann ich was anfangen, danke!

So, nachdem ich hier soo viel lernen konnte und meine ersten Schritte in LUA gegangen bin, möchte ich das gesammelte Script veröffentlichen. Vielleicht kann damit ja noch jemand was tun. Ich habe mich bemüht, das Script weitgehend zu dokumentieren.

--[[
%% 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 = '-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 = 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;			-- Sonnen schutz position für Rollos.

local luxSensor = 108					-- ID desHellichkeitssensors
local tempSensor = 11					-- ID des Temperatursensors
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
--------------------------------------------------------------------------------------------

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

------------------------------------------------------------------------------------------
---#################   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_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+2); --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 ((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: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 ((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: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 ((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) and tonumber(fibaro:getValue(tempSensor, "value")) < maxTempStart)
    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 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
--###########################################################################################

Ich become leider immer eine Fehlermeldung in dem Skript. Kann mir da wer helfen?
`
–[[
%% 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 = ‘09: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 = ‘23:00’ – Spätester Zeitpunkt, an dem die Rolläden schließen
local maxTempStart = 25 – 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; – Sonnen schutz position für Rollos.

local luxSensor = 11 – ID desHellichkeitssensors
local tempSensor = 23 – ID des Temperatursensors
local rebootSceneID = 24 – ID der eigenen Scene die rebotet wird.
local meldungenDebug = 0 – Hilfsvariable um die Meldungen nicht andauernd zu wiederholen.

local rs_wohnraum1 = 58; – 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 = 61; – 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
601000)
fibaro:startScene(rebootSceneID);
end
setTimeout(sceneReboot, 1
601000)
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
6060 + (b60+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+ a6060 + (b60+minSonUnt60));
– 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

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

–############ 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+ a6060 + (b60+minSonAuf60));

local a, b = fibaro:getValue(1,‘sunsetHour’):match("([^,]+):([^,]+)")
local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a6060 + (b60+minSonUnt60));

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(18); – 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_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+2); --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 ((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: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 ((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: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 ((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)) --and tonumber(fibaro:getValue(tempSensor, “value”)) < maxTempStart)
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 zufällige Verzögerung beträgt ’ … min … ’ min.’);
fibaro:sleep(random*100000);

fibaro:call(rs_wohnraum1, ‘close’);
–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’);

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(‘RolloUnten0ben1’, ‘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
–###########################################################################################

Hi,

eine deviceID ist nicht korrekt vergeben und existiert nicht. Deswegen wird der Wert NIL zurückgeliefert.

Gruß

hallo,
danke für das skript. hab es auf meine bedürfnisse angepasst und es läuft auch.
hab noch ein paar einstellungen für raffstores gemacht.
ausserdem habe ich die türprüfung auch in die sonnenschutz position kopiert. sonst würde man sich damit ja ausperren.
wo wir bei meiner frage wären… wo habt ihr den lux sensor positioniert? wenn der in dem raum ist welcher durch den rolladen abgedunkelt wird, fallen die werte ja direkt wieder unter den grenzwert und die rolläden fahren wieder hoch… ging heute dann ein paar mal so bei uns…

ich werde das skript vermutlich nochmal duplizieren und weniger räume pro skript machen damit ich besser auf die Sonne im Tagesverlauf reagieren kann.

--[[
%% 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 = '-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 = 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 = 54	   	    	-- 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))
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(18);			-- 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
--###########################################################################################

Mit freundlichen Grüßen
bademeister

noch ne frage… sollte eine tür nicht geschlossen sein, stoppt das skript an der stelle und wartet bis die tür geschlossen wurde?
was macht man wenn man 5 türen hat?
dann stehen am halben haus noch die rolläden offen?

danke
bademeister

Hi,

zu Deiner Frage zu dem Lux-Sensor:
Deswegen nutze ich den exakten Sonnenstand und die Außentemp zur Rollosteuerung:
https://www.siio.de/board/thema/sonnenverlauf-zur-rollosteuerung/

VG Hoggle

Hi Hoggle,

ok, das ist dann die deluxe version. mal schauen, ob ich das irgendwann in angriff nehme.
danke

Also dein Script sieht komplexer aus…
Ich habe auch nur eine Tür/Sensor, die ein Rollorunterfahren verhindert.

ich werde mir bei gelegenheit das sonnenstandskript mal anschauen und gucken wie ich das auf meine bedürfnisse angepasst bekomme.
evtl. sieht das o.g. skript komplex aus, weil ich soviele rolläden und dann noch unterschiedliche positionen für raffstores etc drin habe.
und die zufällige verzögerung etc. die fragen dazu stelle ich dann im zugehörigen thread.

Mit freundlichen Grüßen
bademeister