Skip to content

Charging with two wallboxes and priorities leads to on/off/on/off/on/off of both boxes #26227

@chris-e-codes

Description

@chris-e-codes

Describe the bug

Hey all,
i have this setup:
lp-1 -> Heatpump Prio 0
lp-2 -> Zaptec Go Prio 10
lp-3 -> Zaptec Go2 Prio 5

At PV Charging i'm currently seeing two issues:

  • Both boxes get in an on and off cycle each time the charging starts (more details below)
  • After the control of evcc the box lp-2 does not charge anymore until i change the loadmode policy at zaptec. (more details below)

on off cylces:
i have both cars connected and set to pv charging. If enough pv power is available, both cars start charging with 4.1kw. As i understood this is the right behaviour with priorities and one loadpoint should stop in the next cycle, right?
But both boxes stop on the next cycle. Then evcc sees "oh! enough power! lets start charging" and both boxes start again. In the next cycle both boxes stop again and then start again. etc etc. Thats strange...
but in the logs i dont see a stop command to the lp-2 box (46181390-a597-4272-9fc8-f38edd7bf1bb) only for the lower prio one.

This leads me to another observation. Evcc changes the installation settings with allows max currents. This is the load policy of my installation. A installation at zaptec is a charging current, where both boxes are set to. So this load policy is in control of both boxes. not only one.

Image Image Image

As the box lp-3 is allowed in the zaptec configuration as a 22kw box, it can get 32a. If this box is active, the lp-2 box is not allowed to get power.
See:

Image

This also happens, after the pv charging, on the next day lp-2 can not start a charge. Evcc says "waiting for charge to begin" and zaptec says "paused". If i change then the charging policy vom 32,0,0 to 16,16,16 the charging directly starts!

Image Image

So long stroy short:

  • should i move both boxes to two seperate installations in zaptec speech? (its delete the box etc...)
  • is the configuration of evcc on the loadpolicy of zaptec a problem or needed at all?

any better suggestions? :D

Steps to reproduce

  1. Connect both cars
  2. Start PV Charging

...

Configuration details

charger
---
db:7 {Type:template Title: Icon: Product:Zaptec Go, Pro} map[id:46181390-a597-4272-9fc8-f38edd7bf1bb password:***** template:zaptec user:*****]
db:10 {Type:template Title: Icon: Product:Zaptec Go (OCPP)} map[connector:1 connecttimeout:5m meterinterval:10s stationid:ZAP111522 template:ocpp-zaptec]
db:11 {Type:template Title: Icon: Product:Zaptec Go (OCPP)} map[connector:1 connecttimeout:5m meterinterval:10s stationid:ZAP111522 template:ocpp-zaptec]
db:12 {Type:template Title: Icon: Product:Zaptec Go (OCPP)} map[connector:1 connecttimeout:5m meterinterval:10s stationid:ZAP111522 template:ocpp-zaptec]
db:13 {Type:template Title: Icon: Product:Zaptec Go (OCPP)} map[connector:1 connecttimeout:5m meterinterval:10s stationid:ZAP111522 template:ocpp-zaptec]
db:14 {Type:template Title: Icon: Product:Zaptec Go (OCPP)} map[connector:1 connecttimeout:5m meterinterval:10s stationid:ZAP111522 template:ocpp-zaptec]
db:15 {Type:template Title: Icon: Product:Zaptec Go (OCPP)} map[connector:1 connecttimeout:5m meterinterval:10s stationid:ZAP111522 template:ocpp-zaptec]
db:16 {Type:template Title: Icon: Product:Zaptec Go 2} map[id:c23d41db-a4e7-455b-9fd0-3dd2947c20e4 password:***** template:zaptec user:*****]

[db    ] TRACE 2025/12/27 16:01:20 SELECT * FROM `configs` WHERE `configs`.`class` = 2 2 <nil>
meter
---
db:4 {Type:template Title:PV Icon: Product:Sungrow SH Series Hybrid Inverter} map[baudrate:9600 capacity:9.6 host:192.168.2.212 maxacpower: modbus:tcpip template:sungrow-hybrid usage:pv]
db:5 {Type:template Title:PV Batterie Icon: Product:Sungrow SH Series Hybrid Inverter} map[baudrate:9600 capacity:9.6 host:192.168.2.212 maxacpower: modbus:tcpip template:sungrow-hybrid usage:battery]

[db    ] TRACE 2025/12/27 16:01:20 SELECT * FROM `configs` WHERE `configs`.`class` = 3 3 <nil>
vehicle
---
db:1 {Type:template Title: Icon: Product:Hyundai Bluelink} map[cache:15m capacity:63 icon:car identifiers:[nfc-07B6623E] language:de mode:pv password:***** template:hyundai title:IONIQ 5 user:*****]
db:6 {Type:template Title: Icon: Product:Generisches Fahrzeug} map[icon:car identifiers:[nfc-17FC6A3E] minCurrent:6 mode:pv template:offline title:Tesla xxx]
db:9 {Type:template Title: Icon: Product:Volkswagen We Connect ID} map[cache:15m capacity:86 icon:car identifiers:[nfc-BB1910BE] maxCurrent:16 mode:pv password:***** phases: priority:5 template:vw timeout:10s title:ID7 user:***** vin:*****]

