Heizkörper berechnen: Größe und Leistung für jeden Raum

Mit dem kostenlosen UNIDOMO Heizkörperrechner können Sie Ihren Heizkörper berechnen und die passende Heizkörpergröße für jeden Raum finden. Der Rechner ermittelt aus Raumgröße, Baujahr und Vorlauftemperatur die benötigte Heizleistung und schlägt Ihnen Typ und Maße vor.

Planen Sie den Umstieg auf eine Wärmepumpe? Dann prüfen Sie im zweiten Modus, ob Ihre vorhandenen Heizkörper auch mit 45 oder 55 °C Vorlauftemperatur noch ausreichen.

  • Ergebnis mit Typ und Maßen
  • Wärmepumpen-Check
  • Kostenlos und ohne Anmeldung

Heizkörper berechnen in fünf Schritten

Mit diesem Rechner können Sie Ihren Heizkörper berechnen: Sie erfahren, wie viel Heizleistung ein Raum braucht und welche Heizkörpergröße passt. Planen Sie eine Wärmepumpe, prüfen Sie hier auch, ob Ihre vorhandenen Heizkörper bei niedriger Vorlauftemperatur noch ausreichen.

  1. Ziel
  2. Raum
  3. Gebäude
  4. Heizung
  5. Heizkörper
  6. Ergebnis

Was möchten Sie berechnen?

Berechnungsziel

Um welchen Raum geht es?

Raumart
m²

Bitte geben Sie eine Fläche zwischen 2 und 150 m² ein.

Vorgeschlagen nach DIN EN 12831 für die gewählte Raumart. Sie können den Wert anpassen.

Bitte wählen Sie eine Temperatur zwischen 15 und 26 °C.

Wie ist das Gebäude gebaut?

Baujahr und Dämmzustand

Bitte wählen Sie das Baujahr oder den Dämmzustand aus.

Wie viele Wände des Raums grenzen nach außen?
Fensterfläche
Lage des Raums

Mit welcher Vorlauftemperatur heizen Sie?

Wo finde ich das? Im Menü Ihres Heizungsreglers, in der Bedienungsanleitung oder im Wartungsprotokoll. Gemeint ist die Temperatur an sehr kalten Wintertagen. Planen Sie eine Wärmepumpe, wählen Sie 45 oder 55 °C.
Systemtemperatur

Wo soll der Heizkörper hin?

Unter einem Fenster: Abstand Boden bis Fensterbank minus etwa 150 mm.

mm

Freie Wandbreite, zum Beispiel die Fensterbreite.

Bitte einen Wert zwischen 400 und 3000 mm eingeben.

Die Leistung wird gleichmäßig aufgeteilt.

