Rollladen-Steuerung (Sonnenaufgang/-untergang)

Von heute auf Morgen funktioniert die Szene nicht mehr!?

--[[
%% autostart
%% properties
%% globals
--]]
 
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 temp = tonumber(fibaro:getValue(3, 'Temperature'));
   local rollershutter_runs = tonumber(fibaro:getGlobalValue('rollershutter_runs'));
   local random = math.random(35);
   local min = math.floor((random*100)/60);
 
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 string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == sunriseHour)) and rollershutter_runs == 0 and tonumber(temp)>=0)
   then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
           fibaro:setGlobal('rollershutter_runs', '1');
       fibaro:debug('Sunrise... Opening rollershutters');
       fibaro:debug('Waiting ' .. min .. ' min');
           fibaro:sleep(random*100000);
                fibaro:call(766, 'open');
                fibaro:call(768, 'open');
       fibaro:debug('Rollershutters opened');
       fibaro:setGlobal('rollershutter_runs', '0');
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 string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == sunsetHour)) and rollershutter_runs == 0 and tonumber(temp)>=0)
 then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
           fibaro:setGlobal('rollershutter_runs', '1'); 
       fibaro:debug('Sunset... Closing rollershutters');
       fibaro:debug('Waiting ' .. min .. ' min');
           fibaro:sleep(random*100000);
                fibaro:call(766, 'close');
                fibaro:call(768, 'close');
       fibaro:debug('Rollershutters closed');
       fibaro:setGlobal('rollershutter_runs', '0');
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 string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == sunriseHour)) and rollershutter_runs == 0 and tonumber(temp)<=0)
   then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
           fibaro:setGlobal('rollershutter_runs', '1');
       fibaro:debug('Sunrise... Temperatur < 0... Rollershutters stay closed.');
       fibaro:setGlobal('rollershutter_runs', '0');
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 string.format('%02d', currentDate.hour) .. ':' .. string.format('%02d', currentDate.min) == sunsetHour)) and rollershutter_runs == 0 and tonumber(temp)<=0)
 then
       fibaro:debug('Rollershutter-Controller started (Ver.' .. version .. ')');
           fibaro:setGlobal('rollershutter_runs', '1');
       fibaro:debug('Sunset... Temperatur < 0... Rollershutters stay opened.');
       fibaro:setGlobal('rollershutter_runs', '0');
end
   setTimeout(rollershutter, 60*1000);
end
 
if (sourceTrigger['type'] == 'autostart') then
 rollershutter();
end

Alarm hat die Szenenausführung unterbrochen oder der Variableninhalt stimmt nicht.

Gruß

Morgen,

ist es möglich und wenn ja wie, die Rollläden zum Sonnenauf.- und -untergang verzögert zu öffnen/ schließen auch wenn Radom hinterlegt ist? D.h. den tatsächlichen Sonnenuntergang/ Aufgang zeitlich zu Verschieben. Ich nutze das Skript von Seite drei ein und es funktioniert auch super. Dazu habe ich random von 0-60 min hinterlegt. Leider gehen die Rolläden zeitweise zum Sonnenuntergang d.h. Randon z.b. 1min runter. Zu dieser Zeit ist es aber noch hell draußen und ich würde gerne wollen das random erst nach z.b. Zeituntergang + 30min startet. (Runterfahren = Sonnenuntergang + ZeitX + random)

LG Daniel

Hi,

klar, das geht. Rechne einfach auf die Randomzeit noch 30 Minuten drauf.

Gruß

Hi,

dann kann der zurückgegebene Wert auch bei 1min liegen und das will ich ja nicht. Ich will z.b. das random zwichen 30 und 90min liegt. D.h. Sonnenuntergang z.b. 18Uhr + meine 30min + random (dann 0-60min). Kurzum ich will einfach das nach sonnenuntergang noch eine Zeit gewartet wird bis der wert von random berücksichtigt wird. Habe schon versucht mit sleep zu spielen, habe das aber nicht hin bekommen :frowning:

Dann setz die random-Zeit so, dass keine 1 bei raus kommen kann:

math.random(60,120) -> Zufallszahl zwischen 60 & 120

Gruß

super danke, wusste nicht das ich von bis hinterlegen kann :slight_smile: genau das habe ich gesucht.

Gruß

Morgen,

ich habe eine kurze Frage zu folgendem LUA Code:

---#################   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 (0 < fibaro:getValue(tempSensor, "value"))
and (tonumber

dieser Code soll die Rollläden nur öffnen, wenn die Temperatur > 0 Grad ist (Frostschutz). Leider scheint diese Bedingung and (0 < fibaro:getValue(tempSensor, "value")) komplett ignoriert zu werden. Ich benutzte als Temperatursensor Netatmo und gebe die aktuelle Temperatur auch im Log (siehe Bild) aus. Die Rollladensteuerung funktioniert ohne Probleme bis auf das die Bedingung nur aktiv bei Temp > 0 Grad.

TempStrg.png

Moin thebrain,

die Bedingung trifft nie zu, weil Du Äpfel (Zahl) mit Birnen (String) vergleichst.

Versuche es mal so:
and (0 < tonumber(fibaro:getValue(tempSensor, "value")))

Hallo Bastian,

vielen Dank, werde das heute abend gleich einmal probieren.

Gruß

Hallo Bastian,

leider scheint hier auch etwas nicht so zu funktionierenmit dem Code and (0 < tonumber(fibaro:getValue(tempSensor, "value"))). Die Rollläden gehen trotz Temperaturen unter 0 Grad runter, Die Bedingung sagt aber wenn unter 0 Grad soll nicht passieren.

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 (0 < tonumber(fibaro:getValue(tempSensor, "value")))
and (tonumber(rollershutter_runs) == 0))
    then	
		

vielen Dank und LG
Daniel

Unbenannt.jpg

Hallo Daniel,

schaue Dir mal die Bedingungen Deiner elseif-Anweisung ein wenig genauer an. Für mich ist das maximal verwirrend. Wenn ich mir nur die Bedingung 0 < tonumber(fibaro:getValue(tempSensor, "value")) ansehe, fällt mir aber schon auf, dass die Bedingung nur erfüllt ist, wenn tempSensor einen Wert GRÖßER 0 liefert.

Hallo Bastian,

genau das soll die Bedingung auch machen. Nur wenn die Bedingung temp > 0 ist, soll der nachfolgende Code ausgeführt werden (Rollläden rauf oder runter). Wenn die Temp unter 0 Grad ist, soll der nachfolgende Code für das öffnen/ schließen nicht ausgeführt werden.
Da wie in dem Bild zu sehen ist die Temp unter 0 Grad lag und die Rollläden trotzdem gesteuert wurden, gehe ich von aus, das irgendetwas nicht passt. Ich finde aber leider den Fehler nicht.
D.h. die Rollläden sollen nur bei plusgraden gesteuert werden um das Einfrieren und damit einen Defekt zu verhindern.

Besten Dank und LG

Hallo Daniel,

so ein Auszug aus dem Code ist schwer zu interpretieren. Was steht in VersetzteSonnenAufgang, zeitFruehstensAuf und rollershutter_runs???
Wenn eine der folgenden Bedignungen zutrifft, dann wird der then Code ausgeführt:

