What's Accurate SOC & Why are Batteries Aging Differently in Bank of 45 48V 100Ah Lithium Batteries?

Hi Everyone! This is my first post.

I am spending some time volunteering at a hospital in rural Malawi. In 2022, in a project funded by donations, a grid-tied ESS with a sizeable solar array and battery bank was added, stabilizing the power supply for the hospital and providing backup power during all-too-frequent utility outages. The battery bank was added onto in 2024, increasing the storage capacity. I am coming in as a residential electrician from the US, doing my best to learn about the system from Victron’s website, and I’ve finally hit the point where I have some installation-specific questions I can’t figure out on my own.

The system described briefly:

  • 3-Phase 230V 50Hz Grid

  • 6x Victron Quattro 48/15,000/200 - configured to 3-phase

  • 7x Fronius Symo 15.0-3-M - one on AC Input, six on AC Output

  • 45x Leoch 48V 100Ah LiFePO4 batteries, arranged in banks of 5, with a Victron BMV-700 monitoring each bank of 5

  • Victron Cerbo GX Controller

Lately, I’ve been looking into battery health and State of Charge readings, to make sure we are doing all we can do to take care of the investment and get the most out of the system. To do this, I have been using the built-in display on each individual battery to get capacity and SOC readings and then comparing that to the BMV readings. Below is a data set from this morning.

Bank Battery Model SOC (%) FCC (Ah) Rm (Ah) Cycles
1A BMV-700 53.3
1 Averge LFELI-48100TB 47.46 93.1 44.2 703
2 Averge LFELI-48100TB 51.38 100.0 51.3 696
3 LEOCH LFeLi-48100CB 55.9 90.8 50.8 1057
4 LEOCH LFeLi-48100CB 51.11 101.4 51.8 1070
5 LEOCH LFeLi-48100CB 47.77 87.3 41.7 1029
2A BMV-700 53.3
1 LEOCH LFeLi-48100CB 52.81 99.5 52.5 997
2 LEOCH LFeLi-48100CB 44.69 83.3 37.2 1072
3 LEOCH LFeLi-48100CB 56.82 108.7 61.7 917
4 LEOCH LFeLi-48100CB 55.74 98.8 55.1 943
5 LEOCH LFeLi-48100CB 56.07 100.9 56.6 1109
3A BMV-700 58.7
1 LEOCH LFeLi-48100CB 50.28 90.9 45.7 936
2 LEOCH LFeLi-48100CB 52.06 64.6 33.6 1121
3 LEOCH LFeLi-48100CB 52.96 74.8 39.6 1141
4 LEOCH LFeLi-48100CB 40.73 80.1 32.6 975
5 LEOCH LFeLi-48100CB 54.76 102.0 55.8 959
1B BMV-700 53.5
1 LEOCH LFeLi-48100CB 49.7 100.0 49.7 936
2 LEOCH LFeLi-48100CB 51.39 101.3 52.1 986
3 LEOCH LFeLi-48100CB 52.49 69.0 36.2 1032
4 LEOCH LFeLi-48100CB 54.51 97.3 53.0 764
5 LEOCH LFeLi-48100CB 54.1 102.5 55.4 821
2B BMV-700 54.1
1 LEOCH LFeLi-48100CB 56.05 92.0 51.6 1040
2 LEOCH LFeLi-48100CB 48.44 88.1 42.6 1054
3 LEOCH LFeLi-48100CB 48.3 94.5 45.6 1102
4 LEOCH LFeLi-48100CB 50.87 101.3 51.5 1123
5 LEOCH LFeLi-48100CB 50 94.9 47.4 1077
3B BMV-700 51.6
1 LEOCH LFeLi-48100CB 43.64 83.2 36.3 1082
2 LEOCH LFeLi-48100CB 49.79 100.0 49.7 1161
3 LEOCH LFeLi-48100CB 52.13 101.5 52.9 1107
4 LEOCH LFeLi-48100CB 54 102.6 55.4 1060
5 LEOCH LFeLi-48100CB 55.05 102.9 56.6 1026
1C BMV-700 51.4
1 Averge LFELI-48100TB 50.68 100.0 50.6 654
2 Averge LFELI-48100TB 50.36 100.0 50.3 645
3 Averge LFELI-48100TB 42.76 87.6 37.4 650
4 Averge LFELI-48100TB 49.23 100.0 49.2 663
5 Averge LFELI-48100TB 50.5 100.0 50.0 639
2C BMV-700 53.3
1 Averge LFELI-48100TB 51.69 100.0 51.6 686
2 Averge LFELI-48100TB 43.43 87.4 37.9 723
3 Averge LFELI-48100TB 50.41 100.0 50.4 647
4 Averge LFELI-48100TB 51.35 100.0 51.3 656
5 Averge LFELI-48100TB 50.68 100.0 50.6 662
3C BMV-700 55.2
1 Averge LFELI-48100TB 46.46 90.2 41.9 673
2 Averge LFELI-48100TB 50.97 100.0 50.9 663
3 Averge LFELI-48100TB 51.54 100.0 51.5 668
4 Averge LFELI-48100TB 51.86 100.0 51.8 653
5 Averge LFELI-48100TB 48.95 96.0 47.0 664

