Garagentore per Push Notification schließen

Hallo zusammen,
ich habe 2 Hörmann Garagentore via PCBs und MQTT in HA eingebunden.
Nun möchte ich 3 Automatisierungen laufen lassen.
Zwei davon funktionieren einwandfrei:
Die erste checkt zu einem bestimmten Event (Uhrzeit, Sonnenuntergang) ob das linke Tor offen ist, während das rechte geschlossen ist. Wenn dem so ist, bekomme ich eine Nachricht aufs iPhone und kann per Button das linke Tor schließen → funktioniert wie gewollt.
Die zweite Automation macht das gleiche, nur rechtes Tor offen bei gleichzeitig linkem geschlossen → geht ebenfalls gut.
Die dritte soll melden, wenn beide Tore offen sind und dann sollen 3 Buttons da sein (links schließen, rechts schließen, beide schließen).
Nachricht mit den 3 Buttons auf das iPhone funktioniert, leider sind aber immer 2 von 3 Buttons ohne physische Reaktion am Tor.
Ich habe 3 Actions definiert und diese als 3 mögliche Auslöser nacheinander als „Dann-Aktion“ in der Automation. Ein echtes Ergebnis liefert aber immer nur der Button, dessen Action die erst genannte in der Kette der 3 möglichen Auslöser ist. Bei den anderen Beiden passiert mit Druck auf den Button nichts, außer dass die Meldung dann geschlossen wird. Code findet ihr anbei mit der Hoffnung, dass mir jemand sagen kann, was ich hier falsch mache…
Danke vorab!!!

alias: TEST_Garagentor beide Schließabfrage mobile Push
description: ""
triggers:
  - trigger: time
    at: "19:30:00"
  - trigger: sun
    event: sunset
    offset: 0
conditions:
  - condition: numeric_state
    entity_id: sensor.garagentor_links_neu_garage_door_position
    above: 0
  - condition: numeric_state
    entity_id: sensor.garagentor_rechts_neu_garage_door_position
    above: 0
actions:
  - action: notify.mobile_app_xxx_16_pro
    metadata: {}
    data:
      message: Beide Garagentore sind noch offen!
      title: Garage offen!
      data:
        actions:
          - action: TOR_SCHLUSS_LINKS
            title: Garage links schließen
          - action: TOR_SCHLUSS_RECHTS
            title: Garage rechts schließen
          - action: TOR_SCHLUSS_BEIDE
            title: beide Garagentore schließen
  - wait_for_trigger:
      - trigger: event
        event_type: mobile_app_notification_action
        event_data:
          action: TOR_SCHLUSS_LINKS
    timeout:
      hours: 0
      minutes: 10
      seconds: 0
      milliseconds: 0
    continue_on_timeout: false
  - action: cover.close_cover
    metadata: {}
    data: {}
    target:
      entity_id:
        - cover.garagentor_links_neu_garagentor_links_neu
  - wait_for_trigger:
      - trigger: event
        event_type: mobile_app_notification_action
        event_data:
          action: TOR_SCHLUSS_RECHTS
    timeout:
      hours: 0
      minutes: 10
      seconds: 0
      milliseconds: 0
    continue_on_timeout: false
  - action: cover.close_cover
    metadata: {}
    data: {}
    target:
      entity_id: cover.garagentor_rechts_neu_garagentor_rechts_neu
  - wait_for_trigger:
      - trigger: event
        event_type: mobile_app_notification_action
        event_data:
          action: TOR_SCHLUSS_BEIDE
    timeout:
      hours: 0
      minutes: 10
      seconds: 0
      milliseconds: 0
    continue_on_timeout: false
  - action: cover.close_cover
    metadata: {}
    data: {}
    target:
      entity_id:
        - cover.garagentor_links_neu_garagentor_links_neu
        - cover.garagentor_rechts_neu_garagentor_rechts_neu
mode: single

Hallo,

ich wäre mit Warteschleifen und WaitFor Anweisungen innerhalb von Actions sehr vorsichtig und sehr sparsam. Damit kann es dir nämlich passieren, dass an einer Stelle genau auf ein spezielles Event gewartet wird und die Automation auf sonst nichts anderes mehr reagiert.

Ich würde das Ganze anders aufbauen und zunächst alles als Trigger definieren und eine ID zuweisen, was irgendeine Aktion auslösen kann. Zum Beispiel:

Trigger wenn

  • Zeit 19:30 => Event_ID = Event_Zeit
  • Sonnenaufgang => Event_ID = Event_Sonne
  • Nachricht vom Handy TOR_SCHLUSS_LINKS => Event_ID_Handy_Links
  • Nachricht vom Handy TOR_SCHLUSS_RECHTS => Event_ID_Handy_Rechts
  • Nachricht vom Handy TOR_SCHLUSS_BEIDE => Event_ID_Handy_Beide

