Heizungssteuerung ist in aller Munde. Als Besitzer einer FRITZ!Box habe ich mir also ein paar FRITZ!DECT 301 Thermostate der Firma AVM zugelegt, um meine Heizung sparsamer zu machen.

Und dann bin ich dummerweise auf Home Assistant aufmerksam gemacht worden, mit dem man die etwas spartanischen Möglichkeiten der Thermostate gewaltig aufbohren kann.

Begleitet mich auf meiner Reise in den Kaninchenbau.

Bei der Steuerung der Thermostate ist wichtig zu wissen, dass der Home Assistant (wie auch die FRITZ!Box selber) nur in festen Intervallen Aufträge an die Thermostate übertragen kann. Im schlimmsten Fall dauert es bis zu 15 Minuten, bis euer Auftrag dort angekommen ist.

Regler verbessern

Nach der Installation wird man von den etwas überzüchteten Heizkörperreglern in der Oberfläche des Home Assistant begrüßt. Meine Regler sollen nur aus drei Teilen bestehen:

  1. Dem eigentlich Temperatur-Regler (verbunden mit der Anzeige des aktuellen Modus und der aktuell gemessenen Temperatur),
  2. einem Knopf für den Spar-Modus,
  3. und einem Knopf für den Komfort-Modus.

Das ist tatsächlich schön konfigurativ zu lösen, oder mit dem folgendem YAML als schnelles Rezept für das Dashboard:

# Replace all occurences of `wohnzimmer` with your thermostat's identifier
type: grid
square: false
columns: 1
cards:
  - type: thermostat
    entity: climate.wohnzimmer
  - type: grid
    square: false
    columns: 2
    cards:
      - show_name: true
        show_icon: true
        type: button
        tap_action:
          action: call-service
          service: climate.set_preset_mode
          data:
            preset_mode: eco
          target:
            entity_id: climate.wohnzimmer
        entity: sensor.wohnzimmer_current_scheduled_preset
        icon: mdi:shield-moon
        name: Spar-Modus
        icon_height: 40px
      - show_name: true
        show_icon: true
        type: button
        tap_action:
          action: call-service
          service: climate.set_preset_mode
          data:
            preset_mode: comfort
          target:
            entity_id: climate.wohnzimmer
        entity: sensor.wohnzimmer_current_scheduled_preset
        icon: ''
        name: Komfort-Modus
        icon_height: 40px

Temperatur am Thermostat anzeigen

Durch den Home Assistant werden die FRITZ!DECT 301 Thermostate folgerichtig als Thermostate erkannt. Tatsächlich beinhalten sie aber auch einen Temperatur-Sensor, den man mit etwas Bastelei auch im Dashboard anzeigen kann.

Mit dem Home Assistant Community Add-on: Visual Studio Code kann die configuration.yaml um die folgenden Zeilen erweitern werden:

# Converting thermostats into thermometers
# Replace all occurences of `wohnzimmer` with your thermostat's identifier
template:
  - sensor:
      - name: "Wohnzimmer Heizung Temperatur"
        unique_id: wohnzimmer_heizung_temperatur
        state: "{{ state_attr('climate.wohnzimmer', 'current_temperature') }}"
        unit_of_measurement: "°C"
        device_class: temperature

Danach können diese Sensoren im Dashboard angezeigt werden:

# Replace all occurences of `wohnzimmer` with your thermostat's identifier
type: gauge
entity: sensor.wohnzimmer_heizung_temperatur
min: 10
max: 32
severity:
  green: 21
  yellow: 23
  red: 25

Urlaubsmodus sichtbar machen

Die FRITZ!DECT 301 Thermostate können in einen Urlaubsmodus geschickt werden – ein Zustand, der im Home Assistant ebenfalls ausgelesen werden kann. Besonders luxuriös geschieht das mit einem eigenen Binär-Sensor.

Mit dem Home Assistant Community Add-on: Visual Studio Code kann die configuration.yaml um die folgenden Zeilen erweitern werden:

# Replace all occurences of `wohnzimmer` with your thermostat's identifier
template:
  - binary_sensor:
      - name: "Wohnzimmer Heizung Urlaubsmodus"
        unique_id: wohnzimmer_heizung_urlaubsmodus
        state: "{{ is_state('climate.wohnzimmer', 'holiday_mode') }}"
        icon: "mdi:bag-checked"

Analog lässt sich auch der Sommermodus der Heizung in der configuration.yaml als eigener Sensor einrichten:

# Replace all occurences of `wohnzimmer` with your thermostat's identifier
template:
  - binary_sensor:
      - name: "Wohnzimmer Heizung Sommermodus"
        unique_id: wohnzimmer_heizung_sommermodus
        state: "{{ is_state('climate.wohnzimmer', 'summer_mode') }}"
        icon: "mdi:hvac-off"

Regelung für das Home Office

In der FRITZ!Box hatte ich die Steuerung meiner Büro-Heizung bisher stumpf an die Wochentage Montags bis Freitag gekoppelt. So lief die Heizung auch, wenn ein Feiertag das eigentlich unnötig machte. Höchste Zeit also für den Arbeitstag-Sensor.

Mit dem Home Assistant Community Add-on: Visual Studio Code kann die configuration.yaml um die folgenden Zeilen erweitern werden:

# Workday sensor
binary_sensor:
  - platform: workday
    country: DE
    province: NI # Niedersachsen, Lower Saxony

Der Home Assistant kann nun die Programmierung der FRITZ!Box verbessern. Dafür wird in der FRITZ!Box die Heizung zu 100% in den Spar-Modus geschickt, weil ab sofort der Home Assistant die Heizung auf den Komfort-Modus schaltet, wenn ein Arbeitstag vorliegt.

Vorher legen wir uns einen Zeitplan an, den wir in folgende Automatisierung einbinden:

# Replace all occurences of `office` with your thermostat's identifier
# `device_id` has to be assigned via GUI
alias: "Home Office"
description: Only trigger comfort mode on work days
trigger:
  - platform: state
    entity_id:
      - binary_sensor.office_heizung_home_office
condition:
  - condition: and
    conditions:
      - condition: state
        entity_id: binary_sensor.workday_sensor
        state: "on"
      - condition: state
        entity_id: binary_sensor.office_heizung_urlaubsmodus
        state: "off"
action:
  - if:
      - condition: state
        state: "on"
        entity_id: binary_sensor.office_heizung_home_office
    then:
      - device_id: b46c4851235fb8c90f4a659b6e9a953a
        domain: climate
        entity_id: climate.office
        type: set_preset_mode
        preset_mode: comfort
    else:
      - device_id: b46c4851235fb8c90f4a659b6e9a953a
        domain: climate
        entity_id: climate.office
        type: set_preset_mode
        preset_mode: eco
    enabled: true
mode: single