NEU! UPGRADE IP 11 verfügbar!
NEU! LICHTWIDGET - DPT 7.600 - Logik Manager Update - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/B9MUEJj2

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur VISU
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[Erfahrungsbericht] [V3.5.1]/[V4.0 IP3] Viessmann API - Erfahrungsbericht und Fragen

Wissen, Planung & Diskussion zur Unterstützung von Rest-API & Webabfragen im Timberwolf Server.
Stellt uns hier Eure Projekte und Ideen vor.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Benutzeravatar

Ersteller
speckenbuettel
Reactions:
Beiträge: 212
Registriert: Mo Jun 27, 2022 9:30 am
Hat sich bedankt: 193 Mal
Danksagung erhalten: 121 Mal

[V3.5.1]/[V4.0 IP3] Viessmann API - Erfahrungsbericht und Fragen

#1

Beitrag von speckenbuettel »

Hallo,

seitdem ich meinen Timberwolf im Keller habe bin ich hin- und hergerissen ob der Frage, ob ich meine Viessmann-Heizung mit einem KNX-Modul (Vitogate 200, Typ KNX) aufrüsten soll oder den TWS auf irgendeine Weise für die Integration in die Hausautomation heranziehen kann.

Das KNX-Modul ist sicher die robusteste Methode, aber auch überzogen teuer (ca. 1000 Euro). Und da Viessmann leider sehr sparsam mit Informationen ist, ist vor dem Kauf nicht wirklich klar welche Datenpunkte das Modul beherrscht und wie tief die Integration der Heizung in die Hausautomation damit wirklich ist. Hat hier jemand Erfahrungen damit und Empfehlungen?

Seit 2016 habe ich das Vitoconnect-100-Modul und kann daher die Heizung über die ViCare-App steuern. Aber zum einen ist der Funktionsumfang stark begrenzt und zum anderen ist eine Insel-App natürlich keine Lösung im Sinne einer ganzheitlichen Hausautomation.
Und da die Heizung nun mal der größte Energieverbraucher im Haus ist, sehe ich deren Einbindung/Automation/Steuerung als essentiell an.

Nachdem ich erste (positive!) Gehversuche mit der HTTP-API im TWS gemacht habe, versuche ich mich seit einigen Tagen wieder verstärkt mit der Viessmann-API.

Die Dokumentation unter https://documentation.viessmann.com ist meiner Erfahrung nach eher bescheiden, aber mit viel Herumprobieren bin ich ein paar Schritte weitergekommen.
Leider ist das Access Token nur für 10 Minuten gültig und ich habe noch keine Möglichkeit gefunden, das Refreshing des Tokens mittels TWS-HTTP-API zu automatisieren, aber ich arbeite daran. Falls hier schon jemand weiter ist bin ich für Tipps natürlich offen :-)

Mit einem manuell erstellten Access Token ist der Zugriff auf die Viessmann-API im TWS kein Problem.
Serverdaten wie folgt:
Bild

Das Einstellen von Werten gestaltet sich einfacher als das Auslesen, daher zunächst einmal dazu.

Mit der Abfrage https://api.viessmann.com/iot/v1/equipm ... }/features (diese funktioniert im eingeloggten (Viessmann-Konto) Zustand auch im Webbrowser) bekommt man ein umfangreiches JSON mit allen Features, die die jeweilige Anlage unterstützt. Die Paramater installationsID, gatewaySerial und deviceId kann man (ebenfalls im eingeloggten Zustand im Webbrowser) über folgende Abfrage in Erfahrung bringen: https://api.viessmann.com/iot/v1/equipm ... eways=true.

Wenn man nun die Features der eigenen Anlage kennt kann man zu jedem Feature detaillierte Informationen abfragen, z. B. zum Sollwert des Warmwassers: https://api.viessmann.com/iot/v1/equipm ... ature.main
Das funktioniert meiner Erfahrung nach aber nur im TWS mit dem Access Token, nicht mehr im Browser.
Dem zurück gelieferten JSON kann man entnehmen, dass es einen Command namens setTargetTemperature gibt.
Ich habe dann eine Logik angelegt, die über einen Multiplexer verschiedene Temperaturen liefert, entweder 10, 20 oder 30 °C (erstmal nur zu Testzwecken).
Dann habe ich im HTTP-Modul unter dem bereits angelegten Viessmann-Server eine Ressource namens "Heizungssteuerung" angelegt. Die Daten lauten wie folgt:
Bild

