OpenWB SoC Modul - schon wer dran?

Hi zusammen,

hat schon wer angefangen am SoC Modul für die OpenWB zu basteln?

@Leguan ich glaube du hättest auch Interesse, oder?

Hat sich schon wer die Mühe gemacht, die Authentifizierung der App gegen über den Polestar-Servern anzuschauen?

CU
Markus

1 „Gefällt mir“

Ja das hätte ich. So wie ich das verstanden habe greift die obenWB hier die daten aus der App ab bzw aus der Cloud.
Im OpenWB Forum wurde das bereits angesprochen.

Ich habe auch eine openWB und hätte großes Interesse! Wieso kann eigentlich jeder DC Lader den SoC auslesen und bei AC nicht?

Das ist beim AC nicht im Standard. Da geht die Steuerung über PWM und da hat man das nicht in den Standard gebracht.

Und bevor das falsch rüberkommt: ich kenne überhaupt keine andere Wallbox die den SOC auslesen kann, geschweige denn, mit dem SOC etwas anfangen. Das ist die große Besonderheit der OpenWB, die dadurch intelligentere Ladestrategien unterstützen kann.

Kannst du den Thread mal verlinken?

https://openwb.de/forum/viewtopic.php?f=5&t=3263&p=39857&hilit=polestar#p39857

1 „Gefällt mir“

Hab mir mal Fiddler installiert… die OAUTH config gibt es schonmal :grin:

Host: polestarid.eu.polestar.com
Accept: */*
Accept-Language: de-de
Connection: keep-alive
Accept-Encoding: gzip, deflate, br
User-Agent: Polestar/811 CFNetwork/1312 Darwin/21.0.0


{
  "issuer": "https://polestarid.eu.polestar.com",
  "authorization_endpoint": "https://polestarid.eu.polestar.com/as/authorization.oauth2",
  "token_endpoint": "https://polestarid.eu.polestar.com/as/token.oauth2",
  "revocation_endpoint": "https://polestarid.eu.polestar.com/as/revoke_token.oauth2",
  "userinfo_endpoint": "https://polestarid.eu.polestar.com/idp/userinfo.openid",
  "introspection_endpoint": "https://polestarid.eu.polestar.com/as/introspect.oauth2",
  "jwks_uri": "https://polestarid.eu.polestar.com/pf/JWKS",
  "registration_endpoint": "https://polestarid.eu.polestar.com/as/clients.oauth2",
  "ping_revoked_sris_endpoint": "https://polestarid.eu.polestar.com/pf-ws/rest/sessionMgmt/revokedSris",
  "ping_end_session_endpoint": "https://polestarid.eu.polestar.com/idp/startSLO.ping",
  "device_authorization_endpoint": "https://polestarid.eu.polestar.com/as/device_authz.oauth2",
  "scopes_supported": [
    "conve:fuel_status",
    "vehicle:capabilities",
    "care_by_brand:financial_information:payment_method",
    "exve:diagnostics_engine_status",
    "care_by_brand:financial_information:invoice:read",
    "appointment",
    "conve:trip_statistics",
    "vehicle:parking",
    "exve:odometer_status",
    "conve:environment",
    "vehicle:trip_status",
    "vehicle:oil_status",
    "vehicle:engine_start",
    "vehicle:engine",
    "vehicle:climatization",
    "conve:vehicle_relation",
    "exve:lock_status",
    "payment:payment",
    "conve:tyre_status",
    "vehicle:climatization_calendar",
    "tsp_customer_api:all",
    "exve:warnings",
    "care_by_brand:customer:identity",
    "openid",
    "profile",
    "customer:attributes",
    "conve:diagnostics_workshop",
    "vehicle:bulb_status",
    "vehicle:climatization_status",
    "exve:windows_status",
    "vehicle:service_status",
    "conve:lock_status",
    "vehicle:odometer_status",
    "exve:tyre_status",
    "customer:attributes:write",
    "vehicle:connectivity_status",
    "exve:doors_status",
    "conve:diagnostics_engine_status",
    "exve:fuel_status",
    "vehicle:unlock",
    "conve:brake_status",
    "conve:doors_status",
    "vehicle:attributes",
    "vehicle:honk_blink",
    "care_by_brand:subscription:read",
    "exve:brake_status",
    "vehicle:lock",
    "conve:odometer_status",
    "vehicle:deliverToCar",
    "vehicle:brake_status",
    "conve:engine_status",
    "carshare:guest",
    "conve:commands",
    "vehicle:doors_status",
    "vehicle:attributes:write",
    "conve:windows_status",
    "vehicle:privacy",
    "exve:engine_status",
    "vehicle:orderToCar",
    "vehicle:lock_status",
    "conve:navigation",
    "vehicle:engine_status",
    "conve:connectivity_status",
    "appointment:write",
    "vehicle:location",
    "email",
    "csb:all",
    "brand_on_call:all",
    "order:attributes",
    "conve:climatization_start_stop",
    "conve:engine_start_stop",
    "vehicle:tyre_status",
    "vehicle:ihu",
    "conve:lock",
    "vehicle:maintenance_status",
    "carshare:owner",
    "vehicle:coolant_status",
    "vehicle:climatization_calendar_status",
    "oidc.profile.read",
    "conve:command_honk_flash",
    "conve:unlock",
    "vehicle:washer_status",
    "exve:vehicle_statistics",
    "vehicle:fuel_status",
    "exve:diagnostics_workshop",
    "vehicle:trips",
    "conve:warnings"
  ],
  "claims_supported": [
    "pi.sri",
    "sub"
  ],
  "response_types_supported": [
    "code",
    "token",
    "id_token",
    "code token",
    "code id_token",
    "token id_token",
    "code token id_token"
  ],
  "response_modes_supported": [
    "fragment",
    "query",
    "form_post"
  ],
  "grant_types_supported": [
    "implicit",
    "authorization_code",
    "refresh_token",
    "password",
    "client_credentials",
    "urn:pingidentity.com:oauth2:grant_type:validate_bearer",
    "urn:ietf:params:oauth:grant-type:jwt-bearer",
    "urn:ietf:params:oauth:grant-type:saml2-bearer",
    "urn:ietf:params:oauth:grant-type:device_code",
    "urn:openid:params:grant-type:ciba"
  ],
  "subject_types_supported": [
    "public",
    "pairwise"
  ],
  "id_token_signing_alg_values_supported": [
    "none",
    "HS256",
    "HS384",
    "HS512",
    "RS256",
    "RS384",
    "RS512",
    "ES256",
    "ES384",
    "ES512",
    "PS256",
    "PS384",
    "PS512"
  ],
  "token_endpoint_auth_methods_supported": [
    "client_secret_basic",
    "client_secret_post",
    "private_key_jwt"
  ],
  "token_endpoint_auth_signing_alg_values_supported": [
    "RS256",
    "RS384",
    "RS512",
    "ES256",
    "ES384",
    "ES512",
    "PS256",
    "PS384",
    "PS512"
  ],
  "claim_types_supported": [
    "normal"
  ],
  "claims_parameter_supported": false,
  "request_parameter_supported": true,
  "request_uri_parameter_supported": false,
  "request_object_signing_alg_values_supported": [
    "RS256",
    "RS384",
    "RS512",
    "ES256",
    "ES384",
    "ES512",
    "PS256",
    "PS384",
    "PS512"
  ],
  "id_token_encryption_alg_values_supported": [
    "dir",
    "A128KW",
    "A192KW",
    "A256KW",
    "A128GCMKW",
    "A192GCMKW",
    "A256GCMKW",
    "ECDH-ES",
    "ECDH-ES+A128KW",
    "ECDH-ES+A192KW",
    "ECDH-ES+A256KW",
    "RSA-OAEP"
  ],
  "id_token_encryption_enc_values_supported": [
    "A128CBC-HS256",
    "A192CBC-HS384",
    "A256CBC-HS512",
    "A128GCM",
    "A192GCM",
    "A256GCM"
  ]
}
5 „Gefällt mir“

Ich hab jetzt eigentlich schonmal die gesamte URL chain damit ich ein JWT Token bekomme und mich prinzipiell einloggen könnte.

Nur dann kommt ein Call an cnepmob.volvocars.com wenn ich die Infos vom Auto (SoC) in der App abrufen will (was bei mir seit 3 Wochen nicht tut). Und da bekomme ich ein NET::ERR_CERT_AUTHORITY_INVALID also invalides Zertifikat. Dachte erst es liegt an meinem Man-In-The-Middle Proxy aber… nein auch ohne Fiddler dazwischen ist das Zertifikat erstmal nicht valide.

So wie es aussieht ist das nicht wirklich für die Öffentlichkeit gedacht (self-signed corporate CA) und man dem Cert einfach trusten müsste.

4 „Gefällt mir“

ok, und dann braucht man ein Client Zertifikat. :unamused: Mal schauen ob ich das irgendwo finden kann. Evtl. könnte wer auf Android Seite bei der App mal schauen ob man da ran kommt.

ERR_BAD_SSL_CLIENT_AUTH_CERT

1 „Gefällt mir“

Mensch, da hast du dir ja richtig Aufwand gemacht. Ich finde solche Basteleien auch schön, aber für „mein“ Auto würde ich das ungern in Erfahrung bringen, was da alles so an „schmu“ zu betreiben ist. Mal gucken was die Anfrage zur offiziellen API mit sich bringt.

Ich wollte eigentlich nur wissen ob meine kaputte Polestar App am Backend liegt oder am Auto. Und das war mal ganz interessant… hätte auch klappen können. :grinning_face_with_smiling_eyes:

Das Client-Zertifikat ist ja aber ein persönliches Zertifikat, das wahrscheinlich in den Client geladen wird, wenn man sich mit der Polestar ID einloggt… denke ich zumindest mal. Das sollte man ja dann nicht mit anderen teilen. Wenn du bei iOS nicht dran kommst, wäre es vielleicht eine Überlegung einen Android Emulator zu verwenden, dort das APK zu laden und sich dann dort einzuloggen?

Ja, das wäre der Plan das mal zu versuchen. Das apk ist nichts anderes als ein zip mit ein paar manifest files oder?

Wenn man ein SoC hätte würde es auch ein paar neue Möglichkeiten in der OpenWB eröffnen.
Habe heute gerade eien open WB mit einem ID3 verbunden… hier kann man dann sowas basteln wie… Sofortladen bis 50% und ab da nur noch pv überschuss mit Phasenumschaltung.
Bei openWB passiert in letzter Zeit nichts mehr an der Software… die basteln vermutlich jeden tag wie wild Boxen zusammen.

Ich glaube die basteln kräftig am 2.0 Release der dann einige große Veränderungen bringt.

Ja, das APK kannst einfach entzippen mit z.B. 7zip.
Aber ich denke, dass das Client Zertifikat nicht im APK ist, das APK wird ja nicht verändert. Das sollte dann in einem app-spezifischen Verzeichnis im System sein. Oder vielleicht wird es auch in einem Zertifikatespeicher gespeichert, da kenne ich mich bei Android zu wenig aus, aber bei Java wird es normal so gemacht, soweit ich weiß.

Stimmt, aber die SOC Module werden von Open WB im Regelfall weder erstellt noch supportet. Polestar hat das wohl kaum auf dem Zettel. Ich hoffe daher, dass jemand aus der Community eines Tages einen Durchbruch hat, so wie wir das bei Browser und USB Medienwiedergabe schon erlebt haben. :+1:

So lange behelfe ich mir mit dem manuellen SOC Modul als Krücke. Ist nicht sehr komfortabel, aber geht.

Eine API Anbindung wäre schon sehr cool. Ich verwende (noch) die IO Broker Version mit Adapter für VW und spiele die Daten dann mit MQTT zu NodeRed. Das schöne ist, dass meine Version viel schneller ist, als die komische VW App und deutlich zuverlässiger funktioniert. Ich mache ja auch die ganzen „unnötigen“ Positionsabfragen nicht :slight_smile: Man darf das Auto nämlich nur blinken lassen, wenn man in einem Radius von 100m ist…

Hat schon mal jemand den Volvo Adapter aus ioBroker getestet? nachdem das alles auf volvocars.com geht?

Yo, das APK enthält ein paar Zertifikate und auch Private Keys… mal schauen, ob man damit weiterkommt. aber prinzipiell schrillen bei mir erstmal ein paar Alarmglocken, wenn ich Private Keys im Code finde. Heißt noch nicht, daß da ein Sicherheitsproblem besteht… erstmal weiter analysieren.

2 „Gefällt mir“