und dann bei den Action ein Wähle aus Events aus

  - choose:
      - conditions:
          - condition: trigger
            id:
              - Event_Zeit
        sequence:
          ...

      - conditions:
          - condition: trigger
            id:
              - Event_Sonne
        sequence:

		...	

      - conditions:
          - condition: trigger
            id:
              - Event_ID_Handy_Links
        sequence:

und in den Sequences kannst du auf alle möglichen Signale etc auswerten.
z.B.:
Wenn Tor links offen und Tor rechts offen dann sende Nachricht…
Wenn Schließen-Befehl vom Handy und Tor Offen dann schließen…

1 „Gefällt mir“

Danke für die Hilfe. Diese Themen sind mir noch neu. Klingt spannend, muss ich mich aber erstmal reinlesen. So bin ich noch nie vorgegangen…

Komme hier leider nicht so recht vorwärts. Hänge noch ganz vorne…
An welcher Stelle einer Automatisation definiere ich denn verschiedene Trigger IDs? Mein Weg ging bisher immer erstmal über die UI und dann bin ich ein wenig im yaml rumgesprungen. Hier würde ich ja alles im yaml schreiben und da fehlt mir die Erfahrung und das Wissen, wie ich dass dann formulieren muss.
Was bspw. muss ich jeweils bei sequence unter der Trigger ID schreiben?
Ich bleibe dran, nehme aber weiter gerne Hinweise zum eigentlichen Problem an.
Danke!

EDIT: sehe gerade es gibt einige Videos rund um Trigger IDs, werde mir erstmal die anschauen.

Habe jetzt einige Videos dazu angesehen und meine Automatisation neu gebaut.
Inhaltlich glaube ich, dass alles korrekt ist. Je nachdem welche Tore offen sind (links, rechts, beide) bekomme ich auch entsprechend die richtige Mitteilung auf das Handy und auch nur die Buttons, welche zu diesem Zustand passen.
Problem ist, dass egal was ich tue, keiner der Buttons am Ende dazu führt, dass eines oder beide Tore geschlossen werden.
Der Code dazu hier:

alias: TEST2_Garagentor beide Schließabfrage mobile Push Basti
description: ""
triggers:
  - trigger: time
    at: "11:10:00"
    id: Event_Zeit
  - trigger: sun
    event: sunset
    offset: 0
    id: Event_Sonnenuntergang
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: TOR_SCHLUSS_LINKS
    id: Event_Handy_Links
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: TOR_SCHLUSS_RECHTS
    id: Event_Handy_Rechts
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: TOR_SCHLUSS_BEIDE
    id: Event_Handy_beide
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: STOP
    id: Event_Handy_Stop
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Event_Zeit
              - Event_Sonnenuntergang
          - condition: and
            conditions:
              - condition: numeric_state
                entity_id: sensor.garagentor_links_neu_garage_door_position
                above: 0
              - condition: numeric_state
                entity_id: sensor.garagentor_rechts_neu_garage_door_position
                above: 0
        sequence:
          - action: notify.mobile_app_bastis_16_pro
            metadata: {}
            data:
              message: Beide Garagentore sind offen
              title: Die Garage ist offen!
              data:
                actions:
                  - action: TOR_SCHLUSS_LINKS
                    title: Garage links schließen
                  - action: TOR_SCHLUSS_RECHTS
                    title: Garage rechts schließen
                  - action: TOR_SCHLUSS_BEIDE
                    title: beide Garagentore schließen
                  - action: STOP
                    title: Verstanden - beide offen lassen
          - wait_for_trigger: []
            timeout:
              hours: 0
              minutes: 5
              seconds: 0
              milliseconds: 0
            continue_on_timeout: false
          - choose:
              - conditions:
                  - condition: trigger
                    id:
                      - Event_Handy_Links
                sequence:
                  - action: cover.close_cover
                    metadata: {}
                    data: {}
                    target:
                      entity_id: cover.garagentor_links_neu_garagentor_links_neu
              - conditions:
                  - condition: trigger
                    id:
                      - Event_Handy_Rechts
                sequence:
                  - action: cover.close_cover
                    metadata: {}
                    data: {}
                    target:
                      entity_id: cover.garagentor_rechts_neu_garagentor_rechts_neu
              - conditions:
                  - condition: trigger
                    id:
                      - Event_Handy_beide
                sequence:
                  - action: cover.close_cover
                    metadata: {}
                    data: {}
                    target:
                      entity_id:
                        - cover.garagentor_links_neu_garagentor_links_neu
                        - cover.garagentor_rechts_neu_garagentor_rechts_neu
              - conditions:
                  - condition: trigger
                    id:
                      - Event_Handy_Stop
                sequence:
                  - action: automation.reload
                    metadata: {}
                    data: {}
      - conditions:
          - condition: trigger
            id:
              - Event_Zeit
              - Event_Sonnenuntergang
          - condition: and
            conditions:
              - condition: numeric_state
                entity_id: sensor.garagentor_links_neu_garage_door_position
                above: 0
              - condition: state
                entity_id: sensor.garagentor_rechts_neu_garage_door_status
                state: closed
        sequence:
          - action: notify.mobile_app_bastis_16_pro
            metadata: {}
            data:
              message: Das linke Garagentor ist offen
              title: Die Garage ist offen!
              data:
                actions:
                  - action: TOR_SCHLUSS_LINKS
                    title: Garage links schließen
                  - action: STOP
                    title: Verstanden - Tor offen lassen
          - wait_for_trigger: []
            timeout:
              hours: 0
              minutes: 5
              seconds: 0
              milliseconds: 0
            continue_on_timeout: false
          - choose:
              - conditions:
                  - condition: trigger
                    id:
                      - Event_Handy_Links
                sequence:
                  - action: cover.close_cover
                    metadata: {}
                    data: {}
                    target:
                      entity_id: cover.garagentor_links_neu_garagentor_links_neu
              - conditions:
                  - condition: trigger
                    id:
                      - Event_Handy_Stop
                sequence:
                  - action: automation.reload
                    metadata: {}
                    data: {}
      - conditions:
          - condition: trigger
            id:
              - Event_Zeit
              - Event_Sonnenuntergang
          - condition: and
            conditions:
              - condition: state
                entity_id: sensor.garagentor_links_neu_garage_door_status
                state: closed
              - condition: numeric_state
                entity_id: sensor.garagentor_rechts_neu_garage_door_position
                above: 0
        sequence:
          - action: notify.mobile_app_bastis_16_pro
            metadata: {}
            data:
              message: Das rechte Garagentor ist offen
              title: Die Garage ist offen!
              data:
                actions:
                  - action: TOR_SCHLUSS_RECHTS
                    title: Garage rechts schließen
                  - action: STOP
                    title: Verstanden - Tor offen lassen
          - wait_for_trigger: []
            timeout:
              hours: 0
              minutes: 5
              seconds: 0
              milliseconds: 0
          - choose:
              - conditions:
                  - condition: trigger
                    id:
                      - Event_Handy_Rechts
                sequence:
                  - action: cover.close_cover
                    metadata: {}
                    data: {}
                    target:
                      entity_id: cover.garagentor_rechts_neu_garagentor_rechts_neu
              - conditions:
                  - condition: trigger
                    id:
                      - Event_Handy_Stop
                sequence:
                  - action: automation.reload
                    metadata: {}
                    data: {}
