Wprowadzenie do pluginów#

Pluginy rozszerzają vCLU o integracje z zewnętrznymi API, urządzeniami i usługami. Każdy plugin działa w izolowanym sandboxie z dostępem do Plugin API v2.

Dostępne pluginy#

PluginOpisTyp
weatherPogoda z OpenWeatherMap — temp, wilgotność, ciśnienie, wiatrHTTP + poller
time-syncSynchronizacja czasu z WorldTimeAPI — timezone, drift, DSTHTTP + poller
sun-positionPozycja słońca i księżyca — wschód/zachód, azymut, fazaObliczenia NOAA
telegramBot Telegram — wysyłanie wiadomości, polling komendHTTP + polling
salda-recuperatorSterowanie rekuperatorem Salda — temperatury, wentylatorHTTP + Basic Auth
supla-power-meterLicznik energii Supla 3-fazowy — moc, napięcie, prądHTTP + Direct Link
influx-metricsKolektor metryk InfluxDB — Line Protocol, batchingFactory
exampleSzablon z przykładami wszystkich APIDemo/template

Szybki start#

1. Instalacja z UI#

/plugins → wybierz plugin → Install → wypełnij konfigurację → Enable.

2. Instalacja manualna#

Skopiuj plugin do plugins/vclu--weather/, dodaj wpis w .vclu.json:

{
  "plugins": {
    "installed": [
      {
        "id": "@vclu/weather",
        "version": "1.0.0",
        "enabled": true,
        "repository": "vCLU Official",
        "config": {
          "apiKey": "your-key",
          "city": "Warsaw"
        }
      }
    ]
  }
}

3. Użycie w user.lua#

local weather = Plugin.getPlugin("@vclu/weather")

if weather and weather:isReady() then
    local temp = weather:getTemperature()
    Logger:getShared():info("Temperatura: " .. temp .. "°C")
end

-- Subskrypcja eventów
EventBus:getShared():on("weather:changed", function(data)
    if data.temp < 0 then
        _:byTag("ogrzewanie"):on()
    end
end)

4. Expose do Home Assistant#

local weather = Plugin.getPlugin("@vclu/weather")
if weather then
    local tempSensor = weather:get("temperature")
    if tempSensor then
        expose(tempSensor, "temperature", {
            name = "Temperatura zewnętrzna",
            unit = "°C"
        })
    end
end

Architektura#

┌─────────────────────────────────────┐
│            .vclu.json               │  Konfiguracja + lista pluginów
├─────────────────────────────────────┤
│         Plugin Manager              │  Instalacja, load/unload
├──────────┬──────────┬───────────────┤
│ weather  │ telegram │ sun-position  │  Pluginy (init.lua)
│ sandbox  │ sandbox  │ sandbox       │  Izolacja + resource tracking
└──────────┴──────────┴───────────────┘

Każdy plugin:

  • Ma własny katalog z plugin.json + init.lua
  • Działa w izolowanym środowisku Lua
  • Ma dostęp tylko do swojego namespace w rejestrze
  • Zasoby (timery, eventy, MQTT) auto-czyszczone przy unload