Battery Runtime Calculator
Estimate battery runtime from capacity (Ah or mAh), voltage, and constant load in watts (load-side) or amps (battery-side), with planning DoD and load-side efficiency. Runs locally in your browser.
Trust summary CVP VERIFIED · CVP protocol 1.0.0-proposed · Engineering assurance
- Input interpretation
- Enter values to calculate.
- Result
- —
- Assurance
- Engineering
- Declared partition coverage
- PASS · 3/3 declared partitions (watts, amps, invalid-domain) · Matrix
- Known limitations
- Constant load; no Peukert / temp; CVP goldens omit u_* GUM path
- Core CVP does not include live graph, viewport, or pointer interaction.
- Model
- Constant-load battery runtime (hours/days) and usable energy (Wh) from capacity, voltage, load, DoD, and (watts mode) load-side efficiency; optional expanded uncertainty on t_h.
- Scope
- Constant load; ideal flat voltage until capacity is exhausted.
- Verification
- Engine tested · Source checked · v1.2.1 · CVP VERIFIED · CVP protocol 1.0.0-proposed · Engineering assurance· View Manifest · CVP overview · Specification
- Versions
- Calculation 1.2.1 · CVP protocol 1.0.0-proposed · Evidence 2026-09-11.schema-coverage-u
- Verification revision
- 2026-09-11.schema-coverage-u · 10/10 property · digest 058cf03cbe19
- Legacy regression
- 25/25 tests · Production surface contract 6/6
- Reference
- O1 model · O2 expected_values · O2 numerical_behavior
- Interfaces
- PASS · UI (SSR) / REST / MCP
- Supplemental domain review
- Internal · Pass · electrical-engineer · 2026-08-12
- Named expert review
- Not performed
- CVP suite
- 3/3 golden · 9/9 CVP boundary · 7/7 invalid · 10/10 property · 1/1 cross-interface · 6/6 CVP contract · Manifest
- Sources
- IEC 60050 — International Electrotechnical Vocabulary
- IEC 61960 series (portable secondary lithium)
- Victron Energy — Battery capacity and Peukert exponent
- NIST Guide to the SI (SP 811)
- Evidence
- 5 legacy golden · 10 legacy boundary · legacy regression suite · 3/3 oracle-backed golden · 7/7 invalid · Artifact integrity PASS · CalculatorX electrical review
- Semantic contract
- PASS
Full verification
Formulas
Core equations used by this calculator.
How to use
Choose load in watts or amps
Watts = delivered load-side power (η applies). Amps = battery-side discharge current (η not used).
Enter capacity and voltage
Use Ah or mAh (not both). Nominal pack voltage.
Optional DoD and efficiency
Planning limits, not chemistry. Defaults are 1 (100%). η applies in watts mode only.
Optional uncertainties
Enter u(*) for capacity, V, load, DoD, or η to show t ± U (k=2 by default) via the Uncertainty Engine.
Example calculations
Common configurations with formula and result.
12 V nominal battery — first-order
10 Ah · 12 V · 20 W · DoD 0.8 · η 0.9
Full DoD / ideal efficiency
10 Ah · 12 V · 20 W
From mAh
5000 mAh · 3.7 V · 1 W
Battery-side current
10 Ah · 12 V · 2 A · DoD 0.8
With capacity & power uncertainty
10 Ah · 12 V · 20 W · DoD 0.8 · η 0.9 · u(Ah)=0.5 · u(P)=1 · k=2
Illustrative runtimes (DoD=1, η=1)
Common values at a glance.
| Capacity | Voltage | Load | Runtime |
|---|---|---|---|
| 10 Ah | 12 V | 20 W | 6 h |
| 10 Ah | 12 V | 2 A | 5 h |
| 5 Ah | 3.7 V | 1 W | 18.5 h |
| 100 Ah | 12 V | 100 W | 12 h |
Battery Runtime calculator specification
Version 1.2.1 · Engine tested · Supplemental domain review · Internal · 2026-08-12
- Engine tested 25/25 tests · Production surface contract 6/6
- Supplemental domain review Internal · Pass · electrical-engineer · 2026-08-12
- Named expert review Not performed
- Calculation version 1.2.1
Review policy · Evidence · Reviewed by CalculatorX electrical review (electrical-engineer)
- Definition
- Battery runtime is how long a pack can supply a load before usable capacity is exhausted. This calculator estimates constant-load runtime from capacity, nominal voltage, load (W load-side or A battery-side), planning depth of discharge (DoD), and load-side delivery efficiency (watts mode).
- What it calculates
- Constant-load battery runtime (hours/days) and usable energy (Wh) from capacity, voltage, load, DoD, and (watts mode) load-side efficiency; optional expanded uncertainty on t_h.
- Inputs
- mode: watts (P_W load-side) or amps (I_A battery-side)
- capacity_Ah > 0 XOR capacity_mAh > 0
- V > 0 (nominal volts)
- P_W > 0 when mode=watts; I_A > 0 when mode=amps
- Optional dod, eta in (0, 1]; default 1 — planning knobs; eta unused in amps mode
- Optional u_capacity_Ah, u_V, u_P_W, u_I_A, u_dod, u_eta ≥ 0; optional uncertainty_k (>0, default 2) XOR confidence — either coverage field requires at least one u_*
- Outputs
- t_h — runtime hours
- t_d — runtime days (t_h/24)
- E_Wh — usable energy Wh (watts: Ah×V×DoD×η; amps: Ah×V×DoD)
- uncertainty — optional UncertaintySummary when any u_* is set
- Formula
watts: E=Ah·V·DoD·η, t=E/P; amps: E=Ah·V·DoD, t=(Ah·DoD)/I; optional U=k·u_c(t)- Assumptions
- Constant load; ideal flat voltage until capacity is exhausted.
- DoD and η are independent planning knobs, not chemistry models.
- Amps mode I_A is battery-side discharge current; η does not enter t_h.
- When u_* are set, first-order GUM sensitivity with independent inputs (no ρ on this page).
- Units
- Ah, V, W or A → h, d, Wh
- Boundary conditions
- Missing capacity → MISSING_REQUIRED_INPUT
- Both capacity_Ah and capacity_mAh → INVALID_INPUT
- V ≤ 0 → VOLTAGE_MUST_BE_POSITIVE
- P_W/I_A ≤ 0 → LOAD_MUST_BE_POSITIVE
- dod/eta outside (0,1] → FRACTION_OUT_OF_RANGE
- Unknown mode → INVALID_MODE
- uncertainty_k without any u_* → INVALID_INPUT
- uncertainty_k and confidence together → INVALID_INPUT
- Example
- 10 Ah, 12 V, 20 W, DoD 0.8, η 0.9 → t_h = 4.32, E_Wh = 86.4
- Validation cases
12 published on this page · 25/25 tests · Production surface contract 6/6 · View evidence
- 10 Ah, 12 V, 20 W, DoD 1, η 1 → t_h = 6, E_Wh = 120
- 10 Ah, 12 V, 20 W, DoD 0.8, η 0.9 → t_h = 4.32, E_Wh = 86.4
- 5000 mAh, 3.7 V, 1 W → t_h = 18.5, E_Wh = 18.5
- 10 Ah, 12 V, 2 A (amps mode) → t_h = 5, E_Wh = 120
- 10 Ah, 12 V, 2 A, DoD 0.8, η 0.9 (amps) → t_h = 4, E_Wh = 96 (η ignored)
- DoD/η example + u_capacity_Ah=0.5, u_P_W=1 → t_h=4.32 with uncertainty.U≈0.61 (k=2)
- missing capacity → error MISSING_REQUIRED_INPUT
- both capacity_Ah and capacity_mAh → error INVALID_INPUT
- V = 0 → error VOLTAGE_MUST_BE_POSITIVE
- P_W = 0 → error LOAD_MUST_BE_POSITIVE
- dod = 1.2 → error FRACTION_OUT_OF_RANGE
- mode = dc → error INVALID_MODE
- Sources
- IEC 60050 — International Electrotechnical Vocabulary — Electric battery capacity and related quantitiesSupports: Ah capacity and Wh energy relationship E ≈ Q·V for nominal estimates
- IEC 61960 series (portable secondary lithium) — Capacity / performance concepts for portable Li cells and batteriesSupports: Nameplate capacity language for portable secondary lithium; not a lead-acid Peukert model
- Victron Energy — Battery capacity and Peukert exponent — Battery monitor documentation (BMV)Supports: Why usable Ah falls with discharge rate; Peukert as reason simple Ah×V estimates differ from field runtime
- NIST Guide to the SI (SP 811) — Coherent derived units for energy and timeSupports: Wh and hour as energy/time units in estimates
- IEC 60050 — International Electrotechnical Vocabulary — Electric battery capacity and related quantities
- Last reviewed
- 2026-08-12
- Reviewed by
- CalculatorX electrical review (electrical-engineer)
- Calculation version
- 1.2.1
Background
Interpretation and common distinctions.
Estimate battery runtime under a constant load from pack capacity, voltage, and load in watts (load-side power) or amps (battery-side current), with optional planning DoD and load-side efficiency. Optional standard uncertainties (u_*) compose an expanded interval on runtime via the Uncertainty Engine.
Status: Battery Runtime Basic v1.2.1 — Frozen model. Pin calculation_version: 1.2.1. Same constant-load formulas as 1.2.0; Agent schema now requires at least one u_* when uncertainty_k or confidence is set. Do not stack Peukert / temperature / duty-cycle / pack workspace into this page — those are separate capabilities.
Default example: 10 Ah · 12 V · 20 W · DoD 0.8 · η 0.9 → 4.32 h (usable 86.4 Wh).
Product position
Battery Runtime
├── Basic (this page, frozen 1.2.1)
│ Ah/mAh · V · W/A · DoD · η · first-order u_*
├── Temperature → electrical.battery.runtime_temp
├── Pack sizing → electrical.battery.pack_sizing
└── Future (separate)
Peukert · Duty cycle · Manufacturer curves · Pack/System Workspace
Supported and not supported
Supported
- Constant watt (load-side) or amp (battery-side) load
- Capacity in Ah or mAh (mutually exclusive)
- Planning DoD and load-side efficiency fractions in (0, 1]
- Optional standard uncertainties on capacity, V, P/I, DoD, η with coverage k (default 2)
- API result
{ t_h, t_d, E_Wh, uncertainty? }viaelectrical.battery_runtime
Not supported
- Peukert / high C-rate capacity loss
- Temperature derating (see Battery Runtime with Temperature /
electrical.battery.runtime_temp) - Multi-step duty cycles or sleep currents
- BMS cutoff voltage modeling or pack sizing (see future pack tools)
- Monte Carlo / correlation / νeff UI on this page (use Uncertainty Propagate directly)
Agent / API notes
Capability id: electrical.battery_runtime · tool id: battery-runtime · pin calculation_version: 1.2.1.
Input schema is mode-discriminated (oneOf): watts requires P_W; amps requires I_A (battery-side discharge current; η ignored); capacity_Ah XOR capacity_mAh; uncertainty_k XOR confidence; uncertainty_k/confidence require at least one contributing u_*. Pin calculation_version: 1.2.1.
Canonical response inputs always echo capacity_Ah (mAh alias resolved); amps omits eta / P_W; watts omits I_A.
Stable error codes: MISSING_REQUIRED_INPUT, INVALID_NUMBER, INVALID_MODE, CAPACITY_MUST_BE_POSITIVE, VOLTAGE_MUST_BE_POSITIVE, LOAD_MUST_BE_POSITIVE, FRACTION_OUT_OF_RANGE, VALUE_MUST_BE_NON_NEGATIVE, INVALID_INPUT.
When any u_* is set, the engine calls engineering.uncertainty.propagate (sensitivity) and attaches an UncertaintySummary ($ref /schemas/common/uncertainty-summary.json) { u_c, U, k, coverage, contributions, … } on t_h. Empty u_* preserves the nominal-only result.
Capability family & namespace
This Basic page is frozen at calculation_version 1.2.1. Related tools:
| Role | Capability id (public today) | Future preferred id |
|---|---|---|
| Basic runtime (frozen) | electrical.battery_runtime |
electrical.battery.runtime |
| + temperature | electrical.battery.runtime_temp |
electrical.battery.runtime.temperature |
| Pack sizing (inverse) | electrical.battery.pack_sizing |
electrical.battery.pack_sizing |
No breaking rename yet. When Agents and catalog consumers are ready, expose preferred ids with deprecated aliases pointing at the current public ids.
Future layers (separate pages/capabilities): Peukert, duty cycle, manufacturer curves, Pack Runtime Workspace — not stacked into this Basic page.
How the estimate works
Watts mode — P_W is delivered load-side power; η is load-side delivery efficiency:
E(Wh) = Q(Ah) × V × DoD × eta, tₕ = (E(Wh))/(P(W))
Amps mode — I_A is battery-side discharge current (converter loss already in the current); η does not enter runtime:
E(Wh) = Q(Ah) × V × DoD, tₕ = (Q(Ah) × DoD)/(I(battery))
Days are reported as t(d) = tₕ / 24.
Optional uncertainty
When you supply one or more standard uncertainties u(xᵢ), runtime is treated as tₕ = f(…) and combined with GUM sensitivity coefficients partial t/partial xᵢ. Expanded uncertainty uses coverage factor k (default 2):
u_c(t) = √(sumᵢ (cᵢ uᵢ)²), U = k u_c
Result UI shows tₕ ± U and contribution bars when any u_* is present.
Choosing DoD and efficiency
DoD and η are planning knobs, not chemistry models inferred by CalculatorX.
| Situation | Typical DoD | Typical η (watts mode) |
|---|---|---|
| One-shot drain to empty (ideal) | 1.0 | 1.0 |
| Conservative longevity limit | 0.5–0.8 | 0.85–0.95 |
| Li-ion with inverter (load-side W) | 0.8–0.95 | 0.85–0.95 |
In amps mode, enter the measured battery current and leave η unused.
Related tools
Other calculators in this family: Battery Pack Sizing Calculator, Battery Runtime with Temperature, Linear Battery Aging Calculator . Explore all Battery & Energy Storage.
Frequently asked questions
Key distinctions behind the calculation.
How do I calculate battery runtime?
Watts (load-side): E(Wh) = Ah × V × DoD × η, then t(h) = E / P. Amps (battery-side): t(h) = (Ah × DoD) / I — η is not applied, because converter loss is already in the measured battery current.
Should I enter Ah or mAh?
Either, but not both. If you only have mAh, enter capacity_mAh (or the mAh field in the UI). The engine converts Ah = mAh / 1000.
What is depth of discharge (DoD)?
A planning limit: the fraction of nameplate capacity you intend to use. It is not inferred from chemistry. Enter 0.8 for 80%.
What is efficiency η?
Load-side delivery efficiency in watts mode (converter/wiring). 0.9 means about 90% of pack energy reaches the load. In amps mode η is ignored — use battery-side current only.
Why is this shorter than the manufacturer chart?
Charts include Peukert effects, temperature, and cutoff voltage. Capacity vs discharge rate is especially visible for lead-acid. This tool is a constant-load first estimate — not a datasheet replacement.
What if load power is zero or missing?
The API rejects the request with LOAD_MUST_BE_POSITIVE or MISSING_REQUIRED_INPUT. Zero load is not treated as infinite runtime.
How do optional uncertainties work?
Provide standard uncertainties u_capacity_Ah, u_V, u_P_W or u_I_A, u_dod, and/or u_eta. The engine composes them with GUM sensitivity on t_h via engineering.uncertainty.propagate (default k=2) and returns an UncertaintySummary { u_c, U, k, contributions, … }. Leave all u_* empty for the nominal-only result.