Hi developers,

Below information and behaviors collected during time and also posted a couple of topics on the forum.

In dvcc.py, you have for the Pylontech batteries, the following function defined:

def _pylontech_quirk(dvcc, bms, charge_voltage, charge_current, feedback_allowed):if charge_voltage > 55: # 48V battery (16 cells.) Assume BMS knows what it's doing. return (charge_voltage, charge_current, feedback_allowed, False) if charge_voltage > 30: # 48V battery (15 cells) return (min(charge_voltage, 52.4), charge_current, feedback_allowed, False) if charge_voltage > 20:# 24V battery (8 cells). 24V batteries send CCL=0 when they are full, # whereas the 48V batteries reduce CCL by 50% when the battery is full.# Do the same for 24V batteries. The normal limit is C/2, so put the # limit to C/4. Note that this is just a nicety, the important part is # to clip the charge voltage to 27.8 volts. That fixes the sawtooth # issue. capacity = bms.capacity or 55 return (min(charge_voltage, 27.8), max(charge_current, round(capacity/4.0)), feedback_allowed, False)

Of interest is the comments in bold above, for the 24V battery.

Only that all current Pylontech firmwares, not only the ones for 24V batteries, specify a CCL=0 when fully charged.

I am trying to suggest that also for the 48V batteries, the ones with 15 cells, to apply the same correction, in order to correct the SoC sawtooth behavior (99%-100%) and #29 Overcharge error.

if charge_voltage > 30: # 48V battery (15 cells)capacity = bms.capacity or 55return (min(charge_voltage, 52.4),max(charge_current, round(capacity/10.0)), feedback_allowed, False)

I've implemented in my system the above modification and for the past months all is OK. Both above specified behaviours have been corrected.

Also other users on the community have implemented it and all is OK.

Easier for the users, instead of modifying the above script is to modify the following DBus path variable and to put there a value equivalent with approximatively battery C10.

**com.victronenergy.system/Debug/BatteryOperationalLimits/CurrentOffset**

The following topics also document it:

Hope I am right, but if I am not, maybe I can kindly ask you to tell me why.

Many thanks,

Alex

Attn:@victron