Mit 17 Zeilen Python 122 Zeilen Car-Info holen.

Ich habe heute mal angefangen, das teslajson python interface auszuprobieren.
Siehe
github.com/gglockner/teslajson
zu dem kleinen Python Modul von Greg Glockner, welches ein einfaches Python API bereitstellt, das das Tesla JSON API einwickelt.

Das API erlaubt es sowohl, eine Vielzahl von Informationen über das Auto zu erfragen, als auch Kommandos an das Auto zu schicken.
In beiden Kategorien geht es weit über das hinaus, was die Tesla App anbietet.
Mit sehr wenig Programmieraufwand kann man hier viele Sachen machen.
Sicher geht einiges davon auch mit fertigen Apps, aber denen würde ich meine Mail Adresse und mein Passwort nur anvertrauen, wenn sie quelloffen sind und ich sie selbst untersucht und übersetzt habe.

Hier mal 17 einfache Zeilen Python 2.7 code:
pastebin.com/0mv5turF

Um dieses Programm zu nutzen, muss man seine E-Mail Adresse in die Umgebungsvariable TESLA_EMAIL setzen und das Passwort in die Umgebungsvariable TESLA_PASSWORD.
Außerdem muss natürlich das teslajson Modul installiert sein.
Hier der Output, wobei ich aus Sicherheitsparanoia (der Output enthält den genauen Standort meines Model S und noch viele weitere Daten) die eigentlichen Werte durch „XXX“ ersetzt habe:
pastebin.com/eYWRKFkq

Wie man sieht, enthalten diese Daten viele konstante Anteile wie die VIN und die Konfiguration des Autos (hat es ein Panoramadach? etc.) sowie viele variable Daten (Wo ist das Auto? Wie voll ist der Akku? Welche Firmware ist installiert? Was ist der Kilometerstand?). Vieles davon ist selbsterklärend. Schön wäre natürlich eine ausführliche Doku. Weiß jemand, ob es die frei im Netz gibt?

Für diesen rein lesenden Zugriff auf das Auto könnte ich mir zum Beispiel die folgende Anwendung vorstellen: Ich schreibe alle variablen Daten in regelmäßigen Intervallen auf eine Datei. Mit ihr kann ich dann später feststellen, wann mein Auto wo gewesen ist (und das zum Beispiel auf einer Karte als Route darstellen) oder wann mein Auto wo und wie voll geladen wurde.

Man kann aber mit teslajson auch schreibend auf das Auto zugreifen. Zum Beispiel lässt sich das Ladelimit einstellen und das Laden starten und stoppen. Auf diese Weise lässt sich leicht und extrem kostengünstig zum Beispiel eine Solarüberschussladung implementieren.

Hallo cko,
ich finde das Thema äußerst spannend. Vor allem würde ich sehr gern die im Haus erzeugte Energie (Blockheizkraftwerk) optimal nutzen. Dazu wäre Dein Ansatz optimal.

Leider bin ich bisher vollständig gescheitert, das „nachzuahmen“. Ich bekomme es nicht zum laufen. Mir fehlen einfach die Grundkenntnisse in Python. Kannst Du mir eventuell weiterhelfen oder Lektüre empfehlen um das Ganze zu verstehen und auf meine Bedürfnisse anzupassen?

Danke!
Liebe Grüße Micha

Klar. Wie kann ich helfen?

Danke für Dein Angebot. Das nehme ich gern an!

Mein Ziel: Ich möchte den Tesla in meine Homeautomation aufnehmen. Diese steuert schon alle Lampen, Rollos, Heizung, Blockheizkraftwerk, Musiksystem etc.
Der Tesla soll in Abhängigkeit verschiedener Parameter geladen und klimatisisiert werden. Das weitestgehend vollautomatisch bzw. über Taster.

Mein Problem:
Ich bekomme mit Python nicht weit.

Was habe ich bisher gemacht:
-Python 3.5 installiert
-Mir die Daten unter: github.com/gglockner/teslajson runtergeladen.
-nach langen Versuchen habe ich es tatsächlich geschafft, die Werte auszulesen.

