Debugowanie#
vCLU ma wbudowane narzędzia do debugowania runtime Lua — endpoint Execute, introspekcję registry i debug EventBus/StateBus.
Execute — REPL przez HTTP#
Endpoint /api/execute pozwala wykonać dowolny skrypt Lua w działającym silniku:
curl -X POST http://vclu:8080/api/execute \
-H "Content-Type: application/json" \
-d '{"script": "_:list()"}'Tryb wyrażenia#
Pojedyncze wyrażenia są automatycznie opakowane i zwracają wartość:
-- Zwraca wynik
_:list()
_:get("CLU.DOUT1")._lastState
1 + 1Wewnętrznie wrapper:
__vclu_result__ = (function() return <wyrażenie> end)()Tryb instrukcji#
Gdy wrapper nie zadziała, skrypt jest wykonywany bezpośrednio:
-- Wielolinijkowe instrukcje
_:sync("CLU.DOUT1", 1)
print("done")Output z print() jest przechwytywany przez __vclu_print_output__.
Bezpieczeństwo#
- Execute trzyma lock na całym
LStatepodczas wykonania dofile()iloadfile()są zablokowane- Dostęp chroniony auth (Bearer token) w trybie produkcyjnym
Introspekcja Registry#
-- Lista wszystkich obiektów z typami i nazwami
_:list()
-- Czytelne podsumowanie
_:info()
-- Szukaj po wzorcu (Lua pattern)
_:find("CLU%.DOUT%d+")
-- Pełny eksport JSON
_:toJSON()
-- Odczytaj stan konkretnego obiektu
_:get("CLU.DOUT1")._lastState
_:get("CLU.DOUT1")._typeDebug EventBus#
-- Wypisz wszystkie zarejestrowane eventy i callbacki
EventBus:getShared():debug()Loguje listę event key → callback count.
Debug StateBus#
-- Wypisz wszystkie listenery zmian stanu
StateBus:debug()Przykłady użycia#
Sprawdzenie stanu systemu#
# Lista obiektów
curl -s -X POST http://vclu:8080/api/execute \
-d '{"script": "_:info()"}'
# Stan konkretnego wyjścia
curl -s -X POST http://vclu:8080/api/execute \
-d '{"script": "_:get(\"CLU.DOUT1\")._lastState"}'Zmiana stanu na żywo#
# Włącz wyjście
curl -s -X POST http://vclu:8080/api/execute \
-d '{"script": "_:sync(\"CLU.DOUT1\", 1)"}'
# Wyemituj event
curl -s -X POST http://vclu:8080/api/execute \
-d '{"script": "_:event(\"CLU.DOUT_01.OnSwitchOn\")"}'Testowanie timerów#
-- Jednorazowy timer za 3s
EventBus:getShared():setTimeout(function()
print("timer fired!")
end, 3000)Ograniczenia#
Execute()może zwracać wartości tylko z pojedynczych wyrażeń — wieloinstrukcyjne skrypty nie zwracają wartości- Długie skrypty blokują main loop (10ms tick) — unikaj ciężkich operacji
- Brak breakpointów / step debugging — tylko print-based debugging