Skip to content

Add Porsche Connect SoC module for vehicles - #3871

Open
teesmokr wants to merge 2 commits into
openWB:masterfrom
teesmokr:feature/porsche-connect-soc
Open

Add Porsche Connect SoC module for vehicles#3871
teesmokr wants to merge 2 commits into
openWB:masterfrom
teesmokr:feature/porsche-connect-soc

Conversation

@teesmokr

@teesmokr teesmokr commented Aug 27, 2026

Copy link
Copy Markdown

Add Porsche Connect SoC module for vehicles

Fügt ein neues Fahrzeug-(SoC)-Modul porsche hinzu, mit dem Ladestand (SoC), Reichweite und Kilometerstand von Porsche-Fahrzeugen über Porsche Connect in openWB verfügbar werden – analog zu bestehenden Cloud-Modulen (Polestar, Tronity, BMW CarData …).

Was es macht

  • Liest soc, range, soc_timestamp und odometer über die Porsche-Connect-Schnittstelle (identity.porsche.com / api.ppa.porsche.com), portiert aus pyporscheconnectapi (Apache-2.0).
  • Synchron mit requests über req.get_http_session()keine neuen Abhängigkeiten.
  • official=False (inoffizielle, reverse-engineerte Schnittstelle, wie andere Cloud-Module).

Anmeldung & Token (analog bmw_cardata)

  • Die Anmeldung erfolgt in der Oberfläche (siehe UI-PR Add settings page for Porsche Connect SoC module openwb-ui-settings#1066): ein „Porsche verbinden"-Button führt den Auth0-Login durch.
  • Das Modul speichert access_token/refresh_token/expires_at in der Fahrzeug-Config und erneuert den Token bei Ablauf selbst; rotierte Tokens werden per MQTT zurück in die Config geschrieben.
  • Das Passwort wird nicht gespeichert – es dient nur transient dem Login.
  • Zusätzlich gibt es einen Datei-/CLI-Modus (cli.py) für Standalone-Tests.

Konfiguration

  • email (Porsche ID, nur zur Anzeige), vin (optional; leer → erstes Fahrzeug im Konto)
  • calculate_soc – SoC während der Ladung berechnen (optional)
  • access_token/refresh_token/expires_at – von der UI-Anmeldung gefüllt

Test

  • 8 Unit-Tests (porsche_test.py, requests_mock), alle grün; flake8 sauber (max-line-length 120).
  • Live bestätigt auf openWB 2.1.9-Patch.2 an einem Porsche Macan 4 (MY2026): SoC 95 %, Reichweite 326 km; Token-Refresh + Rückschreiben in die Config verifiziert.

Hinweis

Dieser PR enthält bewusst keine kompilierten vue-Dateien. Die Einstellungsseite kommt als separater PR im openwb-ui-settings-Repo: openWB/openwb-ui-settings#1066.

New vehicle SoC module `porsche` that reads state of charge, range and
mileage from Porsche Connect (Macan EV from 2024, Taycan, Cayenne E3,
Panamera G2, 911 from 992, 718). Auto-discovered like other vehicle
modules; settings are JSON-editable (email, password, optional VIN).

- api.py: synchronous requests-based Porsche Connect client (Auth0
  "Identifier First" login, token caching/refresh, stored-overview SoC
  read that does not wake the car). Login flow and endpoints ported from
  the community library pyporscheconnectapi (Apache-2.0).
- soc.py: ConfigurableVehicle wiring -> CarState(soc, range, ...).
- config.py: PorscheConnect(Configuration) setup, official=False.
- cli.py: standalone live-test tool (soc/list/charge).
- porsche_test.py: 8 unit tests (mocked HTTP) for parsing, VIN
  resolution, token refresh and direct-charging command flow.
- Optional direct-charging start/stop command (comfort only; not wired
  into openWB's automatic control, which regulates via the wallbox).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@seaspotter

Copy link
Copy Markdown
Collaborator

@seaspotter Modul + UI sind live an einem MY2026 Macan getestet, CI wartet noch auf Freigabe – magst du approven?

Kann ich nicht, machen @LKuemmel oder @benderl sobald sie Zeit zum Reviewen haben :)

…sswort

- config: access_token/refresh_token/expires_at ergaenzt, gespeichertes Passwort entfernt
- api: Config-Modus (Tokens aus der Config + persist_cb) neben dem bestehenden
  Datei-/CLI-Modus; im openWB-Betrieb kein Voll-Login (die Anmeldung macht die UI)
- soc: Tokens aus der Config lesen, rotierte Tokens via MQTT zurueckschreiben
  (analog bmw_cardata); versions-tolerante CarState (odometer optional)

Das Passwort wird nur transient fuer die UI-Anmeldung genutzt und nicht gespeichert.
Live getestet auf openWB 2.1.9-Patch.2 (Macan MY2026): SoC 95%, Reichweite 326 km.
teesmokr added a commit to teesmokr/openwb-ui-settings that referenced this pull request Aug 28, 2026
- vehicle.vue: "Porsche verbinden"-Button loest den Auth0-Login ueber einen
  Backend-Endpoint aus und speichert die Tokens in der Config (analog bmw_cardata);
  das Passwort ist ein lokales Feld und wird NICHT gespeichert; zeigt ein
  Captcha-Bild, falls Auth0 eines verlangt
- public/modules/vehicles/porsche/porsche_auth_login.php: fuehrt den Auth0-Login
  (E-Mail/Passwort, ggf. Captcha) per cURL durch und liefert die Tokens zurueck

Gegenstueck zu openWB/core#3871.
@teesmokr

Copy link
Copy Markdown
Author

Kurzes Update: Das Modul läuft live an einem Macan MY2026 (SoC 95 %, Reichweite 326 km). Ich habe die Anmeldung analog zu bmw_cardata in die UI verlegt — „Porsche verbinden"-Button → Backend-Endpoint macht den Auth0-Login → Tokens landen in der Fahrzeug-Config (Passwort wird nicht mehr gespeichert).

Zwei Fragen:
(1) Wie handhabt ihr Captcha am liebsten? Porsches Auth0 verlangt risikobasiert manchmal ein Bild-Captcha; mein Endpoint reicht es best-effort an die UI durch.
(2) Soll die UI-Anmeldung in diese PRs, oder lieber erst das Basis-Modul mergen und die Anmeldung als Folge-PR?

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