Lüftung automatisch nach PM2.5: Home-Assistant-Automation
Luftreiniger per Schwellwert + Hysterese schalten – ohne Flattern
Warum die Lüftung automatisieren?
Im vorherigen Artikel ist ein PMS5003T am ESP32 entstanden, der PM1.0, PM2.5 und PM10 nach Home Assistant meldet. Schön – aber Werte anschauen und dann von Hand den Luftreiniger einschalten ist kein Smarthome, das ist eine Anzeige.
Das Ziel hier: Home Assistant schaltet den Luftreiniger (oder eine Lüftung) automatisch ein, wenn PM2.5 einen Schwellwert übersteigt, und wieder aus, sobald die Luft sauber ist. Klingt trivial – hat aber eine Falle: ohne Hysterese flattert der Schalter ständig um den Schwellwert.
Anzeige · Affiliate-Link – kaufst du darüber, erhalte ich ggf. eine Provision. Für dich ändert sich am Preis nichts.
Ein PM2.5-Sensor muss bereits als Entität in Home Assistant ankommen (bei mir sensor.pm2_5 vom PMS5003T-Setup) und ein schaltbarer Aktor für den Luftreiniger, z. B. eine smarte Steckdose oder ein ESPHome-Relais (switch.luftreiniger).
Das Konzept: Schwellwert + Hysterese
Ein einzelner Schwellwert (z. B. „an, wenn PM2.5 > 25") ist eine schlechte Idee: Schwankt der Messwert um genau diese Grenze, schaltet der Luftreiniger im Sekundentakt an und aus. Das nervt, kostet Lebensdauer und bringt nichts.
Die Lösung ist eine Hysterese – zwei Schwellen:
- Einschalten bei PM2.5 über 35 µg/m³ (für 2 Minuten ununterbrochen).
- Ausschalten erst bei PM2.5 unter 15 µg/m³ (für 10 Minuten).
Die for:-Dauer entprellt zusätzlich kurze Spitzen (z. B. beim Anbraten). Die 15/35-Werte orientieren sich grob an den WHO-Richtwerten – pass sie an deine Räume an.
Die Automation (YAML)
Zwei Automationen – eine fürs Ein-, eine fürs Ausschalten. Die condition verhindert unnötige Schaltbefehle, wenn der Aktor schon im Zielzustand ist:
# Luftreiniger AN bei hohem PM2.5
- alias: "Luftreiniger an bei PM2.5 hoch"
trigger:
- platform: numeric_state
entity_id: sensor.pm2_5
above: 35
for: "00:02:00"
condition:
- condition: state
entity_id: switch.luftreiniger
state: "off"
action:
- service: switch.turn_on
target:
entity_id: switch.luftreiniger
# Luftreiniger AUS bei niedrigem PM2.5 (Hysterese)
- alias: "Luftreiniger aus bei PM2.5 niedrig"
trigger:
- platform: numeric_state
entity_id: sensor.pm2_5
below: 15
for: "00:10:00"
condition:
- condition: state
entity_id: switch.luftreiniger
state: "on"
action:
- service: switch.turn_off
target:
entity_id: switch.luftreiniger
Einschalten reagiert schnell (2 min), damit die Luft zügig gereinigt wird. Ausschalten wartet länger (10 min), damit der Reiniger nicht abschaltet, während die Werte noch knapp schwanken. Asymmetrische Hysterese – schnell rein, langsam raus.
Optional: Push-Warnung bei sehr schlechter Luft
Bei wirklich hohen Werten will ich aktiv informiert werden – unabhängig davon, ob der Reiniger schon läuft:
- alias: "Warnung bei sehr hohem PM2.5"
trigger:
- platform: numeric_state
entity_id: sensor.pm2_5
above: 75
for: "00:05:00"
action:
- service: notify.mobile_app_dein_handy
data:
title: "Luftqualität schlecht"
message: >-
PM2.5 liegt bei {{ states('sensor.pm2_5') }} µg/m³ –
der Luftreiniger läuft.
Optional: Status-Sensor per Template
Für Dashboards ist ein binärer „Luft schlecht"-Sensor praktisch – er nutzt denselben Schwellwert wie die Einschalt-Automation:
template:
- binary_sensor:
- name: "Luftqualität schlecht"
device_class: problem
state: "{{ states('sensor.pm2_5') | float(0) > 35 }}"
Was ich weggelassen habe
Bewusst nicht behandelt:
- Drehzahlregelung. Hier wird nur an/aus geschaltet. Eine stufenlose Lüfter-Regelung (PID o. Ä.) ist ein eigenes, deutlich fummeligeres Thema.
- Außenluft-Check. Eine Fensterlüftung macht nur Sinn, wenn draußen weniger Feinstaub ist als drinnen – das bräuchte einen zweiten (Außen-)Sensor oder eine API.
- CO₂ & Feuchte. Echte Lüftungssteuerung berücksichtigt mehr als PM2.5. Hier geht es nur um Feinstaub.
- Helfer-Entities für die Schwellen. Sauberer wäre, 15/35 als
input_numberauszulagern, statt sie im YAML zu hardcoden.
Fazit
Mit zwei Automationen und einer sauberen Hysterese wird aus der reinen Feinstaub-Anzeige eine echte Automation: Der Luftreiniger läuft, wenn er gebraucht wird, und ist sonst aus. Kein Flattern, kein manuelles Eingreifen. Die Schwellwerte sind der einzige Teil, den du an deine Räume anpassen solltest – der Rest läuft.
Nächster logischer Schritt: die 15/35-Grenzen als input_number-Helfer ins Dashboard holen, damit du sie ohne YAML-Edit justieren kannst.
Anzeige · Affiliate-Link – kaufst du darüber, erhalte ich ggf. eine Provision. Für dich ändert sich am Preis nichts.