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#

FunkcjaCo 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:

CzasMilisekundy
1 sekunda1000
30 sekund30000
1 minuta60000
5 minut300000
1 godzina3600000

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żyje every().