An out-of-calibration battery is far more common than a genuinely dying one, and the way to tell them apart is to stop watching the state of charge and start reading three other things: the amp-hours you can actually pull out of a measured full cycle, the cell voltage spread at the top and bottom of that cycle, and how much the pack voltage sags for every amp you draw. When those three stay steady and only the percentage on the app is jumping around, the battery is working. The BMS has lost its reference points, and that is a completely different problem from a worn-out pack.
The night the percentage had a panic attack
Let me put you where I was. Half past nine on a winter night, Stage 4, the whole street dark except for three rooftops with panels. The app said 68%. Four minutes later it said 41%. Then it sat at 39% for an hour and a half and finished the evening without a murmur.
My first thought was a dead cell. My second thought was the cost of a new pack.
My third thought was the only useful one, and it arrived in the garage. I pulled the BMS log onto the laptop and went to the cell voltages at the moment of the drop: 3.31, 3.32, 3.30, 3.31 V.
Four cells within 20 millivolts of each other, discharging calmly, while the number on my phone lost its mind. Nothing was wrong with the battery. Something was wrong with the number.
State of charge is an opinion. State of health is a measurement.
These two get shown side by side on the same screen, which is where most of the confusion starts.
State of charge answers: how much is in there right now, as a fraction of what the pack can currently hold. State of health answers: how much can it hold, compared with when it was new.
The BMS does not measure either of them. It measures current, voltage and time, and then it calculates. Current in and out gets added up — that is the coulomb counter — and the running total is re-anchored whenever the pack reaches a point the BMS trusts: full, with charge current tapered down to almost nothing, or empty, at the low-voltage cutoff.
Now here is the part that catches South African owners specifically. Load shedding taught all of us to live between 40% and 90% and never go near either end. That is genuinely good for cycle life. It is terrible for the counter, because the BMS never gets to re-zero. For months the error builds up quietly, and then one evening the pack drifts into a region the counter did not expect and the percentage falls off a cliff.
That cliff is an artefact. It looks exactly like failure and it is not. But it is a fair signal that you should go and measure the thing properly.
One more thing worth knowing before you start: the state of health figure on the app is usually derived from that same drifting counter. It is not independent evidence. A BMS reporting 78% health may simply be reporting its own bad arithmetic.
The only test that matters
You need one honest full cycle, run the same way twice.
First, get the pack to a true 100%. Not "the app says 100%". The charge source has to hold absorption voltage until current tapers down to the tail-current threshold and the BMS resets its counter. Watch the cell voltages during those last twenty minutes — that is the only time a passive balancer gets to do any work.
Then let it rest and note the resting pack voltage and the cell spread.
Then discharge it deliberately. I switch the non-essential circuits off at the DB board and run a known resistive load so the current stays roughly constant. You are looking for the number of amp-hours or kilowatt-hours that come out between the full reset and the cutoff. Divide that by the nominal capacity and you have a working figure for state of health.
Two things will lie to you if you let them. Temperature: a lithium pack gives up several percent of its capacity between 25°C and 10°C, so a cold winter garage test will frighten you for no reason. Discharge rate: pull hard and you get less out, pull gently and you get more. Compare tests only when the temperature and the load are similar.
Run it twice, a week or two apart.
And here is the payoff most people miss: a proper full charge with real absorption time often fixes the drift by itself. If the SOH number jumps upward after the second cycle and the cliff disappears, you never had a failing battery. You had a lazy algorithm.
Resistance, read from the outside
You cannot put a milliohm meter across a 15-cell pack in your garage, and you should not try to open anything. But internal resistance is visible from the outside if you look at voltage sag.
Say your pack rests at 53.0 V after settling, and pulling 100 A for the kettle takes it down to 51.0 V. That 2.0 V drop over 100 A is 20 milliohms. Six months later, same state of charge, same ambient temperature, the same 100 A draw lands at 49.5 V. Now it is 35 milliohms.
That is a real change, but read it carefully. A slow, even rise across the whole pack is what ageing looks like. It happens to every lithium pack and it is not a fault. What you are hunting for is unevenness: one cell sagging harder than its neighbours under the same current. That is the cell that is going to end the pack's life, and it will look perfectly normal at rest.
Which is the whole trick. Everybody checks cell voltages with the battery sitting still, and at rest a tired cell hides beautifully. Check them mid-load, with a heavy appliance running, and the weak one stands up.
The ends of the curve, not the middle
Over the flat middle of its range, LFP cells hold a nearly constant voltage. All sixteen can read within a few millivolts of each other through the middle 80% even if one of them is half dead. Divergence lives at the ends.
At the top: charge to full and watch the final stretch. A spread inside roughly 50 millivolts is nothing to worry about. If one cell races to 3.60 V while the others sit at 3.40 V, and it does that repeatedly after full charges with proper absorption time, that cell has lost capacity relative to the rest. The balancer is now bleeding energy off it every single cycle just to keep the pack in one piece.
At the bottom: discharge and watch the last 10%. The weakest cell reaches cutoff first, and the BMS shuts the whole pack down on that one cell. The other fifteen still have charge in them that you will never get to use. That is capacity you have "lost" without anything having degraded, and it is the most common cause of a pack that suddenly seems smaller than it used to be.
A practical note on why this happens: most passive balancers can only bleed off a tiny current, and they only do it while the pack is at the top. That needs hours of absorption. Many hybrid inverters push the pack to full and drop straight to float, so the balancer never gets its hours and the drift becomes permanent. That is a settings problem, not a battery problem, and it is worth a conversation with whoever commissioned the system.
Where real failure looks different
A quick way to sort what you are seeing:
| What you see | Usually calibration | Usually the pack |
|---|---|---|
| SOC jumps 30% in minutes, cells matched | Yes | |
| SOC jumps, one cell 200 mV below the others | Yes | |
| Low capacity on one test, normal on the next | Yes | |
| Low capacity on two tests, same temperature | Yes | |
| Pack warm after a heavy load | Normal | |
| One cell several degrees hotter than its neighbours | Yes | |
| Pack loses 10% overnight with nothing running | Yes |
The overnight one matters most. Self-discharge — a pack that drops on its own with no load attached, and one cell dropping faster than the rest — is not something calibration can explain. Neither is heat concentrated in one cell, a resting voltage that keeps sliding down after charge, or any swelling, smell or deformation. If you see those, stop testing and get the installer in. Do not open the case.
What a warranty actually asks for
I am not going to tell you whether yours qualifies, because that is decided by the document you were given, not by an article. What I can tell you is the shape of the evidence that gets asked for.
Almost always: a documented capacity test at a specified discharge rate and temperature, run to a defined cutoff, with the result expressed as a percentage of nominal. BMS logs or exports covering a period, showing cycle count, cumulative throughput, cell voltages and temperatures. Proof that the installation was done and signed off properly, and that the charge and discharge settings stayed inside the manufacturer's limits. And the threshold itself, commonly written as a percentage of nominal capacity — often lower than owners expect — inside a defined time or cycle window.
What I keep is a folder. Dated screenshots, exported log files, the original invoice, the certificate of compliance, and a note of the ambient temperature and load for every test I run. When a claim goes somewhere, it goes because the paper was already there.
Be honest about the limits of a home test, too. It includes your inverter's losses and your wiring. It is a good comparison against your own previous results and a rough comparison against nominal. It is not a laboratory number, and you should say so when you present it.
So which one is it?
If a proper full charge with real absorption time recovers the capacity and kills the cliff, you had drift. Expect it to come back in six months if you keep living in the 40 to 90 band, so give the pack a genuine full charge to absorption about once a month and let the balancer have its hours.
If the capacity is genuinely down but the cells are matched, the resistance rise is gentle and even, and nothing is heating or self-discharging, you do not have a broken battery. You have an old one. That is a planning conversation about depth of discharge and replacement timing, not an emergency.
And if one cell is diverging, sagging harder under load and running hotter than the rest, that is your answer, and no amount of cycling will fix it.
The percentage on your phone is an opinion. The amp-hours coming out of the pack are a fact. When the two disagree, believe the amp-hours.