Skripte für Alexa Media Player zur einfachen Konfiguration in Automationen

Hallo,

ich möchte mit euch meine zwei Skript für Alexa Media Player teilen.
Mir war es immer lästig alles zu konfigurieren in den Automationen deshalb habe ich zwei Skripte geschrieben.
Eins für Sprachausgabe und eine für Soundausgabe.

Für Sprachausgabe:

sequence:
  - variables:
      volume_float: "{{ desired_volume | float / 100 }}"
      previous_volume: "{{ state_attr(alexa_entity, 'volume_level') }}"
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ change_volume }}"
        sequence:
          - data:
              entity_id: "{{ alexa_entity }}"
              volume_level: "{{ volume_float }}"
            action: media_player.volume_set
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ notification_type == 'announce' }}"
        sequence:
          - data:
              target:
                - "{{ alexa_entity }}"
              data:
                method: all
                type: announce
              title: Wichtige Nachricht
              message: "{{ tts_message }}"
            action: notify.alexa_media
    default:
      - data:
          target:
            - "{{ alexa_entity }}"
          data:
            type: tts
          message: "{{ tts_message }}"
        action: notify.alexa_media
  - delay:
      seconds: "{{ delay_time }}"
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ change_volume }}"
        sequence:
          - data:
              entity_id: "{{ alexa_entity }}"
              volume_level: "{{ previous_volume }}"
            action: media_player.volume_set
alias: Alexa Nachricht mit Lautstärkeänderung
description: >
  Gibt eine Alexa-Nachricht aus, optional mit Lautstärkeänderung und Rücksetzung
  nach Verzögerung.
fields:
  alexa_entity:
    name: Alexa Gerät
    description: Wähle das Alexa Gerät, das die Nachricht abspielen soll.
    required: true
    selector:
      entity:
        domain: media_player
    default: media_player.alexa_wohnzimmer
  change_volume:
    name: Lautstärke ändern
    description: Soll die Lautstärke angepasst werden?
    required: true
    default: true
    selector:
      boolean: {}
  desired_volume:
    name: Lautstärke (0-100%)
    description: >-
      Definierte Lautstärke für die Ansage in Prozent (0 = aus, 100 = maximale
      Lautstärke).
    required: true
    default: 50
    selector:
      number:
        min: 0
        max: 100
        step: 10
  tts_message:
    name: TTS Nachricht
    description: Die Nachricht, die Alexa ansagen soll.
    required: true
    default: Dies ist eine Testnachricht.
    selector:
      text: {}
  delay_time:
    name: Verzögerung (in Sekunden)
    description: " (Nicht notwendig da keine Lautstärkenänderungen während der Ansage) Wartezeit in Sekunden, bevor die ursprüngliche Lautstärke wiederhergestellt wird. (Nicht notwendig)"
    required: true
    default: 1
    selector:
      number:
        min: 1
        max: 60
        step: 1
  notification_type:
    name: Benachrichtigungstyp
    description: >
      Normale Nachricht oder eine wichtige Nachricht sein soll. (Wichtige hat
      ein Ton davor)
    required: true
    default: tts
    selector:
      select:
        options:
          - value: tts
            label: Normal (TTS)
          - value: announce
            label: Wichtig (Announce)
mode: single

Für Soundausgabe:

alias: Alexa Sound abspielen (SSML-Tag direkt)
description: >
  Spielt einen vollständigen SSML-Audio-Tag (z. B. <audio
  src="soundbank://..."/>) auf dem ausgewählten Alexa-Gerät ab.

  🎵 Soundbeispiele findest du hier: 🔗
  https://developer.amazon.com/en-US/docs/alexa/custom-skills/ask-soundlibrary.html
fields:
  alexa_entity:
    name: Alexa Gerät
    description: Wähle das Alexa Gerät, auf dem der Sound abgespielt werden soll.
    required: true
    selector:
      entity:
        domain: media_player
  ssml_tag:
    name: SSML-Audio-Tag
    description: >-
      Füge den kompletten <audio src="..."/>-Tag aus der Soundbank ein. Es gehen
      auch mehrere hintereinander.
    required: true
    selector:
      text:
        multiple: true
        multiline: false
    default:
      - >-
        <audio
        src="soundbank://soundlibrary/animals/amzn_sfx_dog_med_bark_2x_02"/>
  change_volume:
    name: Lautstärke ändern
    description: Lautstärke auf gewünschten Wert setzen
    required: true
    default: true
    selector:
      boolean: {}
  desired_volume:
    name: Lautstärke (0-100%)
    description: Definierte Lautstärke für die Soundwiedergabe in Prozent.
    required: true
    default: 50
    selector:
      number:
        min: 0
        max: 100
        step: 10
sequence:
  - variables:
      volume_float: "{{ desired_volume | float / 100 }}"
      previous_volume: "{{ state_attr(alexa_entity, 'volume_level') }}"
      alexa_device: "{{ alexa_entity.split('.')[-1] }}"
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ change_volume }}"
        sequence:
          - data:
              entity_id: "{{ alexa_entity }}"
              volume_level: "{{ volume_float }}"
            action: media_player.volume_set
  - data:
      message: "{{ ssml_tag }}"
      data:
        type: tts
    action: notify.alexa_media_{{ alexa_device }}
  - delay:
      seconds: 2
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ change_volume }}"
        sequence:
          - data:
              entity_id: "{{ alexa_entity }}"
              volume_level: "{{ previous_volume }}"
            action: media_player.volume_set
