Zum Inhalt

Heizung

Raumweise Heizungssteuerung in Home Assistant mit Versatile Thermostat (VTherm, HACS) und acht Aqara-E1-Ventilen (SRTS-A01) über Zigbee2MQTT. In Betrieb seit dem Heizbeginn am 10.10.2026, abgenommen am 24.10.2026. Sie ersetzt die alte Steuerung mit Advanced Heating Control (AHC) und Better Thermostat; beide sind abgebaut.

Hintergrund und Entscheidungen: Spec · Umsetzungsplan · Umsetzungs-Log · Epic homeserver#185

Aufbau

 Bedienung      Wand-iPad Esszimmer · HA-App · W100 Arbeitszimmer
      │  Sollwert, Übersteuerung, Schnellaktionen
 Zeitplan       Uhrzeit-Helfer + Taktgeber + script.heizung_raum_profil ──► setzt nur Presets
      │
 Raumregler     7 × VTherm climate.heizung_<raum> (over_climate) ◄── Fenstergruppe je Raum
      │  Modus + Sollwert                                        ◄── Raumtemperatur
 Ventile        8 × Aqara E1 climate.<raum>_heizung ◄── Einspeisung der Raumtemperatur (MQTT)
                                                    ◄── Zustellprüfung, Wächter „heizt nicht“
  • Die Raumregler sind die einzige Stelle, an der ein Sollwert entsteht. Zeitplan, Dashboard und W100 sprechen nur mit ihnen, nie direkt mit den Ventilen.
  • Die Ventile regeln mit der Raumtemperatur, die HA ihnen schickt (sensor: external), nicht mit ihrem eigenen Fühler am Heizkörper.
  • Das Wohnzimmer hat zwei Ventile (wohnzimmer_heizung_vorne, …_hinten) an einem Raumregler.

Räume und Temperaturen

Stand 24.10.2026. Die Presets stellt man über number.heizung_<raum>_preset_<preset>_temp oder in der Einstellungsansicht des Dashboards.

Raum Komfort Eco Boost Frostschutz Besonderheit
Abstellraum 19 werktags / 20 frei 17 24 7 Komfort setzt automation.heizung_abstellraum_komfort_nach_werktag
Arbeitszimmer 21,5 17 24 7 W100 zeigt und stellt den Sollwert
Bad 21,5 17 24 7 Sendeschwelle 0,3 K (Batterie)
Esszimmer 21 17 24 7
Küche 21,5 17 24 7 Heizungsventilator folgt dem Komfort
Schlafzimmer 21 7 24 7 Eco ist Frostschutz
Wohnzimmer 20 17 24 7 ab 19:00 Grundtemperatur 20

Bei offenem Fenster geht der Raum nach 30 s auf Frostschutz und nach dem Schließen zurück (VTherm-Fensteraktion).

Zeitplan

„Werktag“ kommt aus binary_sensor.workday_sensor, Feiertage zählen wie Wochenende. Alle Uhrzeiten sind Helfer (input_datetime.heizung_*) und im Dashboard unter Einstellungen änderbar.

Helfer Wert Wirkung
heizung_aufstehen_lars 07:30 werktags Bad und Küche warm (Vorlauf 60 min → 06:30)
heizung_aufstehen_robin 09:00 werktags übrige Räume warm (Vorlauf 30 min → 08:30)
heizung_wochenende_spaetestens 10:00 frei: spätestens dann warm (minus Vorlauf), früher bei Wach-Erkennung
heizung_kueche_komfort_bis 20:00 Küche danach Eco
heizung_schlafzimmer_komfort_ab / …_bis_werktag 10:00 / 18:00 Schlafzimmer und Abstellraum werktags
heizung_schlafzimmer_komfort_ab_frei / …_bis_frei 11:00 / 20:00 Schlafzimmer und Abstellraum frei (ab wach, spätestens 11:00)
heizung_wohnzimmer_grund_ab 19:00 Wohnzimmer Grundtemperatur (input_number.heizung_wohnzimmer_grundtemperatur)
heizung_nachtruhe_mo_do 22:00 Mo–Do alle Räume Eco
heizung_nachtruhe 23:00 Fr–So alle Räume Eco; steuert außerdem den Nachtmodus von Licht und iPad
  • Vorlauf: input_number.heizung_vorlauf_bad_kueche (60 min) und …_vorlauf_sonstige (30 min).
  • Wach-Erkennung am Wochenende (automation.heizung_wach_erkennung): erste Bewegung in Esszimmer oder Küche ab 07:00 setzt input_boolean.heizung_wach_heute.
  • Warmes Wetter: Ab input_number.heizung_aussen_eco_ab (17 °C, OpenWeatherMap) stehen alle Räume auf Eco, mit 1 K Hysterese (binary_sensor.heizung_draussen_warm).
  • Der aktuelle Block je Raum steht in input_text.heizung_block_<raum> (comfort, eco, grund, manuell, halten). Die Anzeige im Dashboard liefern sensor.heizung_zeitplan_<raum> und sensor.heizung_naechster_zeitplan_<raum>.

Bausteine

Automationen und Skripte

Entität Aufgabe
automation.heizung_tagesprofil Taktgeber: alle 5 min, beim HA-Start und bei jeder Änderung eines Zeitplan-Helfers script.heizung_raum_profil je Raum (Blockwechsel also bis zu 5 min nach der eingestellten Uhrzeit)
script.heizung_raum_profil berechnet den Block eines Raums und setzt das Preset; Neustart-Schutz: tut nichts, solange ein Uhrzeit-Helfer keinen gültigen Wert hat
automation.heizung_e1_einspeisung schickt die Raumtemperatur per MQTT an die Ventile (ab 0,2 K Änderung, Bad 0,3 K; Keep-alive nach 25 min); ohne Raumtemperatur Notbetrieb
automation.heizung_zustellpruefung prüft nach jedem Befehl und alle 15 min, ob das Ventil Modus und Sollwert übernommen hat; 3 Versuche, dann Störung
automation.heizung_raum_heizt_nicht_nach meldet, wenn ein Raum mehr als 1 K unter Soll bleibt und in 90 min weniger als 0,2 K wärmer wird (60 min lang)
automation.heizung_uebersteuerung_ablauf beendet abgelaufene 2-h-Übersteuerungen
automation.heizung_wach_erkennung Wach-Erkennung am Wochenende
automation.heizung_abstellraum_komfort_nach_werktag Abstellraum Komfort 19 werktags / 20 frei
automation.heizung_ventilbewegung_sommer Mo 11:00, nur im Sommerbetrieb: jedes Ventil kurz auf, dann zu (Verkalkungsschutz, die E1 hat keinen eigenen)
automation.kueche_ventilator_an Küchenventilator an, solange die Küche mit mindestens Komfort heizt
automation.w100_arbeitszimmer_sollwert_mit_heizung_abgleichen W100 zeigt den Sollwert; Tasten am W100 stellen den Raumregler (ganze Grad)
script.heizung_uebersteuern_2h, script.heizung_halten, script.heizung_fortsetzen Übersteuerung B und C, Rückkehr zum Zeitplan
script.heizung_boost 30 min Boost für einen Raum oder alle; zweiter Aufruf bricht ab
script.heizung_alle_eco, script.heizung_abwesend Schnellaktionen

Helfer je Raum

Alle mit Label heizung.

Helfer Bedeutung
input_boolean.heizung_neu_<raum> Notschalter: Raum wird von dieser Steuerung bedient
input_boolean.heizung_halten_<raum> Übersteuerung C aktiv
input_datetime.heizung_uebersteuerung_bis_<raum> Ende der 2-h-Übersteuerung
input_boolean.heizung_stoerung_<raum> Zustellprüfung hat eine Störung gemeldet (verhindert Wiederholung)
input_boolean.heizung_notbetrieb_<raum> Ventil regelt mit eigenem Fühler, weil die Raumtemperatur fehlt
input_number.heizung_gesendet_<raum> zuletzt an die Ventile geschickte Raumtemperatur
sensor.heizung_anstieg_90_min_<raum> Statistik: Temperaturänderung der letzten 90 min (für den Wächter)
sensor.heizung_status_<raum>, …_farbe_<raum>, …_lueften_<raum> Anzeige im Dashboard

Global: input_boolean.heizung_abwesend, input_boolean.heizung_wartung (sperrt die Zustellprüfung), input_number.heizung_lueften_schwelle (65 % Luftfeuchte), input_boolean.nachtmodus.

Raumtemperatur

sensor.<raum>_sensor_temperature ist eine Sensorgruppe. Arbeitszimmer, Schlafzimmer und Wohnzimmer nehmen den ersten verfügbaren Wert aus Primärgruppe (sensor.<raum>_temperatur_primaer) und Ersatzfühler (IKEA VINDSTYRKA), die übrigen Räume den Aqara-Luftsensor. Alle Gruppen haben ignore_non_numeric: true, damit ein einzelner ausgefallener Fühler die Gruppe nicht leert.

Bedienung

  • Dashboard /smart-home-zentrale-v2 (Wand-iPad Esszimmer im Kiosk-Modus, Benutzer „Wandtablet“; Notausgang ?disable_km). Raumansichten mit Thermostat, Verlauf, Übersteuerung; Ansicht „Zeitplan“; „Einstellungen“ mit allen Uhrzeiten und Temperaturen.
  • Übersteuerung:
  • A: Sollwert direkt ändern. Gilt bis zum nächsten Blockwechsel.
  • B: „2 Stunden“. Danach zurück zum Zeitplan.
  • C: „Halten“. Gilt, bis „Zeitplan fortsetzen“ gedrückt wird.

Ein offenes Fenster schlägt jede Übersteuerung. - Boost: 30 min auf 24 °C, je Raum oder „Boost alle“. Ein Blockwechsel während des Boosts beendet ihn. - HomeKit: Die Heizung ist seit 24.10.2026 bewusst nicht mehr in Apple Home (Bridge „Climate“ entfernt). - Sommer/Winter: select.central_configuration_central_mode — Auto im Winter, Frost protection im Sommer (die Dashboard-Knöpfe „Winter“/„Sommer“ setzen genau das). Nur bei Auto schaltet das Profil ausgeschaltete Raumregler wieder auf Heizen.

Meldungen und was tun

Alle Pushes gehen an notify.mobile_app_robins_iphone.

Meldung Bedeutung Was tun
„Heizung : Befehl nicht angekommen“ Ein Ventil hat Modus oder Sollwert nach 3 Versuchen nicht übernommen. Kommt einmal je Störung, gelöscht wird sie beim nächsten erfolgreichen Abgleich. Ventil wecken: Batterie kurz heraus und wieder hinein (hat am 17.10. ein festhängendes Ventil gelöst). Hilft das nicht, Z2M-Log ansehen.
„Heizung : Notbetrieb“ Seit 5 min keine Raumtemperatur; das Ventil regelt mit seinem eigenen Fühler (misst 1–3 K zu kalt). Endet von selbst, wenn der Fühler wieder meldet. Luftsensor prüfen, meist Batterie oder Funkstrecke.
„Heizung : Raum wird nicht warm“ Raum mehr als 1 K unter Soll, seit 90 min kaum Anstieg. Der Befehl ist angekommen, aber es kommt keine Wärme. Heizkörper fühlen; kalt → entlüften, Ventilstift prüfen. Danach Ventil kalibrieren (button.<ventil>_calibrate, ca. 20 s).
„Gerät offline (n)“ / „Batterie niedrig“ Geräte mit Label „Überwacht“ (alle Heizungsfühler und Ventile), 10 min Wartezeit Batterie tauschen bzw. Gerät prüfen.

valve_alarm am Ventil (binary_sensor.<ventil>_valve_alarm): Laut Z2M meldet die E1 damit eine Temperaturregel-Abweichung, etwa einen schlecht sitzenden Adapter, ein defektes oder falsch kalibriertes Ventil oder ein Problem mit dem externen Fühler. Steht er dauerhaft an und wird der Raum nicht warm, wie oben vorgehen.

Raum aus der Steuerung nehmen, Rückweg

  • Ein Raum:
  • input_boolean.heizung_neu_<raum> aus. Einspeisung, Zustellprüfung, Wächter und Zeitplan lassen den Raum dann in Ruhe.
  • Den Raumregler climate.heizung_<raum> ausschalten, sonst schickt VTherm weiter Sollwerte.
  • Das Ventil auf den eigenen Fühler stellen: select.<ventil>_sensor → internal. Sonst regelt es weiter mit dem zuletzt geschickten Wert.

Danach das Ventil direkt bedienen (climate.<ventil>). Zurück in umgekehrter Reihenfolge; beim Einschalten von heizung_neu_<raum> stellt die Einspeisung das Ventil selbst wieder auf external. - Wartung: input_boolean.heizung_wartung an sperrt die Zustellprüfung, etwa beim Batteriewechsel mehrerer Ventile. - Komplett zurück: Die alte Steuerung (AHC, Better Thermostat) ist abgebaut. Ein Rückweg geht nur über ein HA-Backup: vor-e6a-2026-10 (ID fd188527, 08.10.2026, vor dem Umbau) oder vor-e6a-abbau-2026-10-24 (ID 440ddd89, vor dem Abbau). Die gelöschten YAML-Dateien liegen auf dem NUC unter /root/e6a-backups/yaml-vor-abbau-20261024/.

Fallstricke

  • Erst Modus, dann Sollwert: Die E1 holt beim Wechsel off → heat ihren gespeicherten Heiz-Sollwert zurück. Wer von Hand schaltet, setzt den Sollwert nach dem Modus.
  • Raumtemperatur nur per MQTT: number.<ventil>_external_temperature_input hat in HA Schritt 1 und meldet nie zurück. Die Einspeisung schreibt deshalb direkt zigbee2mqtt/<ventil>/set mit Nachkommastelle. Z2M verwirft den Wert still, wenn das Ventil auf sensor: internal steht.
  • Kein HA-Zustand als Gerätebeweis: last_reported ändert sich bei MQTT-Geräten nur bei Wertänderung. Ob ein Gerät lebt, zeigt mosquitto_sub auf zigbee2mqtt/<gerät> (Feld last_seen).
  • IDs mit Umlaut: HA macht aus „ä“ ein „a“. Neue Entitäten nach dem Anlegen auf ae/ue umbenennen (heizung_kueche, nicht heizung_kuche).
  • Recorder: Die laufende HA-Datenbank öffnet außer HA niemand per SQLite, auch nicht lesend (Vorfall Nr. 3, homeserver#272).
  • Z2M- und Mosquitto-Konfiguration nicht direkt ändern. Gerätewerte gehen über HA (mqtt.publish …/set, select), Bridge-Befehle nur mit ausdrücklichem OK.
  • Batterie: Das Bad-Ventil verbrauchte nach dem Start etwa 1,2 % pro Tag (Ventilmotor, Bad heizt ganztags). Verlauf über sensor.<ventil>_battery beobachten.

Offen und später

  • Lernendes Vorheizen (Intelligent Heating Pilot) erst mit genug Aufheizdaten, Testraum Bad (Spec 6).
  • Abwesenheit automatisch aus GPS und Heim-WLAN (Spec 6).
  • Zweiter Fühler (W100) im Wohnzimmer an anderer Stelle, Balkon-Außensensor statt OpenWeatherMap (Robin).
  • Offline-Test des VINDSTYRKA (T8) ist nicht gelaufen, homeserver#237 bleibt offen.