Im Feld Ressource URL steht die komplette URL, die die Abfrage des Features im JSON unter "uri" zurück geliefert hat.
Dann habe ich ein Abfrage-Objekt angelegt:
Bild
und mit der Solltemperatur aus der Multiplexer-Logik verknüpft.
Sobald ich nun einen Selektor der Logik auswähle, z. B. testweise im Doktormodus, wird einer der drei möglichen Werte auf das Abfrage-Objekt geschrieben und an die Heizung gesendet. Die Abfrage wird mit "success" beantwortet und auch in der ViCare-App kann ich den so eingestellten Wert sofort sehen:
Bild

Soweit so gut.

Leider habe ich noch keine Möglichkeit gefunden, über eine Abfrage mehrere Werte einzustellen, da der einzustellende Datenpunk ja leider in der URL ausgewählt wird, der Wert allerdings im Body übergeben wird. Oder habe ich hier etwas übersehen? Meine Erfahrungen und Kenntnisse im Bereich HTTP-API sind durchaus noch ausbaufähig :lol:

Das gleiche Problem habe ich bei der Abfrage von Werten, dazu komme ich jetzt. Einzelne Werte abzufragen ist kein Problem, aber umständlich. Bisher habe ich noch keinen Weg gefunden, alle (wesentlichen) Parameter abzufragen. Ideal wäre eine Abfrage, die ein JSON mit allen Werten zurück liefert, so wie z. B. ein JSON bei OpenWeatherMap alle aktuellen Wetterdaten liefert, die man dann schön als Auswertung in verschiedene Objekte schreiben kann.

Aus dem weiter oben erwähnten JSON als Antwort auf die Feature-Abfrage (oder auch, eher allgemein, von der Viessmann-Webseite https://documentation.viessmann.com/sta ... ata-points) habe ich z. B. drei Datenpunkte erfahren, die mich interessieren:
- heating.boiler.sensors.temperature.main (aktuelle Kesseltemperatur)
- heating.sensors.temperature.outside (Außentemperatur des Heizungssensors)
- heating.burners.N (Brennerstatus, N wird durch die lfd. Nummer des Brenners ersetzt, in der Regel 0).
Leider sind einige der Strings zu lang für den Multiplexer in der aktuellen Version, daher habe ich "heating." in die URI der Ressource übernommen:
Bild

Über einen weiteren String-Multiplexer wähle ich aus, welchen Wert ich abfragen möchte. Der String enthält einen der o. g. Parameter, gekürzt um "heating.". Dann habe ich eine Abfrage angelegt:
Bild
Wenn ich nun über den Multiplexer einen der Strings auswähle dann wird der Parameter abgefragt und ein JSON zurück geliefert, aus dem man den Wert an ein Objekt übergeben kann.

Ich hoffe das ist soweit verständlich und nachvollziehbar dokumentiert?

Das Problem ist, dass ich für jeden Wert eine separate Ressource anlegen muss, sowohl für die Abfrage als auch für das Einstellen von Werten.

Vermutlich kann man das mit Custom-Logiken verbessern, oder auch mit dem neuen Logikeditor in der Version 4, der ja über verbesserte Stringfunktionen verfügen soll.

Ich werde hier weiter dran herumtüfteln und über die Ergebnisse und Probleme berichten :-)

Vielen Dank und viele Grüße
Falk
Zuletzt geändert von Parsley am Sa Okt 28, 2023 2:45 am, insgesamt 2-mal geändert.
Vielen Dank und viele Grüße
Falk

TWS 3500M ID:810 - VPN aktiv - Reboot nach Absprache
1-Wire, KNX (MDT u. a.), EnOcean (Eltako u. a.), Gira TKS, ekey multi

