Abwesenheit

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
  

Habe das Skript nicht ausprobiert. Du willst nur eine einfache Debugausgabe der Zeit?

Dann musst Du nur die Zeile
Debug("white",(os.date("Es ist der (%d.%m.%Y) %H:%M Uhr.")))

überall nach
fibaro:setGlobal("AnwesenheitsCheck", "Abwesend")
einfügen. Oder verstehe ich dich falsch?

Hallo Ändy
Vielen Dank für Deine Antwort, ja Du hast mich nicht richtig verstanden. Ich möchte die zukünftige Zeit angezeigt bekommen, wann die Variable
umgeschaltet wird. Also die Zeit vom Starttimer zur Systemzeit addieren und im Debug ausgeben.
Debug("orange",(os.date("Es ist %H:%M Uhr, ohne weitere Aktivität wird die Variable AnwesenheitsCheck <strong>um %H:%M auf ABWESEND geschaltet!</strong>")));
Die zweite Uhrzeit ist die Systemzeit plus die Timerzeit.
Gruss fastsnake

Natürlich ohne (Fettschrift Darstellung geht offenbar nicht im Script :frowning:
Debug("orange",(os.date("Es ist %H:%M Uhr, ohne weitere Aktivität wird die Variable AnwesenheitsCheck um %H:%M auf ABWESEND geschaltet!")));

Hab die Lösung gefunden!
Funktioniert bestens, vielen Dank für Deine Hilfe…
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("steelblue",("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     
    zeit = os.time();    
    timer = os.time();
    fibaro:debug("------------------------------------------------------------------------------------------");         
    Debug("white",("Erneute Bewegung erkannt!"));
    Debug("cyan",("Timer wird zurückgesetzt..."));
    Debug("steelblue",(os.date("Es ist %H:%M Uhr, ohne weitere Aktivität wird die Variable *AnwesenheitsCheck*")));
    --Debug("steelblue",(os.date("in " ..starttimer /60 .. " Minuten auf ABWESENHEIT geschaltet!")));  
    Debug("steelblue",(os.date("um %H:%M Uhr auf ABWESENHEIT geschaltet!",starttimer+zeit)))
    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("steelblue",("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("steelblue","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
  

Gerne würde ich hier noch einbauen welcher Melder getriggert hat. Vielleicht kann mir jemand auf die Sprünge helfen…!
Vielen Dank schonmal.
Gruss fastsnake