github its-me-prash/vwgroup-connect-ha v3.2.0
VAG Connect v3.2.0

latest releases: v5.3.0, v5.2.5, v5.2.4...
3 months ago

VAG Connect v3.2.0

Home Assistant integration for Audi · VW · Škoda · SEAT · CUPRA · Porsche · VW US/CA.

What's new in this release / Was ist neu in diesem Release

Added

  • Škoda active ventilation switch (cabin airing without heating). The MySkoda app's "Lüften" — air the cabin without running the heater — was in the API client but had no HA switch. It now has its own switch, routed to the Škoda command_start_active_ventilation command. It can never collide with the existing SEAT/CUPRA ventilation switch: each command lives on a different brand's client. Optimistic state, since the Škoda read path doesn't report a ventilation state. Requested by Wehrfried via the Home Assistant Tipps und Tricks Facebook group.
  • CUPRA remaining-charge-time now reads (#1202). SEAT/CUPRA ship the time-until-charging-finishes as a remaining_time_finished value + TIME_UNIT_* unit pair (a dictionary field that wasn't wired to a sensor). It now feeds the remaining-charge-time sensor, converted to minutes from whatever unit the car sends — as a last-resort fallback that never overrides a canonical remaining_charging_time. Both leaves are consumed so they stop surfacing to the Scout. First surfaced by a CUPRA Raval.
  • Disabling a vehicle now actually stops polling it. If you have more than one car on an account and disable one in Home Assistant (its device page), the integration no longer keeps polling that VIN in the background — so a car you don't want stops consuming the daily request budget. It resumes automatically if you re-enable the device. Reported by Marco Schmidt via the Home Assistant Tipps und Tricks Facebook group.

Fixed

  • A frozen State-of-Charge now recovers instead of latching on the stale value (#1195). VW's portal sometimes reports SoC under two disagreeing values and stamps the stale one with a newer capture time, so the reading is left contested; the reconcile step then kept whichever candidate was closest to the last reading, which latches — once stuck, the stale value is both the anchor and a candidate, so a genuinely changed SoC could never land (an ID.4 froze at 94 % while the car was at 57 %). Contested SoC is now arbitrated with independent live evidence: the energy-content ratio (battery_available_kwh / battery_cap_kwh, which isn't part of the contest and is stateless) and whether the car actually moved (odometer advanced → the SoC must have changed, so a candidate still equal to the frozen value is the stale one and is dropped). Parked cars with no evidence fall back to the previous behaviour, so the spurious-twin guards still hold. Grounded in @Fishermanjb's diagnostics.
  • Škoda sensors no longer drop to "unknown" from a false token-refresh storm (#1078). A single poll fans out ~14 concurrent requests; when they all hit a just-expired token at once, each one independently refreshed it, so one expiry event burned the whole "3 refreshes/hour" safety budget in seconds and tripped the storm guard at a perfectly healthy 30-minute interval. Refreshes now coalesce — a request that finds the token already rotated by a sibling reuses it instead of refreshing again, so one expiry costs one refresh. A genuine storm (a refresh that keeps failing) still trips. Grounded in @foobarth's report, and independently confirmed on a Škoda Octavia by Marco Schmidt via the Home Assistant Tipps und Tricks Facebook group.
  • No more phantom "auxiliary heating" switch on a Škoda without a heater. Škoda declares no fuel-fired aux heater and carries no aux-heating capability id, so the "don't hide on unknown" rule spawned a Standheizung switch that did nothing on a diesel Octavia. The switch now needs positive evidence on a brand that declares no aux heater (a mapped capability the backend confirms, or an actual aux-heating reading); brands that declare the heater (VW/Audi) or carry a mapped capability (SEAT/CUPRA) are unchanged. Reported by Wehrfried via the Home Assistant Tipps und Tricks Facebook group.
  • Škoda diesels stop hammering the charging endpoint. A combustion-only Škoda has no HV battery, so /charging returns 403 on every poll forever. Once a poll's driving-range tells us the car is pure-combustion, that read is skipped — no repeated 403s, no charging sensors on a diesel. EV and PHEV are never skipped. Same report from Wehrfried, and seen again on Marco Schmidt's Octavia (same Facebook group).
  • Remaining-charge-time sensors no longer freeze after a charge ends (#632). Sibling of the charge power/rate freeze (#1090): some backends keep sending the last "minutes remaining" value once a session stops, so the ETA sat stuck (a captured VW ID.7 showed 70 minutes remaining while parked at NOT_READY_FOR_CHARGING; other portal VWs showed 5 and 115). The remaining_charge_time_min sensors (incl. the nav- and bulk-current variants) now read 0 once charging is explicitly off. Unlike power/rate this also covers EU-Data-Act portal cars, which never report the charge plug, so the rule keys on the charging flag being off rather than the plug — and never fires while the charge state is unknown, where the ETA may be real. Surfaced from @gr6803's ID.7 diagnostics.
  • Charge target now shows the real cap when Battery Care is on (#632). On a MEB car with Battery Care active the charge-target sensor read the raw profile ceiling (100%) even though the car actually stops at the Battery-Care threshold (e.g. 80%). The target now reads the lower of the two whenever Battery Care is active, so it matches what the car will really charge to. Cars without Battery Care, or with it off, are untouched. From @gr6803's VW ID.7 diagnostics.
  • Charge power and rate stop lingering after a charge ends on portal cars (#632). The stale-after-stop zeroing (#1090) only fired when the car reported a charge plug, which EU-Data-Act portal cars never do — so a VW ID.7 kept showing a charging rate of 29 km/h while parked. Those sensors now also zero once charging is explicitly off, matching the remaining-time behaviour, without faking a 0 on a car that never reported one.
  • Škoda climate sensor no longer shows a raw "INVALID". On a combustion Škoda (or whenever the air-conditioning endpoint returns no valid state) the climate-state sensor displayed the literal INVALID. It now reads unavailable instead, which is what "no valid climate state" actually means; the climate entity already treated it as off. Reported by Marco Schmidt via the Home Assistant Tipps und Tricks Facebook group.
  • Škoda push now arms after a restart (#602). The MQTT push channel needs the account user-id, which was only captured during an interactive login. On a normal restart (persisted tokens, no interactive login) it was never captured, so the channel silently never armed — the push sensor stayed "unknown" with nothing in the log. The user-id is now also decoded from the persisted id-token, so the channel arms and its state becomes visible after a restart. (Reaching a live connection still depends on the experimental Škoda broker path.) Reported by Marco Schmidt via the Home Assistant Tipps und Tricks Facebook group.
  • ADB companion reads State-of-Charge on a Mk8 Golf GTE (#968). On the Golf 8 the We Connect app shows the battery percentage on the charge-detail sheet, not the overview the selectors read, so the companion channel saw only the departure timers. SoC is now read from the charge-detail screen (rangeArcBatterySoc / "Battery … per cent"), and resource-id matching tolerates the package prefix so a bare id in one build matches a prefixed id in another. Enable the "read charge detail" option to pick it up. Grounded in @plainmad's Mk8 dumps. (Range in imperial "miles" is a separate follow-up so it's never mislabelled as km.)
  • A refused VW US/CA remote lock/unlock now explains itself (#1082). On some US cars (e.g. a 2023 ID.4 whose software level doesn't provision remote lock/unlock) the command comes back as a bare 500 from VW while the lock state still reads correctly. Instead of an opaque error, the command now reports that it's most likely a vehicle capability limit rather than something to keep retrying. The control isn't hidden — the project doesn't remove a button on an unconfirmed 500, in case it's a genuine transient hiccup. Grounded in @fg877khkv8-maker's report.

Changed

  • The "raise your update interval" advice now uses VW's real per-account budget when it's available (#1078). Instead of a blunt fixed step-up, when VW sends its X-RateLimit-Remaining header (already surfaced as the "requests remaining today" sensor) the recommendation spreads the remaining calls over the time until the budget resets. It can only tighten the advice, never drop it below the existing guard, and falls back to the guard unchanged when the header isn't present.
  • The VW US/CA "vehicle data blocked" repair no longer blames an inactive subscription outright (#659). Some cars 403 every read while the subscription is active and the MyVW app still shows live data — VW simply isn't authorising the third-party client. The repair now says so instead of insisting the subscription has lapsed, so owners with an active plan aren't sent chasing a renewal that won't help. Reworded across all 12 languages. Prompted by @jarmbruster74.
  • New debug line for diagnosing empty VW US/CA reads (#1082). When VW US/CA reads come back empty without a 403, there was nothing in the logs to say why. A value-safe fingerprint (whether the S-PIN read path engaged, the country client, the scope, the privileges status) now prints every poll under debug — no VIN, UUID, or token in it. Helps ground the @jarmbruster74 case.

Full diff vs v3.1.1 / Kompletter Diff zu v3.1.1

Every commit, file and code change between the two versions:
Jeder Commit, jede Datei und jede Code-Änderung zwischen beiden Versionen:

➜ v3.1.1...v3.2.0

Recent releases / Letzte Releases

If you're upgrading from an older version, also read these notes:

Wenn du von einer älteren Version updatest, lies auch diese Release-Notes:

Full history: CHANGELOG.md

Installation / Update

HACS users: the update notification appears automatically within ~6 hours of the release.

HACS-User: Der Update-Hinweis erscheint automatisch innerhalb von ~6 Stunden nach dem Release.

Manual install / Manuelle Installation:

  1. Download vag_connect.zip from this release / vag_connect.zip aus diesem Release herunterladen
  2. Unzip and copy custom_components/vag_connect/ to your HA config/custom_components/ folder, replacing any older copy / Entpacken und den Ordner custom_components/vag_connect/ in dein HA config/custom_components/ kopieren — alten Ordner ersetzen
  3. Restart Home Assistant / Home Assistant neu starten

Supported brands / Unterstützte Marken

Volkswagen EU · Audi · Škoda · SEAT · CUPRA · Volkswagen US/CA (Beta) · Porsche (Beta)

Found a bug? / Bug gefunden?

Open an issue with the bug-report template: https://github.com/its-me-prash/vwgroup-connect-ha/issues/new/choose

Bug-Report-Template: https://github.com/its-me-prash/vwgroup-connect-ha/issues/new/choose

Please mask your VIN to the last 6 characters and remove email/tokens/GPS before posting.

Bitte VIN auf die letzten 6 Zeichen kürzen und Email/Tokens/GPS vor dem Posten entfernen.

Don't miss a new vwgroup-connect-ha release

NewReleases is sending notifications on new releases.