[V3.5.1]/[V4.0 IP3] Viessmann API - Erfahrungsbericht und Fragen
Verfasst: So Mai 14, 2023 8:08 am
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:
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:
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:
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:
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
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:
Ü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:
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
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:
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:
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:
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:
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
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:
Ü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:
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