(function () { 'use strict'; var root = document.getElementById('uni-hkr'); if (!root || root.getAttribute('data-ready') === '1') return; root.setAttribute('data-ready', '1'); /* ---------- Einstellungen ---------- */ var CONFIG = { email: 'info@unidomo.com', outdoorTemp: -12, links: { heizkoerper: 'https://www.unidomo.de/marke/buderus/heizkoerper/', badheizkoerper: '', abgleich: '/heizung/ratgeber/hydraulischer-abgleich-heizung/', heizlastrechner: '', waermepumpenrechner: '' } }; /* ---------- Daten ---------- */ var ROOMS = { wohnen: { label: 'Wohnzimmer', t: 20 }, schlafen: { label: 'Schlafzimmer', t: 20 }, kind: { label: 'Kinderzimmer', t: 20 }, kueche: { label: 'Küche', t: 20 }, arbeit: { label: 'Arbeitszimmer', t: 20 }, bad: { label: 'Badezimmer', t: 24 }, flur: { label: 'Flur oder Diele', t: 15 } }; /* spezifische Raumheizlast in W/m² bei 20 °C innen, -12 °C außen, 2,50 m, eine Außenwand */ var AGES = { a1: { label: 'vor 1978, unsaniert', w: 120 }, a2: { label: 'vor 1978, teilsaniert', w: 95 }, a3: { label: 'Altbau, umfassend saniert', w: 60 }, a4: { label: '1978 bis 1994', w: 90 }, a5: { label: '1995 bis 2001', w: 75 }, a6: { label: '2002 bis 2015', w: 60 }, a7: { label: 'ab 2016 oder Effizienzhaus', w: 45 } }; var WALLS = { '1': 1, '2': 1.10, '3': 1.18 }; var WALL_LABEL = { '1': 'eine Außenwand', '2': 'zwei Außenwände', '3': 'drei oder mehr Außenwände' }; var WINDOWS = { klein: 0.95, normal: 1, gross: 1.08 }; var WIN_LABEL = { klein: 'wenig Fenster', normal: 'normale Fensterfläche', gross: 'große Fensterfront' }; var POSITION = { mitte: 1, eg: 1.05, dg: 1.08, beides: 1.12 }; var POS_LABEL = { mitte: 'Zwischengeschoss', eg: 'Erdgeschoss', dg: 'Dachgeschoss', beides: 'Bungalow' }; var SYSTEMS = { s35: { vl: 35, rl: 30 }, s45: { vl: 45, rl: 38 }, s55: { vl: 55, rl: 45 }, s70: { vl: 70, rl: 55 }, s75: { vl: 75, rl: 65 } }; var COMPARE = ['s35', 's45', 's55', 's70', 's75']; /* Flachheizkörper: Normwärmeleistung je Meter Baulänge bei 75/65/20 °C (EN 442), typische Herstellerwerte */ var PANEL_H = [300, 400, 500, 600, 900]; var PANEL = { '10': { n: 1.28, depth: 47, q: [340, 440, 530, 620, 880] }, '11': { n: 1.30, depth: 63, q: [540, 690, 840, 980, 1380] }, '21': { n: 1.31, depth: 66, q: [720, 920, 1110, 1290, 1810] }, '22': { n: 1.33, depth: 100, q: [990, 1260, 1510, 1730, 2420] }, '33': { n: 1.34, depth: 155, q: [1420, 1810, 2140, 2400, 3330] } }; var PANEL_PARTS = { '10': 'P', '11': 'PK', '21': 'PKP', '22': 'PKKP', '33': 'PKPKKP' }; /* Gliederheizkörper: Leistung je Glied bei 75/65/20 °C, Bautiefe 160 mm */ var SECT_H = [430, 580, 680, 980]; var SECT_Q = [75, 98, 113, 160]; var SECT_DEPTH = { '110': 0.72, '160': 1, '220': 1.3 }; var DT_NORM = 10 / Math.log(55 / 45); var MAX_RADS = 4; var TOTAL_STEPS = 6; /* ---------- Hilfsfunktionen ---------- */ function $(sel, ctx) { return (ctx || root).querySelector(sel); } function $all(sel, ctx) { return Array.prototype.slice.call((ctx || root).querySelectorAll(sel)); } function radioVal(name) { var r = $('input[name="' + name + '"]:checked'); return r ? r.value : ''; } function num(v) { if (v === null || v === undefined) return NaN; return parseFloat(String(v).replace(',', '.')); } function fmt(n, d) { return Number(n).toLocaleString('de-DE', { minimumFractionDigits: d || 0, maximumFractionDigits: d || 0 }); } function roundTo(n, step) { return Math.round(n / step) * step; } function clamp(v, a, b) { return Math.min(b, Math.max(a, v)); } function el(tag, attrs, kids) { var e = document.createElement(tag); if (attrs) { Object.keys(attrs).forEach(function (k) { var v = attrs[k]; if (v === null || v === undefined || v === false) return; if (k === 'text') e.textContent = v; else if (k === 'cls') e.className = v; else if (k.indexOf('on') === 0 && typeof v === 'function') e.addEventListener(k.slice(2), v); else e.setAttribute(k, v === true ? '' : v); }); } append(e, kids); return e; } function append(parent, kids) { if (kids === null || kids === undefined) return; if (!Array.isArray(kids)) kids = [kids]; kids.forEach(function (k) { if (k === null || k === undefined || k === false) return; parent.appendChild(typeof k === 'string' ? document.createTextNode(k) : k); }); } var SVGNS = 'http://www.w3.org/2000/svg'; function sv(tag, attrs, text) { var e = document.createElementNS(SVGNS, tag); Object.keys(attrs || {}).forEach(function (k) { e.setAttribute(k, attrs[k]); }); if (text !== undefined) e.textContent = text; return e; } function interp(xs, ys, x) { if (xs[0] >= x) return ys[0] * x / xs[0]; for (var i = 1; xs.length > i; i++) { if (xs[i] >= x) { var t = (x - xs[i - 1]) / (xs[i] - xs[i - 1]); return ys[i - 1] + t * (ys[i] - ys[i - 1]); } } var last = xs.length - 1; return ys[last] * x / xs[last]; } /* logarithmische Übertemperatur */ function dtLog(vl, rl, ti) { var a = vl - ti, b = rl - ti; if (0 >= a) return 0; if (0.5 >= b) return Math.max(0, (a + b) / 2); if (Math.abs(a - b) > 0.01) return (a - b) / Math.log(a / b); return a; } function factor(vl, rl, ti, n) { var dt = dtLog(vl, rl, ti); if (0 >= dt) return 0; return Math.pow(dt / DT_NORM, n); } function spreadFor(vl) { return Math.max(5, (vl - 25) / 3); } /* ---------- Zustand ---------- */ var step = 1; var radSeq = 0; var lastResult = null; function readState() { var roomKey = radioVal('hkr-room') || 'wohnen'; var sysKey = radioVal('hkr-sys') || 's55'; var s = { mode: radioVal('hkr-mode') || 'neu', room: roomKey, area: num($('#hkr-area').value), h: num($('#hkr-height').value), ti: num($('#hkr-temp').value), age: radioVal('hkr-age'), walls: radioVal('hkr-walls') || '1', win: radioVal('hkr-win') || 'normal', pos: radioVal('hkr-pos') || 'mitte', sysKey: sysKey, bh: num($('#hkr-bh').value), maxlen: num($('#hkr-maxlen').value), count: parseInt($('#hkr-count').value, 10) || 1 }; if (sysKey === 'custom') { var vl = num($('#hkr-vl').value); var rl = num($('#hkr-rl').value); if (isNaN(rl)) rl = Math.round(vl - spreadFor(vl)); s.sys = { vl: vl, rl: rl }; } else { s.sys = SYSTEMS[sysKey]; } s.rads = readRads(); return s; } /* ---------- Raumheizlast ---------- */ function demand(s) { var base = AGES[s.age].w; var ft = (s.ti - CONFIG.outdoorTemp) / (20 - CONFIG.outdoorTemp); var fh = 0.4 + 0.6 * s.h / 2.5; var q = s.area * base * ft * fh * WALLS[s.walls] * WINDOWS[s.win] * POSITION[s.pos]; return Math.max(50, roundTo(q, 10)); } /* ---------- Heizkörper (Prüfen) ---------- */ function radNorm(r) { if (r.kind === 'flach') { var p = PANEL[r.type]; return { qn: interp(PANEL_H, p.q, r.h) * r.l / 1000, n: p.n }; } if (r.kind === 'glied') { return { qn: interp(SECT_H, SECT_Q, r.h) * SECT_DEPTH[r.d] * r.count, n: 1.3 }; } var basis = r.basis === '90' ? factor(90, 70, 20, 1.3) : (r.basis === '70' ? factor(70, 55, 20, 1.3) : 1); return { qn: r.q / basis, n: 1.3 }; } function radsOutput(rads, vl, rl, ti) { return rads.reduce(function (sum, r) { var nm = radNorm(r); return sum + nm.qn * factor(vl, rl, ti, nm.n); }, 0); } function neededFlow(rads, ti, q) { function out(vl) { return radsOutput(rads, vl, vl - spreadFor(vl), ti); } if (q > out(90)) return null; var lo = Math.max(ti + 8, 28), hi = 90; if (out(lo) >= q) return lo; for (var i = 0; 40 > i; i++) { var mid = (lo + hi) / 2; if (out(mid) >= q) hi = mid; else lo = mid; } return Math.ceil(hi); } /* ---------- Heizkörper (Neu) ---------- */ function sizeFor(type, h, qPer, sys, ti) { var p = PANEL[type]; var qm = interp(PANEL_H, p.q, h) * factor(sys.vl, sys.rl, ti, p.n); if (0 >= qm) return null; var l = Math.max(400, Math.ceil(qPer / qm * 10) * 100); return { type: type, h: h, l: l, q: qm * l / 1000, fits: 3000 >= l }; } function pickSize(cands, maxlen) { var i; if (maxlen) { for (i = 0; cands.length > i; i++) if (maxlen >= cands[i].l) return cands[i]; return null; } var t22 = cands.filter(function (c) { return c.type === '22'; })[0]; if (t22 && 2000 >= t22.l) return t22; var t33 = cands.filter(function (c) { return c.type === '33'; })[0]; if (t33 && 2000 >= t33.l) return t33; return null; } /* ---------- Zeichnung ---------- */ function drawRadiator(type, h, l) { var W = 440, H = 248; var svg = sv('svg', { viewBox: '0 0 ' + W + ' ' + H, role: 'img', 'aria-label': 'Maßskizze Heizkörper Typ ' + type + ', ' + h + ' mm hoch, ' + l + ' mm lang' }); var maxW = 270, maxH = 160; var sc = Math.min(maxW / l, maxH / h, 0.3); var w = l * sc, hh = h * sc; var x0 = 40, y0 = 22 + (maxH - hh) / 2; svg.appendChild(sv('rect', { x: x0, y: y0, width: w, height: hh, rx: 4, 'class': 'hkr-panel' })); var gap = Math.max(9, 50 * sc); for (var gx = x0 + gap; x0 + w - 4 > gx; gx += gap) { svg.appendChild(sv('line', { x1: gx, y1: y0 + 6, x2: gx, y2: y0 + hh - 6, 'class': 'hkr-groove' })); } svg.appendChild(sv('rect', { x: x0 + w - 14, y: y0 - 9, width: 8, height: 10, rx: 1, 'class': 'hkr-valve' })); var yd = y0 + hh + 18; svg.appendChild(sv('path', { d: 'M' + x0 + ' ' + (yd - 6) + 'V' + (yd + 6) + 'M' + (x0 + w) + ' ' + (yd - 6) + 'V' + (yd + 6) + 'M' + x0 + ' ' + yd + 'H' + (x0 + w), 'class': 'hkr-dim' })); svg.appendChild(sv('text', { x: x0 + w / 2, y: yd + 18, 'text-anchor': 'middle', 'class': 'hkr-dimtext' }, fmt(l) + ' mm')); var xd = x0 - 16; svg.appendChild(sv('path', { d: 'M' + (xd - 6) + ' ' + y0 + 'H' + (xd + 6) + 'M' + (xd - 6) + ' ' + (y0 + hh) + 'H' + (xd + 6) + 'M' + xd + ' ' + y0 + 'V' + (y0 + hh), 'class': 'hkr-dim' })); svg.appendChild(sv('text', { x: xd - 8, y: y0 + hh / 2, 'text-anchor': 'middle', transform: 'rotate(-90 ' + (xd - 8) + ' ' + (y0 + hh / 2) + ')', 'class': 'hkr-dimtext' }, fmt(h) + ' mm')); /* Seitenansicht */ var parts = PANEL_PARTS[type] || 'PKKP'; var sx = 335, sTop = 26, sH = 150, x = sx; var g = sv('g', {}); var widths = 0; parts.split('').forEach(function (c) { widths += c === 'P' ? 7 : 15; }); x = sx + (100 - widths) / 2; parts.split('').forEach(function (c) { if (c === 'P') { g.appendChild(sv('rect', { x: x, y: sTop, width: 5, height: sH, rx: 1, 'class': 'hkr-plate' })); x += 7; } else { var d = 'M' + (x + 1) + ' ' + (sTop + 8); for (var yy = sTop + 8, k = 0; sTop + sH - 8 > yy; yy += 10, k++) { d += 'L' + (x + (k % 2 === 0 ? 12 : 1)) + ' ' + (yy + 10); } g.appendChild(sv('path', { d: d, 'class': 'hkr-conv' })); x += 15; } }); svg.appendChild(g); var plates = (parts.match(/P/g) || []).length; var convs = (parts.match(/K/g) || []).length; svg.appendChild(sv('text', { x: sx + 50, y: sTop + sH + 24, 'text-anchor': 'middle', 'class': 'hkr-sidelabel' }, 'Seitenansicht')); svg.appendChild(sv('text', { x: sx + 50, y: sTop + sH + 44, 'text-anchor': 'middle', 'class': 'hkr-sidelabel' }, plates + ' Platte' + (plates === 1 ? '' : 'n'))); svg.appendChild(sv('text', { x: sx + 50, y: sTop + sH + 62, 'text-anchor': 'middle', 'class': 'hkr-sidelabel' }, convs + ' Konvektor' + (convs === 1 ? '' : 'en'))); return svg; } /* ---------- Ergebnis ---------- */ function sysLabel(sys) { return fmt(sys.vl) + '/' + fmt(Math.round(sys.rl)) + ' °C'; } function tag(cls, text) { return el('span', { cls: 'uni-hkr__tag ' + cls, text: text }); } function link(href, text, ghost) { return el('a', { href: href, cls: 'uni-hkr__btn' + (ghost ? ' uni-hkr__btn--ghost' : ''), text: text }); } function renderResult() { var s = readState(); var q = demand(s); var box = $('[data-result]'); box.textContent = ''; var lines = []; var room = ROOMS[s.room]; lines.push('Raum: ' + room.label + ', ' + fmt(s.area, s.area % 1 ? 1 : 0) + ' m², ' + fmt(s.h, 2) + ' m hoch, ' + fmt(s.ti) + ' °C'); lines.push('Gebäude: ' + AGES[s.age].label + ', ' + WALL_LABEL[s.walls] + ', ' + WIN_LABEL[s.win] + ', ' + POS_LABEL[s.pos]); lines.push('Systemtemperatur: ' + sysLabel(s.sys)); lines.push('Geschätzte Raumheizlast: ca. ' + fmt(q) + ' W'); var left = el('div', { cls: 'uni-hkr__res-text' }, [ el('p', { cls: 'uni-hkr__kicker', text: room.label + ' mit ' + fmt(s.area, s.area % 1 ? 1 : 0) + ' m² braucht etwa' }), el('p', { cls: 'uni-hkr__big' }, [fmt(q) + ' ', el('small', { text: 'Watt' })]), el('p', { cls: 'uni-hkr__range', text: 'Orientierungsbereich etwa ' + fmt(roundTo(q * 0.85, 10)) + ' bis ' + fmt(roundTo(q * 1.15, 10)) + ' W bei ' + fmt(s.ti) + ' °C Raumtemperatur. Wegen der vereinfachten Gebäudedaten kann die tatsächliche Raumheizlast auch außerhalb dieses Bereichs liegen.' }) ]); if (s.mode === 'neu') renderNew(s, q, box, left, lines); else renderCheck(s, q, box, left, lines); lastResult = { lines: lines, mode: s.mode }; box.appendChild(leadBox()); box.appendChild(el('div', { cls: 'uni-hkr__note' }, [ el('p', { text: 'Der Rechner liefert einen Orientierungswert für die Vorauswahl. Die Raumheizlast beruht auf statistischen Näherungswerten je Baujahr. Die Berechnung verwendet vereinfachend eine Normaußentemperatur von ' + fmt(CONFIG.outdoorTemp) + ' °C, die tatsächliche Normaußentemperatur hängt vom Standort des Gebäudes ab. Die Heizkörperleistung beruht auf typischen Herstellerwerten nach EN 442 (75/65/20 °C), umgerechnet über die logarithmische Übertemperatur.' }), el('p', { text: 'Eine raumweise Heizlastberechnung nach DIN EN 12831 durch einen Fachbetrieb ersetzt er nicht. Maßgeblich sind die Leistungsdaten im Datenblatt des gewählten Modells.' }) ])); track('hkr_result', { hkr_mode: s.mode, hkr_load_w: q }); } function renderNew(s, q, box, left, lines) { var qPer = q / s.count; var types = ['11', '21', '22', '33']; var cands = types.map(function (t) { return sizeFor(t, s.bh, qPer, s.sys, s.ti); }).filter(Boolean); var maxlen = isNaN(s.maxlen) ? 0 : s.maxlen; var pick = pickSize(cands, maxlen); var perText = s.count > 1 ? ' je Heizkörper' : ''; var pickBox; if (pick) { pickBox = el('div', { cls: 'uni-hkr__pick' }, [ el('p', { cls: 'uni-hkr__kicker', text: s.count > 1 ? 'Unsere Empfehlung, ' + s.count + ' Stück' : 'Unsere Empfehlung' }), el('p', { cls: 'uni-hkr__pick-name', text: 'Typ ' + pick.type + ', ' + fmt(pick.h) + ' × ' + fmt(pick.l) + ' mm' }), el('p', { text: 'Leistung ca. ' + fmt(roundTo(pick.q, 10)) + ' W' + perText + ' bei ' + sysLabel(s.sys) + '. Bautiefe etwa ' + PANEL[pick.type].depth + ' mm.' }) ]); lines.push('Empfehlung: ' + (s.count > 1 ? s.count + ' x ' : '') + 'Typ ' + pick.type + ', ' + pick.h + ' x ' + pick.l + ' mm, ca. ' + fmt(roundTo(pick.q, 10)) + ' W' + perText); } else { pickBox = el('div', { cls: 'uni-hkr__pick' }, [ el('p', { cls: 'uni-hkr__verdict is-warn', text: 'Passt so nicht' }), el('p', { text: maxlen ? 'Bei ' + fmt(s.bh) + ' mm Bauhöhe reicht keine Bauform mit höchstens ' + fmt(maxlen) + ' mm Länge.' : 'Bei ' + fmt(s.bh) + ' mm Bauhöhe wäre der Heizkörper sehr lang.' }), el('p', { text: 'Diese Varianten würden passen:' }), el('ul', { cls: 'uni-hkr__list' }, alternatives(s, q, maxlen || 2000).map(function (t) { return el('li', { text: t }); })) ]); lines.push('Empfehlung: keine passende Standardgröße, Beratung gewünscht'); } left.appendChild(pickBox); var fig = el('figure', { cls: 'uni-hkr__drawing' }); var show = pick || cands.filter(function (c) { return c.type === '33'; })[0]; fig.appendChild(drawRadiator(show.type, show.h, Math.min(show.l, 3000))); fig.appendChild(el('figcaption', { text: pick ? 'Maßskizze der Empfehlung. Die Seitenansicht zeigt, was hinter der Typnummer steckt.' : 'Zum Größenvergleich: Ein einzelner Typ 33 müsste ' + (show.fits ? fmt(show.l) + ' mm' : 'über 3.000 mm') + ' lang sein.' })); box.appendChild(el('div', { cls: 'uni-hkr__res-top' }, [left, fig])); /* Alternativen */ var rows = cands.map(function (c) { var isPick = pick && pick.type === c.type; var status; if (!c.fits) status = tag('is-bad', 'zu lang'); else if (maxlen && c.l > maxlen) status = tag('is-warn', 'länger als ' + fmt(maxlen) + ' mm'); else if (isPick) status = tag('is-ok', 'Empfehlung'); else if (c.l > 2000) status = tag('is-warn', 'sehr lang'); else status = ''; return el('tr', { cls: isPick ? 'is-pick' : '' }, [ el('td', { text: 'Typ ' + c.type }), el('td', { cls: 'num', text: fmt(c.h) + ' × ' + fmt(c.l) + ' mm' }), el('td', { cls: 'num', text: 'ca. ' + PANEL[c.type].depth + ' mm' }), el('td', { cls: 'num', text: fmt(roundTo(c.q, 10)) + ' W' }), el('td', {}, status) ]); }); box.appendChild(el('div', { cls: 'uni-hkr__section' }, [ el('h4', { cls: 'uni-hkr__h', text: 'Alle Bauformen im Vergleich' }), el('p', { text: 'Benötigt werden ' + fmt(roundTo(qPer, 10)) + ' W' + perText + ' bei ' + sysLabel(s.sys) + ' und ' + fmt(s.bh) + ' mm Bauhöhe. Mehr Platten und Konvektoren bedeuten mehr Leistung auf weniger Länge, aber auch mehr Bautiefe.' }), table(['Typ', 'Höhe × Länge', 'Bautiefe', 'Leistung', ''], rows) ])); /* Vorlauftemperatur-Vergleich */ var ref = pick ? pick.type : '22'; var vrows = COMPARE.map(function (k) { var c = sizeFor(ref, s.bh, qPer, SYSTEMS[k], s.ti); var cur = s.sysKey === k; return el('tr', { cls: cur ? 'is-pick' : '' }, [ el('td', { text: sysLabel(SYSTEMS[k]) + (cur ? ' (Ihre Auswahl)' : '') }), el('td', { cls: 'num', text: c && c.fits ? fmt(c.l) + ' mm' : 'über 3.000 mm' }) ]); }); box.appendChild(el('div', { cls: 'uni-hkr__section' }, [ el('h4', { cls: 'uni-hkr__h', text: 'Länge je nach Vorlauftemperatur' }), el('p', { text: 'So lang müsste ein Typ ' + ref + ' mit ' + fmt(s.bh) + ' mm Bauhöhe sein, um denselben Raum zu heizen. Wer heute für eine Wärmepumpe plant, legt die Heizkörper gleich für 45 oder 55 °C aus.' }), table(['Systemtemperatur', 'Benötigte Baulänge'], vrows) ])); box.appendChild(ctaRow(s)); } function alternatives(s, q, limit) { var out = []; var n, t, c, i; for (n = s.count + 1; s.count + 3 > n && 2 > out.length; n++) { for (i = 0; 2 > i; i++) { t = ['22', '33'][i]; c = sizeFor(t, s.bh, q / n, s.sys, s.ti); if (c && limit >= c.l) { out.push(n + ' Heizkörper Typ ' + t + ' mit je ' + fmt(c.h) + ' × ' + fmt(c.l) + ' mm'); break; } } } if (s.bh !== 900) { for (i = 0; 2 > i; i++) { t = ['22', '33'][i]; c = sizeFor(t, 900, q / s.count, s.sys, s.ti); if (c && limit >= c.l) { out.push((s.count > 1 ? s.count + ' × ' : '') + 'Typ ' + t + ' mit 900 mm Bauhöhe: ' + fmt(c.h) + ' × ' + fmt(c.l) + ' mm'); break; } } } if (55 > s.sys.vl) { c = sizeFor('22', s.bh, q / s.count, SYSTEMS.s55, s.ti); if (c && limit >= c.l) out.push('Bei 55/45 °C Vorlauf reicht ' + (s.count > 1 ? 'je ' : '') + 'ein Typ 22 mit ' + fmt(c.h) + ' × ' + fmt(c.l) + ' mm'); } out.push('Wärmepumpenheizkörper mit Gebläse leisten bei niedriger Vorlauftemperatur deutlich mehr auf kleiner Fläche.'); return out; } function renderCheck(s, q, box, left, lines) { var out = radsOutput(s.rads, s.sys.vl, s.sys.rl, s.ti); var cov = q > 0 ? out / q : 0; var cls = cov >= 1 ? 'is-ok' : (cov >= 0.9 ? 'is-warn' : 'is-bad'); var verdict = cov >= 1 ? 'Rechnerisch ausreichend' : (cov >= 0.9 ? 'Rechnerisch knapp, genauere Prüfung empfohlen' : 'Rechnerisch nicht ausreichend'); var flow = neededFlow(s.rads, s.ti, q); var meterMax = Math.max(1.5, cov * 1.05); var meter = el('div', { cls: 'uni-hkr__meter', role: 'img', 'aria-label': 'Abdeckung ' + fmt(cov * 100) + ' Prozent des Wärmebedarfs' }, [ el('div', { cls: 'uni-hkr__meter-fill ' + cls, style: 'width:' + clamp(cov / meterMax * 100, 2, 100) + '%' }), el('div', { cls: 'uni-hkr__meter-mark', style: 'left:' + (1 / meterMax * 100) + '%' }, el('span', { text: 'Bedarf' })) ]); var flowText; if (flow === null) flowText = 'Selbst mit 90 °C Vorlauftemperatur reichen die Heizkörper rechnerisch nicht aus.'; else if (flow > 55) flowText = 'Rechnerisch erforderliche Vorlauftemperatur: ca. ' + flow + ' °C. Das liegt über 55 °C, dem üblichen Richtwert für den Betrieb einer Wärmepumpe mit Heizkörpern.'; else if (flow > 45) flowText = 'Rechnerisch erforderliche Vorlauftemperatur: ca. ' + flow + ' °C. Das liegt im Bereich, den Wärmepumpen mit Heizkörpern üblicherweise abdecken. Größere Heizflächen würden eine niedrigere Vorlauftemperatur erlauben.'; else flowText = 'Rechnerisch erforderliche Vorlauftemperatur: ca. ' + Math.max(flow, 30) + ' °C. Das ist eine gute Ausgangslage für den Betrieb mit einer Wärmepumpe.'; left.appendChild(el('div', { cls: 'uni-hkr__pick' }, [ el('p', { cls: 'uni-hkr__verdict ' + cls, text: verdict }), el('p', { text: 'Ihre Heizkörper liefern bei ' + sysLabel(s.sys) + ' etwa ' + fmt(roundTo(out, 10)) + ' W. Das deckt ' + fmt(cov * 100) + ' % des Bedarfs.' }), meter, el('div', { cls: 'uni-hkr__meter-legend' }, [el('span', { text: '0 W' }), el('span', { text: fmt(roundTo(q * meterMax, 10)) + ' W' })]), el('p', { style: 'margin-top:14px', text: flowText }) ])); lines.push('Vorhandene Heizkörper: ' + s.rads.map(radText).join('; ')); lines.push('Leistung bei ' + sysLabel(s.sys) + ': ca. ' + fmt(roundTo(out, 10)) + ' W (' + fmt(cov * 100) + ' % des Bedarfs)'); lines.push('Rechnerisch erforderliche Vorlauftemperatur: ' + (flow === null ? 'über 90 °C' : 'ca. ' + flow + ' °C')); var first = s.rads[0]; var fig = el('figure', { cls: 'uni-hkr__drawing' }); if (first.kind === 'flach') { fig.appendChild(drawRadiator(first.type, first.h, first.l)); fig.appendChild(el('figcaption', { text: 'Ihr ' + (s.rads.length > 1 ? 'erster ' : '') + 'Heizkörper: Typ ' + first.type + ', ' + fmt(first.h) + ' × ' + fmt(first.l) + ' mm.' })); } else { fig.appendChild(drawRadiator('22', 600, 1200)); fig.appendChild(el('figcaption', { text: 'Zum Vergleich: ein Flachheizkörper Typ 22 mit 600 × 1.200 mm. Die Seitenansicht zeigt, was hinter der Typnummer steckt.' })); } box.appendChild(el('div', { cls: 'uni-hkr__res-top' }, [left, fig])); /* Tabelle Systemtemperaturen */ var rows = COMPARE.map(function (k) { var sy = SYSTEMS[k]; var o = radsOutput(s.rads, sy.vl, sy.rl, s.ti); var c = o / q; var st = c >= 1 ? tag('is-ok', 'ausreichend') : (c >= 0.9 ? tag('is-warn', 'knapp') : tag('is-bad', 'nicht ausreichend')); return el('tr', { cls: s.sysKey === k ? 'is-pick' : '' }, [ el('td', { text: sysLabel(sy) }), el('td', { cls: 'num', text: fmt(roundTo(o, 10)) + ' W' }), el('td', { cls: 'num', text: fmt(c * 100) + ' %' }), el('td', {}, st) ]); }); box.appendChild(el('div', { cls: 'uni-hkr__section' }, [ el('h4', { cls: 'uni-hkr__h', text: 'Leistung bei verschiedenen Vorlauftemperaturen' }), el('p', { text: 'Bedarf des Raums: ca. ' + fmt(q) + ' W. Je niedriger die Vorlauftemperatur, desto weniger Wärme gibt derselbe Heizkörper ab.' }), table(['Systemtemperatur', 'Leistung', 'Abdeckung', ''], rows) ])); /* Maßnahmen */ if (cov >= 1) { box.appendChild(el('div', { cls: 'uni-hkr__section' }, [ el('h4', { cls: 'uni-hkr__h', text: 'Was Sie noch tun können' }), el('ul', { cls: 'uni-hkr__list' }, [ el('li', { text: 'Ein hydraulischer Abgleich stellt sicher, dass jeder Heizkörper die erforderliche Wassermenge bekommt.' }), el('li', { text: 'Prüfen Sie die übrigen Räume genauso. Der ungünstigste Raum bestimmt die Vorlauftemperatur des ganzen Hauses.' }) ]) ])); } else { var target = s.rads.filter(function (r) { return r.kind === 'flach'; })[0]; var h = target ? target.h : 600; var opts = ['22', '33'].map(function (t) { return sizeFor(t, PANEL_H.indexOf(h) > -1 ? h : 600, q, s.sys, s.ti); }).filter(function (c) { return c && 2400 >= c.l; }); var items = []; opts.forEach(function (c) { items.push(el('li', { text: 'Ein Heizkörper Typ ' + c.type + ' mit ' + fmt(c.h) + ' × ' + fmt(c.l) + ' mm würde den Raum allein bei ' + sysLabel(s.sys) + ' heizen (ca. ' + fmt(roundTo(c.q, 10)) + ' W).' })); }); items.push(el('li', { text: 'Alternativ einen zusätzlichen Heizkörper mit etwa ' + fmt(roundTo(q - out, 10)) + ' W Leistung ergänzen.' })); items.push(el('li', { text: 'Ein hydraulischer Abgleich kann helfen, die erforderliche Wassermenge am Heizkörper sicherzustellen. Verkleidungen oder Vorhänge können die Wärmeabgabe beeinträchtigen und sollten bei der Bewertung berücksichtigt werden.' })); if (cov >= 0.9 && flow !== null) items.push(el('li', { text: 'Rechnerisch würde auch eine Vorlauftemperatur von ca. ' + flow + ' °C genügen.' })); box.appendChild(el('div', { cls: 'uni-hkr__section' }, [ el('h4', { cls: 'uni-hkr__h', text: 'So bekommen Sie den Raum warm' }), el('ul', { cls: 'uni-hkr__list' }, items) ])); if (opts[0]) lines.push('Mögliche Lösung: Typ ' + opts[0].type + ', ' + opts[0].h + ' x ' + opts[0].l + ' mm'); } box.appendChild(ctaRow(s)); } function radText(r) { if (r.kind === 'flach') return 'Flachheizkörper Typ ' + r.type + ', ' + r.h + ' x ' + r.l + ' mm'; if (r.kind === 'glied') return 'Gliederheizkörper ' + r.h + ' mm hoch, ' + r.d + ' mm tief, ' + r.count + ' Glieder'; return 'Normleistung ' + r.q + ' W (' + (r.basis === '90' ? '90/70/20' : (r.basis === '70' ? '70/55/20' : '75/65/20')) + ')'; } function table(head, rows) { return el('div', { cls: 'uni-hkr__tablewrap' }, el('table', { cls: 'uni-hkr__table' }, [ el('thead', {}, el('tr', {}, head.map(function (h) { return el('th', { scope: 'col', text: h }); }))), el('tbody', {}, rows) ])); } function ctaRow(s) { var row = el('div', { cls: 'uni-hkr__cta' }); var L = CONFIG.links; if (s.room === 'bad' && L.badheizkoerper) row.appendChild(link(L.badheizkoerper, 'Badheizkörper ansehen')); if (L.heizkoerper) row.appendChild(link(L.heizkoerper, 'Passende Heizkörper ansehen', s.room === 'bad' && L.badheizkoerper)); if (L.abgleich) row.appendChild(link(L.abgleich, 'Ratgeber hydraulischer Abgleich', true)); if (L.waermepumpenrechner && s.mode === 'pruefen') row.appendChild(link(L.waermepumpenrechner, 'Zum Wärmepumpenrechner', true)); return row; } /* ---------- Anfrage per E-Mail ---------- */ function leadBox() { var det = el('details', { cls: 'uni-hkr__lead-box' }); det.appendChild(el('summary', { text: 'Fragen zur Auswahl? Ergebnis an unser Team senden' })); var body = el('div', { cls: 'uni-hkr__lead-body' }); body.appendChild(el('p', { text: 'Unsere Heizungsexperten prüfen Ihre Angaben und melden sich mit einem passenden Vorschlag. Beim Absenden öffnet sich Ihr E-Mail-Programm mit dem Ergebnis, über dieses Formular werden keine Daten gespeichert.' })); var fields = el('div', { cls: 'uni-hkr__fields' }, [ field('hkr-l-name', 'Name', 'text', 'name', true, 'Bitte geben Sie Ihren Namen ein.'), field('hkr-l-plz', 'Postleitzahl', 'text', 'postal-code', true, 'Bitte geben Sie eine fünfstellige Postleitzahl ein.'), field('hkr-l-tel', 'Telefon (optional)', 'tel', 'tel', false, '') ]); body.appendChild(fields); var msgField = el('div', { cls: 'uni-hkr__field', style: 'margin-bottom:16px' }, [ el('label', { cls: 'uni-hkr__flabel', 'for': 'hkr-l-msg', text: 'Nachricht (optional)' }), el('textarea', { cls: 'uni-hkr__input', id: 'hkr-l-msg', rows: '3', placeholder: 'z. B. gewünschte Farbe, Anschlussart oder Fragen' }) ]); body.appendChild(msgField); var status = el('p', { cls: 'uni-hkr__status', hidden: true, role: 'status' }); var row = el('div', { cls: 'uni-hkr__cta', style: 'margin-top:0' }, [ el('button', { type: 'button', cls: 'uni-hkr__btn', text: 'E-Mail mit Ergebnis öffnen', onclick: function () { sendLead(body, status); } }), el('button', { type: 'button', cls: 'uni-hkr__btn uni-hkr__btn--ghost', text: 'Ergebnis kopieren', onclick: function () { copyResult(status); } }) ]); body.appendChild(row); body.appendChild(status); det.appendChild(body); return det; } function field(id, label, type, ac, req, err) { return el('div', { cls: 'uni-hkr__field', 'data-lead': id }, [ el('label', { cls: 'uni-hkr__flabel', 'for': id, text: label }), el('input', { cls: 'uni-hkr__input', id: id, type: type, autocomplete: ac, inputmode: id === 'hkr-l-plz' ? 'numeric' : null, maxlength: id === 'hkr-l-plz' ? '5' : null, required: req ? true : null }), err ? el('p', { cls: 'uni-hkr__error', text: err }) : null ]); } function resultText(extra) { var t = ['Heizkörper berechnen: Ergebnis aus dem UNIDOMO-Rechner', ''].concat(lastResult ? lastResult.lines : []); if (extra) t = t.concat([''], extra); return t.join('\n'); } function sendLead(body, status) { var name = $('#hkr-l-name', body).value.trim(); var plz = $('#hkr-l-plz', body).value.trim(); var tel = $('#hkr-l-tel', body).value.trim(); var msg = $('#hkr-l-msg', body).value.trim(); var ok = true; setErr($('[data-lead="hkr-l-name"]', body), name.length === 0); if (name.length === 0) ok = false; var plzOk = /^\d{5}$/.test(plz); setErr($('[data-lead="hkr-l-plz"]', body), !plzOk); if (!plzOk) ok = false; if (!ok) { var f = $('.has-error input', body); if (f) f.focus(); return; } var extra = ['Name: ' + name, 'PLZ: ' + plz]; if (tel) extra.push('Telefon: ' + tel); if (msg) extra.push('', 'Nachricht:', msg); var subject = 'Heizkörper berechnen: Anfrage aus PLZ ' + plz; var text = resultText(extra); var href = 'mailto:' + CONFIG.email + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(text); if (href.length > 1900) { copyText(text); href = 'mailto:' + CONFIG.email + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent('Das Ergebnis liegt in meiner Zwischenablage und wird hier eingefügt:\n\n'); status.textContent = 'Das Ergebnis ist in Ihrer Zwischenablage. Bitte fügen Sie es in die E-Mail ein.'; } else { status.textContent = 'Ihr E-Mail-Programm wird geöffnet. Öffnet sich nichts, schreiben Sie uns an ' + CONFIG.email + '.'; } status.hidden = false; track('hkr_lead', { hkr_mode: lastResult ? lastResult.mode : '' }); window.location.href = href; } function copyText(text) { if (navigator.clipboard && navigator.clipboard.writeText) return navigator.clipboard.writeText(text); var ta = el('textarea', { style: 'position:fixed;left:-9999px;top:0' }); ta.value = text; document.body.appendChild(ta); ta.select(); try { document.execCommand('copy'); } catch (e) { /* ignorieren */ } document.body.removeChild(ta); return Promise.resolve(); } function copyResult(status) { Promise.resolve(copyText(resultText())).then(function () { status.textContent = 'Ergebnis kopiert.'; status.hidden = false; }); } /* ---------- Heizkörperliste ---------- */ function radItem() { radSeq++; var id = 'hkr-r' + radSeq; var wrap = el('div', { cls: 'uni-hkr__rad', 'data-rad': id }); var head = el('div', { cls: 'uni-hkr__rad-head' }, [ el('strong', { cls: 'uni-hkr__rad-title', text: 'Heizkörper' }), el('button', { type: 'button', cls: 'uni-hkr__link', 'data-remove': '1', text: 'Entfernen', onclick: function () { wrap.parentNode.removeChild(wrap); updateRads(); } }) ]); wrap.appendChild(head); var kind = el('select', { cls: 'uni-hkr__input', id: id + '-kind', 'data-k': 'kind' }, [ el('option', { value: 'flach', text: 'Flachheizkörper (Plattenheizkörper)' }), el('option', { value: 'glied', text: 'Gliederheizkörper (Rippen, Guss oder Stahl)' }), el('option', { value: 'norm', text: 'Leistung aus dem Datenblatt bekannt' }) ]); var top = el('div', { cls: 'uni-hkr__fields', style: 'margin-bottom:18px' }, [ el('div', { cls: 'uni-hkr__field' }, [el('label', { cls: 'uni-hkr__flabel', 'for': id + '-kind', text: 'Bauart' }), kind]) ]); wrap.appendChild(top); var gFlach = el('div', { cls: 'uni-hkr__fields', 'data-g': 'flach' }, [ selectField(id + '-type', 'Typ', 'type', [['10', 'Typ 10 (1 Platte)'], ['11', 'Typ 11 (1 Platte, 1 Konvektor)'], ['21', 'Typ 21 (2 Platten, 1 Konvektor)'], ['22', 'Typ 22 (2 Platten, 2 Konvektoren)'], ['33', 'Typ 33 (3 Platten, 3 Konvektoren)']], '22'), selectField(id + '-h', 'Bauhöhe', 'h', [300, 350, 400, 450, 500, 550, 600, 700, 750, 900].map(function (v) { return [String(v), v + ' mm']; }), '600', 'Gesamthöhe des Heizkörpers ohne Ventil.'), numField(id + '-l', 'Baulänge', 'l', 'mm', '400', '3000', '100', 'z. B. 1200', 'Bitte eine Länge zwischen 300 und 3000 mm eingeben.') ]); var gGlied = el('div', { cls: 'uni-hkr__fields', 'data-g': 'glied', hidden: true }, [ selectField(id + '-gh', 'Bauhöhe', 'gh', [430, 580, 680, 980].map(function (v) { return [String(v), 'ca. ' + v + ' mm']; }), '580', 'Gesamthöhe, nächstliegenden Wert wählen.'), selectField(id + '-gd', 'Bautiefe', 'gd', [['110', 'ca. 110 mm (schmal)'], ['160', 'ca. 160 mm (mittel)'], ['220', 'ca. 220 mm (tief)']], '160'), numField(id + '-gc', 'Anzahl Glieder', 'gc', 'Stück', '2', '60', '1', 'z. B. 12', 'Bitte eine Anzahl zwischen 2 und 60 eingeben.') ]); var gNorm = el('div', { cls: 'uni-hkr__fields', 'data-g': 'norm', hidden: true }, [ numField(id + '-q', 'Normwärmeleistung', 'q', 'W', '100', '10000', '10', 'z. B. 1730', 'Bitte einen Wert zwischen 100 und 10.000 W eingeben.'), selectField(id + '-b', 'Bezieht sich auf', 'b', [['75', '75/65/20 °C (Datenblätter seit 1997)'], ['90', '90/70/20 °C (ältere Datenblätter)'], ['70', '70/55/20 °C']], '75') ]); wrap.appendChild(gFlach); wrap.appendChild(gGlied); wrap.appendChild(gNorm); kind.addEventListener('change', function () { gFlach.hidden = kind.value !== 'flach'; gGlied.hidden = kind.value !== 'glied'; gNorm.hidden = kind.value !== 'norm'; }); return wrap; } function selectField(id, label, key, opts, sel, help) { return el('div', { cls: 'uni-hkr__field' }, [ el('label', { cls: 'uni-hkr__flabel', 'for': id, text: label }), el('select', { cls: 'uni-hkr__input', id: id, 'data-k': key }, opts.map(function (o) { return el('option', { value: o[0], text: o[1], selected: o[0] === sel ? true : null }); })), help ? el('p', { cls: 'uni-hkr__help', text: help }) : null ]); } function numField(id, label, key, unit, min, max, stepv, ph, err) { return el('div', { cls: 'uni-hkr__field', 'data-nf': key }, [ el('label', { cls: 'uni-hkr__flabel', 'for': id, text: label }), el('div', { cls: 'uni-hkr__unit' }, [ el('input', { cls: 'uni-hkr__input', id: id, type: 'number', inputmode: 'numeric', min: min, max: max, step: stepv, placeholder: ph, 'data-k': key }), el('span', { text: unit }) ]), el('p', { cls: 'uni-hkr__error', text: err }) ]); } function updateRads() { var items = $all('[data-rad]'); items.forEach(function (it, i) { $('.uni-hkr__rad-title', it).textContent = items.length > 1 ? 'Heizkörper ' + (i + 1) : 'Heizkörper'; $('[data-remove]', it).hidden = items.length === 1; }); $('[data-add-rad]').hidden = items.length >= MAX_RADS; } function readRads() { return $all('[data-rad]').map(function (it) { function v(k) { return $('[data-k="' + k + '"]', it).value; } var kind = v('kind'); if (kind === 'flach') return { kind: kind, type: v('type'), h: num(v('h')), l: num(v('l')) }; if (kind === 'glied') return { kind: kind, h: num(v('gh')), d: v('gd'), count: num(v('gc')) }; return { kind: 'norm', q: num(v('q')), basis: v('b') }; }); } /* ---------- Validierung ---------- */ function setErr(fieldEl, on) { if (fieldEl) fieldEl.classList.toggle('has-error', !!on); } function inRange(v, a, b) { return !isNaN(v) && v >= a && b >= v; } function validate(n) { var bad = []; if (n === 2) { var a = num($('#hkr-area').value); var t = num($('#hkr-temp').value); setErr($('[data-field="area"]'), !inRange(a, 2, 150)); if (!inRange(a, 2, 150)) bad.push('#hkr-area'); setErr($('[data-field="temp"]'), !inRange(t, 15, 26)); if (!inRange(t, 15, 26)) bad.push('#hkr-temp'); } if (n === 3) { var ag = radioVal('hkr-age'); setErr($('[data-field="age"]'), !ag); if (!ag) bad.push('input[name="hkr-age"]'); } if (n === 4 && radioVal('hkr-sys') === 'custom') { var ti = num($('#hkr-temp').value); var vl = num($('#hkr-vl').value); var rlRaw = $('#hkr-rl').value; var rl = num(rlRaw); var vlOk = inRange(vl, 28, 90) && vl > ti + 5; var rlOk = rlRaw === '' || (!isNaN(rl) && vl > rl && rl > ti); setErr($('[data-field="vl"]'), !vlOk); if (!vlOk) bad.push('#hkr-vl'); setErr($('[data-field="rl"]'), !rlOk); if (!rlOk) bad.push('#hkr-rl'); } if (n === 5) { if (radioVal('hkr-mode') === 'neu') { var ml = $('#hkr-maxlen').value; var mlOk = ml === '' || inRange(num(ml), 400, 3000); setErr($('[data-field="maxlen"]'), !mlOk); if (!mlOk) bad.push('#hkr-maxlen'); } else { $all('[data-rad]').forEach(function (it) { var kind = $('[data-k="kind"]', it).value; var checks = kind === 'flach' ? [['l', 300, 3000]] : (kind === 'glied' ? [['gc', 2, 60]] : [['q', 100, 10000]]); checks.forEach(function (c) { var inp = $('[data-k="' + c[0] + '"]', it); var ok = inRange(num(inp.value), c[1], c[2]); setErr($('[data-nf="' + c[0] + '"]', it), !ok); if (!ok) bad.push(inp); }); }); } } if (bad.length) { var f = typeof bad[0] === 'string' ? $(bad[0]) : bad[0]; if (f) f.focus(); return false; } return true; } /* ---------- Navigation ---------- */ function go(n, silent) { step = n; $all('.uni-hkr__step').forEach(function (sec) { sec.classList.toggle('is-active', parseInt(sec.getAttribute('data-step'), 10) === n); }); $all('.uni-hkr__progress li').forEach(function (li) { var p = parseInt(li.getAttribute('data-p'), 10); li.classList.toggle('is-done', n > p); li.classList.toggle('is-current', p === n); if (p === n) li.setAttribute('aria-current', 'step'); else li.removeAttribute('aria-current'); }); $('[data-back]').hidden = n === 1; $('[data-next]').hidden = n === TOTAL_STEPS; $('[data-restart]').hidden = n !== TOTAL_STEPS; $('[data-next]').textContent = n === 5 ? 'Berechnen' : 'Weiter'; var mode = radioVal('hkr-mode'); $('[data-panel="neu"]').hidden = mode !== 'neu'; $('[data-panel="pruefen"]').hidden = mode !== 'pruefen'; if (n === TOTAL_STEPS) renderResult(); if (silent) return; var top = root.getBoundingClientRect().top; if (0 > top) root.scrollIntoView({ block: 'start' }); var sec = $('.uni-hkr__step.is-active'); if (sec) sec.focus({ preventScroll: true }); track('hkr_step', { hkr_step: n }); } function track(ev, data) { try { window.dataLayer = window.dataLayer || []; var o = { event: ev }; Object.keys(data || {}).forEach(function (k) { o[k] = data[k]; }); window.dataLayer.push(o); } catch (e) { /* ignorieren */ } } /* ---------- Ereignisse ---------- */ $('[data-next]').addEventListener('click', function () { if (validate(step)) go(step + 1); }); $('[data-back]').addEventListener('click', function () { go(Math.max(1, step - 1)); }); $('[data-restart]').addEventListener('click', function () { $('#hkr-area').value = ''; $('#hkr-maxlen').value = ''; $all('.has-error').forEach(function (e) { e.classList.remove('has-error'); }); go(1); }); $all('input[name="hkr-room"]').forEach(function (r) { r.addEventListener('change', function () { $('#hkr-temp').value = ROOMS[r.value].t; setErr($('[data-field="temp"]'), false); }); }); $all('[data-pm]').forEach(function (b) { b.addEventListener('click', function () { var t = num($('#hkr-temp').value); if (isNaN(t)) t = 20; $('#hkr-temp').value = clamp(t + parseInt(b.getAttribute('data-pm'), 10), 15, 26); setErr($('[data-field="temp"]'), false); }); }); $all('input[name="hkr-sys"]').forEach(function (r) { r.addEventListener('change', function () { $('[data-custom-sys]').hidden = radioVal('hkr-sys') !== 'custom'; }); }); $all('input[name="hkr-age"]').forEach(function (r) { r.addEventListener('change', function () { setErr($('[data-field="age"]'), false); }); }); root.addEventListener('input', function (e) { var f = e.target.closest ? e.target.closest('.has-error') : null; if (f && f.hasAttribute('data-field') && f.getAttribute('data-field') !== 'age') f.classList.remove('has-error'); if (f && f.hasAttribute('data-nf')) f.classList.remove('has-error'); if (f && f.hasAttribute('data-lead')) f.classList.remove('has-error'); }); root.addEventListener('keydown', function (e) { if (e.key === 'Enter' && e.target.tagName === 'INPUT' && e.target.type !== 'radio' && step !== TOTAL_STEPS) { e.preventDefault(); if (validate(step)) go(step + 1); } }); $('[data-add-rad]').addEventListener('click', function () { var item = radItem(); $('[data-rads]').appendChild(item); updateRads(); var k = $('select', item); if (k) k.focus(); }); $('[data-rads]').appendChild(radItem()); updateRads(); go(1, true); /* Für Tests */ root.__hkr = { demand: demand, factor: factor, sizeFor: sizeFor, radsOutput: radsOutput, neededFlow: neededFlow, readState: readState }; })();
Kurz erklärt

So berechnen Sie einen Heizkörper

Um einen Heizkörper zu berechnen, multiplizieren Sie die Raumfläche mit dem Wärmebedarf pro Quadratmeter. Der liegt je nach Baujahr und Dämmung zwischen etwa 45 und 120 Watt. Das Ergebnis ist die Heizleistung, die der Heizkörper bei Ihrer Vorlauftemperatur liefern muss.

20 m²Raumfläche
90 W/m²Wärmebedarf, Baujahr 1990
1.800 Wbenötigte Heizleistung

Beispiel: Wohnzimmer mit 20 m² in einem Haus von 1990.

Schritt für Schritt

Heizkörper berechnen in drei Schritten

Die Heizleistung allein reicht für die Auswahl nicht aus. Herstellerangaben gelten für eine Vorlauftemperatur von 75 °C, die heute kaum noch eine Heizung fährt. Deshalb gehören drei Schritte zur Berechnung.

01

Heizlast des Raums

Raumfläche mal Wärmebedarf pro Quadratmeter. Eckräume, große Fenster und Räume unter dem Dach brauchen einen Zuschlag.

02

Vorlauftemperatur

Die Normleistung aus dem Datenblatt wird auf Ihre Systemtemperatur umgerechnet. Je niedriger die Temperatur, desto größer muss der Heizkörper sein.

