Skip to content

Add Porsche Connect SoC module for vehicles - #3871

Merged
benderl merged 3 commits into
openWB:masterfrom
teesmokr:feature/porsche-connect-soc
Sep 4, 2026
Merged

Add Porsche Connect SoC module for vehicles#3871
benderl merged 3 commits into
openWB:masterfrom
teesmokr:feature/porsche-connect-soc

Conversation

@teesmokr

@teesmokr teesmokr commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

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
Contributor 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?

@benderl

benderl commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

(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.

Bis jetzt war ein Captcha immer ein KO-Kriterium für einen automatischen Workflow. Deine Lösung hat aber durchaus Charme. Andere Fallstricke wie z.B. 2FA gibt es bei Porsche nicht?

(2) Soll die UI-Anmeldung in diese PRs, oder lieber erst das Basis-Modul mergen und die Anmeldung als Folge-PR?

Die Anmeldung hast Du doch komplett in dem verlinkten UI-PR untergebracht. Das passt soweit, die werden direkt nacheinander gemerged.

Comment on lines +76 to +79
# Zwei Betriebsarten:
# - Config-Modus (openWB): Tokens kommen aus der Fahrzeug-Config, neue Tokens
# werden ueber persist_cb zurueck in die Config (MQTT) geschrieben.
# - Datei-Modus (CLI/standalone): Tokens werden lokal in einer JSON-Datei gecacht.

@benderl benderl Sep 4, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Token sollten analog zu den anderen Modulen nicht im Dateisystem gespeichert werden. Wenn alles im Broker abgelegt wird, sind die Daten auch automatisch in der Sicherung enthalten.

Auf Review-Wunsch (@benderl), analog zu den anderen Modulen - so landen die
Tokens automatisch im Backup:
- api: Datei-Token-Speicherung entfernt (kein _DATA_PATH / Token-Datei mehr);
  Tokens ausschliesslich ueber token/persist_cb (Config/Broker)
- cli: haelt seinen Token-Cache jetzt selbst (nur fuer das Standalone-CLI)
- test: an die neue Signatur angepasst

Live getestet: SoC-Abruf laeuft rein aus der Fahrzeug-Config, kein Dateisystem.
@teesmokr

teesmokr commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

(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.

Bis jetzt war ein Captcha immer ein KO-Kriterium für einen automatischen Workflow. Deine Lösung hat aber durchaus Charme. Andere Fallstricke wie z.B. 2FA gibt es bei Porsche nicht?

(2) Soll die UI-Anmeldung in diese PRs, oder lieber erst das Basis-Modul mergen und die Anmeldung als Folge-PR?

Die Anmeldung hast Du doch komplett in dem verlinkten UI-PR untergebracht. Das passt soweit, die werden direkt nacheinander gemerged.

Perfekt, 2FA gibt's bei Porsche bzw. der API nicht.

@teesmokr

teesmokr commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Danke fürs Review!

Token-Speicherung: Erledigt — die Datei-Speicherung ist raus (f636f6c). Die Tokens liegen jetzt ausschließlich in der Fahrzeug-Config (Broker) und werden per Callback dorthin zurückgeschrieben, analog zu bmw_cardata; landen damit automatisch im Backup. Das Standalone-CLI hält seinen Cache selbst.

openWB/openwb-ui-settings#1066) können nacheinander gemergt werden.

@benderl
benderl merged commit 7432dc8 into openWB:master Sep 4, 2026
1 check passed
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.

3 participants