Heizung steuern: PV Überschuss > ESP32 & Home Assistant

Inhaltsverzeichnis
  1. Estrich als Pufferspeicher: Am Nachmittag bereits für den nächsten Tag heizen?
  2. Klappt vermutlich mit jeder Heizung: Mit ESP32 die Temperatur vortäuschen …
  3. Aufbau der Steuerung und notwendige Sensoren
  4. Mein Home Assistant - Setup für die Heizungssteuerung
  5. Heizenergie bisher für diesen Tag
  6. In der Praxis nach über einem Jahr Betrieb → PV Eigenverbrauch: 75 % Autarkiegrad
  7. Fazit
Kommentare:2
Automationen Home Assistant: Steckdosen steuert Rasenmähroboter

Nach ca. 20 Jahren konnte ich mit Home Assistant und einem ESP32 die Kontrolle über meine Wärmepumpe übernehmen und diese damit steuern. Kombiniert mit den Leistungsdaten der PV-Anlage ist Home Assistant in der Lage, den PV Überschuss möglichst direkt für das Heizen zu verwenden und somit den Eigenverbrauch zu steigern:

Estrich als Pufferspeicher: Am Nachmittag bereits für den nächsten Tag heizen?

Dank der sehr trägen Fußbodenheizung kann die Heizung für einige Stunden deaktiviert werden, ohne die Raumtemperatur zu beeinflussen. Der Estrich hat ein enormes Speicherpotential und übertrifft einen typischen Pufferspeicher um ein Vielfaches. Idealerweise ist die Heizung nach Sonnenuntergang nicht mehr aktiv, wodurch die Batterie der PV-Anlage abends und in der Nacht rein für den Haushaltsstrom verwendet werden kann.

Klappt vermutlich mit jeder Heizung: Mit ESP32 die Temperatur vortäuschen …

Wie beschrieben ist meine Wärmepumpe über 20 Jahre alt und besitzt weder eine Smart Grid Ready (SG Ready) - Schnittstelle noch eine andere Möglichkeit in die Steuerung einzugreifen. Ein Blick in die Dokumentation der Heizungssteuerung hat mir verraten, dass es sich bei den Temperatursensoren des Boilers und Pufferspeichers um PTC-Widerstände handelt, einfache Widerstände die sich mit der Temperatur verändern. Dies hat mich auf die Idee gebracht andere Widerstände einzusetzen und dadurch die Pufferspeicher- und Boilertemperatur vorzutäuschen. Wichtig dabei war mir, dass die Heizung auch ohne Home Assistant weiter funktioniert, daher verwende ich die verbauten PTC-Temperatursensoren weiter und ersetze diesen mit einem niedrigen Widerstandswert für das Einschalten und einem hohen Widerstandswert für das Ausschalten. Erste Versuche mit einem digitalen Potentiometer führten nicht zum Erfolg. Letztlich griff ich auf simple Relays und feste Widerstände zurück.

Smart Grid Ready (SG Ready) direkt oder mit Widerständen nachrüsten?

Für eine Heizung mit SG-Ready Schnittstelle, könnten das hier verwendete Relaisboard alternativ auch direkt für das Schalten der SG-Ready Zustände verwendet werden, dazu würde ein 2-Kanal-Relay-Board reichen. Das SG-Ready-Label definiert vier Betriebszustände für die Steuerung der Heizung, hier vereinfacht: 

  • Betriebszustand 1 (Relais Schaltzustand: 1:0): Betrieb der Wärmepumpe für maximal zwei Stunden pro Tag gesperrt
  • Betriebszustand 2 (Relais Schaltzustand: 0:0): Energieeffizienter Normalbetrieb 
  • Betriebszustand 3 (Relais Schaltzustand: 0:1): Wärmepumpe mehr als gewöhnlich einschalten: Einschaltempfehlung
  • Betriebszustand 4 (Relais Schaltzustand 1:1): Wärmepumpe aktiv einschalten

Besitzt die Wärmepumpe kein SG-Ready, kann eine ähnliche Funktionalität mit Widerständen umgesetzt werden. Wie hier beschrieben, sind beim Einsatz von Widerständen wesentlich mehr Betriebszustände, als mit SG-Ready möglich: z.B. die Unterscheidung zwischen Heizung und Warmwasser:

Ergänzend zur Heizungssteuerung: ESP32 und 4-Kanal Relay-Board + Widerstände