[db    ] TRACE 2025/12/27 16:01:20 SELECT * FROM `configs` WHERE `configs`.`class` = 4 0 <nil>
[db    ] TRACE 2025/12/27 16:01:20 SELECT * FROM `configs` WHERE `configs`.`class` = 5 2 <nil>
loadpoint
---
db:8 {Type: Title: Icon: Product:} map[charger:db:7 circuit:main defaultMode:pv limitSoc:0 meter: mode:pv phasesConfigured:3 planEnergy:0 planPrecondition:0 planTime:0001-01-01T00:00:00Z priority:10 soc:map[estimate:true poll:map[interval:3.6e+12 mode:charging]] thresholds:map[disable:map[delay:1.8e+11 threshold:0] enable:map[delay:6e+10 threshold:0]] title:WB Vorne vehicle:]
db:17 {Type: Title: Icon: Product:} map[charger:db:16 circuit:main defaultMode:pv maxCurrent:16 meter: mode:pv phasesConfigured:0 priority:3 soc:map[estimate:true poll:map[interval:3.6e+12 mode:charging]] thresholds:map[disable:map[delay:1.8e+11 threshold:0] enable:map[delay:6e+10 threshold:0]] title:Carport vehicle:]

[db    ] TRACE 2025/12/27 16:01:20 SELECT * FROM `configs` WHERE `configs`.`class` = 6 0 <nil>


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: evcc.local
  # port is the listening port for UI and api
  # evcc will listen on all available interfaces
  port: 7070

interval: 30s # control cycle interval

sponsortoken: XXX

telemetry: true
plant: XXX

# log settings
log: trace

meters:
  - name: grid
    type: template
    template: sungrow-hybrid
    usage: grid
    modbus: tcpip
    id: 1
    host: XXX
    port: 502
    timeout: 15s



  - name: wp_pwr

    type: custom
    power:
      source: mqtt
      topic: WP-Meter/status/em:0
      jq: if .total_act_power < 100 then 0 else .total_act_power end

chargers:

  - name: WP_SG
    type: custom
    features:
      - integrateddevice
      - heating
    icon: waterheater
    status:
       source: mqtt
       topic: "Viss/Status"

       jq: if .output == true then "C" else "B" end

    enabled:

      source: mqtt
      topic: "Viss/Status"

      jq: .output
    enable:
      source: mqtt

      topic: Viss/enable
      payload: ${enable:%d}
    maxcurrent:
      source: mqtt
      topic: Viss/current
    soc:
      source: mqtt
      topic: Viss/Wasser_temp

vehicles:

  - name: WP
    type: custom
    title: Wärmepumpe
    icon: waterheater
    phases: 3
    soc:
      source: mqtt
      topic: Viss/Wasser_temp

site:
  title: xxx # display name for UI
  meters:
    grid: grid # grid meter
    pv:
#      - my_pv # list of pv inverters/ meters
    battery:
#      - my_battery # list of battery meters
#    aux:
#      - aux # list of auxiliary meters for adjusting grid operating point
  residualPower: 150 # additional household usage margin
# 
loadpoints:

  - title: Warmwasser
    charger: WP_SG
    meter: wp_pwr
    vehicle: WP
    circuit: main
    minCurrent: 7
    priority: 0
    enable:
      threshold: 0
      delay: 5m
    disable:
      threshold: 0
      delay: 10m
    soc:
      estimate: false
      poll:
        mode: always
        interval: 1m



# 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.2417 # EUR/kWh

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

 
  co2:

  solar:
    type: template
    template: forecast-solar
    lat: 50.1031658
    lon: 9.1015744
    dec: 30
    az: 0
    kwp: 9.6

# mqtt message broker
mqtt:
  broker: 192.168.2.168:1883
  topic:  # root topic for publishing, set empty to disable
  user: xxx
  password: xxx

# influx database
influx:
 url: http://192.168.2.168:8086
 database: evcc
 token: xxx
 org: xxx
# eebus credentials
eebus:

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:

Log details

will be attached as comment, as this form only allows 65k characters in sum :(

What type of operating system or environment does evcc run on?

Docker container

External automation

  • I have made sure that no external automation like HomeAssistant or Node-RED is active or accessing any of the mentioned devices when this issue occurs.

Nightly build

  • I have verified that the issue is reproducible with the latest nightly build

Version

v0.211.1 nightly

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionRather clarification than issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions