Hallo fische02
habe eine Grundstellung des Scriptes mit eingebaut … Die Variablen werden richtig setzen anhand der Rollos bei Tag oder bei Nacht.
Die Grundstellung wir mir dem Start Button erreicht oder Other source.
Mann kann jetzt zu jeder Uhrzeit das Script mit seinen Vareablen zurücksetzen.
Wichtig für den ersten start und einfach so wen mann es einmal oder säter mit einer fernbedienung rauf fahren möchte …
So müssen die Vareablen gesetzt sein für den start.
fibaro:setGlobal(‘SunFirstMaxTimeLux’, ‘0’);
fibaro:setGlobal(‘SunFirstMinTimeLux’, ‘0’);
fibaro:setGlobal(‘SonnenSchutz’, ‘0’); --SonnenSchutz wurde entfernt.
fibaro:setGlobal(‘RolloUnten0Oben1’, ‘1’); – diese Variable braucht mann nur für andre Spielereien.
--[[
%% autostart
%% properties
%% globals
--]]
local minSonAuf = '-25' -- Vohrzeichen - + min. wo die Sonne Frueher auf geht... SonnenAufgang.
local minSonUnt = '60' -- Vohrzeichen - + min. wo die Sonne Spaeter unter geht... SonnenUntergang.
local zeitFruehstensAuf = '05:00' --Fruehstens wenn die Sonne auf geht.
local zeitSpaetestensAuf = '07:00' --Spaetestens wenn die Sonne auf geht.
local zeitMaxUntergang = '22:00' --Spaetestens wenn die Sonne unter geht.
local startSunLux = 20000; -- über 20.000 Lux für zu
local startSunDelay = 5; -- 5 Min bis zu
local endSunLux = 7000; -- unter 10.000 Lux für auf
local endSunDelay = 20; -- 20 Min bis auf
local sunProtectPosition = 25; -- Sonnen schutz position für Rollos.
local luxSensor = 115 -- Helichkeits sensor Flur.
local rebootSceneID = 48 -- ID der eigenen Scene die rebotet wird.
local meldungenDebug = 0 -- hilfs vareable um die meldungen nicht an dauernd zu wiederholen.
-----------------------------------------------------------------------------------------
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.. " unter 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'));
------------------------------------------------------------------------------------------
---################# SonnenSutz... rollos runter fahren !! #########################---
------------------------------------------------------------------------------------------
if ( tonumber(fibaro:getValue(luxSensor, "value")) > startSunLux )
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(98, "setValue", sunProtectPosition+5); --Tuere Dachterasse.
fibaro:call(100, "setValue", sunProtectPosition);--FensterFlur obergeschoss zur
---------------------------------------------------------------------------
debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Lux ... Die Rollos 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 Rollos 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
------------------------------------------------------------------------------------------
---################# SonnenSutz... 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(98, 'open');
fibaro:call(100, '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 ' ..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 !! ###############################################--
------------------------------------------------------------------------------------------
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(rollershutter_runs) == 0))
then
debug('darkkhaki',"Rollershutter-Controller hat gestartet!");
fibaro:setGlobal('rollershutter_runs', '1');
fibaro:call(98, 'open');
fibaro:call(100, 'open');
fibaro:call(108, '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(rollershutter_runs) == 0))
then
debug('darkkhaki',"Rollershutter-Controller hat gestartet!");
fibaro:setGlobal('rollershutter_runs', '1');
fibaro:call(98, 'close');
fibaro:call(100, 'close');
fibaro:call(108, 'close');
debug('royalblue',"Rollos 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()) >= 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(98, 'open');
fibaro:call(100, '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
--###########################################################################################