Lastenheft & Pflichtenheft - Lüftungssteuerung¶
Vaillant recoVAIR 275/3 | Home Assistant Package Letzte Überarbeitung: Juli 2026
Lastenheft — WAS soll das System leisten?¶
Gerät¶
Vaillant recoVAIR 275/3, angebunden via ebusd (LXC-Container, nicht HA-Addon).
Entitäten unter dem Präfix ebusd_lueftung_* bzw. select.ebusd_lueftung_vai00_*.
Der Bypass ist ein internes Klappenventil der Anlage. Er wird über
number.ebusd_lueftung_vai00_bypass_tage gesteuert. Die Vaillant zählt diesen
Wert intern täglich von 2 auf 0 herunter; bei 0 schließt die Klappe. Die
Automation hält den Zähler bei 2, solange alle Bedingungen erfüllt sind.
Betriebsmodi¶
| Modus | Beschreibung |
|---|---|
| Tag | Normalbetrieb, höhere Luftmenge |
| Nacht | Reduzierter Betrieb, geringere Luftmenge |
| HI | Intensivmodus mit Laufzeit (Aus / 30 min / 1h / 2h / 3h). Nur bei Bad-Feuchte-Ereignis während Abwesenheit. |
Anforderungen Tag/Nacht-Modus¶
L1 Tagbetrieb nur innerhalb eines einstellbaren Zeitfensters. Wochentag und Wochenende haben separate Startzeiten, eine gemeinsame Endzeit.
L2 Tagbetrieb nur wenn mindestens eine Person zuhause ist
(binary_sensor.jemand_zuhause).
L3 Hitzeschutz hat höchste Priorität: Wenn binary_sensor.beschattung_hitzeschutz_noetig
aktiv ist, wird unabhängig von Zeitfenster und Anwesenheit Nachtbetrieb gesetzt.
Außenluftzufuhr im Hochsommer würde die Innentemperatur erhöhen.
L4 Manuelle Steuerung ist möglich; die Automatik kann über
input_boolean.luftung_automatik_aktiv deaktiviert werden.
Anforderungen Bad-Lüftung (HI-Modus)¶
L5 Übersteigt die Badezimmer-Luftfeuchtigkeit einen einstellbaren Schwellwert, wird ein Timer gestartet.
L6 Solange der Timer läuft, wird Tagbetrieb erzwungen.
L7 Läuft der Timer während Abwesenheit, wird zusätzlich der HI-Modus mit einer einstellbaren Dauer aktiviert, um die Feuchtigkeit schneller abzuführen. Bei Anwesenheit wird kein HI gesetzt, da die Personen selbst für ausreichend Luftzirkulation sorgen.
L8 Der Hitzeschutz (L3) überschreibt auch den Bad-Timer: Im Hochsommer ist Nachtbetrieb wichtiger als Bad-Entlüftung.
Anforderungen Bypass (Sommerkühlung)¶
L9 Bypass ist grundsätzlich nur aktiv wenn input_boolean.bypass_aktiv
eingeschaltet ist (Sommersaison). Im Winter ist er immer aus.
L10 Bypass-Bedingungen — alle müssen gleichzeitig erfüllt sein:
- a) Außentemperatur liegt im einstellbaren Fenster:
min_aussentemperatur ≤ außen ≤ max_aussentemperatur. Unterhalb des Minimums (Frühjahr/Herbst zu kalt) kein Bypass. Oberhalb des Maximums (Hitzewelle) kein Bypass — in diesem Fall würde Warmluft ins Haus gefördert. Die Innentemperatur ist dann irrelevant. - b) Innentemperatur (Mittelwert Karell + Martha) ≥ einstellbarer Mindestwert. Bypass lohnt sich nicht wenn es drinnen kühler ist als der Schwellwert.
- c) Außenluft ist mindestens 0,5 °C kühler als die Innentemperatur (Puffer, da der Bypass träge reagiert und sonst um den Gleichstand pendeln würde).
- d) Das Heizventil im Wohnzimmer ist geschlossen. Bypass während aktiver Heizung widerspricht dem Heizbedarf. Kinderzimmer (Karell/Martha) heizen im Winter nicht auf Bypass-relevante Temperaturen; das Wohnzimmer hat einen Kamin, dessen Temperatur nicht gemessen wird.
L11 Bypass Force (input_boolean.bypass_force) umgeht ausschließlich das
Heizventil-Kriterium (L10d). Alle Temperaturkriterien (L10a–c) gelten
weiterhin. Force wird automatisch zurückgesetzt, wenn die
Temperaturbedingungen nicht mehr erfüllt sind.
L12 Der Bypass wird nicht gesteuert wenn Temperatursensoren nicht verfügbar sind (z.B. kurz nach HA-Neustart). Die Entscheidung wird nachgeholt sobald alle Sensoren wieder Werte liefern.
Anforderungen Frostschutz¶
L13 Unter 0 °C Außentemperatur (kalibrierter Fühler der Vaillant-Heizung) darf die Lüftung nicht laufen (Gefahr von Vereisen des Wärmetauschers). Ein manuelles Einschalten wird nach 20 Sekunden automatisch rückgängig gemacht.
Pflichtenheft — WIE ist das System umgesetzt?¶
Architektur¶
packages/lueftung.yaml enthält alle Skripte und Automationen der
Lüftungssteuerung. Alle Entities werden außerhalb des Packages als Helper
angelegt (HA UI). Die Entscheidungslogik liegt in den Automationen, die
Ausführung läuft ausschließlich über die drei Skripte dieses Packages.
Skripte¶
| Skript | Funktion | Mode |
|---|---|---|
script.lueftung_modus_setzen_package |
Setzt Tag/Nacht via select.select_option |
queued |
script.lueftung_bypass_setzen_package |
Setzt bypass_tage auf 2 (an) oder 0 (aus) |
queued |
script.lueftung_hi_modus_setzen_package |
Setzt HI-Modus via select.select_option |
queued |
mode: queued stellt sicher dass aufeinanderfolgende Aufrufe nicht verworfen werden.
Automationen¶
automation.luftung_package_hauptsteuerung (mode: restart)¶
Zentrale Steuerung. Wird bei jedem relevanten Zustandswechsel neu gestartet; ein laufender Durchlauf wird dabei abgebrochen.
Trigger-Gruppen:
- Schaltzustand: Automatik, Bypass, Hitzeschutz, Anwesenheit, Bad-Timer
- Zeitfenster: Start Wochentag/Wochenende, Ende
- Helper-Änderungen: Bypass-Temperaturgrenzen (sofortige Neubewertung)
- Temperatur-Grenzwerte: numeric_state mit 3 min Entprellung (verhindert
unnötige Schaltvorgänge bei Pendeln um die Schwelle)
- Recovery: Sensoren kommen aus unavailable/unknown zurück
Prioritätsreihenfolge Tag/Nacht (erste zutreffende Bedingung gewinnt):
| Priorität | Bedingung | Ergebnis |
|---|---|---|
| 1 (höchste) | Hitzeschutz aktiv | Nacht |
| 2 | Bad-Timer + Abwesenheit | Tag + HI |
| 3 | Bad-Timer + Anwesenheit | Tag |
| 4 | Abwesenheit | Nacht |
| 5 | Außerhalb Zeitfenster | Nacht |
| 6 (Standard) | Anwesenheit im Zeitfenster | Tag |
Bypass-Entscheidung (läuft nach der Modus-Entscheidung, separat):
- Nur wenn sensoren_ok (alle drei Temperatursensoren verfügbar)
- Bypass an: alle Bedingungen L10a–d erfüllt (bzw. L11 für Force)
- Bypass aus: mindestens eine Bedingung nicht mehr erfüllt
- Keine Aktion wenn Bypass bereits im Sollzustand und Tage == 2
automation.luftung_package_badfeuchte_timer (mode: single)¶
Startet timer.luftung_bad_timer wenn Badfeuchte >
input_number.luftung_bad_feuchte_schwelle, Automatik aktiv und kein
Hitzeschutz. Timer-Dauer aus input_number.luftung_bad_luftungsdauer.
automation.luftung_package_frostschutz_abschaltung (mode: single)¶
Schaltet die Lüftung nach kurzer Verzögerung wieder aus, wenn die Frostschutzbedingung erfüllt ist.
Helper-Entitäten (Einstellwerte)¶
| Entity | Funktion | Default |
|---|---|---|
input_boolean.luftung_automatik_aktiv |
Automatik ein/aus | on |
input_boolean.bypass_aktiv |
Bypass-Saison ein/aus | on |
input_boolean.bypass_force |
Force (ignoriert Heizventil) | off |
input_datetime.luftung_start_wochentag |
Tagbetrieb-Start Mo–Fr | 07:00 |
input_datetime.luftung_start_wochenende |
Tagbetrieb-Start Sa–So | 08:30 |
input_datetime.luftung_ende |
Tagbetrieb-Ende (täglich) | 21:00 |
input_number.luftung_bypass_min_aussentemperatur |
Bypass ab Außen (°C) | 13 |
input_number.luftung_bypass_max_aussentemperatur |
Bypass bis Außen (°C) | 23 |
input_number.luftung_bypass_min_innentemperatur |
Bypass ab Innen (°C) | 23 |
input_number.luftung_bad_feuchte_schwelle |
Feuchte-Schwelle Bad (%) | 70 |
input_number.luftung_bad_luftungsdauer |
HI-Dauer bei Abwesenheit (h) | 1,5 |
timer.luftung_bad_timer |
Laufender Bad-Lüftungs-Timer | idle |
Sensor-Entitäten (Messwerte)¶
| Entity | Bedeutung |
|---|---|
sensor.ebusd_lueftung_wtw04_airinlettemp |
Außentemperatur (Zuluft-Fühler) |
sensor.karell_wandthermostat_temperatur |
Innentemperatur Kinderzimmer 1 |
sensor.martha_wandthermostat_temperatur |
Innentemperatur Kinderzimmer 2 |
sensor.badezimmer_wandthermostat_luftfeuchtigkeit |
Luftfeuchtigkeit Bad |
binary_sensor.jemand_zuhause |
Anwesenheit gesamt |
binary_sensor.beschattung_hitzeschutz_noetig |
Hitzeschutz-Signal |
binary_sensor.wohnzimmer_wandthermostat_heizventil |
Heizventil Wohnzimmer |
sensor.heizung_vaillant_aurocompact_outsidetemp_temp |
Außentemp Heizung (Frostschutz, falls im System vorhanden) |
Design-Entscheidungen & bekannte Einschränkungen¶
- Innentemperatur-Mittelwert: Karell + Martha. Das Wohnzimmer (Kamin) wird nicht einbezogen, da der Wert dort nicht repräsentativ für den Bypass-Bedarf ist.
- Keine state-Trigger auf Temperatursensoren: Nur
numeric_state-Trigger bei Grenzwertüberschreitung (mit 3 min Entprellung), um unnötige Schaltvorgänge zu vermeiden. - Kein Trigger auf bypass_tage: Würde einen Selbst-Trigger-Loop verursachen (Automation setzt Tage → Trigger feuert → Automation läuft erneut). Stattdessen hebt jeder Lauf die Tage auf 2 an. Die täglichen Zeitfenster-Trigger (Start/Ende) wirken als impliziter Keepalive.
- Sensor-Guard: Bei unavailable-Sensoren wird die Bypass-Entscheidung übersprungen statt mit Ersatzwerten falsch zu schalten. Recovery-Trigger holen die Entscheidung nach.
- HI-Modus Erweiterbarkeit: Der HI-Modus bei Bad-Feuchte könnte bei mangelndem Solarstromüberschuss im Winter oder auf Wunsch ganz deaktiviert werden (Bad-Timer-Automation einfach deaktivieren, Rest bleibt unberührt).