Zeitgesteuerte Szene - Startzeit Unterschied bis knapp 60 Sekunden

Hallo zusammen,
mich hat es seit einiger Zeit verwundert warum meine Zeitgesteuerten Szenen nicht mehr exakt Starten.
Beispiel: Ich habe ein Licht welches am Morgen um 6:29 einschaltet. Mein Wecker (Fibaro unabhängig) macht sich um 6:30 bemerkbar.
Nun Schaltet das Licht ein und es kann sein das der Wecker kurz danach klingelt.
Ich dachte zuerst das es eventuell an den Szenen liegt oder die Zentrale mit was anderem (andere Szenen, Prüfen der Sensoren oder was auch immer beschäftigt ist.
Heute bin ich mehr per Zufall wohl auf das Problem gestossen.
Ich habe mal eine Testszene erstellt.
Das Problem falls es eines ist liegt in dieser Zeile --> setTimeout(tempFunc, 60*1000)

Wenn ich die Szene um hh:mm:55 speichere bekomme ich folgendes ergebniss. (Für mich wird die Szene 55 Sek zu spät ausgelöst.)

[DEBUG] 09:22:55: Test 1
[DEBUG] 09:22:55: Test 2
[DEBUG] 09:22:55: Vor Sleep
[DEBUG] 09:22:55: Nach Sleep
[DEBUG] 09:23:55: Test 2
[DEBUG] 09:23:55: Test ausgeführt
[DEBUG] 09:23:55: Vor Sleep
[DEBUG] 09:23:55: Nach Sleep

Wenn ich die Szene aber um hh:hh:02 Speicher sieht es so aus.

[DEBUG] 09:25:03: Test 1
[DEBUG] 09:25:03: Test 2
[DEBUG] 09:25:03: Vor Sleep
[DEBUG] 09:25:03: Nach Sleep
[DEBUG] 09:26:03: Test 2
[DEBUG] 09:26:03: Test ausgeführt
[DEBUG] 09:26:03: Vor Sleep
[DEBUG] 09:26:03: Nach Sleep

Nach dem Speichern wird die Szene ausgeführt und mit setTimeout(tempFunc, 60*1000) wird 60 Sekunden gewartet.
Das ist im Grunde ja OK.

Nun zu meiner Frage.
Ist es irgendwie möglich dies in den Szenen wo ich dies benötige anzupassen.
Ein änder auf setTimeout(tempFunc, 1*1000) sehe ich als wenig sinnvoll an.

Wäre um eine Lösung oder Tip Dankbar.

Gruss Roland

--[[
%% autostart
%% properties
%% weather
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();

function tempFunc()
fibaro:debug("Test 1");
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
		if (
 		( (currentDate.wday == 4) 
 		 and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "09:23")  
    )
		then
 		fibaro:debug("Test ausgeführt");
		end
  
  fibaro:debug("Vor Sleep");
setTimeout(tempFunc, 60*1000)
  fibaro:debug("Nach Sleep");
end

if (sourceTrigger["type"] == "autostart") then
  fibaro:debug("Test 1");
tempFunc()
else	 	
  fibaro:debug("Test Hand ausgeführt");
end

Taste dich langsam ran: lass die Szene eine Minute früher starten und baue eine Schleife ein, die max 60 Sekunden runterzählt und währenddessen prüft, ob sich die Minute geändert hat. Danach führe die gewünschten Aktionen aus. Dann bist du ziemlich sekundengenau dran.

Viele Grüße
Schnuckman

Hallo Roland,

das liegt an der Art und Weise wie das Home Center zeitgesteuerte Szenen startet. Diese werden nicht zum gewählten Zeitpunkt gestartet, sondern werden gestartet (Autostart, Trigger oder manuell), laufen permanent und prüfen alle 60 Sekunden ob die Uhrzeit zum starten erreicht ist.

Wenn Deine Szene beispielsweise um 08:03 und 12 Sekunden gestartet wurde, so läuft die Timeout Funktion 99 mal (100 Minuten) ohne, dass die IF Abfrage in 15-18 zutrifft. Erst beim Durchlauf um 09:23 UND 12 Sekunden ist diese wahr.

In welchem Szenario sind 59 Sekunden ein Problem?

Grüße
René