Polestar-API zu MQTT im Container (openWB-V1-Anbindung möglich)

Ja, habe ich jetzt gesehen das auf der offiziellen Seite auch kein SoC mehr angezeigt wird.

@enso: gegen eine Änderung der API können wir nicht argumentieren, das ist richtig.
Aber gegen die Änderung auf meinem offiziellen Polestar-Konto werde ich Beschwerde einreichen. So wie es jetzt ist. muss ich die App haben um fern des Autos den SoC zu sehen. Den Zwang zur App und/oder Smartphone lehne ich aber ab!

aktuell funktioniert es wieder! Hoffentlich war es falscher Alarm und nur der Praktikant am Werk.

1 „Gefällt mir“

Ja, die API Änderung wurde rückgängig gemacht. Mal schauen, ob es dabei bleibt :wink:

Und das wo ich vor 20 Minuten eine Beschwerde rausgehauen habe - ob Polestar da so schnell drauf reagiert hat :rofl:

Vielleicht ist es ein neuer Praktikant. Verbindungsfehler gibt es immer wieder, aber heute war es, im Vergleich zu den letzten 6 Monaten extrem. Hier die aufsummierten Verbindungsfehler zu API:

Super! Wer auch immer das richtige Reset-Knöpfchen gedrückt hat.

Ja, geht auch hier wieder, aber obwohl der Container wieder online angezeigt hat, ging es erst nach einem Stop/Start des Containers.

Hatte jemand Gelegenheit mal tiefer in die Rohdaten zu schauen, was da jetzt alles mitgeliefert wird? Am Ende haben sie die schon mal zur Verfügung stehenden Daten wie die Ladeleistung etc. wieder hinzugefügt.

