Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new vehicle template: TeslaLogger #13046

Merged
merged 10 commits into from
Mar 25, 2024

Conversation

Adminius
Copy link
Contributor

No description provided.

@andig
Copy link
Member

andig commented Mar 20, 2024

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

@andig andig added the enhancement New feature or request label Mar 20, 2024
@andig andig marked this pull request as draft March 20, 2024 08:14
@Adminius
Copy link
Contributor Author

Adminius commented Mar 20, 2024

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

@andig
Copy link
Member

andig commented Mar 20, 2024

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 andig marked this pull request as ready for review March 20, 2024 09:22
@Adminius
Copy link
Contributor Author

Adminius commented Mar 20, 2024

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

@andig
Copy link
Member

andig commented Mar 20, 2024

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.

@Adminius
Copy link
Contributor Author

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

@andig
Copy link
Member

andig commented Mar 20, 2024

Das lässt sich ändern :) Siehe #13055

@andig andig marked this pull request as draft March 20, 2024 10:37
@andig
Copy link
Member

andig commented Mar 20, 2024

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

@premultiply
Copy link
Member

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

@andig
Copy link
Member

andig commented Mar 20, 2024

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.

@Adminius
Copy link
Contributor Author

Adminius commented Mar 20, 2024

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

@andig
Copy link
Member

andig commented Mar 20, 2024

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 #13046 (comment) beschrieben nutzbar.

@Adminius
Copy link
Contributor Author

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

@andig
Copy link
Member

andig commented Mar 20, 2024

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 andig added the devices Specific device support label Mar 20, 2024
@andig
Copy link
Member

andig commented Mar 24, 2024

@Adminius sollte alles bereit sein?

@Adminius Adminius marked this pull request as ready for review March 24, 2024 11:30
@Adminius
Copy link
Contributor Author

Ich bin fertig ;)

@andig
Copy link
Member

andig commented Mar 24, 2024

Für Einsatz am TWC fehlt noch chargeEnable und getMaxCurrent, siehe #13007 (comment).

@Adminius
Copy link
Contributor Author

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.

@andig
Copy link
Member

andig commented Mar 24, 2024

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

@Adminius
Copy link
Contributor Author

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

@andig
Copy link
Member

andig commented Mar 24, 2024

Ist drin

@Adminius
Copy link
Contributor Author

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

@andig
Copy link
Member

andig commented Mar 24, 2024

Die Vorgabe ist relevant.

@Adminius
Copy link
Contributor Author

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

@andig andig merged commit d47f97d into evcc-io:master Mar 25, 2024
6 checks passed
@andig
Copy link
Member

andig commented Mar 25, 2024

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

naltatis pushed a commit that referenced this pull request Mar 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
devices Specific device support enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants