Skip to content

Commit 3df3909

Browse files
committed
fix(id): disable classic VW-ID login (OAuth client retired by VW)
Verified live: identity.vwgroup.io/oidc/v1/authorize returns HTTP 403 with an Auth0 'tenant misconfiguration' error page for client_id a24fba63-34b3-4d43-b181-942111e6bda8 (the classic VW-ID OAuth client), regardless of redirect_uri or User-Agent. The BFF mirror does the same. Repeated probes confirm it's not transient. Other brand clients are unaffected: 9b58543e-... VW PC (EU Data Act portal) OK cc29b87a-... Audi (EU Data Act portal) OK 3ea88bf9-... Skoda (EU Data Act portal) OK f85e5b69-... Seat/Cupra (EU Data Act portal) OK 9496332b-... VW WeConnect (legacy classic) OK (different redirect) For config.type === 'id' the adapter now: 1. Triggers runEuDataAct(VOLKSWAGEN_PASSENGER_CARS) as before — the EU Data Act portal still works with a different OIDC client and is the only remaining source for VW ID vehicles. 2. Skips this.login() entirely with an info-level explanation pointing the user at the EU Data Act setup. No more 403 error spam. 3. Skips the classic BFF refresh path (selectivestatus, parking, …) in updateStatus() — without a token from this.login() those calls would only produce 401s. Re-enabling is one early-return delete if VW ever brings the client back. README: prepended a 'VW ID: EU Data Act portal is now the only data source' callout so users hitting the change immediately know what to do.
1 parent 0f8ca76 commit 3df3909

2 files changed

Lines changed: 39 additions & 19 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ Adapter for VW We Connect, We Connect ID, We Charge, myAudi, Skoda Connect, Seat
1818
Please update your system on Node 10.
1919
<https://forum.iobroker.net/topic/22867/how-to-node-js-f%C3%BCr-iobroker-richtig-updaten>
2020

21+
## VW ID: EU Data Act portal is now the only data source (since 2026-06-01)
22+
23+
VW retired the classic VW-ID OAuth client (`a24fba63-...`) on **2026-06-01**. The IdP at `identity.vwgroup.io/oidc/v1/authorize` returns HTTP 403 with an Auth0 "tenant misconfiguration" error page for that client; the BFF mirror at `emea.bff.cariad.digital/auth/v1/idk/oidc/authorize` does the same. Other brand clients (Audi `cc29b87a-...`, Skoda `3ea88bf9-...`, Seat/Cupra `f85e5b69-...`, VW Passenger Cars EU-Data-Act `9b58543e-...`) are unaffected.
24+
25+
For `config.type === "id"` the adapter now skips the classic login entirely and relies on the EU Data Act portal. **You MUST set up a continuous 15-minute data request once on the portal, otherwise no data flows.** See "Optional: EU Data Act portal" below for the setup steps.
26+
2127
## Optional: EU Data Act portal as additional data source (since v0.9.0)
2228

2329
For all VW Group brands (VW, Audi, Škoda, Seat, Cupra) the adapter can **additionally** consume the continuous 15-minute datasets that VW publishes via the EU Data Act portal at <https://eu-data-act.drivesomethinggreater.com>. This is **optional** — the classic brand-specific login is the primary source and works on its own. The EU Data Act path adds a few hundred extra data points per dataset (mostly diagnostics, configuration and report fields) under `<vin>.statuseudata.*` (snake_case dotted names like `battery_state_report.soc`, `mileage.value`, `parking_brake`, `charging_state_report.current_charge_state`).

main.js

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -332,18 +332,39 @@ class VwWeconnect extends utils.Adapter {
332332
if (euDataActBrand) {
333333
this.runEuDataAct(euDataActBrand).catch((err) => {
334334
const msg = (err && err.message) || String(err);
335-
// Everything EU-Data-Act-related stays at info level: the portal is
336-
// a bonus source, not the primary one. We don't want the log to
337-
// look alarming when the user simply hasn't activated it.
335+
// Everything EU-Data-Act-related stays at info level: for non-VW
336+
// brands the portal is a bonus on top of the classic login. For
337+
// type=id it's the ONLY working source since VW retired the
338+
// classic ID OAuth client (see early-return block below).
338339
this.log.info("EU Data Act (optional source) not available: " + msg);
339340
this.log.info(
340-
"EU Data Act is an optional 15-min portal data source. To enable it, " +
341+
"EU Data Act is the 15-min portal data source. To enable it, " +
341342
"log in once at https://eu-data-act.drivesomethinggreater.com/, link " +
342-
"your vehicle and configure a continuous 15-minute data request. " +
343-
"The classic login below covers the primary data either way.",
343+
"your vehicle and configure a continuous 15-minute data request.",
344344
);
345345
});
346-
// Fällt durch zu this.login() unten — der klassische Flow läuft parallel.
346+
// For non-id brands we fall through to this.login() below; for
347+
// type=id the early return after this block skips it entirely.
348+
}
349+
350+
// VW retired the classic VW-ID OAuth client (a24fba63-...). The IdP
351+
// returns 403 with an Auth0 "tenant misconfiguration" error page on
352+
// the authorize endpoint as of 2026-06-01 — same behaviour for the
353+
// weconnect:// redirect on both identity.vwgroup.io and the BFF host.
354+
// Other brand clients (Audi cc29b87a, Skoda 3ea88bf9, Seat/Cupra
355+
// f85e5b69, VW PC 9b58543e for the EU Data Act portal) are unaffected.
356+
//
357+
// For type=id we skip the classic login entirely — the EU Data Act
358+
// path above is the only working data source. Re-enable this block
359+
// (delete the early return) if VW ever brings the client back.
360+
if (this.config.type === "id") {
361+
this.log.info(
362+
"Classic VW ID login (a24fba63 OAuth client) was retired by VW. " +
363+
"The adapter now relies exclusively on the EU Data Act portal " +
364+
"for VW ID vehicles. See README -> 'EU Data Act portal' for setup.",
365+
);
366+
this.subscribeStates("*");
367+
return;
347368
}
348369

349370
this.login()
@@ -1571,18 +1592,11 @@ class VwWeconnect extends utils.Adapter {
15711592
});
15721593
});
15731594
} else if (this.config.type === "id") {
1574-
// Periodischer Refresh: BFF-Status (selectivestatus, parking, …) plus
1575-
// optional EU Data Act als ergänzende Quelle (15-min Datasets).
1576-
this.vinArray.forEach((vin) => {
1577-
this.getIdStatus(vin).catch(() => {
1578-
this.log.error("get id status Failed");
1579-
});
1580-
});
1581-
// EU Data Act polling has its own dedicated 1-min timer in
1582-
// runEuDataAct (this.euDataActInterval). Don't double-poll from the
1583-
// classic updateInterval — listDatasets is cheap but still wasted
1584-
// bandwidth, and the dedup-by-filename in getEuDataActStatus only
1585-
// prevents the redundant download, not the redundant list call.
1595+
// Classic BFF refresh path (selectivestatus, parking, …) is gone:
1596+
// the underlying VW-ID OAuth client was retired by VW (see onReady,
1597+
// type=id early return). EU Data Act polling has its own dedicated
1598+
// 1-min timer in runEuDataAct (this.euDataActInterval), nothing to
1599+
// do here.
15861600
return;
15871601
} else if (this.config.type === "audietron") {
15881602
this.vinArray.forEach((vin) => {

0 commit comments

Comments
 (0)