Ich habe eine Vitocal 250 A und möchte gern per PHP-Script z.B. den Warmwasser Temperatur Sollwert auslesen und verändern können.
Ich versuche nun seit einigen Tagen mit Hilfe der Dokumentation und dem Forum hier mit der API zu kommunizieren.
Einige Parameter konnte ich ermitteln: installationID, client_id, gatewaySerial, Code-Verifier, Code-Challenge.
Bei deviceId bin ich nicht sicher, "RoomControl-1"?
Es scheitert bei mir aber an den Basics, dass ich kein Bearer access_token ermitteln kann. Habe festgestellt, dass ich das auch händisch auf https://app.developer.viessmann.com/ genieren kann, das ist aber nicht zufriedenstellend.
Ich habe viel mit curl experimentiert. Bei Aufrufen der API kommen dann Fehlermeldungen wie : "statusCode":404,"errorType":"FEATURE_NOT_FOUND" oder statusCode":502,"errorType":"UNSUPPORTED_MEDIA_TYPE".
PHP Scripts habe ich hier in der Community auch gefunden, z.B.: „Some code to receive info from the Viessmann boiler“, die sind aber zum Teil schon über 2 Jahre alt und führen nicht zum Erfolg.
Die Dokumentation ist bestimmt hilfreich, wenn man über den Status „hello world“ drüber ist, ich bin noch davor und würde mich über Hilfe sehr freuen.
Ich suche also ein PHP-Script, in das Parameter wie username, passwort, … , eingefügt werden müssen und alles andere von dem Script ermittelt wird, dann soll der Temperatur Sollwert ausgelesen und z.B. auf 54 gesetzt werden.
Falls ich jetzt einigen Profis auf die Füße getreten bin, da das alles in der Dokumentation steht, würde ich mich hier auch über Rückendeckung von denen freuen, die auch noch ihre Schwierigkeiten haben.
Danke schon mal für eure Bemühungen.
Hi @Frostboiler , es freut mich, dass du dich im API-Bereich des Forums meldest! Aller Anfang ist schwer 🙂 Gerne gehe ich auf die einzelnen Fragen von dir ein.
Die Topologie für die IoT-Daten in der API sieht folgendermaßen aus: Installation >> Gateway >> Device. Innerhalb der Informationen zum Gateway wirst wahrscheinlich mehrere Devices mit jeweils einer ID finden. Devices müssen dabei nicht immer phsysisch sein, es kann sich auch um virtuelle Devices handeln. Die ID "RoomControl-1" beispielsweise ist ein virtuelles Device, worüber man die IoT-Daten zur Raumsteuerung abrufen kann. Das ist besonders relevant, wenn man eine sogenannte Einzelraumsteuerung im Haus hat, also Heizkörpert- und Fußbodenthermostate oder Klimasensoren. Die DeviceID "0" ist in der Regel der Wärmeerzeuger (Wärmepumpe, Gasheizung, ...). Das ist wahrscheinlich das wichtigste Device, weil hier die meisten IoT-Daten zum Heizsystem vorliegen. Nutze daher die DeviceID "0" um auf die wichtigen Daten deines Systems zuzugreifen.
Einen Access Token zu erhalten kann am Anfang ziemlich tricky sein. Vielleicht hilft dir aber unsere Beispielcollection in Postman weiter. Hier sind die wichtigsten API-Befehle bereits aufgelistet. Zusammen mit der API Dokumentation sollte es hoffentlich klappen, einen Access Token zu generieren. Hier aber noch zwei Hinweise:
Bei den Fehlermeldungen, die du erhältst, könntest du mir dazu die entsprechenden API-Befehle nennen, die du ausführst? Das hilft, dir genauer sagen zu können, was der Fehler sein könnte.
Leider kann ich dir nicht mit einem fertigen PHP-Skript weiterhelfen. Vielleicht findet sich aber hier in der Community jemand, der eine entsprechende Vorlage mit dir teilen kann.
Gruß,
Michael
Hallo @MichaelHanna, Danke für deinen Post, ich sehe Hilfe naht 😉
Ja, so wie Du es beschreibst, dachte ich, dass ich es auch so gemacht hätte.
Ich kann Dir meinen ganzen Weg als Screenshot aufzeigen, vielleicht hilft aber auch schon der Schritt in dem es nicht mehr weiter geht.
Als Antwort auf den Schritt 2 (Authorization code exchange)
curl -X POST "https://iam.viessmann.com/idp/v3/token" -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=686**************************3e0 &redirect_uri=http://localhost:4200/ &grant_type=authorization_code &code_verifier=dHX**************************************************************************************************************************v6y &code=C_Y55pQGEUgRMWQxuTjkgPiOsppMy-n5iIcTvR8_lHQ"
erhalte ich:
{"error":"unsupported_grant_type","error_description":"Unsupported grant type"}
Ich hoffe mein Fehler ist hier schon zu erkennen?
Gruß,
Jürgen
Heureka, ich hab‘s gefunden.
Ich habe mir deine Tipps zu Herzen genommen und Schritt 1 im Browser gemacht und den 2ten Befehl mit Postman abgesetzt und siehe da, es geht.
Was hatte ich mit curl falsch gemacht?
Es waren ein paar Leerzeichen zu viel. Nach der Option '–d' (Daten) in der curl-Anweisung werden die Daten mit '&' getrennt, allerdings darf innerhalb der doppelten Anführungszeichen kein Leerzeichen drin sein, klar!!!
Ich hatte es so aus der Dokumentation kopiert, zwar bemerkt, es aber nicht hinterfragt.
Würde mich jetzt wundern, wenn ich der Einzige bin, der da drüber gestolpert ist. Die Suche nach dem Fehler 'unsupported_grant_type' in der Community zeigt allerdings, dass danach noch niemand gefragt hat.
Bin ich also doch der Einzige! Hhmm, dafür kann ich aber gut Wasser kochen 😉
Mach mich jetzt dran die nächsten Schritte zu stolpern, hoffe natürlich immer noch auf ein PHP-Script aus der Community.
Danke Dir also @MichaelHanna!
Gruß,
Jürgen
@Frostboiler Danke für die Info! Freut mich, dass die Authentifizierung jetzt bei dir klappt 🙂
Und sorry, dass der Code in de Doku dir Probleme bereitet hat. Das Format wurde falsch übernommen, es sollte aber jetzt auf der Seite behoben sein!
Gruß,
Michael
Hallo @MichaelHanna, soweit klappt jetzt alles mit der API. Ich hatte gehofft über die API die ‘Vorlauftemperatur-Maximalbegrenzung‘ (1193.1) von meinem Heizkreis 2 anzuheben und hab dazu den Datapoint 'heating.circuits.N.temperature.levels' versucht zu lesen, leider bekomme ich es nicht hin.
Vielleicht kannst Du mir die richtige URL und json-Daten mitteilen, mit denen der Wert geändert werden kann? Die Vorlauftemperatur ist bei mir leider auf 40°C begrenzt und die Heizkörper werden nicht ausreichend warm.
Die Fehlermeldung, die du erhältst, sagt aus, dass die Funktion heating.circuits.N.temperature.levels nicht verfügbar ist bei deinem Device. Da die Funktion Teil des Basic Pakets der API ist, gehe ich davon aus, dass die Funktion bei deinem Device nicht zur Verfügung steht.
Du kannst auch alle verfügbaren Funktionen mit einem Befehl abrufen. Und zwar nutzt du dafür
Wenn du keine Funktion angibst, erhältst du als Antwort die Informationen zu allen Funktionen, die du verwenden kannst.
Hallo
Die Anpassung des Parameter geht nicht über die Api. Dazu muss Viessmann (Remote) oder dein HB vor Ort (Viguide) den Parameter anpassen.
Wenn Du SW 2323 hast kannst du dies auch selber im Servicemenü. Geht aber anscheinend nicht bei allen.
Gruss
Ralf
. Danke für die Info @PV_13. Das Problem, scheint sehr viele zu betreffen. Leider hat mein HB mit seiner Version ViGuide auch keinen Zugriff auf die Vorlauftemperatur Begrenzung, hab irgendwo gelesen, dass dafür ein Premium Paket notwendig wäre? Stimmt das? Und soll das pro Jahr 50€ kosten pro Anlage? Ich wollte nichts unversucht lassen und habs über die API versucht, die ansonsten richtig toll ist. Wäre schön, wenn Viessmann noch vor Weihnachten eine Lösung findet. Vielleicht temporär ein paar Flags forcen, damit jeder HB das mit der einfachsten Version von Viguide ändern kann?
Hallo
Ja es gibt verschieden Pakete von der Viguide.
https://www.viessmann.ch/de/produkte/steuerung-und-konnektivitaet/viguide-app.html
Aber wenn man eine WP in Betrieb nimmt, sollten schon die richtigen Einstellungen vorgenommen werden und da sollte es nicht an 50 Euro scheitern.
Dann sage Deinem HB er soll Viessmann beauftragen, dass Remote anzupassen.
Wenn Du tiefer in die API einsteigst, wirst Du feststellen, dass viele Werte fehlen. Primärkreis ist nichts da und selbst die Stellung des 4/3 Wegeventil kann man nicht auslesen oder ob gerade WW gemacht wird.
Hast Du überprüft, ob du schon die SW2323 Hast?
Gruss
Ralf
. Da gebe ich Dir Recht, es sollte nicht an 50 Euro scheitern. Hast Du denn Information, dass es mit einer Plus- oder Pro-Version einstellbar ist? So wie ich die Sache sehe, war das ein Versehen, dass der Wert auch für Anlagen mit Heizkörpern auf 40°C begrenzt wurde und es für den Softwarestand, so wie ich ihn habe (20.509.2305.192), dafür am Bedienteil gar keine Einstellmöglichkeit gibt. Vielleicht sind ein paar Estriche kaputt gegangen und man hat auf die Schnelle die Begrenzung auf 40°C herunter gesetzt. Mit der Version 2323 scheint das Problem ja auch behoben zu sein. Vielleicht kann jemand von @Viessmann hier ein bisschen Transparenz schaffen? Ich habe gesehen, dass am Server Wartungsarbeiten geplant sind, vielleicht ist da für dieses Problem damit auch schon eine Lösung in Sicht. Du steckst schon sehr tief in der API drin, ich bin da noch am Anfang. Ja der Primärkreis wäre wirklich interessant, und auch das 4/3Wegeventil, wenn man die ganzen Aktoren und Sensoren protokolliert, kann man da viele nützliche Informationen herausziehen oder sich eine schöne Visualisierung programmieren. Wofür verwendest Du denn die API?
. Die Heinzelmännchen müssen da gewesen sein und haben die Vorlauftemperatur Begrenzung raus genommen. Seit heute Morgen sind die Heizkörper warm, die Vorlauftemperatur ist jetzt 46°C. Vielen Dank allen Beteiligten, jetzt kann Weihnachten kommen!