Skip to content

Ensure dynamic mode is paused during EVCC controlled charging.#28365

Open
grobihh wants to merge 4 commits intoevcc-io:masterfrom
grobihh:master
Open

Ensure dynamic mode is paused during EVCC controlled charging.#28365
grobihh wants to merge 4 commits intoevcc-io:masterfrom
grobihh:master

Conversation

@grobihh
Copy link

@grobihh grobihh commented Mar 19, 2026

This should fix the charger power control discussed in #28169 (reply in thread)

I did already tested that and it looks fine.

That allows EVCC to control the charging power.
@andig
Copy link
Member

andig commented Mar 19, 2026

Can you explain what dynamic mode is? Should we ask the user to disable it upfront?

@andig andig marked this pull request as ready for review March 19, 2026 20:57
@andig andig added the devices Specific device support label Mar 19, 2026
Copy link
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@grobihh
Copy link
Author

grobihh commented Mar 19, 2026

I did not find much about it.
https://v2charge.com/support/power-control/dynamic/

In #28169 I tried to explain my observations.
It seems in Dynamic Mode the V2C charger manages the charging power by itself. It does not accept values for the charging power via the HTTP API.
V2C then selects the amps until the total power limit set for the house. Or it can select the charging power to consume all the available PV power. That is depending on 'DynamicPowerMode'.

To me it seems the parameter 'Dynamic' can switch that behaviour on (1) or off (0).
When switched on the charger does not accept values for the charging power via the HTTP API.
Unfortunately, when 'Dynamic' is disabled the charger does not return the power readings any more.

But then there is the parameter 'PauseDynamic' (0=unpaused, 1=paused).
That seems to pause the dynamic mode without fully disabling it.
With that set to 'paused' the V2C charger accepts the ampere commands via the HTTP API and it still reports all known power values (charger, house, PV, BAT).

I opened this as a draft because I wanted to do a little bit more testing.
Writing this explanation I recognize that I have to invert the 'pause' value for 'PauseDynamic' in the code.
I will update the PR.

I will provide my test results to confirm the explained logic.

@andig
Copy link
Member

andig commented Mar 20, 2026

Unfortunately, when 'Dynamic' is disabled the charger does not return the power readings any more.

Wow, that's as stupid as they come... This does mean, that dynamic mode must be enabled, yet we need to pause it and should so do immedieately and once and for all. There can only be a single controller- and that should be evcc.

Added a condition to only change 'pauseDynamic' if 'Dynamic' mode is enabled.
Users may want to use the V2C application as backup to EVCC.
@grobihh
Copy link
Author

grobihh commented Mar 20, 2026

I think I got it now.

Start charging and set PauseDynamic.

[trydan] TRACE 2026/03/20 13:39:06 {"ID":"QZJA2G","FirmwareVersion":"2.4.2","ChargeState":1,"ReadyState":1,"ChargePower":0.00,"VoltageInstallation":222,"ChargeEnergy":0.00,"SlaveError":0,"ChargeTime":0,"HousePower":1698.75,"FVPower":704.81,"BatteryPower":0.00,"Paused":1,"Locked":1,"Timer":0,"Intensity":0,"Dynamic":1,"MinIntensity":6,"MaxIntensity":32,"PauseDynamic":0,"FirmwareVersion":"2.4.2","DynamicPowerMode":0,"ContractedPower":5000,"SSID":"WIFI","IP":"X.X.X.X","SignalStatus":2}
[trydan] TRACE 2026/03/20 13:39:06 GET http://V2C-Trydan/write/Intensity=6
[trydan] TRACE 2026/03/20 13:39:06 OK
[trydan] TRACE 2026/03/20 13:39:06 GET http://V2C-Trydan/write/Paused=0
[trydan] TRACE 2026/03/20 13:39:06 OK
[trydan] TRACE 2026/03/20 13:39:06 GET http://V2C-Trydan/write/Locked=0
[trydan] TRACE 2026/03/20 13:39:06 OK
[trydan] TRACE 2026/03/20 13:39:06 GET http://V2C-Trydan/write/PauseDynamic=1
[trydan] TRACE 2026/03/20 13:39:06 OK
[trydan] TRACE 2026/03/20 13:39:14 GET http://V2C-Trydan/RealTimeData
[lp-1  ] INFO 2026/03/20 13:40:22 start charging ->
[trydan] TRACE 2026/03/20 13:40:44 GET http://V2C-Trydan/RealTimeData
[trydan] TRACE 2026/03/20 13:40:46 {"ID":"QZJA2G","FirmwareVersion":"2.4.2","ChargeState":2,"ReadyState":0,"ChargePower":1324.93,"VoltageInstallation":222,"ChargeEnergy":0.01,"SlaveError":0,"ChargeTime":37,"HousePower":2618.38,"FVPower":511.32,"BatteryPower":0.00,"Paused":0,"Locked":0,"Timer":0,"Intensity":6,"Dynamic":1,"MinIntensity":6,"MaxIntensity":32,"PauseDynamic":1,"FirmwareVersion":"2.4.2","DynamicPowerMode":0,"ContractedPower":5000,"SSID":"WIFI","IP":"X.X.X.X","SignalStatus":2}
[trydan] TRACE 2026/03/20 13:40:48 GET http://V2C-Trydan/RealTimeData

EVCC changing charging power #1:

[trydan] TRACE 2026/03/20 13:41:07 GET http://V2C-Trydan/write/Intensity=21
{"ID":"QZJA2G","FirmwareVersion":"2.4.2","ChargeState":2,"ReadyState":0,"ChargePower":4662.00,"VoltageInstallation":222,"ChargeEnergy":0.03,"SlaveError":0,"ChargeTime":67,"HousePower":4662.00,"FVPower":723.94,"BatteryPower":0.00,"Paused":0,"Locked":0,"Timer":0,"Intensity":21,"Dynamic":1,"MinIntensity":6,"MaxIntensity":32,"PauseDynamic":1,"FirmwareVersion":"2.4.2","DynamicPowerMode":0,"ContractedPower":5000,"SSID":"GERECKE-IOT","IP":"10.10.10.208","SignalStatus":2}

#2

[trydan] TRACE 2026/03/20 13:41:18 GET http://V2C-Trydan/write/Intensity=22
{"ID":"QZJA2G","FirmwareVersion":"2.4.2","ChargeState":2,"ReadyState":0,"ChargePower":4884.00,"VoltageInstallation":222,"ChargeEnergy":0.07,"SlaveError":0,"ChargeTime":97,"HousePower":5942.31,"FVPower":727.62,"BatteryPower":0.00,"Paused":0,"Locked":0,"Timer":0,"Intensity":22,"Dynamic":1,"MinIntensity":6,"MaxIntensity":32,"PauseDynamic":1,"FirmwareVersion":"2.4.2","DynamicPowerMode":0,"ContractedPower":5000,"SSID":"WIFI","IP":"X.X.X.X","SignalStatus":2}

#3

[trydan] TRACE 2026/03/20 13:41:57 GET http://V2C-Trydan/write/Intensity=6
{"ID":"QZJA2G","FirmwareVersion":"2.4.2","ChargeState":2,"ReadyState":0,"ChargePower":1332.00,"VoltageInstallation":222,"ChargeEnergy":0.09,"SlaveError":0,"ChargeTime":127,"HousePower":2494.05,"FVPower":662.14,"BatteryPower":0.00,"Paused":0,"Locked":0,"Timer":0,"Intensity":6,"Dynamic":1,"MinIntensity":6,"MaxIntensity":32,"PauseDynamic":1,"FirmwareVersion":"2.4.2","DynamicPowerMode":0,"ContractedPower":5000,"SSID":"WIFI","IP":"X.X.X.X","SignalStatus":2}

Stop charging and reset PauseDynamic.

[trydan] TRACE 2026/03/20 13:42:37 GET http://V2C-Trydan/write/Paused=1
[trydan] TRACE 2026/03/20 13:42:37 OK
[trydan] TRACE 2026/03/20 13:42:37 GET http://V2C-Trydan/write/Locked=1
[trydan] TRACE 2026/03/20 13:42:38 OK
[trydan] TRACE 2026/03/20 13:42:39 GET http://V2C-Trydan/write/PauseDynamic=0
[trydan] TRACE 2026/03/20 13:42:40 OK
[trydan] TRACE 2026/03/20 13:42:44 GET http://V2C-Trydan/RealTimeData
[trydan] TRACE 2026/03/20 13:42:46 {"ID":"QZJA2G","FirmwareVersion":"2.4.2","ChargeState":1,"ReadyState":1,"ChargePower":0.00,"VoltageInstallation":222,"ChargeEnergy":0.00,"SlaveError":0,"ChargeTime":0,"HousePower":1410.35,"FVPower":762.19,"BatteryPower":0.00,"Paused":1,"Locked":1,"Timer":0,"Intensity":0,"Dynamic":1,"MinIntensity":6,"MaxIntensity":32,"PauseDynamic":0,"FirmwareVersion":"2.4.2","DynamicPowerMode":0,"ContractedPower":5000,"SSID":"WIFI","IP":"X.X.X.X","SignalStatus":2}
[lp-1  ] INFO 2026/03/20 13:42:55 stop charging <-

'PauseDynamic' will only be changed if 'Dynamic' (dynamic power control) is enabled.
I don't know if anybody would like to use the V2C APP or the V2C internal logic as a backup.
Better to return the system to the state it was before the charging session.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

devices Specific device support

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants