Erratic behaviour when battery full on ESS system

Hi. I have an ESS system set up as zero-feed, initialised a year and a half ago and has been running with no issues, except from the fact that there is not enough solar during winter. The system comprised of a Multiplus-II 5kVA, a SmartSolar 150/45, a Cerbo GX and a 10kWh battery with can-connected BMS. The battery is not on any “supported” Victron list, but its BMS seems to be working as a Pylontec clone (battery updates CCL as expected when near full, but there are no forced options under DVCC).

In order to deal with the winter situation mentioned above, recently two additional MPPTs were added on the installation. Since then, I find it that when the battery is full and there is a constant load on the Multiplus, the MPPTs seem to cycle on and off, unable to match the AC load, hence the battery is constantly charging/discharging at 20-30Α currents. I find this non-optimal, since it’s stressing the whole system, and especially the battery. Please have a look at the screenshot, which depicts all 3 MPPTs at the same time period, when AC current draw was CONSTANT at around 3kW.

I was suspecting that the BMS was turning off charging due to a cell climbing too high, which would stop charging, and then the MPPTs would ramp up and so on, so I lowered the maximum charge voltage all the way down to 54.5V, but this behaviour still stands.

Wouldn’t it be a good idea to add a function so as when the battery is full (or near full) the system would try to mach the output demand and the MPPTs would ramp up slower than their normal speed?

Set your float voltage to absorb minus 1v

This way your panels start taking op the load much earlier.

Lithium batteries do not have a documented “absorption voltage” per se. Once bulk is complete, thy are already 98% full. Also, they do need to stay at their “bulk voltage” for a while, so as the BMS balancer will have enough time to balance the cells. That said, if I set the voltage too low, the battery will never balance, which will eventually un-balance it even more.

No, you leave the absorption voltage where it is, you’re just going up with the float voltage.

An ESS system controlled by the battery’s BMS does NOT take into account MPPT settings. They work in “external control”. There is NO absorption voltage to set, the BMS sets a max charge voltage, which you can lower through DVCC settings. The BMS controls the GX device, which in turn controls everything else.

Nobody will kill you if you optimize the system by cutting the mppt’s from ess.

Sometimes the good ideas are not good enough.

My battery has a 120A maximum charge rate. When the MPPTs are controlled by the ESS, they regulate their output so as they will never charge the battery at over 120A. However, if there is enough demand inverter-side, they successfully ramp up and produce additional current that goes directly to the inverter through the DC bus.

Disconnecting the MPPTs from the ESS system would lead to charging overcurrent (my MPPTs combined have a maximum charging capacity of 190A, while the battery has a 120A limit) which would trigger the BMS into disconnecting the battery. That would by bad for the whole system.

I hope that a large part of those 190a go directly into your house or the grid, so the batteries would never reach their limit.

In total what you describe here is like a 1000hp car on 165-15 tires.

That’s why I have the system set up as a zero-feed ESS one. As per Victron themselves, setting up a system as ESS offers the option to use a much smaller battery than otherwise needed. Seems like you don’t have extensive knowledge on how an ESS system works, and the way the battery BMS and the GX device is controlling all aspects of the system.

No, i have absolutely NO idea, and you’re telling me it doesn’t work.

So we’re both on the same level, with one large difference…YOU have the problems, i have several solutions

OK then. So, if you have no knowledge of how exactly an ESS system works, and what can or cannot be adjusted, please refrain from further commentary, since your “several solutions” do not apply on an ESS system.

Oh sure, some of my solutions are totally independent of the system you are using.

Hi. I have found a solution to the unwanted behaviour that can be implemented through a nodeRED flow, however I find myself unable to understand how exactly to translate what’s in my mind onto a flow.

That said, the way to fix the erratic behaviour issue is the following:

  • Once the battery SoC hits 100%, set the maximum charge current through DVCC to some super-low value, like -say- 5A.
  • Once the battery SoC falls under 95%, set the maximum charge current through DVCC to its previous setting, which is 100A on my case.

I have manually tested the above scenario and the system works like a charm, no more start-stop on the charge controllers.

However, I am finding it hard to translate the above procedure in a nodeRED flow, I would appreciate anyone who could chime into this matter with a nodeRED flow example. I have found the battery SoC node, plugging it’s output the a switch node using the above two cases and then stuck to how to control the battery charging using the ESS node (I haven’t found a DVCC node).

Any help would be appreciated.

I finally managed to create a node-red flow that limits battery charging to 5A when the battery is full and reverts the limit back to 100A when the battery drops below 97%. The whole system runs much more relaxed now when the battery is full, battery temperature dropped by 10 degrees and the charge controllers stopped cycling on/off.

Here’s the flow:

[
    {
        "id": "dad2cac4316fea85",
        "type": "tab",
        "label": "Stop Charging when Full",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "2dddeb6d4e1704e3",
        "type": "victron-input-battery",
        "z": "dad2cac4316fea85",
        "service": "com.victronenergy.battery/512",
        "path": "/Soc",
        "serviceObj": {
            "service": "com.victronenergy.battery/512",
            "name": "V-TAC 10kWh"
        },
        "pathObj": {
            "path": "/Soc",
            "type": "float",
            "name": "State of charge (%)"
        },
        "name": "Battery SoC",
        "onlyChanges": true,
        "roundValues": "no",
        "x": 110,
        "y": 160,
        "wires": [
            [
                "3ee068b437e69aa6"
            ]
        ]
    },
    {
        "id": "3ee068b437e69aa6",
        "type": "switch",
        "z": "dad2cac4316fea85",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "100",
                "vt": "num"
            },
            {
                "t": "lt",
                "v": "97",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 290,
        "y": 160,
        "wires": [
            [
                "12cf15a6255ab895"
            ],
            [
                "4ac5be22a7c8ad5b"
            ]
        ]
    },
    {
        "id": "12cf15a6255ab895",
        "type": "function",
        "z": "dad2cac4316fea85",
        "name": "100%: set Charge Current to 5A",
        "func": "msg.payload = (5)\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 510,
        "y": 120,
        "wires": [
            [
                "6e1e81b6f61808e9"
            ]
        ]
    },
    {
        "id": "6e1e81b6f61808e9",
        "type": "victron-output-settings",
        "z": "dad2cac4316fea85",
        "service": "com.victronenergy.settings",
        "path": "/Settings/SystemSetup/MaxChargeCurrent",
        "serviceObj": {
            "service": "com.victronenergy.settings",
            "name": "Venus settings"
        },
        "pathObj": {
            "path": "/Settings/SystemSetup/MaxChargeCurrent",
            "type": "float",
            "name": "DVCC system max charge current (A DC)",
            "writable": true
        },
        "name": "set DVCC Charge Current",
        "onlyChanges": true,
        "x": 810,
        "y": 160,
        "wires": []
    },
    {
        "id": "4ac5be22a7c8ad5b",
        "type": "function",
        "z": "dad2cac4316fea85",
        "name": "<97%: set Charge Current to 100A",
        "func": "msg.payload = (100)\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 520,
        "y": 180,
        "wires": [
            [
                "6e1e81b6f61808e9"
            ]
        ]
    }
]