Registry#
Registry to centralny rejestr wszystkich obiektów w vCLU. Każdy moduł (DOUT, DIN, Timer, CLU) jest zarejestrowany pod ścieżką i dostępny globalnie przez alias _.
Globalne zmienne#
| Zmienna | Typ | Opis |
|---|---|---|
_registry | table | Główny rejestr — obiekty indeksowane ścieżką |
_nameIndex | table | Lookup po nazwie → ścieżka |
_tagIndex | table | Lookup po tagu → lista obiektów |
_ | alias | Globalny alias do _registry z metodami |
Rejestracja obiektów#
Obiekty są rejestrowane podczas ładowania om.lua:
function registerObject(path, obj)
_registry[path] = obj
if obj._name and obj._name ~= "" then
_nameIndex[obj._name] = path
end
endKażdy obiekt w registry ma:
| Pole | Opis |
|---|---|
_lastState | Aktualny stan (wartość) |
_type | Typ obiektu (DOUT, DIN, Timer…) |
_name | Wyświetlana nazwa |
_registryPath | Pełna ścieżka w registry |
_mqttAccess | Poziom dostępu MQTT (full/readonly/hidden) |
_homekitAccess | Poziom dostępu HomeKit |
API Registry#
Pobieranie obiektów#
-- Po ścieżce
local dout = _:get("CLU.DOUT1")
-- Po nazwie
local lamp = _:get("Lampa salon")
-- Pattern matching (regex Lua)
local douts = _:find("CLU%.DOUT%d+")Zmiana stanu#
-- Sync: ustawia stan i emituje state_changed na StateBus
_:sync("CLU.DOUT1", 1)sync() jest kluczową metodą — nie tylko zmienia _lastState, ale też powiadamia wszystkie integracje (MQTT, HomeKit, WebSocket) o zmianie stanu.
Emitowanie zdarzeń#
-- Wyemituj event na obiekcie
_:event("CLU.DOUT_01.OnSwitchOn")Tagi#
-- Pobierz grupę obiektów po tagu
local lights = _:byTag("lights")
-- Wiele tagów
local outdoor = _:byTags("lights", "outdoor")
-- Lista wszystkich tagów
local tags = _:tags()byTag() zwraca RemoteGroup — proxy, które propaguje operacje na wszystkie obiekty w grupie.
Introspekcja#
-- Lista wszystkich obiektów (array of {path, type, name})
_:list()
-- Sformatowane podsumowanie
_:info()
-- Eksport do JSON
_:toJSON()Przykłady użycia#
Z poziomu user.lua#
function toggleAllLights()
local lights = _:byTag("lights")
-- toggle każdego światła w grupie
endZ poziomu Execute (debug/REPL)#
-- Endpoint /api/execute
_:list() -- pokaż wszystkie obiekty
_:get("CLU.DOUT1")._lastState -- odczytaj stan
_:sync("CLU.DOUT1", 1) -- zmień stanSynchronizacja z innym CLU#
Wywołane z zewnętrznego CLU via __go_send_command:
_:sync("CLU.DOUT1", value) -- aktualizuje stan + emituje state_changed
_:event("CLU.DOUT_01.OnSwitchOn") -- triggeruje event handler