03

Typ und Maße

Mit der Bauhöhe, die unter das Fenster passt, ergibt sich die nötige Länge. Reicht der Platz nicht, wählen Sie einen Typ mit mehr Platten.

Richtwerte

Wie viel Watt Heizleistung pro Quadratmeter?

Ein Raum braucht je nach Baujahr und Dämmzustand etwa 45 bis 120 Watt pro Quadratmeter. Ältere, unsanierte Häuser liegen am oberen Ende, Neubauten ab 2016 am unteren. Die Tabelle zeigt, was das für einen Raum mit 20 m² bedeutet.

Tabelle zur Seite wischen, um alle Spalten zu sehen.

Baujahr und Zustand Wärmebedarf Heizlast bei 20 m² Typ 22, 600 mm hoch, bei 70/55 °C Typ 22, 600 mm hoch, bei 55/45 °C
Vor 1978, unsaniertca. 120 W/m²2.400 W1.800 mm lang2.800 mm lang
Vor 1978, teilsaniertca. 95 W/m²1.900 W1.400 mm lang2.200 mm lang
1978 bis 1994ca. 90 W/m²1.800 W1.400 mm lang2.100 mm lang
1995 bis 2001ca. 75 W/m²1.500 W1.100 mm lang1.800 mm lang
2002 bis 2015 oder Altbau umfassend saniertca. 60 W/m²1.200 W900 mm lang1.400 mm lang
Ab 2016 oder Effizienzhausca. 45 W/m²900 W700 mm lang1.100 mm lang

Statistische Richtwerte für einen Raum mit einer Außenwand, 2,50 m Raumhöhe und 20 °C Raumtemperatur. Vereinfachend gilt eine Normaußentemperatur von −12 °C, die tatsächliche Normaußentemperatur hängt vom Standort ab. Längen auf volle 100 mm aufgerundet.

Für viele Räume müssen Sie die Werte anpassen. Unser Rechner berücksichtigt diese Zuschläge automatisch:

  • +10 %Eckraum mit zwei Außenwänden
  • +8 %Große Fensterfront oder bodentiefe Fenster
  • +5 bis 8 %Erdgeschoss über Keller oder Dachgeschoss
  • +12 %Raumhöhe 3 m statt 2,50 m
  • +12 %Badezimmer mit 24 °C statt 20 °C
Vorlauftemperatur

Heizkörperleistung umrechnen: Warum die Vorlauftemperatur entscheidet

Die Leistung im Datenblatt gilt fast immer für 75/65/20 °C nach EN 442: 75 °C Vorlauf, 65 °C Rücklauf, 20 °C Raumtemperatur. Arbeitet Ihre Heizung mit niedrigeren Temperaturen, gibt derselbe Heizkörper deutlich weniger Wärme ab. So viel leistet ein Flachheizkörper Typ 22 mit 600 × 1.000 mm:

75/65 °C
1.730 W (100 %)
70/55 °C
1.380 W (80 %)
55/45 °C
870 W (50 %)
45/38 °C
560 W (32 %)
35/30 °C
270 W (16 %)

Hellblau: typische Vorlauftemperaturen einer Wärmepumpe.

Die Leistung sinkt nicht linear, sondern mit dem Heizkörperexponenten von etwa 1,3. Deshalb halbiert sie sich schon, wenn die Vorlauftemperatur von 75 auf 55 °C sinkt. Gehen Sie beim Heizkörper berechnen also immer von Ihrer echten Vorlauftemperatur aus und nicht von der Zahl im Datenblatt.

Bauformen

Heizkörpertypen: Was bedeuten 10, 11, 21, 22 und 33?

Die Typnummer beschreibt den Aufbau eines Flachheizkörpers. Die erste Ziffer steht für die Anzahl der Heizplatten, die zweite für die Lamellenreihen (Konvektoren), die zusätzlich Wärme an die Luft abgeben. Mehr Platten und Konvektoren bedeuten mehr Leistung bei gleicher Länge, aber auch mehr Bautiefe.

Typ 10

1 Platte, kein Konvektor, ca. 47 mm tief

Sehr flach und leistungsschwach. Für Flure, Abstellräume oder als Ergänzung.

ca. 620 W je Meter

Typ 11

1 Platte, 1 Konvektor, ca. 63 mm tief

Schlank, für kleine Räume, gut gedämmte Häuser und Nischen.

ca. 980 W je Meter

Typ 21

2 Platten, 1 Konvektor, ca. 66 mm tief

Spürbar mehr Leistung als Typ 11 bei fast gleicher Bautiefe.

ca. 1.290 W je Meter
Standard

Typ 22

2 Platten, 2 Konvektoren, ca. 100 mm tief

Der Standard in Wohnräumen. Guter Kompromiss aus Leistung, Tiefe und Preis.

ca. 1.730 W je Meter

Typ 33

3 Platten, 3 Konvektoren, ca. 155 mm tief

Die meiste Leistung pro Meter. Sinnvoll bei wenig freier Wandfläche oder niedriger Vorlauftemperatur.

ca. 2.400 W je Meter
Heizplatte Konvektor (Lamellen) Leistung bei 600 mm Bauhöhe und 75/65 °C, Werte je nach Hersteller leicht abweichend
Wärmepumpe

Heizkörper für die Wärmepumpe berechnen

Wärmepumpen werden auf möglichst niedrige Vorlauftemperaturen ausgelegt. Für den Betrieb mit Heizkörpern gelten 55 °C als üblicher Richtwert. Bei 45/38 °C liefert ein Heizkörper aber nur noch etwa ein Drittel seiner Normleistung. Derselbe Raum braucht dann rund zweieinhalbmal so viel Heizfläche wie bei 70/55 °C.

