Permissions#

Dostępne API w sandboxie#

Lua standard (bezpieczny podzbiór)#

ModułDostępne
stringTak — string.*
tableTak — table.*
mathTak — math.*
osTylko os.time, os.date, os.difftime, os.clock
Globalneprint, pairs, ipairs, type, tostring, tonumber

vCLU API#

APIDostępOpis
Plugin APIPełnyplugin:httpRequest(), plugin:poller(), itp.
JSONPełnyJSON:encode(), JSON:decode()
LoggerPełnyplugin:log(), plugin:logSafe()
EventBuson/emitSubskrypcja i emisja eventów
Registry (odczyt)Pełny_:get(), _:list(), _:find()
Registry (zapis)Tylko own namespaceplugins.{namespace}.{shortId}.*
HTTPPełnyplugin:httpRequest() (HTTP/HTTPS)
MQTTPełnyplugin:mqttPublish(), plugin:mqttSubscribe()
KV StoreOwn pluginIzolacja per-plugin
TimeryPełnyZ auto-cleanup

Expose API#

FunkcjaDostępOpis
plugin:sensor()TakTworzenie read-only sensorów
plugin:control()TakTworzenie read-write kontrolek
plugin:get()TakPobranie sensora/kontrolki
expose()Z kontekstemŚcieżki z prefiksem pluginu

Zablokowane funkcje#

FunkcjaPowó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/HTTPSTak — przez plugin:httpRequest()
MQTTTak — przez plugin:mqttPublish/Subscribe()
TCP/UDP suroweNie
FilesystemNie