Zeitversetzte Push-Benachrichtigung, welche Fenster offen sind

Hallo,

ich möchte meine Automationen etwas entschlacken bzw. die Push-Benachrichtigungen etwas reduzieren.

Aktuell lasse ich mich informieren, wenn ein Fenster (in Summe 7 Stück) bestimmte Zeiträume offen ist (HomematicIP-Sensoren).
Ich habs - bestimmt nicht elegant - so gelöst, dass für jedes Fenster und jeden Zeitpunkt eine eigene Automation angelegt ist. Macht soweit was ich will. Nur sind mir die Benachrichtigungen mittlerweile fast zuviel, wenn alle Fenster offen sind, und diese ggf. sogar etwas Zeitversetzt geöffnet wurden.
Ich würde das gerne so umbauen:
Sobald ein Fenster offen ist, soll alle 30 Min. eine Benachrichtigung kommen, welche Fenster aktuell offen sind (ggf. wie lange schon oder seit wann). Wenn das zuletzt geöffnete Fenster 2h offen ist, können die Benachrichtigungen aufhöhren. Hab das über eine Benachrichtigung bei niedriger Raumtemperatur zusätzlich noch abgesichert. So könnte ich meiner Gedankenwelt nach, von max. 7 Nachrichten pro Benachrichtigungsrunde auf 8 Insgesamt reduzieren.

Mein Punkt, wo ich das Schwarmwissen jetzt benötigen würde wäre, ob solche Komplexen Abfragen überhaupt als Automation gehen, und wie man dann die Benachrichtigung mit - ich denke mal - Doppelvariabel gestalten müsste. Dahingehend hab ich leider noch null Plan. :frowning:

1 „Gefällt mir“

Ich hatte gerade Spaß mit ChatGPT aber am Ende kam das heraus.

  • Setze die richtigen Sensorennamen
  • und Deinen Mail Service
  • lege unter Helper diesen Timer an timer.window_opened_timer
    und probiere es mal.
    Gutes Gelingen!

PS: Meine Frau ist auch etwas genervt von zu häufigen “Fenster ist lange auf” Ansagen und ich habe das auch mit bestimmten Temperaturgrenzen verbunden.

description: >-
  ### Was die Automisation tut


  - sobald ein Fenster geöffnet wird, startet ein 30 min Timer

  - Ist der Timer abgelaufen wird erneut diese Automisation gestartet und sofern
  ein oder mehrere Fenster offen, verschickt es eine Mail mit dem Sensornamen
  und startet den Timer mit 30 min erneut

  - das Ganze endet 30 min nachdem alle Fenster geschlossen sind


  ### Mögliche Verbesserungen


  - man könnte die Fenster in eine Gruppe nehmen (und fängt damit den Ausfall
  von Fenstersensoren besser ab) 

  - anstelle der Sensornamen könnte der friendly name abgefragt werden, macht
  die Email lesbarer

  - ...
mode: single
trigger:
  - platform: state
    entity_id:
      - binary_sensor.window_sensor_1
      - binary_sensor.window_sensor_2
      - binary_sensor.window_sensor_3
      - binary_sensor.window_sensor_4
      - binary_sensor.window_sensor_5
      - binary_sensor.window_sensor_6
      - binary_sensor.window_sensor_7
    to: "on"
    id: OneOfMyWindowOpened
  - platform: event
    event_type: timer.finished
    event_data:
      entity_id: timer.window_opened_timer
    id: MyTimerFinished
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - OneOfMyWindowOpened
        sequence:
          - service: timer.start
            data:
              duration: "1800"
            target:
              entity_id: timer.window_opened_timer
      - conditions:
          - condition: trigger
            id:
              - MyTimerFinished
          - condition: template
            value_template: |
              {{ (is_state('binary_sensor.window_sensor_1', 'on') or
                 is_state('binary_sensor.window_sensor_2', 'on') or
                 is_state('binary_sensor.window_sensor_3', 'on') or
                 is_state('binary_sensor.window_sensor_4', 'on') or
                 is_state('binary_sensor.window_sensor_5', 'on') or
                 is_state('binary_sensor.window_sensor_6', 'on') or
                 is_state('binary_sensor.window_sensor_7', 'on')) }}
        sequence:
          - service: notify.email
            data_template:
              title: Folgende Fenster sind seit 30 min auf
              message: |
                {% set sensors = [
                    'binary_sensor.window_sensor_1',
                    'binary_sensor.window_sensor_2',
                    'binary_sensor.window_sensor_3',
                    'binary_sensor.window_sensor_4',
                    'binary_sensor.window_sensor_5',
                    'binary_sensor.window_sensor_6',
                    'binary_sensor.window_sensor_7'
                ] %}
                {% for sensor in sensors %}
                  {% if is_state(sensor, 'on') %}
                    {{ sensor }}
                  {% endif %}
                {% endfor %}
          - service: timer.start
            data:
              duration: "1800"
            target:
              entity_id: timer.window_opened_timer
