Close
0%
0%

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

Similar projects worth following
System Overview
AC grid powers a Mean Well HDR-60-12 PSU set to 13.3V float, which charges a 12V 10Ah LiFePO4 battery through a MOSFET ideal diode. On grid failure, loads switch directly to battery in under 1ms. A Victron BatteryProtect BP-65 disconnects loads at 11.8V to prevent over-discharge. A Shelly Plus Uni reports battery voltage and temperature to Home Assistant.

DIY UPS for Home Assistant Green & 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.

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 Uni replaced April 2026 by ESPHome XIAO ESP32-C3 + Adafruit INA260 + DS18B20. All capacity figures below are now coulomb-counted, not inferred from voltage.

Key Finding: ∼3.6h is ∼42>#/span### of theoretical maximum (10 Ah / 1.18A = 8.47h). Not degradation or software — direct consequence of single-rail 13.3V CV architecture holding battery at ∼65% SOC.

Capacity zone

Ah

Reason

Float ceiling — never loaded

∼3.5 Ah

13.3V float ≈ 65% SOC; requires 14.4V charger to recover

Rate/LVD penalty

∼1.3 Ah

IR drop at 1.18A strands charge above LVD

Delivered (INA260 measured)

4.18 Ah

Coulomb-counted, May 6 2026, 217 min AC-off

Protected at LVD cutoff

∼0.8 Ah

Intentional; prevents over-discharge

Below LVD to rated-empty

∼0.8 Ah

Intentional; cell protection

Discharge Characteristics:

  • Extremely flat plateau 13.0V down to 12.85V — bulk of usable energy
  • Knee region 12.40–12.85V — ∼53 min at production load
  • Cliff begins at ∼12.40V: slope accelerates -30 mV/min to -58 mV/min
  • 12.4V warning gives 15–20 min action time before hardware LVD

Conclusion: System performs as designed. Layered protection — voltage warnings → automated shutdown → BP-65 hardware LVD — robust and all three tiers now fully live-validated. Two-stage architecture (dedicated 14.4V charger + DC-DC regulator) would be required to approach full ∼7.1–8.5h theoretical.

Last validated: May 6 2026 (INA260)

Commissioning Results

Full two-cycle discharge test March 25–26 2026 using Netgear R6400 router (∼7W DC) as substitute load, Shelly Plus Uni 5-sec logging for baseline, then INA260 validation.

Discharge 1 (7.76h): 13.2V→13.0V over 7.76h, only 0.2V drop at light load — textbook LiFePO4.
Recharge (10.1h): AC restored, PSU returned to float within minutes, peaking 13.28V stable.
Discharge 2 (9.36h): To LVD — Victron BP-65 tripped at 11.77V within 0.03V of 11.8V design target. Post-LVD OCV rebound 12.13V confirms healthy chemistry.

Key findings: plateau variance <0.2%/hr, BP-65 accuracy ±0.03V, internal resistance ∼260mΩ at low SoC (from OCV recovery), bulk recharge 12.9→13.2V in <12 min.

Full reports: <a href="https://github.com/wkcollis1-eng/DIY-LiFePO4-UPS/blob/main/reports/UPS_Report_2026-05-06.md">reports/UPS_Report_2026-05-06.md</a> (INA260 first measurement, 12.2V automation confirmed)

System Overview

AC grid → Mean Well HDR-60-12 PSU set to 13.3V float (trimmer lacquered, drift 3–5 mV/year) → MOSFET ideal diode → 12V 10Ah Cyclenbatt LiFePO4 → Victron BatteryProtect BP-65 disconnects at 11.8V after 90s hold-off. On grid failure, loads switch to battery in <1ms. ESPHome XIAO ESP32-C3 + INA260 + DS18B20 reports voltage, current, power, accumulated Ah/Wh to HA via Pololu D24V7F3 3.3V regulator (30–40 mA draw).

Key Specifications

Parameter

Value

PSU

Mean Well HDR-60-12, 13.3V float

Battery

Cyclenbatt 12V 10Ah LiFePO4

Float

13.3V set on PSU trimmer, lacquered

LVD cutoff

11.8V Victron BP-65 Setting 7

LVD reconnect

12.8V 30s delay

Device...

Read more »

UPS_Final_Report.pdf

Commissioning Run

Adobe Portable Document Format - 40.93 kB - 03/26/2026 at 23:39

Preview

System_Overview.png

System Architecture

Portable Network Graphics (PNG) - 43.27 kB - 03/06/2026 at 13:25

Preview

  • 1 × Mean Well HDR-60-12 PSU
  • 1 × Cyclenbatt 12V 10Ah LiFePO4 Battery
  • 1 × Victron BatteryProtect BP-65 12/24V
  • 1 × Pololu Ideal Diode 4-60V 10A
  • 1 × Shelly Plus Uni

View all 14 components

View all 2 project logs

  • 1
    Wiring Instructions

    Wiring Reference

    All wiring is 16AWG. See voltage-drop-analysis.md for resistance and drop calculations.

    Fuse Locations and Ratings

    FuseRatingLocationPurpose
    F110A fast-blowPSU outputProtects PSU output circuit
    F210A fast-blowBattery positiveINSTALL FIRST — protects battery circuit
    F32A fast-blowBP-65 OUT → HA GreenProtects HA Green load circuit
    F45A fast-blowBP-65 OUT → XB7 ModemProtects Xfinity Modem load circuit
    Install F2 before connecting the battery to any other part of the circuit. This is the primary short-circuit protection for the battery.

    Component Mounting

    ComponentMounting Method
    Mean Well HDR-60-12 PSUVelcro to enclosure base, stabilize to wall
    Victron BatteryProtect BP-65Velcro to enclosure base
    Pololu Ideal DiodeFloat — secure with wire ties
    Shelly Plus UniFloat — secure with wire ties
    Lever NutsFloat — secure with wire ties
    WiringCable clips as needed for strain relief

    Wiring Connections — From/To Reference

    AC Input → PSU

    FromToNotes
    Power Cord — Black (Hot)PSU Pin 1 AC/L
    Power Cord — White (Neutral)PSU Pin 2 AC/N
    Power Cord — Green (Ground)N/Agreen ground is cut back, capped with a wire nut, and taped, because the HDR-60-12 is a Class II double-insulated

    PSU → Ideal Diode

    FromToNotes
    PSU Pin 4/5 DC Output V−Ideal Diode GND (V−)
    PSU Pin 6/7 DC Output V+Ideal Diode VIN (V+)Via F1 (10A)

    Ideal Diode → Terminal Block

    FromToNotes
    Ideal Diode GND (V−)Input 2 (−)Terminal Block has 2 inputs
    Ideal Diode VOUT (V+)Input 2 (+)Terminal Block has 2 inputs

    Battery → Terminal Block

    FromToNotes
    Battery (V−)Input 1 (−)Terminal Block has 2 inputs
    Battery (V+)Input 1 (+)Via F2 (10A)

    Terminal Block → Victron BatteryProtect BP-65

    FromToNotes
    Terminal Block +BP-65 IN terminal
    Terminal Block −BP-65 GND terminalUse included 1.5mm² wire

    Victron BP-65 OUT → Loads

    FromToNotes
    BP-65 OUT terminalF3 input (2A)HA Green load circuit
    F3 outputHA Green barrel plug (center +)5.5mm × 2.1mm, center-positive
    BP-65 OUT terminalF4 input (5A)Xfinity Modem load circuit
    F4 outputXB7 Modem barrel plug (center +)5.5mm × 2.1mm, center-positive
    Terminal Block −HA Green barrel plug (sleeve)Common return
    Terminal Block −XB7 Modem barrel plug (sleeve)Common return

    Shelly Plus Uni Monitoring

    FromToNotes
    Battery + (Terminal Block)Shelly Pin 1 (V+)Module power in (+)
    Battery − (Terminal Block)Shelly Pin 2 (GND)Module power in (−)
    Battery + (Terminal Block)Shelly Pin 3 (Analog In)Bridge to Pin 1 — battery voltage sense; primary shutdown trigger at 12.2V
    DS18B20 Yellow/White (Data)Shelly Pin 5 (Data)1-Wire temperature data
    DS18B20 Black (GND)Shelly Pin 6 (Sens. GND)Temperature sensor ground
    DS18B20 Red (VCC)Shelly Pin 7 (3.3V Out)Temperature sensor power

    Enclosure Layout

    See https://github.com/wkcollis1-eng/DIY-LiFePO4-UPS/blob/main/assets/UPS_Layout_with_12_Volt_Regulator.png for the assembly drawing image.

    The enclosure is a LeMotech IP65 ABS junction box (9.6″×7.6″×4.5″ interior). Key layout decisions:

    • PSU occupies the left side; battery occupies the center. Physical separation provides AC/DC segregation and reduces EMI coupling.
    • Cable glands (1/2" NPT) on the bottom face: AC input on the left, DC output barrel jacks on the right.
    • Victron BP-65 mounts on the right side wall. Terminal block sits between battery and BP-65.
    • Shelly and ideal diode float above the battery, secured with wire ties.
    • All 16AWG runs are kept to approximately 6" segments to hold voltage drop 41mV at typical load and 63mV at peak.

View all instructions

Enjoy this project?

Share

Discussions

Bill Collis wrote 03/01/2026 at 19:17 point

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

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates