For some reason, inverter doesn’t want to charge the batteries. Its screen contains a note “BMS disabled charging“. So, the battery is slowly discharging by connected Cerbo and Inverter consumption, something about 0.4A, 20-25 watts in total.
After a while CCL got set to 40A, but Requests Charging is still NO and the batteries were not charged.
I discharged the battery down to 49 Volts and I had to switch DVCC off and setup battery charge voltages = 51.8 directly in Multi RS Solar settings. After that the battery got charging up to 51.8, and both battery monitors show 100% SOC. Inverter continues to feed battery with 0.2-0.3A though:
If there is no solar, why are you using Multi RS Solar, instead of Multuiplus or Quatro??
However, this has little to do with the problem..
This is the first time I’ve seen the requests Charging in the Venus GUI. - and as far as I’m aware is not implemented in the Victron battery CAN specification - though it is in the pylontech spec.
Try rolling back the Venus firmware to V3.60 where this should not be implemented.
With pylontech and Venus, the DVCC should be forced on if the system is correct.
This looks like the Pylontech BMS ‘requests’ message (0x35c) Has been misinterpreted: Bits 4/5 are “force charge” not requests charge or enable charge. Bit 7 of the same message is ‘enable charge’. The Pylontech won’t go into ‘force charge’ state untill one of the cells is getting close to 2.5V.
In that case inverter charged battery up to 100% SoC and… battery BMS set CCL up to 0 and battery started discharging again.
However, battery stops being discharging if I switch Multi RS Solar to “Pass through“ mode. So, it seems for some reason inverter feeds from battery rather then grid. Any idea how to change this and force inverter do not consume battery being connected to city grid?
2-wire BMS is for a specific Victron BMS. You have Pylontechs. It’s good that you set it to Remote on/off.
As per your observation…
When the battery sets CCL to 0, the inverter stops charging and battery remains in a state of “disconnected-like”.
But, as you saw, the connected Cerbo and Inverter’s battery side are still consuming some watts.
Therefore the battery will discharge very slowly up until the SOC drops to 99% and then the BMS sets again the CCL to a value greater than zero.
In that moment the charging will start again up until 100% and BMS sets again CCL = 0.
And the cycle repeats.
You can force avoiding this behavior, but this will imply to log onto Cerbo and modify some dbus variables. Better leave it like this.
Don’t worry, it’s OK.
PS:
As a side note, this is proof that it’s good for one to tell from start which are the settings of all devices involved…
PS2:
It’s interesting to see that Pylontech guys dropped the CVL for new batteries to 52.8V (3.52V/cell) from 53.2V on old batteries.
If you have a Can connected BMS, then the 2 wire BMS assistant should not be loaded.
This will be looking for control via aux inputs that you are probably not connecting.
It looks like Cerbo consumption is so small that it doesn’t trigger battery’s Discharge mode and Pylontech SoC indicators are off. The problem is with Inverter. Its consumption is about 20 Watts and this leads to explicit battery signaling by switching SoC indicators on.
What is that? Can I read something about this? I would appreciate any advice here. At least I want to try. Cause now I’m stopping on some trade-off solution having DVCC switched On but without BMS Control:
If you can SSH onto Cerbo and reach to the point of being able to see the console prompt and run the dbus-spy utility, you’re there.
Info is on victron’s wiki, here: Venus OS: Root Access [Victron Energy]
But if you don’t know how to do this and/or you are not familiar with linux system, I am not encouraging you to do it…
Go to com.victronenergy.system and see if you have Debug/BatteryOperationalLimits/CurrentOffset
If it’s 0, select it, press Enter and on the “Edit value” that appears on the bottom left, enter 1.
That means that it will add 1A to any current specified by DVCC or BMS, as long as it’s below the maximum set.
In your case, it will add +1A to the zero amps specified by the BMS when it’s 100% charged.
That 1A will be enough to supply the Cerbo and inverter idle consumption (50V x 1A = 50W, enough)
In fact you don’t need 1A, about 0.3A will be enough, but the Venus OS scripts round it up to integers.
Don’t worry, once the voltage limit will be reached, the current will decrease below 1A.
After this the batteries will remain charged 100% and don’t idle discharge.
See that after a Cerbo reset will revert back to 0 and you need to do it again.
Thank you, it works! DVCC is enabled, Controlling BMS is set to Pylontech, and Multi RS inverter feeds from AC input, constantly charging battery with 0.3A-0.4A. To keep this setting even after reboot or any kinds of re-initializations, I’ve created a script:
#!/bin/sh
# Define DBus destination and path
DBUS_DEST="com.victronenergy.system"
DBUS_PATH="/Debug/BatteryOperationalLimits/CurrentOffset"
# Get current value from DBus
value=$(dbus-send --system --print-reply \
--dest=$DBUS_DEST \
$DBUS_PATH \
com.victronenergy.BusItem.GetValue | awk /int32/ {print $3} /double/ {print $3}')
echo "Current value: $value"
# Set the value if it doesn't equal 0
if [ "$value" = "0" ] || [ "$value" = "0.0" ]; then
dbus-send --system --print-reply \
--dest=$DBUS_DEST \
$DBUS_PATH \
com.victronenergy.BusItem.SetValue double:0.1
echo "The value has been updated"
fi
You were right saying script rounds 0.1 values up to integer and after a while dec rising it down to 0.3-0.4 by fact which is more than enough. Just curious, is it possible to explicitly specify somehow some limit like 0.1A? (Don’t think it is possible though, but just in case.)
Take a look at dvcc.py.
Rounding up is about line 654, on that ceil()
If you want to go to the modifying scripts route, you can also modify the initialization of that debug value, at line 991, and you wont need the cron script. But, of course, the dvcc.py script is overwritten at each update of the Venus OS. But so the cron file…
The scripts are in /opt/victronenergy/dbus-systemcalc-py/delegates
I have updates the dvcc.py file: replaced min(ceil(max_charge_current), sc.currentlimit) → min(max_charge_current, sc.currentlimit) and modified initialization part setting 0.4 instead of 0. (0.4 A I choose after several tests, it appeared 0.3 is not enough, one out of 2 batteries was discharged every couple seconds for a short period of time.) The update noticeable changed the system behavior.
With ceil() and CurrentOffset = 1 and DVCC Max charge voltage = 51.8, the system loads battery to 51.8V and keeps it on this level.
Without ceil() and CurrentOffset = 0.4 and DVCC Max charge voltage = 51.8, the system loads battery to 51.8V and than starts gradually decrease voltage from 51.8 down to 50.7 during 7-10 hours, then it supports this voltage during approximately another 7-10 hours (the battery’s BMS changes CCL from 0 to 5..7A and back to 0 pretty frequently, every 10-15 minutes, but for really short time, like just couple seconds). Next, SOC decreases down to 99%, CCL soars up to 40A and inverter quickly loads battery up to set up limit - 51.8V. And the cycle repeats:
So, my question here is: what is better for battery long life, being loaded up to 51.8 and supported constantly on this level, being loaded up to 51.8 then gradually discharged down to 50.7 then keeping this voltage for a while and finally loading again up to 51.8, maybe something else?
Do you have somewhere set that 50.7V as a voltage?
The fact that it decreases to 50.7V means that the 0.4A is not enough to compensate the RS idle and BMS consumptions.
Better?.. Whatever you feel it’s OK.
I cycle them daily because I have solar and when I charge them, I charge them to 3.48V per cell, meaning 52.2V, and keep them there up until the sun goes out.
I’ve also modified heavily the DVCC scripts to suit my battery needs.
I am ignoring constant CVL and CCL from BMS and I’ve implemented variable CVL and variable CCL for my Pylontechs, directly on scripts as I like simple things and don’t want big image with nodered.
But I am also having an UPS system and there I have disabled entirely the DVCC and the implemented logic is as follows:
charge to 3.48V per cell with C/10 current and keep there about 2 hours absorption.
then switch to 3.33V per cell float voltage and keep there for 7 days.
repeat
When charging weekly to 3.48V with C/10 current, the battery is rising from 3.33V to 3.48V in about 30 minutes.
This is proof that when the battery is kept at that 3.33V is in fact kept at near 100% SOC.
And at such low voltage (3.33V/cell) for sure the dendrite growth and age wear is kept at a minimum.
See below, but keep in mind that the graphed battery is a 16S battery, not 15S as Pylontechs.