mode: single

Sounds von Alexa

Viel Spaß damit ich freu mich über Rückmeldung.

PS: Die Skripte sind mit ChatGPT geschrieben und immer wieder verbessert worden.

Gruß Marc

3 „Gefällt mir“

Als Newbie in HA-wie nutze ich diese dann? Ich kopiere mir immer aufs einer anderen Automation die YAML für die Sprachausgabe-wäre das hiermit obsolet indem ich als Aktion dann das Skript auswähle?

Du erstellst mit den yaml codes von mir zwei neue Skripte. Und diese kannst du dann in Automation verwenden und musst keinen yaml code mehr kopieren sondern hast eine Grafische Oberfläche zum eingeben und einstellen von Sprach und Sound ausgabe für die Alexa.

Gruß Marc

1 „Gefällt mir“

So, mal gespeichert-vielen Dank fürs Teilen.

Vielen Dank (auch an deine KI :wink:) für die tollen Skripte. Ich hatte bisher auch so ein Skript für die Ausgabe von Text im Einsatz, was aber sehr viel einfacher gestrickt war - welches ich jetzt durch deines ersetzt habe.

Bei der Gelegenheit habe ich mir mal erlaubt, dein Skript zur Soundausgabe um ein Feld zu erweitern, dass eine Auswahl Sounds zum Anklicken anbietet (auch mehrere gleichzeitig und in Kombination mit einem oder mehrerer Textfelder).
Damit kann man sich seine eigene Favoritenliste anlegen und muss nicht jedes Mal die Zwischenablage bemühen.

alias: Alexa Sound abspielen (SSML-Tag direkt)
description: >
  Spielt einen vollständigen SSML-Audio-Tag (z. B. <audio
  src="soundbank://..."/>) auf dem ausgewählten Alexa-Gerät ab.

  🎵 Soundbeispiele findest du hier: 🔗
  https://developer.amazon.com/en-US/docs/alexa/custom-skills/ask-soundlibrary.html
fields:
  alexa_entity:
    name: Alexa Gerät
    description: Wähle das Alexa Gerät, auf dem der Sound abgespielt werden soll.
    required: true
    selector:
      entity:
        domain: media_player

  ssml_preset:
    name: Vordefinierte Sounds
    description: Wähle einen oder mehrere Sounds aus der Liste.
    required: false
    selector:
      select:
        multiple: true
        options:
          - label: Hund bellt
            value: '<audio src="soundbank://soundlibrary/animals/amzn_sfx_dog_med_bark_2x_02"/>'
          - label: Türklingel
            value: '<audio src="soundbank://soundlibrary/household/amzn_sfx_doorbell_chime_01"/>'
          - label: Alarm
            value: '<audio src="soundbank://soundlibrary/alarms/beeps_and_bloops/bell_01"/>'
          - label: Kameraauslöser
            value: '<audio src="soundbank://soundlibrary/camera/camera_01"/>'
          - label: Lachen
            value: '<audio src="soundbank://soundlibrary/human/amzn_sfx_crowd_applause_01"/>'

  ssml_tag:
    name: SSML-Audio-Tag (benutzerdefiniert)
    description: >-
      Füge den kompletten <audio src="..."/>-Tag aus der Soundbank ein. Es gehen
      auch mehrere hintereinander. Diese werden zusätzlich zu den vorausgewählten Sounds abgespielt.
    required: false
    selector:
      text:
        multiple: true
        multiline: false

  change_volume:
    name: Lautstärke ändern
    description: Lautstärke auf gewünschten Wert setzen
    required: true
    default: true
    selector:
      boolean: {}

  desired_volume:
    name: Lautstärke (0-100%)
    description: Definierte Lautstärke für die Soundwiedergabe in Prozent.
    required: true
    default: 50
    selector:
      number:
        min: 0
        max: 100
        step: 10

sequence:
  - variables:
      volume_float: "{{ desired_volume | float / 100 }}"
      previous_volume: "{{ state_attr(alexa_entity, 'volume_level') }}"
      alexa_device: "{{ alexa_entity.split('.')[-1] }}"
      # kombiniere Presets und eigene Tags (beide können Listen sein)
      combined_ssml: >-
        {% set preset = ssml_preset if ssml_preset is defined else [] %}
        {% set custom = ssml_tag if ssml_tag is defined else [] %}
        <speak>
          {{ (preset + custom) | join(' ') }}
        </speak>

  - choose:
      - conditions:
          - condition: template
            value_template: "{{ change_volume }}"
        sequence:
          - service: media_player.volume_set
            data:
              entity_id: "{{ alexa_entity }}"
              volume_level: "{{ volume_float }}"

  - service: "notify.alexa_media_{{ alexa_device }}"
    data:
      message: "{{ combined_ssml }}"
      data:
        type: tts

  - delay:
      seconds: 2

  - choose:
      - conditions:
          - condition: template
            value_template: "{{ change_volume }}"
        sequence:
          - service: media_player.volume_set
            data:
              entity_id: "{{ alexa_entity }}"
              volume_level: "{{ previous_volume }}"

mode: single
1 „Gefällt mir“