Vitoconnect - Verbesserte Version

Begonnen von stefanru, 14 Dezember 2024, 23:32:17

Vorheriges Thema - Nächstes Thema

stefanru

Bei mir sieht das so aus, ein 2tes URL Feld gibt es nicht.

Du darfst diesen Dateianhang nicht ansehen.

In FHEM sind User / Passwort und die Client ID einzutragen.
In der Anleitung ist das aber auch Schritt für Schritt erklärt (https://wiki.fhem.de/wiki/Vitoconnect).
Wenn es gar nicht klappt leg doch einen neuen Client an.

Gruß,
Stefan
FHEM: Raspberry PI 400+SSD Viessmann, Fronius, BYD, Wunderground, Max, Shelly, ESPEasy, FHEMPY,...  Docker + Portainer: Immich, Authelia, Caddy, Gerbera, Paperless NGX
Maintainer: Vitoconnect
GIT: https://github.com/StefanRu1
Kaffeekasse: https://www.paypal.me/stefanru01

binlan

#406
hi stefanru,
Zitat von: stefanru am 29 Dezember 2025, 09:14:31welche Version soll das sein?
die aus deinem Post #384
Zitat von: stefanru am 29 Dezember 2025, 09:14:31Bitte nehmt mal die aus meinem Anhang.
Ich hänge sie hier nochmal an.
die hatte jetzt nochmal ein paar mehr log statements drin. aber es bleibt nach einem reload 98_vitoconnect.pm bei dieser einzeiligen log-message.
fhem  | 2025.12.29 11:03:31 1: Heizung - Access Token: nicht definiert
ich habe jetzt auch nochmal restartet. aber jetzt muss ich wieder bis zum disconnect warten.
Aber ich sehe jetzt schon deutlich mehr mehr log-messages von der Heizung. Jetzt natürlich noch mit access_token. Ich melde mich.

uron

Ich habe die 2. URL mal herausgenommen und den Client-Namen im Developer-Portal auf meine Einwahl-Emailadresse gesetzt - leider ohne Erfolg!
Welche Rolle spielt denn der Client-Name bei der Anmeldung?
Einen neuen Client kann ich nicht anlegen, da mir dazu keine Möglichkeit mittels "+" gegeben wird (s. Anlagen) oder welchen Weg muss ich gehen?
Mini-PC (FHEM im Container unter Proxmox)  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, Mini-PC (ioBroker im Container unter Proxmox)

stefanru

Hi Uron,

der Clientname sollte gar keine Rolle spielen, und du hast recht man kann nur einen anlegen.
Wichtig ist die E-Mail, das Passwort das du für den Login verwendest und die CLIENTID und natürlich die URI: http://localhost:4200/
Wenn du unsicher bist kannst du den Client auch nochmal rauswerfen und neu anlegen. Dann schaue dass die E-Mail passt.

Den API Key(ClientID) und das Passwort kannst du ja nochmal über set <device> apiKey und set <device> passwort setzen. Das muss nicht in der DEF richtig stehen.
Bei mir steht:
DEF meineechtemail@gmx.de test 140

APIKey und password setzt du dann per settern und dann sollte das eigentlich klappen.
Wenn es dann immer noch die Fehler gibt bitte die Version etwas weiter oben nehmen und mir die Logausgaben von FHEM schicken und schauen ob es im FHEM Logverzeichnis aktuelle .err oder .json gibt und diese auch mir geben.

Gruß,
Stefan
FHEM: Raspberry PI 400+SSD Viessmann, Fronius, BYD, Wunderground, Max, Shelly, ESPEasy, FHEMPY,...  Docker + Portainer: Immich, Authelia, Caddy, Gerbera, Paperless NGX
Maintainer: Vitoconnect
GIT: https://github.com/StefanRu1
Kaffeekasse: https://www.paypal.me/stefanru01

uron

Das war es wohl!
Das erneute Setzen des PW und API-Codes mit dem Set-Befehl bringt nun wieder Readings, die auch aktualisiert werden.

Was bleibt ist ein dickes Danke für die Geduld und Befassung mit "fremden" Problemen.
Mini-PC (FHEM im Container unter Proxmox)  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, Mini-PC (ioBroker im Container unter Proxmox)

stefanru

Hi Uron,
das freut mich sehr dass es wieder bei dir geht.
Immer noch etwas seltsam dass wir keinen ordentlichen Fehler von der API gesehen haben, wie z.B. Passwort falsch.
Ich behalte das mal im Hinterkopf.

Danke für die Rückmeldung und viele Grüße,
Stefan
FHEM: Raspberry PI 400+SSD Viessmann, Fronius, BYD, Wunderground, Max, Shelly, ESPEasy, FHEMPY,...  Docker + Portainer: Immich, Authelia, Caddy, Gerbera, Paperless NGX
Maintainer: Vitoconnect
GIT: https://github.com/StefanRu1
Kaffeekasse: https://www.paypal.me/stefanru01

binlan

Zitat von: binlan am 29 Dezember 2025, 11:08:13ich habe jetzt auch nochmal restartet. aber jetzt muss ich wieder bis zum disconnect warten.
Aber ich sehe jetzt schon deutlich mehr mehr log-messages von der Heizung. Jetzt natürlich noch mit access_token. Ich melde mich.

so, da bin ich wieder. fhem ist wieder disconnected, aber der log ist leider wieder sehr schweigsam:

fhem  | 2025.12.31 11:48:57 1: Heizung - Access Token: nicht definiert
fhem  | 2025.12.31 11:50:27 1: Heizung - Access Token: nicht definiert
fhem  | 2025.12.31 11:51:58 1: Heizung - Access Token: nicht definiert
fhem  | 2025.12.31 11:53:28 1: Heizung - Access Token: nicht definiert
fhem  | 2025.12.31 11:54:59 1: Heizung - Access Token: nicht definiert
es ist deine letzte 98_vitoconnect.pm aus post #401 aktiv.

Vielleicht noch Infos zu meiner Umgebung. fhem läuft bei mir auf einem raspi (Raspberry Pi 4 Model B Rev 1.4) im docker container (basierend auf fhem/fhem:4-bullseye). Parallel dazu laufen weitere container mit zigbee2mqtt, homebridge, grafana, mariadb, reverse proxy etc. Klingt nach viel, aber die load ist durchgehend <1. Installiert ist das ganze auf einer Festplatte über usb3.

stefanru

Hi Binlan,
da ist aber etwas oberfaul.
Ich logge da alles mit Loglevel 1.
Da müsste mehr kommen.
Bist du dir sicher dass diese Version aus 401 geladen ist?
In Post Nummer 401 ist beschrieben wo Loglevel 1 gesetzt ist.
Es müsste da einfach mehr im Log auftauchen.

Ich schaue mir das aber auch nochmal nach Sylvester an.

Gruß und guten Rutsch,
Stefan
FHEM: Raspberry PI 400+SSD Viessmann, Fronius, BYD, Wunderground, Max, Shelly, ESPEasy, FHEMPY,...  Docker + Portainer: Immich, Authelia, Caddy, Gerbera, Paperless NGX
Maintainer: Vitoconnect
GIT: https://github.com/StefanRu1
Kaffeekasse: https://www.paypal.me/stefanru01

binlan

Zitat von: stefanru am 31 Dezember 2025, 17:44:50da ist aber etwas oberfaul.
Ich logge da alles mit Loglevel 1.
Da müsste mehr kommen.
Bist du dir sicher dass diese Version aus 401 geladen ist?
In Post Nummer 401 ist beschrieben wo Loglevel 1 gesetzt ist.
Es müsste da einfach mehr im Log auftauchen.

Ich schaue mir das aber auch nochmal nach Sylvester an.

Gruß und guten Rutsch,
Stefan


ja, 100%ig sicher. gerade nochmal ein diff gemacht und nochmal restartet. Beim Startup sehe ich auch sowas:
2025.12.31 18:41:43 1: Heizung - getCodeCallback went ok
2025.12.31 18:41:43 1: Heizung - Received response: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
<META name="robots" content="noindex" /></HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF="http://localhost:4200/?code=_OIfjoCdbBTMQ1u_code_RNQvKJEbvnNNsWGtg">here</A>.
</BODY></HTML>

2025.12.31 18:41:43 1: Heizung - code: _OIfjoCdbBTMQ1uMh_code_JEbvnNNsWGtg
2025.12.31 18:41:44 1: Heizung - getAccessTokenCallback went ok
2025.12.31 18:41:44 1: Heizung - Received response: {"access_token":"eyJraWQiOiI0YzBhZGF_ganz_viel_token_I6MTc2NzIwNjUwNCwiaWnGpKcqp1LO5sdY_JVDO7ZImLwJLRia7Ce-eTuGCj_usw_pLIstrx9eJzDTwO-OeB1x1C_usw_4TPNVqBflQ3stimDAz0-BKscV0bhYoPm0NKWYvW3n_zKhYcKi9dezKd9Yh9edwU90F8dOXEYy_4t-UxeKTML_jRMGeHLRC_HGTyGG_usw_d8How5esaU_Km7Jz_kPQJ8Ij1Cfb3N-qNVo3RcVHSlyD4CFlprbofQ61K_pdvIEKvm264_usw_48aPNM8kAkCUSamQSNJB3eESY","refresh_token":"86e98d70770b_bla_bla_167621e4b0","token_type":"Bearer","expires_in":3600}

2025.12.31 18:41:44 1: Heizung - Access Token: eyJraWQiOabcdBhZGFh...

aber wenns dann kaputt ist, schweigt der log.

stefanru

Ok, das sind auf jeden fall die Logs die ich sehen will.
Dann schaue ich mir nochmal an warum nichts mehr kommt wenn es kaputt geht.
Das ist seltsam sollte die selbe Codestrecke durchlaufen.

Gruß,
Stefan
FHEM: Raspberry PI 400+SSD Viessmann, Fronius, BYD, Wunderground, Max, Shelly, ESPEasy, FHEMPY,...  Docker + Portainer: Immich, Authelia, Caddy, Gerbera, Paperless NGX
Maintainer: Vitoconnect
GIT: https://github.com/StefanRu1
Kaffeekasse: https://www.paypal.me/stefanru01

stefanru

Ok, habs.
Hab eine Stelle übersehen.
Es geht bei dir schief im vitoconnect_getRefreshCallback()
Habe dort nun auch logging mit Verbose 1.

Hier nochmal eine Version für dich die uns hoffentlich weiter hilf.

Gruß,
Stefan
FHEM: Raspberry PI 400+SSD Viessmann, Fronius, BYD, Wunderground, Max, Shelly, ESPEasy, FHEMPY,...  Docker + Portainer: Immich, Authelia, Caddy, Gerbera, Paperless NGX
Maintainer: Vitoconnect
GIT: https://github.com/StefanRu1
Kaffeekasse: https://www.paypal.me/stefanru01

binlan

Hi stefanru,

Zitat von: stefanru am 01 Januar 2026, 17:21:41Hier nochmal eine Version für dich die uns hoffentlich weiter hilf.

möglicherweise haben wir jetzt einen guten Hinweis:
fhem  | 2026.01.03 18:41:06 1: Heizung. - getRefreshCallback went ok
fhem  | 2026.01.03 18:41:06 1: Heizung - Received response: {"error":"invalid-token-request"}
fhem  | 2026.01.03 18:41:06 1: PERL WARNING: Use of uninitialized value $access_token in string ne at ./FHEM/98_vitoconnect.pm line 3384.
fhem  | 2026.01.03 18:41:06 1: Heizung - Access Token: nicht definiert
fhem  | 2026.01.03 18:41:06 1: Heizung - Received response: {"error":"invalid-token-request"}
fhem  | 2026.01.03 18:42:37 1: Heizung. - getRefreshCallback went ok
fhem  | 2026.01.03 18:42:37 1: Heizung - Received response: {"error":"invalid-token-request"}
fhem  | 2026.01.03 18:42:37 1: Heizung - Access Token: nicht definiert
fhem  | 2026.01.03 18:42:37 1: Heizung - Received response: {"error":"invalid-token-request"}
fhem  | 2026.01.03 18:44:07 1: Heizung. - getRefreshCallback went ok
fhem  | 2026.01.03 18:44:07 1: Heizung - Received response: {"error":"invalid-token-request"}
fhem  | 2026.01.03 18:44:07 1: Heizung - Access Token: nicht definiert
fhem  | 2026.01.03 18:44:07 1: Heizung - Received response: {"error":"invalid-token-request"}
fhem  | 2026.01.03 18:45:38 1: Heizung. - getRefreshCallback went ok
fhem  | 2026.01.03 18:45:38 1: Heizung - Received response: {"error":"invalid-token-request"}
fhem  | 2026.01.03 18:45:38 1: Heizung - Access Token: nicht definiert
fhem  | 2026.01.03 18:45:38 1: Heizung - Received response: {"error":"invalid-token-request"}
fhem  | 2026.01.03 18:47:08 1: Heizung. - getRefreshCallback went ok
fhem  | 2026.01.03 18:47:08 1: Heizung - Received response: {"error":"invalid-token-request"}
fhem  | 2026.01.03 18:47:08 1: Heizung - Access Token: nicht definiert

Die Warnung in Zeile 3 kam genau nur 1x. Oben sind exakt die ersten Zeilen seit dem es wieder kaputt ist zu sehen. Davor gabs nur intakte Tokens.

stefanru

Hi Binlan,

ok ich sehe leider nach wie vor nur dass er beim Versuch ein neue Refresh Token zu bekommen bei dir abbricht mit:
Received response: {"error":"invalid-token-request"}
Dadurch bleibt dann das Access_Token leer und der Fehler in 3384 entsteht.

Es ist schon sehr seltsam dass das nur bei dir auftritt auch bei uns anderen wird das Coding durchlaufen.
Aber ok, ich kann dir nochmal eine Version geben die auch den Request der gesendet wird logged und dann können wir vergleichen und vielleicht auch sehen was da bei dir nicht richtig läuft.
Dieser Call sollte entstehen und dir ein neues Token liefern:
Example:
curl -X POST "https://iam.viessmann-climatesolutions.com/idp/v3/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=refresh_token&client_id=my_oauth_client_id&refresh_token=YOUR REFRESH TOKEN"
When using a refresh token, only a single /token request is required to get a new access token. This means no authorization code, code verifier and thus no prior authorization request is necessary. Please note that the refresh token also has a time to live (TTL). For refresh tokens, the TTL is 15552000 seconds (180 days).

Ich habe nochmal ne Debug Version erstellt die auch den Call nun logged.
Ich habe sie zum Vergleich nun auch bei mir laufen.
Lade sie mal und schicke mir deine Calls dann vergleiche ich mit meinen.

FHEM: Raspberry PI 400+SSD Viessmann, Fronius, BYD, Wunderground, Max, Shelly, ESPEasy, FHEMPY,...  Docker + Portainer: Immich, Authelia, Caddy, Gerbera, Paperless NGX
Maintainer: Vitoconnect
GIT: https://github.com/StefanRu1
Kaffeekasse: https://www.paypal.me/stefanru01

binlan

Zitat von: stefanru am 04 Januar 2026, 16:41:13Ich habe nochmal ne Debug Version erstellt die auch den Call nun logged.
Ich habe sie zum Vergleich nun auch bei mir laufen.
Lade sie mal und schicke mir deine Calls dann vergleiche ich mit meinen.

Deine Version macht die Loglevel wieder auf die Ursprungsform. Deine zusätzliche Änderung ist das hier, ne?

3357c3357
<    #Log3 $name, 1, "$name - " . $param->{"data"};
---
>    Log3 $name, 1, "$name - Refresh token request url: " . $param->{"url"} . " data: " . $param->{"data"};

Ich habe das in die vorherige Version mit Log 1 eingepflegt, um weiterhin alles diesbezüglich zu loggen.

Ich fand an der bisherigen Ausgabe schon komisch, das "getRefreshCallback went ok" ok ist, dann aber Müll im response ist. Sollte das nicht einen Error werfen? Und die Warnung ist auch nicht hilfreich? Kann mein unterschiedliches Verhalten an meiner docker Umgebung liegen? perl version?
# perl -v

This is perl 5, version 36, subversion 3 (v5.36.3) built for aarch64-linux-gnu
Sind da ggf. irgendwelche perl safe-settings gesetzt?

stefanru

#419
Naja ich habe das logging angepasst.
Bei der Version wird nun der Responce immer mit loglevel 2 ausgegeben nach Access Token: nicht definiert.
Für dich logge ich nun nur hart auch den Call.
Aber wenn du es in die andere Version eingebaut hast ist auch ok.
Beide sollten ok sein.

Naja das Problem ist das die API Antwortet und nicht direkt einen Error wirft.
Es kommt also eine Antwort und die Antwort ist:
{"error":"invalid-token-request"}
Darin sucht er das Token und weißt es zu.
Da er keins findet bleibt es undefined und das nächste IF führt zu der Warning.
Das kann ich verbessern sobald wir verstanden haben warum er bei dir hier den Request nicht mag.

Erstmal würde ich gerne sehen warum es bei dir zum Fehler kommt.
Bei mir wurde nun 14 mal der token refresh gelogged ohne probleme:
2026.01.04 17:54:21 1: VitoCal250AH - Refresh token request url: https://iam.viessmann-climatesolutions.com/idp/v2/token data: grant_type=refresh_token&client_id=xxx&refresh_token=xxx

Habe auch gesehen dass man hier v3 verwenden kann/soll.
Habe das mal angepasst und teste gerade.

Gruß,
Stefan
FHEM: Raspberry PI 400+SSD Viessmann, Fronius, BYD, Wunderground, Max, Shelly, ESPEasy, FHEMPY,...  Docker + Portainer: Immich, Authelia, Caddy, Gerbera, Paperless NGX
Maintainer: Vitoconnect
GIT: https://github.com/StefanRu1
Kaffeekasse: https://www.paypal.me/stefanru01