Alle Fehler die ich gemacht habe, kann ich hier gar nicht aufzählen.

Jetzt komme ich erst mal nicht weiter.

Ich möchte :
-die Daten (ausgewählte) in eine Datei schreiben. Ich denke, mit viel lesen bekomme ich das wahrscheinlich hin.

  • Doch wie bekomme ich schreibenden Zugriff auf das Auto???

Ich stelle es mir so vor, dass ich mehrere Programme habe, die ich automatisch nach Bedarf starte, z.B.

Programm_start_charging
Programm_stop_chargimg

etc.

Wie muß ich jetzt Deinen genialen Zeilen anpassen, dass oben gewünschtes passiert???

Danke.

Hallo cko,
Kennst du die inoffizielle API Dokumentation?
docs.timdorr.apiary.io/

Beides geht seit Jahren auch mit VisibleTesla, auch quellenoffen und mit bequemem GUI.

@micha602, ich bin diese und nächste Woche auf Schulungen und kann kaum damit experimentieren. Deine Wünsche ähneln aber meinen und ich bin überzeugt, dass man das hinbekommt. Gib mir noch etwas Zeit, dann mache ich weitere Beispiele.

@snooper77 Danke für den Hinweis, kannte ich noch nicht. Ich werde mich damit mal beschäftigen.

@cko Kein Problem. Ich bin mir auch ziemlich sicher, dass es geht. Nur wie…

Inzwischen bin ich ein kleines bisschen weiter. Dateien lesen und schreiben kann ich jetzt. Außerdem arbeite ich mich so langsam in Python ein. Dauert etwas, da ich absoluter Anfänger bin.

@snooper77 mir geht es gerade nicht um ein GUI, sondern um Vollautomatisierung ohne irgendein User Interface. Und natürlich darum, es selbst zu machen. Macht ja auch Spaß.

OK! Wollte es nur der Vollständigkeit halber erwähnen.

Danke für den Artikel, cko!

Ich habs unter Python 2.7 auf meinen Macs zum laufen gekriegt. Daraus lässt sich etwas machen.
Und vor allem: Ich habe unter (meiner) Kontrolle, ob und wie ich mein Tesla-Passwort weitergebe…
:smiley:

Ich habe eben ein kleines python tool gemacht, mit dem das geht.

Hier
pastebin.com/2zLZgxxf
ist der Quelltext.

Aufruf zum Starten:
python charge.py start

Ausgabe im Erfolgsfall:
start charging.
OK.

Aufruf zum Stoppen:
python charge.py stop

Ausgabe im Erfolgsfall:
stop charging.
OK.

In der Tesla app kann man zugucken und sehen, dass das klappt.

Natuerlich muss das Auto online und angeschlossen sein sowie das eingestellte Ladelimit noch nicht erreicht haben.

Das sieht doch richtig gut aus!!! So habe ich es mir vorgestellt.

Mein Plan:

  • aktuelle Werte des Tesla auslesen und in eine Datei schreiben. - Das klappt schon.

  • In der Hausautomation die ausgelesenen Werte verarbeiten und mit anderen Werten abgleichen

    • Blockheizkraftwerk läuft (ja/nein)
    • gewünschtes Ladeziel am nächsten Tag (in welcher Zeit zu erreichen)
    • etc, etc.
  • In Abhängigkeit des Ergebnisses zu bestimmten Zeiten laden starten/stoppen

  • im Idealfall die Ladestromstärke beeinflussen, um das Blockheizkraftwerk/Solaranlage optimal zu nutzen
    ----> geht es überhaupt, die Ladestromstärke über die API einzustellen? Ich habe dazu nichts gefunden…

  • weitere Einstellungen am Auto automatisch vornehmen, wie z.B. rechtzeitig die Klimatisierung zu starten

Da gibt es viele Möglichkeiten. Welche davon zu nutzen sind ergibt sich mit der Zeit. Der Anfang ist gemacht.

Danke an cko!!

Das könnte ich natürlich auch sehr gut gebrauchen.
Hier
docs.timdorr.apiary.io/#referenc … e-commands
habe ich darüber nichts gefunden.

