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