Licht manuell ein- und ausschalten - oder durch Timer

Moin zusammen,
ich stehe gerade auf dem Schlauch und glaube, dass ich zu kompliziert denke…

Also…Ich schalte im Badezimmer direkt an der Tür das Licht u.a. für die Dusche ein und aus. Weiterhin gibt es bei der Dusche noch einen Taster, wo ich das auch machen kann - klassische Wechselschaltung eben.
Nun ist es aber so, dass trotzdem öfters vergessen wird, das Licht in der Dusche auszuschalten. Dieses soll, wenn nicht über Taster manuell, nach 45 Minuten ausschalten. Den Timer möchte ich auf dem Dashboard mit anzeigen lassen.

Ich habe einen Timer-Helfer erstellt, den ich beim Einschalten starte und beim ausschalten beende. Soweit so gut. Allerdings passiert dann natürlich nichts. Was kann ich machen, damit das Licht am Ende des Timers erlischt? Muss ich zusätzlich zum Timer noch eine Verzögerung einbauen? Da die beiden Taster im Badezimmer unterschiedliche Automationen sind, würde die Verzögerung ja nur für den ersten Taster gelten, der diese aktiviert hat.

Oder mache ich einen Gedankenfehler und denke zu kompliziert?

Besten Dank für einen Tipp!

Vg
Sven

Leg dir eine zweite Automation an.

Trigger:
Wenn Zustand von Timer zu untätig wechselt, dann
Aktion Dienst light.turn_off

description: ""
mode: single
trigger:
  - platform: state
    entity_id:
      - timer.xyz
    to: idle
condition: []
action:
  - service: light.turn_off
    data: {}
    target:
      entity_id: light.xyz

Ggf. noch eine Bedingung

condition: state
entity_id: light.xyz
state: "on"
1 „Gefällt mir“

oh perfekt!
Danke! Das habe ich gesucht! :slight_smile:

Theoretisch brauchst du keinen extra Timer. Du könntest mit einem Wait in den Aktionen arbeiten und dort ebenfalls mit wenn- dann.

description: ""
mode: restart
trigger:
  - platform: state
    entity_id:
      - light.xyz
    from: "off"
    to: "on"
condition: []
action:
  - delay:
      hours: 0
      minutes: 45
      seconds: 0
      milliseconds: 0
  - if:
      - condition: state
        entity_id: light.xyz
        state: "on"
    then:
      - service: light.turn_off
        data: {}
        target:
          entity_id: light.xyz

Ist ungetestet.

Moin,
ich finde delay immer unsauber ich würde das ehr so machen:

description: ""
mode: single
trigger:
  - platform: state
    entity_id:
      - light.xyz
    to: "on"
    for:
      hours: 0
      minutes: 45
      seconds: 0
condition: []
action:
  - service: light.turn_off
    data: {}
    target:
      entity_id: light.xyz

hast du noch ein Temperatur/Luftfeuchtigkeit Sensor in der nähe?
Damit man verhindert das das licht ausgeht wen mal mehrere hintereinander Duschen?

Das geht bei meiner Lösung und bei der im Post über mir nicht direkt.
Man kann aber glaub ich anzeigen lassen wie lange das licht an ist.

LG
Tobi

Wenn Du es so machst, kannst Du Dir den Timer als Entity auf das Dashboard legen:

trigger:
  - platform: state
    entity_id:
      - light.licht_bad
    to: "on"
condition: []
action:
  - service: timer.start
    data: {}
    target:
      entity_id: timer.dein_timer
  - wait_for_trigger:
      - platform: state
        entity_id:
          - timer.dein_timer
        to: idle
  - service: light.turn_off
    data: {}
    target:
      entity_id: light.licht_bad
mode: restart

Und damit überlebt das Ganze auch einen Restart von Home Assistant (der Timer muss auf “Wiederherstellen” gesetzt sein), außerdem wird der Timer beim manuellen Ausschalten des Lichts zurückgesetzt, damit er auf dem Dashboard nicht weiterläuft:

alias: Badlicht aus durch Timer
description: ""
trigger:
  - platform: state
    entity_id:
      - light.licht_bad
    to: "on"
    id: Licht an
  - platform: state
    entity_id:
      - timer.dein_timer
    to: idle
    id: Timer aus
  - platform: state
    entity_id:
      - light.licht_bad
    to: "off"
    id: Licht aus
condition: []
action:
  - if:
      - condition: trigger
        id:
          - Licht an
    then:
      - service: timer.start
        data: {}
        target:
          entity_id: timer.dein_timer
  - if:
      - condition: trigger
        id:
          - Timer aus
    then:
      - service: light.turn_off
        data: {}
        target:
          entity_id: light.licht_bad
  - if:
      - condition: trigger
        id:
          - Licht aus
    then:
      - service: timer.finish
        data: {}
        target:
          entity_id: timer.dein_timer
mode: restart
1 „Gefällt mir“

Das ist ja nochmal besser! :slight_smile:
Hab es direkt umgesetzt und bin absolut glücklich. Genauso habe ich es mir vorgestellt. freu

Vielen Dank!

Sehr gerne, freut mich, dass es passt.

Ich hänge mich hier kurz dran:
Ist dieser YAML-Code ein Befehl dafür, dass nach einer bestimmten Zeit ein Zustand wieder beendet werden kann?

Was mich bei Automationen ja immer etwas wundert ist, dass ich in der Frontendansicht beim Trigger immer eine Zeitdauer eingeben kann, bei der “Dann-Option” Zeit bzw. eine Zeitdauer nicht bequem als Option hinzugefügt werden kann. Wenn ich es richtig verstehe, dann muss ich eben Kenntnisse in YAML haben und den Code entsprechend angeben oder muss mich umständlich mit “Helfern” oder aber einen zweiten Automation mit einem “Antiauslöser” behelfen. Da versuche ich die HA-Logik noch besser zu ergründen.

Delay kannst du auch über das UI machen

1 „Gefällt mir“

Cool jetzt habe ich es gefunden! Danke

Ich würde das mittlerweile auch eher so machen.