om.lua (read-only)#
om.lua to plik generowany przez Object Manager (OM) — aplikację desktopową Grenton. Zawiera definicje wszystkich obiektów, modułów i event handlerów.
**vCLU nie modyfikuje om.lua.** Plik jest ładowany raz przy starcie i traktowany jako read-only. Wszelkie zmiany w konfiguracji modułów robi się w OM.
Jak OM generuje om.lua#
- OM łączy się z vCLU przez discovery protocol (UDP broadcast)
- Pobiera
config.txtprzez TFTP — lista modułów i ich typów HW - Na podstawie tych danych generuje
om.luaz definicjami modułów i IO
vCLU dostarcza tylko bazowy obiekt CLU — moduły i ich IO są dodawane przez OM.
Struktura pliku#
Typowy om.lua wygląda tak:
-- Lokalny CLU (GATE)
CLU520046772 = GATE:new(5000, 0xC0A800DA, ...)
-- Zdalne CLU (obiekty proxy)
CLU221000290 = OBJECT:new(1, 0xC0A80003, "CLU221000290")
CLU220000592 = OBJECT:new(1, 0xC0A80005, "CLU220000592")
-- Moduły lokalne (generowane przez OM na podstawie config.txt)
-- DOUT1 = ...
-- DIN1 = ...
-- Event handler
function OnInit()
CLU520046772:set(1, 10000) -- ustaw feature
testInit(nil) -- wywołaj funkcję z user.lua
end
-- Binding eventu
CLU520046772:add_event(0, OnInit) -- EVENT_ON_INITKluczowe elementy#
GATE:new() — lokalny CLU#
CLU520046772 = GATE:new(port, ipHex, ...)Tworzy główny obiekt CLU z portem nasłuchiwania i adresem IP w hex.
OBJECT:new() — zdalny CLU#
CLU221000290 = OBJECT:new(typeId, ipHex, name)Proxy do komunikacji z innymi kontrolerami w sieci Grenton.
add_event() — binding eventów#
module:add_event(eventId, callback)Podpina funkcję (zwykle zdefiniowaną w user.lua) pod event modułu.
Zmienne użytkownika#
OM może generować inicjalizację zmiennych user:
setVar("nightMode", false)
setVar("temperature_threshold", 22)Typy modułów HW#
OM rozpoznaje moduły na podstawie typów sprzętowych z config.txt:
| Typ HW | Moduł | Opis |
|---|---|---|
0x1e | DOUT8T | 8 wyjść cyfrowych (tristate) |
0x15 | RELAY4 | 4 przekaźniki |
0x14 | DIN8 | 8 wejść cyfrowych |
Ładowanie#
om.lua jest ładowany po user.lua przez state.DoFile():
err := le.state.DoFile(omPath)
if err != nil {
return fmt.Errorf("failed to load om.lua: %w", err)
}W przeciwieństwie do user.lua, błąd w om.lua przerywa inicjalizację — bez definicji obiektów system nie może działać.
Nie dodawaj init(nil)#
OM nie generuje init(nil) w om.lua — i vCLU też tego nie potrzebuje. Inicjalizacja odbywa się przez SYSTEM.Init() → EVENT_ON_INIT → OnInit().