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#

ZmiennaTypOpis
_registrytableGłówny rejestr — obiekty indeksowane ścieżką
_nameIndextableLookup po nazwie → ścieżka
_tagIndextableLookup po tagu → lista obiektów
_aliasGlobalny 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
end

Każdy obiekt w registry ma:

PoleOpis
_lastStateAktualny stan (wartość)
_typeTyp obiektu (DOUT, DIN, Timer…)
_nameWyświetlana nazwa
_registryPathPełna ścieżka w registry
_mqttAccessPoziom dostępu MQTT (full/readonly/hidden)
_homekitAccessPoziom 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
end

Z poziomu Execute (debug/REPL)#

-- Endpoint /api/execute
_:list()                        -- pokaż wszystkie obiekty
_:get("CLU.DOUT1")._lastState  -- odczytaj stan
_:sync("CLU.DOUT1", 1)         -- zmień stan

Synchronizacja 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