Und noch ein Rollladen Script

Hallo zusammen,

meine Frau hat so ziemlich alle meine Bugs aufgedeckt.? Heute erzählt sie mir dass sie gestern mit dem Sonnenschutz Probleme hatte. Auf meine Frage was los war, meinte sie mir das es Ihr am Nachmittag auf einmal zu dunkel war und sie einen Rollladen ganz öffnete.
Als dann ca. 1 Std. später der Sonnenschutz zurückgenommen wurde, fuhr genau dieser Rollladen wieder in eine 50% Position, (das war die gespeicherte Postion vor der Aktivierung) was ihr ja gar nicht passte.
Ich habe jetzt den Sonnenschutz ein wenig überarbeitet, so dass Rollläden die man während aktiven Sonnenschutz bewegt, beim zurücknehmen des Sonnenschutz nicht mehr beachtet werden.
Um den Sonnenschutz ein wenig intelligenter zu machen hat eine kurze ‘if’ Abfrage gereicht.
if ( tonumber(fibaro:getValue(rollerIDsS[r], ‘value’)) == sunProPos )

Hier ist die ganze Funktion die man einfach gegen die alte austauschen muss.

-- ===================================================
-- Funktionen fuer den Sonnenschutz ein und ausschalten
-- ===================================================
local function sunProtect(action)
   if action == "ON" then
     if sunProtectActiv == true then
        if debug then print('Temperatur: '.. temperatur) end  
        if debug then print('Helligkeit: '.. brightness) end
        Debug('yellow','Sonnenschutz wird aktiviert')
        tdev = {} 
        if (rollerIDsS[1] ~= nil) then
           -- Speichere Position der Rolllaeden
           for r=1, #rollerIDsS do
              if rollerIDsS[r] ~= nil then
                 rollerStat = fibaro:getValue(rollerIDsS[r], 'value')
                 table.insert(tdev, {rollerIDsS[r], rollerStat} )
                 fibaro:call(rollerIDsS[r], 'setValue', sunProPos) 
              end
           end --for
        end    
     end
  else -- Sonnenschutz wird zurückgenommen, alter Zustand wird wieder hergestellt
     Debug('orange','Sonnenschutz wird deaktiviert')
     if debug then print('Temperatur: '.. temperatur) end 
     print('Helligkeit: '.. brightness) 
     if tdev ~= nil then 
         for r=1, #rollerIDsS do
             -- Pruefung ob Rollladen in der Zwischenzeit bewegt wurde
             if ( tonumber(fibaro:getValue(rollerIDsS[r], 'value')) == sunProPos ) then
                fibaro:call(tdev[r][1],'setValue', tdev[r][2] )
             end
         end --for
     end
  end  
end  

Hi @jeep,

bin ich also nicht der einzige, der “Probleme” mit dem Sonnenschutz hat, das gefällt mir… :wink:
Vielen Dank für die Erweiterung!

Gruß, Dirk

Hallo,

besteht die Möglichkeit das man den Sonnenschutz für die Ost und West Seite noch mit einbaut?

Gruß
Tucher

@Tucher,
theoretisch schon. Dazu müsste man zusätzliche Sensoren (Temperatur und Helligkeit) für Ost und West haben.
Du kannst aber auch Deine Rollladen IDs in der Variable ‘rollerIDsS’ setzen und die Werte für sunProTempOn und sunProLuxOn anpassen. Ich schließe meine Südseite zusammen mit zwei Rolläden auf der Ostseite. Temperatursensor ist auf der Ostseite und LUXsensor ist SüdOstWest montiert. Muss dazu sagen mein LUXSensor misst von 0 bis 120.000 LUX.

Hey Jeep,

zunächst mal danke für das Script!!!
Ich fände es toll, den DoorCheck auch bei Sonnenschutz durchführen zu lassen, inkl. autom Rolladen schließen, wenn Tür verschlossen wird.

Gruß
Alando22

Hallo zusammen,

hier noch mal die komplette Version in der die vorausgegangenen Fixes und Erweiterungen eingepflegt wurden.
Es besteht also nicht unbedingt der Zwang zum Update. Das PDF werde ich gelegentlich aktualisieren.

--[[
%% autostart
--]]

-- Shutter_control.lua 
-- Section		: EG
-- Version      : 1.3.7
-- Release date : 20.06.2019
-- Copyleft     : 12-2016 - 2019 {jeep}

-- Documentation: RollerShutterControl1.3.5.pdf

if (fibaro:countScenes()>1) then
   fibaro:debug('Doppelte Szene - wird abgebrochen.')
   fibaro:abort(); 
end

local function Debug( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

math.randomseed( os.time() ) 
local sourceTrigger  = fibaro:getSourceTrigger();
local luxSensorID    = nil -- ID of brigthness sensor 
local TempSensorID   = 462 -- 427 -- ID of temperature sensor (ZWeather)
local doorSensorID   = 202 -- nil ID of a door sensor
local lamp1ID        = 166 -- lamp ID(s) for presence simulation 

local randomMinValue = 5   -- kleinster Zufallswert
local randomMaxValue = 15  -- größter Zufallswert
local minuteslater   = 8  -- Initialisierung Variable fuer spaeteres Oeffnen oder Schliessen

local notbeforeM     = '07:00' -- nicht vorher Morgens 
local notafterM      = '08:10' -- nicht nach 08:10 
local notbeforeE     = '17:30' --
local notafterE      = '21:00' -- 

local rollerIDsM     = {150,164} -- IDs der Rolllaeden für morgens {n1, n2, nn}
local rollerIDsE     = {150,}    -- IDs der Rolllaeden für Abenddaemmerung {n1, n2, nn}
local rollerIDsN     = {150,}    -- IDs der Rolllaeden für Nachtanbruch bevor man schlafen geht 
local rollerIDsS     = {150,170,172,418} -- IDs der Rolllaeden für Sonnenschutz Suedseite 
local rollerIDsNC    = {418} -- IDs der Rolllaeden die nicht geschlossen werden
                                 -- solange eine Tür offen ist.
local posQuarter  = 25  -- viertel offen  
local posHalf     = 50  -- halb offen
local pos3Quarter = 70  -- 3/4 offen
local posOpen     = 99  -- ganz offen
local posClose    = 0   -- zu
local rollerStat  = nil -- gemeldeter Öffnungswert

local SUN_Protect   = true -- Soll der Sonnenschutz aktiviert werden (Sommerbetrieb = true)
local sunProLuxOn   = 30000 -- ab diesem Wert aktivieren
local sunProLuxOff  = 15000 -- ab diesem Wert deaktivieren
local sunProTempOn  = 25  -- Temperatur ab der der Sonnenschutz aktiviert wird
local sunProTempOff = 24  -- Temperatur ab der der Sonnenschutz deaktiviert wird
local sunProChkOff  = "20:00" -- (+) Ab dieser Zeit wird nicht mehr auf Sonnenschutz geprüft 
local sunProTimeOff = "19:30" -- (+) Zeit um der der Sonnenschutz auf alle Fälle beendet Wird.  
local sunProPos     = 15   -- Rollläden nicht ganz schließen, Schlitze verhindern 
                           -- Hitzestau und Schäden an den Lamellen.
local sunProtectActiv      -- = false                      
local debug   = true       -- debug ausgaben ja | nein
---------------End user defined variables ---------------------
local checkTime   = "03:15" -- Uhrzeit zur Feststellug des Sonnenauf- und untergangs für den nächsten Tag
local checkDay    = false   -- Die Variable stellt sich um 'checktime' auf true
local version     = "1.3.7"
temperatur = tonumber(string.format("%.2f",fibaro:getValue(TempSensorID, "value")));

if (sunProChkOff <= sunProTimeOff) then
   SUN_Protect  = false
   Debug('red', 'SunProChkoff muss groesser als sunProTimeOff sein.')  
   Debug('orange', 'Sonnenschutz wurde deaktiviert!')
end  

if luxSensorID ~= nil then
   brightness = tonumber(fibaro:getValue(luxSensorID, 'value')); --Wert des Luxsensors
elseif (fibaro:getGlobal('brightness') ~= nil) then 
   brightness = tonumber(fibaro:getGlobalValue("brightness")); -- LuxWert aus globaler Variable
end

-- Korrektur des Sonnenauf und -untergangs über die Monate
-- Morning - negativer Wert - Morgens gehen die Rollläden früher auf
-- Evening - positver Wert - Abends gehen die Rollläden  später zu
local function offSetM() -- offset morning 
  local month = tonumber(os.date('%m'))
  local tabm = { [1] = "-20", [2] = "-5", [3] ="5", [4] = "15", [5] = "20", [6] = "25",
         [7] = "45", [8] = "30", [9] ="8", [10] = "5", [11] = "-5", [12] = "-20" }
  return tonumber(tabm[month])
end  

local function offSetE() -- offset evening
  local month = tonumber(os.date('%m'))
  local tabm = { [1] = "5", [2] = "12", [3] ="15", [4] = "10", [5] = "15", [6] = "10",
         [7] = "10", [8] = "15", [9] ="20", [10] = "15", [11] = "5", [12] = "2" }
  return tonumber(tabm[month])
end

local function randomValue(randomMinValue, randomMaxValue)
   local random  = math.floor(math.random(randomMinValue, randomMaxValue));
   local minutes = math.floor((random*60)/60);
   return minutes;
end
-- Neuen Sonnenaufgang berechnen
local function calcTime( timeString, random )
   -- Zeit nach Minuten umwandeln + Zufallszeit addieren   
   local HtimeString = string.sub(timeString,1,2)
   local MtimeString = string.sub(timeString,4,5)
   local timeStringMIN = tonumber(HtimeString * 60) + tonumber(MtimeString); 
   local timeStringMIN = timeStringMIN + random
   local laterCloseMIN = timeStringMIN + (minuteslater + random) --

   -- Neue SunRise Zeit wieder nach String hh:mm umwandeln
   local timeStringHnew = math.floor(timeStringMIN / 60)
   local timeStringMnew = timeStringMIN - (timeStringHnew * 60) 
  
   local laterCloseH = math.floor(laterCloseMIN /60)
   local latercloseM = laterCloseMIN - (laterCloseH *60)  
  
   local newtimeString  = string.format("%02d", timeStringHnew) .. ":" .. string.format("%02d", timeStringMnew)  
   local laterClose     = string.format("%02d", laterCloseH) .. ":" .. string.format("%02d", latercloseM)  
 
   return newtimeString, laterClose ;
end 

local function addrandom(str, random)
  local std, min = str:match("([^,]+):([^,]+)")
  local newtimeString = os.date("%H:%M", -3600 + std*60*60 +  (min*60 + random*60  ));
 
  return newtimeString
end  
-- ===================================================
-- Funktionen fuer den Sonnenschutz ein und auschalten
-- ===================================================
local function sunProtect(action)
   if action == "ON" then
     if sunProtectActiv == true then
        if debug then print('Temperatur: '.. temperatur) end  
        if debug then print('Helligkeit: '.. brightness) end
        Debug('yellow','Sonnenschutz wird aktiviert')
        tdev = {} 
        if (rollerIDsS[1] ~= nil) then
           -- Speichere Position der Rolllaeden
           for r=1, #rollerIDsS do
              if rollerIDsS[r] ~= nil then
                 rollerStat = fibaro:getValue(rollerIDsS[r], 'value')
                 table.insert(tdev, {rollerIDsS[r], rollerStat} )
                 fibaro:call(rollerIDsS[r], 'setValue', sunProPos) 
              end
           end --for
        end    
     end
  else -- Sonnenschutz wird zurückgenommen, alter Zustand wird wieder hergestellt
     Debug('orange','Sonnenschutz wird deaktiviert')
     if debug then print('Temperatur: '.. temperatur) end 
     print('Helligkeit: '.. brightness) 
     if tdev ~= nil then 
         for r=1, #rollerIDsS do
             -- Pruefung ob Rollladen in der Zwischenzeit bewegt wurde
             if ( tonumber(fibaro:getValue(rollerIDsS[r], 'value')) == sunProPos ) then
                fibaro:call(tdev[r][1],'setValue', tdev[r][2] )
             end
         end --for
     end
  end  
end  

local function check4sunProtect()
  if (temperatur >= sunProTempOn and brightness >= sunProLuxOn ) and sunProtectActiv ~= true then
     sunProtectActiv = true
     sunProtect("ON")  
  elseif (temperatur <= sunProTempOff and brightness <= sunProLuxOff ) and sunProtectActiv == true 
     or (os.date("%H:%M") >= sunProTimeOff and sunProtectActiv == true  ) then
     print('Sonnenschutz aus.')
     sunProtectActiv = false
     sunProtect("OFF") 
  end    
end 
-- Funktion zum ueberpruefen welche IDs im Falle einer offenen Tuer
-- nicht geschlossen werden sollen.
local function check4NC(id) -- check the NotClose IDs if a door is open 
   for i=1,#rollerIDsNC do
      if rollerIDsNC[i] == id then 
         return true
      end
   end -- for
   return false
end --

--
-- ========================================
-- Funktionen zum Oeffnen und Schliessen --
-- ========================================
--
local function earlymorning() -- 1.te Szene des Tages
   Debug('orange', 'Funktion earlymorning gestartet. ') 
   --fibaro:call(lamp1ID, "turnOn"); 
   if (rollerIDsM[1] ~= nil) then
      for r=1, #rollerIDsM do
         if rollerIDsM[r] ~= nil then
             rollerStat = tonumber(fibaro:getValue(rollerIDsM[r], 'value'))
             if debug then print('Rollerstat :'.. rollerStat) end
             if (rollerStat == 0) then 
                if debug then print(rollerIDsM[r]..' ist noch geschlossen') end
                fibaro:call(rollerIDsM[r],'setValue', posHalf )
             end
          end
         fibaro:sleep(math.random(4000,10000)) ; --4 bis 10 Sek. warten 
      end --for
   end  
   Debug('orange','Rolllaeden ' ..posQuarter..'% geoeffnet - ' .. os.date("%c"));
   
end  -- function earlymorning

local function goodmorningSun()
   Debug('yellow', 'Funktion goodmorning gestartet.') 
   --fibaro:call(lamp1ID, "turnOff"); -- Lampe wieder ausschalten 
   Debug('yellow','Sonnenaufgang - ' .. os.date("%c")); 
   Debug('yellow','Temperatur: ' .. temperatur .. '° um ' .. os.date('%H:%M'));
      -- if (temperatur > 20) then   -- es ist sommerlich warm
      --    posOpen = 60     -- wir öffnen die Rolläden nicht ganz 
      --    Debug('yellow','Rolllaeden werden nur '..posOpen..'% geöffnet.')
      -- end
       if (rollerIDsM[1] ~= nil) then
          for r=1, #rollerIDsM do
             if rollerIDsM[r] ~= nil then
                fibaro:call(rollerIDsM[r],'setValue', posOpen )
                rollerStat=fibaro:getValue(rollerIDsM[r], 'value')
             end
             fibaro:sleep(math.random(3000,7000)); -- 3 bis 7 Sek. warten
          end
       end  
       Debug('yellow','Rolllaeden '..posOpen.. '% geöffnet' );
       posopen = 99;
end -- function goodmorningSun  

local function highNoon() 
   --Ersatzfunction falls man die Sonnenschutzfunktion nicht nutzt.  
   --Ausschlafen wird wieder deaktiviert  
   Debug('yellow', 'Funktion highNoon gestartet.') 
   Debug('yellow','Mittagshitze. Schließe Rollladen bis bis auf n% ' .. os.date("%c")); 
   -- es ist moerderisch heiss, wir 
   -- lassen nur einen kleinen Spalt offen
   local posOpen = 15
   if (rollerIDsM[1] ~= nil) then
      fibaro:debug('Rollläden nur einen Spalt öffnen.')
      for r=1, #rollerIDsE do
          if rollerIDsE[r] ~= nil then
             fibaro:call(rollerIDsE[r],'setValue', posOpen)
          end
          fibaro:sleep(math.random(4000,9000)); -- 4 bis 9 Sek. warten 
      end
   end  
    Debug('darkorange','Rollladen minimal geöffnet');
    Debug('darkorange','Lange ausschlafen ist abgeschaltet.');
end  -- function highnoon

local function goodEvening() --Abenddaemmerung/twilight
       Debug('darkorange', 'Funktion goodevening gestartet.')
       -- fibaro:call(lamp1ID, "turnOn"); -- Licht an?
       if (rollerIDsE[1] ~= nil) then
          Debug('darkorange','Rollläden werden zur Haelfte geschlossen.' .. os.date("%c"))
          for r=1, #rollerIDsE do
             if rollerIDsE[r] ~= nil then
                fibaro:call(rollerIDsE[r],'setValue', posHalf )
             end
             fibaro:sleep(math.random(5000,9000)) ;
          end 
       end  --
       Debug('darkorange','Rolllaeden noch '..posHalf..'% offen');
      
end --end function goodEvening

local function goodNight()
      Debug('green', 'Funktion goodNight gestartet.') 
      Debug('green','Es ist ganz dunkel... schließe Rollladen');
      if (rollerIDsN[1] ~= nil) then
          Debug('blue','Rolllaeden werden geschlossen.' .. os.date("%c"))
          for r=1, #rollerIDsN do
             if rollerIDsN[r] ~= nil then
                fibaro:call(rollerIDsN[r],'setValue', posClose )
             end
             fibaro:sleep(math.random(5000,10000)) ;
          end --for
       end  
       Debug('blue','Rolllaeden '..posClose..'% offen.');
end -- function goodnight

--- Funktion goodnight mit Doorcheck
--- Es darf nur eine goodnight Funktion aktiviert werden!
local function goodNightWdoorCheck() 
  Debug('green', 'Funktion goodNNightWdoorCheck gestartet.') 
  doorvalue = tonumber(fibaro:getValue(doorSensorID, 'value'))
  Debug('green','Es ist ganz dunkel... schließe Rollladen');
  if (rollerIDsN[1] ~= nil) then
      Debug('blue','Rolllaeden werden geschlossen.' .. os.date("%c"))
      for r=1, #rollerIDsN do
         if rollerIDsN[r] ~= nil then
            if check4NC(rollerIDsN[r]) and doorvalue == 1 then
               Debug('green', rollerIDsN[r] .. ' wird nicht geschlossen' )
            else   
               Debug('blue', rollerIDsN[r] .. ' wird geschlossen' )
               fibaro:call(rollerIDsN[r],'setValue', posClose )
            end
         end
         fibaro:sleep(math.random(2000,4000)) ;
      end -- for
  end  
  Debug('blue','Rolllaeden '..posClose..'% offen.');
  runNight = true
end -- function goodnightWdoorcheck

-- Die Funktion 'Close All Not Closed' ist im Prinzip eine Kopie der 
-- goodNight(), mit dem Unterschied das die Rolllaeden aus dem Array 
-- rollerIDsNC geschlossen werden.
local function closeAllNC()
   Debug('blue', 'Funktion closeAllNC gestartet')
   Debug('green','Es ist dunkel, alle Türen sind zu... schliesse alle Rollladen');
   if (rollerIDsNC[1] ~= nil) then
       Debug('blue','Rolllaeden werden geschlossen.' .. os.date("%c"))
       for r=1, #rollerIDsNC do
          if rollerIDsNC[r] ~= nil then
             fibaro:call(rollerIDsNC[r],'setValue', posClose )
          end
          fibaro:sleep(math.random(2000,4000)) ;
       end --for
   end  
       Debug('blue','Rolllaeden '..posClose..'% offen.');
       runCloseAll = true --bereits gelaufen
end  
---
---  Ende der Funktionen fuer Oeffnen oder Schliessen  ---
--- ================================================== ---

-- ######################################################
--                Initialize 
-- ######################################################
local sunriseHour = fibaro:getValue(1,"sunriseHour");
local sunsetHour  = fibaro:getValue(1,"sunsetHour");
local randminutes = randomValue(randomMinValue, randomMaxValue)
local newsunriseHour, laterOpen = calcTime(sunriseHour, tonumber(randminutes) + offSetM() )
local newsunsetHour, laterClose = calcTime(sunsetHour, tonumber(randminutes) + offSetE() )
local sleepin = tonumber(fibaro:getGlobalValue("Ausschlafen")) or 0;
runEarly,runMorning,runEvening,runNight,runcloseAll = false,false,false,false,false 
--
--
function rollershutter()  -- Hauptprogramm
   math.randomseed( os.time() ) 
   temperatur = tonumber(string.format("%.2f",fibaro:getValue(TempSensorID, "value")));
   if luxSensorID ~= nil then  
      brightness = tonumber(fibaro:getValue(luxSensorID, 'value')); -- Wert des Luxsensors
   elseif (fibaro:getGlobal('brightness') ~= nil) then               
      brightness = tonumber(fibaro:getGlobalValue("brightness")); -- LuxWert aus globaler Variable
   end 
   
   local currentDate = os.date("*t");
   local actionTime  = (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min));
   local randminutes  = randomValue(randomMinValue, randomMaxValue)
   local minuteslater = randomValue(randomMinValue, randomMaxValue)  -- Spaeteres Oeffnen oder Schliessen
   --local minuteslater = randomValue(4,8)  -- Spaeteres Oeffnen oder Schliessen
   local holiday      = tonumber(fibaro:getGlobalValue("Feiertag_heute"));
   if (holiday == nil) then holiday = 0;  end
   if (holiday == 1) then einORkein = 'ein' else einORkein = 'kein' end
   if ( checkDay == false) then
      sunriseHour = fibaro:getValue(1,"sunriseHour"); 
      sunsetHour  = fibaro:getValue(1,"sunsetHour");  
      newsunriseHour, laterOpen = calcTime(sunriseHour, tonumber(randminutes) + offSetM() ) 
      newsunsetHour, laterClose = calcTime(sunsetHour, tonumber(randminutes) + offSetE() )  
      sleepin = tonumber(fibaro:getGlobalValue("Ausschlafen")) or 0; -- wird über ein VD aktiviert
      randomMorning  = addrandom(notbeforeM,randomValue(4, 9)) -- morgens nicht vorher + Zufall
      temperatur = tonumber(string.format("%.2f",fibaro:getValue(TempSensorID, "value")));
      checkDay   = true
      runEarly,runMorning,runEvening,runNight,runcloseAll= false,false,false,false,false
      Debug('lightblue','-- Zeiten für '.. (os.date("%d. %b %Y, "))..'Version: '..version..  ' --')
      Debug('lightblue','Heute ist '..einORkein..' Feiertag oder Wochenende.')  
      Debug('orange','RealSunrise: ' .. sunriseHour);
      Debug('orange','New SunRise: ' .. newsunriseHour)
      Debug('yellow','Later Open: ' .. laterOpen)
      print('--')
      Debug('darkorange','RealSunset: ' .. sunsetHour);        
      Debug('darkorange','New SunSet: ' .. newsunsetHour)
      Debug('brown','LaterClose ' .. laterClose)
      Debug('skyblue','Temperatur: ' .. temperatur .. '° um ' .. os.date('%H:%M'));
      Debug('skyblue','Helligkeit: ' ..brightness.. 'Lux')
      print('---------------------------------')
   end   
   
   -- Fuer Simulation die 2 folgenden Variablen mit zeitnaher Uhrzeit fuettern
   -- local newsunriseHour = "09:48"
   -- local newsunsetHour  = "22:39"

  ---------------------------------------------------------------
