Hier mal die einfache Szene für einen Rollo öffnen - schliessen und Zwischenpos.
--[[
%% properties
%% globals
--]]
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 52 -- ID dieser Szene
local rollo = 175 -- ID Rollo
------------------------------------------------------------------------------------------------------------------------------------------
---------------------Script-----------------
fibaro:debug("Start Rolladen Öffnen-Schliessen")
if (fibaro:countScenes()>1) then
fibaro:debug("stop scene");
fibaro:abort();
end
-- Rollo Öffnen-Schliessen
if (fibaro:getGlobalValue("RolloBuero") == "Zpos") then
fibaro:call(rollo, "turnOn");
fibaro:debug("aus zpos öffnen");
fibaro:sleep(15000);
fibaro:setGlobal("RolloBuero", "Auf");
fibaro:debug("rollo geöffnet");
fibaro:sleep(2000);
fibaro:setGlobal("ZPosHilfsvarB", "Aktiv");
fibaro:sleep(1000);
fibaro:call(rollo, "turnOn");
fibaro:debug("Schliessen");
fibaro:sleep(5000);
fibaro:setGlobal("RolloBuero", "Zu");
fibaro:sleep(1000);
end
if (fibaro:getGlobalValue("RolloBuero") == "Auf") then
fibaro:call(rollo, "turnOn");
fibaro:debug("rollo schliessen");
fibaro:sleep(5000);
fibaro:setGlobal("RolloBuero", "Zu");
fibaro:debug("rollo geschlossen");
fibaro:sleep(5000);
fibaro:setGlobal("ZPosHilfsvarB", "Aktiv");
fibaro:sleep(1000);
end
if (fibaro:getGlobalValue("RolloBuero") == "Zu" and fibaro:getGlobal("ZPosHilfsvarB") == "Inaktiv") then
fibaro:call(rollo, "turnOn");
fibaro:debug("rollo öffnen");
fibaro:sleep(5000);
fibaro:setGlobal("RolloBuero", "Auf");
fibaro:debug("rollo geöffnet");
fibaro:sleep(5000);
end
fibaro:setGlobal("ZPosHilfsvarB", "Inaktiv");
fibaro:debug("Wartezeit 30 Sekunden");
fibaro:sleep(30000);
fibaro:debug("Ende Rolladen Öffnen-Schliessen");
fibaro:killScenes(scene);
Hier noch die Szene für die Zwischenposition
--[[
%% properties
%% globals
--]]
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 45 -- ID dieser Szene
local rollo = 175 -- ID Rollo
------------------------------------------------------------------------------------------------------------------------------------------
---------------------Script-----------------
fibaro:debug("Start Rolladen ZwischenPosB")
if (fibaro:countScenes()>1) then
fibaro:debug("stop scene");
fibaro:abort();
end
-- Rollo Öffnen wenn in Zwischenpos.
if (fibaro:getGlobalValue("RolloBuero") == "Zpos") then
fibaro:call(rollo, "turnOn");
fibaro:debug("Rollo aus Zwischenpos Öffnen");
fibaro:sleep(1000);
fibaro:setGlobal("ZPosHilfsvarB", "Aktiv");
fibaro:sleep(15000);
fibaro:setGlobal("RolloBuero", "Auf");
fibaro:debug("Rollo geöffnet");
fibaro:sleep(5000);
end
-- Rollo Zwischenpos. anfahren wenn Rollo Auf
if (fibaro:getGlobalValue("RolloBuero") == "Auf" and fibaro:getGlobalValue("ZPosHilfsvarB") == "Inaktiv") then
fibaro:call(rollo, "turnOn");
fibaro:debug("Rollo Zwischenpos Anfahren");
fibaro:sleep(12000);
fibaro:call(rollo, "turnOn");
fibaro:debug("Rollo Zwischenpos Erreicht");
fibaro:sleep(5000);
fibaro:setGlobal("RolloBuero", "Zpos");
fibaro:sleep(1000);
end
fibaro:setGlobal("ZPosHilfsvarB", "Inaktiv");
fibaro:debug("Wartezeit 10 Sekunden");
fibaro:sleep(10000);
fibaro:debug("Ende Rolladen ZwischenPosB");
fibaro:killScenes(scene);
Hier die Automatik für Zwischenpos bei bestimmter Temp und in bestimmten Zeitfenster
--[[
%% properties
3 Temperature
%% globals
--]]
-- VARIABLEN Konfiguration
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 46 -- ID dieser Szene
local tagstart = 1000 -- 22:00 = 2200
local tagende = 01800 -- 07:00 = 0700
------------------------------------------------------------------------------------------------------------------------------------------
fibaro:debug("Start Rollo Temp Automatik")
if (fibaro:countScenes()>1) then
fibaro:debug("stop scene");
fibaro:abort();
end
if (tonumber(os.date("%H%M")) >= tagstart or tonumber(os.date("%H%M")) <= tagende) then
fibaro:debug("Sonnenschutzzeit OK");
if (tonumber(fibaro:getValue(3, "Temperature")) >= tonumber(23)) then
fibaro:debug("Temperatur >= 25 Grad");
if (fibaro:getGlobalValue("RolloBuero") == "Auf") then
fibaro:debug("Rollo Fenster in Zpos Fahren");
fibaro:startScene(45);
fibaro:sleep(1000);
end
fibaro:sleep(1000);
end
if (tonumber(fibaro:getValue(3, "Temperature")) < tonumber(23)) then
fibaro:debug("Temperatur < 25 Grad");
if (fibaro:getGlobalValue("RolloBuero") == "Zpos") then
fibaro:debug("Rollo Fenster Öffnen");
fibaro:startScene(45);
fibaro:sleep(1000);
end
fibaro:sleep(1000);
end
-- timer start und einstellen
fibaro:debug("15 Minuten Wartezeit bis Fenster erneut Öffnen/Schliessen möglich");
fibaro:sleep(900000)
fibaro:debug("Timer 15 Minuten abgelaufen - Bereit für Neuauslösung");
end
fibaro:debug("Ende Rollo Temp Automatik");
fibaro:killScenes(scene);
Hier die Szene für die generelle Automatik, früh (sonnenaufgang) öffnen abend (sonnenuntergang evtl mit verzögerung) schliessen
--[[
%% properties
%% globals
Tageszeit
--]]
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 48 -- ID dieser Szene
local rollo = 175 -- ID Rollo
local currentDate = os.date("*t");
------------------------------------------------------------------------------------------------------------------------------------------
---------------------Script-----------------
fibaro:debug("Start Rolladen-Automatik")
if (fibaro:countScenes()>1) then
fibaro:debug("stop scene");
fibaro:abort();
end
-- Rollo Öffnen (Bei Sonnenaufgang und Rollo = Zu)
if (currentDate.wday == 1 or currentDate.wday == 6 or currentDate.wday == 7) and (fibaro:getGlobalValue("Tageszeit") == "Morgen") and (fibaro:getGlobalValue("RolloBuero") == "Zu") then
fibaro:startScene(52);
fibaro:sleep(5000);
fibaro:debug("Rollo Öffnen");
fibaro:debug("Wartezeit 60 Sekunden");
fibaro:sleep(30000);
end
-- Rollo Fenster Schliessen (Bei Sonnenuntergang)
if (fibaro:getGlobalValue("Tageszeit") == "Abend") then
if (currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5) and ((fibaro:getGlobalValue("RolloBuero") == "Auf") or (fibaro:getGlobalValue("RolloBuero") == "Zpos")) then
if (fibaro:getGlobalValue("RolloBuero") == "Auf") then
fibaro:startScene(52);
fibaro:sleep(5000);
fibaro:debug("Rollo Schliessen");
fibaro:debug("Wartezeit 60 Sekunden");
fibaro:sleep(20000);
end
if (fibaro:getGlobalValue("RolloBuero") == "Zpos") then
fibaro:startScene(52);
fibaro:sleep(5000);
fibaro:debug("Rollo Schliessen aus Zwischenpos");
fibaro:sleep(20000);
end
else
if (currentDate.wday == 1 or currentDate.wday == 6 or currentDate.wday == 7) then
fibaro:debug("Start - Verzögerung");
fibaro:sleep(900000);
if (fibaro:getGlobalValue("RolloBuero") == "Auf") then
fibaro:startScene(52);
fibaro:sleep(5000);
fibaro:debug("Rollo Schliessen");
fibaro:sleep(1000);
end
if (fibaro:getGlobalValue("RolloBuero") == "Zpos") then
fibaro:startScene(52);
fibaro:sleep(5000);
fibaro:debug("Rollo Schliessen aus Zwischenpos");
fibaro:sleep(20000);
end
end
end
fibaro:debug("Wartezeit 60 Sekunden");
fibaro:sleep(30000);
end
fibaro:debug("Wartezeit 5 Sekunden");
fibaro:sleep(5000);
fibaro:debug("Ende Rolladen-Automatik");
fibaro:killScenes(scene);
Und hier die Szene um die Variablen zu setzen, hier sind alle meine rollos abgefangen (deshalb muss diese Szene mehrere Instanzen ausführen können - mindestens so viele wie Rollos abgefangen werden um bei Parallelbetrieb auch alle Variablen zu setzen). Hab auch über die position in % das Rollershutter modul abgefragt da ich die variablen noch anderweitig benutze.
--[[
%% properties
91 value
93 value
55 value
175 value
%% globals
--]]
--------------------------------------------------------------------------------
local scene = 12 -- ID dieser Szene
local rolloein = 91 -- ID Relais Wohnen Rollo Fenster
local rolloeint = 93 -- ID Relais Wohnen Rollo Terassentüre
local rollo = 55 -- ID Modul Schlafzimmer Rollo
local rb = 175 -- ID Modul Büro
--------------------------------------------------------------------------------
fibaro:debug("Start Rollo Variable Ändern")
--[[if (fibaro:countScenes()>1) then
fibaro:debug("stop scene");
fibaro:abort();
end--]]
----Abfrage Auslösemodul---------------------------------------------------------
local trigger = fibaro:getSourceTrigger()
--local switchID = tonumber(trigger['deviceID'])
---------------------------------------------------------------------------------
if (tonumber(trigger['deviceID']) == 91) then
fibaro:debug("Rollo Fensterseite ausgelöst");
-----Rollos Fensterseite---------------------------------------------------------
if ((tonumber(fibaro:getValue(rolloein, "value")) > 0 )) and ((fibaro:getGlobalValue("Rollo") == "Zu")) then
fibaro:setGlobal("Rollo", "Auf");
fibaro:debug("Setze Variable Rollo = Auf");
else
if ((tonumber(fibaro:getValue(rolloein, "value")) > 0 )) and ((fibaro:getGlobalValue("Rollo") == "Auf")) then
fibaro:setGlobal("Rollo", "Zu");
fibaro:debug("Setze Variable Rollo = Zu");
end
fibaro:sleep(4000);
end
end
---------------------------------------------------------------------------------
if (tonumber(trigger['deviceID']) == 93) then
fibaro:debug("Rollo Terassentür ausgelöst");
-----Rollo Terassentüre----------------------------------------------------------
if ((tonumber(fibaro:getValue(rolloeint, "value")) > 0 )) and ((fibaro:getGlobalValue("RolloTT") == "Zu")) then
fibaro:setGlobal("RolloTT", "Auf");
fibaro:debug("Setze Variable RolloTT = Auf");
else
if ((tonumber(fibaro:getValue(rolloeint, "value")) > 0 )) and ((fibaro:getGlobalValue("RolloTT") == "Auf")) then
fibaro:setGlobal("RolloTT", "Zu");
fibaro:debug("Setze Variable RolloTT = Zu");
end
fibaro:sleep(4000);
end
end
---------------------------------------------------------------------------------
if (tonumber(trigger['deviceID']) == 175) then
fibaro:debug("Rollo Büro ausgelöst");
-----Rollo Büro------------------------------------------------------------------
if ((tonumber(fibaro:getValue(rb, "value")) > 0 )) and ((fibaro:getGlobalValue("RolloBuero") == "Zu")) then
fibaro:setGlobal("RolloBuero", "Auf");
fibaro:debug("Setze Variable RolloBuero = Auf");
else
if ((tonumber(fibaro:getValue(rb, "value")) > 0 )) and ((fibaro:getGlobalValue("RolloBuero") == "Auf")) then
fibaro:setGlobal("RolloBuero", "Zu");
fibaro:debug("Setze Variable RolloBuero = Zu");
end
fibaro:sleep(4000);
end
end
---------------------------------------------------------------------------------
if (tonumber(trigger['deviceID']) == 55) then
fibaro:debug("Rollo Schlafzimmer ausgelöst");
-----Rollo Schlafzimmer----------------------------------------------------------
fibaro:setGlobal("RolloSZ", (tonumber(fibaro:getValue(rollo, "value"))))
fibaro:debug("Schreibe Value in RolloSZ");
fibaro:sleep(1000);
-------------Setze Variable Rollo_SZ---------------------------------------------
if ((tonumber(fibaro:getValue(rollo, "value")) >= 80 )) then
fibaro:setGlobal("Rollo_SZ", "Auf")
fibaro:debug("Variable Rollo_SZ = Auf");
fibaro:sleep(1000);
end
--------------------------------------------------------------
if ((tonumber(fibaro:getValue(rollo, "value")) <= 10 )) then
fibaro:setGlobal("Rollo_SZ", "Zu")
fibaro:debug("Variable Rollo_SZ = Zu");
fibaro:sleep(1000);
end
--------------------------------------------------------------
if ((tonumber(fibaro:getValue(rollo, "value")) > 10 )) and ((tonumber(fibaro:getValue(rollo, "value")) < 80 )) then
fibaro:setGlobal("Rollo_SZ", "ZPos")
fibaro:debug("Variable Rollo_SZ = ZPos");
fibaro:sleep(1000);
end
fibaro:sleep(4000);
--------------------------------------------------------------
end
fibaro:sleep(4000);
-------------Variable Rollo_SZ gesetzt-------------------------------------------
fibaro:debug("Ende Rollo Variable Ändern");
--fibaro:killScenes(scene);
so, das ist Viel für einen rollo, sicher geht die programmierung evtl. auch noch eleganter. aber so klappts bei mir einwandfrei. man darf halt die rollos nicht mehr über die module manuell fahren, deshalb sind bei mir nur noch die szenen für auf/zu und Lüften (ZPos) bedienbar, alles andere ist für die benutzer unsichtbar.