MP3 Ausgabe für mehrere geöffnete Fenster/Türen

Hallo Zusammen

Ich bräuchte Eure Hilfe, da ich ein kompletter Newbie bin :wink:

Ich habe eine Automation erstellt, welche eigentlich funktioniert, aber sehr unschön ist…Ich würde gerne beim verlassen der Wohnung eine Voice-Output auf einem Mediaplayer (Google oder Sonos) erhalten, wo mitgeteilt wird, welches Fenster, oder welche Türe noch offen ist.

Hier mein Code:

alias: Türen und Fenster - Bewegungsmelder Eingangdescription: “”triggers:
- type: motiondevice_id: removedentity_id: removeddomain: binary_sensortrigger: deviceconditions: actions:
- action: media_player.volume_setmetadata: {}data:volume_level: 1target:entity_id: media_player.hobbyraum
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}data:media:media_content_id: media-source://media_source/local/Bastelzimmertüre_offen.mp3media_content_type: audio/mpegmetadata:title: Bastelzimmertüre_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraumtarget:entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Bürotüre_offen.mp3media_content_type: audio/mpegmetadata:title: Bürotüre_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: >-media-source://media_source/local/Elternschlafzimmerfenster_offen.mp3media_content_type: audio/mpegmetadata:title: Elternschlafzimmerfenster_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Küchenfenster_offen.mp3media_content_type: audio/mpegmetadata:title: Küchenfenster_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Küchentüre_offen.mp3media_content_type: audio/mpegmetadata:title: Küchentüre_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Schiebetürewohnzimmer_offen.mp3media_content_type: audio/mpegmetadata:title: Schiebetürewohnzimmer_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Hobbyraumfenster_offen.mp3media_content_type: audio/mpegmetadata:title: Hobbyraumfenster_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Kellerfenster_offen.mp3media_content_type: audio/mpegmetadata:title: Kellerfenster_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Waschküchenfenster_offen.mp3media_content_type: audio/mpegmetadata:title: Waschküchenfenster_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Kinderzimmerfenster_offen.mp3media_content_type: audio/mpegmetadata:title: Kinderzimmerfenster_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Spielzimmerfenster_offen.mp3media_content_type: audio/mpegmetadata:title: Spielzimmerfenster_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraum
- delay:hours: 0minutes: 0seconds: 3milliseconds: 0enabled: true
- if:
  - type: is_opencondition: devicedevice_id: removedentity_id: removeddomain: binary_sensorthen:
  - action: media_player.play_mediametadata: {}target:entity_id: media_player.hobbyraumdata:media:media_content_id: media-source://media_source/local/Spielzimmerfenster_offen.mp3media_content_type: audio/mpegmetadata:title: Spielzimmerfenster_offen.mp3thumbnail: nullmedia_class: musicchildren_media_class: nullnavigateIds:- {}- media_content_type: appmedia_content_id: media-source://media_sourcebrowse_entity_id: media_player.hobbyraummode: single

So funktioniert es, aber leider, wenn nur das letzte Fenster in der Reihenfolge offen ist, dauert es zu lange, bis der Audio-Output erfolgt. Der Delay hab ich eingebaut, da sonst zu einer überlagerung der Audio-Dateien kommt.

Habt ihr mir da evtl. einen Tip, wie ich das besser lösen kann?

Vielen Dank

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)
s.a.: (Neues Update & Features - Hier in der Community 🫶)

Ich weiß nicht, was das für ein Code da oben ist … aber ich hatte auch mal damit rumgespielt.
Dafür dann eine Helfer-Gruppe mit allen Fenstersensoren angelegt und folgende Message über den Speaker ausgeben:

        {% set status = expand('binary_sensor.all_windows') |
        selectattr('state', 'eq', 'on') | map(attribute='name') | list | join(',
        ') %}  {% if status == '' %} {{ status|replace("", "Alle Fenster sind
        geschlossen!") }} {% else %}           
          Folgende Fenster sind noch offen: {{ status }}       
        {% endif %}

Vielen herzlichen Dank. Hat geklappt.

Jetzt muss ich nur noch sehen wegen der Lautstärke.
die muss ich noch lauter machen, bevor das TTS abgespielt wird und im Anschluss wieder leiser.
Das sollte aber nicht so schwierig sein (hoffe ich)

Das geht ja easy über

  - action: media_player.volume_set
    data:
      entity_id: media_player.xy 
      volume_level: 0.4

Hallo,
Für die offenen Fenster hatte ich dies:

action: tts.cloud_say
entity_id: media_player.arbeitszimmer
metadata: {}
data:
  message: >-
    Folgende Fenster und Türen sind noch offen: {% set fenster_liste =
    states.binary_sensor | selectattr('state','eq','on') |
    selectattr('attributes.device_class','defined') |
    selectattr('attributes.device_class','eq', 'window') |
    selectattr('name','ne', 'Fenster') | map(attribute='name') | list | join('
    und ')%} {{ fenster_liste }}
  language: de-DE
continue_on_error: true

Für den Fall, dass alle Fenster geschlossen sind verwende ich eine andere Ansage.

Da ich die Ansage(n) in Automatisierungen verwende, habe ich im YAML-Code continue_on_error: true hinzugefügt, damit in Fehlerfall die (restliche) Automatisierung nicht stoppt.

Ich verwende eigentlich die HACS Integration Chime TTS für solche Ansagen. Da wird die Ansage ggf. über die aktuelle (Musik-)Wiedergabe gelegt und man kann direkt die Ansagelautstärke angeben. Den Gong vor der Ansage kann man auch weglassen.
Da sieht es dann so aus:

action: chime_tts.say
metadata: {}
data:
  message: >-
    Folgende Fenster und Türen sind noch offen: {% set fenster_liste =
    states.binary_sensor | selectattr('state','eq','on') |
    selectattr('attributes.device_class','defined') |
    selectattr('attributes.device_class','eq', 'window') |
    selectattr('name','ne', 'Fenster') | map(attribute='name') | list | join('
    und ')%} {{ fenster_liste }}
  volume_level: 0.2
  tts_platform: cloud
  fade_audio: true
  announce: true
  chime_path: chord
  voice: KillianNeural
target:
  entity_id:
    - media_player.arbeitszimmer
continue_on_error: true