Hallo zusammen,
ich bin brandneu hier in der Community und freue mich auf den Austausch! Da ich für meine eigenen Projekte (ein OpenTelemetry Receiver) eine saubere Integration in Go benötigt habe, ist ein natives Go-Paket für die Interaktion mit der Viessmann REST API entstanden, das ich euch heute gerne vorstellen möchte.
Das SDK selbst ist Open-Source und unter der ISC-Lizenz (vergleichbar mit MIT/BSD) veröffentlicht.
Was wird aktuell unterstützt?
Das Paket implementiert derzeit die IoT-Endpunkte, die für mein Projekt am wichtigsten sind:
Installations: Abfrage der im System hinterlegten Installationen (/iot/v2/equipment/installations).
Device Features: Abruf aller Features eines Geräts innerhalb einer Installation (/iot/v2/features/.../features).
Single Feature: Gezielte Abfrage eines spezifischen Features über dessen featureName.
Im Repository ist zudem das Tool vicli enthalten. Es dient als Referenzimplementierung und hilft dabei, schnell mit der API zu starten:
OAuth-Login: Einfache Erstellung und lokale Speicherung von Access-Tokens via PKCE-Flow (Browser-basiert).
Discovery: Auflisten von Installationen, Gateways und Devices (vicli ls).
Debugging: Abfrage und Inspektion einzelner Features direkt auf der Kommandozeile.
Das Projekt steht noch am Anfang (Alpha-Status) und wird momentan primär mit einer VitoCal 250 Wärmepumpe getestet. Da die Viessmann API sehr umfangreich ist, gibt es noch viel zu tun – beispielsweise Unterstützung weiterer Gerätetypen und Schreibzugriff auf Features.
Wer also Lust hat, mitzuwirken, Bugs zu fixen oder neue Endpunkte hinzuzufügen: Pull Requests und Feedback sind herzlich willkommen!
Dokumentation: https://pkg.go.dev/gitlab.com/octo42/viessmann
Repository: gitlab.com/octo42/viessmann
Ich freue mich auf eure Rückmeldungen!
Viele Grüße,
—octo
Hallo Octo,
hast du das mit den schreibrechten schon gelöst? Ich hab auch gebastelt, aber insb. ein befehl für setschedule fehlt. Möchte meine Zirkulationspumpe via Click (ausserhalb der ViCare App) starten.
BG, Stephan
Hi Stephan,
bisher ist das Paket read-only, Schreibzugriffe fehlen noch komplett. Ich hab dazu gerade ein Issue aufgemacht, um die möglichen Optionen zu diskutieren: https://gitlab.com/octo42/viessmann/-/work_items/1
Kurz zusammengefasst sehe ich zwei Optionen: Entweder ein einfaches Client.ExecuteFeature(…, params map[string]any) ohne clientseitige Validierung, oder eine reichhaltigere Lösung als Methode auf Feature mit getypten Parametern und Validierung anhand des params-Schemas aus der API. Was hälst du für den besseren Weg?
Mit setSchedule hast du dir natürlich gleich den schwierigsten Fall rausgesucht, weil Schedule ein zusammengesetzter Typ mit komplexen Validierungsregeln ist. 😉
LG
—octo