VAG Connect v2.11.0
Cross-brand parser audit against upstream lib source code. Five parallel deep diffs surfaced field-name and parsing bugs that have been silently returning null on every car for some time.
What's new
Fixed (cross-brand parser corrections)
Skoda (myskoda source-verified)
- Driving range fields: was reading
electricRange.distanceInKm/combustionRange.distanceInKmwhich myskoda's DrivingRange model does NOT include. Now readsprimaryEngineRange.remainingRangeInKm+secondaryEngineRange.remainingRangeInKmwithengineTypediscrimination. doors_open/windows_openwere reading from non-existentaccess.doorsOpenedCount. Now readsoverall.doors == "OPEN"per Status.Overall model.driving_scorewas reading non-existent top-levelscore. Now readsweeklyScore.main.adBlueRangeis a flat int upstream, not a dict.
SEAT / CUPRA (pycupra source-verified)
- Charging path-prefix: canonical is
charging.status.charging.*on Born MY24+.charging_power_kw,charging_rate_kmh,charging_type,total_charged_energy_kwhwere silently null on newer firmwares. battery_care_target_soc_pct: pycupra readstargetSocPercentage(no underscores).
VW EU / Audi
plug_led_colordouble-write bug: a second unconditional assignment overwrote valid PPE values with None.battery_careparent block order: canonical isbatteryChargingCare, notcharging.
Added (new endpoint integrations)
Skoda
- Vehicle-health-report warning lights (
/api/v1/vehicle-health-report/warning-lights/{vin}). Canonical source for dashboard warning lamps with per-category breakdown. - Trip statistics (
/api/v1/trip-statistics/{vin}). Lifetime + avg consumption + last-trip fields. - Charging statistics replacement (myskoda PR #586). The legacy
/v1/charging/{vin}/historyreturns HTTP 500 since the 2026-05-15 Skoda app update. New POST tocharging.cariad.digital/charging_statisticswith VIN-filtered date range. Adopted preemptively because the upstream broken state affects all current-firmware Skoda users.
SEAT / CUPRA
- Aux-heating status read (
/api/auxiliary-heating/v1/{vin}/status). We used this host for start/stop since v1.x; the status read fills inauxiliary_heating_status,aux_heating_active,auxiliary_heating_remaining_min,heater_source. - Trip statistics via three OLA endpoints (
/v1/vehicles/{vin}/trips/{shortTerm,longTerm,lastrefuel}). min_socfromsettings.minBatteryStateOfChargeInPercent.climate_remaining_time_min+ derivedclimate_ready_at.
VW EU / Audi
- Selectivestatus jobs:
activeVentilation,batterySupport,chargingProfiles,chargingTimers(per audi_services.JOBS2QUERY). chargeModesub-job (volkswagencarnet PR #328):preferredChargeMode+availableChargeModes.- Aux-heating legacy fallback at
climatisation.auxiliaryHeatingStatus.*for A4 B9 / MIB3.
VW NA (zackcornelius source-verified)
- SHA-512 SPIN as primary attempt + SHA-1 fallback on 4xx
- Canada client_id
69eb3c39-... - OAuth scope
openid profile cars vin - Field-name corrections:
location(notvehicleLocation),readiness.readinessStatus.value.connectionState.isOnline,currentChargeState,chargePower,targetSOCPercentage,currentSOCPct,climateStatusInd,data.timestampepoch-ms cruiseRangeUnits == "MI"now converts to km (miles users had ~38% underreported range)
Verified aligned with upstream
- SEAT / CUPRA
app-market: androidheader already set in_ola_headers.pysince v2.1.x. tokentype: IDK_TECHNICALheader never set anywhere in our codebase.- VW EU auth situation: refresh tokens dead, Play Integrity required, Python cannot bypass. Confirmed wide community consensus.
Still pending (separate PRs)
- VW NA write-side full rewrite (lock/unlock PUT + SPIN session URL + subscription parser) - v2.11.1
- Audi refresh_token defensive (audi_connect_ha PR #749) - v2.11.1
- Audi IDK discovery URL preference (audi_connect_ha PR #738) - v2.11.1
- Skoda TripStatistics OverallCost/FuelCost (needs currency-aware sensor wiring) - v2.11.1
Full diff vs v2.10.12
Installation / Update
HACS users: the update notification appears automatically within ~6 hours.
Manual install:
- Download
vag_connect.zipfrom this release - Unzip and copy
custom_components/vag_connect/to your HAconfig/custom_components/folder, replacing any older copy - Restart Home Assistant