Smart Home

Skript für Sonos-Sprachansagen in Home Assistant

Foto eines Sonos One

Mein Smart-Home macht in der ein oder anderen Automatisierung Sprachansagen über einen meiner Sonos-Lautsprecher zu meiner Information. Ansagen sind für mich zu Hause das, was Push-Nachrichten auf die Apple Watch oder das iPhone unterwegs sind. Beispiele sind eine zu schlechte Luftqualität, ein erkannter Posteinwurf oder eine Erinnerung ans Blumengießen. Natürlich erfolgen alle diese Ansagen nicht im Nachtmodus. Außerdem habe ich noch einen Helfer definiert, mit dem ich Ansagen komplett deaktivieren kann, z.B. bei Videokonferenzen. Sein Wert ist Teil einer Bedingung vor der jeweiligen Ansage.

Grundsätzlich nutze ich für Sprachansagen den Home-Assistant-Dienst “cloud.tts_say“. Dieser Teil des Abos, welches man abschließen kann, um von unterwegs auf seine Smart-Home zugreifen zu können. Mehr Informationen dazu findet ihr hier.

Das Skript

Da Sprachausgaben in verschiedenen Automatisierungen vorkommen, habe ich sie in ein zentrales Skript ausgelagert. Eine zentrale Anforderung an das Skript ist, dass eine eventuell bereits vorhandene Audio-Ausgabe auf dem entsprechenden Lautsprecher (Radio-Stream, Musik, …) nach der Sprachansage fortgesetzt wird. Dazu nutze ich die Dienste sonos.snapshot und sonos.restore.

Das Skript nimmt als “Parameter” den gewünschten Text, den Lautsprecher, einen Pause-Wert sowie die Lautstärke entgegen. Der Pause-Wert sollte dabei mindestens so lang wie die jeweilige Sprachausgabe sein. Er stellt sicher, dass der Restore nicht die Ansage unterbricht.

Alles in allem sieht das Skript dann so aus:

alias: TTS Engine
sequence:
  - service: sonos.snapshot
    data:
      entity_id: "{{ speaker }}"
      with_group: true
  - service: media_player.unjoin
    data:
      entity_id: "{{ speaker }}"
  - service: media_player.volume_set
    data:
      entity_id: "{{ speaker }}"
      volume_level: "{{ volume }}"
  - service: tts.cloud_say
    data:
      entity_id: "{{ speaker }}"
      message: "{{ message }}"
  - delay:
      seconds: "{{ delay }}"
  - wait_template: "{{ is_state(speaker, 'paused') }}"
  - delay:
      seconds: 1
  - service: sonos.restore
    data:
      entity_id: "{{ speaker }}"
      with_group: true

Fügt es am besten im YAML-Modus ein, da es nicht komplett im grafischen Editor bearbeitet werden kann.

Ein Beispiel-Aufruf

Schauen wir uns noch schnell an, wie ein beispielhafter Aufruf aus einer Automatisierung heraus aussehen kann. Zur besseren Kopierbarkeit zeige ich euch gleich die YAML-Version:

service: script.tts_engine
data:
  speaker: media_player.kueche
  message: Posteinwurf erkannt!
  volume: 0.5
  delay: 10

Den Mediaplayer müsst ihr natürlich anpassen. Außerdem muss der Dienstname dem entsprechen, was wir als Skript-Name zuvor definiert haben.

Plus/Premium
Gefällt Dir dieser Artikel oder hast Du sogar Nutzen daraus gezogen? Du kannst mein Blog via Patreon unterstützen und erhältst dafür Zugriff auf aktuell 202 Plus-Artikel. Auch jeder Link in sozialen Medien oder anderen Blogs zu meinen Inhalten hilft mir, Danke!

Erfolgreicher und produktiver werden
Mein E-Book und mein Coaching-Angebot zu den Themen "Get Organized" und "OmniFocus".

Unterstützung bei Apple-Automatisierungen
Ich arbeite seit 2008 mit iPhones und Mac-Computern und habe inzwischen Hunderte von Automatisierungen erstellt. Gerne stelle ich mein Wissen zur Verfügung! Weitere Infos hier.

Über den Autor

Markus Jasinski

Markus Jasinski ist ein Rostocker Unternehmer, Naturwissenschaftler, IT-Spezialist, Autor, Coach, Dänemark-Fan, überzeugter Radfahrer und nicht zuletzt „Computer Geek“ und Smart-Home-Enthusiast. Sein erstes iPhone kaufte der promovierte Naturwissenschaftler im Jahre 2008, kurze Zeit später wurde er dann auch zum Mac-Nutzer. Nach und nach gesellten sich iPad, Apple TV und Apple Watch hinzu.

Um diese vielfältigen Interessen und Aktivitäten "unter einen Hut" zu bekommen befasst sich der gebürtige Westfale seit über zehn Jahren mit den Themen Selbstorganisation und Aufgabenmanagement, die ebenfalls ein Schwerpunkt dieses Blogs sind.

Kommentar schreiben

Kommentare müssen zwischen 50 und 3000 Zeichen lang sein. Deine E-Mail-Adresse wird nicht veröffentlicht. Es erfolgt keine automatische Benachrichtigung bei Antworten auf einen Kommentar. Keine Werbung/Werbelinks!


Alle Kommentare werden moderiert und nur freigeschaltet, wenn sie diesen Regeln entsprechen. Keine Werbung! Bitte nutzt E-Mail für allgemeine und sonstige Anfragen. Leider erlaubt meine Zeit es nicht, technische Hilfestellung oder Support zu leisten.

All comments are reviewed and manually unlocked. Comments that do not refer to the article, are not written in German or contain advertising will be deleted. Please use e-mail for general and other inquiries.