Hallo zusammen
Meine Szene “Abwesenheit” funktioniert soweit prima, dennoch möchte ich ein kleines Detail ergänzen, das ich einfach nicht hinkriege!
Wie im angehängten Skript ersichtlich wird die Variable “Abwesenheit” nach Ablauf des Timers also nach 30 Minuten aktiviert.
Gerne möchte ich die Zeit im Debug angezeigt haben wo der Timer effektiv abgelaufen ist.
Beispiel:
Es ist 14:00 Uhr, nach 30 Minuten also um 14:30 Uhr wird die Variable umgeschaltet!
Bin für jede Hilfe dankbar!!
Gruss fastsnake
--[[
%% properties
101 value
134 value
165 value
182 value
%% globals
--]]
-----------------------------------------------------------------------------------------------------------------------------------------
local scene = 324
local sensors = {101,134,165,182}
local licht = 128
local tv_licht = 14
local handy_willi = 189
local currentDate = os.date("*t");
--------------------------------------------
local start = 0600
local ende = 2100
local starttimer = 1800 --Sekunden
local sourceTrigger = fibaro:getSourceTrigger();
-----------------------------------------------------------------------------------------------------------------------------------------
-- Zeit 1500 = 15:00
---------------------Script-----------------
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
if (fibaro:countScenes()> 1)
then
--fibaro:debug("Es läuft mehr als eine Instanz");
fibaro:abort();
end
function getSensorStatus()
for i,n in ipairs(sensors) do
if (tonumber(fibaro:getValue(n, "value")) > 0) then
return 1;
end
end
return 0;
end
-- TV Simulator aus bei Anwesenheit
------------------------------------------------------------------------------------------------------------
if (fibaro:getSourceTriggerType() == 'property' and getSensorStatus() == 1)
then
if tonumber(fibaro:getValue(tv_licht, "value")) > 0
then
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
x= DT(os.date())
fibaro:debug (x)
fibaro:call(tv_licht, "turnOff"); -- TV Simulator ausgeschaltet
--fibaro:debug("------------------------------------------------------------------------------------------");
Debug("yellow",("TV Simulator ist noch eingeschaltet!"));
Debug("lime",(os.date("TV Simulator ausgeschaltet!")));
fibaro:debug("------------------------------------------------------------------------------------------");
end
end
-- Variable auf ABWESENHEIT vorgefunden
if (fibaro:getSourceTriggerType() == 'property' and getSensorStatus() == 1)
then
if fibaro:getGlobalValue("AnwesenheitsCheck") == "Abwesend"
then
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
x= DT(os.date())
fibaro:debug (x)
Debug("white",("Bewegung erkannt..."));
Debug("red",("Variable *AnwesenheitsCheck* auf ABWESEND vorgefunden!"));
Debug("lime",("Variable auf ANWESEND geschaltet..!"));
fibaro:setGlobal("AnwesenheitsCheck", "Anwesend")
elseif
-- BM Schalte Abwesenheit ein/aus
(fibaro:getSourceTriggerType() == 'property' and getSensorStatus() == 1)
then
if (tonumber(os.date("%H%M")) >= start and tonumber(os.date("%H%M")) <= ende)
then
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
x= DT(os.date())
fibaro:debug (x)
--ibaro:debug("------------------------------------------------------------------------------------------");
Debug("white",("Bewegung erkannt..."));
Debug("cyan",(starttimer /60 .. " Minuten Timer aktiviert..."));
fibaro:debug("------------------------------------------------------------------------------------------");
timer = os.time();
while os.time() - timer < starttimer do
fibaro:sleep(1000);
-- Timer zurücksetzen, wenn neue Bewegung erkannt wird innherhalb der Verzögerungszeit
if (fibaro:getSourceTriggerType() == 'property' and getSensorStatus() == 1)
then
if (tonumber(os.date("%H%M")) >= start and tonumber(os.date("%H%M")) <= ende)
then
timer = os.time();
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("white",("Erneute Bewegung erkannt!"));
Debug("cyan",("Timer wird zurückgesetzt..."));
Debug("orange",(os.date("Es ist %H:%M Uhr, ohne weitere Aktivität wird die Variable *AnwesenheitsCheck*")));
Debug("orange",(os.date("in " ..starttimer /60 .. " Minuten auf ABWESENHEIT geschaltet!")));
fibaro:debug("------------------------------------------------------------------------------------------");
end
end
end
end
-- Schalte Variable um, wenn Timer vollständig abgelaufen ist
if (tonumber(os.date("%H%M")) >= start and tonumber(os.date("%H%M")) <= ende)
then
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
x= DT(os.date())
fibaro:debug (x)
fibaro:setGlobal("AnwesenheitsCheck", "Abwesend")
--fibaro:debug("------------------------------------------------------------------------------------------");
Debug("cyan",(os.date("" ..starttimer /60 .. " Minuten Timer ist abgelaufen!")));
Debug("red",("Variable auf ABWESEND geschaltet!"));
Debug("orange",("Szene angehalten..."));
fibaro:debug("------------------------------------------------------------------------------------------");
fibaro:abort();
else
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
x= DT(os.date())
fibaro:debug (x)
--fibaro:debug("------------------------------------------------------------------------------------------");
--Debug("white",(os.date("Es ist der (%d.%m.%Y) %H:%M Uhr.")));
Debug("orange",("Abwesenheit wird von 06.00 Uhr bis 21.00 Uhr überwacht...!"))
Debug("red",("Innerhalb der Zeitbeschränkung, Abwesenheit wird NICHT aktiviert!"))
fibaro:debug("------------------------------------------------------------------------------------------");
end
end
end
if (sourceTrigger["type"] == "other")
then
if fibaro:getGlobalValue("AnwesenheitsCheck") == "Anwesend"
then
fibaro:setGlobal("AnwesenheitsCheck", "Abwesend")
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("red","Variable *AnwesenheitsCheck* auf ABWESEND geschaltet!")
fibaro:debug("------------------------------------------------------------------------------------------");
elseif
fibaro:getGlobalValue("AnwesenheitsCheck") == "Abwesend"
then
fibaro:setGlobal("AnwesenheitsCheck", "Anwesend")
fibaro:debug("------------------------------------------------------------------------------------------");
Debug("lime","Variable *AnwesenheitsCheck* auf ANWESEND geschaltet!")
fibaro:debug("------------------------------------------------------------------------------------------");
end
end