EV Charger in Auto always starts with low excess solar

Since 3 weeks, I am using the EVCS in Auto mode. Before that a few months in manual mode (because my firmware was still behind). Now running firmware v1.30. My setup was installed by a professional: victron inverter, 3 phase, fronius, victron mppt, cerbo, off grid, portal ID c0619ab39ee1.

The user manual gives a clear definition of “excess solar power” and when the EVCS should kick in in Auto mode. In the 3 phase situation, excess should at least be 3x 6A (around 4.2 kW). I understand that with v1.29, a new feature “Allow low excess solar power for auto mode:” was introduced. Initially this was set to “enabled”, but last week I set it to “disabled”. The problem is that it is still starting to charge in low excess situations. For instance, this morning with grey sky it started charging when the excess was around 1.2 - 1.5 kW:

The problem is that e.g. in the morning, it starts too early, thereby charging from the house batteries. I quite like the original 3x 6A setting for my setup, but I can’t get the EVCS to get back to this. What do I do wrong …? Thank you

EVCS doesn’t know the exact amount of the excess solar power. The only way is to start charging and check what is happening. If there is not enough excess solar power - EVCS will stop charging according to settings.

In your case increasing ‘Start charging at backup battery SoC’ can help you and EVCS will start charging not so early in the morning.

Also, you can restore EVCS settings to default by the “Reset to factory defaults” button on Settings->Backup & FW web page. But remember that EVCS will go to Access point mode and you have to make a ‘First setup’ again.

Thank you. But I am afraid that does not answer my question. This is what the manual states:

That is a reasonably clear definition to me. In case of 3 phase, this is 3x 1.38 = 4,14 kW. This is indeed the minimum value at which my EVCS charges. So, one would expect the EVCS to start charging at an excess of > 4 kW when the “Min. charge current” is set to 6A. However, my EVCS starts charging at around 1 kW. My question is: why is this happening? And, what can I do about it?

PS: This way the EVCS gets into undesired loops. Because it starts at 1 kW of PV, after 10 min (my setting to protect house batteries) of discharging the house batteries (at a rate of -3 kW) the EVCS stops charging the EV. However, it will then directly start again (because there is 1 kW of PV available), discharging house batteries again … etc. This happens at every low PV moment. For instance, at the end of the day, I observe 3 to 4 of these cycles of charging/stopping.

Sorry, I forgot to add. I actually like the option that EV charging is allowed from the battery/grid. It provides a nice continuance for when some clouds are moving in and out and for when the rest of AC load is going up and down. Both scenarios are very realistic throughout the day so I would like to keep using this. As such, it would be very helpful if the excess solar condition would at least equal the amount of minimum charging that one can configure. Reading the manual (and having run an earlier version of the firmware) I also believe that this is how the product is meant to behave.

Hi, I just ran into the same problem today, firmware version 2.1

My car has a 3-phase charger, but the EVCS starts charging when there is an excess solar of 1380W (230V x 6A). The car starts charging, EVCS detects that the car uses 4 kW of power, stops charging… etc. until the car refuses to charge, because it considers the charging station faulty.

This is a bug in EVCS software, obviously.

It’s not a bug, it can’t know if the car can charge single or 3P.
Solutions:

  • you can allow it to use the difference from the battery or gird
  • there are some extra settings that can be configured over modbus TCP, one of them, is the excess power needed so the EVCS stars
1 Like

The charger doesn’t know it the fist time, I agree. But in the second cycle, it already knows it!
The charger can remember if the car supports 3-phase charging, and this value can be reset every time the car physically disconnects.
Or there could be a toggle in UI (1phase/3phase), the same way as minimal the charging current setting.

I have a single car, a single EVCS: everyday the situation is the same.

yes, it knows, but is doing that for a different reason - It is probing the maximum available PV power. I don’t know your system, just giving you an example:
Offgrid system, the backup battery is full or almost full, the PV production is reduced. The EVCS can’t know if that is the maximum power available or a reduced one. The only solution is to test it.
Same if you are grid connected but without feeding back .

1 Like

The home battery SoC was 60%, BMS requested 220A charge at that moment, but MPPTs produced 1600W at that moment, because of clouds. Far below the BMS limit.

There is not a single reason for “probing” in that situation. Cerbo knows everything it needs.

Cerbo is not controlling the auto mode (yet)
EVCS algorithm is made not only for one type of system like yours, it can work with lead acid batteries, without Cerbo etc.
But again, you have solutions to fine-tune it, I told you above

That’s a bummer!

I think the best solution now is to re-implement the charging algorithm in node-red on my own.
But it’s a little bit sad, considering the money I paid for the EVCS, I expected flawless charging and communication between EVCS and Cerbo.

I hope the software gets better overtime.

Thanks Lucian

You have to modify just one value, the minimum charging power to start, and the device allows you to do it. And that’s a huge advantage compared with other products that are complete closed, some of them more expensive.
Even the fact that you can control it over nod-red should be considered an advantage.
Your answer about how much you paid for it is not fair, especially when you can receive answers from someone from inside the company at almost 11PM. Answers that tell you how the algorithm is working, answers that contain solutions, and so on.

3 Likes

Lucian, I do appreciate your replies, and I also appreciate the possibility to use Node-RED , I like the open community etc.