Und wieder geht nix mehr…
Hier das log des Containers (token mit „…“ unkenntlich gemacht:

2026-03-11T10:02:03.053846713Z Polestar_2_MQTT.py startet
2026-03-11T10:02:03.053955563Z ==========================
2026-03-11T10:02:03.053981951Z MQTT (Unknown): attempt 1 to reconnect… (waiting 1 seconds)
2026-03-11T10:02:04.055299979Z MQTT (Unknown): Reconnected successfully after 1.00 seconds!
2026-03-11T10:02:04.056729697Z ensure_valid_token()
2026-03-11T10:02:04.056844991Z get_token(), no refresh token available
2026-03-11T10:02:04.056876602Z get_path_token()
2026-03-11T10:02:04.059696576Z MQTT connected with result code ‚Success‘: polestar2/container/connected=online
2026-03-11T10:02:04.367237120Z code_verifier = cbpr8DRYP5-5qp0YduG-q6xp5E1S0aOvYO_gJC-e4QI
2026-03-11T10:02:04.367354007Z code_challenge = 4xliszbMQ_phiB0RtkevBZ4V-Gd4u9GszBbN7PXQfgs
2026-03-11T10:02:04.367426654Z cookies = PF=NcqPzGjdEh0OR1wfTe5r369ERsJq2Gnvk2bLlDqXAf0X; Path=/; Expires=Wed, 11-Mar-2026 11:02:04 GMT; Max-Age=3600; Secure; HttpOnly; SameSite=None
2026-03-11T10:02:04.367455654Z cookie = PF=NcqPzGjdEh0OR1wfTe5r369ERsJq2Gnvk2bLlDqXAf0X
2026-03-11T10:02:04.367480727Z path_token = KV…fZ
2026-03-11T10:02:04.368393157Z perform_login()
2026-03-11T10:02:04.545197303Z max_age = 15780000
2026-03-11T10:02:04.545306838Z uid = NONE
2026-03-11T10:02:04.545339671Z code = iGnpU9XUomBEeRay7N8beJJSybY_MwatDvkeef62
2026-03-11T10:02:04.546129936Z get_api_token()
2026-03-11T10:02:04.665033597Z access_token = eyJhb…ZCI6IlNVN21LVDB…
2026-03-11T10:02:04.665143244Z refresh_token = EedA2…uGcsyIgafxF7uJPFGFk7B4e
2026-03-11T10:02:04.665207558Z expires_in = 299 (seconds)
2026-03-11T10:02:04.748285845Z expiry_time = 2026-03-11 11:07:03 CET+0100
2026-03-11T10:02:04.749310866Z get_car_data()
2026-03-11T10:02:05.006315882Z Error : ‚NoneType‘ object is not subscriptable
2026-03-11T10:02:05.006579193Z in line: 434
2026-03-11T10:02:05.006677376Z type : TypeError
2026-03-11T10:02:05.006726283Z message: ‚NoneType‘ object is not subscriptable
2026-03-11T10:02:05.006818559Z ************** Traceback ***************
2026-03-11T10:02:05.011185786Z Traceback (most recent call last):
2026-03-11T10:02:05.011326173Z File „/app/Polestar_2_MQTT.py“, line 590, in
2026-03-11T10:02:05.011377542Z main()
2026-03-11T10:02:05.011422560Z ~~~~^^
2026-03-11T10:02:05.011465596Z File „/app/Polestar_2_MQTT.py“, line 552, in main
2026-03-11T10:02:05.011509188Z car_data = get_car_data(POLESTAR_VIN, access_token)
2026-03-11T10:02:05.011552113Z File „/app/Polestar_2_MQTT.py“, line 434, in get_car_data
2026-03-11T10:02:05.011595316Z filtered_car_data = next((car for car in car_data[‚getConsumerCarsV2‘] if car[‚vin‘] == vin), None)
2026-03-11T10:02:05.011637871Z ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
2026-03-11T10:02:05.011680945Z TypeError: ‚NoneType‘ object is not subscriptable
2026-03-11T10:02:05.011724666Z

Der Container Polestar API 2 MQTT funktioniert nicht mehr seit etwa einer Stunde. :disappointed_relieved:
Weiß jemand warum?

Ja, API wurde wieder geändert…

Wenn ich es richtig sehe, wurden zwei Felder in der API entfernt. Ich kann es gerade nicht selbst testen, habe aber mal einen Pull Request aufgemacht @CONSULitAS bitte mal testen, ob das schon reicht.

2 „Gefällt mir“

nur die empfolenen zwei zeilen rauszunehmen reicht nicht.
Ich habe die ganze Sektion auskommentiert, jetzt läufts wieder.

Vielleicht hat Polestar mehr an der API geändert? Das sehe ich aber nicht.
2 „Gefällt mir“

Danke, hat leider nicht gereicht.

Danke, habe ich gerade eingebaut. Reicht.

  • Push erfolgt
  • Container neu gebaut
  • Bitte docker compose pull && docker compose up --d für alle Anwender! Alternativ natürlich Watchtower arbeiten lassen.
3 „Gefällt mir“

Ok, dann musste wohl noch mehr raus…

Ich habe bei der EVCC Integration nur explizit die Felder benutzt, die man auch braucht und alles andere weggelassen. Daher gab es dieses Mal auch keine Probleme bei EVCC :wink:

Für IOBroker user gibt es inzwischen einen Adapter zur Abfrage der Daten. Mag auch für den ein oder anderen Entwickler hier von Interesse sein:

Die oben erwähnten statischen Daten sind dort in eine Rubrik „General“ gewandert, sind also doch noch grundsätzlich in der API vorhanden - nur „umgezogen“.

2 „Gefällt mir“

Der GQL-String ab

ist ja sehr hilfreich.

Aber ab welcher Zeile findest Du das?

Den Code schaue ich mir aus Unwissenheit gar nicht an. Die Rubrik „general“ erscheint bei den Daten des obigen Adapters im IOBroker. Die angezeigten Daten sind wohl die aus dem von dir gezeigtem Code-Schnipsel ab Zeile 295 ff.. Hier ein Screenshot der Sektion:
image
Es wird sogar die Polestar-ID dargestellt. Was „pno34“ sein soll ist mir ein Rätsel.

Aber Ladeleistung/-strom sind weiterhin nicht verfügbar, richtig?

ja, Ladeleistung/-strom sind leider nicht verfügbar.
Trip und Verbrauch auch nicht. Schade.

Leider sind die Ladedaten auch dort nicht vorhanden.
Lediglich eine „Reichweite bei 100%“ wird unter „battery“ angegeben. Wie die sich berechnet und ob man damit ggf. auf den SoH schließen kann, habe ich noch nicht herausgefunden.

Edit:
Ein nettes Gimmick ist die Größe „lastUpdate“.
In der Sektion „battery“ wird diese jedes Mal, wenn das Fahrzeug online ist aktualisiert. In den Sektionen „health“ und „odometer“ nur dann wenn das Fahrzeug mindestens in Fahrbereitschaft versetzt wurde.
So ist leicht zu sehen ob es sich wirklich um aktuelle Werte oder um Karteileichen handelt.
Die Sektion „general“ enthält ja nur statische Daten, da gibt es ein „lastUpdate“ logischerweise nicht. Dafür einen Unterpunkt „content“ der eine Liste mit technischen Daten und Ausstattung enthält. Leider alle mit null-Wert, außer „content.model.name“ - da steht „Polestar 2“. Vielleicht sind die Datenbankeinträge bei Polestar 3/4 gepflegt?

Unter „remote“ gibt es einen refresh-Button. Was der wirklich tut habe ich nicht herausfinden können.
„info“ enthält den Status zur Polestar-Server-Verbindung.