mode: single

Interessant ist auch, dass die Traces zur Ausführung für mich unlogisch aussehen.
Letzter Test war: Auslösen bei Sonnenuntergang oder Uhrzeit 11:10 Uhr. Tor rechts geschlossen, Tor links offen.
Automatisation hat um 11:10 Uhr ausgelöst. Ich habe die korrekte Mitteilung bekommen, dass das linke Tor offen ist und auch nur den Button zum Schließen links, oder eben “als verstanden” quittieren.
Trotz Druck auf den Button zum Schließen des linken Tores ist nichts passiert. Laut Traces hat die Automatisation quasi an allem vorbei gearbeitet, weil der Auslöser der Automatisierung der “Buttondruck zum Schließen des linken Tores auf dem Handy” war. Die Spur geht also an allen Schritten vorbei, obwohl ja tatsächlich die nächsten Schritte ordentlich durchgearbeitet wurden, sonst hätte ich ja nicht die passende Meldung auf das Handy bekommen.
Hier mal noch der Auszug aus den Traces:

Komisch auch, dass hier eine Laufzeit von 0,00s angegeben wird…

so, jetzt habe ich es ans Laufen gebracht…
Zwar vermutlich über einen Umweg aber erstmal egal…
Da ich die Smartphone Rückmeldungen zu Beginn als mögliche Auslöser definiert habe, dreht die Automatisierung jetzt jeweils eine Schleife.
In der Automatisation bekomme ich je nach Zustand der Tore jeweils verschiedene Nachrichten aufs Handy mit den Buttons zum Schließen der Tore. Die Rückmeldung über einen Button sollte theoretisch innerhalb der Automatisation dann eine Aktion (bspw. das Schließen) auslösen. Hat so nicht geklappt, denn die Rückmeldung über einen Button beim Handy hat dann nicht zur gewünschten Aktion geführt, sondern wurde für diese Automatisation als neuer Trigger gewertet. Also bricht die erste Runde ab und die Automatisation startete erneut. Das habe ich mir zur Nutze gemacht und am Ende der Automatisation einfach die “Button” Auslöser vom Handy final mit den gewünschten Aktionen verknüpft. Bedeutet innerhalb der Automatisation gebe ich per Handy Rückmeldung, was die Automatisation an dieser Stelle abbricht. Die Rückmeldung wird dann als Trigger genutzt und startet die Automatisation nochmal neu. Aufgrund der Art wie sie aufgebaut ist, führt dieser Trigger dann an den anderen Bedingungen davor vorbei und landet nur am Ende bei den Aktionen, welche durch einen dieser Trigger ausgelöst wird.
Sieht komisch aus, macht jetzt aber was es soll…Hier der Code, falls jemand sieht, an welcher Stelle es vllt. doch schlanker geht…