Geht es denn in irgendeiner der existierenden apps?
Wenn nein, würde ich davon ausgehen, dass es dazu tatsächlich (noch) keine Schnittstelle gibt.

Ich habe auch nichts gefunden, scheint also nicht zu gehen. Vielleicht hat jemand anders was gefunden??? Interessieren tut es viele wie ich so gelesen habe.

Genau das möchte ich ja eben automatisieren, ohne dass hierzu ein Rechner läuft:

[url]Nutzung von RWE Ladesäulen]

Mein vorhandenes NAS (Synology) und meine Homematic sollen das richten und nebenbei noch anderes berücksichtigen.

Dank cko bin ich ein gutes Stück weiter. Von Hand gestartet läuft alles auch schon. Im Moment scheitere ich noch daran, von meiner Homematic aus per SSH das Script auf dem NAS zu starten. Aber ich glaube fast, im muß in einem anderen Forum fragen…

Gibts eine Fehlermeldung oder brauchst du einen Anfang?

Ich benutze zwar nicht das Python Script sondern teslams auf meinem NAS, aber das Prinzip ist sicherlich ähnlich. Ein gescriptetes SSH würde ich vermeiden abgesehen von technischen Problemen (pseudo tty allocation?) musst Du entweder das Passwort oder den private Key an der Quelle abspeichern und auf einem „Stock“ NAS wirst auch sicher keinen User anlegen können, der nur minimale Rechte (für die erforderlichen Aufgaben) hat.

Hast Du schonmal über ein Protokollgateway wie zB FHEM oder Wiregate nachgedacht? Ich benutze kein Homematic sondern KNX und lasse was ich brauche über den KNX socket laufen, aber habe FHEM auch schon für Protokollkopplungen in Richtung EnOcean benutzt, Scripte ausführen basierend auf externen Events geht ziemlich einfach. Gleichzeitig kannst Du dann auch Zustände halten und zB für eine Visualisierungen nutzen.

@all: PN kann ich nur lesen, aber nicht beantworten. Bin wohl noch nicht „volljährig“ im Sinne der Forenregeln.

@ patricklenz: Es gibt keine Fehlermeldungen. Ich bekomme erst gar keine Verbindung, da mir anscheinend ein Addon für die Homematic fehlt und ich vor allem den Syntax nicht kenne, ein Script über SSH zu starten. Habe im FHZ-Forum mal nachgefragt. In diesem Sinne brauche ich den Anfang :wink:

@ctr: Das Prinzip zwischen python und java wird ähnlich/fast identisch sein. Die Zugangsdaten in der Quelle zu speichern ist für mich kein Problem. Auf die Homematic hat außer mir niemand Zugriff. Ein weiteres Gateway würde ich gern vermeiden. Ich ziehe mir nur noch mehr Probleme an Land. teslams sieht aber auch sehr interessant aus…
Mein Problem wäre allerdings das Gleiche. Wie starte ich dieses von der Homematic aus!?!
Da ich mit Python schon sehr weit bin und auch Spaß daran habe mich in die Sache einzuarbeiten, werde ich vorerst dabei bleiben.

weiter gekommen bin ich leider noch nicht. Niemand eine Idee?

Noch etwas ist komisch. Das Ladeziel auf 90% zu setzen geht erst dann, wenn ich es vorher auf 100% gesetzt habe. Irgendwas mache ich falsch???

Ein beliebiges Ladeziel zu setzen gelingt mir leider gar nicht. Versucht habe ich es so:

if sys.argv[1] in ("80", "90", "100"): if sys.argv[1] in ("100"): charge = vehicle.command("charge_max_range") if sys.argv[1] in ("90"): charge = vehicle.command("charge_standard") if sys.argv[1] in ("80"): charge = vehicle.command("set_charge_limit?percent=80") if "response" not in charge or "result" not in charge["response"]: sys.exit("Car did not respond.") if charge["response"]["result"]: print ("OK.") else: sys.exit("Limit %s nicht gesetzt." % startparam) sys.exit("Programmende")