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

@CONSULitAS
Hallo Jochen,

mir ist heute noch eine „Unsauberkeit“ aufgefallen:

Manche Werte z.B. die Ladeleistung werden wenn „0“ als string „null“ dargestellt. Wenn dann echte Werte kommen wird auf den Type „number/Zahl“ gewechselt. MQTT ist das ziemlich egal, der schreibt das einfach hin, aber die Influx Datenbank „erschrickt“ jedes Mal und produziert eine Lücke in den Datenaufzeichnungen.
Wäre es möglich den string „null“ durch die number „0“ im Journal zu ersetzen?

Hi, das würde ich nicht als „Unsauberkeit“ betrachten, sondern als „works as designed“.

Die Idee hinter der aktuellen Implementierung ist, dass der Container 1:1 die Daten durchreicht, die er bekommt. Dabei geht das Programm stumpf durch das empfangene JSON und baut einen MQTT-Baum mit den exakten Daten und der exakten Baumstruktur unter dem Haupt-Topic.
image

Und „null“ ist tatsächlich in Datenbanken und Programmiersprachen etwas anderes als die Zahl „0“. Der Wert bedeutet eben, dass keine Zahl/kein Datum vorhanden ist.

Wo ich bisher (ausschließlich) von dieser Philosophie abgewichen bin, ist der Subtopic „/container“, in dem der Container-Status (noch rudimentär) publiziert wird.

Vorschläge und Pull-Requests, die etwas ähnliches mit den Fahrzeugdaten machen, nehme ich aber gerne entgegen.

Für Dein Problem würde ich vorschlagen mit Node-Red ausgewählte Werte zu filtern und in eigene Topics zu schreiben. Da hast Du alle Freiheiten.

Ja, macht es aber nur noch unübersichtlicher. Für meinen Fall habe ich entschieden mit den Meldungen „zu leben“.

Das größere Problem: nach dem heutigem Backend-Ausfall ist die API mal wieder komplett down.
Das Auto ist wieder online, in der App und der Polestar-Seite sehe ich aktuelle Werte, die API bzw. MQTT zeigen alte Werte.

Edit: Tibber ist uptodate…

Ja das habe ich auch beobachtet. Daten werden geholt, aber die Werte sind alt…

Ja, auch bei re-create und Neustart werden nur die Fahrzeugstammdaten geholt, Batterie und Tacho bleiben leer:

Die API hat sich wieder geändert, die Query für Odometer und Battery ist in eine gemeinsame CarTelemetry Query gewandert. Für EVCC habe ich bereits einen Fix gemacht: Polestar: API fix for Car Telemetry by loebse · Pull Request #18594 · evcc-io/evcc · GitHub

Vielleicht hilft dir das ja, @CONSULitAS . Alternativ kann ich es mir die Tage mal anschauen :wink:

3 „Gefällt mir“

Oh man da muß ich mich je ganz neu wieder reindenken. Hatte das bisher immer über die tipper Api gemacht. Irgendwann letztes Jahr ist das dann aber ausgestiegen.

Ist recht simple… docker compose up -d und vorher ein paar Werte ins docker-compose.yaml schreiben.

@CONSULitAS gibt nen PR für die Changes. Habs im Issue 14 verlinkt :nerd_face:

Musst Du nicht arbeiten? Ich schon! :heart: :heart: :heart: :heart:

Schaue ich mir nachher an.

Langweiliges Meeting :wink: bei mir läuft es seitdem unauffällig und die OpenWB lädt nicht wieder mehr ins Auto als ich wollte :unamused:

Soso! :grin:

OK, ich habe das ohne Test merged, da ich gerade nicht genug Zeit habe. Schlechter wird’s ja nicht. :stuck_out_tongue_winking_eye:

@loebse @Landmatrose @bausi2k @alle

Der automatische Build und Deploy auf den Docker-Hub ist gerade erfolgreich gelaufen. Ihr könnt Euch den Container mit docker compose pull holen und neu starten.

2 „Gefällt mir“

image
Ähm…

Da muss ich aber gleich noch einmal ran. Das hat etwas die Topic-Struktur zerschossen!

Topic-Struktur angepasst:
image

@yeti Danke, gute und schnelle Arbeit!

Neue Version ist gebaut, könnt Ihr holen!

3 „Gefällt mir“

Dafür bekommst Du dann die Updates frei Haus!

Es empfiehlt sich

Einbindung z.B. mit folgendem Code in der docker-compose.yml:

  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      TZ: "Europe/Berlin"
      WATCHTOWER_CLEANUP: "true"
      WATCHTOWER_LABEL_ENABLE: "true"
      WATCHTOWER_INCLUDE_RESTARTING: "true"
      WATCHTOWER_ROLLING_RESTART: "true"
      WATCHTOWER_TIMEOUT: "60s"
      # Run saturday at 9am; Cron expression in 6 fields (Spring Cron syntax, rather than the traditional 5)
      #                    s m  h D M WD
      WATCHTOWER_SCHEDULE: 0 0 10 * * SAT
    logging: &default_logging
      driver: "json-file"
      options:
        max-size: "100k"
        max-file: "5"
    labels:
      - "com.centurylinklabs.watchtower.enable=true"

Mach ich was falsch?
2025-02-04 16_08_58-Clipboard
Bei mir kommen keine Batterie und sonstigen Daten an …
Die Docker-compose.yml hab ich schon geprüft.

Das ist noch die alte Version. Der neue Container macht nur noch get_car_telematics_data()

Mach mal:

   docker compose stop
   docker compose pull
   docker compose up --force-recreate -d

damn, hab ich doch noch was übersehen :innocent: hatte den Focus auf dem OpenWB MQTT. Sorry! :man_facepalming:t2:

Läuft jetzt. Vielen Dank.

Ja, sollte man vielleicht erwähnen:

Der Container bereinigt nicht automatisch die veralteten Topics.

Dafür bietet sich „MQTT Explorer“ an, den man sowieso haben sollte. Da gibt es einen Löschen-Knopf für ganze Topic-Zweige zum Aufräumen.

Genau deswegen habe ich da keine Automatik drin.

  • alter Container anhalten
  • gesamten zugehörigen Pfad löschen
  • neuen Container anlegen → alle Einträge werden neu angelegt.

Diesmal habe ich nur vergessen vor dem Löschen zu schauen welchen Daten in der InfluxDB landen, da musste ich dann vergleichen und händisch nachziehen :face_vomiting: :face_with_head_bandage:

Dann habe ich gemerkt, dass doch schon sehr viele, über den Winter entstandene, Skripte auf die Daten zugreifen.
Auch die musste ich alle auf die neuen Einträge re-mappen. Ich denke, bei nächster Gelegenheit, bastle ich mir doch ein Interface-Skript um die Journal-Daten auf eigene Größen zu übersetzen. Dann kann ich zentral ändern (und bin auch meine „null“ / „0“ Meldung los :laughing:)

Polestar wird schon dafür sorgen, dass die Arbeit nicht ausgeht. Besonders dir @CONSULitAS Jochen nochmal vielen Dank für deine Arbeit!! Was machen wir eigentlich wenn du deinen Polestar verkaufst?