1) Helper anlegen
Einstellungen → Geräte & Dienste → Helfer → + → Timer
(Du kannst das natürlich auf 2/3/… Minuten ändern.)
2) Automationen (YAML)
A) Bewegung → Licht an + Timer stoppen
alias: Bad – Bewegung erkannt
mode: restart
triggers:
- platform: state
entity_id: binary_sensor.bewegungsmelder_bad_occupancy
to: "on"
conditions:
- condition: numeric_state
entity_id: sensor.DEIN_HELLIGKEITS_SENSOR # z.B. sensor.bad_illuminance
below: 400
actions:
- service: switch.turn_on
target:
entity_id: switch.bad_gesamt
- service: timer.cancel
target:
entity_id: timer.bad_licht
B) Keine Bewegung → Timer starten (Countdown)
alias: Bad – Keine Bewegung, Countdown starten
mode: restart
triggers:
- platform: state
entity_id: binary_sensor.bewegungsmelder_bad_occupancy
to: "off"
actions:
- service: timer.start
target:
entity_id: timer.bad_licht
C) Timer fertig → Licht aus
alias: Bad – Timer fertig, Licht aus
mode: single
triggers:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.bad_licht
actions:
- service: switch.turn_off
target:
entity_id: switch.bad_gesamt
3) Countdown (absteigend) anzeigen
Minimal (ohne Zusatz-Sensor)
Füge timer.bad_licht in eine Entities- oder Tile-Card ein. Der Standard-Timer zeigt den verbleibenden Wert (z. B. 00:03:12).
Mit der Tile-Card kannst du zusätzlich den Status/Fortschritt als Leiste sehen (Kartentyp „Kachel“, Entität timer.bad_licht, Anzeige „Fortschritt“ aktivieren).
Schön formatiert (Template-Sensor mm:ss)
Falls du die Restzeit separat/kompakt brauchst:
template:
- sensor:
- name: "Bad Auto-Aus in"
unique_id: bad_auto_aus_in
state: >
{% set r = state_attr('timer.bad_licht', 'remaining') %}
{% if r %}
{% set s = (as_timedelta(r)).seconds %}
{{ '%02d:%02d' % (s // 60, s % 60) }}
{% else %}
--
{% endif %}
4) Optional: Aufsteigender Timer (seit letzter Bewegung)
Wenn du zusätzlich sehen willst, wie lange seit der letzten Bewegung vergangen ist:
template:
- trigger:
- platform: time_pattern
seconds: "/1"
sensor:
- name: "Bad – seit letzter Bewegung"
unique_id: bad_seit_letzter_bewegung
state: >
{% set last = states.binary_sensor.bewegungsmelder_bad_occupancy.last_changed %}
{% if last %}
{% set s = (now() - last).seconds %}
{{ '%02d:%02d' % (s // 60, s % 60) }}
{% else %}--{% endif %}