new vehicle template: TeslaLogger
@Adminius wenn es die Commands gibt- können wir auch gleich den Strom setzen?
@Adminius wenn es die Commands gibt- können wir auch gleich den Strom setzen?
sehr gerne :) Auch SoC Limit setzen/übernehmen (es gab mal ein Branch für Tesla aus 2022) Ein Beispiel wäre nicht schlecht. Oder soll ich kompletten "Adapter" in go schreiben?
P.S.: aktuell lade ich an einem mobilen Adapter ohne Steuermöglichkeit, ich habe mir eine custom Wallbox angelegt und die Befehle zum Steuern gehen über TeslaLogger an Tesla. Dabei habe ich Praktisch alles was man braucht: Status (plugged_in+charging) Voltage, Current, Power, Energy, SoC, km-Range, Odometer, Preconditioning, wake_up, set chaging amps usw...
Ein Beispiel wäre nicht schlecht
Einfach maxcurrent analog wakeup. Dieses Template wäre dann steuernd ausschließlich mit dem TWC verwendbar.
P.S.: aktuell lade ich an einem mobilen Adapter ohne Steuermöglichkeit, ich habe mir eine custom Wallbox angelegt und die Befehle zum Steuern gehen über TeslaLogger an Tesla.
Finde ich schick- das wäre dann spiegelbildlich ein charger Template für ein einzelnes Fahrzeug. Dieses Template wäre dann auch zum steuern in der Lage. Nachteil: es braucht manuelle Konfiguration um sicherzustellen, dass dieser Charger automatisch ein spezifisches Fahrzeug impliziert.
/cc @naltatis
Einfach
maxcurrentanalog wakeup.
aber dann auch noch start/stop. Oder macht es dann TWC? Und warum nur TWC? Dann kann man z.B. auch einen Meter oder Shelly 3EM als "wallbox" und maxcurrent/charge start/stop + wakeup über das Auto...
Da wird aber die Grenze zwischen vehicle und charger verwischt...
auch ja, maxcurrent mag er beim vehicle doch nicht:
[main ] FATAL 2024/03/20 10:24:29 cannot create vehicle 'tsla': cannot create vehicle type 'custom': 1 error(s) decoding:
* '' has invalid keys: maxcurrent
yaml:
wakeup:
source: http
uri: http://192.168.178.100:5000/command/1/wake_up
maxcurrent:
source: http
uri: http://192.168.178.100:5000/command/1/set_charging_amps
payload: ${maxcurrent}
Und noch ein Edit:
Finde ich schick- das wäre dann spiegelbildlich ein
chargerTemplate für ein einzelnes Fahrzeug.
Diese Idee hatte ich auch schon. Da gibt es aber nur einen Hacken: EVCC steuert dann auch Ladevorgang wenn es an einem öffentlichen AC Lader steht 🤣 D.h. man müsste da nicht nur plugged_in nehmen, sondern zusätzlich noch "IstZuhause" (hat TeslaLogger auch) auswerten oder so ähnlich.
@andig ich muss wohl "isHome" auch für vehicle-Template aufnehmen, oder?
status:
source: combined
charging:
source: http
uri: http://192.168.178.100:5000/currentjson/1
jq: .charging
plugged:
source: go
script: |
plugged_in == true && ishome == true
in:
- name: plugged_in
type: bool
config:
source: http
uri: http://192.168.178.100:5000/currentjson/1
jq: .plugged_in
- name: ishome
type: bool
config:
source: http
uri: http://192.168.178.100:5000/currentjson/1
jq: .TLGeofenceIsHome
Ein steuerbares Fahrzeug braucht (am TWC):
maxcurrent- ~~
startcharge/stopcharge~~ chargeEnablestatusist optional und dient nur der Fahrzeugerkennung
Ein Charger braucht:
statusmaxcurrentenable(synonym mit start/stop beim vehicle)
Und warum nur TWC? Dann kann man z.B. auch einen Meter oder Shelly 3EM als "wallbox" und maxcurrent/charge start/stop + wakeup über das Auto...
Da reden wir vom Charger. Einen Shelly Charger brauchst Du dann gar nicht- einfach den Shelly auf "on" stellen und den teslalogger Charger nutzen. Enable/Start/Stop macht dann der Tesla. Für Ist-Leistung dann zusätzlich ein meter am Loadpoint konfigurieren.
D.h. man müsste da nicht nur plugged_in nehmen, sondern zusätzlich noch "IstZuhause" (hat TeslaLogger auch) auswerten oder so ähnlich.
Genau das liefert uns heute der TWC via status. Du kannst beim Teslalogger "charger" natürlich einfach den status um das Kriterium "zu Hause" ergänzen um das zu realisieren und dann weiter mit dem combined Plugin arbeiten.
Ein steuerbares Fahrzeug braucht (am TWC):
maxcurrentstartchargestopchargestatusist optional und dient nur der Fahrzeugerkennung
ok, verstanden, nur geht es nicht mit custom vehicle (ich habe keinen TWC):
[main ] FATAL 2024/03/20 10:24:29 cannot create vehicle 'tsla': cannot create vehicle type 'custom': 1 error(s) decoding:
* '' has invalid keys: maxcurrent
Das lässt sich ändern :) Siehe https://github.com/evcc-io/evcc/pull/13055
/cc @premultiply das wäre der Weg, Teslas völlig unabhängig einer supporteten Wallbox laden zu können. Ein lange angefragtes Feature ;)
Und wie bekommt man raus an welchem LP das Fahrzeug hängt?
Das ist die verbleibende Krücke. Eigentlich müsste man den Charger so einschränken, dass nur der Tesla dran hängen kann. Default-Fahrzeug konfigurieren und nix anderes auswählen. Da muss aktuell leider der Anwender helfen. Oder wir lassen uns noch was Besseres einfallen.
Oder wir lassen uns noch was Besseres einfallen.
Connected Zeitpunkt vergleichen, oder Ladevorgang gestartet beim Tesla und beim Charger +/- 60sek (klar, theoretisch könnte man schnell nach einander Autos anstecken, dann passt es nicht...)
Und wie bekommt man raus an welchem LP das Fahrzeug hängt?
@premultiply meine Antwort war falsch. Über das Fahrzeug-Template kommt auch der Status mit- damit ist die Zuordnung möglich. Ein Teslalogger-Charger wäre nur wir oben in https://github.com/evcc-io/evcc/pull/13046#issuecomment-2009264473 beschrieben nutzbar.
Fassen wir mal zusammen: Diese Varianten sind/wären möglich:
- TWC + Tesla (wie heute) = 1:1 Zuordnung ist erforderlich
- TWC + TeslaLogger (Vehicle) = 1:1 Zuordnung ist erforderlich
- TeslaLogger (Charger) + TeslaLogger (Vehicle) = 1:1 Zuordnung ist erforderlich
- Steuerbare Wallbox + TeslaLogger (Vehicle) = Automatische Zuordnung möglich?
TeslaLogger Vehicle Template erweitere ich also noch um maxcurrent TeslaLogger Charger Template erstelle ich noch und PR
1 & 2 ermöglichen über vehicle.Status ebenfalls automatische Zuordnung. Wenn kein oder ein falsches Fahrzeug zugeordnet ist kann halt nicht geladen werden ;)
4 ebenfalls möglich.
@Adminius sollte alles bereit sein?
Ich bin fertig ;)
Für Einsatz am TWC fehlt noch chargeEnable und getMaxCurrent, siehe https://github.com/evcc-io/evcc/issues/13007#issuecomment-2016762205.
chargeEnableundgetMaxCurrent
Zum Verständnis: getMaxCurrent ist wieviel Ampere der Charger kann (z.B. nur 13A?) chargeEnable = den Ladevorgang starten oder stoppen, wie "enable" beim Charger?
hm, für den MaxCurrent muss ich dann entweder auf vehicle_data von Tesla direkt gehen cachen wir eigentlich nicht (es gibt also keine Daten nach TL Neustart/update bis das Auto aufwacht) oder in unsere gecachte Schnittstelle (=currentJson) noch charge_current_request_max aufnehmen, dann brauchen wir aber zuerst einen TeslaLogger release.
getMaxCurrent ist wieviel Ampere der Charger kann (z.B. nur 13A?)
Wieviele er aktuell erlaubt. Also charge_amps. Wenn das nicht geht wg. Caching kann es entfallen. https://github.com/evcc-io/evcc/pull/13099 hatte allerdings gezeigt, dass der Tesla zickig zu sein scheint wenn es unter 5A gehen soll- da hilft dann die Validierung über getMaxCurrent falls Du das nicht eh schon anders gelöst hast.
chargeEnable = den Ladevorgang starten oder stoppen, wie "enable" beim Charger?
genau
da hilft dann die Validierung über
getMaxCurrent
ach, jetzt... ja das geht mit cache schon heute: "charger_actual_current": 5, <- damit wird geladen "charge_current_request": 5, <- das wird vorgegeben, z.B. von EVCC.
Allerdings nicht für Custom Vehicle: https://github.com/Adminius/evcc/blob/feature/vehicle-teslalogger/vehicle/vehicle.go#L33 MaxCurrent ist ja was anders...
Ist drin
ich werde morgen testen. ich bin mir immer noch nicht sicher was von den beiden besser ist. request sollte der richtiger sein, denn actual kann kleiner sein
"charger_actual_current": 5, <- damit wird geladen "charge_current_request": 5, <- das wird vorgegeben, z.B. von EVCC.
Spannend finde ich, dass ich z.B. heute gar keine Probleme hatte mit 2, 3 oder 4A zu laden (über TeslaLogger). Wir machen keinerlei Checks, einfach die requests an Tesla weiterleiten (auch FleetAPI). Ich frage mich warum es bei eurer Integration nicht immer funktioniert und was da anders gemacht wird... Log aus TeslaLogger:
24.03.2024 15:06:38 : #3[Thread Pool Worker:11]: PostCommand: command/set_charging_amps - {"charging_amps":12}
24.03.2024 15:06:38 : #3[Thread Pool Worker:364]: Response: {"response":{"result":true,"reason":""}}
24.03.2024 15:08:08 : #3[Thread Pool Worker:36]: PostCommand: command/set_charging_amps - {"charging_amps":3}
24.03.2024 15:08:08 : #3[Thread Pool Worker:30]: Response: {"response":{"result":true,"reason":""}}
24.03.2024 15:08:53 : #3[Thread Pool Worker:181]: PostCommand: command/set_charging_amps - {"charging_amps":5}
24.03.2024 15:08:54 : #3[Thread Pool Worker:364]: Response: {"response":{"result":true,"reason":""}}
24.03.2024 15:09:38 : #3[Thread Pool Worker:182]: PostCommand: command/set_charging_amps - {"charging_amps":7}
24.03.2024 15:09:38 : #3[Thread Pool Worker:190]: Response: {"response":{"result":true,"reason":""}}
24.03.2024 15:10:23 : #3[Thread Pool Worker:184]: PostCommand: command/set_charging_amps - {"charging_amps":6}
24.03.2024 15:10:24 : #3[Thread Pool Worker:368]: Response: {"response":{"result":true,"reason":""}}
24.03.2024 15:11:08 : #3[Thread Pool Worker:184]: PostCommand: command/set_charging_amps - {"charging_amps":4}
24.03.2024 15:11:09 : #3[Thread Pool Worker:186]: Response: {"response":{"result":true,"reason":""}}
24.03.2024 15:13:23 : #3[Thread Pool Worker:361]: PostCommand: command/set_charging_amps - {"charging_amps":2}
24.03.2024 15:13:23 : #3[Thread Pool Worker:189]: Response: {"response":{"result":true,"reason":""}}
24.03.2024 15:14:53 : #3[Thread Pool Worker:367]: PostCommand: command/set_charging_amps - {"charging_amps":3}
24.03.2024 15:14:54 : #3[Thread Pool Worker:26]: Response: {"response":{"result":true,"reason":""}}
24.03.2024 15:22:23 : #3[Thread Pool Worker:6]: PostCommand: command/set_charging_amps - {"charging_amps":2}
24.03.2024 15:22:24 : #3[Thread Pool Worker:7]: Response: {"response":{"result":true,"reason":""}}
24.03.2024 15:28:23 : #3[Thread Pool Worker:7]: PostCommand: command/charge_stop -
24.03.2024 15:28:24 : #3[Thread Pool Worker:6]: Response: {"response":{"result":true,"reason":""}}
Die Vorgabe ist relevant.
so, ich wäre soweit. Funktioniert wie schweizer Uhr :)
Nice! Vielen Dank für den den super PR!