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

Jetzt bist du aber kleinkariert… :laughing:
Erste Fehlermeldung heute um 10:13:21.715
2024-12-09 10:13:21.715 - info: mqtt.0 (5707) Client [] connection closed: closed
2024-12-09 10:13:23.428 - info: mqtt.0 (5707) Client [] connected with secret 1733735603427_701

Edit:
@CONSULitAS Keine Ahnung ob es etwas bei der Fehlersuche hilft, hier der Log den Portainer auswirft:

2024-12-09T20:23:58.756313183Z Polestar_2_MQTT.py startet
2024-12-09T20:23:58.756678195Z ==========================
2024-12-09T20:23:58.758798308Z get_token()
2024-12-09T20:23:58.758922510Z get_login_tokens()
2024-12-09T20:23:58.760407504Z Connected with result code Success
2024-12-09T20:23:58.941378412Z Fehler: list index out of range
2024-12-09T20:23:58.942677280Z Fehler in Zeile: 65
2024-12-09T20:23:58.942770649Z Fehlertyp und Nachricht: IndexError list index out of range
2024-12-09T20:23:58.945690285Z Traceback (most recent call last):
2024-12-09T20:23:58.946179351Z File „/app/Polestar_2_MQTT.py“, line 336, in
2024-12-09T20:23:58.946288164Z main()
2024-12-09T20:23:58.946351867Z ~~~~^^
2024-12-09T20:23:58.946405292Z File „/app/Polestar_2_MQTT.py“, line 301, in main
2024-12-09T20:23:58.946539771Z access_token, expiry_time, refresh_token = get_token(POLESTAR_EMAIL, POLESTAR_PASSWORD)
2024-12-09T20:23:58.946570437Z ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-12-09T20:23:58.946594270Z File „/app/Polestar_2_MQTT.py“, line 146, in get_token
2024-12-09T20:23:58.946617011Z path_token, cookie = get_login_tokens()
2024-12-09T20:23:58.946639288Z ~~~~~~~~~~~~~~~~^^
2024-12-09T20:23:58.946660973Z File „/app/Polestar_2_MQTT.py“, line 65, in get_login_tokens
2024-12-09T20:23:58.946683047Z path_token = response.headers.get(‚Location‘).split(„resumePath=“)[1].split(„&“)[0]
2024-12-09T20:23:58.946705713Z ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
2024-12-09T20:23:58.946727509Z IndexError: list index out of range

1 „Gefällt mir“

GAR nicht gut:

Update: Polestar started to use PKCE for authentication. I can now get the code, but I cannot yet exchange it for a token. The quest continues!

uiuiui das klingt nach back2tibber…

Woher hast Du das? Würde ich gerne mit verfolgen…

Guggst du hier:

Python for Polestar

Edit: Scheint dort wohl schon sowas wie ne Lösung zu geben. Kann nicht mehr lange dauern bis es da nen Push Request gibt.

1 „Gefällt mir“

iOS Widgets hab ich schon gefixt

3 „Gefällt mir“

Danke, schneller als der Schall!

1 „Gefällt mir“

Versteh’ ich nicht - „git pull“ sagt die Version sei bereits aktuell (docker compose up --build habe ich mir deshab gespart), im IOBroker und Portainer sehe ich die gleichen Fehler.
Hast du schon ein Update gemacht? So habe ich deine Bemerkung verstanden… Was mache ich dann falsch?

Nein.

Ich habe die Rückmeldung zum widget gegeben.

Ah okay, dann hatte ich das falsch interpretiert - Sorry dafür.

So, jetzt aber!

Das Problem ist behoben:

olestar2mqtt  | get_battery_data()
polestar2mqtt  | {
polestar2mqtt  |     "getBatteryData": {
polestar2mqtt  |         "averageEnergyConsumptionKwhPer100Km": 24,
polestar2mqtt  |         "batteryChargeLevelPercentage": 75,
polestar2mqtt  |         "chargerConnectionStatus": "CHARGER_CONNECTION_STATUS_CONNECTED",
polestar2mqtt  |         "chargingCurrentAmps": 16,
polestar2mqtt  |         "chargingPowerWatts": 10800,
polestar2mqtt  |         "chargingStatus": "CHARGING_STATUS_CHARGING",
polestar2mqtt  |         "estimatedChargingTimeMinutesToTargetDistance": null,
polestar2mqtt  |         "estimatedChargingTimeToFullMinutes": 180,
polestar2mqtt  |         "estimatedDistanceToEmptyKm": 260,
polestar2mqtt  |         "estimatedDistanceToEmptyMiles": 140,
polestar2mqtt  |         "eventUpdatedTimestamp": {
polestar2mqtt  |             "iso": "2024-12-10T22:13:06.000Z",
polestar2mqtt  |             "unix": "1733868786"
polestar2mqtt  |         }
polestar2mqtt  |     }
polestar2mqtt  | }

Die Action zum Bau und Hochladen des neuen Containers ist jetzt gelaufen. Es können also alle mit git pull oder watchtower ihre Container aktualisieren. Sollte laufen.

Die Verbesserungen baue ich aber erst ein, wenn ich wieder zu Hause bin. Ist spät und im Hotel doof. :grin:

Ungeduld: Ich musste erst den Javascript-Code von @salkin nach Python in mein Programm portieren und testen. Ist halt nicht Copy-Paste.

@salkin/Niklas,
super Arbeit in der kurzen Zeit!
Ich muss aber jetzt erst mal meinen Code ein bisschen aufräumen.

1 „Gefällt mir“

…gepaart mit Unwissenheit!
Nochmals Entschuldigung, ich wollte nicht drängeln, hab’ deinen Post einfach falsch verstanden.

1 „Gefällt mir“

Schon gut, Ihr sollt hier ja auch was lernen. :wink: :grin:

Und noch was:

Lass als „unwissender User“ einen Watchtower mitlaufen.

Der aktualisiert Container automatisch und Du bekommst Updates ohne Mühe.

Ich plane einen „kleinen“ Breaking Change, den ich aber hier vorher ankündigen werde. Nix schlimmes, ich will nur die Variablen-Namen in der docker-compose.yml aufräumen. Die müssen dann einfach nur nach Tabelle umbenannt werden.

In so einem Fall ist ein automatisches Update natürlich unter Umständen eine kleine Überraschung. Sonst aber für Sicherheitsupdates und Co das Beste.

Danke für deine Arbeit - läuft wieder!

Zum watchtower muss ich aber „für Blöde“ fragen. Den Abschnitt von #27 in die „docker-compose.yml“ einfügen ohne die Einrückung zu verändert - soweit okay. Ist es egal ob dies an Position 1 oder 2 geschieht?

Oder ist dies durch den Eintrag oberhalb von „2“ schon obsolete?

Ja, ist egal ob vor oder nach dem mqtt Container :slight_smile:

1 „Gefällt mir“

Genau. Bitte das services: weglassen (also nur einmal am Anfang). Das ist die „Überschrift“ des Abschnitts.

Der Eintrag unter labels: sagt dem Watchtower, dass dieser Container aktualisiert werden soll.

Ein Tipp: Bei so Fragen immer erst einmal ChatGPT fragen. Das kann das zum Teil besser als ich. Nutze ich auch gerne.

Frage mal z.B. zum Einstieg „Erkläre mir die folgende docker-compose.yml“ und dahinter die komplette Datei kopieren. Du wirst staunen.

1 „Gefällt mir“

Ist jetzt merged. :+1:

1 „Gefällt mir“

Interessante Erkenntnis:

POLESTAR_CYCLE sollte etwas unter 300 Sekunden (bei mir jetzt 280) konfiguriert werden.

Hintergrund: Beim Abruf des API-Token bekommt man „expires_in = 299“.

Bleibt man unter dieser Zeit, so erfolgt nicht bei jedem Zyklus ein neuer Login, sondern er nutzt das Token weiter.

Naja, fast. :grin:

Da fehlt im Code noch die Refresh-Funktion für das Token. :man_facepalming:

1 „Gefällt mir“