Reference
Methodology
How does SnapEnergyLab calculate its results?
Each result comes from a single shared engine — one for consumption and cost, one for battery storage, one for EV charging, one for heating comparison and one for solar generation. No page contains its own arithmetic, so the same inputs always produce the same answer everywhere on the site. Every result shows its formula, its assumptions and a confidence level, and every default value is editable. Rounding is applied only at display time, never between calculation steps.
Consumption and cost — energyEngine
The base relationship converts power and time into energy, then energy into money. Duty cycle scales the running hours to reflect the share of that time the appliance actually draws rated power, and standby power is added for the remaining hours of the day.
kWh_per_day = (watts × hours_per_day × duty_cycle + standby_watts × (24 − hours_per_day)) ÷ 1000cost_per_day = kWh_per_day × rate; month = day × 30.44; year = day × 365.2425One month means 30.44 days everywhere on this site — 365.2425 ÷ 12, the average length of a calendar month once leap years are included. A year is 365.2425 days, so twelve months add up to exactly one year and a daily, monthly and annual figure can never contradict each other. A 30-day month is deliberately not used: it understates every monthly estimate by about 1.5% and makes twelve months fall five days short of a year. The only exception is a tool that asks you for a specific number of days; that number is then used literally.
Storage — batteryEngine
Nominal capacity is reduced twice before it reaches an AC load: once by the depth-of-discharge limit and any reserve you set, and once by inverter conversion efficiency.
kWh = (Ah × V) ÷ 1000 | usable_dc = nominal × usable_fraction × (1 − reserve)effective_ac = usable_dc × inverter_efficiency; runtime_hours = effective_ac ÷ (load_watts ÷ 1000)Sizing runs the same relationship backwards, dividing the required AC energy by the same two factors. Power constraints are checked separately: continuous load against the inverter’s continuous rating, and motor start surge against its surge rating. Failing a power check produces a warning regardless of how large the battery is.
EV charging — evEngine
energy_from_wall = energy_into_pack ÷ (1 − charging_loss)charge_hours = energy_into_pack ÷ (charger_kW × charging_efficiency)Charging cost is always based on energy drawn from the wall, since that is what the meter records. Time is based on energy reaching the pack at the sustained charging power. Real DC fast charging tapers steeply above roughly 80% state of charge, so times in that region are flagged rather than extrapolated.
Heating comparison — heatPumpEngine
heat_delivered = electricity × COP | electricity = heat_delivered ÷ COPBoth systems are compared at identical delivered heat. Resistance heating is treated as COP 1.0. The heat pump figure should be a seasonal average (SCOP), and results are labelled a scenario estimate because that single input dominates the outcome. Equipment, installation and incentives are excluded entirely.
Generation — solarEngine
annual_kWh = system_kW × specific_yield_kWh_per_kW × (1 − system_losses)Specific yield comes from regional irradiance data rather than a global constant, and system losses default to the 14% used by NREL PVWatts, covering soiling, wiring, mismatch, inverter conversion and availability. Monthly distribution uses a seasonal shape for the region; it is indicative, and a site-specific simulation with real shading data will differ.
Conventions applied everywhere
Rounding happens only when a number is displayed. Currency shows two decimals, or three when a rate per kWh needs them. Runtime is expressed in hours and minutes below a day and in days above it. Percentages are shown as whole numbers unless a fraction of a percent changes the decision.
Confidence is stated on every result: a deterministic calculation when the output follows directly from your inputs, a modelled estimate when a dataset stands between input and output, and a scenario estimate when a dominant assumption such as SCOP or duty cycle drives the answer. Where a real range exists, the range is shown rather than a false midpoint.
Engine versions
| Module | Responsibility | Version |
|---|---|---|
| energyEngine | Consumption and cost for any load | energyEngine-1.2.0 |
| batteryEngine | Runtime, sizing and backup profiles | batteryEngine-1.2.0 |
| evEngine | Charging cost and charging time | evEngine-1.2.0 |
| heatPumpEngine | Heating system comparison | heatPumpEngine-1.0.0 |
| solarEngine | Generation modelling | solarEngine-1.0.0 |
| defaults | Central registry of default values | defaults-1.0.0 |
| format | Display rounding and units | format-1.0.0 |
What this methodology cannot do
Reference
- Data sourcesSources, update frequency and fallback behaviour.
- AssumptionsEvery default value and why it has that value.
- AboutWhat this site is and how it stays independent.
- PrivacyLocal-first settings and minimal collection.
- TermsTerms covering use of the calculators.
- DisclaimerWhat a calculated estimate can and cannot tell you.