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.
- Es muss ein ein Script erstellt werden
- 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 ![]()
VG Micha
PS: @olli es gab leider kein Schlagwort „Voice“ oder „Voice Assistant“