Für die Überwachung der Temperaturwerte des Boilers und Pufferspeichers in Home Assistant habe ich bereits einen ESP32 im Einsatz. Durch eine Erweiterung mit einem 4-Kanal Relay Board kann ich jeweils 2 Relays für die Steuerung des Warmwassers und 2 Relays für das Steuern des Pufferspeichers verwenden: Relay 1 und 2 wird für den Boiler und Relay 3 und 4 für den Pufferspeicher.  Als Widerstände habe ich 1kOhm zur Verfügung, was bei dem verbauten PTC-Temperatursensor einen Temperaturwert von 25°C entspricht. Ein Wert von 1,25 kOhm würde bereits über 50°C bedeuten: ähnlich einem aufgeheizten Boiler. Keinen 250 Ohm Widerstand zur Hand, habe ich für den Boiler 4 Stück 1kOhm in einer Parallelschaltung verwendet. Hier die schematische Darstellung für das Warmwasser Relays 1 und 2:

Wenn die beiden Relays nicht aktiv sind, wird der ursprüngliche PTC-Temperatursensor verwendet. Das Aktivieren des ersten Relays unterbricht den PTC und ersetzt diesen mit den optionalen Widerständen, was einer Temperatur von über 50°C entspricht und die Warmwasseraufbereitung deaktiviert. Schalte ich das 2te Relay zu, werden die Widerstände für den 250Ohm-Wert überbrückt und der verbleibende 1kOhm-Widerstand täuscht der Heizung 25°C vor: Zeit für die Warmwasseraufbereitung. 

Die Schaltung ermöglicht also 3 Zustände für den Boiler

  • bisheriger Automatikbetrieb mit dem PTC der Heizung (Relais 1 aus + Relais 2 aus)
  • Heizung deaktivieren (Relais 1 ein + Relais 2 aus)
  • Heizung aktivieren (Relais 1 ein + Relais 2 ein)

Hier die 4 Relays: Für Boiler und Pufferspeicher: Die dreipoligen Kabel: Gelbgrün, Blau und Braun führen zum bestehenden PTC-Anschlusskabel.

Für das Warmwasser funktioniert das so weit. Bei der Heizung sind die simulierten 25°C zu hoch, daher habe ich die Widerstände im Pufferspeicher wie folgt angepasst: Den 1kOhm Widerstand habe ich durch zwei 470 Ohm Widerstände ersetzt, was 940Ohm ergibt und einer Temperatur von 17°C entspricht. Ein zusätzlicher 300Ohm-Widerstand ergibt 1,24kOhm, was einer Temperatur von etwas über 50°C entspricht.

Aufbau der Steuerung und notwendige Sensoren

Vorab noch ein Wort zu meiner Heizung

Der Drehstromkompressor der alten Grundwasser-Wärmepumpe besitzt lediglich die beiden Betriebszustände ein und aus. Beim Einschalten der Heizung steigt der Druck allmählich an, wobei der Stromverbrauch je nach Zieltemperatur auf maximal 4,5 kW klettert. Ein integrierter Pufferspeicher dient lediglich als hydraulische Entkopplung. Die Wärmeversorgung für die Fußbodenheizung erfolgt über Umwälzpumpen, die den Pufferspeicher durchströmen. Die Wärmepumpe wird aktiviert, sobald die Temperatur im Pufferspeicher unter einen bestimmten Wert fällt, und schaltet sich ab, wenn eine festgelegte Temperatur erreicht ist. Technisch gesehen ähnelt die Beladung des Pufferspeichers also der Warmwasseraufbereitung, mit einem kleinen Unterschied: Die Druck und somit die Zieltemperatur wird anhand einer hinterlegten Heizkurve und mithilfe eines Außenfühlers angepasst.

Benötigte Hardware: Voraussetzungen

Mein Setup kombiniert die Informationen der folgenden Artikel:

  1. Hardware für Home-Assistant und Installation, siehe: Hardware für Home Assistant? Varianten: HAOS vs. Docker
  2. ESP-Home und ESP32-Mikrocontroller, siehe: Home-Assistant + DIY Mikrocontroller + ESP Home (Docker)

ESP32 ergänzend zur Heizungssteuerung + Minimum Logik

Den ESP32 Mikrocontroller habe ich nicht direkt in die Steuerung der Heizung integriert, auch ersetzt er diese nicht. Ich habe den ESP32-Mikrocontroller vielmehr um die bestehende Steuerung herumgebaut: mit eigenen Sensoren und eigenen Relais für das Manipulieren der bestehenden Heizungssteuerung. Vom ESP32 für die Heizungs(über)steuerung führen dutzende Kabel zu mehreren Temperatursensoren: verbaut an den unterschiedlichsten Stellen der Heizung und des Hauses:

Hier ein grober Überblick der wesentlichen Komponenten (zusätzlich zu Home-Assistant, ESP-Home und einem ESP32):

  • DS18B20 Temperatursensoren für die Heizung und Außentemperatur, siehe: DS18B20 - Temperatur-Sensoren in ESP-Home
    verbaute DS18B20 Temperatursensoren:
    • direkt in der Wärmepumpe im Wärmetauscher
    • Boiler
    • Pufferspeicher
    • ...
  • DHT11-Temperatur-Sensoren für bestimmte Wohnräume: ESPHome: Temperatur- und Feuchtigkeitssensoren DHT11/22
  • Relay-Board für das Steuern der Heizung: Relay Board ESP32 - ESPHome
    • Relay1: Warmwassertemperatur vortäuschen: ohne Relay2: warmes Wasser
    • Relay2: Warmwasser kalt vortäuschen
    • Relay3: Pufferspeichertemperatur vortäuschen: ohne Relay4: warmer Pufferspeicher
    • Relay4: Pufferspeicher kalt vortäuschen

Das komplette ESP-Home-Projekt für den ESP habe ich wie folgt zusammengestellt:

[+]
esphome:
  name: heating

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "???"

ota:  
  platform: esphome
  password: "???"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Heating Fallback Hotspot"
    password: "???"
  on_disconnect:
    if:
        condition:
          switch.is_on: relay4
        then:
          - switch.turn_off: relay3
          - switch.turn_off: relay4

captive_portal:

one_wire:
  - platform: gpio
    pin: GPIO13 
    id: hub_1

# Relais
switch:
  - platform: gpio
    pin: GPIO32
    name: Relay-Heizung-Wasser-fake
    id: relay1
    inverted: true
  - platform: gpio
    pin: GPIO33
    name: Relay-Heizung-Wasser-kalt
    id: relay2
    inverted: true
  - platform: gpio
    pin: GPIO25
    name: Relay-Heizung-Puffer-fake
    id: relay3
    inverted: true
  - platform: gpio
    pin: GPIO26
    name: Relay-Heizung-Puffer-kalt
    id: relay4
    inverted: true

# Individual sensors
sensor:
  - platform: uptime
    name: heating.uptime
  - platform: dht
    pin: GPIO23
    model: DHT11
    temperature:
      name: "Kueche.Temperature"
      id: kueche_temperature
    humidity:
      name: "Kueche.Humidity"
  - platform: dht
    pin: GPIO1
    model: DHT11
    temperature:
      name: "Wohnzimmer.Temperature"
      id: wohnzimmer_temperature
    humidity:
      name: "Wohnzimmer.Humidity"
  - platform: dallas_temp  
    one_wire_id:  hub_1
    address: 0x???
    name: "heating.Warmwasser"
    on_value_range:
      - below: 40.0
        then:
          - switch.turn_off: relay1
          - switch.turn_off: relay2
      - above: 48.0
        then:
          - switch.turn_on: relay1
          - switch.turn_off: relay2
  - platform: dallas_temp  
    one_wire_id:  hub_1
    address: 0x???
    name: "heating.Pufferspeicher"
  - platform: combination
    type: median
    name: "EG.Temperatur"
    sources:
      - source: kueche_temperature
      - source: wohnzimmer_temperature

Wie aus dem Projekt ersichtlich ist, habe ich bestimmte Aktionen direkt über Trigger des ESP32 umgesetzt. Damit ist der ESP32 in der Lage beim Ausfall des WLANs, oder falls Home Assistant einmal nicht verfügbar ist, die Kontrolle an die eigentliche Steuerung der Heizung zu übergeben. Zudem wird die Warmwasseraufbereitung gestoppt, wenn das Warmwasser seine Zieltemperatur erreicht hat, oder alle Relais deaktiviert, wenn die Wassertemperatur einen bestimmten Wert unterschreitet. 

Die Wärmepumpe kann nicht mehr als 48 °C für die Warmwasseraufbereitung und ab dem Erreichen dieser Temperatur, lasse ich die Relais deaktivieren, wodurch die Wärmepumpe nicht weiter mit falschen Temperaturwerten getäuscht wird. Zudem gibt der ESP32 die Kontrolle wieder an die Heizung zurück, wenn das Wasser unter 40 °C fällt: Eine Art Notfall, damit das Wasser nicht ganz kalt wird. 

Die Temperaturwerte der Wohnräume habe ich über einen "Combination-Sensor" vom Typ Median zu einem Wert kombiniert und dienen als Basis für die in Home Assistant umgesetzte Heizungsübersteuerung. Der Median kann im Gegensatz zum Mittelwert besser mit einzelnen Ausreißern umgehen.

Denkbar wäre auch, dass der ESP32 direkt die Daten des Smartmeter abfragt und selbstständig Entscheidungen für das Aktivieren der Heizung im Falle eines PV-Überschusses trifft. Ich überlasse diese Aufgabe Home Assistant.

Mein Home Assistant - Setup für die Heizungssteuerung

Logik ausgegliedert: Skripte und Template-Sensoren:

Die folgenden Skripte und Helfer erleichtern es, die Automatisierung für die Steuerung der Heizung übersichtlich und nachvollziehbar zu halten.

Home-Assistant Skripte

Dank ESP-Home-Integration sind alle Sensoren und das 4-Kanal-Relay des ESP32 in Home-Assistant verfügbar:

Damit die Schaltvorgänge der Relais einfacher angesprochen werden können, habe ich Skripts für die einzelnen Zustände angelegt:

Skript Sequenz
Warmwasser automatisch

Relay-Heizung-Wasser-fake ausschalten (Relay1)

Warmwasser ein

Relay-Heizung-Wasser-kalt einschalten (Relay2)
Relay-Heizung-Wasser-fake einschalten (Relay1)

Warmwasser aus

Relay-Heizung-Wasser-kalt ausschalten (Relay2)
Relay-Heizung-Wasser-fake einschalten (Relay1)

Pufferspeicher automatisch

Relay-Heizung-Puffer-fake ausschalten (Relay3)

Pufferspeicher ein

Relay-Heizung-Puffer-kalt ein (Relay4)
Relay-Heizung-Puffer-fake ein (Relay3)

Pufferspeicher aus

Relay-Heizung-Puffer-kalt aus (Relay4)
Relay-Heizung-Puffer-fake ein (Relay3)

Helfer für die Raum-Solltemperatur

Mithilfe eines "Zahlenwert-Eingabe"-Helfer kann die gewünschte Raumtemperatur komfortabel in der Home-Assistant-Oberfläche angepasst werden kann:

Helfer Template Sensor: Heizbedarf für den aktuellen Tag

Folgender Hilfssensor verwendet die Raum-Solltemperatur: input_number.heizung_raum_solltemperatur, die aktuelle Innentemperatur: sensor.eg_temperatur, die Innentemperatur im 24h Mittel: sensor.aussen_temperature_24 und den Energiebedarf des Haushalts: sensor.sensor_household_energy_24h und berechnet anhand der Variablen für die Wohnfläche (qm), dem Raumheizfakter (0,8) und dem COP der Wärmepumpe (cop) den für 24h notwendigen Heizbedarf:

sensor.heating_energy_demand_forecast_today

{% set qm = 180 %}
{% set raumheizfaktor = 0.8 %}
{% set cop = 4 %}

{# Sensoren auslesen #}
{% set soll = states('input_number.heizung_raum_solltemperatur') | float(0) %}
{% set ist_eg = states('sensor.eg_temperatur') | float(0) %}
{% set aussen_24 = states('sensor.aussen_temperature_24') | float(0) %}
{% set haus_pwr_24 = states('sensor.sensor_household_energy_24h') | float(0) %}

{# Thermischer Bedarf basierend auf Gebäudecharakteristik #}
{# Formel: (Temperaturdifferenz) * Fläche * Raumheizfaktor * Stunden / Watt-zu-kW #}
{% set thermischer_bedarf = (2 * soll - ist_eg - aussen_24) * qm * 24 * raumheizfaktor / 1000 %}

{# Abzug der Abwärme von Haushaltsgeräten #}
{# Faktor 1.2 korrigiert den Hausstrom auf geschätzte Wärmeabgabe #}
{% set verlustwaerme_haushaltsgeraete = haus_pwr_24 / 1.2 %}

{# Finale Berechnung elektrische Energiebedarf (geteilt durch COP) #}
{{ ((thermischer_bedarf - verlustwaerme_haushaltsgeraete) / cop) | round(2) }}

Heizenergie bisher für diesen Tag

Verbrauchszähler für die Heizung für den heutigen Tag: sensor.heating_energy_consumed_today

Eingangssensor ist die gesamte verbrauchte Heizenergie:

Helfer Template Sensor: % an heute bereits geleisteter Heizenergie

Template-Sensor: sensor.heating_energy_progress_percent

{% set forecast = states('sensor.heating_energy_demand_forecast_today') | float(0) %}
{% set consumed = states('sensor.heating_energy_consumed_today') | float(0) %}

{% if forecast > 0 %}
  {# Berechne Prozentwert, maximal 100% #}
  {{ min((consumed / forecast) * 100, 100) | round(1) }}
{% else %}
  {# Wenn kein Bedarf prognostiziert (Sommer/Warm), dann 100% (Ziel erreicht) #}
  100
{% endif %}

Steckdose statt Ohmpilot?

Zusätzlich zur Wärmepumpe ermöglicht eine Zigbee-Steckdose das Aktivieren eines Heizstabs im Boiler und somit höhere Warmwassertemperaturen. Um die Steckdose nicht zu überfordern, habe ich den Heizstab mit nur 2kW angeschlossen: funktionell zumindest für die Warmwasseraufbereitung ein Low-Cost Ersatz für den Fronius Ohmpilot. Mithilfe der folgenden Seite kann die benötigte Energiemenge für die Warmwasseraufbereitung berechnet werden: Online Energie-Rechner: elektrischer Strom vs. Wärmepumpe.

Automatisierung Ziel: Wärmepumpe für Heizung und Warmwasser sowie Heizstab, abhängig vom PV-Überschuss steuern

Nachdem ich die Automatisierung mehrfach neu erstellt und überarbeitet habe, hier etwas vereinfacht meine finale Variante:

Die Automatisierung wird alle 15 Minuten gestartet, was den Vorteil hat, dass ein Neustart von Home Assistant keinen Einfluss auf die Automatisierung hat:

Dank der Trigger direkt im ESP-Home Projekt und der zuvor erstellten Skripts und Template-Sensoren bleibt die Logik in der Automatisierung relativ übersichtlich:

Warmwasser (WW-Wärmepumpe)

Der ESP übernimmt das Abschalten beim Erreichen der Zieltemperatur und verhindert das vollständige Abkühlen des Warmwassers. Die Automatisierung muss lediglich den Startzeitpunkt der Warmwasseraufbereitung bestimmen. Zur Festlegung des optimalen Zeitpunkts nutze ich den zuvor erstellten Template-Sensor für den PV-Überschuss (PV+) und setze als Aktion das Skript "Warmwasser ein" ein.

Optional: Heizstab (WW-Heizstab)

Die Logik für den Heizstab ermöglicht höhere Warmwassertemperaturen, was die Chance erhöht, dass das Warmwasser bei Sonnenschein erwärmt wird und Abends oder Nachts mehr Warmwasser zur Verfügung steht. Dies macht natürlich nur Sinn, wenn zu viel Strom produziert wird, da der Heizstab nicht so effizient ist wie die Wärmepumpe:

Der Heizstab wird aktiv, wenn mehr als 2kW ins Netz eingespeist werden: "Grid_power_kw < -2". 2kW. Schaltet sich der Heizstab ein, verkleinert dieser den Überschuss, daher verwende an dieser Stelle ein Wert-Template, um dessen Verbrauch abzuziehen.

{{( states("sensor.grid_power_kw") | float - 
(states("sensor.warmwasser_active_power")  | float(0) / 1000)) 
                                                      < - 2 }}

Heizung steuern (Puffer)

Meine Logik für die Raumheizung basiert auf einem Auswählen Baustein und Optionen für das Aktivieren oder Deaktivieren der Heizung:

Option 1: Wenn die Außentemperatur zu warm: ausschalten:

Option 2: Unter Soll -1 

Die ist eine Art Notfallregel, wenn die Innentemperatur um 1 °C unter die Solltemperatur absinkt, wird die Heizung zu jeder Tageszeit aktiviert:

Option 3: Nachts starten wenn PV-Prognose gering:

In der Nacht bei niedrigen Außentemperaturen und einer niedrignen PV-Prognose soll die Wärmepumpe zwischen 2:00 und 3:30 Uhr aktiviert werden.

Option 4: Tag und Wärmebedarf < 70% für heute:

Um die Innentemperatur auch bei einer Wetteränderung stabil zu halten, wird mindestens 70 % der berechneten Heizenergie aufgebracht:

Option 5: Warte wenn Tag & unter Soll und Heizbedarf für heute < PV Prognose für heute

Wird diese Aktion aktiv, werden die weiteren Aktionen nicht ausgeführt:

Option 6: Starten wenn Tag und unter Solltemperatur

Option 7: Starten wenn PV Überschuss und unter Solltemperatur + 1°C

die Standardoption des Auswählenbausteins schaltet die Heizung aus, falls keine der 7 Optionen aktiv wurde:

Standardoption: ausschalten

Komplette Home Assistant Automatisierung: YAML

[+]
alias: Heizungssteuerung
description: ""
triggers:
  - trigger: time_pattern
    minutes: /15
conditions: []
actions:
  - choose:
      - conditions:
          - condition: or
            conditions:
              - alias: Juli oder August
                condition: template
                value_template: "{{ now().month in [7,8] }}"
              - condition: numeric_state
                entity_id: sensor.aussen_temperature_24
                above: 16
              - condition: numeric_state
                entity_id: sensor.aussen_temperature
                above: 23
        sequence:
          - action: script.warmwasser_vor_dem_ausschalten_pufferspeicher_aus
            metadata: {}
            data: {}
        alias: Stoppen wenn aussen zu warm
      - conditions:
          - alias: unter Soll -1 °C
            condition: numeric_state
            entity_id: sensor.heating_target_temp
            above: sensor.eg_temperatur
            value_template: "{{ state.state | float - 1 }}"
        sequence:
          - action: script.pufferspeicher_heizen
            metadata: {}
            data: {}
      - conditions:
          - condition: time
            after: "02:00:00"
            before: "03:30:00"
          - condition: numeric_state
            entity_id: input_number.heizung_raum_solltemperatur
            above: sensor.eg_temperatur
          - condition: numeric_state
            entity_id: sensor.pv_panels_energy_forecast_today_remaining
            below: 20
          - condition: numeric_state
            entity_id: sensor.aussen_temperature_24
            below: 5
        sequence: []
        alias: Nachts starten wenn PV-Prognose gering
      - conditions:
          - condition: or
            conditions:
              - condition: time
                after: "13:00:00"
              - condition: state
                entity_id: binary_sensor.flowmeter_on_2
                state:
                  - "on"
          - condition: sun
            before: sunset
            after: sunrise
            after_offset: "2:00:00"
          - condition: numeric_state
            entity_id: sensor.heating_energy_progress_percent
            below: 70
          - condition: numeric_state
            entity_id: input_number.heizung_raum_solltemperatur
            above: sensor.eg_temperatur
            value_template: "{{ state.state | float + 1 }}"
        sequence:
          - action: script.pufferspeicher_heizen
            metadata: {}
            data: {}
        alias: Tag und Wärmebedarf < 70%
      - conditions:
          - condition: numeric_state
            entity_id: sensor.heating_energy_demand_forecast_today
            below: sensor.pv_panels_energy_forecast_today_remaining
            value_template: >-
              {{ (state.state | float) -
              (states("sensor.heating_energy_consumed_today") | float) }}
          - condition: sun
            after: sunrise
            after_offset: "2:00:00"
            before: sunset
          - alias: unter Soll
            condition: numeric_state
            entity_id: sensor.heating_target_temp
            above: sensor.eg_temperatur
          - condition: numeric_state
            entity_id: sensor.grid_feed_power_filtered
            below: 2800
          - condition: state
            entity_id: binary_sensor.flowmeter_on_2
            state:
              - "off"
        sequence: []
        alias: Warte wenn Tag & unter Soll & Heizbedarf < PV heute
      - conditions:
          - condition: numeric_state
            entity_id: input_number.heizung_raum_solltemperatur
            above: sensor.eg_temperatur
          - condition: sun
            before: sunset
            after: sunrise
            after_offset: "2:00:00"
        sequence:
          - action: script.pufferspeicher_heizen
            metadata: {}
            data: {}
          - action: input_text.set_value
            metadata: {}
            target:
              entity_id: input_text.heizungssteuerung_protokoll
            data:
              value: "Heizung gestartet: Tag und unter Solltemperatur"
        alias: "Starten wenn Tag & unter Soll "
      - conditions:
          - condition: numeric_state
            entity_id: input_number.heizung_raum_solltemperatur
            above: sensor.eg_temperatur
            value_template: "{{ state.state | float + 1 }}"
          - condition: numeric_state
            entity_id: sensor.grid_feed_power_filtered
            value_template: >-
              {{ state.state | float + states("sensor.heating_wp_power") |
              float(0)  }}
            above: 2800
        sequence:
          - action: script.pufferspeicher_heizen
            metadata: {}
            data: {}
        alias: Starten wenn PV Überschuss & unter Soll +1 °C
    default:
      - action: script.warmwasser_vor_dem_ausschalten_pufferspeicher_aus
        metadata: {}
        data: {}
mode: single
trace:
  stored_traces: 100

In der Praxis nach über einem Jahr Betrieb → PV Eigenverbrauch: 75 % Autarkiegrad

Die Automatisierung arbeitet erst dann so richtig, wenn die Sonne scheint: An Tagen an denen genügend PV-Strom erzeugt wird (in grün), kann die Heizung (in gelb) während des Tages gestartet werden. Bei einer niedrigen PV-Prognose erlaubt die Automatisierung bereits nach 2 Uhr früh die eingestellte Zieltemperatur (bei mir 22,5 °C), wodurch die Heizung bereits früher aktiviert wird. Bei einer guten PV-Vorhersage wartet die Automatisierung, bis die Sonne scheint. Hier ein weiteres Beispiel einiger Tage mit 100 % Eigenverbrauch inkl. Batteriestatus:

Für die letzten 365-Tage, schaut die Energieverteilung meines Hauses in Home Assistant wie folgt aus:

 

Fazit

Das Steuern der Heizung ist eine einfache und kostengünstige Maßnahme um den Eigenverbrauch der PV-Anlage zu erhöhen. Wird der Boiler, oder Pufferspeicher tagsüber erwärmt, muss die Energie in der Nacht nicht wieder zugekauft werden: Davon profitieren nicht nur PV-Anlagen ohne Stromspeicher, auch beim Einsatz eines Akkus kann dieser entlastet und unter Umständen sogar etwas kleiner dimensioniert werden.

Zugegeben ist mein Setup weit von Plug-and-Play entfernt, auch funktionierte die Automatisierung erst nach einigem Tuning. Wer sich aber gerne mit automatischen Abläufen beschäftigt kann sich mit ESP-Home und Home Assistant ordentlich austoben und damit richtig Strom sparen.

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(am besten bewertete zuerst)]

[1 weitere Kommentare in English]
✍anonym
11.11.2024 21:35
Warum hast du es so kompliziert gemacht mit der WW Aufbereitung? Ich hätte einen Temperatur Sensor eingebaut und abgefragt. nur wenn die Boilertemp unter 40 Grad und PV Überschuss dann aufheizen. Bei 65 Grad oder wenn kein Überschuss wieder abschalten. Und wenn Boiler unter 30 Grad zwangsweise anschalten bis 45 Grad. 
So will ich es umsetzen ohne Relais das der Heizung was vorgaukelt. 
Aber ich nutze auch einen Heizstab im Sommer und Pelletsheizung statt einer WP
✍Bernhard
gepostet am 12.11.2024 08:17, geändert: 27.01.2025 18:57
Danke für dein Feedback: Ja, wenn du als Stromheizung nur einen Heizstab verwendest, kannst du das sicher wesentlich einfacher umsetzen. Ich kombiniere die Wärmepumpe, den Heizstab, die PV- und Akkudaten für die Steuerung vom Warmwasser und Heizung. Neben der Heizung sollte die Wärmepumpe primär die Warmwasseraufbereitung übernehmen, da diese weniger Energie als ein Heizstab benötigt. Eine Wärmepumpe kann nicht so einfach wie ein Heizstab ein- und ausgeschaltet werden: dazu verwende ich eben die beschriebenen Relais. Zudem sollte der Heizstab bei mir erst dann verwendet werden, wenn ein Überschuss vorhanden ist und das Wasser bereits von der Wärmepumpe auf dessen maximal mögliche Temperaturniveau gehoben wurde.

Beitrag erstellt von Bernhard

[+1 weitere Kommentare in English]
 
Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details