MQTT ist kein Problem aber die Daten die über MQTT gesendet werden sind nicht MQTT konform und binär oder encrypted
Ok, verstanden, danke.
Wird Zeit, dass Polestar die API von Volvo übernimmt. Einfacher geht es kaum. Fast exakt so wie Miele das macht.
Das wird bestimmt das binäre Google ProtoBuf sein. Wird ja überall in AAOS verwendet.
Steck doch mal einen Payload bspw. hier rein: https://protobuf-decoder.netlify.app/
Meinst Du die Message oder auch den Topic?
Ein binär codierter Topic wäre in derTat nicht Standard-Konform. Standard ist UTF-8.
Hat sich gekreuzt!
Cool, muss ich mir mal anschauen.
Habe ich auch schon geguckt kommt nichts sinnvolles raus
Ist das aktuell von deinem Polestar?
Hast mal geschaut ob du in den Hex-Codes deinen aktuellen SoC Wert findest? Wäre schon mal ein Anhaltspunkt. Reichweite wäre noch ein möglicher Wert.
Ich weiß, mühsam, aber manchmal reicht das. Wenn du z.B. nur den SoC brauchst um die Wallbox Steuern zu können. Mehr angezeigte Daten sind nett, aber erst mal nicht so wichtig.
Das ist der Request um Daten abzufragen. Ich gehe davon aus das es mit einem Zertifikat signiert ist weil sonst keine Authentifierungsdaten übermittel werden
Ah, ok, das ist der Request für die Daten und nicht die Antwort. Schade.
Ich versuche auch schon seit Tagen mehr aus der Polestar App zu bekommen und spiele (leider ist es nicht mehr) mit einem Android-Telefon herum. Den Datenaustausch mitschneiden geht nicht (SSL Pinning), ich bin zwar insofern weitergekommen, dass ich mit Frida und objection einen Teil des SSL/Cert-Pinning ausschalten kann, aber der Teil, der für die SoC Übermittlung und Fahrzeugsteuerung zuständig ist, bleibt verschlüsselt.
Es gibt im Filesystem der App einen shared_prefs Ordner mit Vocmo_Secret_Shared_Preferences.xml und Vocmo_Shared_Preferences.xml - da klingen die Namen gut, aber scheinen mit dem Keystore von Android zu tun zu haben (androidx_security_crypto_encrypted_prefs_key_keyset), zweite XML ist eine ID aus den letzten Zahlen der VIN+Benutzername/Mailadresse_catalog (12345abcd@abcde.xy_catalog").
Was mir neu aufgefallen ist, ist diese Serveradresse, die sich in ein Zertifikat auflöst:
http://crl.volvocars.com/cc/torslanda/policy_server_v1.crl
in einem Logfile tauchte auch das auf http://ocsp.volvocars.com/cc/
(EDIT2: okay, das ist dafür gedacht, wenn ein Certificate zurückgezogen wird -deshalb als Antwort eine 0)
…vielleicht verhilft das zum Durchbruch, für mich sind es nur Puzzleteile, die ich nicht zusammen setzen kann.
Und so sieht es dann -leider- aus, wenn die App seit Stunden nicht erreichbar ist, weil wieder herumgefingert wird oder warum auch immer?!:
DAS ist der Nachteil, wenn man abhängig von der Polestar-App ist, leider.
Glücklicherweise steht das Auto bereits seit ein paar Tagen in der Garage mit erreichter Mobilitätsreserve.
das dürfte so sein. Wenn ich die App öffne, werden 2 Dateien neu im Android-keystore abgelegt (CACERT_xxxxdevicePairingKey und CACERT_xxxxcatalogKey.) Hier gibt es dann auch die Zuordnung von dem von mir erwähnten „User“ mit VIN+Benutzername_catalog.
Woher die Keys kommen, kann ich nicht sagen - die Verbindung aus der App passiert in einer Library (libvocmo-lib.so) und tiefer komme ich da nicht.
Im catalogKey steht „=signencrypt.catalogueexternal.caraccess.eu.prod.volvocars.com“ und weiter dann ein Link, der ein Zertifikat ergibt (aber würde das Sinn machen, wenn der Schlüssel/Cert von einem Server kommt, der dann die nachfolgende Verbindung en/decodiert??)
http://trust.volvocars.com/cc/torslanda/service_sign_and_encrypt_v2.crt
Ich habe mich darauf konzentriert, die Verbindung „abhören“ zu können, um an die Links zu kommen, aber die Links zu den API Endpunkten sind ja eigentlich schon im iobroker. Wenn ich wieder etwas Zeit habe, spiele ich weiter herum.
Edit-PS: ich hatte heute Kontakt mit dem Support und habe meinen Wunsch nach einer offenen API (wieder) vorgebracht… leider:
Es ist derzeit nicht geplant, APIs zu veröffentlichen, aber wir werden in Zukunft weitere Optionen prüfen. Wir können aber den Kauf einer smarten Wallbox empfehlen.
Update von meiner neuesten Implementierung … mit dem Car Stats Viewer ab Version 0.24.x kann man aktiv vom Polestar einen WebHook mit dem JSON Datenpaket nach Hause ( https funktioniert) senden lassen.
Ein einfacher Weg die Position und den SOC zu übertragen ist die Verwendung des vordefinierten Tracker Objects.
Im HA muss man dazu nur in der known_devices.yaml den Polstar2 als Tracking Object anlegen… (Edit / Comment : kann man offensichtlich weglassen; die Automation erstellt ggf selbst eine neue Entity.)
polestar2:
name: Polestar2
mac:
icon: mdi:CarHatchback
picture:
track: true
… und eine Automation auf den eingehenden WebHook setzen … (bitte die UI benutzen und den zufällig generierten WebHook Schlüssel benutzen… und nicht das hier 1:1 kopieren 
alias: Garage Polestar2 CSV
description: WebHook from PS2
trigger:
- platform: webhook
webhook_id: my_unique_coded_webhook_key
condition: []
action:
- service: device_tracker.see
data_template:
dev_id: polestar2
battery: "{{ trigger.json.stateOfCharge }}"
gps:
- "{{ trigger.json.lat }}"
- "{{ trigger.json.lon }}"
mode: single
fertig.
BTW: Der SOC wird zuerst ins Objekt geschrieben, damit im Fehlerfall - ohne gültige GPS Daten - der Abbruch der Automation wegen ungültigem Lat/Lon keinen Effekt hat.
Wichtiger Hinweis aus der HA FAQ : dieser Weg ist nicht geeignet um mit der Positionsinformation Schaltfunktionen auszulösen; der WebHook ist nur über den statischen Schlüssel abgesichert.
Hier der Cross Link zum CSV :
CSV webhook Fortsetzung 
Update / Edit / Version 2 : Eintrag geändert auf „most simple solution“ entsprechend dem Beispiel
https://www.home-assistant.io/integrations/template/#trigger-based-sensor-and-binary-sensor-storing-webhook-information
Möchte man mehr Informationen aus dem CSV JSON Object übertragen, nutzt man den Trigger direkt für Template Objekte.
Einfach im „config.yaml“ die Sensoren nach dem folgenden Beispiel definieren … webHook wie oben definieren.
# for Polestar2 webhook by https ....
template:
- trigger:
- platform: webhook
webhook_id: my_unique_coded_webhook_key
sensor:
- name: 'Polestar2 SOC'
unit_of_measurement: '%'
state: "{{ trigger.json.stateOfCharge }}"
icon : mdi:car-electric
- name: 'Polestar2 currentPower'
state: "{{ trigger.json.currentPower }}"
unit_of_measurement: 'kW'
icon : mdi:speedometer
- name: 'Polestar2 currentSpeed'
state : "{{trigger.json.currentSpeed}}"
unit_of_measurement: 'km/h'
icon: mdi:car-speed-limiter
- name: "Polestar2 Lat"
state: "{{ trigger.json.lat }}"
icon: mdi:latitude
- name: "Polestar2 Lon"
state: "{{ trigger.json.lon }}"
icon: mdi:longitude
- name: 'Polestar2 ambientTemperature'
unit_of_measurement: '°C'
state: "{{ trigger.json.ambientTemperature }}"
icon: mdi:coolant-temperature
binary_sensor:
- name: 'Polestar2 isParked'
state: "{{ trigger.json.isParked }}"
icon: mdi:car-brake-parking
- name: 'Polestar2 chargePortConnected'
state: "{{ trigger.json.chargePortConnected }}"
icon: mdi:ev-station
- name: 'Polestar2 isCharging'
state: "{{ trigger.json.isCharging }}"
icon: mdi:ev-plug-type2
- name: 'Polestar2 isFastCharging'
state: "{{ trigger.json.isFastCharging }}"
icon: mdi:ev-plug-ccs2
Und natürlich im CSV den webhook auf die eigene - am Besten HTTPS - Instanz setzen.
https://your-home-assistant:8123/api/webhook/my_unique_coded_webhook_key
Das wars; ab sofort sendet der CSV im aktiven Zustand die Daten aus dem JSON zur HA Instanz. Der Polestar / CSV beendet kurz nach dem Abschliessen und Sleep Mode den LTE Zugang, aber bis dahin wird fleissig übertragen.
Good luck!
Sehr schöne Beschreibung!
Leider hab ich keinen HomeAssistant und muss das für meine SmarthomeNG/SmartVisu Kombination adaptieren.
Einige Detailfragen noch:
Auf deinem Router ist irgendein DynDNS Service aktiv, für „your-home-assistant“ und du hast ne Portweiterleitung offen auf den Server wo HA läuft?
Auf deinem HA als Server hast du ein Zertifikat für die https Verbindung?
Dieser Webhook-Key ist als Ersatz für username/password zu sehen?
Hi Martin,
kann alle Fragen mit ja beantworten, lediglich ist der Service für DuckDNS auch im HA installiert, nicht im Router.
Im Detail gelöst mit dem DuckDNS Add-On
Home Assistant Add-on: DuckDNS
Automatically update your Duck DNS IP address with integrated HTTPS support via Let's Encrypt.
Supports aarch64 Architecture Supports amd64 Architecture Supports armhf Architecture Supports armv7 Architecture Supports i386 Architecture
About
Duck DNS is a free service that points a DNS (sub-domains of duckdns.org) to an IP of your choice. This add-on includes support for Let’s Encrypt and automatically creates and renews your certificates. You need to sign up for a Duck DNS account before using this add-on.
… und wie du beschreibst ist damit ein HTTPS mit Zertifikat etabliert - Port Weiterleitung im Router aktivieren. Done.
BTW : falls CSV dem Feature Request auf MQTT Anbindung nachkommt, gibt es ggf einen universellen Weg für alle Systeme.
Danke für die Zusammenfassung!
Eine Anmerkung hierzu: Die known_devices.yaml wird in HA seit vielen Versionen nicht mehr wirklich unterstützt. Der offiziell unterstützte Weg wäre, die Daten aus CSV über einen MQTT Broker an HA zu senden, bspw. mit NodeRed - bis CSV das selbst integriert.
Man kann die known_devices.yaml offenbar auch einfach weglassen, die Automation erstellt selbstständig die entsprechende Entität.
Da stimme ich bei der Forderung zum API seitens Polestar voll zu! Verstehe dein Statement komplett.
HTTPS habe ich schon länger aktiviert, egal ob über den HomeAssistant Cloud Service oder selbst mit DuckDNS.
Hintergrund - nur ein einziger (mein eigener) sicherer Zugang - kein Apple HomeKit, kein Google, kein Amazon oder andere Services mehr.
CSV war erst nur zum rein schnuppern in die Live Daten vom PS2; jetzt halt aufgebohrt.


