Versuch eines "All-in-one" Rollladenscripts

Unter Verwendung mehrerer Scripte habe ich einen Versuch gestartet, die “eierlegende Wollmilchsau” für meine Rolladen zu bauen.
Zusätzlich zur Steuerung nach Sonnenauf- bzw. untergang, habe ich ein Sonnenstands-VD zur Beschattung und ein Wetter-VD zur Bestimmung von Windrichtung und -stärke zum Schutz vor Sturm aus der jeweiligen Himmelsrichtung, benutzt.
Da meine LUA Kenntnisse sehr beschränkt sind, möchte ich dieses Script hier teilen und den Spezialisten zur Verbesserung zur Verfügung stellen, da ich glaube, dass man es bestimmt auch schlanker machen kann.

–[[
%% 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 ein Sonnenstands-VD integriert.
– Sturmschutz wird über das Weather-VD von Sankotronic realisiert.
– Bei morgendlichem Ö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
– StormFirstMaxTime Startwert = 0 (Interne Zeitvariable)
– StormFirstMinTime Startwert = 0 (Interne Zeitvariable)
– SturmSchutz Startwert = 0 (Variable gibt an, ob der Sturmschutz aktiv ‘1’ oder inaktiv ‘0’ ist
–#####################################################################################################################

local minSonAuf = ‘-30’ – Verzögerungszeit in Minuten zum öffnen der Rolläden bei Sonnenaufgang.
local minSonUnt = ‘25’ – Verzögerungszeit in Minuten zum schließen der Rolläden bei Sonnenuntergang.
local zeitFruehstensAuf = ‘07:00’ – Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitSpaetestensAuf = ‘08:00’ – 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:30’ – Spätester Zeitpunkt, an dem die Rolläden schließen

local startSunTemp = 23 – über 23 grad für zu
local startSunDelay = 2 – 2 Min bis zu
local endSunTemp = 22 – unter 22 grad für auf
local endSunDelay = 5 – 5 Min bis auf
local sunProtectPosition = 50 – Sonnen schutz position für Rollos.
local sunProtectTempMin = 22 – Grenztemperatur, überhalb derer der Sonnenschutz aktiviert werden soll

local SonneOstWeg = 176 – Grad Himmelsrichtung
local SonneSuedDa = 118 – Grad Himmelsrichtung
local SonneSuedWeg = 277 – Grad Himmelsrichtung
local SonneWestDa = 212 – Grad Himmelsrichtung
local SonneWestWeg = 289 – Grad Himmelsrichtung

local WindSuedDa = 118 – Grad Himmelsrichtung
local WindSuedWeg = 277 – Grad Himmelsrichtung
local WindWestDa = 212 – Grad Himmelsrichtung
local WindWestWeg = 290 – Grad Himmelsrichtung
local startStormSpeed = 49 – Windgeschwindigkeit für zu
local endStormSpeed = 48 – Windgeschwindigkeit für auf
local startStormDelay = 1 – 1 Min bis zu
local endStormDelay = 5 – 5 Min bis auf
local StormProtectSpeedMin = 49 – Grenzgeschwindigkeit, überhalb derer der Sturmschutz aktiviert werden soll
local StormProtectPosition = 1 – Wert auf den die Rollos geöffnet bleiben sollen
local RainProtectPosition = 20 – Wert auf den die Rollos geöffnet bleiben sollen

local luxSensor = 243 – ID desHelligkeitssensors
local tempSensor = 242 – ID des Temperatursensors (Außentemperatur)
local rebootSceneID = 191 – ID der eigenen Scene die rebotet wird.
local meldungenDebug = 1 – Hilfsvariable um die Meldungen nicht andauernd zu wiederholen.

local rs_wohnraum1 = 246; – ID Roller Shutter Schlafzimmer.
local rs_wohnraum2 = 285; – ID Roller Shutter Wohnzimmer
local rs_wohnraum3 = 290; – ID Roller Shutter 1. Flur


–################################ 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
60*1000)
end

–####################### Wetter, Wind und Sonnenstand ##################################

wT = json.decode(fibaro:getGlobalValue(“WeatherState”))
local stationNo = 1
local Windstaerke = wT.openmap[1].wind, “value”
local Windrichtung = wT.openmap[1].wind_deg, “value”
debug(‘lightblue’, " Windrichtung " …Windrichtung… "° / Windgeschwindigkeit " …Windstaerke… “km/h”)

local Sonnenstand = tonumber(fibaro:getGlobalValue(“SonnenWinkel”))

–########## 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+ a6060 + (b60+minSonAuf60));
debug(‘yellow’,""…VersetzterSonnenAufgang…" Öffnen der Rolladen.")

debug('orangered',""..fibaro:getValue(1,'sunsetHour').. " ... SonnenUntergang")
debug('steelblue', ""..minSonUnt.." min. Zeitverzögerung Sonnenuntergang.")
local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
debug('orangered',""..VersetzterSonnenUntergang..' schließen der Rolladen')

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


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

function rollerShutter()

–####################### Berechnung der Variablen ###########################
local a, b = fibaro:getValue(1,‘sunriseHour’):match("([^,]+):([^,]+)")
local VersetzterSonnenAufgang = os.date("%H:%M", -3600+ a6060 + (b60+minSonAuf60));

local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));

local currentDate = os.date('*t');
local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
local SonnenSchutz = tonumber(fibaro:getGlobalValue('SonnenSchutz'));

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

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

—############ SonnenSchutz Südseite… Rolladen runterfahren !! #########################—

if (Sonnenstand >= SonneSuedDa and Sonnenstand < SonneSuedWeg)
and ( tonumber(fibaro:getValue(tempSensor, “value”)) >= startSunTemp )
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(Sonnenstand, “value”)) > SonneSuedDa )
and ((os.time() - gSunFirstMaxTimeLux) >= startSunDelay*60)
then
--------------------------- Rolladen eintragen ----------------------------------------

  fibaro:call(RollosSued,"setValue", SunProtectPosition)

    debug('greenyellow', ' 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 == 1 then
debug(‘lightsteelblue’,‘Die Rolladen bleiben oben… es sind ’ …startSunDelay…’ min bis die Rollos auf ’ …sunProtectPosition…’% fahren.’)
meldungenDebug = 0 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
end

—############## SonnenSchutz Südseite… Rolladen hochfahren !! ###########################—

elseif (Sonnenstand >= SonneSuedWeg and Sonnenstand <= SonneSuedWeg+2)
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(Sonnenstand, “value”)) < SonneSuedWeg )
and ((os.time() - gSunFirstMinTimeLux) >= endSunDelay*60)
then
------------------------ Rolladen eintragen -----------------------------------

    fibaro:call(RollosSued, "open")      

    debug('greenyellow', '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 == 1 then
    debug('lightsteelblue','Rollos bleiben auf ' ..sunProtectPosition..' % ...  es sind '..startSunDelay..' min bis die Rollos rauf fahren.')
	meldungenDebug = 0 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
end

—############## SonnenSchutz Westseite… Rolladen runterfahren !! ###########################—

elseif (Sonnenstand >= SonneWestDa and Sonnenstand < SonneWestWeg)
and tonumber(fibaro:getValue(tempSensor, “value”)) >= StartSunTemp
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(Sonnenstand, “value”)) > SonneWestDa )
and ((os.time() - gSunFirstMaxTimeLux) >= startSunDelay*60)
then
----------------------------- Rolladen eintragen ----------------------------------------

  fibaro:call(RollosWest,"setValue", SunProtectPosition)

  debug('greenyellow', ' 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 == 1 then
	debug('lightsteelblue','Die Rolladen bleiben oben... es sind ' ..startSunDelay..' min bis die Rollos auf ' ..sunProtectPosition..'% fahren.')
	meldungenDebug = 0 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
end  

—############## SonnenSchutz Westseite… Rolladen hochfahren !! ###########################—

elseif (Sonnenstand >= SonneSuedWeg and Sonnenstand <= SonneSuedWeg+2)
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(Sonnenstand, “value”)) < SonneSuedWeg )
and ((os.time() - gSunFirstMinTimeLux) >= endSunDelay*60)
then

-------------------------- Rolladen eintragen --------------------------------------------------

  fibaro:call(RollosSued, "open")      

  debug('greenyellow', '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 == 1 then
    debug('lightsteelblue','Rollos bleiben auf ' ..sunProtectPosition..' % ...  es sind '..endSunDelay..' min bis die Rollos rauf fahren.')
	meldungenDebug = 0 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
end   

—############## Sturmschutz Westseite… Rolladen runterfahren !! ###########################—

elseif (Windstaerke >= WindWestDa and Windstaerke < WindWestWeg)
and (tonumber(fibaro:getValue(Windstaerke, “value”)) >= startStormSpeed)
and StormProtectSpeedMin <= tonumber(fibaro:getValue(Windstaerke, “value”))
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SturmSchutz) == 0)
then fibaro:setGlobal(‘StormFirstMaxTime’, 1);
local StormFirstMaxTime = fibaro:getGlobalModificationTime(‘StormFirstMaxTime’)
if ( tonumber(fibaro:getValue(Windstaerke, “value”)) > startStormSpeed )
and ((os.time() - gStormMaxTimeLux) >= startStormDelay*60)
then
----------------------------- Rolladen eintragen ----------------------------------------

    fibaro:call(RollosWest,"setValue", StormProtectPosition)

  debug('greenyellow', ' Die Rolladen fahren auf ' ..StormProtectPosition..'%!!!')
    fibaro:setGlobal('StormFirstMaxTime', 0);
    fibaro:setGlobal('StormFirstMinTime', 0);
    fibaro:setGlobal('SturmSchutz', 1); --SonnenSchutz wurde gesetzt.
    fibaro:setGlobal('RolloUnten0Oben1', 0);
    meldungenDebug = 0
elseif meldungenDebug == 1
  then debug('lightsteelblue','Die Rolladen bleiben oben... es sind ' ..fibaro:getValue(Windstaerke, "value")..' km/h  und '..startSunDelay..' min bis die Rollos auf ' ..StormProtectPosition..'% fahren.')
	meldungenDebug = 0 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
end  

—############## Sturmchutz Westseite… Rolladen hochfahren !! ###########################—

elseif (Windstaerke > WindWestWeg)
and (tonumber(fibaro:getValue(Windstaerke, “value”)) <= startStormSpeed)
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SturmSchutz) == 1)
then
fibaro:setGlobal(‘StormFirstMinTime’, 1);
local gStormFirstMinTime = fibaro:getGlobalModificationTime(‘StormFirstMinTime’)
if ( tonumber(fibaro:getValue(Windstaerke, “value”)) < endStormSpeed )
and ((os.time() - gStormFirstMinTime) >= endStormDelay*60)
then

-------------------------- Rolladen eintragen --------------------------------------------------

  fibaro:call(RollosWest, "open")      

  debug('greenyellow', fibaro:getValue(Windstaerke, "value")..' Die Rolladen fahren hoch!!!')
    fibaro:setGlobal('StormFirstaxTime', 0);
    fibaro:setGlobal('StormFirstMinTime', 0);
    fibaro:setGlobal('SturmSchutz', 0); --SonnenSchutz wurde entfernt.
    fibaro:setGlobal("RolloUnten0Oben1", 1);
    meldungenDebug = 0
 elseif meldungenDebug == 1 then
  debug('lightsteelblue','Rollos bleiben auf ' ..StormProtectPosition..' % ...  es sind '..endStormDelay..' min bis die Rollos rauf fahren.')
	meldungenDebug = 0 --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');

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

