Hier nochmals was (nicht von mir), von “früher”!
--[[
%% autostart
%% properties
%% globals
--]]
local minSonAuf = '-30' -- Vohrzeichen - + min. wo die Sonne Frueher auf geht... SonnenAufgang.
local minSonUnt = '60' -- Vohrzeichen - + min. wo die Sonne Spaeter unter geht... SonnenUntergang.
local zeitFruehstensAuf = '06:00' --Fruehstens wenn die Sonne auf geht.
local zeitSpaetestensAuf = '07:00' --Spaetestens wenn die Sonne auf geht.
local zeitMaxUntergang = '23:00' --Spaetestens wenn die Sonne unter geht.
local rs_living_1 = 1613; --WZ
local rs_living_2 = 573; --KÜ
local rs_living_3 = 154;
local rs_living_4 = 579;
local rs_living_5 = 575;
local rs_living_6 = 590;
local rs_living_7 = 1477; --GZ groß
local rs_living_8 = 1099;
local rs_living_9 = 1219;
local rs_living_10 = 1626;
local doorID1 = 672; --WZ
local doorID2 = 675; --KÜ
---------------------------------------------------------------------------------
debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
local sourceTrigger = fibaro:getSourceTrigger();
local version = '2.0';
debug('darkgreen',"Rollershutter-Controller startet das erste mal (Ver." .. version .. ")");
---------------------------------------------------------------------------------------
function rollershutter()
local Sonnenaufgang = fibaro:getValue(1,'sunriseHour');
local string = Sonnenaufgang
local a, b = string:match("([^,]+):([^,]+)")
local VersetzteSonnenaufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
----------------------------------------------------------------------------------------
local Sonnenuntergang = fibaro:getValue(1,'sunsetHour');
local string = Sonnenuntergang
local a, b = string:match("([^,]+):([^,]+)")
local VersetzteSonnenuntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
----------------------------------------------------------------------------------------
local version = '2.0';
local currentDate = os.date('*t');
local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutterruns4'));
local random = math.random(30);
local min = math.floor((random*100)/60);
-----------------------------------------------------------------------------------------
---################# Sonnenaufgang !! ###############################################
-----------------------------------------------------------------------------------------
if ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7)
and (((VersetzteSonnenaufgang >= zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzteSonnenaufgang)
or (VersetzteSonnenaufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf))
or (VersetzteSonnenaufgang < zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf))
and rollershutter_runs == 0)
then
debug('darkkhaki',"Rollershutter-Controller hat gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutterruns4', '1');
fibaro:debug('Sonnenaufgang... öffne Rollos');
fibaro:debug('Waiting ' .. min .. ' min');
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_living_5, 'open');
fibaro:call(rs_living_6, 'open');
fibaro:call(rs_living_7, 'open');
fibaro:call(rs_living_8, 'open');
fibaro:call(rs_living_9, 'open');
debug('yellow',"Rollos wurden geoefnet.");
fibaro:setGlobal('rollershutterruns4', '0');
-----------------------------------------------------------------------------------------
---################ Sonnenuntergang !! ##########################################---
-----------------------------------------------------------------------------------------
elseif ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7)
and ((VersetzteSonnenuntergang <= zeitMaxUntergang and os.date("%H:%M", os.time()) == VersetzteSonnenuntergang)
or (VersetzteSonnenuntergang >= zeitMaxUntergang and os.date("%H:%M", os.time()) == zeitMaxUntergang))
and rollershutter_runs == 0)
then
debug('darkkhaki',"Rollershutter-Controller hat gestartet (Ver." .. version .. ")");
fibaro:setGlobal('rollershutterruns4', '1');
fibaro:debug('Sonnenunter... schließe Rollos');
fibaro:debug('Waiting ' .. min .. ' min');
fibaro:sleep(random*100000);
fibaro:call(rs_living_4, 'close')
fibaro:call(rs_living_5, 'close')
fibaro:call(rs_living_6, 'close')
fibaro:call(rs_living_7, 'close')
fibaro:call(rs_living_8, 'close')
fibaro:call(rs_living_9, 'close')
fibaro:call(rs_living_10, 'close')--ID für close ohne prüfung eines offenen Fensters
while
(tonumber(fibaro:getValue(doorID1, 'value')) > 0) do --prüft ob Fester offen, wenn ja wird fenster nicht geschlossen
fibaro:sleep(10*1000)
end
fibaro:call(rs_living_1, 'close');
while
(tonumber(fibaro:getValue(doorID2, 'value')) > 0) do --prüft ob Fester offen, wenn ja wird fenster nicht geschlossen
fibaro:sleep(10*1000)
end
fibaro:call(rs_living_2, 'close');
--while
--(tonumber(fibaro:getValue(doorID3, 'value')) > 0) do --prüft ob Fester offen, wenn ja wird fenster nicht geschlossen
--fibaro:sleep(10*1000)
--end
--fibaro:call(rs_living_3, 'close');
debug('royalblue',"Rollos wurden geschlossen.");
fibaro:setGlobal('rollershutterruns4', '0');
end
---#######################################################################################
setTimeout(rollershutter, 60*1000);
end
------------------------------------------------------------------------------------------
----######## Wird geschaut ob tag oder nacht ist. #####################################---
------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
local Sonnenaufgang = fibaro:getValue(1,'sunriseHour');
debug('gold', ""..Sonnenaufgang.." ... echte Sonnenaufgang")
debug('steelblue', ""..minSonAuf.." Aufgesetzte zeit in minuten... Sonnen Aufgang.")
local string = Sonnenaufgang
local a, b = string:match("([^,]+):([^,]+)")
local VersetzteSonnenaufgang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonAuf*60));
debug('yellow',""..VersetzteSonnenaufgang.." Versetzte.... Sonnenaufgang")
----------------------------------------------------------------------------------------
local Sonnenuntergang = fibaro:getValue(1,'sunsetHour');
debug('orangered',""..Sonnenuntergang.. " ... echte Sonnenuntergang")
debug('steelblue', ""..minSonUnt.." Aufgesetzte zeit in minuten... Sonnen Untergang.")
local string = Sonnenuntergang
local a, b = string:match("([^,]+):([^,]+)")
local VersetzteSonnenuntergang = os.date("%H:%M", -3600+ a*60*60 + (b*60+minSonUnt*60));
debug('red',""..VersetzteSonnenuntergang.." Versetzte... Sonnenuntergang")
----------------------------------------------------------------------------------------
if (os.date("%H:%M", os.time()) > VersetzteSonnenaufgang)
and (os.date("%H:%M", os.time()) < VersetzteSonnenuntergang) then
debug('coral',"Es ist Tag");
else
debug('royalblue',"Es ist Nacht");
end
---###############################################################################
if (sourceTrigger['type'] == 'autostart') then
rollershutter();
end