DIY UPS for Home Assistant Green → N100DC-ITX & Xfinity XB7 Modem
A 12V LiFePO4-based uninterruptible power supply for keeping a Home Assistant Green and Xfinity XB7 cable modem running during grid outages. Built into an IP65 enclosure with Home Assistant monitoring via Shelly Plus Uni.
Honest context: A $85 APC BE600M1 provides comparable backup capability. This build costs roughly the same over 10 years as that option (based on battery replacements and electricity usage). The engineering rationale — longer battery life, faster switchover, direct HA integration, no DC-DC converter voltage regulation — is documented in design-rationale.md. Build this if those tradeoffs matter to you.
PHASE 2 UPDATE: 18V Boost Integration — 2026-08-29
TL;DR: Upgraded the HA Green to an Asrock N100DC-ITX PC and integrated onto the UPS via a Pololu U3V70A boost @ 18.0V. Load 14.9W → 26.80W DC[M]. Runtime 3.6h → 128min to LVD. Every threshold held, zero false on-battery in 26,413 samples. The scaling model we published for phase durations was falsified same night — plateau 85min projected → 43min measured[M]. One operational gap remains: EN/FET not fitted, so unattended recovery only guaranteed for outages deep enough to reach BP-65 LVD
| Quantity | Before Boost (May 2026) | After Boost (Aug 2026) |
| DC bus load steady | 14.9W / 1.18A | 26.80W / 2.089 |
| Peak observed | ~1.29A | 2.533A / 32.48W |
| AC at UPS outlet | 16.832W | 30.554W |
| Net conversion penalty | +1.21W at wall | |
| Bus float mean | 13.2325V | 13.1970V (-35.5mV) |
| Margin to 13.15V on-battery trip | 73.0mV | 23.3mV |
| BMS 10A rating headroom | 21% steady, 25% peak |
Validated runtime — energy still there, voltage thresholds move: The pack still delivers 53.3Wh / 4.18Ah [M] May 6. At new load: 53.3Wh ÷ 26.80W = 119 min, ÷ 25.97W measured mean = 123 min to LVD.
Boost Subsystem Design — Why This Way
Full spec: UPS-Monitor/boost-subsystem-design.md BOOST-DS-r1 (2026-07-20)
Requirement: regulated ~18V rail from UPS 12V bus replacing HA Green's direct feed, without degrading four-tier ladder or endangering XB7.
Unattended moment (design cornerstone): AC outage with nobody home. Must (a) carry host through switchover inside 17.1-20.9V window, (b) hold clean until 12.2V graceful-shutdown tier completes, (c) permit monitor-commanded shed after shutdown, (d) clean non-damaging re-energization when AC returns so BIOS auto-boots. "Working" defined at those four instants.

AC grid → Mean Well HDR-60-12 (13.3V float, lacquered) → MOSFET ideal diode ─┐Cyclenbatt 12V 10Ah LiFePO4 (10A BMS) | 12V bus │ ├─ Xfinity XB7 (~12.2W DC) | ├─ Monitor: XIAO ESP32-C3 + INA260 + DS18B20 via D24V7F3 (~30-40mA)| └─ [NEW] Pololu U3V70A Boost Subsystem → 18V → N100DC-ITX | | Vin carrier: 220uF/50V KEMET hybrid + 10uF X7R | | Vout carrier: 100uF/50V Panasonic EEH-AZA1H101B + 10uF X7R | |Lead: 2ft 22AWG twisted, 5A fuse, 64.6mΩ RT| |Plug: Tensility 10-02937 5.5x2.5mm | |EN: broken out to header + testpoint, pulled to VIN (~12.5V) — GPIO FET planned Integration works electrically. Load nearly doubled and every threshold held. No false on-battery, no BMS pressure, no XB7 disturbance, modem stayed online through test, pack Ri unchanged.
Performance Summary — Validated May 6 2026 (INA260)
Validated Runtime: ∼3.6 hours to hardware LVD (11.8V) under sustained 14.9W load. INA260 coulomb-counted 4.18 Ah / 53.3 Wh.
Monitoring upgrade: Shelly Plus...Read more »
Bill Collis







Hi Nicholas,
This is one of the nuances of the design -
Neither — this design bypasses CC-CV entirely by using passive float
charging.
How it works:
- PSU is set to 13.3V (LiFePO4 resting voltage)
- Current is naturally limited by the voltage differential between PSU and battery
- As battery charges, the differential shrinks → current tapers organically
- At equilibrium, current drops to near-zero (microamps)
The BMS role:
- The Cyclenbatt's built-in 10A BMS provides protection only (OVP, UVP, OCP, short circuit)
- It does not regulate charging current — it would only intervene if current exceeded 10A (which can't happen here since max PSU output is 8.5A, and typical charge current is <2A)
Why this works for LiFePO4:
- LiFePO4 has a flat discharge curve and tolerates indefinite float at 13.3V
- No risk of overcharge since 13.3V is below the 14.4-14.6V charge termination voltage
- Trade-off: charges to ~95% SoC rather than 100%, but extends cycle life
Hope that answers you question.
Bill