Der Fibaro Home Server „Fibaro Home Center 2“ oder „Home Center Light“ bietet viele Möglichkeiten der Heim-Automatisierung und der Integration von Aktoren und Sensoren über den Z-Wave Standard (Funk).
So kann man auch seine Rollo- / Rolladen-Steuerung bzw. Jalousiesteuerung über das Modul Fibaro Roller Shutter 2 problemlos realisieren.
Allerdings fehlt eine fertige Option, um diese dann nicht nur über beliebige Schalter zu schließen, sondern auch automatisch bei Hitze / Sonnenlicht. Hierzu kann man eine entsprechende Szene erstellen und diese mittels LUA programmieren. Allerdings sind auch hierzu kaum brauchbare Anleitungen im Netz zu finden, weshalb wir hier unser Script zur Rolladensteuerung veröffentlichen wollen. Dieses bieten optimalen Sonnenschutz / Beschattung durch automatische Schließung der Rolläden / Jalousien ab einem gewissen Schwellwert / Helligkeitswert (Lux).
Dazu benötigt man zusätzlich noch den Fibaro MotionSensor mit integriertem Helligkeitssensor
Die Idee / der Plan:
- die Rollos sollen automatisch herunterfahren, wenn die Sonne zu stark scheint. Und wieder hoch, wenn die Sonne weg ist
- damit dies nicht andauernd passiert, müssen die Zustände (zu hell – oder lang genug wieder dunkel) mindestens für eine Gewisse Zeit anliegen. In unserem Beispiel: Die Sonne muss mindestens 5 Minuten hell genug scheinen, damit die Jalousien runter fahren – und mindestens 20 Minuten genügend abgedunkelt bleiben, damit diese wieder hoch fahren
- das Runterfahren oder Hochfahren soll nicht nachts passieren, wenn die Rollos sowieso unten sind
Hier der LUA-Code dazu – einige kleine Anpassungen (besonders die Geräte IDs) müssen individuell vorgenommen werden.
Nötige Anpassungen:
- Zeile 22 und Zeile 4 muss die 7 gegen die ID des eigenen Helligkeitssensors (Fibaro Motion Sensor) ausgetauscht werden.
- Es müssen die beiden globalen Variablen SunFirstMax und SunFirstMin mit dem Wert 0 angelegt werden. Diese beinhalten den Zeitstempel, an dem oben genannte Bedingungen erstmals eingetreten sind
- Es muss eine globale Variable RolloNightDown angelegt werden, die den Wert 1 bekommt, wenn die Rollos nachts heruntergefahren wurden und 0, wenn die Rollos für den Tag hochgefahren wurden
- Die Zeiten 12-15 können angepasst werden auf Wunsch (Schwellwerte und Zeiten)
- In Zeile 94-108 müssen noch die IDs der Rolläden-Module sowie die gewünschten Werte für die Position der Beschattung eingetragen werden
LUA Code:
%% autostart
%% properties
7 value
%% globals
–]]local startSource = fibaro:getSourceTrigger();function tempFunc()
if (tonumber(fibaro:getGlobalValue(„RolloNightDown“)) ~= tonumber(„1“) ) then
local startSunLux = 25000; — über 10.000 Lux für zu
local startSunDelay = 300; — 5 Min bis zu
local endSunLux = 8000; — unter 8000 Lux für auf
local endSunDelay = 1200; — 20 Min bis auf
local gSunFirstMax = (fibaro:getGlobal(„SunFirstMax“));
local gSunFirstMin = (fibaro:getGlobal(„SunFirstMin“));
— gSunFirstMaxTime = tonumber(gSunFirstMaxTime)
gSunFirstMaxTime = fibaro:getGlobalModificationTime(„SunFirstMax“);
gSunFirstMinTime = fibaro:getGlobalModificationTime(„SunFirstMin“);
— gSunFirstMinTime = tonumber(gSunFirstMinTime);
local currentLux = tonumber(fibaro:getValue(7, „value“));–currentLux = 17000; — nur für Debug !!fibaro:debug(„— Current Lux: “ .. currentLux .. “ RolloDown: “ .. fibaro:getGlobalValue(„RolloSunDown“) .. “ parallele Szenen: “ .. fibaro:countScenes() .. “ —„);
if ( currentLux >= startSunLux and fibaro:getGlobalValue(„RolloSunDown“) ~= ‚1‘) then
if (gSunFirstMaxTime == 0 or gSunFirstMaxTime == nil or gSunFirstMax == ‚0‘) then
fibaro:setGlobal(„SunFirstMax“,currentLux);
fibaro:debug(„New Max Timestamp (Down)“);
setTimeout(tempFunc, startSunDelay*1000) — sicherheitshalber diese Szene / Funktion schonmal für zukünftigen Zeitpunkt aufrufen, falls es da dann keinen Trigger gibt
elseif (os.time() – gSunFirstMaxTime >= startSunDelay ) then
fibaro:call(118, „setValue“, „45“);
fibaro:call(120, „setValue“, „45“);
fibaro:call(116, „setValue“, „45“);
fibaro:call(114, „setValue“, „45“);
fibaro:debug(„*** Aktion: ZU nach “ .. os.time() – gSunFirstMaxTime);
fibaro:setGlobal(„RolloSunDown“,1);
else
fibaro:debug(„Restzeit bis zu “ .. os.time() – gSunFirstMaxTime – startSunDelay);
end
else
fibaro:setGlobal(„SunFirstMax“,0);
fibaro:debug(„RolloDown Restzeit reset“);
end
if ( currentLux <= endSunLux and fibaro:getGlobalValue(„RolloSunDown“) == ‚1‘) then if (gSunFirstMinTime == 0 or gSunFirstMinTime == nil or gSunFirstMin ==’0′) then
fibaro:setGlobal(„SunFirstMin“, currentLux); fibaro:debug(„New Min Timestamp (Up)“); setTimeout(tempFunc, endSunDelay*1000) — sicherheitshalber diese Szene / Funktion schonmal für zukünftigen Zeitpunkt aufrufen, falls es da dann keinen Trigger gibt elseif (os.time() – gSunFirstMinTime >= endSunDelay) then
fibaro:call(114, „open“);
fibaro:call(116, „open“);
fibaro:call(118, „open“);
fibaro:call(120, „open“);
fibaro:debug(„*** Aktion: AUF nach “ .. os.time() – gSunFirstMinTime);
fibaro:setGlobal(„RolloSunDown“,0);
else
fibaro:debug(„Restzeit bis auf “ .. os.time() – gSunFirstMinTime – endSunDelay);
end
else
fibaro:setGlobal(„SunFirstMin“,0);
fibaro:debug(„RolloUp Restzeit reset“);
end
else
fibaro:debug(„Nachtabschaltung“);
end
end
if ( startSource[„type“] == „other“ ) then
— manueller Start der Szene
if (fibaro:getGlobalValue(„RolloSunDown“) == ‚1‘) then
fibaro:debug(„Manuelles sofortiges Öffnen..“);
fibaro:call(114, „open“);
fibaro:call(116, „open“);
fibaro:call(118, „open“);
fibaro:call(120, „open“);
fibaro:setGlobal(„RolloSunDown“,0);
else
fibaro:debug(„Manueller sofortiger Sonnenschutz..“);
fibaro:call(118, „setValue“, „45“);
fibaro:call(120, „setValue“, „45“);
fibaro:call(116, „setValue“, „45“);
fibaro:call(114, „setValue“, „45“);
fibaro:setGlobal(„RolloSunDown“,1);
end
else
— automatischer Lauf
fibaro:debug(„Scene läuft.. „);
tempFunc();
end