Photovoltaik Quasi Überschuss Laden (ohne Kenntnis Netzbezug) per Tesla-API per Kommando "CHARGING_AMPS" über TeslaPy

Hallo zusammen,

ich habe über GitHub - tdorssers/TeslaPy: A Python module to use the Tesla Motors Owner API Photovoltaik Überschuss Laden implementiert. War mein erstes mal mit Python, also bestimmt nicht auf Profi-Level…

Edit: Bei meiner alten Anlage kenne ich nur die Leistung der Anlage, nicht aber den Netzbezug. Deshalb funktioniert es natürlich nur gut, wenn keine anderen großen Verbraucher im Haus laufen. Wenn man natürlich den Netzbezug kennt könnte man das Skript noch deutlich verbessern.

Funktioniert astrein.

Voraussetzung ist, dass das Auto schon Software 2021.36.x drauf hat.

Das Programm läuft in einer Endlosschleife auf meinen Raspberry Pi. Es gibt keine Probleme, dass das Auto nach dem Laden dadurch unnötig wach bleibt. Es ist daher nicht nötig, das Programm immer wieder zu starten. 1x auf dem Raspberry Pi starten und dann durchlaufen lassen.

Es funktioniert auch unter 5 Ampere:
Per API können die Ampere auch unter 5 Ampere gesetzt werden. Dazu muss - warum auch immer - das Kommando „CHARGING_AMPS“ 2x aufgerufen werden.

Ist so implementiert:

Endlosschleife(Wartezeit)
	falls nicht (Auto offline oder Auto nicht angeschlossen oder Auto nicht zu Hause)
	PV-Leistung = Hole die aktuelle Leistung der PV-Anlage
	Gewünschte Ampere = PV-Leistung * Faktor
	falls(Gewünschte Ampere > 1) // sonst lohnt es sich imho nicht, auch Grundlast beachten
		starte das Laden, falls aktuell nicht gestartet
		setze Gewünschte Ampere
	sonst falls(Gewünschte Ampere <= 1) 
		Stoppe das Laden

Die Umrechnung der Leistung zu Ampere habe ich mit dem Faktor 14/11 statt 16/11 gemacht (16 Ampere = 11 kw). So bleibt noch ein wenig PV-Strom für das Haus übrig.

Die Ausgaben werden in einer Log-Datei mitgeschrieben und es wird ein Web-Server gestartet, der die Log-Datei ausgibt. Über den Get-Parameter „quit“ kann die Anwendung über deren URL gestoppt werden.

Besteht aus 3 Modulen:
PV_Charge.py - Der Code
constants_pv_charging.py - Die Konstanten
pv.py - Hier wird die Methode read_pv_voltage() implementiert, welche die aktuelle Leistung der PV-Anlage ausliest. Bei mir handelt es sich um eine alte Kostal Anlage, die uraltes Web-Interface hat. Ich parse das Web-Interface, um die aktuelle Leistung auszulesen. Dies muss je nach PV-Interface angepasst werden.

Der Tesla token muss in der cache.json vorhanden sein. Dazu einfach 1x z.B. gui.py starten und 1x einloggen.

Bei mir ist es ein 250 Euro China Kabel am CEE Starkstrom Anschluss, mehr braucht man nicht um Überschuss Laden hinzukriegen :ok_hand:

Edit, wegen dem Kommentar von @ tornado7
Natürlich ist es kein echtes Überschuss-Laden, da ich den Netzbezug nicht kenne. Wenn keine großen Verbraucher im Haus laufen, funktioniert es recht gut. Man kann natürlich den Ampere-Faktor noch ein wenig defensiver einstellen um hier noch mehr auf der sicheren Seite zu sein. Ich konnte gestern Mittag bis früher Nachmittag bei einer Leistung der PV-Anlage zwischen 7 und 2 kw das Auto laden, ohne dass zusätzlich Strom aus dem Netz bezogen wurde.

Auf jeden Fall angepasst werden muss:

  • Implementierung von read_pv_voltage() in pv.py je nach verwendeter Anlage
  • HOME_LOCATION in constants_pv_charging.py. Diese ist z.B. in gui.py von TeslaPy sichtbar
  • with Tesla(„Account Name“, False, False) as tesla in Zeile 73 von PV_Charge.py Hier den Account Name nach eurem Account Namen anpassen

