Close

First full discharge to LVD - and a 42 % capacity mystery

A project log for DIY UPS for Home Assistant Green & Xfinity XB7 Mod

DIY 12V LiFePO4 UPS for Home Assistant Green and Xfinity XB7 modem. Victron BP-65 LVD, MOSFET ideal diode, 13.3V float, Shelly Plus Uni

bill-collisBill Collis • an hour ago•0 Comments

On 2026-09-15 I cut AC to the UPS on purpose and let it run all the way down - the first time this system has been taken to a genuine hardware cutoff instead of stopped early. Everything the protection ladder was built to do, it did. And the pack came up 42 % short, with no instrument on the system that would have told me.

The ladder, end to end

From host-down to LVD: 52 min 47 s, with nobody watching and the BP-65 as the only protection left.

The number that matters

Onset to LVD, the pack delivered 2.5331 Ah / 31.821 Wh in 1 h 30 m 08 s. I trust that figure more than any capacity number this project has published, because it's the first one that's been checked rather than assumed:

(All three share one sensor, so they prove the INA260's output is carried and integrated correctly, not its absolute accuracy.)

Then the comparison. The 2026-09-01 test ran fourteen days earlier at essentially the same current, over a voltage span this run also crossed:

2026-09-012026-09-15Δ
Voltage span12.97 → 12.565 V13.034 → 12.546 Vmatched
Mean current2.089 A2.043 A-2.2 %
Elapsed54 min31.0 min-42.6 %
Charge1.833 Ah1.0559 Ah-42.4 %
Energy23.369 Wh13.4394 Wh-42.5 %

Ah and Wh agree to a tenth of a point. A voltage fault would move Wh without moving Ah, so the shortfall is in the pack, not the instrument. LVD to LVD against May's 4.179 Ah, it's -39.4 %.

What doesn't explain it

Together: under 10 % of the LVD-to-LVD gap and none of the load-matched gap.

What might - and the test I could run from a desk

The leading candidate is one weak cell or an imbalanced pack. One cell hitting its knee early drags the 4S pack to 11.80 V while three cells still hold charge. The direct test is per-cell voltage at end of discharge, and this pack is sealed - no balance taps, no BMS telemetry. So I ran a substitute on data that had been sitting in the repo since May: pack OCV against charge removed, each run normalised to its own total.

September sits below May at every depth both runs cover: -163 mV at 20 %, -221 mV at 50 %, -180 mV at 90 %. It stays below across the whole measured range of internal resistance (93-260 mΩ) used in the correction. Uniform fade predicts zero everywhere.

Pack OCV estimate (V + |I| × 93 mΩ) against depth of discharge, each run normalised to its own delivered charge. The May record ends at 91.5 % depth, when the HA Green - then the recorder - shut itself down; the September gap is the 12 minutes after HA went down and before the direct-API monitor connected. Rebuilt from the repo’s CSV/JSON/log files; it agrees with report §4.6 to within ~0.02 V.

That's evidence against uniform fade and for a non-uniform pack. It isn't proof: the overlay assumes both runs started from the same state, and the May run predates the fully-charged detector.

Two more things the run settled

What's next

  1. Repeat the discharge at May's current (Open Item 14a): shut the host down first, so the load is the XB7 and monitor only (~1.2-1.4 A). Same pack, same load, same endpoint, same instrument. If it still delivers ~2.5 Ah against May's 4.179 Ah, the loss is confirmed.
  2. Coulomb-count one recharge to termination (Open Item 16). Charge accepted ≈ 2.5 Ah then taper to zero means the usable window really is ~2.5 Ah; materially more means the pack hadn't started full.
  3. The top-off charger - a 14.40 V hold whose current tail is the first direct look at whether this BMS balances at all.

The safety claim held under a real test. The time budget it's tuned against shrank by about two-fifths, and nothing reported it. That's the case for measuring capacity on purpose rather than trusting last quarter's number.

Full report (r3), raw data and reproduction guide: reports/UPS_Report_2026-09-15_Full_Discharge_Survival_Test.md

Discussions