Antworten von Voice Assistant PE auf einem SONOS Player abspielen

Hallo zusammen,

ich habe mittlerweile 4 Voice Assistant PE und wollte schon immer, dass bei bestimmten Sätzen die Antwort auf dem SONOS-Lautsprecher in dem entsprechenden Raum abgespielt wird und nicht auf dem kleinen Lautsprecher vom VAPE.

Ich bin mit der aktuellen Umsetzung jetzt sehr zu zufrieden.

  1. Es muss ein ein Script erstellt werden
  2. statt der Ausgabe mit „Say a TTS message with cloud“ wird jetzt nur der Script-Aufruf als Aktion mit dem Text inkl. Parameter hinzugefügt.
    ->Template-Text wie z.B. „Es ist {{ now().strftime(‚%H:%M‘) }} Uhr.“ sind auch möglich

Script:

alias: VA Spiele die Antwort in dem Raum
description: ""
mode: parallel
max: 10
fields:
  text:
    name: Text
    description: Auszugebender Sprachtext
    required: true
    selector:
      text: null
  volume:
    name: Lautstärke
    description: Lautstärke zwischen 0.0 und 1.0
    default: 0.5
    selector:
      number:
        min: 0
        max: 1
        step: 0.05
  snapshot:
    name: Snapshot verwenden
    default: true
    selector:
      boolean: null
  restore:
    name: Restore verwenden
    default: true
    selector:
      boolean: null
  max_delay:
    name: Maximale Wartezeit
    description: Maximale Wartezeit in Sekunden
    default: 20
    selector:
      number:
        min: 5
        max: 120
        step: 1
  ziel_player:
    name: Lautsprecher überschreiben
    description: Optionaler Sonos-Lautsprecher
    required: false
    selector:
      entity:
        filter:
          - domain: media_player
sequence:
  - variables:
      player: >
        {% if ziel_player is defined and ziel_player | trim != '' %}
         {{ ziel_player }}
        {% elif
        is_state('assist_satellite.voiceassistant_VAPE01','processing')
        %}
         media_player.01_sonos
        {% elif
        is_state('assist_satellite.voiceassistant_VAPE02','processing')
        %}
         media_player.02_sonos
        {% elif
        is_state('assist_satellite.voiceassistant_VAPE03','processing')
        %}
         media_player.03_sonos
        {% elif
        is_state('assist_satellite.voiceassistant_VAPE04','processing')
        %}
         media_player.04_sonos
        {% else %} none {% endif %}
      lautstaerke: |
        {{ volume | default(0.5, true) | float }}
      snapshot_aktiv: |
        {{ snapshot | default(true, true) }}
      restore_aktiv: |
        {{ restore | default(true, true) }}
  - condition: template
    value_template: "{{ player != 'none' }}"
  - if:
      - condition: template
        value_template: "{{ snapshot_aktiv }}"
    then:
      - action: sonos.snapshot
        target:
          entity_id: "{{ player }}"
        data:
          with_group: true
  - action: media_player.volume_set
    target:
      entity_id: "{{ player }}"
    data:
      volume_level: "{{ lautstaerke }}"
  - action: tts.cloud_say
    data:
      entity_id: "{{ player }}"
      message: "{{ text }}"
  - delay:
      seconds: >
        {{ [1 + (text | length / 13), max_delay | default(20) | int] | min |
        round(0, 'ceil') }}
  - if:
      - condition: template
        value_template: "{{ restore_aktiv }}"
    then:
      - action: sonos.restore
        target:
          entity_id: "{{ player }}"

unter

sequence:
  - variables:
      player: >
        {% if ziel_player is defined and ziel_player %}
         {{ ziel_player }}
        {% elif
        is_state('assist_satellite.voiceassistant_VAPE01','processing')
        %}
         media_player.01_sonos
        {% elif
        is_state('assist_satellite.voiceassistant_VAPE02','processing')
        %}
         media_player.02_sonos
        {% elif
        is_state('assist_satellite.voiceassistant_VAPE03','processing')
        %}
         media_player.03_sonos
        {% elif
        is_state('assist_satellite.voiceassistant_VAPE04','processing')
        %}
         media_player.04_sonos
        {% else %} none {% endif %}

müssen Deine VAPE’s z.B. assist_satellite.VAPE01 und der Lautsprecher z.B. media_player.01_sonos angegeben sein.

Ich habe vor dem Script-Aufruf immer noch eine Aktion „Konversationsantwort festlegen“ mit leerem Inhalt hinzugefügt und für meine definierten Sätze und gewünschten Antworten auf den SONOS-Lautsprechern ist das für mich aktuell die perfekte Lösung.

Ich denke, wenn Du zusätzlich die SONOS-Blöcke mit z.B. snapshot/restore aus dem Script rausnimmst, dann sollte es mit jedem Mediaplayer funktionieren.

Vielleicht ist diese Lösung auch für Dich hilfreich, wenn Du nicht z.B. für die Sprachumleitung an der VAPE-Firmware rumbasteln möchtest.

Ich freue mich sehr auf Deine Rückmeldung :grinning_face:

VG Micha

PS: @olli es gab leider kein Schlagwort „Voice“ oder „Voice Assistant“

Hey Micha,

mega, was du da gemacht hast! Vielen Dank fürs Teilen, ich werde es hier testen!

VG Olli

PS: Ich habe dein Konto ins nächste Level geschoben, damit solltest du Schlagwörter beliebig ergänzen können. :wink: