Einleitung
Ich hatte mich im Post „Luft-Wasser-Wärmepumpe: Wie hoch ist der Verbrauch wirklich?” mit der Frage des Energieverbrauchs für eine Wärmepumpenheizung auseinander gesetzt.
In verlinkten Beitrag habe ich nur die Verbrauchsseite, also die aufgenommene elektrische Energie berücksichtigt.
Der logische nächste Schritt ist es, auch Aussagen über die Effizienz einer Wärmepumpe treffen.
Dazu ist aber auch das Wissen um die abgegebene Wärmeenergie wichtig.
Diese kann man ins Verhältnis zur aufgenommenen elektrischen Energie setzen, um die sogenannte Arbeitszahl der Maschine zu berechnen („Wie viel Wärme bekomme ich pro Kilowattstunde Strom ins Haus?“).
Bei Wärmepumpen ist für die Arbeitszahl der englische Begriff COP („Coefficient of Performance“) gebräuchlich. Dieser wird zudem oft als Jahresmittelwert angegeben, da die Effizienz einer Luft-Wasser-Wärmepumpe stark von der Außentemperatur[1] abhängt.
Nachfolgend schildere ich, wie ich die Daten für die Berechnung des COP einer Wärmepumpe von Daikin ausgelesen, verarbeitet und visualisiert habe.
Ziel
Ich möchte wissen, welche Arbeitszahl (COP) die Wärmepumpe erreicht. Gerne im zeitlichen Verlauf, also stündlich, täglich, monatlich und jährlich.
Ausgangslage
Hier im Haus ist eine Luft-Wasser-Wärmepumpe installiert. Es handelt sich um das Modell Daikin Altherma, das Innengerät hat die Bezeichnung EHBH-CB, das Außengerät heißt ERLQ-CV3.
Für die Berechnung der Arbeitszahl/COP müssen zwei Werte bekannt sein:
- Die aufgenommene elektrische Energie (in kWh)
- Die abgegebene Wärmeenergie (in kWh)
Beide Werte sind der Wärmepumpe bekannt, sie werden auch als Monatssummen im Bedienpanel angezeigt. Jedenfalls funktionierte das eine Weile lang, irgendwann wurden nur noch Fantasiezahlen ausgegeben. Die Wartungstechniker haben das Problem nicht lösen können.
Es ist also ein anderer Weg notwendig, um an die Daten zu kommen. Da ich mit Sicherheit nicht die einzige Person bin, die sich für diese Daten interessiert, habe ich mich auf die Suche nach einer fertigen Lösung gemacht und bin sofort bei GitHub fündig geworden: ESPAltherma.
Bei ESPAltherma handelt es sich um eine Software, die auf einem ESP32 oder ESP8266 läuft und die serielle Schnittstelle der Wärmepumpe ausliest. Die Daten werden dann über MQTT ausgegeben.
Auslesen der Daten
Erster Schritt war das Konfigurieren und Kompilieren der Software und das anschließende Flashen auf einen ESP8266. Dank der guten Dokumentation war das kein Problem und in wenigen Minuten erledigt.
Danach ging es an die Hardware. Ich habe ein kleines Gehäuse (Printables) für die Platine gedruckt, damit diese nicht lose herumfliegt und Kurzschlüsse verursacht 😬

Mit vier Dupont-Kabeln konnte die ESP-Platine dann mit der Wärmepumpe verbunden werden. Die Stromversorgung erfolgt direkt über die Hauptplatine der Wärmepumpe, es ist also nicht mal ein separates USB-Netzteil erforderlich.

Nach dem Hochfahren der Wärmepumpe schlugen die ausgelesenen Werte direkt als JSON beim MQTT-Broker auf:

