evcc icon indicating copy to clipboard operation
evcc copied to clipboard

Charger Delta AC MAX Basic (Modbus) wrong charger status

Open Felsblick opened this issue 1 year ago • 3 comments

Describe the bug

With evcc 0.130.4 Wong charging status is reported with the Delta AC Max Basic. Although no vehicle is connected, evcc states connected vehicle. Refer to: https://github.com/evcc-io/evcc/issues/15592#issuecomment-2308994108

Proposed solution: Implement register availability differentiation to find out if Delta AC Max basic or smart WB is used. AC max basic will report values on Register 1001, AC max Smart does not (only 1000 is available). For AC Max basic Register 1001 shall be used with mapping of evcc 0.128.4 and older, for AC Smart Register 1000 with mapping of evcc 0.130.4

Steps to reproduce

  1. Use evcc 0.130.4 and Delta AC Max basic with modbus

Configuration details

network:
  # schema is the HTTP schema
  # setting to `https` does not enable https, it only changes the way URLs are generated
  schema: http
  # host is the hostname or IP address
  # if the host name contains a `.local` suffix, the name will be announced on MDNS
  # docker: MDNS announcements don't work. host must be set to the docker host's name.
  host: homeassistant.local
  # port is the listening port for UI and api
  # evcc will listen on all available interfaces
  port: 7070

interval: 10s # control cycle interval. Interval <30s can lead to unexpected behavior, see https://docs.evcc.io/docs/reference/configuration/interval

# database configuration for persisting charge sessions and settings
# database:
#   type: sqlite
#   dsn: <path-to-db-file>

# sponsor token enables optional features (request at https://sponsor.evcc.io)


#
# Telemetry allows collecting usage data (grid and green energy, charge power).
# Data is aggregated, no individual charging sessions are tracked. The collected,
# anonymous data can be retrieved using https://api.evcc.io.
#
# See https://github.com/evcc-io/evcc/pull/4343 or details.
#
# For time being, this is only available to sponsors, hence data is associated with
# the sponsor token's identity.
#
telemetry: true
plant: *deleted*

# log settings
log: info
levels:
  site: debug
  lp-1: debug
  lp-2: debug
  cache: error
  db: error

# modbus proxy for allowing external programs to reuse the evcc modbus connection
# each entry will start a proxy instance at the given port speaking Modbus TCP and
# relaying to the given modbus downstream device (either TCP or RTU, RS485 or TCP)
modbusproxy:
  #  - port: 5200
  #    uri: solar-edge:502
  #    # rtu: true
  #    # readonly: true # use `deny` to raise modbus errors

# meter definitions
# name can be freely chosen and is used as reference when assigning meters to site and loadpoints
# for documentation see https://docs.evcc.io/docs/devices/meters
meters:
  - name: Netz
    type: template
    template: fronius-solarapi-v1
    usage: grid
    host: *deleted* # IP-Adresse oder Hostname
    user: # Benutzerkonto (bspw. E-Mail Adresse, User Id, etc.) (optional)
    password: # Passwort des Benutzerkontos (bei führenden Nullen bitte in einfache Hochkommata setzen) (optional)
  - name: PV
    type: template
    template: fronius-solarapi-v1
    usage: pv
    host: *deleted* # IP-Adresse oder Hostname 

# charger definitions
# name can be freely chosen and is used as reference when assigning charger to vehicle
# for documentation see https://docs.evcc.io/docs/devices/chargers
chargers:
  - name: Delta
    type: template
    template: delta
    # Modbus TCP
    #modbus: tcpip
    modbus: rs485tcpip
    id: 1
    host: *deleted* # Hostname
    port: 502

# vehicle definitions
# name can be freely chosen and is used as reference when assigning vehicle to loadpoint
# for documentation see https://docs.evcc.io/docs/devices/vehicles
# vehicles:
#  - name: car1
#    type: renault
#    title: Zoe
#    capacity: 60 # kWh
#    user: myuser # user
#    password: mypassword # password
#    vin: WREN...
#    onIdentify: # set defaults when vehicle is identified
#      mode: pv # enable PV-charging when vehicle is identified

# site describes the EVU connection, PV and home battery
site:
  title: Home # display name for UI
  meters:
    grid: Netz # grid meter
    pv:
      - PV # list of pv inverters/ meters
#    battery:
#      - battery # list of battery meters
#    aux:
#      - aux # list of auxiliary meters for adjusting grid operating point
  residualPower: 0 # additional household usage margin
  maxGridSupplyWhileBatteryCharging: 0 # ignore battery charging if AC consumption is above this value

# loadpoint describes the charger, charge meter and connected vehicle
loadpoints:
  - title: Garage # display name for UI
    charger: Delta # charger
