An off grid solar homelab design manual comes down to seven steps taken in order: meter the load, shrink it, choose DC or inverter distribution, set days of autonomy, size the LiFePO4 bank, size the array for the worst month, then fuse everything and wire the battery into automated shutdown. At a site with three worst-month sun hours, a 40 W lab needs roughly 3.3 to 4.1 kWh of battery and 600 to 750 W of panels.
Each step’s output feeds the next, and most bad builds start at step five because panels are the fun part to buy. Be honest about needing off-grid at all: with a working utility connection, a UPS covers outages for far less money. This is for the cabin, the shed with no utility drop, and anyone who has decided to do it anyway. The full arithmetic lives in sizing an off-grid solar system for always-on homelab loads; this page is the order of operations.
Step 1: Meter the load, then make it smaller
Put a plug-in energy meter between the wall and the power strip for a full week that includes a backup job and a scrub. Average watts times 24 is your daily watt-hours. Ignore nameplates and TDP. Intel rates the N100 at a 6 W TDP, but the mini-PC also feeds RAM, an NVMe drive, a NIC and its brick’s losses, and only the wall figure counts.
Then cut, because this is the cheapest step. In the worked example below, every watt removed takes about 83 Wh off the bank and 15 W off the array. Let NAS disks spin down when idle, move VMs off the old tower onto the mini-PC, and unplug the 10 GbE switch you bought because it was on sale. The free dual-socket server from work becomes the most expensive machine you own the day it runs on batteries.
Step 2: Should the lab run on DC or through an inverter?
Run on DC wherever the hardware allows, and use an inverter only for what can’t. Mini-PCs, routers and small switches that ship with external bricks can usually be fed from a DC-DC converter instead. An inverter idling at 10 W burns 240 Wh a day before anything is plugged in, a quarter of a 40 W lab’s 960 Wh daily budget.
Two rules on the DC side. A LiFePO4 bus voltage moves with state of charge and rises further while charging, so put a regulated DC-DC converter between the bus and anything expecting a fixed 12 V or 19 V. Never wire a “12 V” device straight onto a “12 V” battery. And give every converter its own fuse at the distribution point.
Some hardware still needs AC: NAS units with internal power supplies, anything with a server PSU. Choose that inverter on its datasheet no-load draw, not its surge rating, and only reach for 120/240 V if you actually have 240 V loads, as covered in split-phase inverter for an off-grid homelab.
Step 3: How many days of autonomy does a homelab need?
One to two days, provided there is a fallback: a generator, a grid connection, or a list of services you are willing to stop. IEEE 1562 recommends 5 to 7 days for non-critical loads in sunny areas and 7 to 14 days for critical loads or low-sun sites, sized against the month with the least sun and highest load, according to SunWize’s summary of the standard. That guidance assumes the array is the only charger.
Before picking a number, split the lab into two tiers. The core tier is the router, DNS, Home Assistant and whatever you need to manage the rest remotely. The shed tier is the NAS, the media server, CI runners and the game server your friends forgot about. A lab that drops from 40 W to 20 W in bad weather gets roughly twice the runtime from the same bank, which is far cheaper than buying a third day. Step 7 automates the drop.
Steps 4 and 5: Size the bank and the array together
Size these in one sitting, because a bank the array cannot refill in the worst month only delays the outage. Here is the 40 W lab both ways. Assumptions: 90% conversion efficiency, 10 W inverter idle where an inverter exists, two days of autonomy, 80% depth of discharge, a further 80% end-of-life margin, three worst-month peak sun hours and a 25% array derate.
| Step | DC-direct | Through an inverter |
|---|---|---|
| Load at the wall, 40 W × 24 h | 960 Wh | 960 Wh |
| Off the battery at 90% | 1,067 Wh | 1,067 Wh |
| Plus inverter idle, 10 W × 24 h | 1,067 Wh | 1,307 Wh |
| Two days of autonomy | 2,133 Wh | 2,613 Wh |
| ÷ 0.8 depth of discharge | 2,667 Wh | 3,267 Wh |
| ÷ 0.8 end-of-life margin | 3,333 Wh | 4,083 Wh |
| Array: daily ÷ (3 h × 0.75) | 474 W | 581 W |
| × array-to-load ratio 1.3 | 616 W | 755 W |
The array-to-load ratio is IEEE 1562’s margin: 1.1 to 1.2 for non-critical loads in sunny areas, 1.3 to 1.4 for critical loads or low insolation, per the same SunWize summary. That headroom is what lets the array put back what a cloudy stretch took instead of merely breaking even.
In hardware, the DC column is three 12.8 V 100 Ah batteries (3.84 kWh). The inverter column needs four, or one 51.2 V 100 Ah rack module at 5.12 kWh. The inverter cost a whole battery and about 140 W of panels. Depth of discharge, cold-weather margins and bank voltage are worked through in LiFePO4 battery bank sizing, and finding your worst-month sun hours is covered in how many solar panels a homelab needs.
Step 6: Pick the voltage, the controller and the protection
At 40 W, a 12.8 V or 25.6 V bank keeps DC-direct simple; move to 48 V once a kilowatt-class inverter arrives. Use an MPPT controller and confirm the array’s open-circuit voltage on the coldest morning stays under the controller’s input limit, the classic way controllers die, explained in MPPT vs PWM charge controllers for homelab solar.
Protection is the part nobody photographs and the part that starts fires. Fit a fuse rated for the battery’s short-circuit current as close to the positive terminal as practical, add a battery disconnect, fuse each branch, and size cable for voltage drop, not ampacity alone. Keep the bank above freezing: a LiFePO4 BMS blocks cold charging, which looks exactly like a fault (see LiFePO4 solar battery not charging?).
In the US, Article 690 of the National Electrical Code governs the PV side, including rapid shutdown; Article 706 covers energy storage listing, disconnects, DC voltage limits and overcurrent protection; and Article 710 covers stand-alone systems, where supply capacity must at least equal the largest single load, according to Mayfield Renewables’ breakdown. Your local inspector decides which code edition applies, so ask before you buy parts.
Step 7: Wire the battery into shutdown
The BMS low-voltage cutoff is a protection device, not an operating limit, and hitting it drops every host at once, mid-write. The fix is turning state of charge into something your servers already understand: a NUT UPS.
One clean path uses a shunt-based battery monitor feeding a Victron GX device running Venus OS. Enable MQTT under Settings, Services, MQTT. The broker listens on TCP 1883 and/or 8883 depending on security settings, and values only flow after you publish to R/<portal ID>/keepalive, which times out after 60 seconds (dbus-flashmq README). State of charge is the /Dc/Battery/Soc path on the system service (Venus OS D-Bus wiki). Modbus-TCP also works but is off by default (Victron Modbus-TCP FAQ).
NUT’s dummy-ups driver reads a definition file that an external process may rewrite, re-reading .dev files when their timestamp changes (dummy-ups manual). The bridge is short:
# /etc/nut/ups.conf
[solar]
driver = dummy-ups
port = solar.dev
desc = "LiFePO4 bank via Venus OS"
#!/usr/bin/env bash
# soc-bridge.sh: copy Venus OS state of charge into NUT every 30 s
GX=192.168.1.50; ID=your-portal-id; DEV=/etc/nut/solar.dev
while true; do
SOC=$( (sleep 1; mosquitto_pub -h "$GX" -t "R/$ID/keepalive" -n) &
mosquitto_sub -h "$GX" -C 1 -W 10 -t "N/$ID/system/0/Dc/Battery/Soc" |
jq -r '.value | floor' )
if [[ "$SOC" =~ ^[0-9]+$ ]]; then
if (( SOC < 25 )); then STATUS="OB LB"; else STATUS="OL"; fi
printf 'battery.charge: %s\nups.status: %s\n' "$SOC" "$STATUS" > "$DEV.tmp"
mv "$DEV.tmp" "$DEV"
fi
sleep 30
done
The NUT server runs upsmon as primary and every other host runs it as a secondary. Secondaries shut down immediately when the UPS goes critical (on battery plus low battery), and the primary waits up to 15 seconds by default for them to disconnect (upsmon manual). For the shed tier, have the script write a second dummy-ups device that goes critical at 50%, and point only those hosts at it. Keep both thresholds well above the BMS cutoff.
Three gotchas. If the bridge dies, nothing notices: dummy-ups keeps reporting the last file it read, so alert on the file’s age. GX security settings may require TLS and credentials on the MQTT calls. And hosts will not return by themselves, because power never dropped and the BIOS “restore on power loss” setting never fires; wake them over LAN from a core-tier box, or put shed-tier converters behind a relay and cycle it. Then test it on purpose: raise the threshold to 95% on a sunny afternoon and watch what actually shuts down.
FAQ
can you run a homelab on solar power alone?
Yes, if the load is small and the array is sized for the worst month, not the annual average. A 40 W mini-PC and NAS lab runs on about 4 kWh of LiFePO4 and 750 W of panels where the worst month gives three sun hours. Enterprise rack servers are a different, generator-shaped project.
should a homelab solar battery be 12v, 24v or 48v?
Use 12.8 V or 25.6 V for a lab under a few hundred watts that runs mostly on DC, where currents stay modest. Move to 48 V once a kilowatt-class inverter or bigger loads join, because the same power draws a quarter of the 12 V current, which shrinks cable, fuses and voltage drop.
what happens to my servers when the solar battery runs out?
Without automation, the battery management system opens its low-voltage cutoff and every machine loses power at once, mid-write. With state of charge feeding NUT, hosts shut down cleanly at thresholds set above that cutoff. Something always-on then has to wake them, because the power never technically went away.
what size inverter do i need for an off grid homelab?
Pick the smallest inverter that covers your continuous AC load plus startup surge, judged on its no-load draw rather than its peak rating, because idle draw runs all day. In the US, NEC Article 710 also requires stand-alone supply capacity to at least equal the largest single load connected to it.