Damit bin ich schon mal einen Riesenschritt weiter, aber noch lange nicht am Ziel.
Verarbeitung der Daten und Berechnung der Arbeitszahl
Mit den nun vorliegenden Daten lässt sich zumindest schon mal die aufgenommene elektrische Leistung direkt in Grafana bestimmen; nach einer Integration über die Zeit damit auch die aufgenommene Energie.
Die Bestimmung von Wärmeleistung und -energie erfordert aber noch einen weiteren Schritt.
Die abgegebene Wärmeleistung muss aus der Temperaturdifferenz zwischen Vorlauf- und Nachlauftemperatur, der spezifischen Wärmekapazität von Wasser und der Durchflussmenge an der Umwälzpumpe berechnet werden:
$$ P_\textsf{Wärme} = Q \cdot c_\textsf{Wasser} \cdot ( T_\textsf{Vorlauf} - T_\textsf{Rücklauf} ) $$
Erklärung: Wasser fließt vom Vorlauf mit einer bestimmten Temperatur \( T_\textsf{Vorlauf} \) in den Heizkreis und kommt über den Rücklauf mit einer niedrigeren Temperatur \( T_\textsf{Rücklauf} \) wieder. Wir wissen, welche Wärmemenge \( c_\textsf{Wasser} \) Wasser speichern kann und wie viel Wasser pro Zeiteinheit durch die Heizung fließt: \( Q \).
Die oben stehende Formel beschreibt, wie sich aus diesen Parameter die Abgabe-Wärmeleistung in Watt berechnen lässt.
Beispielberechnung
- Durchflussmenge: \(Q = 22.9\ \frac{\textsf{l}}{\textsf{min}} = 0.382\ \frac{\textsf{kg}}{\textsf{s}} \)[2]
- Spezifische Wärmekapazität von Wasser: \(c_\textsf{Wasser} = 4.19\ \frac{\textsf{kJ}}{\textsf{kg} \cdot \textsf{K}} \)
- Temperaturdifferenz: \(T_\textsf{Vorlauf} - T_\textsf{Rücklauf} = 4.2\ \textsf{K} \)
$$ P_\textsf{Wärme} = 0.382\ \frac{\textsf{kg}}{\textsf{s}} \cdot 4.19\ \frac{\textsf{kJ}}{\textsf{kg} \cdot \textsf{K}} \cdot 4.2\ \textsf{K} = 6.71\ \textsf{kW} $$
Die elektrische Seite zu diesem Zeitpunkt sah folgendermaßen aus (angenommen wird \( \textsf{cos}\ \phi = 1 \)[3]):
$$ P_\textsf{elektrisch} = 1.3\ \textsf{kW} $$
Das Verhältnis aus abgegebener Wärmeleistung und aufgenommener elektrischer Leistung ergibt die momentane Arbeitszahl:
$$ \textsf{COP} = \frac{P_\textsf{Wärme}}{P_\textsf{elektrisch}} = 5.1 $$
Dieser Wert gilt nur für den Augenblick. Aussagekräftige Werte erhält man, wenn man die Leistungen über die Zeit integriert und die entstehenden Energiewerte ins Verhältnis setzt.
Zusätzliche Bedingung: die Berechnung darf nur stattfinden, wenn die Wärmepumpe auch tatsächlich läuft (Pause zwischen den Taktungen, Heizpause im Sommer usw. müssen bei der Berechnung berücksichtigt werden).
Damit ich die Daten in Grafana darstellen kann, müssen sie vorher in der InfluxDB-Datenbank vorliegen. Es wäre vermutlich über die Telegraf-Konfiguration möglich, die Daten entsprechend aufzubereiten, aber ich habe mich für einen anderen Weg entschieden, welcher mir auch zukünftig flexible Anpassungen ermöglicht.
Über MQTT lauscht ein Python-Skript nach den o.g. JSON-Objekten mit den Messwerten von ESPAltherma. Für jeden empfangenen Datensatz werden die beschriebenen Berechnungen durchgeführt. Die Ergebnisse werden in das JSON-Objekt als neue Felder eingefügt und finden schließlich über MQTT ihren Platz in InfluxDB.
Ergebnis
Nun liegen alle für die Berechnung des tatsächlichen COP erforderlichen Daten in der Datenbank vor und können direkt in Grafana dargestellt werden.

Die grüne Linie zeigt das Verhältnis von abgegebener zu aufgenommener Leistung. Für die Zeiten, in denen die Wärmepumpe keine Wärme ins Haus bringt, die Umwälzpumpe aber trotzdem läuft, wird der Wert auf 0 gesetzt: Sonst würde ein unrealistisch hoher Wert entstehen.
Nimmt man jetzt die Leistungswerte und integriert sie über die Zeit, ergeben sich die eingesetzte elektrische Energie und die erzeugte Wärmeenergie (in Kilowattstunden, kWh). Setzt man die beiden Energiewerte für einen bestimmten Zeitraum ins Verhältnis, ergibt sich die Arbeitszahl (COP) der Maschine. Das kann man stündlich machen oder täglich oder eben auch für das ganze Jahr („Jahresarbeitszahl“ oder JAZ).

Update 2023-11-16: Was schnell klar wurde: die Wärmepumpe gibt einen zu hohen Wert ihrer Leistungsaufnahme an. Im Diagramm sieht man, dass die gemeldete Leistungsaufnahme über der kompletten Leistungsaufnahme des ganzen Hauses liegt. Es wird also wirklich Zeit, dass ich den Shelly 3EM einbaue …

Ausblick
Mit den nun vorhandenen Daten kann ich die Effizienz der Wärmepumpe über die Zeit beobachten und vielleicht auch die Auswirkungen von Änderungen am System (z.B. Anpassung der Heizkurve) nachvollziehen. Interessant wird auch die Betrachtung des Jahreswertes der Arbeitszahl.
Verwendete Teile (BOM)
- ESP8266 Dev Board (Wemos D1 Mini) mit 4 aufgelöteten Pins (5 V, GND, TX, RX)
- 4 Stück Dupont-Kabel, 40 cm f/f
- 3D-gedrucktes Gehäuse und doppelseitiges Klebeband zum Befestigen
-
Genauer gesagt, von der Temperaturdifferenz zwischen Außenluft und Wassertemperatur im Vorlauf.
-
Ich habe mir zwischenzeitlich ein Shelly 3EM Dreiphasenzähler gekauft und werde diesen bald vor der Wärmepumpe einbauen. Damit sind dann genauere Messungen des Energieverbrauchs möglich.