alias: Garagentore schließen_mobile Push_Basti
description: ""
triggers:
  - trigger: time
    at: "19:30:00"
    id: Event_Zeit
  - trigger: sun
    event: sunset
    offset: 0
    id: Event_Sonnenuntergang
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: TOR_SCHLUSS_LINKS
    id: Event_Handy_Links
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: TOR_SCHLUSS_RECHTS
    id: Event_Handy_Rechts
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: TOR_SCHLUSS_BEIDE
    id: Event_Handy_beide
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: STOP
    id: Event_Handy_Stop
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Event_Zeit
              - Event_Sonnenuntergang
          - condition: and
            conditions:
              - condition: numeric_state
                entity_id: sensor.garagentor_links_neu_garage_door_position
                above: 0
              - condition: numeric_state
                entity_id: sensor.garagentor_rechts_neu_garage_door_position
                above: 0
        sequence:
          - action: notify.mobile_app_bastis_16_pro
            metadata: {}
            data:
              message: Beide Garagentore sind offen
              title: Die Garage ist offen!
              data:
                actions:
                  - action: TOR_SCHLUSS_LINKS
                    title: Garage links schließen
                  - action: TOR_SCHLUSS_RECHTS
                    title: Garage rechts schließen
                  - action: TOR_SCHLUSS_BEIDE
                    title: beide Garagentore schließen
                  - action: STOP
                    title: Verstanden - beide offen lassen
          - wait_for_trigger: []
            timeout:
              hours: 0
              minutes: 5
              seconds: 0
              milliseconds: 0
            continue_on_timeout: false
      - conditions:
          - condition: trigger
            id:
              - Event_Zeit
              - Event_Sonnenuntergang
          - condition: and
            conditions:
              - condition: numeric_state
                entity_id: sensor.garagentor_links_neu_garage_door_position
                above: 0
              - condition: state
                entity_id: sensor.garagentor_rechts_neu_garage_door_status
                state: closed
        sequence:
          - action: notify.mobile_app_bastis_16_pro
            metadata: {}
            data:
              message: Das linke Garagentor ist offen
              title: Die Garage ist offen!
              data:
                actions:
                  - action: TOR_SCHLUSS_LINKS
                    title: Garage links schließen
                  - action: STOP
                    title: Verstanden - Tor offen lassen
          - wait_for_trigger: []
            timeout:
              hours: 0
              minutes: 5
              seconds: 0
              milliseconds: 0
            continue_on_timeout: false
      - conditions:
          - condition: trigger
            id:
              - Event_Zeit
              - Event_Sonnenuntergang
          - condition: and
            conditions:
              - condition: state
                entity_id: sensor.garagentor_links_neu_garage_door_status
                state: closed
              - condition: numeric_state
                entity_id: sensor.garagentor_rechts_neu_garage_door_position
                above: 0
        sequence:
          - action: notify.mobile_app_bastis_16_pro
            metadata: {}
            data:
              message: Das rechte Garagentor ist offen
              title: Die Garage ist offen!
              data:
                actions:
                  - action: TOR_SCHLUSS_RECHTS
                    title: Garage rechts schließen
                  - action: STOP
                    title: Verstanden - Tor offen lassen
          - wait_for_trigger: []
            timeout:
              hours: 0
              minutes: 5
              seconds: 0
              milliseconds: 0
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Event_Handy_Links
        sequence:
          - action: cover.close_cover
            metadata: {}
            data: {}
            target:
              entity_id: cover.garagentor_links_neu_garagentor_links_neu
      - conditions:
          - condition: trigger
            id:
              - Event_Handy_Rechts
        sequence:
          - action: cover.close_cover
            metadata: {}
            data: {}
            target:
              entity_id: cover.garagentor_rechts_neu_garagentor_rechts_neu
      - conditions:
          - condition: trigger
            id:
              - Event_Handy_beide
        sequence:
          - action: cover.close_cover
            metadata: {}
            data: {}
            target:
              entity_id:
                - cover.garagentor_links_neu_garagentor_links_neu
                - cover.garagentor_rechts_neu_garagentor_rechts_neu
      - conditions:
          - condition: trigger
            id:
              - Event_Handy_Stop
        sequence:
          - action: automation.reload
            metadata: {}
            data: {}
mode: single

Danke!