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#

graph TD
    config[".vclu.json<br/><i>Konfiguracja + lista pluginów</i>"]
    manager["Plugin Manager<br/><i>Instalacja, load/unload</i>"]
    subgraph "Pluginy (init.lua)"
        w["weather<br/>sandbox"]
        t["telegram<br/>sandbox"]
        s["sun-position<br/>sandbox"]
    end

    config --> manager
    manager --> w
    manager --> t
    manager --> s

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