#    meter: charge # charge meter
    mode: "PV" # default charge mode to apply when vehicle is disconnected; use "off" to disable by default if charger is publicly available

    # remaining settings are experts-only and best left at default values
#    priority: 0 # relative priority for concurrent charging in PV mode with multiple loadpoints (higher values have higher priority)
#    soc:
#      # polling defines usage of the vehicle APIs
#      # Modifying the default settings it NOT recommended. It MAY deplete your vehicle's battery
#      # or lead to vehicle manufacturer banning you from API use. USE AT YOUR OWN RISK.
#      poll:
#        # poll mode defines under which condition the vehicle API is called:
#        #   charging: update vehicle ONLY when charging (this is the recommended default)
#        #   connected: update vehicle when connected (not only charging), interval defines how often
#        #   always: always update vehicle regardless of connection state, interval defines how often (only supported for single vehicle)
#        mode: charging
#        # poll interval defines how often the vehicle API may be polled if NOT charging
#        interval: 60m
#      estimate: true # set false to disable interpolating between api updates (not recommended)
#    enable: # pv mode enable behavior
#      delay: 1m # threshold must be exceeded for this long
#      threshold: 0 # grid power threshold (in Watts, negative=export). If zero, export must exceed minimum charge power to enable
#    disable: # pv mode disable behavior
#      delay: 3m # threshold must be exceeded for this long
#      threshold: 0 # maximum import power (W)

# tariffs are the fixed or variable tariffs
tariffs:
  currency: EUR # three letter ISO-4217 currency code (default EUR)
  grid:
    # either static grid price (or price zones)
    type: fixed
    price: 0.320 # EUR/kWh
#    zones:
#      - days: Mon-Fri
#        hours: 2-5
#        price: 0.2 # EUR/kWh
#      - days: Sat,Sun
#        price: 0.15 # EUR/kWh

    # or variable tariffs
    # type: tibber
    # token: "476c477d8a039529478ebd690d35ddd80e3308ffc49b59c65b142321aee963a4" # access token
    # homeid: "cc83e83e-8cbf-4595-9bf7-c3cf192f7d9c" # optional if multiple homes associated to account

    # type: awattar
    # region: de # optional, choose at for Austria
    # charges: # optional, additional charges per kWh
    # tax: # optional, additional tax (0.1 for 10%)

    # type: octopusenergy
    # tariff: AGILE-FLEX-22-11-25 # Tariff code
    # region: A # optional

    # type: elering # Nordpool
    # region: ee # or lt, lv, fi
    # charges: # optional, additional charges per kWh
    # tax: # optional, additional tax (0.1 for 10%)

    # type: energinet # Energinet using the price in DKK
    # region: dk1 # or dk2
    # charges: # optional, additional charges per kWh
    # tax: # optional, additional tax (0.1 for 10%)

    # type: entsoe # Entso-E european market data
    # domain: BZN|DE-LU # https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html#_areas
    # securitytoken: # api token
    # charges: # optional, additional charges per kWh
    # tax: # optional, additional tax (0.1 for 10%)

    # type: amber
    # token: # api token from https://app.amber.com.au/developers/
    # siteid: # site ID returned by the API
    # channel: general

    # type: custom # price from a plugin source; see https://docs.evcc.io/docs/reference/plugins
    # price:
    #   source: http
    #   uri: https://example.org/price.json
    #   jq: .price.current

  feedin:
    # rate for feeding excess (pv) energy to the grid
    type: fixed
    price: 0.077 # EUR/kWh

    # type: octopusenergy
    # tariff: AGILE-FLEX-22-11-25 # Tariff code
    # region: A # optional

    # type: amber
    # token: # api token from https://app.amber.com.au/developers/
    # siteid: # site ID returned by the API
    # channel: feedIn
  co2:
    # co2 tariff provides co2 intensity forecast and is for co2-optimized target charging if no variable grid tariff is specified
    type: grünstromindex # GrünStromIndex (Germany only)
    zip: 74394

    # type: electricitymaps # https://app.electricitymaps.com/map
    # uri: <uri>
    # token: <token> # needs to be a token with forecast (not in the free tier)
    # zone: DE

    # type: ngeso # National Grid Electricity System Operator data (United Kingdom only) https://carbonintensity.org.uk/
    # provides national data if both region and postcode are omitted - do not supply both at the same time!
    # region: 1 # optional, coarser than using a postcode - see https://api.carbonintensity.org.uk/ for full list
    # postcode: SW1A1AA # optional

# mqtt message broker
mqtt:
  broker: localhost:1883
  topic: evcc # root topic for publishing, set empty to disable
  user: evcc
  password: *deleted*

# influx database
influx:
  # url: http://localhost:8086
  # database: evcc
  # user:
  # password:

# eebus credentials
eebus:
  # uri: # :4712
  # interfaces: # limit eebus to specific network interfaces
  # - en0
  # certificate: # local signed certificate, required, can be generated via `evcc eebus-cert`
  #   public: # public key
  #   private: # private key

