Hallo
durch meine Gedankenexperimente konnte ich noch einen Fehler finden. Durch die aufgesetzte Zeit z.b. 20 minuten konnte ich mich nicht mehr mit der sunriseHour oder sunsetHour elegant zur zeitMaxAufgang öder zeitMaxUntergang nähern, allso habe ich noch diese Zeille und mit den operatoran gespielt.
(os.date("%H:%M", os.time()) == (zeitMaxAufgang ))
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 ((os.date("%H:%M", os.time()) >= (zeitMaxAufgang)and os.date("%H:%M", os.time()+min1*60) == fibaro:getValue(1, "sunriseHour"))
or (os.date("%H:%M", os.time()) <= (zeitMaxAufgang)and os.date("%H:%M", os.time()+min1*60) == fibaro:getValue(1, "sunriseHour"))
or (os.date("%H:%M", os.time()) == (zeitMaxAufgang ))))
and rollershutter_runs == 0)
then
Ich poste noch einmal den ganzen code.
--[[
%% autostart
%% properties
%% globals
--]]
-----------------------------------------------
local Sonnenaufgang = fibaro:getValue(1,'sunriseHour');
print(Sonnenaufgang, 'Sonnenaufgang')
local Sonnenuntergang = fibaro:getValue(1,'sunsetHour');
print (Sonnenuntergang, 'Sonnenuntergang')
local min1 = 20 -- Zeit in min. wo die Sonne Frueher auf geht... Sonnenaufgang.
local min2 = 60 -- Zeit in min. wo die Sonne Spaeter unter geht... Sonnenaufgang.
local zeitMaxAufgang = '06:00' --Fruestens wenn Sonne auf geht.
local zeitMaxUntergang = '22:00' --Spaetestens wenn Sonne unter geht.
print(min1,'Aufgesetzte zeit in minuten... Sonnen Aufgang.')
print(min2, 'Aufgesetzte zeit in minuten... Sonnen Untergang.')
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
local sourceTrigger = fibaro:getSourceTrigger();
local version = '2.0';
fibaro:debug('Rollershutter-Controller started for the first time (Ver.' .. version .. ')');
function rollershutter()
local version = '2.0';
local sunriseHour = fibaro:getValue(1,'sunriseHour');
local sunsetHour = fibaro:getValue(1,'sunsetHour');
local currentDate = os.date('*t');
local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
-----------------------------------------------------------------------------------------
---################# Hier 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 ((os.date("%H:%M", os.time()) >= (zeitMaxAufgang)and os.date("%H:%M", os.time()+min1*60) == fibaro:getValue(1, "sunriseHour"))
or (os.date("%H:%M", os.time()) <= (zeitMaxAufgang)and os.date("%H:%M", os.time()+min1*60) == fibaro:getValue(1, "sunriseHour"))
or (os.date("%H:%M", os.time()) == (zeitMaxAufgang ))))
and rollershutter_runs == 0)
then
fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
fibaro:setGlobal('rollershutter_runs', '1');
fibaro:debug('Sonnenaufgang... Opening rollershutters');
print('Sonnenaufgang '..sunriseHour)
fibaro:call(98, 'open');
fibaro:call(100, 'open');
fibaro:debug('Rollos wurden geoefnet.');
fibaro:setGlobal('rollershutter_runs', '0');
-----------------------------------------------------------------------------------
----------------- Hier 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 ((os.date("%H:%M", os.time()) <= (zeitMaxUntergang)and os.date("%H:%M", os.time()-min2*60) == fibaro:getValue(1, "sunsetHour"))
or (os.date("%H:%M", os.time()) >= (zeitMaxUntergang)and os.date("%H:%M", os.time()-min2*60) == fibaro:getValue(1, "sunsetHour"))
or (os.date("%H:%M", os.time()) == (zeitMaxUntergang))))
and rollershutter_runs == 0)
then
fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
fibaro:setGlobal('rollershutter_runs', '1');
fibaro:debug('Sonnenuntergang... Closing rollershutters');
print('Sonnenuntergang '..sunsetHour)
fibaro:call(98, 'close');
fibaro:call(100, 'close');
fibaro:debug('Rollos wurden geschlossen.');
fibaro:setGlobal('rollershutter_runs', '0');
end
---##############################################################################################
setTimeout(rollershutter, 60*1000);
end
if (sourceTrigger['type'] == 'autostart') then
rollershutter();
end
----------------------------------------------------------------------------------
----------- Wird geschaut ob tag oder nacht ist. ---------------------------------
----------------------------------------------------------------------------------
if (os.date("%H:%M", os.time()) > fibaro:getValue(1, "sunriseHour"))
and (os.date("%H:%M", os.time()) < fibaro:getValue(1, "sunsetHour")) then
print('Es ist Tag');
else
print('Es ist Nacht');
end
Bitte entschuldigt die Fehler aber ich habe Rollos erst seit Sonntag 5 Tage.