(VersetzteSonnenAufgang > zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzteSonnenAufgang)
(VersetzteSonnenAufgang < zeitFruehstensAuf and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
(VersetzteSonnenAufgang > zeitSpaetestensAuf and os.date("%H:%M", os.time()) == zeitSpaetestensAuf) and (0 < tonumber(fibaro:getValue(tempSensor, "value"))) and (tonumber(rollershutter_runs) == 0)

Vermutung: eine der ersten beiden Bedingungen trifft zu, so dass es gar nicht zu einer Prüfung der Temperatur kommt.

Hallo Bastian,

anbei einmal der vollständige Code:

--[[
%% 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 = '22:00'    --Spaetestens wenn die Sonne unter geht.
 
local startSunLux = 300000; 			-- über 20.000 Lux für zu
local startSunTemp = 30;			
local startSunDelay = 5;			-- 5 Min bis zu
local endSunLux = 6000;				-- unter 6.000 Lux für auf
local endSunDelay = 20;				-- 20 Min bis auf
local sunProtectPosition = 77;		-- Sonnen schutz position für Rollos.
local sunProtectPosition1 = 45;		-- Sonnen schutz position für Rollos (Terrassentür).

local luxSensor = 67				-- Helichkeits sensor.
local tempSensor = 205				-- Temperatursensor
local rebootSceneID = 170		    -- 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 phoneID = {fibaro:getGlobal("var_mareen_handy"), fibaro:getGlobal("var_daniel_handy")} -- Handy-IDs
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 = '2.0';
	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(18,36);	--Zufallswert zwischen 30min (18) und 60min (36)
	local minzu = math.floor((random*100)/60);  
------------------------------------------------------------------------------------------
---#################   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", sunProtectPosition1+5); --Tuere
		fibaro:call(rs_living_2, "setValue", sunProtectPosition+5); --Tuere
		fibaro:call(rs_living_3, "setValue", sunProtectPosition1+5); --Tuere
      	fibaro:call(rs_living_4, "setValue", sunProtectPosition1+5); --Tuere
        --fibaro:call(100, "setValue", sunProtectPosition);--FensterFlur obergeschoss zur 
      ---------------------------------------------------------------------------
        debug('greenyellow', fibaro:getValue(luxSensor, "value")..' Lux  ... Die Rollos fahren auf ' ..sunProtectPosition..'%!!!') 
		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 ' ..sunProtectPosition..'% 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 ' ..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 (0 < tonumber(fibaro:getValue(tempSensor, "value")))
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');
		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 (0 < tonumber(fibaro:getValue(tempSensor, "value")))
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');
		fibaro:sleep(randomzu*100000);
		
	------ID für close ohne prüfung eines offenen Fensters------------
		
		--fibaro:call(rs_living_4, 'close')						
		fibaro:call(rs_living_4, "setValue", "40");
    	--fibaro:call(rs_kueche_1, 'close');
		fibaro:call(rs_kueche_1, "setValue", "40");
    	fibaro:call(rs_hwr_1, 'close');
    	fibaro:call(rs_bad_1, 'close');
    
		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(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');
			
		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');
			fibaro:call(rs_living_2, "setValue", "70");
	
      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
	  
    --######################-Temperaturprüfung-######################
	elseif (10 < tonumber(fibaro:getValue(tempSensor, "value"))
	and (tonumber(RolloUnten0Oben1) == 1))
	then 
	debug('darkkhaki', fibaro:getValue(tempSensor, "value")..' Grad Außentemperatur ');
	fibaro:debug('Frostgrenze erreicht, Rollläden konnten nicht geöffnet werden!');

	for k=1, maxID do
        if phoneID[k] ~= nil then
            --fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: Außentemperaur <= 0 Grad. Rollläden manuell schließen!')
        	fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: Außentemperaur ' ..fibaro:getValue(tempSensor, "value").. ' Grad. Rollläden manuell schließen!')
			debug('darkkhaki', fibaro:getValue(tempSensor, "value")..' Grad Außentemperatur!!!');
        end
    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
--###########################################################################################

Hallo Daniel,

ich habe das mal bei mir nachgestellt und meine Vermutung hat sich bestätigt.
Solange VersetzteSonnenAufgang nach zeitFruehstensAuf liegt greift IMMER die erste Bedingung. Zur Prüfung der Temperatur kommt es also gar nicht erst.

elseif ((VersetzteSonnenAufgang > zeitFruehstensAuf and os.date("%H:%M", os.time()) == VersetzteSonnenAufgang) --IST IM WINTER IMMER WAHR 
or (VersetzteSonnenAufgang < zeitFruehstensAuf 
and os.date("%H:%M", os.time()) == zeitFruehstensAuf)
or (VersetzteSonnenAufgang > zeitSpaetestensAuf 
and os.date("%H:%M", os.time()) == zeitSpaetestensAuf)
and (0 < tonumber(fibaro:getValue(tempSensor, "value")))
and (tonumber(rollershutter_runs) == 0))
    then

Hallo Bastian,

das habe ich verstanden, aber wie müsste ich die Bedingung aufbauen, damit immer auch die Temperatur geprüft wird?

LG Daniel

Hallo Daniel,

ohne es ausgiebig getestet zu haben habe ich die ersten 3 Bedingungen separiert und mit ODER verknüpft.
Wenn eine dieser Bedingungen erfüllt ist, wird zusätzlich noch die Temperatur sowie rollershutter_runs geprüft.

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 rollershutter_runs == 0
		)
      the

Hallo Bastian,

vielen Dank für die schnelle hilfe. Ich habe das soeben eingebaut und werde schauen was heute Abend passiert.

Vorab vielen Dank
Gruß
Daniel

Hi Daniel,

ich vermute, dass heute Abend - zumindest auf Grund der geänderten Bedinungen - nichts passiert :wink: