Hallo zusammen
Wer könnte mir behilflich sein? Habe eine Abwesenheits Szene programmiert, klappt soweit sehr gut. Kleines Problem, das Licht löscht nicht wie erwartet nach vorgegebener Zeit. Wo habe ich einen Fehler eingebaut?
Vielen Dank…
--[[
%% properties
101 value
165 value
134 value
182 value
226 value
277 value
%% globals
--]]
local scene = 439
-- Licht
local licht_wz = tonumber(fibaro:getGlobalValue("licht_wz", "value"))
-------------------------------------------------------------------------------
-- Handys
local handy_willi = tonumber(fibaro:getGlobalValue("handy_willi", "value"))
local handy_yvonne = tonumber(fibaro:getGlobalValue("handy_yvonne", "value"))
-------------------------------------------------------------------------------
-- Bewegungsmelder
local bm_schlafz = tonumber(fibaro:getGlobalValue("bm_schlafz", "value"))
local bm_diele = tonumber(fibaro:getGlobalValue("bm_diele", "value"))
local bm_decke = tonumber(fibaro:getGlobalValue("bm_decke", "value"))
local bm_sued = tonumber(fibaro:getGlobalValue("bm_sued", "value"))
local bm_nord = tonumber(fibaro:getGlobalValue("bm_nord", "value"))
-------------------------------------------------------------------------------
--Sensoren
local tuere_eingang = tonumber(fibaro:getGlobalValue("tuere_eingang", "value"))
-------------------------------------------------------------------------------
local starttimer = 900 -- Zeit bis Aktivation (Sek)
local lichttimer = 15
local timer = (starttimer);
local timer1 = (lichttimer);
-------------------------------------------------------------------------------
-- Ist erste Zeit grösser als zweite dann "OR" sonst "AND" in Programmierung
local start = 0600 -- 20:00 = 2000
local ende = 0559 -- 05:30 = 0530
-------------------------------------------------------------------------------
local currentDate = os.date("*t");
local sourceTrigger = fibaro:getSourceTrigger();
local startSource = fibaro:getSourceTrigger();
-------------------------------------------------------------------------------
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()> 1)
then
--fibaro:debug("Es läuft mehr als eine Instanz");
fibaro:abort();
end
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
function DT(DATETIME)
local WD = {'Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'}
local M = {'Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'}
local tableDT= (os.date('*t', tonumber(DATETIME)))
tableDT.month = M[tonumber(tableDT.month)]
tableDT.wday = WD[tonumber(tableDT.wday)]
return ""..tableDT.wday ..', ' ..tableDT.day ..'. ' ..tableDT.month ..' ' ..tableDT.year ..' '..os.date " / %H:%M Uhr"
end
if (tonumber(fibaro:getValue(tuere_eingang, "value")) > 0)
then
if (tonumber(os.date("%H%M")) >= start or tonumber(os.date("%H%M")) <= ende)
and fibaro:getGlobalValue("AnwesenheitsCheck") == "Abwesend"
then
x= DT(os.date())
fibaro:debug (x)
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("tan",("Rückkehr nach Hause, Türe Eingang geöffnet... "));
Debug("orange",("Abwesenheit erkannt!"));
Debug("lime",(os.date("Variable um %H:%M Uhr auf ANWESENHEIT geschaltet!")));
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:setGlobal("AnwesenheitsCheck", "Anwesend");
fibaro:call(331, "pressButton", "1");
fibaro:abort()
end
end
-- Eingangstüre auf Anwesenheit erkannt, Timer ein
------------------------------------------------------------------------------------------------------------
if (tonumber(fibaro:getValue(tuere_eingang, "value")) > 0)
then
if (tonumber(os.date("%H%M")) >= start or tonumber(os.date("%H%M")) <= ende)
and fibaro:getGlobalValue("AnwesenheitsCheck") == "Anwesend"
then
while
(tonumber(fibaro:getValue(tuere_eingang, "value")) > 0) do
Debug("red","Türe Eingang meldet Status OFFEN..!");
Debug("cyan",(""..starttimer /60 .." Minuten Timer wird noch NICHT aktiviert!"));
Debug("white","Warten...");
fibaro:sleep(5*1000)
end
x= DT(os.date())
fibaro:debug (x)
zeit = os.time();
timer = (starttimer);
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("lime",(os.date("Türe Eingang wurde GESCHLOSSEN...")));
Debug("cyan",("Starte Timer..."));
Debug("cyan",(os.date("In "..starttimer /60 .." Minuten also um %H:%M Uhr wird ABWESENHEIT aktiviert!",zeit+starttimer)))
fibaro:debug("------------------------------------------------------------------------------------------");
-- Licht aus wenn noch an
------------------------------------------------------------------------------------------------------------
if (tonumber(fibaro:getValue(licht_wz, "value")) > 0)
then
zeit = os.time();
timer1 = (lichttimer);
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("yellow",(os.date("Licht ist noch EINGESCHALTET...")));
Debug("cyan",("Starte Timer..."));
Debug("cyan",(os.date("In "..lichttimer /60 .." Minuten also um %H:%M Uhr wird das Licht ausgeschaltet!",zeit+lichttimer)))
fibaro:debug("-------------------------------------------------------------------------------------------");
repeat
fibaro:sleep(1000);
timer1=timer1-1;
repeat
fibaro:sleep(1000);
timer=timer-1;
-- Wurde Eingangstüre wieder geöffnet?
------------------------------------------------------------------------------------------------------------
if (tonumber(fibaro:getValue(tuere_eingang, "value")) > 0)
then
while
(tonumber(fibaro:getValue(tuere_eingang, "value")) > 0) do
Debug("red",("Türe Eingang meldet innerhalb der Vorgegebenen "..starttimer /60 .." Minuten erneut OFFEN..."));
Debug("cyan","Timer wird zurückgestellt!");
Debug("white","Warten...");
timer = os.time();
fibaro:sleep(5*1000)
end
zeit = os.time();
timer = (starttimer);
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("lime",(os.date("Türe Eingang wurde GESCHLOSSEN...")));
--Debug("white",("Reaktivierung OK."));
Debug("cyan",(""..starttimer /60 .." Minuten Timer wird reaktiviert!"));
Debug("orange",(os.date("Ohne weitere Aktivität wird um %H:%M Uhr auf Abwesenheit geschaltet!",zeit+starttimer)))
fibaro:debug("------------------------------------------------------------------------------------------");
end
-- Anwesenheit erkannt, Szene stoppen
------------------------------------------------------------------------------------------------------------
if (tonumber(os.date("%H%M")) >= start or tonumber(os.date("%H%M")) <= ende)
and fibaro:getGlobalValue("AnwesenheitsCheck") == "Anwesend"
and (tonumber(fibaro:getValue(tuere_eingang, "value")) < 1)
and (tonumber(fibaro:getValue(bm_diele, "value")) > 0)
or (tonumber(fibaro:getValue(bm_schlafz, "value")) > 0)
or (tonumber(fibaro:getValue(bm_decke, "value")) > 0)
or (tonumber(fibaro:getValue(bm_sued, "value")) > 0)
or (tonumber(fibaro:getValue(bm_nord, "value")) > 0)
then
x= DT(os.date())
fibaro:debug (x)
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("white",(os.date("%H:%M Uhr BEWEGUNG registriert...")));
Debug("cyan",("Timer wird gestoppt!"));
Debug("red",(os.date("Abwesenheit wird NICHT aktiviert!")));
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:abort()
break
end
until (timer1 < 1)
Debug("cyan",("Timer abgelaufen, Licht wird ausgeschaltet..."));
fibaro:call(licht_wz, "turnOff");
--fibaro:call(handy_willi, "sendPush",os.date("(%d.%m.%Y) ABWESENHEIT um %H:%M Uhr AKTIVIERT!"));
Debug("gray",(os.date("Licht um %H:%M Uhr AUSGESCHALTET!")));
fibaro:debug("------------------------------------------------------------------------------------------");
until (timer < 1)
fibaro:setGlobal("AnwesenheitsCheck", "Abwesend");
fibaro:call(331, "pressButton", "2");
Debug("cyan",("Timer abgelaufen, Abwesenheit wird eingeschaltet..."));
--fibaro:call(handy_willi, "sendPush",os.date("(%d.%m.%Y) ABWESENHEIT um %H:%M Uhr AKTIVIERT!"));
Debug("orange",(os.date("Abwesenheit um %H:%M Uhr AKTIVIERT!")));
fibaro:debug("------------------------------------------------------------------------------------------");
end
end
end