evcc icon indicating copy to clipboard operation
evcc copied to clipboard

new vehicle template: TeslaLogger

Open Adminius opened this issue 1 year ago • 14 comments

Adminius avatar Mar 19 '24 21:03 Adminius

@Adminius wenn es die Commands gibt- können wir auch gleich den Strom setzen?

andig avatar Mar 20 '24 08:03 andig

@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...

Adminius avatar Mar 20 '24 08:03 Adminius

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

andig avatar Mar 20 '24 09:03 andig

Einfach maxcurrent analog 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 charger Template 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

Adminius avatar Mar 20 '24 09:03 Adminius

Ein steuerbares Fahrzeug braucht (am TWC):

  • maxcurrent
  • ~~ startcharge/stopcharge ~~
  • chargeEnable
  • status ist optional und dient nur der Fahrzeugerkennung

Ein Charger braucht:

  • status
  • maxcurrent
  • enable (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.

andig avatar Mar 20 '24 10:03 andig

Ein steuerbares Fahrzeug braucht (am TWC):

  • maxcurrent
  • startcharge
  • stopcharge
  • status ist 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

Adminius avatar Mar 20 '24 10:03 Adminius

Das lässt sich ändern :) Siehe https://github.com/evcc-io/evcc/pull/13055

andig avatar Mar 20 '24 10:03 andig

/cc @premultiply das wäre der Weg, Teslas völlig unabhängig einer supporteten Wallbox laden zu können. Ein lange angefragtes Feature ;)

andig avatar Mar 20 '24 10:03 andig

Und wie bekommt man raus an welchem LP das Fahrzeug hängt?

premultiply avatar Mar 20 '24 10:03 premultiply

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.

andig avatar Mar 20 '24 10:03 andig

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...)

Adminius avatar Mar 20 '24 11:03 Adminius

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.

andig avatar Mar 20 '24 12:03 andig

Fassen wir mal zusammen: Diese Varianten sind/wären möglich:

  1. TWC + Tesla (wie heute) = 1:1 Zuordnung ist erforderlich
  2. TWC + TeslaLogger (Vehicle) = 1:1 Zuordnung ist erforderlich
  3. TeslaLogger (Charger) + TeslaLogger (Vehicle) = 1:1 Zuordnung ist erforderlich
  4. 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

Adminius avatar Mar 20 '24 12:03 Adminius

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.

andig avatar Mar 20 '24 13:03 andig

@Adminius sollte alles bereit sein?

andig avatar Mar 24 '24 11:03 andig

Ich bin fertig ;)

Adminius avatar Mar 24 '24 11:03 Adminius

Für Einsatz am TWC fehlt noch chargeEnable und getMaxCurrent, siehe https://github.com/evcc-io/evcc/issues/13007#issuecomment-2016762205.

andig avatar Mar 24 '24 11:03 andig

chargeEnable und getMaxCurrent

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.

Adminius avatar Mar 24 '24 16:03 Adminius

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

andig avatar Mar 24 '24 16:03 andig

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...

Adminius avatar Mar 24 '24 16:03 Adminius

Ist drin

andig avatar Mar 24 '24 17:03 andig

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":""}}

Adminius avatar Mar 24 '24 17:03 Adminius

Die Vorgabe ist relevant.

andig avatar Mar 24 '24 17:03 andig

so, ich wäre soweit. Funktioniert wie schweizer Uhr :)

Adminius avatar Mar 25 '24 16:03 Adminius

Nice! Vielen Dank für den den super PR!

andig avatar Mar 25 '24 21:03 andig