--- Ab hier koennen die verschiedenen Bedingungen zum Oeffnen 
--- und Schliessen  hinterlegt werden. Bitte beachten dass die Bedingungen
--- Funktionen nicht 2-fach aufrufen!  
---------------------------------------------------------------  
  if ((actionTime >= notbeforeM and actionTime <= notafterM) 
     and runEarly == false 
     or (actionTime == newsunriseHour) and runEarly == false )     
     then --Morgenroete 
     earlymorning() --früh morgens, egal ob Werktag oder Feiertag 
     runEarly = true
    
  --elseif (actionTime >= notbeforeM and holiday == 1 
  --   and runEarly == false )  
  --   then --Morgenröte 
  --   earlymorning() -- es ist Feiertag, deshalb um notbeforM oeffnen  
  --   runEarly = true
    
  elseif (actionTime == laterOpen and sleepin == 0 
     and runMorning == false ) 
     then --es ist schon hell
     goodmorningSun()  
     runMorning = true
    
 -- elseif (actionTime == "12:00")  
    --  and temperatur >= 25) -- zusaetzlicher Check um die Mittgaszeit falls man 
   -- then                      -- keinen Sonnenschutz verwendet   
            
   -- highNoon() 
  
  elseif ((actionTime == newsunsetHour) )    
     then --Abenddaemmeung
     goodEvening()
     runEvening = true  

  elseif (actionTime == laterClose )
     then -- Es wird/ist dunkel.
     goodNightWdoorCheck() -- goodNight() oder goodNightWdoorCheck() 
     runNight = true
   
  elseif (actionTime > laterClose   
     and (tonumber(fibaro:getValue(doorSensorID, 'value')) == 0) 
     and runcloseAll == false  )
     then -- Tuer zu, dann auch Rollladen zu.
     -- Bitte diese Funktion mit Bedacht aktivieren. Nicht ohne Smartphone
     -- oder FB hinausgehen.
     closeAllNC()
     runcloseAll = true  

  elseif (actionTime == checkTime) then
     checkDay = false 
    
  end -- Ende der elseif Bedingungen
  
  if (actionTime > newsunriseHour and actionTime < sunProChkOff -- Zeit in der auf Sonnenschutzbedingung gepüft wird
     and SUN_Protect == true) then
     check4sunProtect()  -- Pruefen ob der Sonnenschutz aktiviert werden soll
  end
    
  setTimeout(rollershutter, 60*1000);  
