Permissions#
Dostępne API w sandboxie#
Lua standard (bezpieczny podzbiór)#
| Moduł | Dostępne |
|---|
string | Tak — string.* |
table | Tak — table.* |
math | Tak — math.* |
os | Tylko os.time, os.date, os.difftime, os.clock |
| Globalne | print, pairs, ipairs, type, tostring, tonumber |
vCLU API#
| API | Dostęp | Opis |
|---|
| Plugin API | Pełny | plugin:httpRequest(), plugin:poller(), itp. |
| JSON | Pełny | JSON:encode(), JSON:decode() |
| Logger | Pełny | plugin:log(), plugin:logSafe() |
| EventBus | on/emit | Subskrypcja i emisja eventów |
| Registry (odczyt) | Pełny | _:get(), _:list(), _:find() |
| Registry (zapis) | Tylko own namespace | plugins.{namespace}.{shortId}.* |
| HTTP | Pełny | plugin:httpRequest() (HTTP/HTTPS) |
| MQTT | Pełny | plugin:mqttPublish(), plugin:mqttSubscribe() |
| KV Store | Own plugin | Izolacja per-plugin |
| Timery | Pełny | Z auto-cleanup |
Expose API#
| Funkcja | Dostęp | Opis |
|---|
plugin:sensor() | Tak | Tworzenie read-only sensorów |
plugin:control() | Tak | Tworzenie read-write kontrolek |
plugin:get() | Tak | Pobranie sensora/kontrolki |
expose() | Z kontekstem | Ścieżki z prefiksem pluginu |
Zablokowane funkcje#
| Funkcja | Powód |
|---|
os.execute() | Brak dostępu do shell |
io.* | Brak dostępu do plików |
loadfile(), dofile() | Brak dynamicznego ładowania kodu |
load(), loadstring() | Brak kompilacji kodu runtime |
rawset(), rawget() | Brak obejścia metatable |
debug.* | Brak manipulacji debuggerem |
_G (modyfikacja) | Brak zmiany globalnego środowiska |
Ograniczenia registry#
Plugin może zapisywać tylko do swojego namespace:
-- OK:
plugin:upsertObject("sensor", {value = 0})
-- → plugins.vclu.weather.sensor
-- BŁĄD:
_registry["CLU.DOUT1"] = something
-- → error: Plugin can only write to own namespace
Odczyt z dowolnej ścieżki jest dozwolony:
local lamp = _:get("CLU.DOUT1") -- OK (read-only)
Izolacja między pluginami#
- Każdy plugin ma własne izolowane środowisko Lua
- Pluginy nie widzą zmiennych lokalnych innych pluginów
- Komunikacja między pluginami przez:
- Events (
plugin:emit() / plugin:on()) - Registry (
plugin:getObject() z pełną ścieżką) Plugin.getPlugin() → dostęp do public API
Sieć#
| Protokół | Dostęp |
|---|
| HTTP/HTTPS | Tak — przez plugin:httpRequest() |
| MQTT | Tak — przez plugin:mqttPublish/Subscribe() |
| TCP/UDP surowe | Nie |
| Filesystem | Nie |