Energiforbrugsanalyse af ejendomsportefølje — KPI'er og benchmark
Energianalyse af ejendomsportefølje: kWh/m²/år KPI, porteføljegennemsnit, outlier-identifikation, trend-analyse, graddage-normalisering og handlingsplan for ineffektive ejendomme.
Af M-Bus Gateway
Portefølje-energianalyse identificerer hvilke ejendomme der er ineffektive og kræver handling. Her er KPI'erne og analysemetoderne.
Nøgle-KPI: kWh/m²/år
Universel benchmark for varmeforbrug:
Formel:
kWh/m²/år = Samlet varmeforbrug (kWh) / Opvarmet areal (m²)
Eksempel portefølje (10 ejendomme):
Ejendom A: 144.000 kWh / 800 m² = 180 kWh/m²/år ← D-mærke (ok)
Ejendom B: 216.000 kWh / 750 m² = 288 kWh/m²/år ← F-mærke (kritisk!)
Ejendom C: 80.000 kWh / 600 m² = 133 kWh/m²/år ← C-mærke (god)
Ejendom D: 120.000 kWh / 900 m² = 133 kWh/m²/år ← C-mærke (god)
...
Porteføljegennemsnit: Vægtet gns. baseret på areal:
Total kWh: 1.460.000 kWh
Total m²: 7.800 m²
Gns. kWh/m²/år = 1.460.000 / 7.800 = 187 kWh/m²/år (D-mærke)
Energimærke-tærskler (DK fjernvarme):
A: < 52 | B: 52-90 | C: 90-135 | D: 135-180 | E: 180-255 | F: 255-320 | G: > 320
Graddage-normalisering: Retfærdig år-til-år sammenligning
# Graddage-normalisering sikrer at kolde år ikke fejlagtigt
# viser ejendomme som "ineffektive":
def normalize_portfolio(
properties: list[dict],
year: int,
normal_hdd: float = 2900.0, # Normalår HDD for DK
) -> list[dict]:
"""
Normaliser kWh/m²/år til graddage-korrigeret benchmark.
"""
results = []
for prop in properties:
actual_hdd = prop["heating_degree_days_year"]
actual_kwh_per_m2 = prop["kwh_per_m2"]
# Normaliser til normalår:
if actual_hdd > 0:
normalized = actual_kwh_per_m2 * (normal_hdd / actual_hdd)
else:
normalized = actual_kwh_per_m2
results.append({
**prop,
"kwh_per_m2_normalized": round(normalized, 1),
"hdd_adjustment_pct": round((normal_hdd / actual_hdd - 1) * 100, 1),
"energy_label": classify_energy_label(normalized),
})
return sorted(results, key=lambda x: x["kwh_per_m2_normalized"], reverse=True)
def classify_energy_label(kwh_per_m2: float) -> str:
if kwh_per_m2 < 52: return "A"
if kwh_per_m2 < 90: return "B"
if kwh_per_m2 < 135: return "C"
if kwh_per_m2 < 180: return "D"
if kwh_per_m2 < 255: return "E"
if kwh_per_m2 < 320: return "F"
return "G"
Outlier-identifikation: Find ineffektive ejendomme
import statistics
def identify_outliers(
properties: list[dict],
threshold_std_devs: float = 1.5,
) -> dict:
"""
Find ejendomme med unormalt høj energiintensitet.
Outlier = > 1.5 standardafvigelser over gennemsnit.
"""
values = [p["kwh_per_m2_normalized"] for p in properties]
mean = statistics.mean(values)
std_dev = statistics.stdev(values) if len(values) > 1 else 0
outlier_threshold = mean + threshold_std_devs * std_dev
critical = [p for p in properties if p["kwh_per_m2_normalized"] > outlier_threshold]
good = [p for p in properties if p["kwh_per_m2_normalized"] < mean - threshold_std_devs * std_dev]
normal = [p for p in properties if p not in critical and p not in good]
return {
"mean": round(mean, 1),
"std_dev": round(std_dev, 1),
"outlier_threshold": round(outlier_threshold, 1),
"critical": critical, # Kræver handling
"good": good, # Best practice-eksempler
"normal": normal,
"potential_savings_kwh": sum(
(p["kwh_per_m2_normalized"] - mean) * p["area_m2"]
for p in critical
),
}
Trend-analyse: Er ejendommen forbedret?
Trend-beregning over 3 år (graddage-normaliseret):
Ejendom B (288 kWh/m²/år i 2026):
2024: 295 kWh/m²/år (normaliseret)
2025: 291 kWh/m²/år (normaliseret)
2026: 288 kWh/m²/år (normaliseret)
Lineær regression: Trend = -3,5 kWh/m²/år pr. år
→ Forbedres langsomt (-1,2% pr. år)
→ Vil nå 255 kWh/m²/år (E-mærke) om ~10 år
Handlingsanbefaling:
Nuværende trend: Util strækkelig (kræver yderligere tiltag)
Estimeret potentiale ved hydraulisk balancering: -30 kWh/m²/år
Estimeret potentiale ved vinduesisolering: -20 kWh/m²/år
Samlet forbedringspotentiale: -50 kWh/m²/år → 238 kWh/m²/år (E)
Handlingsplan: Prioritering af indsats
Portfolio-action plan baseret på analyse:
PRIORITET 1 — Kritisk (> porteføljegennemsnit + 1.5σ):
Ejendom B: 288 kWh/m²/år
→ Bestil hydraulisk balancering (estimeret: 6 mdr tilbagebetaling)
→ Termografering (kortlæg isoleringsmangler)
→ Energimærkning revision
PRIORITET 2 — Forhøjet (D-E mærke):
Ejendom A: 180 kWh/m²/år
→ Overvej termostatventil-eftersyn
→ Returtemperatur-overvågning aktiveret
PRIORITET 3 — God (A-C mærke):
Ejendom C+D: 133 kWh/m²/år
→ Vedligehold nuværende niveau
→ Del best practice med prioritet 1+2
Estimeret besparelse ved handling:
Ejendom B: (288-187) × 750 m² × 0,90 kr./kWh = 68.175 kr./år
Investering hydraulisk balancering: ~15.000 kr.
Tilbagebetaling: 2,6 måneder
Platform: Portfolio KPI dashboard
M-Bus Gateway portfolio KPI endpoint:
GET /api/v1/portfolio/kpi
Response:
{
"total_properties": 10,
"total_area_m2": 7800,
"portfolio_kwh_per_m2": 187.0,
"portfolio_kwh_per_m2_normalized": 183.5,
"energy_label_distribution": {
"A": 0, "B": 1, "C": 2, "D": 4, "E": 2, "F": 1, "G": 0
},
"critical_properties": [
{
"id": "prop-b",
"name": "Ejendom B",
"kwh_per_m2_normalized": 288.0,
"energy_label": "F",
"deviation_from_mean_pct": 54.0
}
],
"trend_kwh_per_m2_annual": -2.1,
"potential_savings_kwh": 75600,
"potential_savings_dkk": 68040
}
Konklusion
Portefølje-energianalyse med kWh/m²/år (graddage-normaliseret) identificerer objektivt hvilke ejendomme der kræver handling. Outlier-detektion med 1,5 standardafvigelser finder de kritiske ejendomme. Trend-analyse viser om en ejendom forbedres eller forværres. M-Bus Gateway platformen beregner disse KPI'er automatisk og viser dem i portfolio-dashboard med handlingsanbefalinger og estimerede besparelser.
Se varmeforbrug benchmarking guide eller graddage normalisering guide.