Test: neue Datei auf Wunsch des Autors:
PVCharging.zip (3,6 KB)

18 „Gefällt mir“

Sehr interessant und nun mit variablen Amps via API nochmal besser geworden!

Aber Überschuss ist das nicht, sondern eher „PV Produktions-minus-fixer-Hausverbrauch-sladen“. Wenn Wärmepumpe, Wäsche oder Geschirr angehen hast du Netzbezug, nicht?

Ich finds trotzdem toll! Damit erreicht man bestimmt die ersten 50-75% übers Jahr. Und danke für das Teilen der Skripte.

1 „Gefällt mir“

Ja natürlich, ich kenne den Netzbezug nicht und deshalb ist es kein richtiges Überschuss Laden. „PV Produktions-minus-fixer-Hausverbrauch-sladen“ beschreibt es recht gut :laughing:

1 „Gefällt mir“

Wird es eigentlich in Zukunft wieder über einen API Zugang bei Tesla funktionieren?

Ich finde die Idee von ev-autocharge.com Genial.
→ Login von PV-Anlage, Login vom Tesla angeben und Geodaten und alles funktioniert automatisch.
Leider soll es „gerade“ mit Tesla nicht funktionieren weil was am API umgestellt wurde…

Gibt es hier Neuigkeiten, ob das wieder funktioniert?

Das ändern der Ampere über die Tesla API hat seit der Einführung im Oktober bei mir immer funktioniert

Prinzipiell funktioniert es, aber mir fehlt grad aktuell der wirkliche Überschuss.

Die Aktualisierung der Werte ist glaub etwas „träge“.

Ja, ich habe auch gerade die Antwort auf meine Frage gefunden. Das Problem war wohl des Tesla-Server, der automatische Bot-Anfragen blockiert hat. Das wurde gelöst:

@georgi74 Hast du die Serverkommunikation anders gestaltet als die Jungs von ev-autocharge so dass du von der Umstellung nicht betroffen warst?

@Spacemarine Ich weiss nicht, was die von ev-autocharge machen. Ich benutze lediglich die Möglichkeit den Parameter „CHARGING_AMPS“ zu setzen, was seit ca. letztem Oktober möglich ist. Und das hat definitiv immer funktioniert.

Hey @georgi74 tolles Projekt hast du da. Mangels eigener PV (mangels eigenem Dach :-D) kann ich es leider nicht verwenden, ich wollte dich aber noch auf ein Produkt hinweise, welches ich selber im Einsatz habe: Shelly EM3. Damit kann man relativ einfach und kostengünstig seinen Netzbezug messen. Über verschiedene API’s lässt sich das auch leicht auslesen. Bei mir läuft es beispielsweise in eine HomeAssistant Instanz.

1 „Gefällt mir“

@floppyxyz Danke für deinen Hinweis! Tolles Produkt dieses Shelly EM3. Ich traue mich aber nicht so was selber einzubauen :slight_smile: Wenn dann mit Elektriker, und wahrscheinlich überhaupt schwierig da einen zu finden, der einem das einbaut.
Aktuell laden wir ja nur mit der 250 Euro China Box. Wir bauen dieses Jahr eine neue Garage mit Wallbox / Überschuss-Laden, evtl. mit Stromspeicher, da ändert sich dann eh alles, ansonsten wäre es sehr Interessant für mich gewesen!

1 „Gefällt mir“

Dem Kompliment von @floppyxyz kann ich mich nur anschliessen. Vor 5 Jahren hätte sich noch niemand vorstellen können, dass man ohne (!) Zusatzhardware eine taugliche Kopplung von PV und Elektroauto hinriegt, und das sogar nicht nur ein/aus, sondern durchaus praxistauglich geregelt.

Ich habe bereits eine OpenWB im Einsatz, aber ehrlichgesagt ist es lediglich die Phasenumschaltung, die mich bei einem erneuten Kauf womöglich von der Verwendung deiner Lösung abhalten würde. 80% der Fälle erwischt man damit bestimmt, eher mehr, und Dez/Jan reicht die PV leider nicht auch noch für das Auto.

