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#
┌─────────────────────────────────────────────┐
│ Go Process │
│ ┌───────────────────────────────────────┐ │
│ │ LuaEngine │ │
│ │ ┌─────────┐ ┌──────────┐ │ │
│ │ │ LState │ │ TimerMgr │ │ │
│ │ │ (Lua VM)│ │ (Go) │ │ │
│ │ └────┬────┘ └─────┬────┘ │ │
│ │ │ │ │ │
│ │ ┌────▼──────────────▼────────────┐ │ │
│ │ │ RunLoop (10ms) │ │ │
│ │ │ • ProcessTimers() │ │ │
│ │ │ • ProcessHTTPServer() │ │ │
│ │ │ • PollGPIOInputs() │ │ │
│ │ └────────────────────────────────┘ │ │
│ └───────────────────────────────────────┘ │
│ │
│ HTTPManager · KVStore · GPIOManager │
└─────────────────────────────────────────────┘Głó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 |
| user.lua | Skrypty użytkownika |
| om.lua | Obiekty wygenerowane przez OM (read-only) |
| 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 |
| Debugowanie | Execute, REPL, introspekcja |
| Logi | System logowania |