Wenn die Wärmepumpe zur thermischen Batterie wird: PV-Überschuss für Heizung nutzen
Wer PV-Anlage, Batteriespeicher und Wärmepumpe kombiniert hat, kennt diese Mittagssituation: Der Akku ist voll, das Warmwasser ist längst warm, und trotzdem schiebt die Anlage weiter Kilowatt um Kilowatt ins öffentliche Netz – für ein paar Cent Einspeisevergütung. Genau in diesem Moment wird die Wärmepumpe interessant, denn sie kann PV-Strom in etwas verwandeln, das sich speichern lässt: Wärme im Gebäude. Wie ich PV-Überschuss für die Heizung nutze, zeige ich in diesem Artikel im Detail.
In meinem Setup mache ich das nicht über eine komplette Heizkurven-Verschiebung, sondern über einen einzelnen, gezielten Hebel: den Vorlauftemperatur-Offset meiner Daikin Altherma. Ist genug PV-Überschuss da, hebe ich ihn temporär um +2 °C an. Die Idee dahinter: Statt den Überschuss ungenutzt einzuspeisen, lasse ich die Wärmepumpe etwas mehr Heizwärme erzeugen und einen Teil der Energie im Haus zwischenspeichern.
Das Ganze läuft nicht nach dem Motto „PV-Überschuss da → Vorlauf hoch”. Damit würde man sich schnell ins eigene Knie schießen. Die Automation berücksichtigt deshalb mehrere Signale gleichzeitig – unter anderem auch eine PV-Prognose von Solcast, um nicht auf jede kurze Wolkenlücke hereinzufallen.
Warum überhaupt an der Vorlauftemperatur drehen?
Eine Wärmepumpe ist am effizientesten, wenn die Vorlauftemperatur so niedrig wie möglich bleibt – jedes Grad mehr kostet Wirkungsgrad. Im Normalbetrieb ist ein dauerhaft angehobener Vorlauf deshalb keine gute Idee.
Bei PV-Überschuss sieht die Rechnung aber anders aus. Wenn der Akku schon bei 80–90 % steht und Warmwasser kein Thema mehr ist, kann es sich lohnen, die Wärmepumpe für eine Weile etwas stärker arbeiten zu lassen. Statt mit dem normalen Sollwert läuft sie dann kurzzeitig mit einem höheren – die zusätzliche Energie landet nicht im Netz, sondern als Wärme im Gebäude:
PV-Überschuss → Wärmepumpe → Heizsystem → Gebäude als Speicher
Das kostet trotzdem etwas Effizienz. Deshalb soll dieser „PV-Boost” wirklich nur dann anspringen, wenn tatsächlich reichlich überschüssige Energie vorhanden ist – nicht bei jeder kurzen Sonnenspitze.
Die Entscheidungslogik: mehrere Bedingungen, nicht ein einzelner Schwellenwert
Meine Automation zieht dafür sechs Informationen gleichzeitig heran: die aktuelle Einspeiseleistung, den Batterieladezustand, den Betriebsmodus der Wärmepumpe, den aktuell gesetzten Vorlauf-Offset, den Status des Warmwasser-PV-Boosts und die Solcast-Prognose. Erst wenn alle relevanten Bedingungen gleichzeitig erfüllt sind, wird der Offset angehoben:
| Bedingung | Wert |
|---|---|
| Wärmepumpe | Heizbetrieb |
| Aktueller Vorlauf-Offset | 0 °C |
| PV-Einspeisung | > 1.500 W |
| Dauer des Überschusses | mindestens 3 Minuten |
| Akku | > 75 % |
| Solcast-Prognose (+1 h) | > 2.000 W |
| Warmwasser-PV-Boost | aus |
| Neuer Offset | +2 °C |
Warmwasser hat Vorrang
Ich betreibe bereits eine eigene Automation, die den Warmwasserspeicher über SG-Ready mit PV-Überschuss lädt. Warmwasser hat bei mir klar Priorität – wenn dieser Boost aktiv ist (switch.smart_grid_1_2 = an), soll die Heizungsautomation nicht gleichzeitig um denselben Überschuss konkurrieren. Deshalb prüft sie zuerst, ob dieser Schalter aus ist. Das ist ein Detail, das bei komplexeren PV-Automationen mit mehreren Verbrauchern schnell wichtig wird: Irgendjemand muss festlegen, wer zuerst bedient wird.
Für die Schaltung der SG-Ready-Eingänge nutze ich bei meiner Anlage einen Shelly. Damit kann Home Assistant den entsprechenden Eingang der Wärmepumpe über meine Automationen ansteuern.
Von mir verwendet: Shelly bei Amazon ansehen*
* Affiliate-Link: Wenn du über einen entsprechend gekennzeichneten Link etwas kaufst, erhalte ich möglicherweise eine Provision. Für dich ändert sich der Preis dadurch nicht. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen.
1.500 W und drei Minuten – warum nicht sofort reagieren?
PV-Leistung schwankt. Eine kurz vorbeiziehende Wolke kann für ein paar Sekunden hohe Einspeisewerte erzeugen, ohne dass wirklich nachhaltiger Überschuss vorhanden ist. Deshalb muss die Einspeisung nicht nur über 1.500 W liegen, sondern das auch drei Minuten am Stück tun, bevor überhaupt etwas passiert. Das ist die einfachste Form von Stabilisierung gegen Kurzzeit-Rauschen.
Der Akku muss schon gut geladen sein
Der Schwellenwert von 75 % Akkuladung stellt sicher, dass ich PV-Strom nicht künstlich in Wärme umwandle, während der Speicher noch deutlich Kapazität frei hätte. Meine grundsätzliche Prioritätenkette lautet:
Hausverbrauch → Batteriespeicher → Warmwasser → Heizung → Netz
75 % ist dabei kein Wert, der sich pauschal übertragen lässt – bei einem größeren oder kleineren Speicher als meinem kann ein anderer Schwellenwert sinnvoller sein.
Solcast als Absicherung nach vorne
Die aktuelle Einspeisung sagt nichts darüber aus, wie es in den nächsten Minuten weitergeht. Deshalb prüfe ich zusätzlich sensor.solcast_pv_forecast_leistung_in_1_stunde auf einen Wert über 2.000 W. Damit fragt die Automation im Grunde: „Habe ich jetzt Überschuss – und sieht es auch für die nächste Stunde noch nach ausreichend PV-Leistung aus?” Das verhindert, dass ausgerechnet kurz vor einer aufziehenden Wolkenfront der Boost gestartet wird. Eine Prognose ist natürlich nie perfekt, aber sie macht die Entscheidung spürbar konservativer.
Kein Aufschaukeln, kein Mehrfach-Setzen
Zwei weitere Bedingungen sorgen für sauberes Verhalten: Die Wärmepumpe muss tatsächlich im Heizbetrieb (heat) laufen, sonst würde der Offset in einem falschen Kontext gesetzt. Und der aktuelle Offset muss noch bei 0 °C stehen – ist er bereits erhöht, greift die Automation nicht erneut. Damit läuft der Boost als einfache Zustandslogik: 0 °C → Bedingungen erfüllt → +2 °C, und dann bleibt es dabei, bis eine andere Automation ihn wieder zurücksetzt.
Neben dem eigentlichen Überschuss-Trigger gibt es noch einen zweiten, unscheinbaren: einen time_pattern-Trigger, der alle fünf Minuten prüft. Der Grund: Nicht alle Bedingungen müssen zwingend gleichzeitig „frisch” eintreten. Der Akku kann zum Beispiel schon seit einer Stunde über 75 % liegen, während der PV-Überschuss erst jetzt lange genug stabil ist. Die periodische Prüfung fängt solche Fälle ab, ohne dass extra ein neuer Trigger-Wert überschritten werden muss.
Die Abbruchlogik ist mindestens so wichtig wie der Start
Eine Startbedingung allein macht noch keine brauchbare Automation. Genauso wichtig ist die Frage, wann der Boost wieder beendet wird. Zieht um 12:20 Uhr eine Wolke auf, soll die Wärmepumpe nicht einfach dauerhaft mit erhöhtem Offset weiterlaufen. Dafür gibt es bei mir eine zweite, bewusst getrennte Automation mit zwei unabhängigen Abbruchpfaden:
- Die Einspeiseleistung fällt 15 Minuten ununterbrochen unter 500 W.
- Der Akku fällt unter 60 %.
Auffällig ist, dass Start- und Stopp-Schwelle bewusst unterschiedlich sind: Start bei über 1.500 W, Ende erst unter 500 W – und das auch noch 15 Minuten lang. Das ist klassische Hysterese. Ohne diesen Puffer würde die Automation bei Werten knapp um einen einzigen Schwellenwert ständig hin- und herspringen (1.520 W → ein, 1.480 W → aus, 1.530 W → wieder ein …) – für die Wärmepumpe keine sinnvolle Regelung. Denselben Trick nutze ich beim Akku: Start bei über 75 %, Stopp erst unter 60 %.
Beide Automationen im Original
Start-Automation:
alias: Heizung PV-Überschuss – Vorlauf-Offset erhöhen
description: >-
Erhöht bei ausreichendem PV-Überschuss den Vorlauftemperatur-Offset der
Altherma um +2°C, um überschüssigen PV-Strom in Heizwärme statt ins Netz
zu stecken.
Nur aktiv wenn: WP im Heizbetrieb, Offset aktuell 0, kein Warmwasser-PV-Boost
aktiv, Einspeiseleistung > 1500 W seit 3 Minuten, Akku ≥ 75% und Solcast
eine anhaltende PV-Leistung prognostiziert.
triggers:
- trigger: numeric_state
entity_id: sensor.tibber_pulse_XXXX_einspeiseleistung
above: 1500
for: '00:03:00'
id: surplus_start
- trigger: time_pattern
minutes: /5
id: periodic_check
conditions:
- condition: state
entity_id: climate.altherma_leaving_water_offset
state: heat
- condition: numeric_state
entity_id: climate.altherma_leaving_water_offset
attribute: temperature
below: 1
- condition: state
entity_id: switch.smart_grid_1_2
state: 'off'
- condition: numeric_state
entity_id: sensor.tibber_pulse_XXXX_einspeiseleistung
above: 1500
- condition: numeric_state
entity_id: sensor.garage_goodwe_battery_state_of_charge
above: 75
- condition: numeric_state
entity_id: sensor.solcast_pv_forecast_leistung_in_1_stunde
above: 2000
actions:
- action: climate.set_temperature
target:
entity_id: climate.altherma_leaving_water_offset
data:
temperature: 2
- action: notify.mobile_app_dein_handy
data:
title: 🔥 Heizung PV-Boost gestartet
message: >-
Vorlauf-Offset wurde wegen PV-Überschuss auf +2°C gesetzt.
☀️ Einspeisung: {{ states('sensor.tibber_pulse_XXXX_einspeiseleistung')
| float(0) | round(0) }} W
🔋 Akku: {{ states('sensor.garage_goodwe_battery_state_of_charge') |
float(0) | round(0) }} %
📈 Solcast +1h: {{
states('sensor.solcast_pv_forecast_leistung_in_1_stunde') | float(0) |
round(0) }} W
mode: singleCode-Sprache: PHP (php)
Reset-Automation:
alias: Heizung PV-Überschuss – Offset zurücksetzen
description: >-
Setzt den Vorlauf-Offset der Altherma zurück auf 0°C, sobald der PV-Überschuss
wegbricht oder der Akku unter 60% fällt.
Zwei Abbruchpfade:
1. Einspeiseleistung 15 Minuten ununterbrochen unter 500 W
2. Akku fällt unter 60%
triggers:
- trigger: numeric_state
entity_id: sensor.tibber_pulse_XXXX_einspeiseleistung
below: 500
for: '00:15:00'
id: surplus_lost
- trigger: numeric_state
entity_id: sensor.garage_goodwe_battery_state_of_charge
below: 60
id: battery_low
conditions:
- condition: numeric_state
entity_id: climate.altherma_leaving_water_offset
attribute: temperature
above: 0
actions:
- action: climate.set_temperature
target:
entity_id: climate.altherma_leaving_water_offset
data:
temperature: 0
- action: notify.mobile_app_dein_handy
data:
title: ⬇️ Heizung PV-Boost beendet
message: >-
Vorlauf-Offset wurde wieder auf 0°C zurückgesetzt.
Grund: {{ '☀️ Überschuss unter 500 W (15 Min)' if trigger.id ==
'surplus_lost' else '🔋 Akku unter 60%' }}
mode: singleCode-Sprache: JavaScript (javascript)
Ich habe Start und Stopp bewusst als zwei getrennte Automationen gebaut statt als eine große. Das macht jede einzelne leichter lesbar und die Logik lässt sich später gezielter erweitern – etwa um weitere Abschaltgründe wie zu hohe Außentemperatur, bereits erreichte Raumtemperatur, einen Fehlerzustand der Wärmepumpe, einen hohen Strompreis oder eine einbrechende PV-Prognose. Wer die Climate-Integration von Home Assistant noch nicht kennt: Dort findest du die vollständige Dokumentation zu climate.set_temperature und den übrigen verfügbaren Diensten.
Ein typischer Sonnentag
10:00 Uhr – Die PV-Anlage liefert 3 kW, das Haus braucht 1 kW, der Akku steht bei 55 %. Zwar werden 2 kW eingespeist, aber der Akku liegt unter 75 % – kein Boost. Der Überschuss lädt stattdessen den Speicher.
11:30 Uhr – Der Akku ist inzwischen bei 78 %, die Einspeisung liegt stabil bei 1.800 W, Solcast erwartet für die kommende Stunde weiterhin über 2 kW, der Warmwasser-Boost ist aus. Alle Bedingungen sind erfüllt: Vorlauf-Offset geht auf +2 °C.
13:00 Uhr – Weiterhin hohe PV-Leistung. Die Wärmepumpe läuft mit erhöhtem Offset, die Automation setzt ihn nicht erneut, weil er bereits aktiv ist.
14:30 Uhr – Eine Wolkenfront zieht auf, die Einspeisung sinkt auf 400 W. Das allein beendet noch nichts – erst wenn dieser Zustand 15 Minuten anhält, setzt die Reset-Automation den Offset wieder auf 0 °C zurück.
Das Prinzip lässt sich übertragen: PV-Überschuss für Heizung nutzen mit anderer Hardware
Meine Automation ist konkret auf meine Kombination aus Daikin Altherma, Home Assistant, Tibber Pulse, GoodWe-Speicher, Solcast und dem separaten Warmwasser-Boost zugeschnitten. Das Grundprinzip braucht aber nur fünf Dinge: einen Sensor für den aktuellen PV-Überschuss, einen Sensor für den Batteriestand, eine Möglichkeit, den Heizungssollwert bzw. -offset zu verändern, optional eine PV-Prognose, und eine Möglichkeit, konkurrierende Verbraucher zu priorisieren. Mit anderen Wärmepumpen und Speichersystemen lässt sich eine vergleichbare Logik also genauso umsetzen, um PV-Überschuss für Heizung zu nutzen.
PV-Überschuss erfassen
In meinen Automationen verwende ich aktuell die Messwerte meines Tibber Pulse. Den hatte ich bereits aus der Zeit, in der ich selbst Tibber genutzt habe, und konnte ihn deshalb einfach weiterverwenden. Für die Logik ist aber nicht Tibber entscheidend – Home Assistant benötigt lediglich einen zuverlässig aktualisierten Messwert für Netzbezug beziehungsweise Einspeisung.
Wer keinen Tibber Pulse besitzt, kann je nach Stromzähler alternativ einen passenden IR-Lesekopf verwenden und dessen Messwerte in Home Assistant einbinden.
Alternativen IR-Lesekopf bei Amazon ansehen*
Home Assistant Hardware
Home Assistant selbst läuft bei mir auf einem Raspberry Pi 4. Statt dauerhaft auf einer microSD-Karte zu arbeiten, nutze ich eine externe SSD. Gerade wenn Home Assistant viele Sensorwerte, Verlaufsdaten und Automationen verarbeitet, ist das für mich die deutlich angenehmere Lösung.
Meine Basis: Raspberry Pi 4 bei Amazon ansehen*
Speicher: von mir verwendete externe SSD bei Amazon ansehen*
Welche Hardware sinnvoll ist, hängt natürlich davon ab, was Home Assistant später alles übernehmen soll. Für eine einzelne Automation braucht es keinen besonders leistungsfähigen Server. Bei mir laufen inzwischen allerdings PV-Anlage, Batterie, Wärmepumpe und zahlreiche weitere Smart-Home-Komponenten über dasselbe System.
Warum „PV-Überschuss da → Heizung hoch” nicht reicht
Die naheliegendste Version wäre: Überschuss über 1.500 W → Vorlauf +2 °C. Technisch würde das funktionieren. Praktisch übersieht sie aber jede Menge Fälle: Was, wenn der Akku erst bei 20 % steht? Wenn gerade Warmwasser aufgeheizt wird? Wenn nur eine Wolkenlücke für 30 Sekunden hohe Werte liefert? Wenn die Wärmepumpe gar nicht heizt? Wenn der Überschuss zehn Minuten später wieder weg ist?
Genau deshalb braucht eine brauchbare Lösung mehrere Ebenen: Startbedingungen, eine Priorisierung gegenüber anderen Verbrauchern, Hysterese gegen das Aufschaukeln, eine Prognose als Absicherung nach vorne, den eigentlichen Boost – und eine ebenso durchdachte Abbruchlogik. Erst das macht aus einer simplen Regel ein kleines Energiemanagementsystem.
Die wichtigsten Stellschrauben, um PV-Überschuss für die Heizung zu nutzen
Keiner der von mir verwendeten Werte ist als allgemeingültige Empfehlung gedacht – sie sind mein Startpunkt und werden sich mit den ersten echten Heiztagen im Herbst vermutlich noch verschieben:
- Start-Überschuss: 1.500 W – abhängig von Wärmepumpe und Haus
- Start-Akku: 75 % – bei einem größeren oder kleineren Speicher ggf. anders zu wählen
- Abbruch-Überschuss: 500 W – je nachdem, wie aggressiv der Überschuss genutzt werden soll
- Verzögerung beim Abschalten: 15 Minuten
- Offset-Höhe: +2 °C – bewusst moderat, weil eine stärkere Anhebung mehr Wärme bringt, aber auch den COP stärker verschlechtert
Wie gut diese Werte tatsächlich zu meinem Haus passen, wird sich erst im laufenden Heizbetrieb zeigen.
* Mit * gekennzeichnete Links sind Affiliate-Links. Wenn du darüber etwas kaufst, erhalte ich möglicherweise eine Provision. Für dich entstehen dadurch keine zusätzlichen Kosten. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen.