A consumption profile translates the appliance reference tables of Chapter 2 into a time-series of power demand. This is the central input to all sizing calculations for solar and storage systems.
Annual kWh tells you how much energy you use. A profile tells you when you use it. The timing is essential because:
Two households with the same annual consumption but different profiles need very different solar+storage systems.
The simplest useful model is an hourly load profile for a representative day. Construct it as follows:
Step 1: List all appliances in your home.
Step 2: For each appliance, assign:
Step 3: For each hour h (0–23), sum contributions:
Load(h) = Σ [Power_i × DutyCycle_i × Active_i(h)]
where Active_i(h) = 1 if appliance i is expected to run during hour h, 0 otherwise.
Household: 4 persons, 120 m², temperate climate, average usage habits. Heating: Gas (not counted). Hot water: Electric resistance tank (300L, 2,500 W, 3h/day cycling).
| Appliance | Power (W) | Duty Cycle | Active Hours (typical day) |
|---|---|---|---|
| Fridge-freezer | 180 | 0.35 | All 24h |
| Chest freezer | 100 | 0.30 | All 24h |
| Dishwasher | 2,200 | 1.0 | 20:00–21:30 (once/day) |
| Oven | 2,500 | 0.70 | 18:00–19:30 |
| Induction cooktop | 3,500 | 0.40 | 07:30–08:00, 18:30–19:30 |
| Kettle | 2,500 | — | 3 uses × 3 min = 0.15h total |
| Washing machine | 2,000 | 1.0 | 09:00–10:30 (alt. days) |
| Tumble dryer (heat pump) | 1,000 | 1.0 | 10:30–12:00 (alt. days) |
| Hot water tank | 2,500 | 1.0 | 02:00–05:00 (night tariff) |
| Computers (2 laptops) | 100 total | 1.0 | 08:00–22:00 |
| TV + entertainment | 150 | 1.0 | 18:00–23:00 |
| Lighting | 200 | 1.0 | 06:30–08:30, 17:00–23:00 |
| Router + NAS | 50 | 1.0 | All 24h |
| Standby (all devices) | 60 | 1.0 | All 24h |
| Hour | Load (W) | Major contributors |
|---|---|---|
| 00–01 | 290 | Fridge, freezer, router, standby |
| 01–02 | 290 | Same |
| 02–03 | 2,790 | + Hot water tank |
| 03–04 | 2,790 | + Hot water tank |
| 04–05 | 2,790 | + Hot water tank |
| 05–06 | 290 | Baseload only |
| 06–07 | 490 | + Lighting starts |
| 07–08 | 2,040 | + Kettle (0.15h burst ≈ 375W avg), induction |
| 08–09 | 800 | + Laptops, lighting |
| 09–10 | 2,800 | + Washing machine |
| 10–11 | 2,800 | Washing machine continues |
| 11–12 | 1,290 | + Heat pump dryer |
| 12–13 | 490 | Dryer finishes, light lunch |
| 13–17 | 490 | Quiet afternoon: fridge, laptops, router |
| 17–18 | 690 | Lighting on |
| 18–19 | 4,490 | Oven + induction + lighting |
| 19–20 | 4,840 | + TV + entertainment + dishwasher starts |
| 20–21 | 3,150 | Cooking done, dishwasher running |
| 21–22 | 650 | TV, lights, laptops winding down |
| 22–23 | 510 | TV off |
| 23–00 | 290 | Baseload |
Daily total: ~28.5 kWh (winter weekday, no heating, not including weekend variation) Annual estimate: 28.5 × 365 × 0.85 (weekday/weekend correction) ≈ 8,840 kWh — consistent with Chapter 2 “Typical” estimate.
From the profile above:
The peak-to-average ratio is ~4:1. This matters for:
For more detailed analysis, the load duration curve plots hours of the year sorted by load magnitude (highest to lowest). It answers: “How many hours per year does the load exceed X kW?”
Typical shape for our 4-person household:
| Load level | Hours exceeding (estimate) |
|---|---|
| > 4 kW | ~200 h/year (cooking peaks) |
| > 3 kW | ~400 h/year |
| > 2 kW | ~800 h/year |
| > 1 kW | ~2,500 h/year |
| > 0.5 kW | ~5,000 h/year |
| Baseload ~0.3 kW | ~8,760 h/year (always) |
The profile changes significantly with season for households with electric heating or heat pump systems. Key changes in a cold winter month:
This seasonal imbalance drives the core challenge: solar produces least when you need energy most. Battery storage helps at the daily scale but cannot bridge a multi-month deficit — which is why solar sizing for all-electric homes with heating must consider annual averages and accept significant grid imports in winter.
The companion script code/consumption_profile.py implements this method. It takes a list of appliance objects and a schedule configuration, and returns an 8,760-row DataFrame (one row per hour of the year).
from consumption_profile import build_annual_profile, SAMPLE_HOUSEHOLD
profile = build_annual_profile(SAMPLE_HOUSEHOLD)
print(f"Annual consumption: {profile['load_w'].sum() / 1000:.0f} kWh")
print(f"Peak demand: {profile['load_w'].max() / 1000:.1f} kW")
See Chapter 10 for how this feeds into the full scenario simulation.
Navigation: