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 Runtime: 4.25 hours to software shutdown (12.2V) and ~4.3 hours to hardware LVD (11.8V) under a sustained 14.5W load. 

Key Finding 

The UPS delivers a reliable ~4.3 hours of runtime at typical Xfinity XB7 Modem and HA Green loads (~15w). This is ~55% of the theoretical maximum capacity of the 10Ah LiFePO4 battery. This result is not due to battery degradation, measurement error, or software issues. It is a direct consequence of the single-rail 13.3V CV architecture. 

Why the Runtime is Limited 

The system uses a single shared rail for both charging and load. To keep the voltage safe for the connected equipment, charging is capped at 13.3V. This restricts the battery to approximately 65–75% SOC and prevents proper absorption charging at 14.4V. As a result, the top ~25–35% of the battery’s rated capacity is never accessible. 

Discharge Characteristics 

Extremely flat voltage plateau from 13.0V down to 12.8V (delivers the majority of usable energy)

Sharp “cliff” begins at ~12.45V, after which voltage drops rapidly 

12.4V warning provides an effective “immediate action” alert (~5–6 minutes before shutdown) 

Conclusion 

The system performs exactly as designed. The layered protection (voltage warnings → automated shutdown → BP-65 hardware LVD) is robust and safe. 

Current validated specification: ~4.3 hours runtime at 14.5W under the existing single-rail topology. 

A two-stage charging architecture (dedicated 14.4V charger + DC-DC regulator) would be required to approach the full ~7.8–8.5 hour theoretical runtime. 

Complete Report and Data can be found at: https://github.com/wkcollis1-eng/DIY-LiFePO4-UPS/blob/main/docs/UPS_Validation_Report.md 

Last validated: March 2026 (Test D3)

UPS Integration into Home Assistant


HA Integration details can be found at: https://github.com/wkcollis1-eng/DIY-LiFePO4-UPS/blob/main/HA%20Automation/README_HA_UPS_Integration.md

Commissioning Results

The chart records a full two-cycle discharge test performed March 25–26, 2026 using a Netgear R6400 router (~7W DC) as a substitute load, with battery voltage logged via the Shelly Plus Uni at 5-second intervals. Discharge 1 (7.76h): Voltage held the characteristic LiFePO4 flat plateau from 13.2V to 13.0V over 7.76 hours — a drop of only 0.2V at light load, confirming textbook cell behavior. Recharge (10.1h): AC restored; PSU returned the battery to float within minutes, peaking at 13.28V and holding stable through a 10-hour recharge window. Discharge 2 (9.36h): A second full discharge ran the battery to LVD cutoff. The Victron BP-65 tripped at 11.77V — within 0.03V of the 11.8V design target — confirming protection circuit accuracy. Post-LVD OCV rebound to 12.13V confirms healthy cell chemistry with no permanent capacity loss from the deep discharge. 

Key findings: 

-Discharge plateau variance under 0.2%/hr 

-BP-65 cutoff accuracy ±0.03V 

-Internal resistance ~260mΩ at low SoC (derived from OCV recovery) 

-Bulk recharge from 12.9V to...

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

PN Labs wrote 03/01/2026 at 18:57 point

Hi Bill,

Wondering if you can share any details about the BMS and if it enables CC-CV charging for the lithium battery (or limits the current flow to the maximum safe CC level)

Regards,

Nicholas

  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