Timery#
Timery pozwalają wykonywać akcje z opóźnieniem lub cyklicznie. Używasz ich do automatyzacji typu “wyłącz światło po 5 minutach” albo “sprawdzaj czujnik co 30 sekund”.
Dostępne funkcje#
| Funkcja | Co robi |
|---|---|
after(ms, fn) | Wykonuje funkcję raz, po zadanym czasie (w milisekundach) |
every(ms, fn) | Wykonuje funkcję cyklicznie, co zadany czas |
cancel(id) | Zatrzymuje wcześniej utworzony timer |
Każda z tych funkcji zwraca identyfikator timera (liczbę), który możesz później przekazać do cancel().
Przykłady#
Automatyczne wyłączenie światła#
-- Wylacz swiatlo w salonie po 5 minutach
after(5 * 60 * 1000, function()
lampka_salon:switchOff()
end)Cykliczne sprawdzanie czujnika#
-- Co 30 sekund sprawdzaj temperature
every(30000, function()
local temp = czujnik_temp:getValue()
if temp > 25 then
wentylator:switchOn()
end
end)Opóźnione powiadomienie#
-- Jesli drzwi sa otwarte dluzej niz 2 minuty - zaloguj ostrzezenie
local timer_drzwi = nil
drzwi:onChange(function(val)
if val == 1 then
timer_drzwi = after(120000, function()
log.warn("Drzwi otwarte dluzej niz 2 minuty!")
end)
else
if timer_drzwi then
cancel(timer_drzwi)
timer_drzwi = nil
end
end
end)Jednostki czasu#
Czas podajesz w milisekundach. Przydatne przeliczniki:
| Czas | Milisekundy |
|---|---|
| 1 sekunda | 1000 |
| 30 sekund | 30000 |
| 1 minuta | 60000 |
| 5 minut | 300000 |
| 1 godzina | 3600000 |
Dobre praktyki#
- Callbacki timerów powinny być krótkie - długi callback blokuje cały system (MQTT, GPIO, inne timery).
- Nie tworzysz timerów w pętli bez kontroli - możesz szybko wyczerpać limit (maks. 1000 aktywnych).
- Minimalny interwał dla
every()to 10 ms, ale w praktyce używaj wartości > 100 ms. - Maksymalny interwał to 24 godziny (86 400 000 ms).
Co się dzieje przy przeładowaniu#
Timery żyją tylko do momentu przeładowania Lua runtime (np. po zmianie kodu w edytorze lub przez vclu_reload). Po przeładowaniu wszystkie timery są kasowane i tworzone od nowa przy ładowaniu modułów.
Agent AI często używa timerów w generowanym kodzie automatyzacji. Jeśli poprosisz go o “wyłącz światło po 10 minutach” - użyje
after(). Jeśli o “sprawdzaj co minutę” - użyjeevery().