Mibr85
Reactions:
Beiträge: 510
Registriert: Mo Dez 02, 2019 5:38 am
Wohnort: Freital
Hat sich bedankt: 396 Mal
Danksagung erhalten: 213 Mal

#2

Beitrag von Mibr85 »

Hallo Falk
Vielen Dank für deinen Erfahrungsbericht, ich frage Seite ca 1,5. Jahren die Viessmanndaten über den Umweg IoBroker -> MQTT ab und logge alle interessanten Daten im TWS mit.
Ich denke dein Erfahrungsbericht wird mein Einstieg in http Abfragen im TWS.
Super :-)
Grüße Micha

TWS 3500 XL #1209 + TWS 2600 #528 + PBM #972,
VPN offen, Reboot möglich
PLZ 01...
Benutzeravatar

Ersteller
speckenbuettel
Reactions:
Beiträge: 212
Registriert: Mo Jun 27, 2022 9:30 am
Hat sich bedankt: 193 Mal
Danksagung erhalten: 121 Mal

#3

Beitrag von speckenbuettel »

Hallo Micha,

vielen Dank für die positive Rückmeldung.

Über die Anbindung meiner Heizung über iobroker oder openHAB habe ich nachgedacht, aber die Idee verworfen. Zur Zeit brauche ich keines der beiden Systeme und extra für die Heizung eines aufzusetzen ist mir den Aufwand nicht wert. Und die ganze Hausautomation muss ja auch administrierbar bleiben :-)

Die HTTP-API-Schnittstelle des TWS ist ja sehr mächtig, damit kann man einiges erschlagen.

Ich habe mich im letzten Jahr bewusst für den Timberwolf Server entschieden weil ich glaube damit langfristig ohne weitere Subsysteme auszukommen - vor allem wenn die Visu dazukommt.
Einzig eine EnOcean-Schnittstelle vermisse ich aber da ich mit diesem Wunsch in der Minderheit bin wird es wohl noch eine Weile dauern.

Zurück zum Viessmann-Projekt: Priorität Nr. 1 hat natürlich das Access-Token, sonst bringt das ja alles nichts. Hierzu bin ich in Kontakt mit der Viessmann-Developer-Community und hoffe, das Problem mit deren Hilfe in den Griff zu bekommen.
Wenn das soweit ist werde ich hier berichten und dann geht auch die produktive Einrichtung der API für den Timberwolf Server weiter.
Wenn man die ersten Hürden mal genommen hat dann ist alles weitere ja im Grunde nur Fleißarbeit :-)

Ich glaube die mit Version 4 in Aussicht gestellten Verbesserungen des Logikeditors werden vieles hier vereinfachen bzw. erst möglich machen.

Wobei: langfristig würde ich die Viessmann-Steuerung schon gerne cloud-unabhängig im Haus haben. Die API kann Viessmann ja auch jederzeit reduzieren bzw. abschalten. Auf Dauer verlasse ich mich, nach einigen Erfahrungen, nur noch auf Schnittstellen die ich selbst (hart) verdrahten und vollkommen kontrollieren kann.

Wie gesagt, Fortsetzung folgt ...

Viele Grüße
Falk
Vielen Dank und viele Grüße
Falk

TWS 3500M ID:810 - VPN aktiv - Reboot nach Absprache
1-Wire, KNX (MDT u. a.), EnOcean (Eltako u. a.), Gira TKS, ekey multi

Mibr85
Reactions:
Beiträge: 510
Registriert: Mo Dez 02, 2019 5:38 am
Wohnort: Freital
Hat sich bedankt: 396 Mal
Danksagung erhalten: 213 Mal

#4

Beitrag von Mibr85 »

Das einschränken der API durch Viessmann ist leider in den letzten zwei Jahren schon öfters passiert.
Da werden Temperaturwerte nur noch in 1° Auflösung gesendet anstelle wie vorher in 0,1° Auflösung Und der gleichen leider ist die Gefahr bei sowas immer präsent.
Grüße Micha

