Add Porsche Connect SoC module for vehicles - #3871
Conversation
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 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.
- 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.
|
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: |
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?
Die Anmeldung hast Du doch komplett in dem verlinkten UI-PR untergebracht. Das passt soweit, die werden direkt nacheinander gemerged. |
| # 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. |
There was a problem hiding this comment.
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.
Perfekt, 2FA gibt's bei Porsche bzw. der API nicht. |
|
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. |
Add Porsche Connect SoC module for vehicles
Fügt ein neues Fahrzeug-(SoC)-Modul
porschehinzu, 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
soc,range,soc_timestampundodometerüber die Porsche-Connect-Schnittstelle (identity.porsche.com/api.ppa.porsche.com), portiert aus pyporscheconnectapi (Apache-2.0).requestsüberreq.get_http_session()– keine neuen Abhängigkeiten.official=False(inoffizielle, reverse-engineerte Schnittstelle, wie andere Cloud-Module).Anmeldung & Token (analog
bmw_cardata)access_token/refresh_token/expires_atin der Fahrzeug-Config und erneuert den Token bei Ablauf selbst; rotierte Tokens werden per MQTT zurück in die Config geschrieben.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ülltTest
porsche_test.py,requests_mock), alle grün; flake8 sauber (max-line-length 120).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.