Runtime & Lua#
To jest serce vCLU. Cały system opiera się na silniku Lua 5.1 (gopher-lua) osadzonym w procesie Go. Lua odpowiada za logikę automatyki, obsługę zdarzeń, timery, komunikację HTTP i zarządzanie modułami.
Jak to działa#
graph TD
subgraph Go["Go Process"]
subgraph Engine["LuaEngine"]
lstate["LState<br/><i>Lua VM</i>"]
timermgr["TimerMgr<br/><i>Go</i>"]
lstate --> runloop
timermgr --> runloop
runloop["RunLoop (10ms)"]
runloop --> proc_timers["ProcessTimers()"]
runloop --> proc_http["ProcessHTTPServer()"]
runloop --> proc_gpio["PollGPIOInputs()"]
end
httpmgr["HTTPManager"]
kvstore["KVStore"]
gpiomgr["GPIOManager"]
endGłówna pętla (RunLoop) działa z tickiem co 10ms i obsługuje:
- Timery - setTimeout/setInterval z gopher-lua
- HTTP server - wbudowany serwer Lua dla endpointów
- GPIO polling - odczyt stanów wejść cyfrowych
Cały dostęp do LState jest chroniony mutexem (sync.RWMutex) - gopher-lua nie jest thread-safe.
Sekcje#
| Strona | Opis |
|---|---|
| Model runtime | Inicjalizacja, bootstrap, pętla główna |
| Registry | Centralny rejestr obiektów |
| EventBus | System zdarzeń |
| Timery | setTimeout, setInterval, Timer module |
| Helpery | Sceny, sekwencje, matematyka, logowanie, debug |
| HTTP | Klient HTTP, serwer HTTP, HttpListener |
| Storage | Persystentny KV store |
| Data i czas | os.time, os.date, harmonogramy |
| Zdalne CLU | Import om.lua, proxy, protokol UDP |
| Parsery | json, xml, datetime, color |
| Wlasne moduly | Katalog modules/, require(), struktura |
| Dashboardy | Publiczne dashboardy z widgetami, wykresami |
| Metryki | Dane historyczne (temperatura, wilgotność, wykresy) |
| Debugowanie | Execute, REPL, introspekcja |
| Logi | System logowania |