Neues Modul 50_VolvoConnect unter Verwendung der neuen OAUTH2 Methode von Volvo

Begonnen von stefan.apetz, 23 August 2026, 16:50:33

Vorheriges Thema - Nächstes Thema

stefan.apetz


StefanStrobel

Hallo Stefan,

ich hatte im Sommer mal HTTPMOD erweitert, um die Daten für meinen Volvo eleganter auslesen zu können, hab es dann aber bleiben lassen, weil die Tokens auch bei Erneuerung per refresh_token nach einer Woche nicht mehr gültig waren und man sich somit jede Woche neu anmelden musste. Hat sich das geändert oder hast Du dafür eine Lösung gefunden?

Gruß
  Stefan

stefan.apetz

Moin Stefan,

der Token bleibt erhalten, auch wenn man fhem oder das ganze Linux darunter neu startet. Bei mir auch schon länger als eine Woche ohne Neu-Abfrage.

Hier eine detaillierte Beschreibung der Umsetzung:


Token-Verwaltung im VolvoConnect-Modul

Bei der Erstanmeldung wird über set <Name> reauth ein Volvo-Login gestartet. Nach der Anmeldung wird der Wert des URL-Parameters code mit set <Name> authCode <code> an FHEM übergeben. Dieser Autorisierungscode ist kurzlebig und nur einmal verwendbar.

Das Modul tauscht den Code gegen ein Access- und ein Refresh-Token. Beide werden zusammen mit dem internen Gültigkeitszeitpunkt im FHEM-Key-Value-Store gespeichert. Die Tokenwerte selbst werden nicht als Readings angezeigt.

Automatische Token-Erneuerung

Das Access-Token wird beim nächsten Authentifizierungs- beziehungsweise Abruflauf erneuert, sobald der interne Gültigkeitszeitpunkt erreicht ist. Das Modul plant dafür keinen separaten Timer zum exakten Ablaufzeitpunkt ein. Die Prüfung erfolgt beim Start und anschließend im konfigurierten Abrufrhythmus.

Für den Refresh berücksichtigt das Modul einen Sicherheitsabstand zum vom Server gemeldeten Ablauf: Bei längerer Laufzeit wird der Refresh-Zeitpunkt bis zu zehn Minuten vorverlegt, bei kurzen Laufzeiten um zehn Prozent. Ist ein Token für einen Fahrzeugbefehl bereits abgelaufen, wird vor dem Befehl ebenfalls ein Refresh versucht. Antwortet die Befehls-API mit HTTP 401, erneuert das Modul das Token und wiederholt den Befehl einmal.

Wann ist eine neue Anmeldung erforderlich?

Eine erneute Anmeldung ist nötig, wenn kein Refresh-Token vorhanden ist oder Volvo den Refresh ablehnt, zum Beispiel weil das Token ungültig geworden oder die Berechtigung widerrufen wurde. Dann set <Name> reauth ausführen und nach dem Volvo-Login einen neuen Autorisierungscode übergeben.

Ein fehlgeschlagener Refresh startet keine automatische Browser-Anmeldung. Der Fehler wird im Status und im Reading lastError angezeigt. Nach Änderungen an Client-ID, Client-Secret, VCC API Key oder Scopes sollte ebenfalls reauth ausgeführt werden. Eine Änderung der Scopes löscht die gespeicherten Tokens automatisch.

Technischer Hintergrund

Das Modul verwendet den OAuth2 Authorization-Code-Ablauf mit PKCE (S256). Es berechnet aus einem Code-Verifier eine SHA-256-Challenge für die Volvo-Login-URL. Nach dem Login wird der Autorisierungscode zusammen mit Redirect-URI und Verifier am Volvo-Token-Endpunkt eingelöst; Client-ID und Client-Secret dienen der Client-Authentifizierung.

Token-Austausch und Refresh erfolgen nicht-blockierend über FHEMs HttpUtils_NonblockingGet. So blockieren die Netzwerkzugriffe den FHEM-Hauptprozess nicht. get <Name> tokenInfo zeigt, ob Tokens vorhanden sind und wie lange das Access-Token noch gültig ist – nicht aber die Tokenwerte selbst.


Die tatsächliche Gültigkeitsdauer des Access-Tokens kommt in der Volvo-Antwort im Feld expires_in; sie kann also variieren. Wenn dieses Feld fehlt, nimmt das Modul 3600 Sekunden (eine Stunde) an.

Das Modul erneuert das Token vorsorglich vor dem tatsächlichen Ablauf: bei Laufzeiten über zehn Minuten bis zu zehn Minuten vorher, bei kürzeren Laufzeiten um zehn Prozent. Der Refresh läuft dann beim nächsten Abruf oder Fahrzeugbefehl. Die Berechnung steht in VolvoConnect_TokenCallback.

Die Gültigkeitsdauer des Refresh-Tokens wird vom Modul nicht selbst festgelegt; es verwendet es, bis Volvo es nicht mehr akzeptiert.