Das mit dem Stromspeicher würde ich mir gut überlegen; Stand heute sind diese weder ökonomisch, noch ökologisch, noch von der Effizienz her sinnvoll. Klar, die Akkuherstellung ist mit mittleren zweistelligen Werten (kg CO2 / kWh) auf einem erfreulich tiefen Niveau angelangt und Second Life ist auch noch eine Option, aber den Tag/Nacht Bedarf fangen die Pumpspeicher in Europa locker ab, und die gibt es schon. Die Kosten, genauer das Preisdelta zwischen Einspeisung und Bezug ist für die ersten 20 Jahre und damit die Gesamtlebensdauer eines Speichers klar an wohl fast allen Orten in Europa zugunsten der Variante Netz. Und da Direktverbrauch immer effizienter ist als Speicherung, selbst wenn das Netz mit seinen ~5% Verlust dafür benötigt wird, ist aus Sicht der Effizienz dein Nachbar mit deinem Solarstrom besser bedient, während du in der Nacht aus dem Mix ziehst. Ich würde deshalb ganz klar das Geld in mehr PV (auch an der Fassade wenn möglich für mehr Winterstrom) investieren und bei Akkus auf netzdienliche Schnittstellen warten, damit sich diese aus dem Zeitalter mit „dummem“ Verhalten erheben können.

2 „Gefällt mir“

@tornado7 Danke, das mit dem Stromspeicher ist noch nicht sicher. Werde mich vorher natürlich noch genau informieren.

Nettes Script.
Für das erste richtige Python script, sieht es schon durchaus passabel aus. Ich werde jetzt auch nicht auf Stil oder ähnliches eingehen, das kommt so oder so mit der Zeit :wink:

Wo durchaus noch ein Verbesserungspotential besteht sind folgende dinge:
Skript an sich:

  • ConfigParser und/oder argparse verwenden.
    • ConfigParser ermöglicht es dir einfache Konfigurationsdateien (INI) zu benutzen. Dadurch müsstest du Username, Home Location und ähnliches nicht als Konstanten bzw. direkt im Code laufen zu lassen
      • man kann natürlich auch json benutzen, aber für die „Enduser“ sind INI meist einfacher zu editieren
    • argparse - ähnlicher Ansatz, jedoch als Argumente beim Scriptaufruf
    • überschreib deine Daten. Aktuell stehen deine Adresse und deine E-Mail/Tesla Account im Klartext in den Scripts
    • Durchgängige Konstanten
      • du benutzt für die Adresse eine Konstante, der Tesla Account wäre als Konstante in der constants_pv_charging.py besser aufgehoben als irgendwo im Script

Logik:

  • Mininum Battery
    • Du kommst mit 1% Akku am Abend zu Hause an. Da wir über die Nacht keine PV Produktion haben, hat das Auto 0-1% (Vampire Drain) Akku in der Früh
    • Hier solltest du die möglichkeit schaffen, unabhängig von der PV Produktion auf einen mindeststand im Akku zu erreichen. Am besten gleich mit eigenen AMP Einstellungen → unter 30% → Lade mit 14A
    • Alternativ: Bei weniger als MINIMUM_AMPERE_LEVEL wird mit MINIMUM_AMPERE_LEVEL geladen. so wird das Auto zumindest auch im Winter/Nacht/Schlechtwetter geladen. Bei Überschuss wird ja wieder vom Netz geladen.
  • Manuelle Überschreibung
    • Aktuell ist es nicht möglich dass Logik zu überschreiben. z.B: man kommt mit 50% Akku zu Hause an, allerdings muss man bald wieder Los und der Akku soll so voll wie möglich sein
    • → rounded_amp = MAX_AMP → do nothing
    • Damit könnte der User über die App einfach auf 16A stellen und muss nicht extra das Script stoppen
3 „Gefällt mir“

@green Vielen Dank für deine Hinweise :ok_hand:

Ich dachte eigentlich, dass ich meinen Tesla E-Mail Account und Adresse aus dem Skript entfernt habe, aber offensichtlich dann die falsche Version der Datei hochgeladen. Jetzt sind die Daten raus.

Das mit dem ConfigParser ist natürlich sehr praktisch, das werde ich mir mal anschauen.

Genau die Sachen, die du in der Logik beschrieben hast, hatte ich mir auch als Erweiterung überlegt. Schön wäre noch eine kleine HTML Oberfläche dazu, in der die wichtigsten Parameter dann angepasst werden können. Wenn ich mal wieder etwas mehr Zeit habe, werde ich mich dem mal widmen. Versprechen kann ich es allerdings nicht, das Skript ist für mich ja nur eine Übergangslösung, bis die neue Garage incl. Wallbox gebaut ist.

2 „Gefällt mir“

Da heute etwas Sonne auf meine 25kWp Anlage kam, ich im HomeOffice bin und der Tesla Laden musste hier ein Chart von meiner heutigen Überschussladung:

Um 13.45Uhr habe ich die korrekte Einstellung gefunden, hatte nicht angegeben dass mein Sensor (SolarEdge Portal) den Bedarf des Verbrauchers (Model3) erkennt.

Danach hat die Regelung echt gut funktioniert. Alle 10min wird in meinem Fall im SolarEdge-Portal die Werte für Erzeugung + Verbrauch ausgelesen.
Mit diesen Werten wird über die Tesla-API dann die Ampere von 5-16A (bei mir nur 3phasig an Heidelberg Energy Control Wallbox) angepasst.

Offensichtlich kommt bald auch eine kostenpflichtige Version der „Anwendung“, dort hat man dann nicht nur alle 10min, sondern alle 60sec eine Aktualisierung der „Sensorwerte“:

Für das, dass es bisher Kostenlos ist eine Geniale Sache!

Ich hatte wunder was vor um die Kommunikation von Fahrzeug, Wallbox und PV-Anlage aufzubauen und jetzt geht alles mit Software. Genial!

So, ich bin jetzt dazu gekommen das Skript noch einmal zu überarbeiten. Habe jetzt den ConfigParser verwendet und es gibt eine Oberfläche, in der man einiges Einstellen kann:

  • Über „Anwendung beenden“ wird das Skript beendet. „Pausiert“ pausiert die Ausführung der Schleife.
  • „Minimum Ampere unabhängig von Sonne“ - Auch wenn nicht genug Energie über die PV kommt, dann wird trotzdem mindestrens mit dieser Ampere Zahl aufgeladen.
  • „Ampere Factor 2“ - Einstellung des Schon beschriebenen Ampere Factors (Default 16/11, der 2. Parameter 11 kann angepasst werden)
  • „Override Mode Ampere“ - Hier wird das PV-Leistung gesteuerte Laden komplett deaktiviert und immer mit der fest eingestellen Ampere Zahl geladen. Ist wegen „Minimum Ampere unabhängig von Sonne“ eigentlich aber überflüssig.

Das Skript funktioniert gut, ist aber vor allem die Oberfläche ist unglaublich hanebüchen implementiert. Ich weiß es gäbe hier viele schöne Möglichkeiten, z.B. flask habe ich mir angeschaut, aber aus Zeitmangel habe ich den schnellen, pragamtischen Weg genommen und einfach schnell die HTML Seite selbst rausgeschrieben, die Parameter werden dann per jQuery per Post an das Skript gesendet.

Ach ja: Das Skript unterstützt jetzt 2 Fahrzeuge im Account. Beim starten muss dem Skript 0 für das erste Fahrzeug und 1 für das zweite Fahrzeug übergeben werden. Für jedes Fahrzeug muss das Skript dann einmal gestartet weden und die Oberflächen Server laufen dann auf unterschiedlichen Ports.

PC_Charge.zip (5,5 KB)

1 „Gefällt mir“

Top!

…und Tesla braucht 124928 KB für das Ausführen von ein paar einfachen Kommandos. :rofl:

1 „Gefällt mir“


Heute nochmal die EVAutocharge App getestet. Klappt Wunderbar.

3 „Gefällt mir“

Hallo @georgi74

Könntest du mr sagen, welche Hardware ich am besten für deine Lösung nehme und wie ich als Laie den Raspberri am besten konfiguriere und welche Programme ich auf jeden Fall installiert haben muss. Sorry für die vielleicht quälenden Fragen eines absoluten Anfängers, aber deine Lösung erscheint mir am sichersten.

Danke Dir!
Markus