# push messages
messaging:
  events:
    start: # charge start event
      title: Charge started
      msg: Started charging in "${mode}" mode
    stop: # charge stop event
      title: Charge finished
      msg: Finished charging ${chargedEnergy:%.1fk}kWh in ${chargeDuration}.
    connect: # vehicle connect event
      title: Car connected
      msg: "Car connected at ${pvPower:%.1fk}kW PV"
    disconnect: # vehicle connected event
      title: Car disconnected
      msg: Car disconnected after ${connectedDuration}
    soc: # vehicle soc update event
      title: Soc updated
      msg: Battery charged to ${vehicleSoc:%.0f}%
    guest: # vehicle could not be identified
      title: Unknown vehicle
      msg: Unknown vehicle, guest connected?
  services:
  # - type: pushover
  #   app: # app id
  #   recipients:
  #   - # list of recipient ids
  # - type: telegram
  #   token: # bot id
  #   chats:
  #   - # list of chat ids
  # - type: email
  #   uri: smtp://<user>:<password>@<host>:<port>/?fromAddress=<from>&toAddresses=<to>
  # - type: ntfy
  #   uri: https://<host>/<topics>
  #   priority: <priority>
  #   tags: <tags>

Log details

After startup when no vehicle is connected:
[delta ] TRACE 2024/08/26 10:00:32 modbus: send 01 04 03 e8 00 01 b1 ba
[delta ] TRACE 2024/08/26 10:00:32 modbus: recv 01 04 02 00 03 f9 31
[lp-1 ] DEBUG 2024/08/26 10:00:32 charger status: B
[lp-1 ] INFO 2024/08/26 10:00:32 car connected

What type of operating system are you running?

HomeAssistant Add-on

Version

0.130.4

Felsblick avatar Aug 26 '24 08:08 Felsblick

Register 130 states the model name as string. In my case (Delta AC MAX Smart) the string would be EIAW-E22KTSE5A04, whereas... EIAW-E22KTSE5A04 = Smart EIAW-E22KTBE5A04 = Basic

Other parts of the model name / SKU string may vary as well (affixed cable vs. plug, 11kW vs. 22kW, EU version vs. US/other versions, etc). Unfortunately I couldn't find an exhausted list of available SKUs. I would suggest implementing something like this: https://github.com/evcc-io/evcc/compare/master...madmat17:evcc_delta:master#diff-6d9fb2ec3d3d401d69c4079b978d1c89d59bddfae6243ebeb45681a1ac125be5

No PR created yet, as I'm not a developer, nor do I have the time the upcoming days to test the code. @premultiply: Would you be so kind to have a look at the suggested changes, please? You most probably notice any quirks at first sight. ;-)

Thanks!

madmat17 avatar Aug 26 '24 13:08 madmat17

Let's keep it simple and try to access register 1001 during initialization and switch variants accordingly as suggested in https://github.com/evcc-io/evcc/issues/15592#issuecomment-2309498250 by @Felsblick

premultiply avatar Aug 26 '24 18:08 premultiply

Let's keep it simple and try to access register 1001 during initialization and switch variants accordingly as suggested in #15592 (comment) by @Felsblick

@premultiply Thanks for checking! I thought that reading the model name would be more robust approach - thus I went that direction. Here's and adapted version of the code with just trying to read register 1001 and set the boolean accordingly. Could that snippet work? https://github.com/evcc-io/evcc/compare/master...madmat17:evcc_delta:master#diff-6d9fb2ec3d3d401d69c4079b978d1c89d59bddfae6243ebeb45681a1ac125be5

Edit: Had a typo in my code with double mention of case 3 Corrected in https://github.com/evcc-io/evcc/commit/3c67b6ea7543f352c9a38a2054db5094d440bb48

madmat17 avatar Aug 27 '24 04:08 madmat17

Kann das Problem mit meinen 2 AC Basic nur bestätigen. Mit der 0.130.1 wurde das Problem gefixt. Seit der 0.130.3 wieder das Problem, dass die Ladestation ständig als verbunden angezeigt wird. Dadurch wird dann die geladene Menge und auch der Abfahrtstimer nie zurückgesetzt.

TweetsOfNiklas avatar Sep 02 '24 17:09 TweetsOfNiklas

Wie kommen wir hier weiter? Falls 1001 Lesefehler mapping a, sonst mapping b? Was wären dann a und b?

andig avatar Sep 07 '24 10:09 andig

Hallo Andi,

wie im Text oben beschrieben: For AC Max basic Register 1001 shall be used with mapping of evcc 0.128.4 and older, for AC Smart Register 1000 with mapping of evcc 0.130.4

Oder alternativ die Lösung von @madmat17 https://github.com/evcc-io/evcc/issues/15697#issuecomment-2311575027

Felsblick avatar Sep 07 '24 10:09 Felsblick

Ein PR wäre Klasse! Die unterschiedlichen Versionen lassen sich auch explizit durch unterschiedliche Templatetypen in einer Datei auseinander halten wenn es nicht per Autoerkennung erfolgen kann. Dann sollte die "alte" Version auch den alten Typennamen behalten.

andig avatar Sep 07 '24 10:09 andig

Oh, ich befürchte das übersteigt meine Kenntnisse, ich kann das nicht programmieren... @madmat17 du vielleicht?

Felsblick avatar Sep 07 '24 11:09 Felsblick

@andig / @Felsblick Ich kann morgen einen PR erstellen; allerdings wäre der Fix noch ungetestet (sollte aber laufen).

madmat17 avatar Sep 07 '24 12:09 madmat17

Wenn ich ein klein wenig Nachhilfe bekomme kann ich den fix gerne auf meinem MacOS Testsystem ausprobieren. Brauch nur den Brew Befehl die entsprechende Version zu installieren.

Felsblick avatar Sep 07 '24 12:09 Felsblick

@premultiply: Danke für das Einspielen des Fixes!

madmat17 avatar Sep 08 '24 14:09 madmat17

Danke euch auch! Ich habe es gleich getestet, leider nicht erfolgreich. Status 3 wieder wieder auf Charger Status B gemappt. Müsste aber A sein! Fahrzeug verbunden wird angezeigt, obwohl keines angeschlossen. Zusätzlich kommt las Logo „warte auf Authorisierung“

delta ] TRACE 2024/09/08 19:32:28 modbus: send 01 04 03 e8 00 01 b1 ba
[delta ] TRACE 2024/09/08 19:32:28 modbus: recv 01 04 02 00 03 f9 31
[lp-1 ] DEBUG 2024/09/08 19:32:28 charger status: B
[lp-1 ] INFO 2024/09/08 19:32:28 car connected

@premultiply Du hattest gestern kurzzeitig die Lösung mit der „echten“ Weiche programmiert wo tatsächlich wieder das Register 1001 benutzt wurde. Warum nicht das umsetzen? Ich denke das ist die robustere Lösung. Das Register 1000 macht bei der Ac max Basic keinen Sinn.

@madmat17 Habe mir den code mal angeschaut, wenn ich es richtig interpretiere ist die Prüfung (isBasic) genau falsch herum umgesetzt. Wenn das Register 1001 vorhanden ist muss isBasic = true sein. Im Moment ist es anders herum...

// check for basic or smart register set
 	if _, err := wb.conn.ReadInputRegisters(wb.base+deltaRegEvseChargerState, 1); err != nil {
 		wb.isBasic = true
 	}

Felsblick avatar Sep 08 '24 17:09 Felsblick

Ich hab die Logik gedreht und leider vergessen den Init-Check auch anzupassen, sorry. Wird korrigiert mit anderen Optimierungen.

premultiply avatar Sep 08 '24 18:09 premultiply

Das letzte Update macht den Connector Status an der Delta Max Smart leider wieder kaputt. Wird unconnected angezeigt, obwohl connected. Zurück auf 0.130.7 gehts wieder

Klaus3d3 avatar Sep 11 '24 10:09 Klaus3d3

@premultiply Wenn ich nicht ganz spinne, dann war auch das Setting des isBasic-Bools verdreht. Vielleicht hatte ich aber auch noch nicht genug Kaffee...

Ich habe hierzu folgenden PR erstellt: https://github.com/evcc-io/evcc/pull/16052

madmat17 avatar Sep 12 '24 04:09 madmat17

Siehe #15983

Bitte testen.

premultiply avatar Sep 12 '24 06:09 premultiply

Siehe #15983

Bitte testen.

Wie bekomme ich den Branch mit Brew auf macOS? Oder kann mir jemand einen Weg beschreiben?

Felsblick avatar Sep 12 '24 06:09 Felsblick

@premultiply Mit dem letzten Fix (eben die Nightly-Build installiert) wird das Fahrzeug mit der Smart-Variante noch immer nicht erkannt. Charger Status bleibt auf "A", obwohl das Register 1000 auf "3" gewechselt hat.

Ich bin der Meinung, dass hier die Logik noch immer vertauscht ist:

	if _, err := wb.conn.ReadInputRegisters(wb.base+deltaRegEvseChargerState, 1); err != nil {
		wb.isBasic = true
	}

Wenn das Register nicht gelesen werden kann, dann handelt es sich nicht um eine RTU-Anbindung (= Basic), sondern um eine TCP-Anbindung (= Smart). Demnach müsste es wie folgt aussehen:

	if _, err := wb.conn.ReadInputRegisters(wb.base+deltaRegEvseChargerState, 1); err != nil {
		wb.isBasic = false
	}

Mein PR https://github.com/evcc-io/evcc/pull/16052 hat den Schönheitstest nicht bestanden, aber ich denke, dass es damit klappen sollte.

madmat17 avatar Sep 13 '24 05:09 madmat17

Wie sollte das funktionieren wenn der PR noch überhaupt nicht gemerged ist?

premultiply avatar Sep 13 '24 05:09 premultiply

Habe ich eben auch gerallt. Kann natürlich nicht...

madmat17 avatar Sep 13 '24 05:09 madmat17

Wird es eine Merge (und damit Binaries) deines Commits https://github.com/evcc-io/evcc/commit/b8d9203d757ef2b6203bdb08e6204a4f2950a7a2 geben? Ich kann in meiner Umgebung leider nicht ohne weiteres kompilieren.

madmat17 avatar Sep 13 '24 05:09 madmat17

@premultiply Ich habe den Branch fix/delta-status-decorated (ergo https://github.com/evcc-io/evcc/pull/15983) in einer VM kompiliert und laufen lassen - Fahrzeugerkennung mit der Delta AC Max Smart über Modbus TCP funktioniert leider nicht.

Log:

[main ] INFO 2024/09/13 14:10:21 evcc 0.130.8 (b8d9203d)
[main ] INFO 2024/09/13 14:10:21 using config file: /mnt/c/tmp/_linux/evcc/evcc.yaml
[db ] INFO 2024/09/13 14:10:21 using sqlite database: /root/.evcc/evcc.db
[main ] INFO 2024/09/13 14:10:22 listening at :7070
[site ] INFO 2024/09/13 14:10:25 site config:
[site ] INFO 2024/09/13 14:10:25 meters: grid ✓ pv ✓ battery ✓
[site ] INFO 2024/09/13 14:10:25 grid: power ✓ energy ✓ currents ✓
[site ] INFO 2024/09/13 14:10:25 pv 1: power ✓ energy ✓ currents ✗
[site ] INFO 2024/09/13 14:10:25 battery 1: power ✓ energy ✓ currents ✗ soc ✓ capacity ✗
[site ] INFO 2024/09/13 14:10:25 vehicles:
[site ] INFO 2024/09/13 14:10:25 vehicle 1: range ✓ finish ✗ status ✓ climate ✗ wakeup ✓
[lp-1 ] INFO 2024/09/13 14:10:25 loadpoint 1:
[lp-1 ] INFO 2024/09/13 14:10:25 mode: off
[lp-1 ] INFO 2024/09/13 14:10:25 charger: power ✓ energy ✗ currents ✗ phases ✗ wakeup ✗
[lp-1 ] INFO 2024/09/13 14:10:25 meters: charge ✓
[lp-1 ] INFO 2024/09/13 14:10:25 charge: power ✓ energy ✗ currents ✗
[lp-1 ] DEBUG 2024/09/13 14:10:25 phase timer inactive
[lp-1 ] DEBUG 2024/09/13 14:10:25 pv timer inactive
[main ] INFO 2024/09/13 14:10:25 new version available: 0.130.9
[site ] DEBUG 2024/09/13 14:10:25 ----
[lp-1 ] DEBUG 2024/09/13 14:10:26 charge power: 0W
[site ] DEBUG 2024/09/13 14:10:30 pv power: 214W
[site ] DEBUG 2024/09/13 14:10:34 battery soc: 5%
[site ] DEBUG 2024/09/13 14:10:34 battery power: -43W
[site ] DEBUG 2024/09/13 14:10:36 grid meter: 1000W
[site ] DEBUG 2024/09/13 14:10:37 grid currents: [3.19 -0.66 1.51]A
[site ] DEBUG 2024/09/13 14:10:38 site power: 1057W
[lp-1 ] DEBUG 2024/09/13 14:10:39 charger status: A
[lp-1 ] INFO 2024/09/13 14:10:39 car disconnected
[lp-1 ] DEBUG 2024/09/13 14:10:39 set session soc limit: 0
[lp-1 ] DEBUG 2024/09/13 14:10:39 set session energy limit: 0
[site ] DEBUG 2024/09/13 14:10:55 ----
[lp-1 ] DEBUG 2024/09/13 14:10:56 charge power: 0W
[site ] DEBUG 2024/09/13 14:10:57 pv power: 219W
[site ] DEBUG 2024/09/13 14:10:58 battery soc: 5%
[site ] DEBUG 2024/09/13 14:10:58 battery power: -42W
[site ] DEBUG 2024/09/13 14:10:59 grid meter: 994W
[site ] DEBUG 2024/09/13 14:11:03 grid currents: [3.18 -0.66 3.12]A
[site ] DEBUG 2024/09/13 14:11:04 site power: 1052W
[lp-1 ] DEBUG 2024/09/13 14:11:05 charger status: A
[site ] DEBUG 2024/09/13 14:11:25 ----
[lp-1 ] DEBUG 2024/09/13 14:11:26 charge power: 0W
[site ] DEBUG 2024/09/13 14:11:26 pv power: 215W
[site ] DEBUG 2024/09/13 14:11:28 battery soc: 5%
[site ] DEBUG 2024/09/13 14:11:28 battery power: -43W
[site ] DEBUG 2024/09/13 14:11:30 grid meter: 951W
[site ] DEBUG 2024/09/13 14:11:35 grid currents: [3.17 -0.65 5.14]A
[site ] DEBUG 2024/09/13 14:11:40 site power: 1008W
[lp-1 ] DEBUG 2024/09/13 14:11:41 charger status: A
[site ] DEBUG 2024/09/13 14:11:55 ----
[lp-1 ] DEBUG 2024/09/13 14:11:56 charge power: 0W
[site ] DEBUG 2024/09/13 14:11:58 pv power: 219W
[site ] DEBUG 2024/09/13 14:12:01 battery soc: 5%
[site ] DEBUG 2024/09/13 14:12:01 battery power: -44W
[site ] DEBUG 2024/09/13 14:12:01 grid meter: 1139W
[site ] DEBUG 2024/09/13 14:12:05 grid currents: [3.2 -0.66 1.74]A
[site ] DEBUG 2024/09/13 14:12:05 site power: 1195W
[lp-1 ] DEBUG 2024/09/13 14:12:06 charger status: A

Wenn ich evcc in meiner VM beende und die Version 0.130.7 in meiner Live-Umgebung wieder starte, klappt die Erkennung:

[main ] INFO 2024/09/13 14:21:03 evcc 0.130.7
[main ] INFO 2024/09/13 14:21:03 using config file: /etc/evcc.yaml
[db ] INFO 2024/09/13 14:21:03 using sqlite database: /var/lib/evcc/evcc.db
[main ] INFO 2024/09/13 14:21:03 listening at :7070
[site ] INFO 2024/09/13 14:21:05 site config:
[site ] INFO 2024/09/13 14:21:05 meters: grid ✓ pv ✓ battery ✓
[site ] INFO 2024/09/13 14:21:05 grid: power ✓ energy ✓ currents ✓
[site ] INFO 2024/09/13 14:21:05 pv 1: power ✓ energy ✓ currents ✗
[site ] INFO 2024/09/13 14:21:05 battery 1: power ✓ energy ✓ currents ✗ soc ✓ capacity ✗
[site ] INFO 2024/09/13 14:21:05 vehicles:
[site ] INFO 2024/09/13 14:21:05 vehicle 1: range ✓ finish ✗ status ✓ climate ✗ wakeup ✓
[lp-1 ] INFO 2024/09/13 14:21:05 loadpoint 1:
[lp-1 ] INFO 2024/09/13 14:21:05 mode: off
[lp-1 ] INFO 2024/09/13 14:21:05 charger: power ✓ energy ✗ currents ✗ phases ✗ wakeup ✗
[lp-1 ] INFO 2024/09/13 14:21:05 meters: charge ✓
[lp-1 ] INFO 2024/09/13 14:21:05 charge: power ✓ energy ✗ currents ✗
[site ] DEBUG 2024/09/13 14:21:05 set buffer soc: 95
[site ] DEBUG 2024/09/13 14:21:05 set priority soc: 90
[site ] DEBUG 2024/09/13 14:21:05 set battery discharge control: true
[site ] DEBUG 2024/09/13 14:21:05 set grid charge limit: 0.0
[lp-1 ] DEBUG 2024/09/13 14:21:05 set smart cost limit: 0.1
[lp-1 ] DEBUG 2024/09/13 14:21:05 phase timer inactive
[lp-1 ] DEBUG 2024/09/13 14:21:05 pv timer inactive
[main ] INFO 2024/09/13 14:21:05 new version available: 0.130.9
[site ] DEBUG 2024/09/13 14:21:06 ----
[lp-1 ] DEBUG 2024/09/13 14:21:08 charge power: 0W
[site ] DEBUG 2024/09/13 14:21:10 pv power: 232W
[site ] DEBUG 2024/09/13 14:21:11 battery soc: 5%
[site ] DEBUG 2024/09/13 14:21:11 battery power: -44W
[site ] DEBUG 2024/09/13 14:21:12 grid meter: 1068W
[site ] DEBUG 2024/09/13 14:21:14 grid currents: [3.42 -0.67 1.39]A
[site ] DEBUG 2024/09/13 14:21:15 battery has priority at soc 5% (< 90%)
[site ] DEBUG 2024/09/13 14:21:15 site power: 1168W
[lp-1 ] DEBUG 2024/09/13 14:21:16 charger status: B
[lp-1 ] INFO 2024/09/13 14:21:16 car connected

Heute/morgen kann ich noch weitere Details liefern, wenn gewünscht/erfordert; danach bin ich für ein paar Tage verhindert.

Gruß, Mat

madmat17 avatar Sep 13 '24 12:09 madmat17

EDIT: Das Kommentar unten bezieht sich auf eine ältere Code-Version - ist ersetzt durch https://github.com/evcc-io/evcc/pull/16094


Mit dem Fix aus meinem PR https://github.com/evcc-io/evcc/pull/16052 läuft es übrigens (bitte nicht über die Versionsnummer wundern - ich habe einfach die delta.go stupide mit meiner Version überschrieben, kompiliert und neu laufen lassen) mit der Delta Smart.:

[main ] INFO 2024/09/13 15:08:20 evcc 0.130.8 (b8d9203d)
[main ] INFO 2024/09/13 15:08:20 using config file: /mnt/c/tmp/_linux/evcc/evcc.yaml
[db ] INFO 2024/09/13 15:08:20 using sqlite database: /root/.evcc/evcc.db
[main ] INFO 2024/09/13 15:08:20 listening at :7070
[delta ] DEBUG 2024/09/13 15:08:20 madmat17 version!
[delta ] DEBUG 2024/09/13 15:08:21 isBasic mode: false
[site ] INFO 2024/09/13 15:08:23 site config:
[site ] INFO 2024/09/13 15:08:23 meters: grid ✓ pv ✓ battery ✓
[site ] INFO 2024/09/13 15:08:23 grid: power ✓ energy ✓ currents ✓
[site ] INFO 2024/09/13 15:08:23 pv 1: power ✓ energy ✓ currents ✗
[site ] INFO 2024/09/13 15:08:23 battery 1: power ✓ energy ✓ currents ✗ soc ✓ capacity ✗
[site ] INFO 2024/09/13 15:08:23 vehicles:
[site ] INFO 2024/09/13 15:08:23 vehicle 1: range ✓ finish ✗ status ✓ climate ✗ wakeup ✓
[lp-1 ] INFO 2024/09/13 15:08:23 loadpoint 1:
[lp-1 ] INFO 2024/09/13 15:08:23 mode: off
[lp-1 ] INFO 2024/09/13 15:08:23 charger: power ✓ energy ✗ currents ✗ phases ✗ wakeup ✗
[lp-1 ] INFO 2024/09/13 15:08:23 meters: charge ✓
[lp-1 ] INFO 2024/09/13 15:08:23 charge: power ✓ energy ✗ currents ✗
[lp-1 ] DEBUG 2024/09/13 15:08:23 phase timer inactive
[lp-1 ] DEBUG 2024/09/13 15:08:23 pv timer inactive
[main ] INFO 2024/09/13 15:08:23 new version available: 0.130.9
[site ] DEBUG 2024/09/13 15:08:23 ----
[lp-1 ] DEBUG 2024/09/13 15:08:24 charge power: 0W
[site ] DEBUG 2024/09/13 15:08:28 pv power: 93W
[site ] DEBUG 2024/09/13 15:08:32 battery soc: 5%
[site ] DEBUG 2024/09/13 15:08:32 battery power: -43W
[site ] DEBUG 2024/09/13 15:08:32 grid meter: 236W
[site ] DEBUG 2024/09/13 15:08:35 grid currents: [0.68 0.54 3.8]A
[site ] DEBUG 2024/09/13 15:08:35 site power: 293W
[lp-1 ] DEBUG 2024/09/13 15:08:37 charger status: B
[lp-1 ] INFO 2024/09/13 15:08:37 car connected
[lp-1 ] DEBUG 2024/09/13 15:08:37 vehicle api refresh
[lp-1 ] DEBUG 2024/09/13 15:08:37 pv timer elapse
[lp-1 ] DEBUG 2024/09/13 15:08:37 pv timer inactive
[lp-1 ] DEBUG 2024/09/13 15:08:43 charger vehicle id: xxx
[lp-1 ] INFO 2024/09/13 15:08:43 vehicle updated: unknown -> myCar
[lp-1 ] DEBUG 2024/09/13 15:08:43 set charge mode: pv
[lp-1 ] DEBUG 2024/09/13 15:08:45 vehicle status: B
[lp-1 ] DEBUG 2024/09/13 15:08:45 vehicle soc: 91%
[lp-1 ] DEBUG 2024/09/13 15:08:45 vehicle soc limit: 100%
[lp-1 ] DEBUG 2024/09/13 15:08:45 vehicle range: 365km
[lp-1 ] DEBUG 2024/09/13 15:08:47 pv charge current: 0A = 0A + -0.425A (293W @ 3p)
[lp-1 ] DEBUG 2024/09/13 15:08:47 pv enable timer reset
[lp-1 ] DEBUG 2024/09/13 15:08:47 pv timer inactive
[site ] DEBUG 2024/09/13 15:08:47 ----
[lp-1 ] DEBUG 2024/09/13 15:08:49 charge power: 0W
[site ] DEBUG 2024/09/13 15:08:52 pv power: 100W
[site ] DEBUG 2024/09/13 15:08:54 battery soc: 5%
[site ] DEBUG 2024/09/13 15:08:54 battery power: -44W
[site ] DEBUG 2024/09/13 15:08:54 grid meter: 317W
[site ] DEBUG 2024/09/13 15:08:56 grid currents: [0.68 0.55 3.15]A
[site ] DEBUG 2024/09/13 15:08:57 site power: 373W
[lp-1 ] DEBUG 2024/09/13 15:08:57 vehicle odometer: 9621km
[lp-1 ] DEBUG 2024/09/13 15:08:59 charger status: B

madmat17 avatar Sep 13 '24 13:09 madmat17

Vielleicht kann/will jemand mit einer Delta AC Max Basic einmal den Compiler mit der delta.go aus diesem PR https://github.com/evcc-io/evcc/pull/16094 anstarten - mit der Smart läuft's.

@Felsblick Über Brew bekommt man meines Wissens nur fertige Binaries. Aber evtl. hast du ja eine Linux-VM auf deinem MacOS laufen zum Kompilieren und Testen. Ist hier ganz gut beschrieben: https://github.com/evcc-io/evcc/blob/master/CONTRIBUTING.md

Quick and dirty:

  1. Go installieren
  2. NodeJS installieren
  3. evcc-io/evcc Repo klonen
  4. delta.go durch den neuen Code aus dem PR ersetzen
  5. make install-ui ausführen
  6. make install ausführen
  7. make ausführen
  8. Deine evcc.yaml ins evcc-Verzeichnis kopieren
  9. Das Programm mit ./evcc starten

madmat17 avatar Sep 13 '24 19:09 madmat17

Danke für die Starthilfe. Ich werde es am Wochenende probieren.

Felsblick avatar Sep 13 '24 19:09 Felsblick

...mal eine blöde Frage, ich glaube ich bin da einem Irrtum aufgessen, den mir eine falsche ChatGPT interpretation des codes eingebrockt hat.

Wenn über: err := wb.conn.ReadInputRegisters(wb.base+deltaRegEvseChargerState, 1) das Register abgefragt wird und es existiert, also ein Wert zurück kommt, was ist dann der Inhalt von err? err == nil oder err == Rückgabewert der Registers also err !=nil ?

Felsblick avatar Sep 13 '24 20:09 Felsblick

err == nil heißt, dass kein Fehler beim Abfragen des Registers erfolgt. err != nil ist das Gegenteil zu ersterem. Der Wert an sich wird nicht ausgewertet.

madmat17 avatar Sep 13 '24 20:09 madmat17

So sagt es mir ChatGPT auch. Aber ist es korrekt? Ist err nicht einfach nur eine variable die mit dem Inhalt des Registers gefüllt wird, wenn es gelesen werden kann?

Felsblick avatar Sep 13 '24 20:09 Felsblick

Ein PR wäre Klasse! Die unterschiedlichen Versionen lassen sich auch explizit durch unterschiedliche Templatetypen in einer Datei auseinander halten wenn es nicht per Autoerkennung erfolgen kann. Dann sollte die "alte" Version auch den alten Typennamen behalten.

man kann jetzt natürlich noch ewig weiter mit der Autoerkennung experimentieren, oder wie @andig vorgeschlagen hat auf die manuelle Unterscheidung gehen. Schließlich weiß der Besitzer ja, welche Version der Box er hat (basic oder smart). In den Docs sind sowieso schon beide Boxen getrennt aufgeführt... Ich wäre stark dafür. Denn dann werden die Probleme der basic nicht automatisch zu den Problemen der smart und umgekehrt...

Felsblick avatar Sep 13 '24 21:09 Felsblick

Der Unterschied ist eigentlich nicht Basic/Smart, sondern RTU vs. TCP. Mir persönlich ist es gleich, wie meine Wallbox erkannt wird - solange sie erkannt wird. 😉

Die Probleme mit den Unterschiedlichen Varianten lassen mich aber einen anderen Fehler im Code vermuten. In den älteren delta.go Versionen wurde das Register 1001 gar nicht abgerufen. Aber aus irgendeinem Grund kann die Basic aufgrund der RTU-Connection mit dem StatusB nichts anfangen, bzw. meldet das Register 1000 (oder die Routine dazu) nicht den Wert 3 nach dem Anschluss des Fahrzeugs - so meine Vermutung.

madmat17 avatar Sep 13 '24 21:09 madmat17