Zeit bei einer Automation innerhalb zurück setzen

Hallo,

ich nutze einen Bewegungsmelder als Auslöser, um Dashboards anzuzeigen, bzw. deren Rechner aus dem Schlaf zu holen. 4 Minuten bleiben sie an und fahren dann runter.

Wenn nun innerhalb dieser 4 Minuten eine neue oder weitere Bewegungen stattfinden, sollen die 4 Minuten immer von vorn beginnen.

Wie setze ich das um? Geht das überhaupt mit einer einfachen Automation?

Mein jetziger Code:

alias: Display oben bei Bewegung an für 4 Minuten
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.hue_motion_sensor_1_bewegung
    to: "on"
    from: "off"
condition:
  - condition: numeric_state
    entity_id: sensor.server_pc_fluroben_power
    below: 11
action:
  - service: script.taste_eine_sekunde_drucken
    data: {}
    response_variable: Taste gedrückt oben
  - delay:
      hours: 0
      minutes: 4
      seconds: 0
      milliseconds: 0
  - service: script.taste_eine_sekunde_drucken
    data: {}
    response_variable: Taste gedrückt oben
mode: single

Mit dem Modus restart könnte es grundsätzlich funktionieren, wenn der Bewegungsmelder in der Zeit wieder ausschlägt. Automation modes - Home Assistant

Nur würde dann Deine Bedingung vermutlich keinen Sinn ergeben. Und es wird getriggert, wenn der Bewegungsmelder ausgeht, richtig? Dann funktioniert es ebenfalls nicht, falls der Bewegungsmelder danach wieder einschaltet und eingeschaltet bleibt.

So wirklich verstehe ich den angestrebten Zweck auch nicht, weshalb es gerade schwer fällt Tipps zur Umsetzung zu geben.

Ich schreib immer so.
Licht bei Bewegung erkannt an.
Licht wenn 4 Minuten nicht erkannt aus.
Wenn in der Zwischenzeit wieder Bewegung erkannt wird greift die aus Bedingung erst wenn die Bewegung wirklich weg ist.

Grüße Markus

Moin,
guck dir mal meine Keller Licht Automation an so würde ich arbeiten:

alias: Keller-Licht
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.everything_presence_one_keller_occupancy
    to: "on"
    id: an
  - platform: state
    entity_id:
      - binary_sensor.everything_presence_one_keller_occupancy
    to: "off"
    id: aus
    for:
      hours: 0
      minutes: 4
      seconds: 0
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: an
        sequence:
          - service: switch.turn_on
            data: {}
            target:
              entity_id:
                - switch.keller_schalter_left
                - switch.keller_tisch_lampe
      - conditions:
          - condition: trigger
            id: aus
        sequence:
          - service: switch.turn_off
            data: {}
            target:
              entity_id:
                - switch.keller_schalter_left
                - switch.keller_tisch_lampe
mode: single

Wenn für 4 min keine Bewegung erkannt wird wird aus getriggert.

Zur Info ich versuche überall auf delay zu verzichten, da es meiner Meinung einfach unsauber programmiert ist wen man delay nutzt.

LG

Könntest Du mir das für meine Sachen umschreiben oder mehr Hilfe geben? Ich habe ja nur einen Script, der ausgeführt werden soll und keine entitäten. Es wird durch das Script der Power Button vom PC für eine Sekunde gedrückt. Vielleicht kann man das ja auch hier drinnen lösen?

Nachtrag:
Ich habe es mal probiert. Sieht jetzt so aus bei mir. Das Display geht an. Wenn ich mich aber in den Bewegungssensor bewege, wird das Display sofort wieder ausgeschaltet auch innerhalb der 4 Minuten. Wo liegt der Fehler?

alias: Display Schaltung
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.hue_motion_sensor_1_bewegung
    to: "on"
    id: an
    from: "off"
  - platform: state
    entity_id:
      - binary_sensor.hue_motion_sensor_1_bewegung
    to: "off"
    id: aus
    for:
      hours: 0
      minutes: 4
      seconds: 0
    from: "on"
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: an
        sequence:
          - service: script.taste_eine_sekunde_drucken
            data: {}
      - conditions:
          - condition: trigger
            id: aus
        sequence:
          - service: script.taste_eine_sekunde_drucken
            data: {}
mode: single

@tarag

Also der Sinn den ich damit bezwecke ist eigentlich ganz einfach. Ich habe einige Displays in der Wohnung hinter dehnen jedes mal ein Intel NUC PC I7 oder I5 hängt. Ich möchte diese einfach nicht durchgehend am Laufen haben, da im Idle ca. 25 Watt verbraten werden.

Diese Bewegungsmelder schalten dann den Power Button vom PC ein und wecken die PC auf!

:crayon:by HarryP: Zusammenführung Mehrfachpost

Was sagen die Abläufe?

Sorry für die späte Antwort war anderweitig beschäftigt, Frohes Neues.
So wie du das da gemacht hast sieht das für mich richtig aus.

LG

@thphilipp

was mich stutzig macht ist die Zustandsänderung. Ändere das mal. im Auslöser statt “Von” in ein “Zu”

from: "on"

ich habe bei mir immer ein “To” drin.

- platform: state
    entity_id:
      - binary_sensor.bewegungsmelder_kuche_occupancy
    to: "on"
    id: Bewegung erkannt
  - platform: state
    entity_id:
      - binary_sensor.bewegungsmelder_kuche_occupancy
    to: "off"
    for:
      hours: 0
      minutes: 2
      seconds: 0
    id: Bewegung aus

Grüße Markus

Auch allen ein frohes Neues :champagne:

:face_with_monocle: so steht es aber doch schon drinnen.

@thphilipp

Schauen noch mal hin nach der Zeit ist bei Dir noch ein from drin

alias: Display Schaltung
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.hue_motion_sensor_1_bewegung
    to: "on"
    id: an
  - platform: state
    entity_id:
      - binary_sensor.hue_motion_sensor_1_bewegung
    to: "off"
    id: aus
    for:
      hours: 0
      minutes: 4
      seconds: 0
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: an
        sequence:
          - service: script.taste_eine_sekunde_drucken
            data: {}
      - conditions:
          - condition: trigger
            id: aus
        sequence:
          - service: script.taste_eine_sekunde_drucken
            data: {}
mode: single

Geht aber nicht. Bei jeder Bewegung wird aus oder ein geschaltet.

Prüfst du denn aktuell innerhalb deines Scripts, ob der PC läuft?
Du rufts mit der Automation ja das gleiche Script auf, egal ob ein- oder ausgeschaltet werden soll.
Wenn du bei der choose für “an” noch die Bedingung vom Anfang mit der Prüfung auf den sensor unter 11 ergänzt, dann sollte kein erneuter Scriptaufruf innerhalb der 4 Minuten stattfinden, da der Wert dann über den 11 liegen sollte.

2 „Gefällt mir“

Ich habe solche timergeschichten auch mit timern gelöst.
Ich sehe das wie @totow, delays versuche ich zu vermeiden.
Ich habe mir ein paar Timer angelegt, mit 1, 5 und 30 Minuten (helper).
Bei einem BWM starte ich z. B. den 5min.Timer.
Wird innerhalb der der Zeit eine neue Bewegung erkannt, setzt sich der Timer zurück und startet neu.
Wird keine neue Bewegung erkannt, geht es weiter in der Automation.
Die Automation selbst steht auf “neu starten”

alias: BWM Terrasse
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.signify_netherlands_b_v_sml004_occupancy
    to: "on"
condition:
  - condition: state
    entity_id: binary_sensor.helper_illu_outdoor
    state: "on"
  - condition: state
    entity_id: input_boolean.helper_terrasse_bs
    state: "off"
action:
  - service: timer.finish
    data: {}
    target:
      entity_id: timer.timer_terrasse
  - service: light.turn_on
    data:
      transition: 5
      color_temp: 500
      brightness_pct: 100
    target:
      entity_id: light.sonoff_usb_dongle_terrasse_komplett
  - service: light.turn_on
    data: {}
    target:
      entity_id: light.gartenzaun_light
  - service: light.turn_on
    data:
      color_temp: 500
      brightness_pct: 100
    target:
      entity_id: light.led_stripe_garage_light
    enabled: false
  - service: timer.start
    data:
      duration: "00:05:00"
    target:
      entity_id: timer.timer_terrasse
  - wait_for_trigger:
      - platform: state
        entity_id:
          - timer.timer_terrasse
        to: idle
        from: active
  - service: light.turn_off
    data:
      transition: 15
    target:
      entity_id: light.sonoff_usb_dongle_terrasse_komplett
  - service: light.turn_off
    data: {}
    target:
      entity_id:
        - light.gartenzaun_light
mode: restart

1 „Gefällt mir“

Natürlich. Du sagst ja auch, dass bei jeder erkannten Bewegung geschaltet werden soll. Und wenn 4 Minuten keine Bewegung erkannt wurde.

Also ich glaube das war die Lösung für meine Sache. Habe als Bedingung nun noch eingefügt, dass die Leistung unter 11 Watt sein soll, dann klappt es.

Vielen Dank.

Doch noch mal eine Frage dazu. Kann ich auch hier in dieser Automation so lösen, dass diese Taste des Gerätes für eine Sekunde gedrückt wird, ohne das über einen Script zu machen?

Ich würde sagen Ja.
Ein Script ist wenn man es grob nimmt eine Automation ohne Trigger und Bedingungen und muss dafür ausgeführt werden.
Alles was du in einem Script ausführst kannst du auch direkt in der Automation ausführen.

LG

Ja aber bei meiner Weise wäre es wieder mit einigen Delay, was ja wohl nicht so gut sein soll. Geht das nicht anders?