Building 12V + PoE UPS
Standalone PoE/12V backup for power outages
Having recently finished my personal server with all my photos and other important data, I obviously want it to keep running and not lose anything when the lights go out.
The first idea was to design an inline DC UPS - enough to shut everything down cleanly when mains drops (which happens pretty often around here). Ultimately I realized that buying an off-the-shelf 230 V UPS would work better, more reliably, cheaper, and faster to set up. My device of choice is the Eaton 5E 900 USB FR2 — 460 W of real power, which is more than enough for the NAS, Home Assistant, and router (around 55 W combined at idle).
The UPS is connected by USB to the NAS and monitored with PeaNUT and Home Assistant. When mains goes down, I get an ntfy notification (also self-hosted) that power went out.
What's the issue then? The modem that supplies WAN lives on another floor and is not on that UPS. When mains drops, so does the internet connection - and the ntfy message never leaves the house. Useless.
And so the idea of DIY backup power lived on, just refactored to cover the modem. In the meantime I also decided to hang two cameras to watch the house surroundings (they take either 12 V DC or PoE, which is neat).
What actually needs backup
In short: the outdoor modem is PoE-powered, and so are the cameras. That means the backup rail has to sit in the 48–55 V range - either a stack of four standard AGM UPS batteries, or one 12 V battery with a step-up converter. The router itself is happy on 12 V, which matches a single AGM pack nicely.
The layout that came out of that:

~230 V AC goes into a buffer UPS / PSU that outputs 12 V DC. The ZTE T3000 router is fed directly from that rail. A 12 V → ~48 V booster feeds both a passive PoE injector (WAN modem) and a TP-Link TL-SG1005LP PoE switch (cameras). The ZTE MC889 outdoor 5G unit hangs on Cat6 PoE from the injector; two Reolink P330 cameras hang on Cat6 PoE from the switch. One LAN out of the T3000 goes into the rest of the house - NAS, Home Assistant, Eaton UPS side of the world.
Modem data comes into the router's WAN. One LAN port continues to the aforementioned NAS setup; another goes to the PoE switch for the cameras. Everything that must survive a blackout lives in one wall cabinet - one battery domain, one place to stare at when something blinks red.
Why Pulsar + 12 V AGM, not a 48 V battery bank
Research landed on the Pulsar PSB-12V7A: a 12 V / 7 A buffer PSU that also charges a 12 V AGM battery and switches over to that battery when mains dies. Sweet - charger, failover, and DC supply in one brick.
Cameras hang off the small PoE switch. That switch wants a ~53.5 V brick, which a cheap 10-60 V step-up module can provide from the 12 V rail. The same boosted voltage goes to the PoE injector for the WAN modem. One boost module, two PoE consumers, no four-battery series string to balance and house in a cabinet.
Router on 12 V, PoE kit on ~48 V, both surviving on the same 7 Ah pack. That was the whole point of the dual-rail approach.
Power budget (with some margin)
Rough numbers, intentionally pessimistic: one camera draws at most ~10 W, the WAN modem draws even less, and the router ships with a 12 V / 1.5 A brick - call it ≤ 20 W with margin. Add a few watts of boost / injector / switch overhead and the summarized max sits around ~50 W on the 12 V side - a bit over 4 A.
The Pulsar can put out 6–7 A total, split between charging and load (typical split is along the lines of 1 A + 6 A or 2 A + 5 A). Plenty of headroom. On a 12 V / 7 Ah (84 Wh) AGM pack that should land somewhere between one and two hours of backup - not “run the house for a day” territory, just long enough for WAN, cameras, and the mesh controller to ride through the usual dips and short cuts around here.
Inside the UPS box
The network map is the topology. The schematic is what actually sits behind the green dashed box:

Mains 230 V hits the Pulsar PSB-12V7A (PSU + AGM charger + automatic battery transfer). From there a 12 V rail is either Pulsar output (mains present) or battery (outage). That rail feeds the T3000, the boost module, and a small buck for the monitoring board. The boost module makes the ~48 V PoE rail that feeds the injector (MC889) and the TL-SG1005LP (cameras).
Pulsar does the hard part: seamless DC hold-up without me designing FET ORing and charge curves from scratch. I only had to add the boost stage and the brains.
Monitoring & UI
On top of the power path sits a Raspberry Pi Pico 2W (RP2350) running ESPHome, talking to Home Assistant the usual way.
- Buck 12 V → 5 V for the Pico and the display (also battery-backed - monitoring has to survive the outage it is supposed to report)
- INA226 on the 12 V / battery side (0.01 Ω shunt, ≤ 5 A)
- INA238 on the PoE output (0.01 Ω shunt, ≤ 2 A)
- 1.3 inch OLED display for quick info
Closing the ntfy loop
The Pico publishes battery voltage/current/power, PoE voltage/current/power, plus binary sensors for mains, DC present, and charging. That closes the loop that started this whole digression: when the floor with the Eaton UPS loses power and the cabinet UPS takes over, I still have WAN long enough for ntfy (and everything else) to actually leave the network.
Notes
We’ll need to add forced ventilation. During charging or heavy load, AGM VRLA batteries can release some hydrogen - we don’t want that inside the enclosure. Ventilation will also help in summer so we don’t cook everything inside.
A standard 120 mm 12 V PC fan should do just fine, installed at the bottom to push air in. Warm air rises, and a push intake creates positive pressure, which means less dust gets sucked into the enclosure.
This is still a work in progress (and of course subject to last minute changes), so expect an update post when everything is done and working.
Meanwhile, pictures of the process:




Whole room is a mess, but at least it's colorful around here!