-
-
Notifications
You must be signed in to change notification settings - Fork 897
Add Viessmann #20111
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Viessmann #20111
Conversation
da61b60
to
093d126
Compare
c6ded7f
to
d8e4886
Compare
Sieht gut aus 👍🏻 |
Danke! Hast du evtl Ideen / Anmerkungen zu den 'open questions'? |
It's two values and there are no cache headers. Add
We still need the non-browser flow for that, then I have an implementation idea.
up to you :)
ATM only increasing global interval. |
Got the browserless authentication working with shell/curl/jq, based on https://documentation.viessmann.com/static/authentication Prerequisite (only once)The user must manually log into the Viessmann Developer Portal and create a client: disable google captcha and configure any redirect URI (the default value ![]() Create an access token with two http requests
Notes
Token TTL and refresh tokenWe can generate a new token with the Interesting / surprising: the refresh token does not seem to have a TTL - I just renewed my token with a refresh token that I received 8+ hours ago... To keep things simple and future proof it probably makes sense to generate a new token, store it for one hour, and then start from scratch. Either way: here's how to get a new token based on the REFRESH_TOKEN we got previously:
|
Also OAuth2 code exchange mit PKCE. Da kann ich mir was einfallen lassen, dauert aber ein bisschen. |
Genau. Ich hab auch den Teil über PKCE nochmal korrigiert, da sollten wir wirklich neue code challenge und verifier generieren für jeden request. Das PKCE handling hab ich mir gerade mal von ner KI schreiben lassen, das funktioniert auch: go mod init go-auth2-test
go get golang.org/x/oauth2 main.go:
go run main.go
PKCE Code Verifier: NUBS81DWRCNOKHqrQvWZpqr2f7VLwiIHcY4A2jbodDI
PKCE Code Challenge: {code_challenge Zps-JR5UfvgOHTk7LeClyM7-zFydhdbRO6uwQMolUnk}
PKCE Code Challenge Method: {code_challenge_method S256} Aber wie man das token handling / renewal am besten macht und wo genau man es in evcc unterbringt, ist vermutlich noch die schwierigere Frage, da kennst du dich besser aus. |
Brauchst du alles nicht- pkce ist bei Go schon enthalten. Die Frage ist eher, wie wir das "pluggable" bekommen mit loser Kopplung. Meine Idee wäre, #20066 so zu erweitern, dass wir dort neben basic/ bearer auch Authorisation Plugins einführen die ihrerseits einen autorisierten /cc @thecem wir hatten das Thema noch bei einer weiteren WP. |
I've updated #20066 to add the required infrastructure. |
Z.B. https://github.com/evcc-io/evcc/blob/master/vehicle/porsche/identity.go wäre ein gutes Beispiel für eine var tokenSource oauth2.TokenSource
tokenSource = ...
transport := &oauth2.Transport{
Source: tokenSource,
Base: base,
} |
This comment was marked as resolved.
This comment was marked as resolved.
222ab40
to
db223cd
Compare
@andig ich hab mich heute mal damit beschäftigt und werde (langsam) mit Den Ich teste lokal mit Wenn du Zeit für early feedback hast: gerne. Ansonsten wollte ich nur mal ein Lebenszeichen senden, bzw die Info, dass ich dran bin. Ist halt auch immer von der verfügbaren Freizeit abhängig. |
charger/viessmann/identity.go
Outdated
import ( | ||
"context" | ||
"fmt" | ||
"os" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Du brauchst gofmt oder einfach VScode
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Die Datei selbst muss nach plugin/auth und dann gem. #20066 Umgebaut werden. Ziel ist keine oauth2.TokenSource
sondern ein http.Transport
(…der dann selbst mittels oauth2.Transport
umgesetzt wird).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ich verstehe nicht ganz - soll die generisch werden und als plugin/auth/identity.go
dort liegen, in der Hoffnung dass alle oauth2 provider identisch sind? Oder Viessmann-spezifisch als plugin/auth/viessmann.go
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Letzteres. Deshalb muss sie sich mit eigenem Namen registrieren.
cache: 2s # to prevent making two identical requests straight after each other for "getmode" | ||
headers: | ||
- content-type: application/json | ||
- authorization: Bearer {{.token}} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Siehe #20066
db223cd
to
3ab2887
Compare
Aktueller Status auf diesem Branch: code und token abrufen klappt. Refresh token hab ich mit der go api nicht hinbekommen, vielleicht kannst du mir auf die Sprünge helfen, dann kann ich das testen.
|
OAuth liefer |
Hey. So weit ich das sehe, kann ich nur einen Client im ViessmannDevPortal einrichten. Ich nutze diesen mit einer Config für die Viessmann HA Integration. Dort habe ich als URI „vicare://oauth-callback/everest“ Ich kann da jetzt noch eine hinzufügen, und die selbe Client ID nutzen.. aber ob das funktioniert? was aber dann auf jeden Fall für User wie mich, die die Integration zur Steuerung/Statis Info nutzen, ein Problem wird, sind die limitierten API Calls im kostenlosen Account. Die reichen im Monat für alle Entitäten einer WP aus, aber kommt dort noch evcc hinzu, wird das nicht reichen und den recht teuren pro Account erfordern.. aber trotzdem: geile Arbeit! |
@hbpv die redirect URI ist für unseren use case egal, es muss nur derselbe sein für die beiden requests die wir machen. Das kannst du also auch auf dem "everest" lassen. Man kann also denselben client benutzen, wenn man schon einen anderen use case hat. Bzgl. API call limitation: man darf 1450 api calls pro 24h mit dem kostenlosen Account machen, also einen call pro Minute. Wenn wir das mit dem caching vernünftig konfigurieren und vielleicht noch ein bisschen bewusste Trägheit einbauen, sehe ich hier überhaupt kein Problem. https://developer.viessmann.com/start/faq.html?appState=API%252Busage%253Dmaximum%252Bapi%252Bcalls |
Da es die Integration nun ins offizielle Build geschafft hat wollte ich es nun auch testen, aber ich scheitere natürlich an der Installation_ID. Alle anderen Werte habe ich. CURL ist ebenfalls in der Powershell am Start. Könnt ihr bitte kurz beschreiben, wie ich den Aufruf nun machen muss um die Installation_ID zu erhalten? |
Hey Für alle die keinen Zugriff auf Curl haben, weil Sie HA auf dem Pi oder x86 direkt installiert haben und das evcc Admin nutzen, ein möglicher workaround. Vielleicht schaffe ich es die Tage einen Nodered Code zu exportieren der alles enthält was man braucht.. https://www.rustimation.eu/index.php/1_zugang_api/ Das ist zwar eine gesamte Anbindung, aber ich denke daraus kann man sicher den Part der InstallationID nutzen. Vg |
@mpollmeier der Doku fehlt noch die Erläuterung von curl, die scheint nur halb zu sein. |
Vermutlich ganz gut beschrieben von ChatGPT, teste es heute Abend mal: 🔧 Voraussetzungen Du brauchst: 🧩 Vorbereitung Bash: 🚀 Terminal-Befehl zum Abrufen der Installations-ID Führe folgenden kompletten Block im Terminal aus: Bash: VIESSMANN_REDIRECT_URI="http://localhost:4200/" curl -X POST "https://iam.viessmann.com/idp/v2/token" Die Antwort enthält ein access_token – benutze das dann wie folgt:(Zuerst access_token aus Antwort extrahieren, z. B. manuell oder mit jq)ACCESS_TOKEN="" curl -X GET "https://api.viessmann.com/iot/v1/equipment/installations" 🔍 Was bekommst du? Die Ausgabe enthält eine Liste mit deinen Installationen, und dort findest du: Diese kannst du dann in deiner Konfiguration verwenden. Die Codes von Viessmann könnten noch für private Zwecke funktionieren. Muss mir das heute Abend mal anschauen |
Als alter Windowsmensch habe ich versucht in der Eingabeaufforderung folgendes zu tun : Beim Absetzen des CURL Befehls kommt dann : |
Die Hilfe war noch nicht fertig, ich habe an der Stelle pausiert weil das Layout dann kaputt war. Ist aber keine große Sache, ich mache noch nen PR um das zu vervollständigen. Das Layout ist zwar nicht mehr zerstört, dafür wird aber der Text einfach abgeschnitten. Der User soll diesen ja komplett kopieren, das ist zwar möglich aber so nicht ideal. Naja, ist wohl eh eher eine "Profi" Integration, solange wir die InstallationID nicht automatisiert ermitteln. |
Für alle, die es schonmal testen wollen:
Then execute the following (n.b. it's best to paste the entire block as-is, since the intermediate 'CODE' is only valid for 20 seconds):
|
Dank einer Ubuntu VM habe ich die Scripte ausgeführt. |
Kann ich bestätigen, das ist bei mir mit master auch so. In dem Branch ging es mal... @andig hast du eine Idee was da los ist? Mit |
Arg- modi haben neue nummern: dimm, normal, boost. Vorher wars andersrum. Entspricht jetzt sgready standard. |
Ich verstehe nicht ganz. Es geht vermutlich um diese hier? Aus weishaupt-wpm.yaml:
In viessmann.yaml fehlt demnach |
Es hat sich nur die Numerierung der Modi geändert, siehe https://docs.evcc.io/docs/devices/heating. Wenn wir
|
👍🏻 #21574 |
und wo wir schonmal dabei sind |
hmm, mit 448ef7d bekomme ich immer noch denselben Fehler... |
Kannst du das mal bitte mit
testen? @naltatis der Text hinter |
@naltatis nvm. Die Fehlermeldung ist so kryptisch: https://github.com/search?q=repo%3Aevcc-io%2Fevcc+%22dimm+mode%22&type=code |
@mpollmeier …und da ist auch die Erklärung. Getmode muss natürlich mit angepasst werden! |
Bei mir kommt zusätzlich zum Fehler mit dem dimm-mode noch folgender:
Im kostenlosen Basic-Plan von der Viessmann API habe ich 1450 Abfragen pro Tag, die sind anscheinend schnell weg. |
Eine Abfrage je Minute wird nicht genügen. Dafür müssten wir evcc- ggf. optional- abgewöhnen, den |
Ich habe gerade noch mal nachgesehen. Selbst bei den kostenpflichtigen Zugängen bei Viessmann sind es nur 3000 API calls pro Tag. Das wird also knapp... 😅 |
... mostly just looking for some feedback.
Based on the api investigation at #19639 (comment)
Fix #19639
open questions
getmode
trigger two identical http requests?excerpt from my evcc.yaml
get status
enable
disable