Neue Tesla Fahrzeug API

Ich sehe folgende Aspekte, die ein Projekt wie z.B. Home Assistant für eine „erfolgreiche“ Tesla-Integration benötigen:

  1. Nicht jeder Nutzer muss sich als Developer anmelden
  2. Nicht jeder Nutzer braucht eine eigene Domain
  3. Es gibt keinen zentralen Server (außer die von Tesla) oder Proxy
  4. Jeder Nutzer hat seinen eigenen „command-authentication private key“

Alle diese Punkte kann man jetzt erfüllen. Also ich hab das alles heute einmal gemacht ohne einen Server oder eigene Domain bis hin zu lock+unlock des Fahrzeugs.

Ein „Hauptentwickler“ registriert die App bei Tesla, und packt die Client-ID in den Code oder Doku. Daran ist ja nichts sicherheitskritisch. Die hinterlegte „Origin“ URL ist IMHO total egal, hauptsache halt was mit Zertifikat.

Die App ist mit Redirect-URLs hinterlegt die für den jeweiligen Anwendungsfall funktionieren. z.B. http://localhost:9123/test oder sowas wie Link to OAuth2 Authorize Callback – My Home Assistant - den redirect an/über einen „fremden“ Server ist total ok weil er den code verifier nicht kennt und nicht an die finalen token kommt.

So kommt man schon ziemlich problemlos an einen Token um die API zu benutzen.

Für Commands braucht es dann einen Key via Bluetooth im Fahrzeug angemeldet. Im Moment macht man das eben per tesla-control CLI z.B. auf dem Laptop oder einem RasPI.

Dieser Schritt ist noch nicht super benutzerfreundlich, aber daran kann man ja arbeiten. Es könnte irgendwann auch nach dem Model „Scanne diesen QR Code mit einer spezial-App und lauf dann zum Auto“ funktionieren (im QR Code steckt dann der Public-Key). Viele werden auch Interesse daran haben ihre API-Limits zu strecken indem sie in der Nähe des Fahrzeugs einen „BLE-Command-Proxy“ installieren, das könnte man dann zum Key anmelden und dynamisch je nach Fahrzeug-Standort für Commands nutzen.

2 „Gefällt mir“

Ich wäre bereit so ein Service zu nutzen, gerne auch gegen eine Einrichtegebühr oder eine geringe Kostenbeteiligung.

Ich hätte gerne einfach eine stateless Rest Api, die ich aufrufen kann (für status & commands), so wie Tesla es früher angeboten hat. Und die Zusage, dass das dauerhaft angeboten wird.

Tessi schreibt sie rufen deshalb die hohen Preise ab (insb. beim lifetime Vertrag), weil sie Kosten von Tesla antizipieren. Das sie ja dann den Call zu Tesla machen, bekommen sie auch die Rechnung. Tessi hat auch keine Limits in der Vereinbarung. Ich kann nicht beurteilen ob das mit der (künftigen) Rechnung seitens Tesla stimmt. Die anderen Prämium Features (Fahrtenbuch, Akku Analyse usw. ) brauche ich jedenfalls alles nicht.

Wenn du das ohne laufende Kosten seitens Tesla hinbringst… gibt es im node red forum sicher ein paar Interessenten.

Status kann ich dir zwar nur eingeschränkt anbieten anbieten, aber für alles andere habe ich einen Docker Container gebaut, der eine REST API um das Tesla Command Dingens baut und das ganze dann per BLE ans Auto schickt, bei Fragen gerne im TSC Thread weiter… Hintergrund des Docker Containers ist eigtl nur, dass der TSC funktioniert, aber ist so gebaut, dass es eine einfache REST API ist und man damit alle Kommandos aufrufen kann, die es gibt.

Danke für das Angebot, aber eine Bluetoothbox zu bauen und zu betreiben kostet mich mehr als das Lebensabo von Tessi.

Und primär bin ich ohnehin auf den Status, die Location, das Naviziel, die Ankunftszeit usw. aus. Commands brauche ich eigentlich nur „Klima ein“ „Ladeport auf“ und „setze Ziel Soc“

Nix bauen… Raspi Zero 2W kaufen, Docker installieren und Container starten. Aber nachdem ich dir die anderen Werte nicht liefern kann (zumindest nichts ausser Location und alle charging relevanten Daten) ist es wohl tatsächlich nichts für dich.

Plus Gerät in Carport wetterfest anbringen, Strom dorthin leiten, lan dorthin leiten (dort kein wlan) regelmäßig updaten, …

Also Bluetooth Proxy käme das hier in Frage:

Das Programm ist von mir. Derzeit sind alle Befehle umgesetzt, die für ein PV Laden notwendig sind. Weitere Befehle können recht einfach ergänzt werden.

4 „Gefällt mir“

Mir geht es darum es eben ohne einen „Service“ abseits von Teslas Servern zu machen.

Was du beschreibst klingt für mich eher nach Anbieter wie teslemetry oder tessie.

Ein Fleet API „Open Source Client“ ist eben auf die Free/Discovery Tier und deren Rate Limits beschränkt, und wegen dem Command Signing braucht es einen relativ intelligenten API Client (oder einen Proxy). Der braucht als Input einen Key der im Fahrzeug mit BLE registriert wurde.