TWS 3500 XL #1209 + TWS 2600 #528 + PBM #972,
VPN offen, Reboot möglich
PLZ 01...

MrWilson
Reactions:
Beiträge: 232
Registriert: Do Dez 27, 2018 2:19 pm
Wohnort: Borgsdorf
Hat sich bedankt: 44 Mal
Danksagung erhalten: 146 Mal

#5

Beitrag von MrWilson »

Hey Falk,

hast du dir mal unter dem Punkt "Authentication" der Viessmann Dokumentation die einzelnen Schritte angeschaut? Wenn du bis zum Punkt "Refreshing an access token" kommst und/oder dir ein refresh_token vorliegt, dann müsste die Aktualisierung des Token funktionieren.

Grüße

Willy
TWS 2500 ID: 341 + PBM ID: 463, VPN offen, Reboot nur nach Absprache

Mibr85
Reactions:
Beiträge: 510
Registriert: Mo Dez 02, 2019 5:38 am
Wohnort: Freital
Hat sich bedankt: 396 Mal
Danksagung erhalten: 213 Mal

#6

Beitrag von Mibr85 »

Hey Falk eine Idee wäre auch bei GitHub sich mal den Code von dem ViessmannAPI Adapter für den IoBroker anzuschauen und von da zu kopieren.
Grüße Micha

TWS 3500 XL #1209 + TWS 2600 #528 + PBM #972,
VPN offen, Reboot möglich
PLZ 01...

alexbeer
Reactions:
Beiträge: 394
Registriert: Mi Sep 12, 2018 1:11 am
Wohnort: NRW
Hat sich bedankt: 212 Mal
Danksagung erhalten: 251 Mal

#7

Beitrag von alexbeer »

Ich habe auch großes Interesse an einer nativen Integration der ViCare in den TWS.
Die Viessmann API ist aber wirklich nicht ohne. Ich nutze derzeit nicht den ioBroker, sondern HA und dort eine Community Integration. In dieser Integration ist die Open source Library https://github.com/somm15/PyViCare eingebunden.
Ob und wenn ja wie, wir im TWS solche Fremdbibliotheken einbinden können, kann ich nicht beurteilen.
Auf der einen Seite fände ich es spannend, um das Rad nicht neu zu erfinden. Auf der anderen Seite erhöht es die Abhängigkeit zu dritten...
VG Alex
Timberwolf122 (TWS 2500) // Wartungs-VPN: offen // Reboot: jederzeit

Mibr85
Reactions:
Beiträge: 510
Registriert: Mo Dez 02, 2019 5:38 am
Wohnort: Freital
Hat sich bedankt: 396 Mal
Danksagung erhalten: 213 Mal

#8

Beitrag von Mibr85 »

Wenn ich mich recht erinnere hatte Stefan schon mal geschrieben, dass auf der Liste steht auch für HTTP Abfragen Sörens ähnliches wie für Modbusprofile zu bauen.
Zeitlich kann man das allerdings noch nicht einordnen.

Wenn es das dann mal gibt kann ich mir gut vorstellen, das es so ähnlich wie die Adapter beim IoBroker funktionieren könnte. Wodurch man dann sicherlich einiges von den Adaptercodes übernehmen oder zumindest anschauen könnte. Die nutzen ja meist auch nur HTTP APIs.
Grüße Micha

TWS 3500 XL #1209 + TWS 2600 #528 + PBM #972,
VPN offen, Reboot möglich
PLZ 01...
Benutzeravatar

Ersteller
speckenbuettel
Reactions:
Beiträge: 212
Registriert: Mo Jun 27, 2022 9:30 am
Hat sich bedankt: 193 Mal
Danksagung erhalten: 121 Mal

#9

Beitrag von speckenbuettel »

Hallo zusammen,
Das einschränken der API durch Viessmann ist leider in den letzten zwei Jahren schon öfters passiert.
Da werden Temperaturwerte nur noch in 1° Auflösung gesendet anstelle wie vorher in 0,1° Auflösung Und der gleichen leider ist die Gefahr bei sowas immer präsent.
Die funktionale Einschränkung ist eine Sache. Mit einer Auflösung der Temperatur von nur 1 °C kann ich leben, denn ich glaube kaum dass die Messgenauigkeit der verwendeten Sensoren eine Auflösung von 0,1 °C rechtfertig.
Mich stört eher die Begrenzung der API-Abfragen pro Stunde bzw. pro Tag. Vor allem wenn man auf Grund der Datenstruktur bei Viessmann jeden interessanten Wert einzeln abfragen muss anstatt eine Parameterübersicht in einem einzigen JSON zu bekommen dann kommt einiges an Abfragen zusammen.

Böse in Erinnerung ist mir die Einstellung der Vitotrol App (oder wie die hieß), die dann durch die ViCare ersetzt wurde. Inzwischen kann die ViCare auch etwas, aber anfangs war das eine Funktionsreduktion von 90%.

Daher: lieber verdrahtet zu Hause als in irgendeiner Cloud.
hast du dir mal unter dem Punkt "Authentication" der Viessmann Dokumentation die einzelnen Schritte angeschaut? Wenn du bis zum Punkt "Refreshing an access token" kommst und/oder dir ein refresh_token vorliegt, dann müsste die Aktualisierung des Token funktionieren.
Ja, habe ich natürlich. Leider funktioniert das (bei mir) nicht so wie beschrieben. Es gibt ja zwei Anleitungen von Viessmann, die sich komischerweise unterscheiden bzw. widersprechen.
Widersprüchlich vor allem in Hinblick auf "code_challenge / code_verifier"
Die Anleitung unter "Getting Started" funktioniert, damit bekomme ich ein Access Token. Hier wird für die erste Abfragen, die zum Code führt, und für die zweite Abfrage, die zum Access Token führt, der gleiche String verwendet - mit dem expliziten Hinweis The code_challenge / code_verifier is, simply spoken, a random string that must be the same in both requests.
Unter "Authentication" wird zwischen beiden Strings unterschieden und darauf verwiesen das man beide mit einem PKCE Code Generator erzeugen kann. Wenn ich allerdings diesen Generator verwende und im ersten Schritt die Code Challenge und im zweiten Schritt den Code Verifier dann bekomme ich die Fehlermeldung {"error":"invalid-token-request"}.
Der dort beschriebene Weg, ein Refesher Token zu bekommen, führt ebenfalls nicht zum Ziel denn selbst wenn ich die Abfrage um "offline_access" erweitere dann bekomme ich trotzdem nur ein Access Token und kein Refresher Token.

Ich habe trotz stundenlangen Testens noch nicht herausbekommen was ich falsch mache. Daher hoffe ich noch auf eine Antwort im Viessmann-Developer-Forum.


Update folgt ...

Viele Grüße
Falk
Vielen Dank und viele Grüße
Falk

TWS 3500M ID:810 - VPN aktiv - Reboot nach Absprache
1-Wire, KNX (MDT u. a.), EnOcean (Eltako u. a.), Gira TKS, ekey multi

MrWilson
Reactions:
Beiträge: 232
Registriert: Do Dez 27, 2018 2:19 pm
Wohnort: Borgsdorf
Hat sich bedankt: 44 Mal
Danksagung erhalten: 146 Mal

#10

Beitrag von MrWilson »

Hey Falk,

ich habe jetzt erfolgreich die Postman collection von Viessmann genutzt.

https://www.postman.com/vimicho/workspa ... r=12055031

Man belegt "Authorization request" und "Authorization code exchange" mit seinen Daten vor und führt "Authorization request" aus, zieht sich sich den Code und fügt ihn dann bei "Authorization code exchange" ein und führt das dann aus. Für Die Übertragung des Codes hat man genau 20 Sekunden Zeit :angry-banghead:
Man wird dann mit Access Token und Refresh Token belohnt.
TWS 2500 ID: 341 + PBM ID: 463, VPN offen, Reboot nur nach Absprache
Antworten

Zurück zu „HTTP-API, REST & Web-Abfragen“