Narzędzia dev (Layer 2)#

Narzędzia eksploracji pozwalają AI czytać kod źródłowy, przeszukiwać pliki, przeglądać logi i badać pełny rejestr urządzeń z metadanymi. Wymagają włączonego Dev Mode.

Przegląd#

NarzędzieOpis
vclu_read_fileOdczyt pliku (Lua, dokumentacja, pluginy)
vclu_list_filesLista plików pasujących do wzorca glob
vclu_grepPrzeszukiwanie kodu regexem
vclu_logsLogi runtime z filtrowaniem
vclu_configKonfiguracja systemu (bez sekretów)
vclu_registryPełny rejestr urządzeń z metadanymi

vclu_read_file#

Odczytuje plik z katalogu danych vCLU. Limit rozmiaru: 100 KB.

Parametry#

ParametrTypWymaganyOpis
pathstringtakŚcieżka względna, np. a/user.lua, modules/init.lua

Dozwolone ścieżki#

WzorzecOpis
a/main.lua, a/user.lua, a/om.luaSystemowe pliki Lua
modules/**/*.luaModuły użytkownika
imports/proxy_*.luaPliki proxy OM
docs/ai/*.mdDokumentacja
plugins/**/*.lua, plugins/**/plugin.jsonKod źródłowy pluginów

Pliki z sekretami (.vclu.json, keys.json) są zawsze zablokowane.

Przykład odpowiedzi#

{
  "env": "runtime",
  "path": "modules/init.lua",
  "content": "require(\"tasmota_biurko\")\nrequire(\"biuro_auto\")\nprint(\"[MODULES] User modules initialized\")\n"
}

vclu_list_files#

Zwraca listę plików pasujących do wzorca glob. Wyniki ograniczone do dozwolonych ścieżek.

Parametry#

ParametrTypWymaganyOpis
patternstringtakWzorzec glob, np. modules/*.lua, docs/ai/*.md

Przykład odpowiedzi#

{
  "env": "runtime",
  "files": [
    { "path": "modules/init.lua", "size": 120, "modified": 1740900000 },
    { "path": "modules/biuro_auto.lua", "size": 850, "modified": 1740905000 },
    { "path": "modules/salda_expose.lua", "size": 1200, "modified": 1740906000 }
  ],
  "count": 3
}

vclu_grep#

Przeszukuje pliki regexem. Domyślnie szuka w *.lua, można zmienić wzorcem glob.

Parametry#

ParametrTypWymaganyOpis
patternstringtakWyrażenie regularne
globstringnieFiltr plików (domyślnie: *.lua)
max_resultsnumbernieMaks. wyników (domyślnie: 50, max: 200)

Przykład odpowiedzi#

{
  "env": "runtime",
  "matches": [
    { "file": "modules/biuro_auto.lua", "line": 5, "content": "local HOUR_ON = 17" },
    { "file": "modules/salda_expose.lua", "line": 12, "content": "expose(salda:get(\"fanSpeed\"), \"fan\", {" }
  ],
  "count": 2
}

vclu_logs#

Zwraca ostatnie wpisy z logu runtime, od najnowszych. Opcjonalny filtr regexem.

Parametry#

ParametrTypWymaganyOpis
limitnumbernieLiczba wpisów (domyślnie: 100, max: 1000)
filterstringnieRegex filtrujący po treści i źródle

Przykład odpowiedzi#

{
  "env": "runtime",
  "logs": [
    { "time": "2026-03-02T18:30:00Z", "level": "info", "source": "ExposedObjects", "message": "Exposed: salda:fanSpeed (type=fan)" },
    { "time": "2026-03-02T18:29:55Z", "level": "info", "source": "MODULES", "message": "User modules initialized" }
  ],
  "count": 2
}

Użycie z filtrem#

vclu_logs(filter: "error|warn", limit: 50) - pokaże tylko błędy i ostrzeżenia.


vclu_config#

Zwraca konfigurację systemu bez sekretów (bez kluczy API, haseł, tokenów).

Parametry#

Brak.

Przykład odpowiedzi#

{
  "env": "runtime",
  "devModeEnabled": true,
  "mcpBots": ["Claude", "Codex"]
}

vclu_registry#

Zwraca pełny rejestr urządzeń z metadanymi: area (pokój), group (grupa logiczna), tags, description. Obsługuje filtrowanie po wielu polach jednocześnie.

Parametry#

ParametrTypWymaganyOpis
filterobjectnieFiltr (wszystkie pola opcjonalne, łączone AND)

Pola filtra#

PoleTypOpis
typestringTyp urządzenia: switch, dimmer, cover, sensor, scene itp.
areastringPokój / strefa fizyczna
groupstringGrupa logiczna
tagstringTag do dopasowania
textstringWyszukiwanie w name, description, path

Przykład odpowiedzi#

{
  "env": "runtime",
  "devices": [
    {
      "path": "CLU220000592.DOU3328",
      "type": "switch",
      "name": "BIURO_LED",
      "state": 1,
      "readonly": false,
      "methods": ["toggle", "switchOn", "switchOff"],
      "area": "Biuro",
      "group": "Oświetlenie",
      "tags": ["led"],
      "description": "Oświetlenie LED w biurze"
    }
  ],
  "count": 1
}

Różnica: vclu_devices vs vclu_registry#

vclu_devices (Layer 1)vclu_registry (Layer 2)
Dev Modenie wymaganywymagany
Metadanearea, group, tags (jeśli wystawione)pełne metadane
Filtrowanietylko typetype, area, group, tag, text
Przeznaczeniesterowanieeksploracja i zrozumienie domu

Pole description - instrukcje dla AI#

Pole description w rejestrze urządzeń może zawierać zasady i ograniczenia dla AI:

expose(salda:get("fanSpeed"), "fan", {
    name = "Rekuperator",
    path = "salda:fanSpeed",
    area = "Techniczny",
    description = "Fan speed 0=off, 1=low, 2=medium, 3=high, 4=max. "
              .. "Never set to 0 when temperature outside < 5°C."
})

AI czyta description i stosuje się do zawartych w nim reguł. To sposób na komunikowanie ograniczeń bez pisania kodu walidacyjnego.

Registry a expose()#

Obiekty trafiają do _registry na dwa sposoby:

FunkcjaRegistryMQTT/HomeKit/MCPKiedy
registerObject(path, obj)taknieHardware z om.lua, obiekty wewnętrzne
expose(obj, type, options)tak (automatycznie)takSceny, pluginy, Tasmota, cokolwiek do wystawienia

expose() automatycznie dodaje obiekt do _registry, jeśli go tam jeszcze nie ma. Dzięki temu _registry:get() działa zarówno dla hardware jak i scen/pluginów.

expose(scene, "scene", { path = "scene:movie" })
_registry:get("scene:movie"):execute()  -- działa

Następny krok#

Sandbox i promocja - jak AI pisze i wdraża kod Lua