Wolf Wärmepumpe und Tibber: Warmwasser-Steuerung im Winter

Es ist jetzt schon ein bisschen Zeit vergangen und ich konnte Erfahrungen mit der Automatisierung sammeln, die sich um die Warmwasserbereitung auf Basis der Tibber-Strompreise kümmert. Zum Ende des letzten Artikels habe ich schon eine Schwäche angesprochen, und genau diese wurde auch zum Problem, als es kälter wurde. Die Funktion “1x Warmwasser” läuft immer nur eine Stunde. Diese Stunde hat im Winter jedoch nicht mehr ausgereicht, um das Wasser auf die Zieltemperatur zu erwärmen. Deshalb heizt die Wärmepumpe jetzt so lange, bis die Zieltemperatur erreicht ist, und Home Assistant sucht dafür das günstigste Zeitfenster.

Um die Zieltemperatur wirklich jeden Tag zu erreichen, muss man der Wärmepumpe eben die entsprechende Zeit geben und nicht auf eine Stunde limitieren. Dabei habe ich mir angeschaut, wie lange die Wärmepumpe so im Durchschnitt braucht, um diese Dauer später in der überarbeiteten Version zu nutzen. In meinem Fall reichen 90 Minuten.

Beim Setup hat sich nichts zum ersten Artikel verändert. Die Wolf Wärmepumpe ist weiterhin über ism7mqtt in Home Assistant angebunden.

Falls du Tibber auch mal ausprobieren willst, melde dich gerne über meinen Einladung-Link an und wir bekommen beide einen Bonus.

Kurzer Hinweis

Auch hier soll kurz erwähnt werden, dass man über ism7mqtt alle Parameter der Wärmepumpe in Home Assistant aufgelistet bekommt und diese auch verändert kann. Räumt euch die parameter.json auf und werft alles raus, was euch nichts sagt oder ihr nicht braucht. Damit minimiert ihr das Risiko, etwas aus Versehen zu verstellen.

Den besten Zeitraum finden

Jeden Morgen um 8:00 Uhr läuft eine Automatisierung, die den günstigsten Zeitraum für die 90 Minuten raussucht und im Helper aus dem ersten Artikel speichert. Da Tibber die Preise inzwischen in Viertelstunden liefert, werden dafür sechs aufeinanderfolgende Preise zusammengerechnet.

alias: Finde beste Stunde für Warmwasser
description: >-
  Ruft Tibber-Viertelstundenpreise ab und findet das günstigste
  90-Minuten-Fenster des Tages. Setzt input_datetime.warmwasser_start auf die optimale Startzeit.
triggers:
  - trigger: time
    at: '08:00:00'
conditions: []
actions:
  - action: tibber.get_prices
    data: {}
    response_variable: price_response
  - variables:
      heating_duration_minutes: 90
      interval_count: '{{ (heating_duration_minutes / 15) | round(0, ''ceil'') | int }}'
      price_list: '{{ price_response.prices.values() | first }}'
      best_start_time: |-
        {% set result = namespace(
            lowest_sum = 999999.0,
            best_index = 0
          ) %}
        {% for index in range(price_list | length - interval_count + 1) %}
          {% set window_sum = namespace(value = 0.0) %}
          {% for offset in range(interval_count) %}
            {% set window_sum.value = window_sum.value + price_list[index + offset].price %}
          {% endfor %}
          {% if window_sum.value < result.lowest_sum %}
            {% set result.lowest_sum = window_sum.value %}
            {% set result.best_index = index %}
          {% endif %}
        {% endfor %}
        {{ (price_list[result.best_index].start_time
            | as_datetime
            | as_local
          ).strftime('%H:%M:%S') }}
  - action: input_datetime.set_datetime
    target:
      entity_id: input_datetime.warmwasser_start
    data:
      time: '{{ best_start_time }}'
mode: single

Warmwasserbereitung starten

Eine weitere Automatisierung kümmert sich dann um das Einschalten. Statt “1x Warmwasser” zu aktivieren, setzt sie jetzt die “Programmwahl” von “Standby” auf “Permanent”. Im Gegensatz zu “1x Warmwasser” ist hier nach einer Stunde nicht Schluss, die Wärmepumpe heizt, bis die Solltemperatur erreicht ist. Zusätzlich prüft sie, dass im Kalender “Abwesenheit” kein Termin eingetragen ist. Damit lässt sich die Warmwasserbereitung komplett überspringen, wenn man mal nicht zu Hause ist.

alias: Warmwasser Ein
description: ""
triggers:
  - trigger: time
    at: input_datetime.warmwasser_start
conditions:
  - condition: state
    entity_id: calendar.abwesendheit
    state: "off"
actions:
  - action: select.select_option
    metadata: {}
    target:
      entity_id: select.wolf_wwsystem_bm2_0x30_350012_programmwahl
    data:
      option: Permanent
mode: single

Warmwasserbereitung wieder auf Standby setzen

Ist die Zieltemperatur erreicht, schaltet die Wolf Wärmepumpe selbstständig ab. Wir müssen jetzt nur noch sicherstellen, dass die Wärmepumpe nicht “Permanent” die Zieltemperatur hält. Dafür ist eine andere Automatisierung zuständig. Liegt der Ist-Wert für 5 Minuten über dem Sollwert, wird die “Programmwahl” wieder von “Permanent” auf “Standby” gestellt.

alias: Warmwasser Aus
description: ""
triggers:
  - for:
      minutes: 5
    above: number.wolf_wwsystem_bm2_0x30_350009_warmwassersolltemperatur_eingestellt
    trigger: numeric_state
    entity_id:
      - sensor.wolf_cha_0x3_270007_warmwassertemperatur
conditions: []
actions:
  - data:
      option: Standby
    action: select.select_option
    target:
      entity_id: select.wolf_wwsystem_bm2_0x30_350012_programmwahl
    metadata: {}
mode: single

Damit alles etwas träger ist, habe ich für den Parameter WP020 Hysterese Warmwasserbetrieb einen Wert von 5,0 °C hinterlegt. Das bedeutet: Erst wenn die Ist-Temperatur 5 Grad unter der Soll-Temperatur liegt, würde die Wärmepumpe im Modus “Permanent” wieder anfangen, das Wasser zu erwärmen.

Überprüfung

Da die Verbindung zum Link Home weiterhin nicht immer stabil läuft, gibt es noch zwei weitere Automatisierungen, die alles kontrollieren und mich benachrichtigen, wenn die Warmwasserbereitung nicht gestartet ist oder nicht ausgeschaltet wurde.

alias: Überprüfung Warmwasser Ein
description: ""
triggers:
  - trigger: time
    at:
      entity_id: input_datetime.warmwasser_start
      offset: "00:05:00"
conditions:
  - condition: state
    entity_id: calendar.abwesendheit
    state:
      - "off"
  - condition: not
    conditions:
      - condition: state
        entity_id: select.wolf_wwsystem_bm2_0x30_350012_programmwahl
        state:
          - Permanent
actions:
  - action: notify.mobile_app_iphone_von_lukas
    metadata: {}
    data:
      message: Nicht gestartet
      title: ⚠️ Warmwasser
mode: single
alias: Überprüfung Warmwasser Aus
description: ''
triggers:
  - trigger: time
    at:
      entity_id: input_datetime.warmwasser_start
      offset: '02:00:00'
conditions:
  - condition: state
    entity_id: select.wolf_wwsystem_bm2_0x30_350012_programmwahl
    state:
      - Permanent
actions:
  - action: notify.mobile_app_iphone_von_lukas
    metadata: {}
    data:
      message: Nicht ausgeschaltet
      title: ⚠️ Warmwasser
mode: single

Fazit

Dieses Setup läuft jetzt schon einige Monate und hat uns gut durch den letzten Winter gebracht. Ob man damit jetzt wirklich Kosten spart, habe ich noch nicht richtig rausgefunden. Da ich aber noch den dynamischen Stromtarif habe, bietet es sich trotzdem an, die Warmwasserbereitung zu optimieren.

Wenn ich es weiter hinterfragen will, müsste ich mal genauer prüfen, ob der dynamische Stromtarif mit der Wärmepumpe grundsätzlich sinnvoll ist. Im Winter kann ich eigentlich nur die Warmwasserbereitung in die günstigen Phasen schieben. Das Heizen selber läuft aber trotzdem dauerhaft durch.