end -- function rollershutter

if (sourceTrigger["type"] == "autostart") then
	rollershutter();
end

2 „Gefällt mir“

Hallo Jeep, zZ läuft bei uns vers 1.3.5, immer mit den entsprechenden Funktionsänderungen. Ein großes Lob an Dich. Es funzt alles. Noch eine Frage habe ich zum Lux-Sensor. Ich benutze im Moment den Fibaro FGMS-001, den ich in eine Ecke verpflanzt habe, dass er nicht das volle Sonnenlicht abbekommt, ist ja irgendwo eine Grenze. Du schreibst … mein LUXSensor misst von 0 bis 120.000 LUX. Kannst Du vielleicht sagen, welcher Sensor das ist? Ich habe bisher keinen für z-wave gefunden.
viele Grüße
bieer

Hallo @bieer,
prima das Du es gut einsetzen kannst. Das Problem mit ZWave LUX-Sensoren hat mich auch gefrustet. Als ich vor gut 4 Jahren (von einem XS1 Gateway mit 433 und 866MHz) auf ZWave umgestiegen bin, habe ich feststellen müssen dass es keine vernünftigen LUX-Sensoren gibt. Ich war den heilfroh dass ich mein altes XS1 nicht in Ebay verscherbelt habe. Habe mir dann ein VD gebastelt dass per API-Request die Werte vom XS1 holt und in eine globale Variable schreibt. Jetzt wisst ihr auch warum ich alternativ eine globale Variable dafür im Script habe.
Ich habe wie Du auf den Foto (in der Mitte) erkennen kannst auch einen ZWave “Sensative Strips Comfort” am laufen. Der geht bis 60.000 LUX. Aber trotz korrekter Parameter Einstellungen sendet der die Werte in in viel zu langen Abständen. Der alte nicht Zwave-Sensor (im Bild das untere vergilbte Teil) macht das im 1.5 Minuten Takt. Weiss leider nicht ob es den noch gibt.
Für alle Fälle, das Model ist ein “WS 2500-19”. Hatte noch ein Erdspieß dran den ich aber abgeschraubt habe.
Ich glaube aber hier im Forum was über einen anderen ZWave LUX-Sensor gelesen zu haben. Kommt aus China, muss aber nicht schlecht sein. Ob es dafür einen Distributor gibt weiß ich nicht.