Two things stand out to me:

The first thing that stands out is that the SOC values registered by the Victron BMVs don’t seem to correlate to any values given by the individual batteries. Taking bank 3C, for instance, if I sum the remaining charge and divide by the sum FCCs, I get an overall SOC of 50.0% for the bank. Or, if I divide the amount of Ah depleted by the 500Ah bank capacity as configured in the BMV, I get a calculated 51.38% SOC. However, the BMV itself reads 55.2%. Can anyone help me account for this difference? Or help me understand which value is most accurate? If there are settings that need to be tweaked (such as updating battery capacity in Victron Connect), what are they?

The second thing that stands out is that the full-charge capacities of the individual batteries have some serious outliers! Many batteries, both new and old, still register very close to their initial 100Ah capacity. However, one older battery is now as low as 64.6Ah, and even two newer ones read 87Ah! What is to be made of these differences? Is it normal for batteries to differ so much individually, and is this expected performance for 2 and 4-year old batteries? If not, what are some things we could try to improve the lifespan?

For context, all batteries are connected in parallel using a Victron Lynx Distributor busbar system. They are in an air-conditioned room with air-conditioners running constantly. Since I have been at the hospital (2 months now) the batteries are scheduled to charge to 100% once per week, but they often reach 100% anyway on sunny afternoons. They are set to self-consume down to 45% each night, but we consume down to 20% during nighttime outages before using the generator.

As I said initially, I am new to Victron products and to this forum, so in addition to help with the above questions I would also love to be connected to any resources in general that would help me learn more about the hospital’s system. Thank you in advance for your help!

Matthew

(Photos of the system below)

SOC is a calculated, not measured parameter. As such, being current integrated over time, it is subject to considerable errors. Treat SOC as a general indicator, and work on minimum cell voltages. Usual setting to tweak SOC discrepancies is charge efficiency - for lithium this should be 96% to 98%.