Das Command Signing ist noch nicht in vielen Programmiersprachen umgesetzt und deswegen dreht sich noch viel um Proxys, aber es spricht technisch nichts dagegen das ohne Proxy zu tun. Ich interessiere mich persönlich nur für Home Assistent (und Teslamate aber das ist ein ganz anderes Thema).

1 „Gefällt mir“

Ich bin gerade dabei, die folgende Lösung zu implementieren:

Es läuft noch nicht ganz rund, aber die Entwickler arbeiten daran. Die Einbindung in Home Assistant erfolgt per MQTT. Key-Erzeugung ist ebenfalls integriert. Ich habe das in einem Docker-Container auf einem Rasberry Pi Zero 2 W installiert, dieser ist per WLAN verbunden und kann in der Garage neben dem Auto liegen. Erste Test waren bereits erfolgreich.

1 „Gefällt mir“

Hat schon jemand einen nginx vor den Fleet Telemetry Server gesetzt und kann mir eine Config schicken? Wie kommuniziert eigtl das Auto mit dem Fleet Telemetry Server? Sind das einfache HTTP Requests sowas wie REST oder wie funktioniert das?

Hatte bisher keine konkreten Fragen, weil wollte nur mal abfangen, was mir so blühen wird… Jetzt hänge ich aber tatsächlich… Beim check_server_cert.sh script komme ich nicht weiter:

sudo bash ./check_server_cert.sh ./data/config.json 
Error loading file /tmp/tmp.P8iGl7b9SH
40A77CCEBD760000:error:05800088:x509 certificate routines:X509_load_cert_crl_file_ex:no certificate or crl found:../crypto/x509/by_file.c:251:
Error loading file /tmp/tmp.P8iGl7b9SH
40C79D9DB8730000:error:05800088:x509 certificate routines:X509_load_cert_crl_file_ex:no certificate or crl found:../crypto/x509/by_file.c:251:
The server certificate is invalid.

Der Server selbst läuft aber.

Edit: Aber ebenfalls mit einem Fehler:

2024-07-11T23:34:09Z INF activity=true context=fleet-telemetry msg=2024/07/11 23:34:09 http: TLS handshake error from 89.58.55.61:43546: tls: client didn't provide a certificate

Edit2: Die angezeigt IP ist meine öffentliche IP. Ich frage mich allerdings, wo der Port 43546 herkommt. Konfiguriert hab ich den nirgends.

Das sind sogenannte Highports und werden dynamisch für ausgehende Verbindungen verwendet

2 „Gefällt mir“

Hi Wilko,

erstmal herzlichen Dank für dein Programm! Ich habe es heute erstmalig getestet und es scheint gut zu laufen.

Eine Frage brennt mir aber unter den Nägeln:
Da es ja als „virtueller Schlüssel“ arbeitet, habe ich die Sorgen, dass nun bei Austausch mit dem PI auch das Auto geöffnet werden kann. Ich habe es ein paar Mal ohne Schlüssel ausprobiert und das Auto blieb zu, ich hätte aber gerne noch eine finale Bestätigung :slight_smile:

Möchte ja nicht, dass jemand das Auto öffnen kann, wenn ich gerade am Überschussladen bin.

Ganz lieben Dank schonmal.

Dass ich einen anderen Port als 443 nehme ist ja kein Problem, wenn konfiguriert, oder? Ich habe um ohne Umweg über nginx gehen zu können einfach einen anderen Port genommen… Aber nachdem das Problem keiner kennt, sieht es sehr stark nach einem Problem von mir aus :smiley:

Edit: Alles neu gemacht, jetzt geht’s… Keine Ahnung warum.

Hoffe das passt hierher

Ich wollte mit der Ble-Schnittstelle über einen http-Befehl die Ladeleisung setzen.

Dazu rufe ich zum testen auf:

Http://raspi-ble-ip:7210/swagger/index.html

auf und wollte das so machen:

In der Doku ist zwar der Parameter anders, aber bei get commands kommt es wie oben

set_charge_limit

POST /api/1/vehicles/{vehicle_tag}/command/set_charge_limit

Endziel wäre das ganze dann in Home Assistent auszulösen.

Du musst die Zahl oben raus nehmen und statt „string“ deinen Parameter rein Also oben charging-set-amps und unten ["2"]

Und zur Info: Beim Sprung über und wieder unter 0 musst den request 2 mal senden. Also wenn du bei 8 bist und 2 sendest, stellt er auf 5 und nochmal senden, dann macht er 2.

Hey cool vielen Dank.
Aber jetzt hoffte ich doch auf eine Antwort von jemand anderem als dir um dich zu entlasten! :joy:.

Bring ich das auch in einen Einzeiler um das direkt im Browser als Shortcut aufrufen zu können?

Noch cooler wäre im TSC ein Dropdown mit der Auswahl 1-16 und allenfalls sogar weitere Funktionen wie Tur öffnen, Furz, etc.

Naja die API ist von mir also schwierig mit jemand anderem :joy: du kannst alles machen, was die BLE api kann… es gibt ja auch ein list commands da zeigt er alles an, was geht.

Hast du mir noch einen Tipp wie ich das im normalen Browser direkt aufrufen kann?