Duscht da gerade jemand?

Home Assistant Automation “Duschen erkannt”

Mit einem Raumfeuchtesensor und einem Türkontakt habe ich gemeinsam mit ChatGPT diese Home Assistant Automation erstellt, die mir sehr zuverlässig mitteilt, ob gerade jemand duscht.
Dazu wird jedes Mal, wenn jemand das Duschbad betritt und die Tür schließt, der aktuelle Wert der Raumfeuchte in einer Hilfsvariablen (Startfeuchte) gespeichert.
Steigt dieser Wert bei dauerhaft geschlossener Tür an, wird gerade geduscht. Ab einem Anstieg der Raumfeuchte um 5% wird dann die zweite Hilfsvariable aktiviert, die mir auf einem Dashboard anzeigt, dass und wie lange gerade jemand duscht. Dies wird mir auch als Meldung im Home Assistant angezeigt, zusammen mit der Startzeit und der Raumfeuchte zu diesem Zeitpunkt.
Sobald die Tür zum Duschraum wieder geöffnet wird, wird mir der Duschvorgang als beendet gemeldet. In dieser Meldung werden mir die Endzeit sowie die aktuelle Raumfeuchte zum Zeitpunkt des Türöffnens mitgeteilt.
Durch den Aufbau dieser Automation ist es möglich, dass mehrere Personen nacheinander duschen und dies trotzdem eindeutig erkannt wird, da der Anstieg der Raumfeuchte ausgewertet wird, unabhängig davon, wie hoch diese tatsächlich ist. Natürlich hat das seine Grenzen, aber die wurden bei mir nie erreicht.
In unserer Wohnung befindet sich im Duschbad auch eine Toilette und die ist, solange jemand duscht, nur eingeschränkt oder gar nicht verfügbar. Daher halte ich diese Automatisierung für sinnvoll und gebe sie auf diesem Wege weiter.
Zum ChatGPT ist zu sagen, dass er sehr hilfreich ist, da er viel Tipparbeit abnimmt, aber man muss ihm sehr genau sagen, was man möchte, damit es dann auch funktioniert. Leider verwendet er oft Home Assistant YAML Code, der nicht mehr gültig ist und prüft nicht selbstständig auf HA 2025. Aber das kann man ihm sagen und dann funktioniert es wirklich sehr gut.

alias: Duschen erkannt
description: Erkennt Duschaktivität über Luftfeuchtigkeitsanstieg bei geschlossener Tür
triggers:
  - entity_id: sensor.raumfeuchte
    trigger: state
  - entity_id: binary_sensor.türkontakt
    trigger: state
conditions:
  - condition: state
    entity_id: input_boolean.duschen_aktiv
    state: "off"
  - condition: state
    entity_id: binary_sensor.türkontakt
    state: "off"
  - condition: template
    value_template: >
      {% set aktuell = states('sensor.raumfeuchte') |
      float(0) %} {% set start =
      states('input_number.luftfeuchte_duschen_startwert') | float(0) %} {{
      aktuell > start + 5 }}
actions:
  - data:
      entity_id: input_number.luftfeuchte_duschen_startwert
      value: "{{ states('sensor.raumfeuchte') | float(0) }}"
    action: input_number.set_value
  - data:
      entity_id: input_datetime.duschen_startzeit
      timestamp: "{{ now().timestamp() }}"
    action: input_datetime.set_datetime
  - data:
      entity_id: input_boolean.duschen_aktiv
    action: input_boolean.turn_on
  - data:
      title: Duschen erkannt
      message: >
        Es wurde erkannt, dass jemand duscht.   Luftfeuchtigkeit: {{
        states('sensor.raumfeuchte') }} %   Uhrzeit: {{
        now().strftime('%H:%M:%S') }}
    action: persistent_notification.create
mode: single

Hier die zweite zugehörige Automation:

alias: Duschen beendet (Tür geöffnet)
description: Beendet das Duschen, wenn die Badezimmertür geöffnet wird
triggers:
  - entity_id: binary_sensor.türkontakt
    from: "off"
    to: "on"
    trigger: state
conditions:
  - condition: state
    entity_id: input_boolean.duschen_aktiv
    state: "on"
actions:
  - target:
      entity_id: input_boolean.duschen_aktiv
    action: input_boolean.turn_off
    data: {}
  - data:
      title: Duschen beendet
      message: >
        Das Duschen wurde als beendet erkannt.   Tür geöffnet um {{
        now().strftime('%H:%M:%S') }}.   Aktuelle Luftfeuchtigkeit: {{
        states('sensor.raumfeuchte') }} %
    action: persistent_notification.create
mode: single

Die Darstellung im Dashboard wurde so realisiert:

type: conditional
conditions:
  - entity: input_boolean.duschen_aktiv
    state: "on"
card:
  type: custom:button-card
  entity: sensor.duschdauer_aktuell
  name: Duschen läuft
  icon: mdi:shower
  show_state: true
  state_display: |
    [[[ return entity.state; ]]]
  styles:
    card:
      - height: 50px
      - width: 200px
      - border-radius: 12px
      - font-size: 14px
      - padding: 8px
      - background: |
          [[[
            let time = entity.state.split(':');
            let min = parseInt(time[0]) * 60 + parseInt(time[1]);
            let color = (min < 10) ? '#4caf50' : (min < 20) ? '#ff9800' : '#f44336';
            return `linear-gradient(to right, ${color} ${min*2}%, #ffffff ${min*2}%)`;
          ]]]
    name:
      - font-weight: bold
      - color: "#000000"
    state:
      - font-size: 13px
      - color: "#000000"

Solange erkannt wird, dass jemand duscht, wird diese Information angezeigt und im Hintergrund der CHIP-Karte läuft ein Balken von links nach rechts. Je nach Dauer des Duschvorgangs färbt sich der Hintergrund erst grün und dann rot.

2 „Gefällt mir“