Also look at the total charge cycles for each battery: All batteries have a limited throughput of kWh, during which their capacity drops from 100% nominal to 80% nominal. Batteries with higher lifetime indicators (poor soh, FCC, or high cycle count - these will have had a higher cycle current. One thing to do is to check the current distribution in the battery system: If the total charge current is say 300A, is it equally distributed between the 9 banks, and within a bank is it equally shared between the 5 batteries? Any that are significantly low on current may have some problem with the connecting cables / terminations etc. Check for cleanliness, tightness and oxidation of connections. (and any heating of connections - an IR camera is a good tool to have for this).
Given the cycle efficiency of lithium batteries, charging / discharging imbalance is not such a problem as it was with lead.

Different soc and voltage on different batteries means different path lengths and different work performed by them.
To be expected in larger banks wired as stacks. Yay ohms law. Usually it means the end batteries get hurt a bit. The centre ones are on holiday.

Then add their changing internal resistances to mess with it more.

Sometimes bank rotation is necessary especially in stacks like that.

Between peukerts and each battery clearly having an advantage know what has gone into itself as an individual vs the bmv that only know each stack total, i think they are pretty close. The BMV voltage would be what you would measure over the entire stack with a multimeter. That voltage difference coupled with the current reading would be the reason why they have gauges slightly different ‘power amounts’

Hi Mike,

Thanks for the response! This is all good and helpful stuff.

So if I’m understanding you right on this, we’re never shooting for perfect on the BMV readings, just closer to accurate so that the system can manage itself better. I looked in the BMV settings, and they’re all currently set to 99% efficiency. Would you just bump it down to 98%, let it go for a week and compare? 97% if it still needs tweaking?

Regarding this recommendation, what is the best way to compare all of the current values for the BMVs vs. the Quattros? Is that best done by downloading the system data into a spreadsheet from the “Advanced” tab of the VRM portal? The only other way I could think of is looking at the real-time output, but for our setting the current fluctuates wildly given the varying solar input and hospital loads.

Does this mean the batteries with FCC of 83.3%, 64.4%, 74.8%, 80.1%, 69.0%, and 83.2% are “dead” already? It seems kind of early for only 1100+ cycles. Does this indicate that they’ve been stressed too much? And if they are at the end of their life, is there any harm in keeping them as part of the banks, since they’re installed in parallel?

Again, thank you for your response. This whole installation is new for me, and this is chipping away at my ignorance little by little. :slightly_smiling_face:

Hi LX,

Thanks for the response.

This makes sense, and I also note that for stacks of 5 or more it is recommended to install using busbars instead of cables like our original installers used. I’m wondering if perhaps the actual connections are the weaker point in our installation rather than the position. If you take bank 3A for example, it’s the center three batteries that are actually worse off than the two on the ends.

Is there a recommended rotation scheme? Maybe just something like this?

1 → 3

2 → 4

3 → 5

4 → 1

5 → 2

Again, thanks for the input.

Yes some path resistance differences. So
same cable length -
crimping constancy -
Torque at the terminals

Sometimes clamping on insulation is a factor.
And sometimes if the lug was modified burrs as well.

There are quite a few factors.

Batteries with reported FCC of <64% could be removed and bench tested for actual capacity.
Lithium lifecycle is a bit variable, but should be at least 2000 cycles.Over discharging over charging can compromise life, as can operating temperature.
Best way to measure current distribution would be about 10am on a sunny morning, with steady sunshine. Then use a clamp meter on each stack, then each battery within a stack. If you have fluctuating loads, then this will make it more difficult, but try to pick an average. spreadsheet values - if you can get them will also help.

Personally, I’d work on improving the layout of the batteries and inverters. What you have, with the 2 additional battery racks stuffed on the front does not allow easy access to either the inverters or the batteries. It also looks like the inverter spacing is minimal. Spreading this lot out will improve the cooling - leading to better efficiency and longer battery life, it would also help control the current distribution better.

Last week I was able to attempt an experiment like this, early in the morning before the major loads ramped up. SOC was around 45% and I pushed the inverters to charge up to 100%. The following is what the BMVs and individual batteries registered during this short experiment, with a graph of charging currents as well.

Bank Battery Model FCC (Ah) Cycles Current
1A BMV-700 Measured 125.3
Stack Sum 128.79
1 Averge LFELI-48100TB 93.1 710 31.95
2 Averge LFELI-48100TB 100.0 703 31.00
3 LEOCH LFeLi-48100CB 90.8 1062 22.37
4 LEOCH LFeLi-48100CB 101.4 1076 24.30
5 LEOCH LFeLi-48100CB 87.3 1035 19.17
2A BMV-700 Measured 101.70
Stack Sum 104.15
1 LEOCH LFeLi-48100CB 99.5 1002 20.29
2 LEOCH LFeLi-48100CB 83.3 1077 20.58
3 LEOCH LFeLi-48100CB 108.7 921 21.19
4 LEOCH LFeLi-48100CB 98.8 947 17.96
5 LEOCH LFeLi-48100CB 100.9 1114 24.13
3A BMV-700 Measured 84.60
Stack Sum 86.98
1 LEOCH LFeLi-48100CB 90.9 941 15.41
2 LEOCH LFeLi-48100CB 64.6 1227 16.77
3 LEOCH LFeLi-48100CB 74.8 1147 19.72
4 LEOCH LFeLi-48100CB 80.1 980 16.26
5 LEOCH LFeLi-48100CB 102.0 973 18.82
1B BMV-700 Measured 120.50
Stack Sum 125.35
1 LEOCH LFeLi-48100CB 100.0 942 30.69
2 LEOCH LFeLi-48100CB 101.3 992 32.58
3 LEOCH LFeLi-48100CB 69.0 1038 18.95
4 LEOCH LFeLi-48100CB 97.3 769 21.39
5 LEOCH LFeLi-48100CB 102.5 825 21.74
2B BMV-700 Measured 113.20
Stack Sum 115.72
1 LEOCH LFeLi-48100CB 92.0 1044 19.85
2 LEOCH LFeLi-48100CB 88.1 1059 21.06
3 LEOCH LFeLi-48100CB 94.5 1107 22.98
4 LEOCH LFeLi-48100CB 101.3 1128 28.29
5 LEOCH LFeLi-48100CB 94.9 1083 23.54
3B BMV-700 Measured 115.10
Stack Sum 119.61
1 LEOCH LFeLi-48100CB 83.2 1088 21.81
2 LEOCH LFeLi-48100CB 100.0 1166 28.22
3 LEOCH LFeLi-48100CB 101.5 1113 25.42
4 LEOCH LFeLi-48100CB 102.6 1065 22.57
5 LEOCH LFeLi-48100CB 102.9 1031 21.59
1C BMV-700 Measured 124.00
Stack Sum 126.77
1 Averge LFELI-48100TB 100.0 659 25.87
2 Averge LFELI-48100TB 100.0 651 24.91
3 Averge LFELI-48100TB 87.6 656 25.02
4 Averge LFELI-48100TB 100.0 669 25.37
5 Averge LFELI-48100TB 100.0 645 25.60
2C BMV-700 Measured 126.10
Stack Sum 127.78
1 Averge LFELI-48100TB 100.0 692 26.50
2 Averge LFELI-48100TB 87.4 729 27.07
3 Averge LFELI-48100TB 100.0 652 22.88
4 Averge LFELI-48100TB 100.0 662 25.06
5 Averge LFELI-48100TB 100.0 668 26.27
3C BMV-700 Measured 123.10
Stack Sum 127.15
1 Averge LFELI-48100TB 90.2 678 25.86
2 Averge LFELI-48100TB 100.0 669 24.87
3 Averge LFELI-48100TB 100.0 674 25.31
4 Averge LFELI-48100TB 100.0 659 24.90
5 Averge LFELI-48100TB 96.0 669 26.21

It does seem like the batteries with low charging current generally correspond to the noted lower charge capacity & higher cycle count. So how would you read this data? Lower current means bad connections, which lead to accelerated cycling and decrease in capacity? OR, is it more like there are a few “bad egg” batteries with higher internal resistance that lead to lower charge currents and also higher cycling? Any other takeaways you would glean from this data set?

Finally, I just wanted to double-check this above question. I will still plan to try tweaking the efficiency setting in Victron Connect, but do I also need to update the “Battery Capacity” setting for the BMVs to reflect the sum of the stated individual battery capacities in a given bank? 486.2Ah for bank 3C for example?

Check connections for:
1A:5,1B:3,2B:1, - current significantly lower than others in stack
3A - check stack wiring - stack low current.
the idea is to plot the current distribution for stacks and batteries within stacks and check those significantly low.
As the batteries age, the internal resistance will increase, leading to lower charge and discharge currents - placing the load on the newer batteries. This is normal, but any extreme outliers should have the cabling / connections checked.
Yes, updating the BMV battery capacity will allow the system to adapt to the reduced SOH, allowing the SOC curve to fit the actual capacity, rather than the nominal capacity. This will not have any other effect.

Thanks Mike! This is super helpful. I will check connections as recommended.

Regarding this, making the curve more accurate will be helpful for us. We often lose grid power at night when there is no solar energy available. Additionally, the generator auto-start function no longer works. So having an accurate picture of how much battery power we have left is crucial!

Thanks again!