if (os.date("%H:%M", os.time()) &gt;= 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');

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

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

—################ SonnenUntergang !! ###########################################—

elseif tonumber(rollershutter_runs) == 0 and
((VersetzterSonnenUntergang < zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzterSonnenUntergang)
or (VersetzterSonnenUntergang > zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang))
then
debug(‘darkkhaki’,“Rolladen-Controller ist gestartet (Ver.” … version … “)”);
fibaro:setGlobal(‘rollershutter_runs’, 1);debug(‘steelblue’, ‘Sonnenuntergang… schließe Rolladen.’)
debug(‘steelblue’, 'Die Temperatur beträgt '…tonumber(fibaro:getValue(tempSensor, “value”))…‘°C.’)
debug(‘steelblue’, ‘Die zufällige Verzögerung beträgt ’ … min … ’ min.’);
fibaro:sleep(random*100000);

fibaro:call(rs_wohnraum1, "setValue", "15");
fibaro:call(rs_wohnraum2, "setValue", "1");
fibaro:call(rs_wohnraum3, 'close');
	
debug('royalblue',"Rolladen wurden geschlossen.");
fibaro:setGlobal('SunFirstMaxTimeLux', 0);
fibaro:setGlobal('SunFirstMinTimeLux', 0);
fibaro:setGlobal('StormFirstMaxTime', 0);
fibaro:setGlobal('StormFirstMinTime', 0);
fibaro:setGlobal('SonnenSchutz', 0); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('SturmSchutz', 0); --SturmSchutz wurde entfernt.
fibaro:setGlobal('rollershutter_runs', 0);
fibaro:setGlobal('RolloUnten0Oben1', 0);

if (os.date("%H:%M", os.time()) &gt;= 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');

debug('coral',' Die Rolladen fahren in Grundstellung!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', 0);
fibaro:setGlobal('SunFirstMinTimeLux', 0);
fibaro:setGlobal('StormFirstMaxTime', 0);
fibaro:setGlobal('StormFirstMinTime', 0);
fibaro:setGlobal('SonnenSchutz', 0); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('SturmSchutz', 0); --SturmSchutz wurde entfernt.
fibaro:setGlobal('RolloUnten0Oben1', 1);

else
debug(‘royalblue’,’ Es ist Nacht.’)
fibaro:setGlobal(‘SunFirstMaxTimeLux’, 0);
fibaro:setGlobal(‘SunFirstMinTimeLux’, 0);
fibaro:setGlobal(‘StormFirstMaxTime’, 0);
fibaro:setGlobal(‘StormFirstMinTime’, 0);
fibaro:setGlobal(‘SonnenSchutz’, 0); --SonnenSchutz wurde entfernt.
fibaro:setGlobal(‘SturmSchutz’, 0); --SturmSchutz wurde entfernt.
end

debug(‘orangered’, ‘Other source.’)
end
–###########################################################################################`

hallo, hier hat bis jetzt niemand geantwortet, funktioniert diese Szene?

Hallo,
leider bin ich hier nicht weitergekommen und habe die Idee verworfen…
Ich nutze jetzt folgendes:
-ein Script zum Schließen der Rolladen bei Sonne und Sturm
-ein VD zum betätigen der Rolladen
-ein VD für den Sonnenstand
-das VD “Weather State 2.4” von Sankotronik aus dem FIBARO Forum (dort habe ich die Vergabe der globalen Variablen eingebaut)
-die Szene “Main Scene FTBE” von Sankotronik zur zeitgesteuerten Ausführung der Szenen und Aktualisierung der VD´s in bestimmten Intervallen.
Ist vielleicht ein wenig umständlich, aber ich habe für mich mit meinen begrenzten LUA Fähigkeiten die für mich beste Lösung gefunden.
Wenn die Wetterdaten von “Openweather” genauer wären, würde das mit dem Sturmschutz bestimmt besser klappen. Vielleicht kaufe ich mir ja doch noch eine eigene Wetterstation…