How to size an off-grid solar system: panels, battery and inverter

Add up each appliance's daily watt-hours and divide by inverter efficiency. Divide that by worst-month peak sun hours times a loss factor (0.780 in our example), plus a 10% margin, to get array watts. Battery capacity is daily energy times days of autonomy divided by depth of discharge. Then check cold-weather string Voc and inverter surge.

Sizing an off-grid system is a chain of six steps, each feeding the next. This guide follows the same order and the same default factors as our Off-Grid Solar + Battery Sizing Calculator. It ends with a full worked example for a small 48 V cabin.

Step 1: list your loads and add up daily watt-hours

For every appliance, note quantity, watts, hours per day, and whether it runs at the busiest moment. Energy per day is quantity × watts × hours; add them up for watt-hours (Wh) per day.

Keep AC and DC loads apart. The battery supplies each AC watt-hour divided by the inverter efficiency (0.93 in our example), and each DC watt-hour divided by the DC wiring efficiency (0.97).

The load list also gives two numbers for the inverter:

Daily load table in the solar calculator with quantity, watts, hours, peak and surge columns

Step 2: find peak sun hours for the worst month

Peak sun hours (PSH) is the daily solar energy on the panel in kWh/m², expressed as hours at 1,000 W/m². Free tools give it for almost any location: PVGIS from the European Commission's Joint Research Centre, NASA POWER, and PVWatts with the National Solar Radiation Database (NSRDB) from the US National Laboratory of the Rockies.

With no backup, design for the worst month you need to run in, at the tilt you will actually mount the panels. Every other month then has a surplus.

Step 3: size the PV array with a loss margin

Our calculator multiplies five losses into one derate: PV temperature loss (10 %), soiling (3 %), DC wiring and mismatch (3 %), MPPT efficiency (0.97) and battery charge efficiency (0.95 for LiFePO4). Then:

Array Wp = daily energy from battery ÷ (peak sun hours × derate) × (1 + design margin)

The 10 % default margin covers load growth and module ageing. Divide by the module's rated power and round up for the minimum module count.

Step 4: check string voltage against cold-temperature Voc

Check three limits from the charge controller (or hybrid inverter) datasheet:

  1. Maximum input voltage. Voc rises as temperature falls. Cold Voc = Voc × (1 + coefficient ÷ 100 × (Tmin − 25)), with the coefficient as a negative %/°C. Modules in series × cold Voc must not exceed the limit. The IAEI article in the sources works through the same correction under NEC 690.7.
  2. MPPT window. String Vmp on the hottest day must stay above the MPPT minimum, and on the coldest day below the maximum. Our calculator uses the Pmax coefficient for Vmp if no Vmp coefficient is listed.
  3. Current per tracker. Strings per MPPT × Isc × 1.25 must not exceed the tracker's current limit.

The calculator takes the longest string the limits allow, works out the strings needed, then evens out the string length.

Step 5: size the battery bank with autonomy and depth of discharge

Nominal capacity (Wh) = daily energy from battery × days of autonomy ÷ depth of discharge

Autonomy is how many days the bank carries the load with no sun. For depth of discharge (DoD) our calculator suggests 0.8 to 0.9 for LiFePO4 and 0.5 for lead-acid. Divide by system voltage for amp-hours, then set units in series (system voltage ÷ unit voltage) and strings in parallel (Ah needed ÷ unit Ah, rounded up).

Step 6: pick the charge controller and the inverter

Worked example: a 48 V off-grid cabin

The example that ships with our calculator: a cabin on a 48 V LiFePO4 bank, with 4.5 peak sun hours in the design month, 2 days of autonomy, a lowest site temperature of 5 °C and a hottest cell temperature of 70 °C. Every number below is printed by scripts/examples/how-to-size-an-off-grid-solar-system.py.

Load list

LoadTypeQtyW eachh/dayWh/dayPeak WExtra surge W
LED lightsAC895360720
RefrigeratorAC11208960120360
Chest freezerAC190981090270
TVAC1804320800
LaptopsAC26056001200
Water pumpAC175017507501,500
Ceiling fansAC35581,3201650
MicrowaveAC111000.2527500
Washing machineAC1500150000
Wi-Fi routerDC1122428800
Phone chargersAC310260300

The microwave and washing machine are not on at the busiest moment, so they add energy but not peak load.

Energy and array

QuantityCalculationResult
AC energy per daysum of AC loads5,955 Wh
DC energy per dayrouter288 Wh
Energy from battery5,955 / 0.93 + 288 / 0.976,700 Wh/day
PV derate(1 − 0.10) × (1 − 0.03) × (1 − 0.03) × 0.97 × 0.950.780
Required array6,700 × 1.10 / (4.5 × 0.780)2,099 Wp
Minimum 450 W modules2,099 / 450, rounded up5

String check (controller: 250 V max input, MPPT 70–240 V, 35 A)

QuantityResult
Module Voc at 5 °C (49.5 V, −0.27 %/°C)52.17 V
Module Vmp at 70 °C (41.5 V, −0.35 %/°C)34.96 V
Module Vmp at 5 °C44.41 V
Max modules per string4
Min modules per string3
Layout used2 strings × 3 modules = 6 modules
Installed array2,700 Wp
String Voc when cold156.5 V (limit 250 V): OK
String Vmp, hot to cold104.9 to 133.2 V: inside 70–240 V
Current per MPPT2 × 11.6 × 1.25 = 29.0 A (limit 35 A): OK

Five modules in one string would reach 260.9 V on a cold morning, above the 250 V limit. That is why the calculator splits six modules into two strings of three, even though five modules would meet the energy target.

System Design sheet showing the battery bank, charge controller and inverter checks

Battery, controller and inverter

QuantityCalculationResult
Usable energy6,700 × 2 days13,400 Wh
Nominal capacity13,400 / 0.8 DoD16,750 Wh
At 48 V16,750 / 48349 Ah
Battery units (12.8 V, 200 Ah)4 in series × 2 in parallel8 units, 20.48 kWh
Autonomy delivered20.48 kWh × 0.8 / 6,700 Wh2.4 days
Controller current2,700 / 48 × 1.25 = 70.3 A80 A controller
Inverter continuous1,427 × 1.25 = 1,783.75 W2,000 W inverter
Surge check2,000 × 2 = 4,000 W vs 2,927 WOK
Inverter DC current at full load2,000 / (48 × 0.93)44.8 A

The water pump sets the surge: 750 W running with a 3× start multiplier adds 1,500 W on top of the 1,427 W peak running load.

Limits of this method

This is a monthly-average energy balance, not an hour-by-hour simulation: no shading, battery ageing or cloudy spells longer than your autonomy. Use it to size a system, compare quotes and catch an over-voltage string, and follow your local rules (for example IEC 62548 or NEC Article 690).

Disclaimer: Estimation aid. Check against your local code and equipment datasheets.

Questions

Should I use the annual average or the worst month for peak sun hours?

For an off-grid system, use the worst month you need to cover. An annual average leaves the battery short in the darkest months. A hybrid system with a generator or grid can design for a better month.

What depth of discharge should I use for LiFePO4 and lead-acid?

Our calculator suggests 0.8 to 0.9 for LiFePO4 and 0.5 for lead-acid, with round-trip efficiency around 0.95 and 0.80 to 0.85. Use your battery's datasheet figures when you have them.

Why does the coldest temperature matter for the panels?

Module open-circuit voltage rises as it gets colder. If the string's cold Voc passes the controller's maximum input voltage, the controller can be damaged, so cold Voc sets the string length.

Is this method good enough for a bankable design?

No. It is a monthly-average energy balance for first sizing and checking quotes. For a bankable design use simulation software such as PVsyst or SAM and have a qualified installer or engineer review it.

Sources

Updated 2026-10-26 · by tobulab