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 setztinput_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 liefernsensor.heizung_zeitplan_<raum>undsensor.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 |
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 |
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 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 → heatihren gespeicherten Heiz-Sollwert zurück. Wer von Hand schaltet, setzt den Sollwert nach dem Modus. - Raumtemperatur nur per MQTT:
number.<ventil>_external_temperature_inputhat in HA Schritt 1 und meldet nie zurück. Die Einspeisung schreibt deshalb direktzigbee2mqtt/<ventil>/setmit Nachkommastelle. Z2M verwirft den Wert still, wenn das Ventil aufsensor: internalsteht. - Kein HA-Zustand als Gerätebeweis:
last_reportedändert sich bei MQTT-Geräten nur bei Wertänderung. Ob ein Gerät lebt, zeigtmosquitto_subaufzigbee2mqtt/<gerät>(Feldlast_seen). - IDs mit Umlaut: HA macht aus „ä“ ein „a“. Neue Entitäten nach dem Anlegen auf
ae/ueumbenennen (heizung_kueche, nichtheizung_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>_batterybeobachten.
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.