Das heißt nicht, dass alle Heizkörper raus müssen. Oft reicht es, einzelne Räume nachzurüsten. So gehen Sie vor:

  1. Jeden Raum prüfenWählen Sie im Rechner oben „Vorhandene Heizkörper prüfen“ und tragen Sie die Heizkörper Raum für Raum ein. Das Ergebnis zeigt die rechnerisch erforderliche Vorlauftemperatur.
  2. Den ungünstigsten Raum findenDer Raum mit der höchsten nötigen Vorlauftemperatur bestimmt, wie warm die Wärmepumpe für das ganze Haus heizen muss.
  3. Nur die Engpässe tauschenHäufig genügt es, in zwei oder drei Räumen einen Typ 22 gegen einen Typ 33 oder einen längeren Heizkörper zu tauschen. Wo der Platz fehlt, helfen Wärmepumpenheizkörper mit leisem Gebläse.
  4. Hydraulischen Abgleich machenErst der hydraulische Abgleich sorgt dafür, dass jeder Heizkörper die Wassermenge bekommt, die er für seine Leistung braucht.
Förderung für neue Heizkörper

Der Austausch gegen Niedertemperaturheizkörper für maximal 55 °C Vorlauftemperatur wird über die BAFA-Heizungsoptimierung mit 15 % gefördert. Voraussetzung: Die Heizungsanlage ist älter als zwei Jahre, eine Gas- oder Ölheizung höchstens 20 Jahre alt. Kommen die Heizkörper zusammen mit einer neuen Wärmepumpe, läuft der Tausch über die KfW-Heizungsförderung (Zuschuss 458).

Badezimmer

Badheizkörper berechnen

Für das Bad rechnen Sie mit 24 °C statt 20 °C. Das erhöht den Wärmebedarf um etwa 12 %. Gleichzeitig sinkt die Leistung des Heizkörpers, weil der Abstand zwischen Wasser- und Raumtemperatur kleiner wird. Der Rechner berücksichtigt beides, wenn Sie „Badezimmer“ wählen.

Soll ein Handtuchheizkörper das Bad allein beheizen, planen Sie Reserve ein. Aufgehängte Handtücher bremsen die Wärmeabgabe spürbar. Passende Modelle finden Sie bei unseren Badheizkörpern.

Genaue Planung

Wann Sie einen Fachbetrieb brauchen

Der Rechner liefert einen Orientierungswert für die Vorauswahl einzelner Heizkörper. Eine raumweise Heizlastberechnung nach DIN EN 12831 ersetzt er nicht.

Die ist sinnvoll, wenn Sie eine Wärmepumpe planen, mehrere Heizkörper gleichzeitig tauschen oder einen hydraulischen Abgleich nach Verfahren B durchführen lassen. Mehr dazu im Ratgeber zur Heizungsoptimierung.

FAQ

Häufige Fragen zum Heizkörper berechnen

Wie berechne ich die richtige Heizkörpergröße?

Multiplizieren Sie die Raumfläche mit dem Wärmebedarf pro Quadratmeter (45 bis 120 W/m² je nach Baujahr). Rechnen Sie die Normleistung aus dem Datenblatt dann auf Ihre Vorlauftemperatur um. Bei 55/45 °C liefert ein Heizkörper nur etwa die Hälfte seiner Normleistung. Aus Bauhöhe und Typ ergibt sich schließlich die nötige Länge.

Wie viel Watt Heizkörper pro Quadratmeter brauche ich?

Im Neubau ab 2016 reichen etwa 45 W/m², in Häusern von 2002 bis 2015 etwa 60 W/m². Häuser von 1978 bis 1994 brauchen etwa 90 W/m², unsanierte Altbauten vor 1978 bis zu 120 W/m². Eckräume, große Fensterflächen und Dachgeschosse liegen etwas darüber.

Wie groß muss ein Heizkörper für 20 m² sein?

Ein Raum mit 20 m² braucht je nach Baujahr 900 bis 2.400 W. In einem Haus von 1990 sind es etwa 1.800 W. Dafür reicht bei 70/55 °C ein Typ 22 mit 600 × 1.400 mm. Bei 55/45 °C, etwa mit einer Wärmepumpe, wären es 600 × 2.100 mm oder ein Typ 33 mit 600 × 1.500 mm.

Welcher Heizkörper eignet sich für eine Wärmepumpe?

Geeignet ist jeder Heizkörper, der bei 55 °C Vorlauf oder weniger genug Leistung für den Raum liefert. In der Praxis sind das großflächige Flachheizkörper vom Typ 22 oder 33. Wo wenig Platz ist, bieten Wärmepumpenheizkörper mit Gebläse viel Leistung auf kleiner Fläche.

Ist ein zu großer Heizkörper ein Problem?

Nein. Das Thermostatventil begrenzt die Wärmeabgabe, der Raum wird also nicht zu warm. Ein großzügiger Heizkörper kostet beim Kauf etwas mehr, kommt aber mit einer niedrigeren Vorlauftemperatur aus.

Was bedeutet 75/65/20 im Datenblatt?

Die drei Zahlen beschreiben die Prüfbedingungen nach EN 442: 75 °C Vorlauf, 65 °C Rücklauf und 20 °C Raumtemperatur. Unter diesen Bedingungen wird die Normleistung gemessen. Ältere Datenblätter nennen oft 90/70/20 °C. Diese Werte liegen höher und sind nicht direkt vergleichbar.

Nächster Schritt

Heizkörper berechnet? Jetzt passenden Heizkörper finden

Nutzen Sie das Ergebnis als Orientierung für Ihre Auswahl. Bei UNIDOMO finden Sie Flach-, Bad- und Designheizkörper namhafter Hersteller. Sind Sie bei Typ, Größe oder Anschluss unsicher, berät Sie unser Team aus dem Meisterbetrieb gerne persönlich.