hallo Ich bräuchte mal eure Hilfe habe mir diesesn LUA code entsprechent angepasst.
Es geht um die Automatische Steuerung der Rolladen bei sonne via Motion Sensor. Sie Soll den LUX messen. Ist ein schwellwert erreicht dann nach x Zeit runter fällt der LUX unter einen schwellwert dann nach x Zeit hoch. leider geht das so nicht wie ich mir das Vorstelle mit unter gar nicht
ich habe die Variablen angelegt
SunFirstMax = 0
SunFirstMin = 0
TagNacht mit 0 & 1
RolloSunDown mit 0 & 1
hier der Code vieleicht mache ich ja was falsch ?? wäre schön wenn jemand helfen könnte Vielen Dank
–[[
%% autostart
%% properties
320 value
%% globals
–]]
local startSource = fibaro:getSourceTrigger();
function tempFunc()
if (tonumber(fibaro:getGlobalValue(“TagNacht”)) == tonumber(“1”) ) then
local startSunLux = 4100; – über 4100 Lux für zu
local startSunDelay = 300000; – 3 Min bis zu
local endSunLux = 1000; – unter 1000 Lux für auf
local endSunDelay = 300000; – 3 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(320, “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) – 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(133, “setValue”, “45”);
fibaro:call(72, “setValue”, “45”);
–fibaro:call(113, „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)
–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(133, “open”);
fibaro:call(72, “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(133, “open”);
fibaro:call(72, “open”);
–fibaro:call(118, „open“);
–fibaro:call(120, „open“);
fibaro:setGlobal(“RolloSunDown”,0);
else
fibaro:debug(“Manueller sofortiger Sonnenschutz…”);
fibaro:call(133, “setValue”, “45”);
fibaro:call(72, “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