Skip to content

Skoda Connect TP3: vehicle control (climate/charging/window/lock) - #226

Merged
CallMeTechie merged 11 commits into
masterfrom
feat/skoda-control-tp3
Jul 23, 2026
Merged

Skoda Connect TP3: vehicle control (climate/charging/window/lock)#226
CallMeTechie merged 11 commits into
masterfrom
feat/skoda-control-tp3

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

Summary

TP3 der Skoda-Initiative: Steuerbefehle an die Fahrzeuge aus Admin und Portal. Baut auf TP1/TP2 (live).

  • Umfang: Klima an/aus + Zieltemperatur, Laden start/stopp + Ladelimit ({50,60,70,80,90,100}), Fensterheizung an/aus, Ver-/Entriegeln (S-PIN).
  • Client: _get→generisches _request(method,path,body) (401-Refresh/429 an einer Stelle) + 10 Control-Methoden gegen die echten MySkoda-Endpunkte.
  • S-PIN: verschlüsselt at-rest (Migration V67), nie in Antwort/Log; Lock/Unlock ohne PIN → 409.
  • Orchestrierung (skodaControl): Command-Whitelist (hasOwnProperty), NaN-safe Arg-Validierung, S-PIN-Gate, Cloud-Lockout-Limiter (5/15 min gegen Konto-Sperre), Ausführung unter der Konto-Lock (kein Session-Refresh-Race mit dem Poller), kommando-getriggerter 30-s-Refresh (eigene Cooldown-Map).
  • Admin-API POST /vehicles/:id/command + PUT /accounts/:id/spin. Portal-API POST /skoda/vehicles/:id/commandnur bei echtem Login (req.portalLoggedIn) + owner-gegatet (isOwner(session.userId), nie Trust); login_required=200+reason wie Midea; kein CSRF-Token (Portal-Router, bewusst).
  • UI: Steuer-Buttons in Admin-Seite und Portal-Widget (Portal nur bei Login), Entriegeln mit Bestätigungsdialog, select-sicherer Disable + 30-s-Watchdog, S-PIN-Modal. i18n de/en + GC.t-Bridge (3 Themes) + PT-Block.

Sicherheit

Whitelist dicht, Args NaN-safe, S-PIN nie geleakt (Test), Lockout zählt einmal vor Cloud, Command serialisiert unter Account-Lock, Portal login+owner ohne Trust, XSS: alle PT-Labels + v.id via escHtml. 41 neue/erweiterte Tests, volle Suite 2253/0.

Nach Merge (Pflicht vor „fertig")

Direkt nach Deploy: harmloser Live-Spike (ac_temp auf die aktuelle Zieltemp = No-Op) gegen das echte Konto zur Bestätigung von Pfad/Body/Statuscode, danach ein lock zur currentSpin-Verifikation — die 10 Endpunkte stammen aus der myskoda-Referenz und sind erst dann live bewiesen.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NACNfM9Uv6hwZwzXpEkHXQ

Comment thread tests/skoda_client_control.test.js Outdated
await client.startAc('V', 21.4);
const c = calls[0];
assert.equal(c.method, 'POST');
assert.match(c.url, new RegExp(API_BASE.replace(/[.]/g, '\\.') + '/api/v2/air-conditioning/V/start$'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants