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

PS: Hast ja Recht! Wenn ich Zeit und Muße habe, muss ich mal die passenden GitHub-Actions einbauen. Dann gibt es auch automatische Updates für Watchtower…

1 „Gefällt mir“

Wäre cool, auf der Synology ist das immer mühsam, wenn es auf dockerhub nicht ist…

Hallo zusammen,

kann mir einmal jemand eine kurze Anleitung geben (Stichpunkte) wie ich das auf einem Linux (Ubuntu) installiere?
Ich bin zwar halbwegs fit auf der bash, habe aber bisher nichts mit Docker gemacht.
Docker habe ich installiert.
Mit git clone habe ich mir das ganze lokal gezogen und hab’s jetzt in einem Verzeichnis liegen.
Wie geht’s jetzt weiter? :roll_eyes:

Bei der Eingabe von

docker compose up --build

im Verzeichnis Polestar_2_MQTT_Docker bekomme ich nur

no configuration file provided: not found

Edit … hab’s gefunden … die docker-compose_example.yml in docker-compose.yml umbenannt und passende Einträge rein und schon geht’s …

Danke
Jürgen

1 „Gefällt mir“

Ich habe mal einen PR aufgemacht, um den MQTT client auf version 2 zu bringen und MQTT username/password einzufügen. In meinem Setup brauche ich das :wink:

1 „Gefällt mir“

Vorbildlich! Danke! :heart: :heart: :heart: :heart: :heart: :heart:

Und wieder ist das Ding ein wenig besser.

1 „Gefällt mir“

Doch, vor wenigen Momenten:

docker pull consulitas/polestar_2_mqtt_docker:latest

2 „Gefällt mir“

Danke, man kann es nun runterladen. Bei Synology funktioniert das aber sehr gekapselt, das heißt, wenn ich den Container das erste Mal starte, dann muss ich schon sagen, wo die Konfig Datei(oder andere Folder) liegt und brauche auch schon eine „Demo Datei“ die ich anpassen kann.
Beispiel:

Wenn es eine „/opt/cooleapp/settings.cfg“ Datei gibt, dann muss ich vor dem ersten Start die settings.cfg schon haben, anpassen und auf einen - für mich als User sichtbaren - Ordner/File mappen. Hab ich das nicht, dann muss der Container starten und laufen können, damit ich mit eine Terminal Emulation im SynologyOS(Browser) hinkomme.
Es gibt natürlich die Version, sich über die Kommandozeile einzuloggen und dort auch zu editieren, aber das können 98% der User normal nicht. Ich schaue es mir mal an, dann kann ich dir vielleicht noch eine Hilfestellung geben, das ist meist nur als Doku nötig.

1 „Gefällt mir“

Braucht es nicht. Polestar_2_MQTT_Docker/docker-compose_example.yml at main · CONSULitAS/Polestar_2_MQTT_Docker · GitHub

Datei umbenennen und anpassen, fertig.

Welchen Pfad hat sie im Dateiverzeichnis? ich kann auf den Inhalt nicht zugreifen über die normale Container Verwaltung im Synology OS.

Sie ist ja oben verlinkt.

Ich habe mich mal schlau gemacht für Dich:

Aber im Synology läuft der Hase anders: Mit den Eingaben in der Oberfläche baut sich Synology im Hintergrund automatisch eine eigene docker-compose.yml (Erstellen eines Containers | Docker - Synology Knowledge Center).

Also muss man die richtigen Daten in der Synology-Oberfläche eingeben um den richtigen Effekt zu erreichen.

Für meinen Container musst Du im Wesentlichen nur

  • das Image consulitas/polestar_2_mqtt_docker:latest herunterladen
  • die Umgebungsvariaben (Environment) setzen
  • Volume, Network, Port und Links kannst Du ignorieren

Für die Umgebungsvariablen muss Du in den Container-Einstellungen auf „Erweiterte Einstellungen“ / „Advanced Settings“ gehen und dort nach „Umgebung“ / „Environment“ (siehe verlinkte Anleitung oben).

Dort erfasst Du die Variablen aus der docker-compose.yml jeweils mit Name und Wert, so wie folgt (ohne die Doppelpunkte und die # mit den Kommentaren dahinter). Die Anführungszeichen musst Du offensichtlich ebenfalls entfernen:

  TZ:                "Europe/Berlin"
  POLESTAR_EMAIL:    "xx@xxx"
  POLESTAR_PASSWORD: "XXX"
  POLESTAR_VIN:      "LPSVSEDEEMLxxxxxx"
  POLESTAR_CYCLE:    300 # seconds
  MQTT_BROKER:       "192.168.1.100"
  MQTT_PORT:         "1883"
  MQTT_USER:         "" # has to be empty ("") if broker has no password
  MQTT_PASSWORD:     "" # has to be empty ("") if broker has no password
  MQTT_BASE_TOPIC:   "polestar2"

Natürlich musst Du die Daten für Dich anpassen.

Dann sollte der Container eigentlich auch auf einer Synology laufen.

PS: Ich habe mal das ganze gleich im GitHub hinterlegt:

1 „Gefällt mir“

Glückwunsch!

Ja, wenn du ˋdocker compose -dˋ für Daemon (Dienst im Hintergrund) zum Starten nimmst. Geht so bei allen Containern.

Wenn du den Dienst stoppen willst, ˋdocker compose stopˋ. Einfach mal ausprobieren und die Doku zu docker compose lesen.

Wenn das ja dein erster Container ist, solltest du in die ˋdocker-compose.ymlˋ auf jeden Fall Watchtower aufnehmen. Das liefert vollautomatisch Updates.


services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # Zugriff auf Docker-API
    environment:
      - WATCHTOWER_CLEANUP=true # Alte Images entfernen
      - WATCHTOWER_NO_STARTUP_MESSAGE=true # Startmeldung unterdrücken

Bitte in der Datei nur 1x ˋservicesˋ. Die Einrückung muss so bleiben.

1 „Gefällt mir“

Jetzt überforderst du mich… :face_with_head_bandage:

Lesen geht, verstehen geht nicht… :kissing_smiling_eyes:

Was ich verstehe:

  • den Block „services: …unterdrücken“ in ‚docker-compose.yml‘ ohne Veränderung einbauen
  • ‚docker-compose.yml‘ ist die gleiche Datei in der ich Zugangsdaten, MQTT Adresse etc. eingetragen habe.

Aber was mache ich mit dem Befehl ˋdocker compose -dˋ? Einfach nach den Änderungen so aufrufen oder muss ich vorher nochmal ‚docker compose up --build‘ ausführen?

…ich bin verwirrt (weil ich ja auch einfach nur Anweisungen abtippe und nicht wirklich verstehe was ich da tue…)

OK, hier mal ein kleiner Docker-Crashkurs für alle Einsteiger. @Nerds: Bitte nicht über die Vereinfachungen schimpfen!

Docker ist eine Umgebung, die „leichte virtuelle Computer“ ausführt.

Im Prinzip ist ein Docker-Container ein komplett installierter Computer mit Betriebssystem, Anwendungen etc., der in einen Sandkasten gesteckt wird und benutzt werden kann, ohne irgendetwas (außer Docker) installieren zu müssen.

Eine docker-compose.yml ist eine Auflistung von Containern mit den vom Anwender gewünschten Einstellungen, die ich in einem Paket starten möchte (englisch ‚to compose‘: zusammenstellen, also eine Zusammenstellung von Containern). Das Format YML ist relativ einfach und beruht darauf, dass man durch Einrückung der Zeilen Blöcke bilden kann.

Mit dem Befehl docker compose sagt man Docker, dass es in die Datei docker-compse.yml im aktuellen Pfad schauen und die dort stehenden Anweisungen ausführen soll. Dazu gibt es verschiedene Sub-Befehle:

  • docker compose up: Container hochfahren (up halt)
  • docker compose up -d: Container hochfahren und im Hintergrund laufen lassen (auch bei Neustart des Rechners)
  • docker compose stop: Container herunterfahren und entfernen

Jetzt pflücken wir mal die YML auseinander:

services:

hier kommt der Abschnitt mit den Diensten (Containern) die laufen sollen

  watchtower:

der Name des ersten Dienstes (2 Leerzeichen eingerückt, da Unterpunkt zu services:)

    image: containrrr/watchtower

Jetzt kommen die Eigenschaften des Containers. Wieder 2 Leerzeichen eingerückt, da Unterpunkt zu watchtower:, also insgesamt 4 Leerzeichen.

Welcher Container soll verwendet werden, lädt das Image mit diesem Namen von docker.com herunter (Pfad https://hub.docker.com/r/containrrr/watchtower wird automatisch gebildet)

    container_name: watchtower

Mein Name für den Container. Wird z.B. verwendet, wenn ich nur einen einzelnen Container stoppen will und nicht alle (docker compose stop watchtower)

    restart: unless-stopped

Was soll getan werden, wenn der Container abstürzt; hier: neu starten, außer der Anwender hat explizit docker compose stop watchtower eingegeben.

Und jetzt aus meinem Container:

    environment:

In diesem Abschnitt werden die „Umgebungsvariablen“ definiert, die der Container als Konfiguration mitgegeben bekommt. Die Variablen werden beim Start im Container ausgelesen und machen alle wichtigen Einstellungen, da das Image ja universell sein soll. Achtung: Das ist bei jedem Container anders, da muss man die Anleitung des Container-Bauers lesen oder eine Bespieldatei, die meist dabei ist anpassen.

      TZ:                "Europe/Berlin"

Und auch hier wieder die Unterpunkte 2 Zeichen eingerückt, damit insgesamt 6 Leerzeichen.
Zeitzone, sollte für uns passen

      POLESTAR_EMAIL:    "xx@xxx"
      POLESTAR_PASSWORD: "XXX"
      POLESTAR_VIN:      "LPSVSEDEEMLxxxxxx"

Zugangsdaten

ÜBRIGENS: Wenn man mehr als einen Polestar hat, muss man einfach 2 Container bauen. Also Konfiguration in der YML verdoppeln, VIN bei der Kopie anpassen und BASE-Topic anpassen bei der Kopie. Fertig

      POLESTAR_CYCLE:    300 # seconds

Intervall für die Wiederholung

      MQTT_BROKER:       "192.168.1.100"
      MQTT_PORT:         "1883"

Adresse meines MQTT-Brokers (Nachrichtenzentrale für MQTT), kann auch ein Name wie raspi.fritz.box sein. Mein Broker (mosquitto) läuft auch in einem Container auf dem Raspi. Der Port ist für MQTT der Standard und muss in der Regel nicht angepasst werden.

      MQTT_USER:         "" # has to be empty ("") if broker has no password
      MQTT_PASSWORD:     "" # has to be empty ("") if broker has no password

Zugangsdaten

      BASE_TOPIC:        "polestar2"

Basis-Pfad, der vor die Daten unseres Autos gehängt wird sieht dann so aus:

image

    labels:
      # automatic update using Watchtower (https://github.com/containrrr/watchtower) highly recommended
      - "com.centurylinklabs.watchtower.enable=true"

Labels sind Eigenschaften des Containers, die für die Steuerung gesetzt werden können. Dieses Label hier sagt: mach automatische Updates mit Watchtower. Dafür muss aber ein Watchtower-Container laufen, der das übernimmt, siehe oben.

3 „Gefällt mir“

OK, dann jetzt zu Deinen Fragen:

gemeint war alles, was unter „services:“ steht

genau, die kann nämlich beliebig viele Container enthalten/beschreiben

Achtung: Da fehlt das up! docker compose up -d

Der Befehl startet die in der docker-compose.yml beschriebenen Container und sorgt dafür, dass sie im Hintergrund laufen, auch bei Neustart.

Ja.

Nein, docker compose up --build braucht es nicht mehr, da ich mittlerweile das Image bei docker.com bereitgestellt habe und es automatisch heruntergeladen wird. Also braucht Dein Raspi den Container nicht selbst bauen, sondern bekommt ihn als Service von mir.

Das hatte ich Anfang der Woche gemacht. Damit ist für den „einfachen Anwender“ das --build Geschichte.

Läufts? Fragen?

Übrigens noch ein Tipp: Gib solche Fragen einfach mal bei ChatGPT ein. Das Ding erklärt mindestens genau so gut wie ich und spuckt sogar Beispielcode aus.

Hier zu unserem Thema ein Beispiel: https://chatgpt.com/share/6739f44e-c1d8-800a-a09f-2245c9d55106

2 „Gefällt mir“

Vielen Dank, es läuft - aber anders…

Durch meine ständige YT-Guckerei zur Installation bin ich über „Portainer“ gestolpert. Auch da weiß ich Nafti nicht wirklich was ich tue, aber es geht Menu-geführt mit einer (für mich) halbwegs verständlichen Hilfe.
Dort konnte ich mein (zunächst fiktives) Restart-Problem relativ einfach lösen:


„Always“ bedeutet wohl, dass der Container bei jedem Neustart mit hochgezogen wird.

Ob automatsiche Updates auch funktionieren habe ich noch nicht herausgefunden - aber dazu kann ich mich ja dann durch Jochen’s @CONSULitAS Beschreibung kämpfen.
Nochmals Danke dafür Jochen - mit deiner Anleitung werde sogar ich das schaffen :muscle:

1 „Gefällt mir“

Ja, das ist eine gute Idee! Sicher einfach in der Bedienung, kommt aber der Nerd nicht so schnell drauf. :grin:

Ja, und auch wenn er abstürzt!

1 „Gefällt mir“

Leider tut sich seit dem Benutzen des letzten Update der Polestar-App nichts mehr an den Daten. Fehlermeldung:

Edit: Polestar hat wohl wieder etwas geändert - auf der „Auto-Seite“ gibt eine Rubrik „undefined“ deren Link zur Betriebsanleitung führt.

Kannst du dein Fahrzeug hier sehen: Pure progressive performance | Polestar

Ja, und auch mit dem aktuellem Zustand (derzeit „Laden“) und korrekten Daten.