alias: forum test

Über einen anderen Post bin ich auf diesen gestoßen, der Dir auch helfen kann [https://community.smarthome-for-dummies.de/viewtopic.php?t=371&sid=d22f715690559dafe6e710168bb2acf3](Automatisierung nur alle x Stunden/Tage ausführen - Benachrichtigung Regen - offene Fenster - SmartHome for Dummies)

Danke für eure Hilfe.
Ich konnte es jetzt so lösen:

alias: offene Fenster-extrahiert
description: Offene Fenster
trigger:
  - platform: state
    entity_id:
      - binary_sensor.badezimmer_fensterkontakt_status
      - binary_sensor.esszimmer_fensterkontakt_status
      - binary_sensor.kinderzimmer_fensterkontakt_kinderzimmer_fenster_status
      - binary_sensor.kuche_fensterkontakt_status
      - binary_sensor.schlafzimmer_fensterkontakt_status
      - >-
        binary_sensor.treppenhaus_fensterkontakt_treppenhaus_fensterkontak_status
      - binary_sensor.wohnzimmer_fensterkontakt_status
    to: "on"
    id: OneOfMyWindowOpened
  - platform: event
    event_type: timer.finished
    event_data:
      entity_id: timer.window_opened_timer
    id: MyTimerFinished
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - OneOfMyWindowOpened
        sequence:
          - service: timer.start
            data:
              duration: "1800"
            target:
              entity_id: timer.window_opened_timer
      - conditions:
          - condition: trigger
            id:
              - MyTimerFinished
          - condition: template
            value_template: >
              {{ (is_state('binary_sensor.badezimmer_fensterkontakt_status',
              'on') or
                 is_state('binary_sensor.esszimmer_fensterkontakt_status', 'on') or
                 is_state('binary_sensor.kinderzimmer_fensterkontakt_kinderzimmer_fenster_status', 'on') or
                 is_state('binary_sensor.kuche_fensterkontakt_status', 'on') or
                 is_state('binary_sensor.schlafzimmer_fensterkontakt_status', 'on') or
                 is_state('binary_sensor.treppenhaus_fensterkontakt_treppenhaus_fensterkontak_status', 'on') or
                 is_state('binary_sensor.wohnzimmer_fensterkontakt_status', 'on')) }}
        sequence:
          - service: notify.notify
            data:
              title: Offene Fenster
              message: |
                {% set sensors = [
                    'binary_sensor.badezimmer_fensterkontakt_status',
                    'binary_sensor.esszimmer_fensterkontakt_status',
                    'binary_sensor.kinderzimmer_fensterkontakt_kinderzimmer_fenster_status',
                    'binary_sensor.kuche_fensterkontakt_status',
                    'binary_sensor.schlafzimmer_fensterkontakt_status',
                    'binary_sensor.treppenhaus_fensterkontakt_treppenhaus_fensterkontak_status',
                    'binary_sensor.wohnzimmer_fensterkontakt_status',
                ] %}
                 {% for sensor in sensors %}
                  {% if is_state(sensor, 'on') %}
                    {% set sensor_name = sensor.split('.')[1].split('_')[0].capitalize() %}
                    {{ sensor_name }}
                  {% endif %}
                {% endfor %}
          - service: timer.start
            data:
              duration: "1800"
            target:
              entity_id: timer.window_opened_timer
mode: single

Ein unschöner Markel bleibt aber noch: in den Push-Nachrichten unter iOS habe ich zwischen den offenen Fenstern sehr viele Leerzeilen. Kann man die irgendwie noch rausfiltern?

Kopiere alles die Entwicklerwerkzeuge/Template und dann teste vor welchen %} Du ein Minus setzen solltest. Ich setzte in solchen Formatfällen immer bei jedem. Sicher ist sicher.

%}
-%}

Hallo,

vielen Dank für eure Hilfe!
Nach einigen Versuchen stand ich vor dem Dilemma, entweder nach 2h keine Nachricht mehr, dafür sind Leerzeilen zwischen den Fensternamen oder die Namen sind in Listenform, dafür endet es nach 2h nicht. Mit letzterem kann ich leben, werd die Zeit aber wohl auf 60 Min. hochsetzen.

alias: offene Fenster-extrahiert
description: Offene Fenster
trigger:
  - platform: state
    entity_id:
      - binary_sensor.badezimmer_fensterkontakt_status
      - binary_sensor.esszimmer_fensterkontakt_status
      - binary_sensor.kinderzimmer_fensterkontakt_kinderzimmer_fenster_status
      - binary_sensor.kuche_fensterkontakt_status
      - binary_sensor.schlafzimmer_fensterkontakt_status
      - >-
        binary_sensor.treppenhaus_fensterkontakt_treppenhaus_fensterkontak_status
      - binary_sensor.wohnzimmer_fensterkontakt_status
    to: "on"
    id: OneOfMyWindowOpened
  - platform: event
    event_type: timer.finished
    event_data:
      entity_id: timer.window_opened_timer
    id: MyTimerFinished
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - OneOfMyWindowOpened
        sequence:
          - data:
              duration: "1800"
            target:
              entity_id: timer.window_opened_timer
            action: timer.start
      - conditions:
          - condition: trigger
            id:
              - MyTimerFinished
          - condition: template
            value_template: >
              {{ (is_state('binary_sensor.badezimmer_fensterkontakt_status',
              'on') or
                 is_state('binary_sensor.esszimmer_fensterkontakt_status', 'on') or
                 is_state('binary_sensor.kinderzimmer_fensterkontakt_kinderzimmer_fenster_status', 'on') or
                 is_state('binary_sensor.kuche_fensterkontakt_status', 'on') or
                 is_state('binary_sensor.schlafzimmer_fensterkontakt_status', 'on') or
                 is_state('binary_sensor.treppenhaus_fensterkontakt_treppenhaus_fensterkontak_status', 'on') or
                 is_state('binary_sensor.wohnzimmer_fensterkontakt_status', 'on')) }}
        sequence:
          - data:
              title: Offene Fenster
              message: |
                {% set sensors = [
                      'binary_sensor.badezimmer_fensterkontakt_status',
                    'binary_sensor.esszimmer_fensterkontakt_status',
                    'binary_sensor.kinderzimmer_fensterkontakt_kinderzimmer_fenster_status',
                    'binary_sensor.kuche_fensterkontakt_status',
                    'binary_sensor.schlafzimmer_fensterkontakt_status',
                    'binary_sensor.treppenhaus_fensterkontakt_treppenhaus_fensterkontak_status',
                    'binary_sensor.wohnzimmer_fensterkontakt_status',
                ] -%}
                 {% for sensor in sensors -%}
                  {% if is_state(sensor, 'on') -%}
                    {% set sensor_name = sensor.split('.')[1].split('_')[0].capitalize() -%}
                    {{ sensor_name }}
                  {% endif -%}
                {% endfor %}
            action: notify.notify
          - data:
              duration: "1800"
            target:
              entity_id: timer.window_opened_timer
            action: timer.start
mode: single