Hi wo kann man das aktuelle Script runterladen und gibt es dafür eine Anleitung?
Viele Grüße
Habe jetzt soviel rumgespielt, dass es auf einmal klappt. Ich habe keine Ahnung wieso. Aber egal, Hauptsache klappt.
Jetzt würde ich gerne den Sonnenschutz noch integrieren, aber nur Anhand der Temperatur. Lux brauche ich nicht. Kann ich die Lux Werte einfach auskommentieren oder reicht 1 oder 0 als Wert?
@treblade
Kopier Dir einfach das Skript hier aus dem Thread, achte nur darauf, dass jeder das anders angepasst hat. Meins ist glaube ich von Seite 17 (Version 2.3) und wie Du an mir siehst wird Dir hier bei Fragen immer gut geholfen
Nimm einfach die Werte ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
raus.
Denk aber dran das du bei Sonnenschutz runterfahren und rauffahren die Werte rausnehmen muss.
Um bei dem Script alle Werte auf Anfang zusetzen muss du es 2mal manuell ausführen. Dann fahren deine Rollläden in die Ausgangsposition.
Grüße
Danke für den Hinweis, ich dachte schon ich bin blind und finde den Download Bereich nicht =)
Kann ich statt rs_wohnraum1 auch Buero-Fenster schreiben?
local rs_wohnraum1 = 35; – IDs der Roller Shutter.
local rs_wohnraum2 = 32;
–local rs_wohnraum3 = 0;
–local rs_arbeitszimmer1 = 0;
–local rs_arbeitszimmer2 = 0;
–local rs_bad1 = 0;
–local rs_bad2 = 0;
insoweit Du das im kompletten Code abänderst, sollte nichts dagegen sprechen.
Moin das hab ich jetzt verstanden. Aber funktionieren tut es trotzdem noch nicht =)
Was muss man den Grundlegend tun damit die Szene läuft?
rebootSceneID was tut die eigentlich?
Jetzt steht unter der Szene “Laufende Instanz 1” ist das richtig?
local minSonAuf = '-15' -- Verzögerungszeit in Minuten zum öffnen der Rolläden bei Sonnenaufgang.
local minSonUnt = '15' -- Verzögerungszeit in Minuten zum schließen der Rolläden bei Sonnenuntergang.
local zeitFruehstensAuf = '06:00' -- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitSpaetestensAuf = '08:30' -- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitWeFtAuf = '09:00' -- Zeitpunkt, an dem am Wochenende und an Feiertagen die Rolläden öffnen (fixer Zeitpunkt)
local zeitMaxUntergang = '22:00' -- Spätester Zeitpunkt, an dem die Rolläden schließen
--local maxTempStart = 7 -- Temperatur unterhalb der die Rolladen abends schließen sollen
local startSunLux = 5000; -- über 5.000 Lux für zu
local startSunDelay = 5; -- 5 Min bis zu
local endSunLux = 1000; -- unter 1.000 Lux für auf
local endSunDelay = 20; -- 20 Min bis auf
local sunProtectPosition = 25; -- Sonnenschutzposition für Rolladen
local sunProtectPosition1 = 0; -- Sonnenschutzposition für Raffstores
local sunProtectLamella = 25; -- Sonnenschutzposition Lamellen
local luxSensor = 91 -- ID des Hellichkeitssensors
--local tempSensor = 11 -- ID des Temperatursensors
local rebootSceneID = 13 -- ID der eigenen Scene die rebotet wird.
local meldungenDebug = 0; -- Hilfsvariable um die Meldungen nicht andauernd zu wiederholen.
local rs_wohnraum1 = 32; -- Schiebetür Raffst.
local rs_wohnraum2 = 35; -- Fenster Raffst.
--local rs_wohnraum3 = 54; -- Wohnzimmer Fenster Raffst.
--local rs_arbeitszimmer1 = 58; -- Büro
--local rs_bad1 = 60; -- G-WC
--local rs_bad2 = 42; -- Bad
--local rs_kueche1 = 44; -- Fenster Garage
--local rs_kueche2 = 46; -- Fenster Garten Raffst.
--local rs_kueche3 = 48; -- Tür Garten Raffst.
--local rs_theo = 40; -- Fenster Theo
--local rs_flurEG = 62; -- Fenster Flur EG
local doorID1 = 278; -- ID des Türkontakts Schiebetür
--local doorID2 = ; --Platzhalter für weitere Türkontakte (siehe WHILE-Schleifen bei ca. Zeile 275)
--local doorID3 = ; --Platzhalter für weitere Türkontakte (siehe WHILE-Schleifen bei ca. Zeile 275)
Ich starte die Szene und dabei kommt das raus:
[DEBUG] 09:31:09: 05:11 … Sonnenaufgang
[DEBUG] 09:31:09: -15 min… Zeitverzögerung zum Sonnenaufgang.
[DEBUG] 09:31:09: 04:56 Öffnen der Rolladen.
[DEBUG] 09:31:09: 21:51 … SonnenUntergang
[DEBUG] 09:31:09: 15 min. Zeitverzögerung Sonnenuntergang.
[DEBUG] 09:31:09: 22:06 schließen der Rolladen
[DEBUG] 09:31:09: Heute ist Wochenende oder ein Feiertag.
[DEBUG] 09:31:09: Die Rolladen werden um 09:00 öffnen.
[DEBUG] 09:31:09: Die Rolladen werden um 22:00 zuzüglich einer zufälligen Verzögerung geschlossen
[DEBUG] 09:31:09: Rolladen-Controller startet das erste mal!
[DEBUG] 09:31:10: [1;31m2018-06-23 09:31:10.005372 [ fatal] Unknown exception: /opt/fibaro/FibaroSceneAPI.lua:334: attempt to concatenate local ‘deviceID’ (a nil value)
Du hast leider nicht den ganzen Code geposted aber Fehlermeldung müsste an dem auskommentierten ID des Temp Sensors liegen. Nimm den mal wieder rein.
maxtempstart würde ich auch wieder rein nehmen und lieber auf einen hohen Wert setzen. 40 funktioniert bei mir
hi,
hab leider auch nochmal probleme mit meinem skript.
seit ein paar tagen fahren die rolladen nicht mehr runter. geöffnet wird noch (wenn auch nicht zu der korrekten uhrzeit) aber die rolladen bleiben abends einfach oben…
ich hab nichts geändert oder sonstwo dran gefummelt… es geht einfach von einem Tag auf den anderen nicht mehr…
--[[
%% autostart
%% properties
%% globals
--]]
-- Bisherige Hauptarbeiten an dem Skript: http://www.Siio.de, boomx, parip69 und thebrain. Kleine Modifikationen von alando22
-- Version 2.3
-- Dieses Skript realisiert eine Rolladen-Steuerung zum Sonnenaufgang und - untergang mit Verzögerungszeiten und einer
-- Temperaturschwelle, die zum schließen der Rolläden unterschritten werden muss.
-- Zusätzlich ist eine zufällige Verzögerung von 1-30 Minuten eingebaut, um die Aktivitäten nicht nachvollziehbar zu machen.
-- Zudem ist ein Sonnenschutz über einen Helligkeitssensor integriert. Eine Prüfung ggf. offener Türen ist ebenfalls enthalten.
-- Bei morgendlichen Öffnen wird zwischen Werktagen und Wochenenden & Feiertagen unterschieden.
-- Wochentags wird nach Sonnenaufgang geöffnet, am Wochenende & an Feiertagen zu fester Uhrzeit.
-- Dazu ist das Skript "Variable für Feiertage" von https://www.siio.de/board/thema/variable-fuer-feiertage/#post-42440 notwendig.
-- Ohne Verwendung des Feiertagsscripts bitte die Zeile 89 auskommentieren!!!
-- Notwendige globale Variablen (vorher anlegen!):
--
-- SunFirstMaxTimeLux Startwert = 0 (Interne Zeitvariable)
-- SunFirstMinTimeLux Startwert = 0 (Interne Zeitvariable)
-- SonnenSchutz Startwert = 0 (Variable gibt an, ob der Sonnenschutz aktiv '1' oder inaktiv '0' ist
-- RolloUnten0Oben1 Startwert = 1 (Variable gibt an, ob Rolladen unten '0' oder oben '1' ist
--#####################################################################################################################
local minSonAuf = '-15' -- Verzögerungszeit in Minuten zum öffnen der Rolläden bei Sonnenaufgang.
local minSonUnt = '15' -- Verzögerungszeit in Minuten zum schließen der Rolläden bei Sonnenuntergang.
local zeitFruehstensAuf = '06:00' -- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitSpaetestensAuf = '08:30' -- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitWeFtAuf = '08:30' -- Zeitpunkt, an dem am Wochenende und an Feiertagen die Rolläden öffnen (fixer Zeitpunkt)
local zeitMaxUntergang = '22:00' -- Spätester Zeitpunkt, an dem die Rolläden schließen
-- local maxTempStart = 7 -- Temperatur unterhalb der die Rolladen abends schließen sollen
local startSunLux = 7000 -- war auf 8.000 Lux
local startSunDelay = 5 -- 5 Min bis zu
local endSunLux = 4000 -- unter 1.000 Lux für auf
local endSunDelay = 20 -- 20 Min bis auf
local sunProtectPosition = 25; -- Sonnenschutzposition für Rolladen
local sunProtectPosition1 = 0; -- Sonnenschutzposition für Raffstores
local sunProtectLamella = 25; -- Sonnenschutzposition Lamellen
local luxSensor = 404 -- ID des Helligkeitssensors
-- local tempSensor = 11 -- ID des Temperatursensors (Außentemperatur)
local rebootSceneID = 86 -- ID der eigenen Scene die rebotet wird.
local meldungenDebug = 0 -- Hilfsvariable um die Meldungen nicht andauernd zu wiederholen.
local rs_wohnraum1 = 50; -- Schiebetür Raffst.
local rs_wohnraum2 = 52; -- Fenster Raffst.
local rs_wohnraum3 = 54; -- Wohnzimmer Fenster Raffst.
local rs_arbeitszimmer1 = 58; -- Büro
local rs_bad1 = 60; -- G-WC
local rs_bad2 = 42; -- Bad
local rs_kueche1 = 44; -- Fenster Garage
local rs_kueche2 = 46; -- Fenster Garten Raffst.
local rs_kueche3 = 48; -- Tür Garten Raffst.
local rs_theo = 40; -- Fenster Theo
local rs_flurEG = 62; -- Fenster Flur EG
local rs_ankleide = 32 -- Fenster Ankleide
local rs_elternGarten = 36 -- Fenster Eltern Garten
local rs_karla = 38 -- Fenster Karla
local rs_elternTerrasse = 34 -- Fenster Eltern Terrasse
local doorID1 = 278; -- ID des Türkontakts Schiebetür
local doorID2 = 338; -- ID Balkontür Küche
local doorID3 = 408; -- ID Tür Terrasse Eltern (siehe WHILE-Schleifen bei ca. Zeile 275)
-------------------------------------------------------------------------------------------------------------------------
--################################ ab hier nichts mehr ändern! ##########################################################
-------------------------------------------------------------------------------------------------------------------------
debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
--#######################################################################################
local sourceTrigger = fibaro:getSourceTrigger();
function sceneReboot()
local currentDate = os.date("*t");
if ((currentDate.hour == 2) and (currentDate.min >= 0)and (currentDate.min < 1))
or sourceTrigger["type"] == "other" then
debug('salmon',"Neustart der Szene!")
fibaro:sleep(1*60*1000)
fibaro:startScene(rebootSceneID);
end
setTimeout(sceneReboot, 1*60*1000)
end
--########## Berechnung versetzter Sonnenaufgang und versetzter Sonnenuntergang ############
debug('gold', ""..fibaro:getValue(1,'sunriseHour').." ... Sonnenaufgang")
debug('steelblue', ""..minSonAuf.." min... Zeitverzögerung zum Sonnenaufgang.")
local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
debug('yellow',""..VersetzterSonnenAufgang.." Öffnen der Rolladen.")
----------------------------------------------------------------------------------------
debug('orangered',""..fibaro:getValue(1,'sunsetHour').. " ... SonnenUntergang")
debug('steelblue', ""..minSonUnt.." min. Zeitverzögerung Sonnenuntergang.")
local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
debug('orangered',""..VersetzterSonnenUntergang..' schließen der Rolladen')
--############################## Feststellung ob Wochenende oder Feiertag ##################
local Feiertag_heute = tonumber(fibaro:getGlobalValue("Feiertag_heute")) -- Diese Zeile auskommentieren, wenn kein Feiertagsscript genutzt wird
local currentDate = os.date("*t")
local werktag = 1
---------------------------------------------------------------------------------------
--############ Prüfung wann Rolladen tatsächlich öffnen werden ########################
if werktag == 0 then
debug ('yellow', "Die Rolladen werden um "..zeitWeFtAuf.." öffnen.")
elseif
VersetzterSonnenAufgang > zeitFruehstensAuf and VersetzterSonnenAufgang < zeitSpaetestensAuf then
debug('yellow',"Die Rolladen werden um "..VersetzterSonnenAufgang.. " zuzüglich einer zufälligen Verzögerung öffnen.")
elseif VersetzterSonnenAufgang < zeitFruehstensAuf then
debug('yellow',"Die Rolladen werden um "..zeitFruehstensAuf.. " zuzüglich einer zufälligen Verzögerung öffnen.")
elseif VersetzterSonnenAufgang > zeitSpaetestensAuf then
debug('yellow',"Die Rolladen werden um "..zeitSpaetestensAuf.. " zuzüglich einer zufälligen Verzögerung öffnen.")
end
--------------------------------------------------------------------------------------------
if VersetzterSonnenUntergang > zeitMaxUntergang then
debug('steelblue',"Die Rolladen werden um "..zeitMaxUntergang.. ' zuzüglich einer zufälligen Verzögerung geschlossen')
else
debug('steelblue',"Die Rolladen werden um "..VersetzterSonnenUntergang.. ' zuzüglich einer zufälligen Verzögerung geschlossen')
end
--#########################################################################################
debug('darkgreen',"Rolladen-Controller startet das erste mal!");
function rollerShutter()
--######## Berechnung der Variablen ########
local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
----------------------------------------------------------------------------------------
local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
----------------------------------------------------------------------------------------
local currentDate = os.date('*t');
local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
local SonnenSchutz = tonumber(fibaro:getGlobalValue('SonnenSchutz'));
----------------------------------------------------------------------------------------
local version = '2.3';
local currentDate = os.date('*t');
local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
local random = math.random(5); -- Hier wird die zufällige Verzögerung beeinflusst.
local min = math.floor((random*100)/60);
--------------------------------------------------------------------------------------------
if ((Feiertag_heute == 1 or currentDate.wday == 7 or currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 6))
then
werktag = 0
-- debug('grey', "Heute ist Wochenende oder ein Feiertag.")
else
werktag = 1
-- debug('grey',"Heute ist ein Werktag und kein Feiertag.")
end
------------------------------------------------------------------------------------------
---################# SonnenSchutz... Rolladen runterfahren !! #########################---
------------------------------------------------------------------------------------------
if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
-- and sunProtectTempMin <= tonumber(fibaro:getValue(tempSensor, "value"))
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SonnenSchutz) == 0)
then
fibaro:setGlobal('SunFirstMaxTimeLux', '1');
local gSunFirstMaxTimeLux = fibaro:getGlobalModificationTime('SunFirstMaxTimeLux')
if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
and ((os.time() - gSunFirstMaxTimeLux) >= startSunDelay*60)
then
---------------- Rolladen eintragen ----------------------------------------
--fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1); --Fenster Esszimmer
--fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); --Lamellen
--fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1); --Fenster Wohnzimmer
--fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); --Lamellen
fibaro:call(rs_arbeitszimmer1, "setValue", sunProtectPosition); --Fenster Büro
fibaro:call(rs_bad1, "setValue", sunProtectPosition); -- Fenster G-WC
-- fibaro:call(rs_bad2, "setValue", sunProtectPosition); --Fenster Bad
fibaro:call(rs_kueche1, "setValue", sunProtectPosition); --Fenster Garage
--fibaro:call(rs_kueche2, "setValue", sunProtectPosition1); --Fenster Garten
--fibaro:call(rs_kueche2, "setValue2", sunProtectLamella); --Lamellen
--fibaro:call(rs_kueche3, "setValue", sunProtectPosition1); --Tür Garten
--fibaro:call(rs_kueche3, "setValue2", sunProtectLamella); --Lamellen
-- fibaro:call(rs_theo, "setValue", sunProtectPosition); --Fenster Theo
fibaro:call(rs_flurEG, "setValue", sunProtectPosition); --Fenster Flur
--fibaro:call(rs_ankleide, "setValue", sunProtectPosition); --Fenster Ankleide
--fibaro:call(rs_elternTerrasse, "setValue", sunProtectPosition) --Fenster Terrasse
---------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Lux ... Die Rolladen fahren auf ' ..sunProtectPosition..'%!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '1'); --SonnenSchutz wurde gesetzt.
fibaro:setGlobal('RolloUnten0Oben1', '0');
meldungenDebug = 0
elseif meldungenDebug == 0 then
debug('lightsteelblue','Die Rolladen bleiben oben... es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux und '..startSunDelay..' min bis die Rollos auf ' ..sunProtectPosition..'% fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
end
------------------------------------------------------------------------------------------
---################# SonnenSchutz... Rolladen hochfahren !! ###########################---
------------------------------------------------------------------------------------------
elseif ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SonnenSchutz) == 1)
then
fibaro:setGlobal('SunFirstMinTimeLux', '1');
local gSunFirstMinTimeLux = fibaro:getGlobalModificationTime('SunFirstMinTimeLux')
if ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
and ((os.time() - gSunFirstMinTimeLux) >= endSunDelay*60)
then
---------------- Rolladen eintragen --------------------------------------------------
--fibaro:call(rs_wohnraum1, 'open');
--fibaro:call(rs_wohnraum2, 'open');
--fibaro:call(rs_wohnraum3, 'open');
fibaro:call(rs_arbeitszimmer1, 'open');
fibaro:call(rs_bad1, 'open');
-- fibaro:call(rs_bad2, 'open');
fibaro:call(rs_kueche1, 'open');
--fibaro:call(rs_kueche2, 'open');
--fibaro:call(rs_kueche3, 'open');
-- fibaro:call(rs_theo, 'open');
fibaro:call(rs_flurEG, 'open');
--fibaro:call(rs_ankleide, "open");
--fibaro:call(rs_elternTerrasse, "open");
--------------------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Die Rolladen fahren hoch!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('RolloUnten0Oben1', '1');
meldungenDebug = 0
elseif meldungenDebug == 0 then
debug('lightsteelblue','Rollos bleiben auf ' ..sunProtectPosition..' % ... es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
end
------------------------------------------------------------------------------------------
---################# Sonnenaufgang Werktags!! ###############################################--
------------------------------------------------------------------------------------------
elseif werktag == 1 and ((VersetzterSonnenAufgang > zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzterSonnenAufgang)
or (VersetzterSonnenAufgang < zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
or (VersetzterSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
and (tonumber(rollershutter_runs) == 0))
then
debug('green', 'Werktag = '.. werktag)
debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutter_runs', '1');
debug('gold', 'Sonnenaufgang... öffne Rolladen');
debug('gold', 'Waiting ' .. min .. ' min');
fibaro:sleep(random*100000);
fibaro:call(rs_wohnraum1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum2, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum3, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_arbeitszimmer1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad2, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kueche1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kueche2, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kueche3, 'open');
fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_theo, 'open');
--fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_flurEG, 'open');
fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_karla, 'open');
--fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_elternTerrasse, 'open');
--fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_elternGarten, 'open');
--fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_ankleide, 'open');
--fibaro:sleep(math.random(5000,10000));
debug('yellow',"Rolladen wurden geöfnet.");
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('RolloUnten0Oben1', '1');
if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang) then
debug('coral',"Es ist Tag.");
end
------------------------------------------------------------------------------------------
---################# Sonnenaufgang Wochenende und Feiertags!! ###################################--
------------------------------------------------------------------------------------------
elseif werktag == 0 and ((string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == zeitWeFtAuf)
and (tonumber(rollershutter_runs) == 0))
then
debug('green', 'Werktag = '.. werktag)
debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutter_runs', '1');
debug('yellow','Es ist '..zeitWeFtAuf..'Uhr, Öffne Rolladen');
fibaro:call(rs_wohnraum1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum2, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum3, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_arbeitszimmer1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad2, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kueche1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kueche2, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kueche3, 'open');
fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_theo, 'open');
--fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_flurEG, 'open');
fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_karla, 'open');
--fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_elternTerrasse, 'open');
--fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_elternGarten, 'open');
--fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_ankleide, 'open');
--fibaro:sleep(math.random(5000,10000));
debug('yellow',"Rolladen wurden geöfnet.");
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('RolloUnten0Oben1', '1');
debug('coral',"Es ist Tag.");
-----------------------------------------------------------------------------------------
---################ SonnenUntergang !! ###########################################---
-----------------------------------------------------------------------------------------
elseif (tonumber(rollershutter_runs) == 0) and ((VersetzterSonnenUntergang < zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzterSonnenUntergang)
or (VersetzterSonnenUntergang > zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang))
then
debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutter_runs', '1');
debug('steelblue', 'Sonnenuntergang... schließe Rolladen')
-- debug('sttelblue', 'Die Temperatur beträgt '..tonumber(fibaro:getValue(tempSensor, "value"))..'°C.')
debug('steelblue', 'Die zufällige Verzögerung beträgt ' .. min .. ' min.');
fibaro:sleep(random*100000);
fibaro:call(rs_arbeitszimmer1, 'close') --ID für close ohne prüfung eines offenen Fensters
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad1, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad2, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kueche1, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kueche2, 'close');
fibaro:call(rs_kueche2,'setValue2', '0')
fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_kueche3, 'close');
--fibaro:call(rs_kueche3,'setValue2', '0')
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum2, 'close');
fibaro:call(rs_wohnraum2,'setValue2', '0')
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum3, 'close');
fibaro:call(rs_wohnraum3,'setValue2', '0')
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_theo, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_flurEG, "close");
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_ankleide, 'close')
fibaro:sleep(math.random(5000,10000))
fibaro:call(rs_elternGarten,'close')
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_karla,'close');
fibaro:sleep(math.random(5000,10000));
while
(tonumber(fibaro:getValue(doorID1, 'value')) > 0) do --prüft ob Fester offen, wenn ja wird Rolladen nicht geschlossen
fibaro:sleep(10*1000)
end
fibaro:call(rs_wohnraum1, 'close');
fibaro:call(rs_wohnraum1,"setValue2", '0')
while
(tonumber(fibaro:getValue(doorID2, 'value')) > 0) do --prüft ob Fester offen, wenn ja wird Rolladen nicht geschlossen
fibaro:sleep(10*1000)
end
fibaro:call(rs_kueche3, 'close');
fibaro:call(rs_kueche3, "setValue2","0")
while
(tonumber(fibaro:getValue(doorID3, 'value')) > 0) do --prüft ob Fester offen, wenn ja wird Rolladen nicht geschlossen
fibaro:sleep(10*1000)
end
fibaro:call(rs_elternTerrasse, 'close');
debug('royalblue',"Rolladen wurden geschlossen.");
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('RolloUnten0Oben1', '0');
if (os.date("%H:%M", os.time()) >= VersetzterSonnenUntergang) then
debug('royalblue',"Es ist Nacht.");
end
end
---#######################################################################################
setTimeout(rollerShutter, 60*1000);
end
--########################################################################################
if (sourceTrigger['type'] == 'autostart') then
rollerShutter();
sceneReboot();
elseif (sourceTrigger['type'] == 'property') then
debug('orangered', 'Source device = ' .. sourceTrigger['deviceID'])
elseif (sourceTrigger['type'] == 'global') then
debug('orangered', 'Global variable source = ' .. sourceTrigger['name'])
elseif (sourceTrigger['type'] == 'other') then
---------------- Rolladen eintragen ----------------------------------------
if(os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and(os.date("%H:%M", os.time()) < VersetzterSonnenUntergang) then
fibaro:call(rs_wohnraum1, 'open');
fibaro:call(rs_wohnraum2, 'open');
fibaro:call(rs_wohnraum3, 'open');
fibaro:call(rs_arbeitszimmer1, 'open');
fibaro:call(rs_bad1, 'open');
fibaro:call(rs_bad2, 'open');
fibaro:call(rs_kueche1, 'open');
fibaro:call(rs_kueche2, 'open');
fibaro:call(rs_kueche3, 'open');
fibaro:call(rs_theo, 'open');
fibaro:call(rs_flurEG, 'open');
fibaro:call(rs_ankleide, "open");
fibaro:call(rs_elternTerrasse, "open");
fibaro:call(rs_elternGarten, "open");
fibaro:call(rs_karla, "open");
debug('coral',' Die Rolladen fahren in Grundstellung!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('RolloUnten0Oben1', '1');
else
debug('royalblue',' Es ist Nacht.')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
end
---------------------------------------------------------------------------
debug('orangered', 'Other source.')
end
--###########################################################################################
der Debug schreibt auch immer nur morgens das öffnen rein…
[DEBUG] 03:04:24: 05:26 … Sonnenaufgang
[DEBUG] 03:04:24: -15 min… Zeitverzögerung zum Sonnenaufgang.
[DEBUG] 03:04:24: 05:11 Öffnen der Rolladen.
[DEBUG] 03:04:24: 21:45 … SonnenUntergang
[DEBUG] 03:04:24: 15 min. Zeitverzögerung Sonnenuntergang.
[DEBUG] 03:04:24: 22:00 schließen der Rolladen
[DEBUG] 03:04:24: Die Rolladen werden um 06:00 zuzüglich einer zufälligen Verzögerung öffnen.
[DEBUG] 03:04:24: Die Rolladen werden um 22:00 zuzüglich einer zufälligen Verzögerung geschlossen
[DEBUG] 03:04:24: Rolladen-Controller startet das erste mal!
[DEBUG] 08:30:30: Werktag = 0
[DEBUG] 08:30:30: Rolladen-Controller ist gestartet (Ver.2.3)
[DEBUG] 08:30:30: Es ist 08:30Uhr, Öffne Rolladen
[DEBUG] 08:31:54: Rolladen wurden geöfnet.
[DEBUG] 08:31:54: Es ist Tag.
[DEBUG] 09:28:55: Die Rolladen bleiben oben… es sind 7299 Lux und 5 min bis die Rollos auf 25% fahren.
[DEBUG] 09:38:55: 7506 Lux … Die Rolladen fahren auf 25%!!!
[DEBUG] 09:41:55: Rollos bleiben auf 25 % … es sind 3628 Lux und 20 min bis die Rollos rauf fahren.
[DEBUG] 10:01:56: 2312 Die Rolladen fahren hoch!!!
[DEBUG] 13:18:59: Die Rolladen bleiben oben… es sind 7962 Lux und 5 min bis die Rollos auf 25% fahren.
[DEBUG] 13:24:00: 7921 Lux … Die Rolladen fahren auf 25%!!!
[DEBUG] 15:20:02: Rollos bleiben auf 25 % … es sind 3939 Lux und 20 min bis die Rollos rauf fahren.
[DEBUG] 15:41:02: 3276 Die Rolladen fahren hoch!!!
[DEBUG] 02:00:12: Neustart der Szene!
[DEBUG] 02:01:12: 05:26 … Sonnenaufgang
[DEBUG] 02:01:12: -15 min… Zeitverzögerung zum Sonnenaufgang.
[DEBUG] 02:01:12: 05:11 Öffnen der Rolladen.
[DEBUG] 02:01:12: 21:45 … SonnenUntergang
[DEBUG] 02:01:12: 15 min. Zeitverzögerung Sonnenuntergang.
[DEBUG] 02:01:12: 22:00 schließen der Rolladen
[DEBUG] 02:01:12: Die Rolladen werden um 06:00 zuzüglich einer zufälligen Verzögerung öffnen.
[DEBUG] 02:01:12: Die Rolladen werden um 22:00 zuzüglich einer zufälligen Verzögerung geschlossen
[DEBUG] 02:01:12: Rolladen-Controller startet das erste mal!
[DEBUG] 02:01:12: Es ist Nacht.
[DEBUG] 02:01:12: Other source.
[DEBUG] 08:30:18: Werktag = 0
[DEBUG] 08:30:18: Rolladen-Controller ist gestartet (Ver.2.3)
[DEBUG] 08:30:18: Es ist 08:30Uhr, Öffne Rolladen
[DEBUG] 08:31:25: Rolladen wurden geöfnet.
[DEBUG] 08:31:25: Es ist Tag.
[DEBUG] 02:00:41: Neustart der Szene!
[DEBUG] 02:01:41: 05:26 … Sonnenaufgang
[DEBUG] 02:01:41: -15 min… Zeitverzögerung zum Sonnenaufgang.
[DEBUG] 02:01:41: 05:11 Öffnen der Rolladen.
[DEBUG] 02:01:41: 21:45 … SonnenUntergang
[DEBUG] 02:01:41: 15 min. Zeitverzögerung Sonnenuntergang.
[DEBUG] 02:01:41: 22:00 schließen der Rolladen
[DEBUG] 02:01:41: Die Rolladen werden um 06:00 zuzüglich einer zufälligen Verzögerung öffnen.
[DEBUG] 02:01:41: Die Rolladen werden um 22:00 zuzüglich einer zufälligen Verzögerung geschlossen
[DEBUG] 02:01:41: Rolladen-Controller startet das erste mal!
[DEBUG] 02:01:41: Es ist Nacht.
[DEBUG] 02:01:41: Other source.
[DEBUG] 08:30:48: Werktag = 0
[DEBUG] 08:30:48: Rolladen-Controller ist gestartet (Ver.2.3)
[DEBUG] 08:30:48: Es ist 08:30Uhr, Öffne Rolladen
[DEBUG] 08:31:58: Rolladen wurden geöfnet.
[DEBUG] 08:31:58: Es ist Tag.
[DEBUG] 09:59:00: Die Rolladen bleiben oben… es sind 7299 Lux und 5 min bis die Rollos auf 25% fahren.
[DEBUG] 10:04:00: 7299 Lux … Die Rolladen fahren auf 25%!!!
[DEBUG] 17:59:08: Rollos bleiben auf 25 % … es sind 3960 Lux und 20 min bis die Rollos rauf fahren.
[DEBUG] 18:19:09: 3628 Die Rolladen fahren hoch!!
für das skript ist auch immer werktag gleich 0, obwohl es mittwoch bis donnerstag =1 sein sollte und die läden um 6 uhr aufgehen sollten…
kann das feiertagsskript einfluss auf das schliessen der rolläden haben??
22 uhr sollten eigentlich immer die rolladen runterfahren…
danke
Mit freundlichen Grüßen
bademeister
Moin Bademeister,
das gleiche Problem tritt bei mir auch hin und wieder auf. Ich glaube in meinem Fall passiert das meist wenn ich abseits von der Szene (ebenfalls Release 2.3 mit kleinen Anpassungen) den Rollladen manuell schalte. Einzige Lösung die bei mir funktioniert ist wenn ich eine winzige Änderung im Script vornehme (e.g. zusätzliches Leerzeichen in einem Kommentar einfügen) und dann die Szene neu abspeichere. Zum nächsten Schalttermin triggert die Szene dann wieder zur gewünschten Zeit und setzt auch die Variable “Werktag” korrekt. Seltsamerweise löst ein einfacher Neustart der Szene das Problem nicht.
Ich habe bisher nie ganz verstanden was eigentlich passiert wenn zwei Instanzen der Szene starten und eine davon “gekillt” wird. Mir scheint es das die meisten Probleme mit dem Rollladenscript in dem nächtlichen Neustart der Szene begründet sind. Dabei wird m.E. die alte Instanz nicht immer gestoppt und dümpelt noch im Hintergrund herum. Habe mittlerweile die maximale Anzahl der Instanzen aus 1 heruntergesetzt und stelle aber auch gerade fest das n der Szene kein Schleifenschutz implementiert ist. Vielleicht würde das ja helfen.
Güße
Alex
Hi lodi,
probleme habe ich mit dem skript in regelmässigen abständen bzw. nachdem ich was geändert habe (wg Urlaub noch rolladen hinzugefügt etc)
normalerweise hat dann wie von dir beschrieben, eine kleine änderung und abspeichern genügt und alles lief wieder.
diesmal hat nach dem urlaub alles für ne woche funktioniert und dann plötzlich nicht mehr…
werde jetzt das skript mal komplett neu anlegen und dann mal schauen…
obs an den instanzen liegt weiss ich nicht. bei mir tritt zum ersten mal das problem mit dem werktag auf… allerdings nur dienstag und mittwoch, am donnerstag hat er erkannt, dass werktag ist und die rolladen um 6 uhr geöffnet…
das abends nicht schliessen liegt aber eher nicht am werktag problem, oder?
Mit freundlichen Grüßen
bademeister
Hallo Zusammen,
mich störte bisher, das der Sonnenschutz manachmal zurückgenommen wurde, nur weil zufällig nach 20 minuten wieder eine kleine Wolke da war.
Durch die Berechnung des gleitenden Mittelwertes werden nun kurze positive und negative Spitzen gefiltert. Nur wenn der Mittelwert die eingestellten Grenzwerte verletzt bewegen sich die Rolläden. Die Mittelwertbildung erfolgt bei jedem Aufruf des Scripts, also jede Minute. Die Filterung kann über n
Zyklen stattfinden, also über n
Minuten.
-- Mittelwert berechnung
local n = 10;
local luxMittelwert = tonumber(fibaro:getGlobalValue('luxMittelwert'));
local luxMittelwert = (1/(n+1)) * (lux-luxMittelwert) + luxMittelwert;
fibaro:setGlobal('luxMittelwert', luxMittelwert);
debug('gold', ""..luxMittelwert.." ... Helligkeit Außenmodul (gemittelt)")
Man benötigt dafür eine weitere Globale Variable luxMittelwert
. Die dazugehörigte Ausgabe kann dann wie folgt aussehen (Sensor wurde zum Test kurz zugehalten):
...
[DEBUG] 11:45:02: 3408 ... Helligkeit Außenmodul
[DEBUG] 11:45:02: 2791.5500587852 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:46:02: 3408 ... Helligkeit Außenmodul
[DEBUG] 11:46:02: 2847.590962532 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:47:02: 0 ... Helligkeit Außenmodul
[DEBUG] 11:47:02: 2798.5372386655 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:48:02: 3408 ... Helligkeit Außenmodul
[DEBUG] 11:48:02: 2844.8520351505 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:49:02: 3408 ... Helligkeit Außenmodul
[DEBUG] 11:49:02: 2986.9563955914 ... Helligkeit Außenmodul (gemittelt)
[DEBUG] 11:50:02: 3404 ... Helligkeit Außenmodul
...
Nimmt man dann anstelle des Sensorwerts den gemittelten Wert, wird die Steuerung wesentlich robuster.
Vielleicht sind die globalen Parameter falsch initialisiert oder die Rolläden sind auf einer falschen initial Position.
Dafür wurde am Ende des Scripts eine kleine Routine vorgesehen. Wenn man eine Änderung im Scipt macht, immer die Routinge manuell Starten, damit die Rolläden in Grundstellung fahren und die globalen Parameter richtig initialiesiert werden.
hallo ewald113,
alles schon probiert, liefert leider keine verbesserung…
mfg
Ich habe gestern einen interessanten Fall im Zusammenhang mit dem Sonnenschutz beobachtet:
Nachdem am Sonntag nachmittags die Sonne kurzzeitig sehr hell schien, wurde der Code für den Sonnenschutz aktiviert. Meine Version des Skripts prüft nach einigen Minuten nochmals, ob der Wert für die Aktivierung des Sonnenschutzes überschritten wird (um zu verhindern, dass bei sehr kurzzeitiger Sonne gleich die Rollläden auf Sonnenschutz fahren). Dieser Fall war am Sonntag bei uns aber nicht mehr gegeben, da sich die Sonne wohl gleich für den Rest des Nachmittags wieder hinter Wolken verabschiedet hatte. Also fuhren die Rollläden am Sonntag nicht auf Sonnenschutz, wie beabsichtigt.
Aber am Montag fuhr das Skript nach erneutem Überschreiten des Wertes um die Mittagszeit die Rollläden sofort auf Sonnenschutz, ohne erneute Prüfung. Eigentlich hatte ich gedacht, dass in diesem Fall (neuer Tag) auch nochmal eine zweite Prüfung passiert, was aber so nicht der Fall ist.
Nun habe ich deshalb wieder die Codevariante aktiviert, wo die Szene nachts rebootet wird. Dann werden alle Variablen auf Grundstellung gesetzt und damit wird auch an einem neuen Tag die Helligkeit ein zweites Mal überprüft, bevor der Sonnenschutz aktiviert wird.
Die Idee oben mit den Mittelwerten ist auch gut, werde ich eventuell auch mal ausprobieren.
Hallo liebes Forum,
ich habe seit fast zwei Jahren das unten aufgeführte Skript ohne Problame am laufen. Seit einiger Zeit erhalte ich die folgende Fehlermeldung im Debug:
[DEBUG] 20:54:35: 2019-05-15 20:54:35.796610 [ error] timer handler failed with error: /opt/fibaro/scenes/366.lua:231: attempt to concatenate a nil value
Kann mir jemand mitteilen, woran das liegt und wie ich diese Meldung abstellen kann? firmware der HC2 ist 4.540
--[[
%% autostart
%% properties
%% globals
--]]
local minSonAuf = '00' -- Vohrzeichen - + min. wo die Sonne Frueher auf geht... SonnenAufgang.
local minSonUnt = '00' -- Vohrzeichen - + min. wo die Sonne Spaeter unter geht... SonnenUntergang.
local zeitFruehstensAuf = '06:00' --Fruehstens wenn die Sonne auf geht.
local zeitSpaetestensAuf = '08:00' --Spaetestens wenn die Sonne auf geht.
local zeitMaxUntergang = '23:00' --Spaetestens wenn die Sonne unter geht.
local startSunLux = 20000; -- über 22.000 Lux für zu
local startSunTemp = 25; -- min 22 Grad damit Sonnenschutz
local startSunDelay = 5; -- 5 Min bis zu
local endSunLux = 7000; -- unter 7.000 Lux für auf
local endSunDelay = 20; -- 10 Min bis auf
local luxSensor = 67 -- Helichkeits sensor.
local tempSensor = 379 -- Temperatursensor
local rebootSceneID = 207 -- ID der eigenen Scene die rebotet wird.
local meldungenDebug = 0 -- hilfs vareable um die meldungen nicht an dauernd zu wiederholen.
local rs_living_1 = 152;
local rs_living_2 = 150;
local rs_living_3 = 154;
local rs_living_4 = 175;
local rs_kueche_1 = 181;
local rs_hwr_1 = 183;
local rs_bad_1 = 185;
local doorID1 = 22;
local doorID2 = 26;
local doorID3 = 30;
local maxID = 2000
-----------------------------------------------------------------------------------------
debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
--#######################################################################################
local sourceTrigger = fibaro:getSourceTrigger();
function sceneReboot()
local currentDate = os.date("*t");
if ((currentDate.hour == 2) and (currentDate.min >= 0)and (currentDate.min < 1))
or sourceTrigger["type"] == "other" then
debug('salmon',"Neustart der Scene!")
fibaro:sleep(1*60*1000)
fibaro:startScene(rebootSceneID);
end
setTimeout(sceneReboot, 1*60*1000)
end
--#######################################################################################
debug('gold', ""..fibaro:getValue(1,'sunriseHour').." ... echte SonnenAufgang")
--debug('steelblue', ""..minSonAuf.." min... Aufgesetzte zeit in minuten bis Sonnen Aufgang.")
local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
local VersetzteSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
--debug('yellow',""..VersetzteSonnenAufgang.." Versetzte.... SonnenAufgang")
----------------------------------------------------------------------------------------
debug('orangered',""..fibaro:getValue(1,'sunsetHour').. " ... echte SonnenUntergang")
--debug('steelblue', ""..minSonUnt.." min... Aufgesetzte zeit in minuten bis Sonnen Untergang.")
local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
local VersetzteSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
--debug('orangered',""..VersetzteSonnenUntergang.." Versetzte... SonnenUntergang")
--########################################################################################
if VersetzteSonnenAufgang > zeitFruehstensAuf and VersetzteSonnenAufgang < zeitSpaetestensAuf then
debug('yellow',"Die Rollos werden um "..VersetzteSonnenAufgang.. " auf gehen.")
elseif VersetzteSonnenAufgang < zeitFruehstensAuf then
debug('yellow',"Die Rollos werden um "..zeitFruehstensAuf.. " auf gehen.")
elseif VersetzteSonnenAufgang > zeitSpaetestensAuf then
debug('yellow',"Die Rollos werden um "..zeitSpaetestensAuf.. " auf gehen.")
end
--------------------------------------------------------------------------------------------
if VersetzteSonnenUntergang > zeitMaxUntergang then
debug('steelblue',"Die Rollos werden um "..zeitMaxUntergang.. " unter gehen.")
else
debug('steelblue',"Die Rollos werden um "..VersetzteSonnenUntergang.. " runter gehen.")
end
--#########################################################################################
debug('darkgreen',"Rollershutter-Controller startet das erste mal!");
function rollerShutter()
----------------------------------------------------------------------------------------
local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
local VersetzteSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
----------------------------------------------------------------------------------------
local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
local VersetzteSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
----------------------------------------------------------------------------------------
local currentDate = os.date('*t');
local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
local SonnenSchutz = tonumber(fibaro:getGlobalValue('SonnenSchutz'));
----------------------------------------------------------------------------------------
local version = '4.3';
local currentDate = os.date('*t');
local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
local random = math.random(27); --Zufallswert von 0-45min
local min = math.floor((random*100)/60);
----------------------------------------------------------------------------------------
-----------------------------Random Sonnenuntergang-------------------------------------
local randomzu = math.random(5,18); --Zufallswert zwischen 15min (9) und 60min (36)
local minzu = math.floor((randomzu*100)/60);
--debug('darkgreen',"Waiting " .. minzu .. " min bis Rollläden schließen");
--debug('darkgreen',"Waiting " .. min .. " min bis Rollläden öffnen");
------------------------------------------------------------------------------------------
---################# SonnenSchutz... rollos runter fahren !! #########################---
------------------------------------------------------------------------------------------
if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
and ( tonumber(fibaro:getValue(tempSensor, "value")) > startSunTemp )
and (os.date("%H:%M", os.time()) > VersetzteSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzteSonnenUntergang)
and (tonumber(SonnenSchutz) == 0)
then
fibaro:setGlobal('SunFirstMaxTimeLux', '1');
local gSunFirstMaxTimeLux = fibaro:getGlobalModificationTime('SunFirstMaxTimeLux')
if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
and ((os.time() - gSunFirstMaxTimeLux) >= startSunDelay*60)
then
---------------- Rollos eintragen ----------------------------------------
fibaro:call(rs_living_1, "setValue", "35")
fibaro:call(rs_living_2, "setValue", "70");
fibaro:call(rs_living_3, "setValue", "35");
--fibaro:call(rs_living_4, "setValue", "70");
---------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Lux ... Die Rollos fahren auf Sonnenschutz')
debug('greenyellow', fibaro:getValue(tempSensor, "value")..' Temp ... Die Rollos fahren auf')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '1'); --SonnenSchutz wurde gesetzt.
fibaro:setGlobal('RolloUnten0Oben1', '0');
meldungenDebug = 0
elseif meldungenDebug == 0 then
debug('lightsteelblue','Die Rollos bleiben oben... es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux und '..startSunDelay..' min bis die Rollos auf Sonnenschutz fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
end
------------------------------------------------------------------------------------------
---################# SonnenSchutz... rollos rauf fahren !! ###########################---
------------------------------------------------------------------------------------------
elseif ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
and (os.date("%H:%M", os.time()) > VersetzteSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzteSonnenUntergang)
and (tonumber(SonnenSchutz) == 1)
then
fibaro:setGlobal('SunFirstMinTimeLux', '1');
local gSunFirstMinTimeLux = fibaro:getGlobalModificationTime('SunFirstMinTimeLux')
if ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
and ((os.time() - gSunFirstMinTimeLux) >= endSunDelay*60)
then
---------------- Rollos eintragen --------------------------------------------------
fibaro:call(rs_living_1, 'open');
fibaro:call(rs_living_2, 'open');
fibaro:call(rs_living_3, 'open');
--fibaro:call(rs_living_4, 'open');
--------------------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Die Rollos fahren rauf!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('RolloUnten0Oben1', '1');
meldungenDebug = 0
elseif meldungenDebug == 0 then
debug('lightsteelblue','Rollos bleiben auf Sonnenschutz es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie odas ueber ihm.
end
------------------------------------------------------------------------------------------
---################# SonnenAufgang !! ###############################################--
------------------------------------------------------------------------------------------
elseif (
(
(VersetzteSonnenAufgang > zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzteSonnenAufgang)
or ( VersetzteSonnenAufgang < zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
or ( VersetzteSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
)
--and tonumber(fibaro:getValue(tempSensor, "value")) > 0
and (tonumber(rollershutter_runs) == 0)
)
then
debug('darkkhaki',"--------------------------------------------------------------");
debug('darkkhaki',"Rollershutter-Controller gestartet (Ver." .. version .. ")");
debug('darkkhaki', fibaro:getValue(tempSensor, "value")..' Grad Außentemperatur ');
fibaro:setGlobal('rollershutter_runs', '1');
fibaro:debug('Sonnenaufgang... öffne Rollos');
fibaro:debug('Waiting ' .. min .. ' min bis Rollläden öffnen');
fibaro:sleep(random*100000);
fibaro:call(rs_living_1, 'open');
fibaro:call(rs_living_2, 'open');
fibaro:call(rs_living_3, 'open');
fibaro:call(rs_living_4, 'open');
fibaro:call(rs_kueche_1, 'open');
fibaro:call(rs_hwr_1, 'open');
fibaro:call(rs_bad_1, 'open');
debug('yellow',"Rollos wurden geoefnet.");
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('RolloUnten0Oben1', '1');
if (os.date("%H:%M", os.time()) >= VersetzteSonnenAufgang) then
debug('coral',"Es ist Tag");
end
-----------------------------------------------------------------------------------------
---################ SonnenUntergang !! ###########################################---
-----------------------------------------------------------------------------------------
elseif (
(
(VersetzteSonnenUntergang < zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzteSonnenUntergang)
or (VersetzteSonnenUntergang > zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang)
)
--and tonumber(fibaro:getValue(tempSensor, "value")) > 0
and (tonumber(rollershutter_runs) == 0)
)
then
debug('darkkhaki',"--------------------------------------------------------------");
debug('darkkhaki',"Rollershutter-Controller hat gestartet (Ver." .. version .. ")");
debug('darkkhaki', fibaro:getValue(tempSensor, "value")..' Grad Außentemperatur ');
fibaro:setGlobal('rollershutter_runs', '1');
fibaro:debug('Sonnenunter... schließe Rollos');
fibaro:debug('Waiting ' .. minzu .. ' min bis Rollläden schließen');
fibaro:sleep(randomzu*100000);
------ID für close ohne prüfung eines offenen Fensters------------
fibaro:call(rs_living_4, 'close')
fibaro:call(rs_kueche_1, 'close');
fibaro:call(rs_hwr_1, 'close');
fibaro:call(rs_bad_1, 'close');
-----------------------------------------------------------
while
(tonumber(fibaro:getValue(doorID1, 'value')) > 0) do
fibaro:sleep(10*1000)
end
fibaro:call(rs_living_1, "setValue", "50");
debug('royalblue',"Rollos Südseite links zu 50% geschlossen.");
while
(tonumber(fibaro:getValue(doorID3, 'value')) > 0) do
fibaro:sleep(10*1000) --Warte 10s
end
fibaro:call(rs_living_3, "setValue", "50");
debug('royalblue',"Rollos Südseite rechts zu 50% geschlossen.");
while
(tonumber(fibaro:getValue(doorID2, 'value')) > 0) do
fibaro:sleep(10*1000) --Warte 10s
end
fibaro:call(rs_living_2, "setValue", "50");
debug('royalblue',"Rollos Südseite mitte zu 50% geschlossen.");
fibaro:sleep(60*60*1000) --Warte 20min
while
(tonumber(fibaro:getValue(doorID1, 'value')) > 0) or
(tonumber(fibaro:getValue(doorID2, 'value')) > 0) or
(tonumber(fibaro:getValue(doorID3, 'value')) > 0) do
fibaro:sleep(10*1000)
end
fibaro:sleep(20*1000)
fibaro:call(rs_living_1, 'close');
fibaro:call(rs_living_2, 'close');
fibaro:call(rs_living_3, 'close');
debug('royalblue',"alle Rollos Südseite geschlossen.");
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0');
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('RolloUnten0Oben1', '0');
if (os.date("%H:%M", os.time()) >= VersetzteSonnenUntergang) then
debug('royalblue',"Es ist Nacht");
end
end
---#######################################################################################
setTimeout(rollerShutter, 60*1000);
end
--########################################################################################
if (sourceTrigger['type'] == 'autostart') then
rollerShutter();
sceneReboot();
elseif (sourceTrigger['type'] == 'property') then
fibaro:debug('Source device = ' .. sourceTrigger['deviceID'])
elseif (sourceTrigger['type'] == 'global') then
fibaro:debug('Global variable source = ' .. sourceTrigger['name'])
elseif (sourceTrigger['type'] == 'other') then
---------------- Rollos eintragen ----------------------------------------
if(os.date("%H:%M", os.time()) > VersetzteSonnenAufgang)
and(os.date("%H:%M", os.time()) < VersetzteSonnenUntergang) then
fibaro:call(rs_living_1, 'open');
fibaro:call(rs_living_2, 'open');
fibaro:call(rs_living_3, 'open');
fibaro:call(rs_living_4, 'open');
fibaro:call(rs_kueche_1, 'open');
fibaro:call(rs_hwr_1, 'open');
fibaro:call(rs_bad_1, 'open');
debug('coral',' Die Rollos fahren in grundstellung!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('RolloUnten0Oben1', '1');
else
debug('royalblue',' Es ist Nacht!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
end
---------------------------------------------------------------------------
fibaro:debug('Other source.')
end
--###########################################################################################
vielen Dank für die Hilfe
Ich hatte diese Fehlermeldung mal mit einer älteren Version des Skripts. Ursache damals war, dass nicht alle globalen Variablen, die das Skript braucht korrekt angelegt waren.
Überprüfe mal in der Web-Oberfläche unter Steuerungen/Variablensteuerung ob die Variable rollershutter_runs dort korrekt angelegt ist.
Falls sie dort nicht angelegt ist, musst du sie neu definieren.
Falls sie dort aber korrekt auftaucht, würde ich mal das Home Center rebooten und hoffen, dass es nur ein vorübergehendes, intermittierendes Problem ist.
Hallo Mickey,
vielen Dank für die schnelle Antwort. Die Variablen sind alle angelegt, ich konnte hier keinen Fehler feststellen.
Hallo Leute,
seit neustem (ca. 1 Monat) habe ich das Problem das mein aufgebohrtes Script nicht mehr das macht was es soll. Z.B. Rolläden öffnen, oder schließen. Meine Tür/Rolladensteuerung will irgendwie auch nicht mehr wie sie soll. Beim Einrichten geht alles und nach paar Stunden erkennt das Script entweder erst nach > 10 min das die Türen geöffnet wurden oder gar nicht. Vielleicht könnt ihr mir weiterhelfen… bin mittlerweile ratlos.
--[[
%% autostart
%% properties
%% globals
--]]
-- Bisherige Hauptarbeiten an dem Skript: http://www.Siio.de, boomx, parip69 und thebrain. Kleine Modifikationen von alando22
-- Version 2.3
-- Dieses Skript realisiert eine Rolladen-Steuerung zum Sonnenaufgang und - untergang mit Verzögerungszeiten und einer
-- Temperaturschwelle, die zum schließen der Rolläden unterschritten werden muss.
-- Zusätzlich ist eine zufällige Verzögerung von 1-30 Minuten eingebaut, um die Aktivitäten nicht nachvollziehbar zu machen.
-- Zudem ist ein Sonnenschutz über einen Helligkeitssensor integriert. Eine Prüfung ggf. offener Türen ist ebenfalls enthalten.
-- Bei morgendlichen Öffnen wird zwischen Werktagen und Wochenenden & Feiertagen unterschieden.
-- Wochentags wird nach Sonnenaufgang geöffnet, am Wochenende & an Feiertagen zu fester Uhrzeit.
-- Dazu ist das Skript "Variable für Feiertage" von https://www.siio.de/board/thema/variable-fuer-feiertage/#post-42440 notwendig.
-- Ohne Verwendung des Feiertagsscripts bitte die Zeile 89 auskommentieren!!!
-- Notwendige globale Variablen (vorher anlegen!):
--
-- SunFirstMaxTimeLux Startwert = 0 (Interne Zeitvariable)
-- SunOstMaxTimeLux Startwert = 0
-- SunWestMaxTimeLux Startwert = 0
-- SunFirstMinTimeLux Startwert = 0 (Interne Zeitvariable)
-- SunOstMinTimeLux Startwert = 0
-- SunWestMinTimeLux Startwert = 0
-- SonnenSchutz Startwert = 0 (Variable gibt an, ob der Sonnenschutz aktiv '1' oder inaktiv '0' ist)
-- SonnenSchutzOst Startwert = 0
-- SonnenSchutzWest Startwert = 0
-- RolloUnten0Oben1 Startwert = 1 (Variable gibt an, ob Rolladen unten '0' oder oben '1' ist)
-- Door1Op1Cl0 Startwert = 0
-- Door2Op1Cl0 Startwert = 0
--#####################################################################################################################
local minSonAuf = '15' -- Verzögerungszeit in Minuten zum öffnen der Rolläden bei Sonnenaufgang.
local minSonUnt = '0' -- Verzögerungszeit in Minuten zum schließen der Rolläden bei Sonnenuntergang.
local zeitFruehstensAuf = '07:00' -- Zeitpunkt ab dem die Rolläden frühestens öffnen (Nicht am WE & Feiertag).
local zeitSpaetestensAuf = '09:00' -- Spätester Zeitpunkt, an dem die Rolläden öffnen.
local zeitWeFtAuf = '09:30' -- Zeitpunkt, an dem am Wochenende und an Feiertagen die Rolläden öffnen (fixer Zeitpunkt)
local zeitMaxUntergang = '22:30' -- Spätester Zeitpunkt, an dem die Rolläden schließen
local maxTempStart = 40 -- Temperatur unterhalb der die Rolladen abends schließen sollen
local Deliahaufstehen = '07:30' -- Deliah Aufstehzeit
local zeitDeliah = '18:30' -- Deliah Schlafenszeit
local startSunLux = 17000 -- über 5.000 Lux für zu
local startSunLuxOst = 17000
local startSunLuxWest = 17000
local startSunDelay = 10 -- 5 Min bis zu
local endSunLux = 10000 -- unter 1.000 Lux für auf
local endSunLuxOst = 10000
local endSunLuxWest = 10000
local endSunDelay = 30 -- 20 Min bis auf
local sunProtectPosition = 25 -- Sonnenschutzposition für Rolladen
local sunProtectPosition1 = 0 -- Sonnenschutzposition für Raffstores
local sunProtectLamella = 60 -- Sonnenschutzposition Lamellen
local sunProtectTempMin = 10 -- Grenztemperatur, überhalb derer der Sonnenschutz aktiviert werden soll
local sunDownLamella = 0 -- Lamellenposition Sonnenuntergang
local sunUpLamella = 100 -- Lamellenposition Sonnenaufgang
local luxSensor = 292 -- ID des Helligkeitssensors
local luxSensorOst = 364
local luxSensorWest = 370
local tempSensor = 192 -- ID des Temperatursensors (Außentemperatur)
local rebootSceneID = 15 -- ID der eigenen Scene die rebootet wird.
local meldungenDebug = 0 -- Hilfsvariable um die Meldungen nicht andauernd zu wiederholen.
local rs_wohnraum1 = 83 -- Wohnzimmer Raffst.
local rs_wohnraum2 = 230 -- Terrasse Raffst.
local rs_wohnraum3 = 89 -- Esszimmer Raffst.
local rs_wohnraum4 = 80 -- Esszimmer Fenster
local rs_kueche1 = 127 -- Küchenfenster
local rs_kinderzimmer1 = 113 -- Kinderzimmer Deliah Fenster
local rs_kinderzimmer2 = 116 -- Kinderzimmer Deliah Balkon
local rs_kinderzimmer3 = 319 -- Kinderzimmer 2 Fenster
local rs_kinderzimmer4 = 322 -- Kinderzimmer 2 Balkon
local rs_bad1 = 95 -- Bad Dusche
local rs_bad2 = 92 -- Bad Toilette
local rs_schlafzimmer1 = 98 -- Schlafzimmer Fenster
local rs_schlafzimmer2 = 101 -- Schlafzimmer Großes Fenster
local doorID1 = 378 -- ID des Türkontakts Terrasse
local doorID2 = 375 -- ID des Türkontakts Esszimmer
-------------------------------------------------------------------------------------------------------------------------
--################################ ab hier nichts mehr ändern! ##########################################################
-------------------------------------------------------------------------------------------------------------------------
debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
--#######################################################################################
local sourceTrigger = fibaro:getSourceTrigger();
function sceneReboot()
local currentDate = os.date("*t")
if ((currentDate.hour == 2) and (currentDate.min >= 0)and (currentDate.min < 1))
or sourceTrigger["type"] == "other" then
debug('salmon',"Neustart der Szene!")
fibaro:sleep(1*30*1000)
fibaro:startScene(rebootSceneID);
end
setTimeout(sceneReboot, 1*30*1000)
end
--########## Berechnung versetzter Sonnenaufgang und versetzter Sonnenuntergang ############
debug('gold', ""..fibaro:getValue(1,'sunriseHour').." ... Sonnenaufgang")
debug('steelblue', ""..minSonAuf.." min... Zeitverzögerung zum Sonnenaufgang.")
local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
debug('yellow',""..VersetzterSonnenAufgang.." Öffnen der Rolladen.")
----------------------------------------------------------------------------------------
debug('orangered',""..fibaro:getValue(1,'sunsetHour').. " ... SonnenUntergang")
debug('steelblue', ""..minSonUnt.." min. Zeitverzögerung Sonnenuntergang.")
local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
debug('orangered',""..VersetzterSonnenUntergang..' schließen der Rolladen sofern die Temperatur '..maxTempStart..' °C unterschreitet')
--################### Feststellung ob Wochenende oder Feiertag ##################
local Feiertag_heute = tonumber(fibaro:getGlobalValue("Feiertag_heute")) -- Diese Zeile auskommentieren, wenn kein Feiertagsscript genutzt wird
local currentDate = os.date("*t")
local werktag = 1
--############ Prüfung wann Rolladen tatsächlich öffnen werden ########################
if werktag == 0 then
debug ('yellow', "Die Rolladen werden um "..zeitWeFtAuf.." öffnen.")
elseif
VersetzterSonnenAufgang > zeitFruehstensAuf and VersetzterSonnenAufgang < zeitSpaetestensAuf then
debug('yellow',"Die Rolladen werden um "..VersetzterSonnenAufgang.. " zuzüglich einer zufälligen Verzögerung öffnen.")
elseif VersetzterSonnenAufgang < zeitFruehstensAuf then
debug('yellow',"Die Rolladen werden um "..zeitFruehstensAuf.. " zuzüglich einer zufälligen Verzögerung öffnen.")
elseif VersetzterSonnenAufgang > zeitSpaetestensAuf then
debug('yellow',"Die Rolladen werden um "..zeitSpaetestensAuf.. " zuzüglich einer zufälligen Verzögerung öffnen.")
end
--------------------------------------------------------------------------------------------
if VersetzterSonnenUntergang > zeitMaxUntergang then
debug('steelblue',"Die Rolladen werden um "..zeitMaxUntergang.. ' zuzüglich einer zufälligen Verzögerung geschlossen, sofern die Temperatur '..maxTempStart..' °C unterschreitet.')
else
debug('steelblue',"Die Rolladen werden um "..VersetzterSonnenUntergang.. ' zuzüglich einer zufälligen Verzögerung geschlossen, sofern die Temperatur '..maxTempStart..' °C unterschreitet.')
end
--#########################################################################################
debug('darkgreen',"Rolladen-Controller startet das erste mal!");
function rollerShutter()
--######## Berechnung der Variablen ########
local a, b = fibaro:getValue(1,'sunriseHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenAufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
---------------------------------------------------------------------------------------
local a, b = fibaro:getValue(1,'sunsetHour'):match("([^,]+):([^,]+)")
local VersetzterSonnenUntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
----------------------------------------------------------------------------------------
local currentDate = os.date('*t');
local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
local SonnenSchutz = tonumber(fibaro:getGlobalValue('SonnenSchutz'));
local SonnenSchutzOst = tonumber(fibaro:getGlobalValue('SonnenSchutzOst'));
local SonnenSchutzWest = tonumber(fibaro:getGlobalValue('SonnenSchutzWest'));
local TerrRaffOp0Sun1Cl2 = tonumber(fibaro:getGlobalValue('TerrRaffOp0Sun1Cl2'));
local RolloDeliahU0O1 = tonumber(fibaro:getGlobalValue('RolloDeliahU0O1'));
----------------------------------------------------------------------------------------
local version = '2.3';
local currentDate = os.date('*t');
local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
local random = math.random(18); -- Hier wird die zufällige Verzögerung beeinflusst.
local min = math.floor((random*100)/60);
--------------------------------------------------------------------------------------------
if ((Feiertag_heute == 1 or currentDate.wday == 7 or currentDate.wday == 1))
then
werktag = 0
--debug('grey', "Heute ist Wochenende oder ein Feiertag.")
else
werktag = 1
--debug('grey', "Heute ist ein Werktag und kein Feiertag.")
end
------------------------------------------------------------------------------------------
---################# SonnenSchutz... Rolladen runterfahren !! #########################---
------------------------------------------------------------------------------------------
if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
and sunProtectTempMin <= tonumber(fibaro:getValue(tempSensor, "value"))
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SonnenSchutz) == 0)
then
fibaro:setGlobal('SunFirstMaxTimeLux', '1');
local gSunFirstMaxTimeLux = fibaro:getGlobalModificationTime('SunFirstMaxTimeLux')
if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
and ((os.time() - gSunFirstMaxTimeLux) >= startSunDelay*60)
then
---------------- Rolladen eintragen ------------------
fibaro:call(rs_wohnraum1, "setValue", sunProtectPosition1); --Fenster Wohnzimmer Raffst.
fibaro:call(rs_wohnraum1, "setValue2", sunProtectLamella); --Lamellen
if (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
then
fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1); --Fenster Esszimmer Raffst.
fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); --Lamellen
fibaro:setGlobal('Door1Op1Cl0', '1');
elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
then
fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1); --Fenster Terrasse Raffst.
fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); --Lamellen
fibaro:setGlobal('Door2Op1Cl0', '1');
elseif (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
then
fibaro:setGlobal('Door1Op1Cl0', '1');
fibaro:setGlobal('Door2Op1Cl0', '1');
elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
then
fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1); --Fenster Terrasse Raffst.
fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); --Lamellen
fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1); --Fenster Esstimmer Raffst.
fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); --Lamellen
fibaro:setGlobal('Door1Op1Cl0', '0');
fibaro:setGlobal('Door2Op1Cl0', '0');
end
if (os.date("%H:%M", os.time()) < zeitDeliah)
then
fibaro:call(rs_kinderzimmer1, "setValue", sunProtectPosition); --Fenster Kinderzimmer Deliah
end
fibaro:call(rs_schlafzimmer2, "setValue", sunProtectPosition); --Fenster Schlafzimmer Groß
---------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Lux ... Die Rolladen im Sueden fahren auf ' ..sunProtectPosition..'%!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '1'); --SonnenSchutz wurde gesetzt.
fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '1');
meldungenDebug = 0
elseif meldungenDebug == 0
then
debug('lightsteelblue','Die Rolladen im Sueden bleiben oben... es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux und '..startSunDelay..' min bis die Rollos auf ' ..sunProtectPosition..'% fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
end
------------------------------------------------------------------------------------------
---################# SonnenSchutzOst... Rolladen runterfahren !! #########################---
------------------------------------------------------------------------------------------
elseif ( tonumber(fibaro:getValue(luxSensorOst, "value")) > startSunLuxOst ) and sunProtectTempMin <= tonumber(fibaro:getValue(tempSensor, "value"))
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang) and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SonnenSchutzOst) == 0)
then
fibaro:setGlobal('SunOstMaxTimeLux', '1');
local gSunOstMaxTimeLux = fibaro:getGlobalModificationTime('SunOstMaxTimeLux')
if ( tonumber(fibaro:getValue(luxSensorOst, "value")) > startSunLuxOst )
and ((os.time() - gSunOstMaxTimeLux) >= startSunDelay*60)
then
---------------- Rolladen eintragen ----------------------------------------
fibaro:call(rs_wohnraum4, "setValue", sunProtectPosition); --Fenster Esszimmer
fibaro:call(rs_kueche1, "setValue", sunProtectPosition); --Fenster Küche
fibaro:call(rs_bad2, "setValue", sunProtectPosition); --Fenster Bad Toilette
fibaro:call(rs_schlafzimmer2, "setValue", sunProtectPosition); --Fenster Schlafzimmer Groß
-----------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensorOst, "value")..' Lux ... Die Rolladen im Osten fahren auf ' ..sunProtectPosition..'%!!!')
fibaro:setGlobal('SunOstMaxTimeLux', '0');
fibaro:setGlobal('SunOstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutzOst', '1'); --SonnenSchutzOst wurde gesetzt.
--fibaro:setGlobal('RolloUnten0Oben1', '0');
meldungenDebug = 0
elseif meldungenDebug == 0
then
debug('lightsteelblue','Die Rolladen im Osten bleiben oben... es sind ' ..fibaro:getValue(luxSensorOst, "value")..' Lux und '..startSunDelay..' min bis die Rollos auf ' ..sunProtectPosition..'% fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
end
------------------------------------------------------------------------------------------
---################# SonnenSchutzWest... Rolladen runterfahren !! #########################---
------------------------------------------------------------------------------------------
elseif ( tonumber(fibaro:getValue(luxSensorWest, "value")) > startSunLuxWest )
and sunProtectTempMin <= tonumber(fibaro:getValue(tempSensor, "value"))
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SonnenSchutzWest) == 0)
then
fibaro:setGlobal('SunWestMaxTimeLux', '1');
local gSunWestMaxTimeLux = fibaro:getGlobalModificationTime('SunWestMaxTimeLux')
if ( tonumber(fibaro:getValue(luxSensorWest, "value")) > startSunLuxWest )
and ((os.time() - gSunWestMaxTimeLux) >= startSunDelay*60)
then
---------------- Rolladen eintragen ----------------------------------------
if (os.date("%H:%M", os.time()) < zeitDeliah)
then
fibaro:call(rs_kinderzimmer2, "setValue", sunProtectPosition); --Fenster Kinderzimmer Deliah Balkon
end
fibaro:call(rs_kinderzimmer4, "setValue", sunProtectPosition); --Fenster Kinderzimmer 2 Balkon
---------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensorWest, "value")..' Lux ... Die Rolladen im Westen fahren auf ' ..sunProtectPosition..'%!!!')
fibaro:setGlobal('SunWestMaxTimeLux', '0');
fibaro:setGlobal('SunWestMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutzWest', '1'); --SonnenSchutzWest wurde gesetzt.
--fibaro:setGlobal('RolloUnten0Oben1', '0');
meldungenDebug = 0
elseif meldungenDebug == 0
then
debug('lightsteelblue','Die Rolladen im Westen bleiben oben... es sind ' ..fibaro:getValue(luxSensorWest, "value")..' Lux und '..startSunDelay..' min bis die Rollos auf ' ..sunProtectPosition..'% fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
end
------------------------------------------------------------------------------------------
---################# SonnenSchutz... Rolladen hochfahren !! ###########################---
------------------------------------------------------------------------------------------
elseif ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SonnenSchutz) == 1)
then
fibaro:setGlobal('SunFirstMinTimeLux', '1');
local gSunFirstMinTimeLux = fibaro:getGlobalModificationTime('SunFirstMinTimeLux')
if ( tonumber(fibaro:getValue(luxSensor, "value")) < endSunLux )
and ((os.time() - gSunFirstMinTimeLux) >= endSunDelay*60)
then
---------------- Rolladen eintragen --------------------------------------------------
fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum1, 'open'); --Fenster Wohnzimmer Raffst.
fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum2, 'open'); --Fenster Terrasse Raffst.
fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum3, 'open'); --Fenster Esszimmer Raffst.
fibaro:call(rs_schlafzimmer2, 'open'); --Fenster Schlafzimmer Groß
if (os.date("%H:%M", os.time()) < zeitDeliah)
then
fibaro:call(rs_kinderzimmer1, 'open'); --Fenster Kinderzimmer Deliah
end
--------------------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Die Rolladen im Sueden fahren hoch!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
--fibaro:setGlobal('RolloUnten0Oben1', '1');
fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');
meldungenDebug = 0
elseif meldungenDebug == 0
then
debug('lightsteelblue','Rollos im Sueden bleiben auf ' ..sunProtectPosition..' % ... es sind ' ..fibaro:getValue(luxSensor, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
end
------------------------------------------------------------------------------------------
---################# SonnenSchutzOst... Rolladen hochfahren !! ###########################---
------------------------------------------------------------------------------------------
elseif ( tonumber(fibaro:getValue(luxSensorOst, "value")) < endSunLuxOst )
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SonnenSchutzOst) == 1)
then
fibaro:setGlobal('SunOstMinTimeLux', '1');
local gSunOstMinTimeLux = fibaro:getGlobalModificationTime('SunOstMinTimeLux')
if ( tonumber(fibaro:getValue(luxSensorOst, "value")) < endSunLuxOst )
and ((os.time() - gSunOstMinTimeLux) >= endSunDelay*60)
then
---------------- Rolladen eintragen --------------------------------------------------
fibaro:call(rs_wohnraum4, 'open'); --Fenster Esszimmer
fibaro:call(rs_kueche1, 'open'); --Fenster Küche
fibaro:call(rs_bad2, 'open'); --Fenster Bad Toilette
fibaro:call(rs_schlafzimmer2, 'open'); --Fenster Schlafzimmer Groß
--------------------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensorOst, "value")..' Die Rolladen im Osten fahren hoch!!!')
fibaro:setGlobal('SunOstMaxTimeLux', '0');
fibaro:setGlobal('SunOstMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutzOst', '0'); --SonnenSchutzOst wurde entfernt.
--fibaro:setGlobal('RolloUnten0Oben1', '1');
meldungenDebug = 0
elseif meldungenDebug == 0
then
debug('lightsteelblue','Rollos im Osten bleiben auf ' ..sunProtectPosition..' % ... es sind ' ..fibaro:getValue(luxSensorOst, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
end
------------------------------------------------------------------------------------------
---################# SonnenSchutzWest... Rolladen hochfahren !! ###########################---
------------------------------------------------------------------------------------------
elseif ( tonumber(fibaro:getValue(luxSensorWest, "value")) < endSunLuxWest )
and (os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and (os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
and (tonumber(SonnenSchutzWest) == 1)
then
fibaro:setGlobal('SunWestMinTimeLux', '1');
local gSunWestMinTimeLux = fibaro:getGlobalModificationTime('SunWestMinTimeLux')
if ( tonumber(fibaro:getValue(luxSensorWest, "value")) < endSunLuxWest )
and ((os.time() - gSunWestMinTimeLux) >= endSunDelay*60)
then
---------------- Rolladen eintragen --------------------------------------------------
fibaro:call(rs_kinderzimmer4, 'open'); --Fenster Kinderzimmer 2 Balkon
if (os.date("%H:%M", os.time()) < zeitDeliah)
then
fibaro:call(rs_kinderzimmer2, 'open'); --Fenster Kinderzimmer Deliah Balkon
end
--------------------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensorWest, "value")..' Die Rolladen im Westen fahren hoch!!!')
fibaro:setGlobal('SunWestMaxTimeLux', '0');
fibaro:setGlobal('SunWestMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutzWest', '0'); --SonnenSchutzWest wurde entfernt.
--fibaro:setGlobal('RolloUnten0Oben1', '1');
meldungenDebug = 0
elseif meldungenDebug == 0
then
debug('lightsteelblue','Rollos im Westen bleiben auf ' ..sunProtectPosition..' % ... es sind ' ..fibaro:getValue(luxSensorWest, "value")..' Lux und '..endSunDelay..' min bis die Rollos rauf fahren.')
meldungenDebug = 1 --damit er nicht immer die gleiche meldung schreibt wie das ueber ihm.
end
------------------------------------------------------------------------------------------
---################# Sonnenaufgang Werktags!! ###############################################--
------------------------------------------------------------------------------------------
elseif werktag == 1 and ((VersetzterSonnenAufgang > zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzterSonnenAufgang)
or (VersetzterSonnenAufgang < zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
or (VersetzterSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
and (tonumber(rollershutter_runs) == 0))
then
debug('green', 'Werktag = '.. werktag)
debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutter_runs', '1');
debug('gold', 'Sonnenaufgang... öffne Rolladen');
debug('gold', 'Waiting ' .. min .. ' min');
fibaro:sleep(random*100000);
---------------- Rolladen eintragen --------------------------------------------------
fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum2, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum3, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum4, 'open');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_kueche1, 'open');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_bad1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad2, 'open');
fibaro:sleep(math.random(20000,60000));
--fibaro:call(rs_kinderzimmer1, 'open');
--fibaro:sleep(math.random(5000,10000));
--fibaro:call(rs_kinderzimmer2, 'open');
--fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_kinderzimmer3, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kinderzimmer4, 'open');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_schlafzimmer1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_schlafzimmer2, 'open');
fibaro:sleep(math.random(5000,10000));
--------------------------------------------------------------------------------------
debug('yellow',"Rolladen wurden geöffnet.");
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunOstMaxTimeLux', '0');
fibaro:setGlobal('SunWestMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SunOstMinTimeLux', '0');
fibaro:setGlobal('SunWestMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('SonnenSchutzOst', '0');
fibaro:setGlobal('SonnenSchutzWest', '0');
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('RolloUnten0Oben1', '1');
fibaro:setGlobal('RolloDeliahU0O1', '1');
fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');
if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang)
then
debug('coral',"Es ist Tag.");
end
------------------------------------------------------------------------------------------
---################# Sonnenaufgang Deliah!! ###################################--
------------------------------------------------------------------------------------------
elseif werktag == 1 and ((VersetzterSonnenAufgang > Deliahaufstehen and os.date("%H:%M", os.time()) == VersetzterSonnenAufgang)
or (VersetzterSonnenAufgang < Deliahaufstehen and os.date("%H:%M", os.time()) == Deliahaufstehen)
or (VersetzterSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
and (tonumber(rollershutter_runs) == 0))
then
debug('green', 'Werktag = '.. werktag)
debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutter_runs', '1');
debug('gold', 'Sonnenaufgang... öffne Rolladen');
debug('gold', 'Waiting ' .. min .. ' min');
fibaro:sleep(random*100000);
---------------- Rolladen eintragen --------------------------------------------------
fibaro:call(rs_kinderzimmer1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kinderzimmer2, 'open');
fibaro:sleep(math.random(20000,60000));
--------------------------------------------------------------------------------------
debug('yellow',"Deliah's Rolladen wurden geöffnet.");
--fibaro:setGlobal('SunFirstMaxTimeLux', '0');
--fibaro:setGlobal('SunOstMaxTimeLux', '0');
fibaro:setGlobal('SunWestMaxTimeLux', '0');
--fibaro:setGlobal('SunFirstMinTimeLux', '0');
--fibaro:setGlobal('SunOstMinTimeLux', '0');
fibaro:setGlobal('SunWestMinTimeLux', '0');
--fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
--fibaro:setGlobal('SonnenSchutzOst', '0');
fibaro:setGlobal('SonnenSchutzWest', '0');
fibaro:setGlobal('rollershutter_runs', '0');
--fibaro:setGlobal('RolloUnten0Oben1', '1');
fibaro:setGlobal('RolloDeliahU0O1', '1');
--fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');
if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang)
then
debug('coral',"Es ist Tag.");
end
------------------------------------------------------------------------------------------
---################# Sonnenaufgang Wochenende Erdgeschoss!! ###############################################--
------------------------------------------------------------------------------------------
elseif werktag == 0 and ((VersetzterSonnenAufgang > zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzterSonnenAufgang)
or (VersetzterSonnenAufgang < zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
or (VersetzterSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
and (tonumber(rollershutter_runs) == 0))
then
debug('green', 'Werktag = '.. werktag)
debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutter_runs', '1');
debug('gold', 'Sonnenaufgang... öffne Rolladen');
debug('gold', 'Waiting ' .. min .. ' min');
fibaro:sleep(random*100000);
---------------- Rolladen eintragen --------------------------------------------------
fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum2, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum3, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum4, 'open');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_kueche1, 'open');
fibaro:sleep(math.random(20000,60000));
--------------------------------------------------------------------------------------
debug('yellow',"Rolladen wurden geöffnet.");
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunOstMaxTimeLux', '0');
fibaro:setGlobal('SunWestMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SunOstMinTimeLux', '0');
fibaro:setGlobal('SunWestMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('SonnenSchutzOst', '0');
fibaro:setGlobal('SonnenSchutzWest', '0');
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');
fibaro:setGlobal('Door1Op1Cl0', '1');
fibaro:setGlobal('Door2Op1Cl0', '1');
if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang)
then
debug('coral',"Es ist Tag.");
end
------------------------------------------------------------------------------------------
---################# Sonnenaufgang Wochenende Obergeschoss!! ###################################--
------------------------------------------------------------------------------------------
elseif werktag == 0 and ((string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == zeitWeFtAuf)
and (tonumber(rollershutter_runs) == 0))
then
debug('green', 'Werktag = '.. werktag)
debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutter_runs', '1');
debug('yellow','Es ist '..zeitWeFtAuf..'Uhr, Öffne Rolladen');
---------------- Rolladen eintragen --------------------------------------------------
fibaro:call(rs_bad1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad2, 'open');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_kinderzimmer1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kinderzimmer2, 'open');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_kinderzimmer3, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kinderzimmer4, 'open');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_schlafzimmer1, 'open');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_schlafzimmer2, 'open');
fibaro:sleep(math.random(10000,20000));
--------------------------------------------------------------------------------------
debug('yellow',"Rolladen wurden geöffnet.");
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunOstMaxTimeLux', '0');
fibaro:setGlobal('SunWestMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SunOstMinTimeLux', '0');
fibaro:setGlobal('SunWestMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('SonnenSchutzOst', '0');
fibaro:setGlobal('SonnenSchutzWest', '0');
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('RolloUnten0Oben1', '1');
fibaro:setGlobal('RolloDeliahU0O1', '1');
if (os.date("%H:%M", os.time()) >= VersetzterSonnenAufgang)
then
debug('coral',"Es ist Tag.");
end
-----------------------------------------------------------------------------------------
---################ SonnenUntergang Deliah!! ###########################################---
-----------------------------------------------------------------------------------------
elseif (tonumber(fibaro:getValue(tempSensor, "value")) < maxTempStart
and (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == zeitDeliah)
and (tonumber(rollershutter_runs) == 0) and (tonumber(RolloDeliahU0O1) == 1))
then
debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutter_runs', '1');
debug('steelblue', 'Deliahs Schlafenszeit... schließe Rolladen sofern die Temperatur '..maxTempStart..' °C unterschreitet')
debug('steelblue', 'Die Temperatur beträgt '..tonumber(fibaro:getValue(tempSensor, "value"))..'°C.')
debug('steelblue', 'Die zufällige Verzögerung beträgt ' .. min .. ' min.');
---------------- Rolladen eintragen --------------------------------------------------
fibaro:call(rs_kinderzimmer1, "setValue", sunProtectPosition);
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kinderzimmer2, 'close');
--------------------------------------------------------------------------------------
debug('royalblue',"Deliahs Rolladen wurden geschlossen.");
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('RolloDeliahU0O1', '0');
-----------------------------------------------------------------------------------------
---################ SonnenUntergang !! ###########################################---
-----------------------------------------------------------------------------------------
elseif (tonumber(fibaro:getValue(tempSensor, "value")) < maxTempStart and tonumber(rollershutter_runs) == 0) and
((VersetzterSonnenUntergang < zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzterSonnenUntergang)
or (VersetzterSonnenUntergang > zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang))
then
debug('darkkhaki',"Rolladen-Controller ist gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutter_runs', '1');
debug('steelblue', 'Sonnenuntergang... schließe Rolladen sofern die Temperatur '..maxTempStart..' °C unterschreitet')
debug('steelblue', 'Die Temperatur beträgt '..tonumber(fibaro:getValue(tempSensor, "value"))..'°C.')
debug('steelblue', 'Die zufällige Verzögerung beträgt ' .. min .. ' min.');
fibaro:sleep(random*100000);
---------------- Rolladen eintragen --------------------------------------------------
fibaro:call(rs_wohnraum1, 'close');
fibaro:call(rs_wohnraum1, "setValue2", sunDownLamella);
fibaro:sleep(math.random(5000,10000));
if (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
then
fibaro:call(rs_wohnraum3, 'close');
fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
fibaro:setGlobal('Door1Op1Cl0', '1');
fibaro:sleep(math.random(5000,10000));
elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
then
fibaro:call(rs_wohnraum2, 'close');
fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
fibaro:setGlobal('Door2Op1Cl0', '1');
fibaro:sleep(math.random(5000,10000));
elseif(tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
then
fibaro:setGlobal('Door1Op1Cl0', '1');
fibaro:setGlobal('Door2Op1Cl0', '1');
fibaro:sleep(math.random(5000,10000));
elseif(tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
then
fibaro:call(rs_wohnraum2, 'close');
fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum3, 'close');
fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
fibaro:sleep(math.random(5000,10000));
fibaro:setGlobal('Door1Op1Cl0', '0');
fibaro:setGlobal('Door2Op1Cl0', '0');
end
fibaro:call(rs_wohnraum4, 'close');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_kueche1, 'close');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_bad1, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad2, 'close');
fibaro:sleep(math.random(20000,60000));
if (tonumber(RolloDeliahU0O1) == 1)
then
fibaro:call(rs_kinderzimmer1, "setValue", sunProtectPosition);
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kinderzimmer2, 'close');
fibaro:sleep(math.random(20000,60000));
debug('royalblue',"Rolladen von Deliah wurden geschlossen.");
fibaro:setGlobal('RolloDeliahU0O1', '0');
end
fibaro:call(rs_kinderzimmer3, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kinderzimmer4, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_schlafzimmer1, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_schlafzimmer2, "setValue", sunProtectPosition);
fibaro:sleep(math.random(10000,20000));
--------------------------------------------------------------------------------------
debug('royalblue',"Rolladen wurden geschlossen.");
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunOstMaxTimeLux', '0');
fibaro:setGlobal('SunWestMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SunOstMinTimeLux', '0');
fibaro:setGlobal('SunWestMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('SonnenSchutzOst', '0');
fibaro:setGlobal('SonnenSchutzWest', '0');
fibaro:setGlobal('rollershutter_runs', '0');
fibaro:setGlobal('RolloUnten0Oben1', '0');
fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '2');
if (os.date("%H:%M", os.time()) >= VersetzterSonnenUntergang)
then
debug('royalblue',"Es ist Nacht.");
end
-----------------------------------------------------------------------------------------
---################ Rolladen oeffnen wenn Tuer auf geht ###########################################---
-----------------------------------------------------------------------------------------
elseif (tonumber(rollershutter_runs) == 0) and (tonumber(TerrRaffOp0Sun1Cl2) > 0) and ((tonumber(fibaro:getValue(doorID1, "value")) > 0) or (tonumber(fibaro:getValue(doorID2, "value")) > 0))
then
if (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door1Op1Cl0) == 0)
then
fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum2, 'open');
fibaro:setGlobal('Door1Op1Cl0', '1');
fibaro:sleep(math.random(5000,10000));
elseif
(tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0) and (tonumber(Door2Op1Cl0) == 0)
then
fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum3, 'open');
fibaro:setGlobal('Door2Op1Cl0', '1');
fibaro:sleep(math.random(5000,10000));
elseif
(tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0) and (tonumber(Door1Op1Cl0) == 0) and (tonumber(Door2Op1Cl0) == 0)
then
fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum1, 'open');
fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum3, 'open');
fibaro:setGlobal('Door1Op1Cl0', '1');
fibaro:setGlobal('Door2Op1Cl0', '1');
fibaro:sleep(math.random(5000,10000));
end
-----------------------------------------------------------------------------------------
---################ Rolladen schließen nach schließen der Tueren Sonnenschutz ####################---
-----------------------------------------------------------------------------------------
elseif (tonumber(rollershutter_runs) == 0) and (tonumber(TerrRaffOp0Sun1Cl2) == 1) and ((tonumber(Door1Op1Cl0) == 1) or (tonumber(Door2Op1Cl0) == 1))
then
if (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door1Op1Cl0) == 1)
then
fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1); --Fenster Terrasse Raffst.
fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); --Lamellen
fibaro:setGlobal('Door1Op1Cl0', '0');
fibaro:sleep(math.random(5000,10000));
elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door2Op1Cl0) == 1)
then
fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1); --Fenster Esszimmer Raffst.
fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); --Lamellen
fibaro:setGlobal('Door2Op1Cl0', '0');
fibaro:sleep(math.random(5000,10000));
elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0) and (tonumber(Door1Op1Cl0) == 1)
then
fibaro:call(rs_wohnraum2, "setValue", sunProtectPosition1); --Fenster Terrasse Raffst.
fibaro:call(rs_wohnraum2, "setValue2", sunProtectLamella); --Lamellen
fibaro:setGlobal('Door1Op1Cl0', '0');
fibaro:sleep(math.random(5000,10000));
elseif (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door2Op1Cl0) == 1)
then
fibaro:call(rs_wohnraum3, "setValue", sunProtectPosition1); --Fenster Esszimmer Raffst.
fibaro:call(rs_wohnraum3, "setValue2", sunProtectLamella); --Lamellen
fibaro:setGlobal('Door2Op1Cl0', '0');
fibaro:sleep(math.random(5000,10000));
end
-----------------------------------------------------------------------------------------
---################ Rolladen schließen nach schließen der Tueren Nacht ####################---
-----------------------------------------------------------------------------------------
elseif (tonumber(TerrRaffOp0Sun1Cl2) == 2) and (tonumber(rollershutter_runs) == 0) and ((tonumber(Door1Op1Cl0) == 1) or (tonumber(Door2Op1Cl0) == 1))
then
if (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door1Op1Cl0) == 1)
then
fibaro:call(rs_wohnraum2, 'close');
fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
fibaro:setGlobal('Door1Op1Cl0', '0');
fibaro:sleep(math.random(5000,10000));
elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door2Op1Cl0) == 1)
then
fibaro:call(rs_wohnraum3, 'close');
fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
fibaro:setGlobal('Door2Op1Cl0', '0');
fibaro:sleep(math.random(5000,10000));
elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0) and (tonumber(Door1Op1Cl0) == 1)
then
fibaro:call(rs_wohnraum2, 'close');
fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
fibaro:setGlobal('Door1Op1Cl0', '0');
fibaro:sleep(math.random(5000,10000));
elseif (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0) and (tonumber(Door2Op1Cl0) == 1)
then
fibaro:call(rs_wohnraum3, 'close');
fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
fibaro:setGlobal('Door2Op1Cl0', '0');
fibaro:sleep(math.random(5000,10000));
end
end
---#######################################################################################
setTimeout(rollerShutter, 30*1000);
end
--########################################################################################
if (sourceTrigger['type'] == 'autostart')
then
rollerShutter();
sceneReboot();
elseif (sourceTrigger['type'] == 'property')
then
debug('orangered', 'Source device = ' .. sourceTrigger['deviceID'])
elseif (sourceTrigger['type'] == 'global')
then
debug('orangered', 'Global variable source = ' .. sourceTrigger['name'])
elseif (sourceTrigger['type'] == 'other')
then
---------------- Rolladen eintragen ----------------------------------------
if(os.date("%H:%M", os.time()) > VersetzterSonnenAufgang)
and(os.date("%H:%M", os.time()) < VersetzterSonnenUntergang)
then
fibaro:call(rs_wohnraum1, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum1, 'open'); --Fenster Wohnzimmer Raffst.
fibaro:call(rs_wohnraum2, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum2, 'open'); --Fenster Terrasse Raffst.
fibaro:call(rs_wohnraum3, "setValue2", sunUpLamella);
fibaro:call(rs_wohnraum3, 'open'); --Fenster Esszimmer Raffst.
fibaro:call(rs_wohnraum4, 'open'); --Fenster Esszimmer
fibaro:call(rs_kueche1, 'open'); --Fenster Küche
if (os.date("%H:%M", os.time()) < zeitDeliah)
then
fibaro:call(rs_kinderzimmer1, 'open'); --Fenster Kinderzimmer Deliah
fibaro:call(rs_kinderzimmer2, 'open'); --Fenster Kinderzimmer Deliah Balkon
fibaro:setGlobal('RolloDeliahU0O1', '1');
else
fibaro:setGlobal('RolloDeliahU0O1', '0');
end
fibaro:call(rs_kinderzimmer3, 'open'); --Fenster Kinderzimmer 2
fibaro:call(rs_kinderzimmer4, 'open'); --Fenster Kinderzimmer 2 Balkon
fibaro:call(rs_bad1, 'open'); --Fenster Bad Dusche
fibaro:call(rs_bad2, 'open'); --Fenster Bad Toilette
fibaro:call(rs_schlafzimmer1, 'open'); --Fenster Schlafzimmer
fibaro:call(rs_schlafzimmer2, 'open'); --Fenster Schlafzimmer Groß
--------------------------------------------------------------------------------------
debug('coral',' Die Rolladen fahren in Grundstellung!!!')
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunOstMaxTimeLux', '0');
fibaro:setGlobal('SunWestMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SunOstMinTimeLux', '0');
fibaro:setGlobal('SunWestMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('SonnenSchutzOst', '0');
fibaro:setGlobal('SonnenSchutzWest', '0');
fibaro:setGlobal('RolloUnten0Oben1', '1');
fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '0');
fibaro:setGlobal('Door1Op1Cl0', '0');
fibaro:setGlobal('Door2Op1Cl0', '0');
else
debug('royalblue',' Es ist Nacht.')
fibaro:call(rs_wohnraum1, 'close');
fibaro:call(rs_wohnraum1, "setValue2", sunDownLamella);
fibaro:sleep(math.random(5000,10000));
if (tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
then
fibaro:call(rs_wohnraum2, 'close');
fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
fibaro:setGlobal('Door1Op1Cl0', '1');
fibaro:sleep(math.random(5000,10000));
elseif (tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
then
fibaro:call(rs_wohnraum3, 'close');
fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
fibaro:setGlobal('Door2Op1Cl0', '1');
fibaro:sleep(math.random(5000,10000));
elseif(tonumber(fibaro:getValue(doorID1, "value")) > 0) and (tonumber(fibaro:getValue(doorID2, "value")) > 0)
then
fibaro:setGlobal('Door1Op1Cl0', '1');
fibaro:setGlobal('Door2Op1Cl0', '1');
fibaro:sleep(math.random(5000,10000));
elseif(tonumber(fibaro:getValue(doorID1, "value")) == 0) and (tonumber(fibaro:getValue(doorID2, "value")) == 0)
then
fibaro:call(rs_wohnraum2, 'close');
fibaro:call(rs_wohnraum2, "setValue2", sunDownLamella);
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_wohnraum3, 'close');
fibaro:call(rs_wohnraum3, "setValue2", sunDownLamella);
fibaro:sleep(math.random(5000,10000));
fibaro:setGlobal('Door1Op1Cl0', '0');
fibaro:setGlobal('Door2Op1Cl0', '0');
end
fibaro:call(rs_wohnraum4, 'close');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_kueche1, 'close');
fibaro:sleep(math.random(20000,60000));
fibaro:call(rs_bad1, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_bad2, 'close');
fibaro:sleep(math.random(20000,60000));
if (tonumber(RolloDeliahU0O1) == 1)
then
fibaro:call(rs_kinderzimmer1, "setValue", sunProtectPosition);
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kinderzimmer2, 'close');
fibaro:sleep(math.random(20000,60000));
debug('royalblue',"Rolladen von Deliah wurden geschlossen.");
fibaro:setGlobal('RolloDeliahU0O1', '0');
end
fibaro:call(rs_kinderzimmer3, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_kinderzimmer4, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_schlafzimmer1, 'close');
fibaro:sleep(math.random(5000,10000));
fibaro:call(rs_schlafzimmer2, "setValue", sunProtectPosition);
fibaro:sleep(math.random(10000,20000));
fibaro:setGlobal('SunFirstMaxTimeLux', '0');
fibaro:setGlobal('SunOstMaxTimeLux', '0');
fibaro:setGlobal('SunWestMaxTimeLux', '0');
fibaro:setGlobal('SunFirstMinTimeLux', '0');
fibaro:setGlobal('SunOstMinTimeLux', '0');
fibaro:setGlobal('SunWestMinTimeLux', '0');
fibaro:setGlobal('SonnenSchutz', '0'); --SonnenSchutz wurde entfernt.
fibaro:setGlobal('SonnenSchutzOst', '0');
fibaro:setGlobal('SonnenSchutzWest', '0');
fibaro:setGlobal('RolloUnten0Oben1', '0');
fibaro:setGlobal('TerrRaffOp0Sun1Cl2', '2');
end
---------------------------------------------------------------------------
debug('orangered', 'Other source.')
end
--###########################################################################################