photo_2019-07-01_12-29-22.jpg

Falls nicht bekannt, über folgenden Link findet man für die verschiedenen Regionen alle zertifizierten Z-Wave Produkte: https://products.z-wavealliance.org/regions

Gruß
Dirk

Dieser hier misst bis 180.000 Lux. Ob dieser allerdings mit dem Fibaro HC2 kompatibel ist, kann ich nicht sagen:
https://products.z-wavealliance.org/products/2485

https://climax-deutschland.com/product/lm-1zw/

Hallo zusammen,

hab bei Climax angerufen. Lieferzeit 6 -8 Wochen. Habe 2 bestellt. Wichtig ist nur dass der Luxwert relativ schnell übertragen wird. Kann ich erst testen wenn er da ist. Dann wird sichs zeigen ob ich ca. 100.-€ in den Sand gesetzt habe. Danke @dirk-

Guten Abend zusammen,
ich habe eine Frage zu der Umsetzung von dem Skript. Sie wurde so ähnlich im Verlauf schon mal gestellt, aber ganz schlau geworden darauf bin ich immer noch nicht.
Es geht um die Zeiten. Ich habe die Szene gestern Abend getestet und verstehe den Ablauf nicht so ganz.
local notbeforeM = ‘08:00’ – nicht vorher Morgens
local notafterM = ‘09:00’ – nicht nach 09:00
local notbeforeE = ‘17:30’ –
local notafterE = ‘21:00’ –

Als Debug kommt raus:
[DEBUG] 16:09:11: Heute ist kein Feiertag oder Wochenende.
[DEBUG] 16:09:11: RealSunrise: 05:59
[DEBUG] 16:09:11: New SunRise: 06:42
[DEBUG] 16:09:11: Later Open: 07:33
[DEBUG] 16:09:11: –
[DEBUG] 16:09:11: RealSunset: 21:19
[DEBUG] 16:09:11: New SunSet: 21:47
[DEBUG] 16:09:11: LaterClose 22:23
[DEBUG] 16:09:11: Temperatur: 24.9° um 16:09
[DEBUG] 16:09:11: Helligkeit: 204Lux
[DEBUG] 16:09:11: ---------------------------------

Heute Morgen fuhren dann die Rolladen pünktlich um 05:59 hoch.
Wie bekomme ich es hin, dass sich die Zeiten für Öffnung und Schließung innerhalb des eingestellten Korridors befindet und würden mir die Zeiten dann auch als Debug ausgeschmissen.

Grüß
Apfelkind

@Apfelkind15

diese Variablen können (müssen aber nicht) benutzt werden um die Rollläden zu festen Zeiten zu öffnen
oder zu schließen oder in Kombination mit Sonnenaufgang und Sonnenuntergang, je nachdem was zuerst eintritt.

Beispiel: Der aktuelle Sonnenaufgang ist gerade so um ca. 06:00 Uhr. Der durch Zufall und monatliche änderbare
versetze Sonnenaufgang, kann also einen Wert von z.B. ca. 6:40 ergeben.
Ab Mitte September (je nach geografischer Lage) ist der Sonnenaufgang um ca. 07:00 Uhr und der versetzte
Sonnenaufgang könnte z.B. 07:20 Uhr sein.
Wenn die Rollläden jetzt nicht bis zum realen oder versetzten Sonnenaufgang warten sollen also immer
um spätestens 06:55 öffnen sollen kann man diese Bedingung definieren.


local notafterM = 06:55
--
if ((actionTime  >= notafterM) 
     and runEarly == false 
     or (actionTime == newsunriseHour) and runEarly == false )     
     then --Morgenroete 
     earlymorning() --früh morgens, egal ob Werktag oder Feiertag 
     runEarly = true
elseif
...

Die Bedingungen beginnen an Zeile 390.
Und wenn man den Sonnenaufgang gar nicht nutzen will lässt man die ‘oder’ Zeile weg.
Ich habe diese Variablen nicht im Debug eingetragen weil, einmal eingestellt, sie sich ja nie ändern.

1 „Gefällt mir“

Hallo Zusammen,

ich habe in einem anderen Blog ein Script gefunden, in dem ich meinen Google Kalender ins HC2 einbinden kann. Sobald dort ein Feiertag oder Urlaub eingetragen ist, wird ein Wert in einer Variablen gespeichert. Ich würde jetzt gern wissen, ob man dieses Rollladen Script so ändern kann, dass die Rollladen im Schlaf- und Gästezimmer später hochfahren, wenn Urlaub oder Feiertag im Kalender steht. Ich habe mal ein Bild der Variablen angehängt…

MfG, Cruncher

Variable.png

Hallo @Cruncher,

ich nutze auch ein „Google-Kalender-Skript“ in Verbindung einer Variable um meine Rollläden an Wochenenden, Feier- und Urlaubstagen später öffnen zu lassen, allerdings zu einer festen Zeit und unabhängig vom Sonnenaufgang. Außerdem öffne ich alle Rollläden an den genannten Tagen direkt vollständig, also ohne zuerst auf Sichtschutz zu öffnen.
Ja, man kann das Skript also entsprechend anpassen.

Solltest Du weitere Unterstützung benötigen, wäre es sinnvoll erstmal die gewünschten Bedingungen genau zu definieren und Dein Skript zu posten.
Allerdings bin ich selber LUA-Anfänger und kann Dir vermutlich nicht bei allem unterstützen.

Gruß
Dirk

Hallo dirkg173,

Deine Skript ist ganz genau so wie ich es haben möchte…
Wäre es möglich, mir Dein Script zur Verfügung zu stellen ?

Ein paar kleine Anpassungen bekomme ich dann (hoffentlich) selber hin (Id´s ändern/Zeiten einstellen)

Das Script, was bei mir läuft ist aktuell 1.3.5 (unverändert, bis auf herausnahme des Sichtschutzes)

Gruß, Cruncher

Hallo @Cruncher,

ich würde Dir nur ungerne mein Skript zur Verfügung stellen bzw. es hier veröffentlichen, da ich diverse eigene Anpassungen durchgeführt habe welche auch noch nicht alle 100%ig funktionieren und mein Skript sich mittlerweile auch deutlich von der Version 1.3.5 bzw. 1.3.7 unterscheidet. Auch sind meine Änderungen nicht alle kommentiert, so dass es nicht ganz einfach sein wird, da durchzublicken. Du müsstest also nicht nur die ID´s und Zeiten ändern.

Schicke mir eine kurze E-Mail an dirkg173@gmx.de dann schicke ich Dir mein Skript mal zu.

Gruß
Dirk

Hi Dirk,
vielleicht kannst Du einen Link zum verwendeten “Google Kalender” Script Posten. Wenn ich mal Zeit habe schau ich mir das an.

Hi @jeep,

siio.de mag wohl keine Internetadressen von “konkurrierenden” Seiten, deshalb als Screenshot… :wink:

Gruß
Dirk

Bildschirmfoto-2019-08-18-um-19.34.38.png

Hallo Jeep, was macht denn der Lux-Sensor von Climax? Ist da was raus gekommen? Ich bin nach wie vor an deinen Erfahrungen interessiert.
Gruß bieer