I just dislike the situation when, by default in Auto mode, 3-phase car is forced to infinite power cycles, which result in complete charging failure. Some cars just disconnect forever and refuse to charge again.
In my case, I tested Skoda Enyaq and VW ID3. These cars are strict when the charging stops in an unexpected way, and the only option to start charging again is to manually disconnect the cable and reconnect it again. Which can be very frustrating.

I admit, I’m a little bit biased because of my problems with EVCS from the very start (missing internal CP cable connection from factory). But I’m trying to make it work :slight_smile:

When I look at the modbus registers available, it seems that EVCS does detect the number of phases of the car internal charger:

5109 “Detected car phases”

Screenshot 2025-02-18 at 11.49.05

So the EVCS should know that my car uses 3-phase charging, but it doesn’t use it properly for the charging start threshold in the second cycle and following cycles. Maybe it’s for the reason you mentioned, that Cerbo is not managing the charging and EVCS needs always to try to put some load on the system to see if MPPTs generate some extra power because of the additional load.

When I need to adjust the startup threshold (excess solar threshold), I guess the modbus param is 5083?

" ‘Battery powered’. Available sun power threshold for start"

Thank you, Vojtech

Yes, I told you it detects the number of phases and that’s not your issue
And yes, that’s that parameter you’ll have to modify

1 Like

I adjusted the register 5083 value to “3000”, and it works.

Node RED code for anyone who will run into the same issue:

[
    {
        "id": "9606d5f00ffec92c",
        "type": "modbus-read",
        "z": "92a4ac0b7f31d055",
        "name": "evcs_val",
        "topic": "",
        "showStatusActivities": true,
        "logIOActivities": false,
        "showErrors": true,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "5083",
        "quantity": "1",
        "rate": "10",
        "rateUnit": "s",
        "delayOnStart": false,
        "startDelayTime": "",
        "server": "c33f869fcc86e517",
        "useIOFile": false,
        "ioFile": "",
        "useIOForPayload": false,
        "emptyMsgOnFail": false,
        "x": 100,
        "y": 800,
        "wires": [
            [
                "49f4af7b3b3e5599"
            ],
            []
        ]
    },
    {
        "id": "d03f50e988adbf49",
        "type": "debug",
        "z": "92a4ac0b7f31d055",
        "name": "debug 17",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 420,
        "y": 780,
        "wires": []
    },
    {
        "id": "ac7beb45b468f782",
        "type": "modbus-write",
        "z": "92a4ac0b7f31d055",
        "name": "evcs_set_register",
        "showStatusActivities": true,
        "showErrors": true,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "5083",
        "quantity": "1",
        "server": "c33f869fcc86e517",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "delayOnStart": false,
        "startDelayTime": "",
        "x": 450,
        "y": 880,
        "wires": [
            [
                "af3761cc8e9647a5"
            ],
            [
                "a97b1dc6737e0025"
            ]
        ]
    },
    {
        "id": "49f4af7b3b3e5599",
        "type": "switch",
        "z": "92a4ac0b7f31d055",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "3000",
                "vt": "num"
            },
            {
                "t": "else"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 230,
        "y": 800,
        "wires": [
            [
                "d03f50e988adbf49"
            ],
            [
                "cf0596ea5871f45a",
                "c5b0b2154c7178ee"
            ]
        ]
    },
    {
        "id": "cf0596ea5871f45a",
        "type": "change",
        "z": "92a4ac0b7f31d055",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "3000",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 260,
        "y": 880,
        "wires": [
            [
                "ac7beb45b468f782"
            ]
        ]
    },
    {
        "id": "af3761cc8e9647a5",
        "type": "debug",
        "z": "92a4ac0b7f31d055",
        "name": "debug 20",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 660,
        "y": 860,
        "wires": []
    },
    {
        "id": "a97b1dc6737e0025",
        "type": "debug",
        "z": "92a4ac0b7f31d055",
        "name": "debug 21",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 660,
        "y": 900,
        "wires": []
    },
    {
        "id": "c5b0b2154c7178ee",
        "type": "debug",
        "z": "92a4ac0b7f31d055",
        "name": "debug 22",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 420,
        "y": 820,
        "wires": []
    },
    {
        "id": "9cff7c7910a9845b",
        "type": "comment",
        "z": "92a4ac0b7f31d055",
        "name": "EVCS: set the minimum excess solar power to start in auto mode. The default value is 100 (register 5083)",
        "info": "",
        "x": 380,
        "y": 740,
        "wires": []
    },
    {
        "id": "c33f869fcc86e517",
        "type": "modbus-client",
        "name": "evcs",
        "clienttype": "tcp",
        "bufferCommands": true,
        "stateLogEnabled": true,
        "queueLogEnabled": false,
        "failureLogEnabled": true,
        "tcpHost": "192.168.0.10",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "serialAsciiResponseStartDelimiter": "0x3A",
        "unit_id": "1",
        "commandDelay": "1",
        "clientTimeout": "1000",
        "reconnectOnTimeout": true,
        "reconnectTimeout": "2000",
        "parallelUnitIdsAllowed": true,
        "showErrors": true,
        "showWarnings": true,
        "showLogs": true
    }
]
1 Like