You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@rleidner Es stand ja noch ein Refactoring Deiner VW Implementierung aus.
Ich habe mich da mit der KI mal dran gewagt. Das Problem mit dem Hintergrund-Thread habe ich durch ein verkürztes Abfrage-Intervall, dass das Modul vorgeben kann, gelöst: #4147
Die Paket-Daten werden in Variablen abgelegt, nicht in Dateien. Die Anforderungen aufgrund der spezifischen Portal-Eigenheiten habe ich der KI mitgegeben. Bitte schau mal rein und teste, ob Du mit diesem Stand weiter arbeiten kannst.
Vor Nutzung muss die kontinuierliche Abfrage im Portal angestoßen werden: https://eu-data-act.drivesomethinggreater.com/de/de/eu-data-act.html
Benutzerdefinierte Daten abrufen - All Data - 15 min.
Es kann mehrere Stunden dauern, bis erste nicht-leere Datenpakete ankommen.
Die Fahrzeugdaten können auch danach deutlich verzögert eintreffen.
Das Modul fragt das Portal synchron über den normalen openWB-SoC-Scheduler ab.
Empfehlung: die Abfrageintervalle während und außerhalb des Ladens auf 600 Sekunden
setzen. Bei Abruffehlern fordert das Modul über den Intervall-Callback höchstens
60 Sekunden bis zum nächsten Versuch an, unabhängig vom Drei-Fehler-Zähler.
Nach erfolgreichem Abruf gelten wieder die konfigurierten Intervalle.
Manuelle und reguläre frühere Abfragen bleiben möglich; die Einstellung für
Abfragen nur bei eingestecktem Fahrzeug gilt auch für Wiederholungen.
Alle noch nicht verarbeiteten Datenpakete werden von alt nach neu ausgewertet.
Fehlende, ungültige oder ältere SoC-Werte überschreiben keinen gültigen Stand.
Fehlende Reichweite und Kilometerstand bleiben aus dem letzten gültigen Stand
erhalten; der Kilometerstand wird nicht zurückgesetzt. Numerische Nullwerte gelten.
Der Zeitstempel stammt vorrangig aus dem Caddy-SoC-Feld timestampUtc, sonst aus
dem Maximum aller car_captured_time-Werte, ersatzweise aus timestamp (PR #4127).
Wenn keine Reichweite bekannt ist, wird sie aus SoC, Kapazität und Verbrauch berechnet.
Cache, verarbeitete Datensätze und Retry-Flag bleiben ausschließlich im Arbeitsspeicher
des Fahrzeugmoduls. Es werden weder persistente Zustandsdateien noch Rohdaten in der
Ramdisk gespeichert oder eingelesen. Nach einem Prozessneustart oder einer Neuerstellung
des Moduls muss der Cache durch einen erfolgreichen Portalabruf neu gefüllt werden.
Bei Portalausfall wird der Cache mit ursprünglichem Zeitstempel und Warnung
zurückgegeben. Ohne gültigen Cache wird ein Fehler gemeldet, kein künstlicher 0%-Wert.
In beiden Fällen wird nach höchstens einer Minute erneut versucht.
Code-Aufbau:
api.py Login, Wiederanmeldung und HTTP-/ZIP-Abrufe
vehicle_data.py Feldzuordnung, Zeitstempel und Datenauswertung
libeuda.py Synchroner Abruf und In-Memory-Cache
soc.py Einbindung und gemeinsamer Zustand der Scheduler-Callbacks
Summary by Sourcery
Refactor the VW EU Data Act vehicle module to use synchronous scheduler-based portal access with robust in-memory caching and measurement validation.
New Features:
Add synchronous Volkswagen Group EU Data Act portal access with brand-aware authentication, dataset retrieval, and vehicle data extraction.
Bug Fixes:
Prevent invalid, stale, missing, or regressive measurements from replacing valid cached vehicle state.
Enhancements:
Replace the background polling thread and filesystem-based state with scheduler-driven requests and an in-memory vehicle cache.
Preserve valid cached data during portal failures, retry failed requests within 60 seconds, and report errors without fabricating zero measurements.
Improve handling of portal datasets, timestamps, optional vehicle values, range calculation, session renewal, and malformed archives.
Tests:
Add coverage for portal authentication flows, session expiry, archive handling, timestamp selection, data validation, cache behavior, and scheduler retries.
Chores:
Split the EU Data Act integration into dedicated API, data parsing, cache, and scheduler integration modules.
Ich habe das VW-EUDA-Modul vorerst aus der Beta genommen. Sobald wir mit diesem PR eine konistente Lösung haben, nehmen wir es gerne ins 2.4.0 Release auf.
The reason will be displayed to describe this comment to others. Learn more.
@LKuemmel ,
tested and it basically works.
2 observations:
directly after restarting openWB I see 2 errors http 429, disappears after a few minutes
EDIT: looks like error 429 is returned by the portal when all 30 datasets are downloaded in a very short time.
I added for a test a time.sleep(.5) after each file and the 429 disappeared. #4161
in logging level DEBUG I get large binary data written to soc.log, example:
2026-10-20 22:08:29,668 - {modules.common.req:53} - {DEBUG:fetch soc_ev2} - Get-Response: PC T]y J {G%WVWZZZE1Zxxxxxxxx_20261020200139.json [o 7 } _a u B N M GX[2d9 x @i j ....
Apart it works pretty well and refactored code is definitely a considerable improvement.
Replace background polling and file-based state with synchronous dataset polling, validation, and an in-memory cache that preserves the last valid state.
Trigger a new review: Comment @sourcery-ai review on the pull request.
Continue discussions: Reply directly to Sourcery's review comments.
Generate a GitHub issue from a review comment: Ask Sourcery to create an
issue from a review comment by replying to it. You can also reply to a
review comment with @sourcery-ai issue to create an issue from it.
Generate a pull request title: Write @sourcery-ai anywhere in the pull
request title to generate a title at any time. You can also comment @sourcery-ai title on the pull request to (re-)generate the title at any time.
Generate a pull request summary: Write @sourcery-ai summary anywhere in
the pull request body to generate a PR summary at any time exactly where you
want it. You can also comment @sourcery-ai summary on the pull request to
(re-)generate the summary at any time.
Generate reviewer's guide: Comment @sourcery-ai guide on the pull
request to (re-)generate the reviewer's guide at any time.
Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
pull request to resolve all Sourcery comments. Useful if you've already
addressed all the comments and don't want to see them anymore.
Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
request to dismiss all existing Sourcery reviews. Especially useful if you
want to start fresh with a new review - don't forget to comment @sourcery-ai review to trigger a new review!
Refactors the Volkswagen EU Data Act integration to retrieve vehicle data through openWB’s regular SoC scheduler, replacing background polling and file persistence with a shared in-memory cache.
Changes:
Separates authentication, dataset parsing, cache management, and scheduler integration.
Adds cached fallback readings and shorter retry intervals after retrieval failures.
Expands tests for login flows, timestamps, measurement validation, and scheduler state.
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
No-cache failures can publish a fabricated 0% SoC, while unbounded archive processing after restart can exceed the scheduler timeout and delay other vehicles’ updates.
Handle unsupported ZIP methods without blocking archive polling
packages/modules/vehicles/vweuda/api.py:251
An unsupported ZIP compression method makes archive.read() raise NotImplementedError, which escapes this handler and stops polling before newer valid archives are read. Because the archive is not marked processed, every retry encounters the same blocker. Convert this exception to DatasetError too so the polling loop can skip it.
Compare valid capture timestamps as parsed datetimes
Taking the maximum of raw timestamp strings can select an older instant when fractional seconds or UTC offsets differ, giving SoC the wrong timestamp. A null capture value alongside a valid value also raises TypeError, causing the archive to be permanently skipped. Filter invalid candidates and compare parsed datetimes while retaining the selected original string.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
@rleidner Es stand ja noch ein Refactoring Deiner VW Implementierung aus.
Ich habe mich da mit der KI mal dran gewagt. Das Problem mit dem Hintergrund-Thread habe ich durch ein verkürztes Abfrage-Intervall, dass das Modul vorgeben kann, gelöst: #4147
Die Paket-Daten werden in Variablen abgelegt, nicht in Dateien. Die Anforderungen aufgrund der spezifischen Portal-Eigenheiten habe ich der KI mitgegeben. Bitte schau mal rein und teste, ob Du mit diesem Stand weiter arbeiten kannst.
Vor Nutzung muss die kontinuierliche Abfrage im Portal angestoßen werden:
https://eu-data-act.drivesomethinggreater.com/de/de/eu-data-act.html
Benutzerdefinierte Daten abrufen - All Data - 15 min.
Es kann mehrere Stunden dauern, bis erste nicht-leere Datenpakete ankommen.
Die Fahrzeugdaten können auch danach deutlich verzögert eintreffen.
Das Modul fragt das Portal synchron über den normalen openWB-SoC-Scheduler ab.
Empfehlung: die Abfrageintervalle während und außerhalb des Ladens auf 600 Sekunden
setzen. Bei Abruffehlern fordert das Modul über den Intervall-Callback höchstens
60 Sekunden bis zum nächsten Versuch an, unabhängig vom Drei-Fehler-Zähler.
Nach erfolgreichem Abruf gelten wieder die konfigurierten Intervalle.
Manuelle und reguläre frühere Abfragen bleiben möglich; die Einstellung für
Abfragen nur bei eingestecktem Fahrzeug gilt auch für Wiederholungen.
Alle noch nicht verarbeiteten Datenpakete werden von alt nach neu ausgewertet.
Fehlende, ungültige oder ältere SoC-Werte überschreiben keinen gültigen Stand.
Fehlende Reichweite und Kilometerstand bleiben aus dem letzten gültigen Stand
erhalten; der Kilometerstand wird nicht zurückgesetzt. Numerische Nullwerte gelten.
Der Zeitstempel stammt vorrangig aus dem Caddy-SoC-Feld timestampUtc, sonst aus
dem Maximum aller car_captured_time-Werte, ersatzweise aus timestamp (PR #4127).
Wenn keine Reichweite bekannt ist, wird sie aus SoC, Kapazität und Verbrauch berechnet.
Cache, verarbeitete Datensätze und Retry-Flag bleiben ausschließlich im Arbeitsspeicher
des Fahrzeugmoduls. Es werden weder persistente Zustandsdateien noch Rohdaten in der
Ramdisk gespeichert oder eingelesen. Nach einem Prozessneustart oder einer Neuerstellung
des Moduls muss der Cache durch einen erfolgreichen Portalabruf neu gefüllt werden.
Bei Portalausfall wird der Cache mit ursprünglichem Zeitstempel und Warnung
zurückgegeben. Ohne gültigen Cache wird ein Fehler gemeldet, kein künstlicher 0%-Wert.
In beiden Fällen wird nach höchstens einer Minute erneut versucht.
Code-Aufbau:
api.py Login, Wiederanmeldung und HTTP-/ZIP-Abrufe
vehicle_data.py Feldzuordnung, Zeitstempel und Datenauswertung
libeuda.py Synchroner Abruf und In-Memory-Cache
soc.py Einbindung und gemeinsamer Zustand der Scheduler-Callbacks
Summary by Sourcery
Refactor the VW EU Data Act vehicle module to use synchronous scheduler-based portal access with robust in-memory caching and measurement validation.
New Features:
Bug Fixes:
Enhancements:
Tests:
Chores: