,

Homematic – SONOS steuern – Teil 03 – Sprachausgabe

Dieser Artikel ist der Dritte meiner SONOS Serie und diesmal geht es darum über die SONOS Boxen Sprachausgaben bzw. eigene MP3 Sounddateien abzuspielen. Im ersten Artikel „Homematic – SONOS steuern – Teil 01“ habe ich beschrieben wie ihr die Hardware aufsetzen könnt. Im zweiten Artikel „Homematic – SONOS steuern – Teil 02“ ging es dann darum, über WebUI Programme bzw. Skripte die Möglichkeiten der SONOS API zu nutzen.

Was ist alles möglich

  • Jeden SONOS Lautsprecher einzeln, als Gruppe oder alle gemeinsam steuern
  • Gruppen bilden und auflösen
  • Durchsagen abspielen
  • MP3-Sounds abspielen
  • Durchsagen auf bestimmten oder allen Lautsprechern abspielen
  • MP3 Dateien auf bestimmten oder allen Lautsprechern abspielen

Konfiguration durchführen

Wenn ihr die Konfiguration bereits im Zuge des ersten Artikels durchgeführt habt, könnt ihr die folgenden Schritte überspringen. Ansonsten ist die nachfolgenden Konfiguration Schritt für Schritt durchzuführen.


Möchtet ihr einen beliebigen Text an eine oder alle SONOS Lautsprecher übergeben, müsst ihr einen sogenannten TTS (Text-to-Speech) Service in Anspruch nehmen. Dieser wandelt einen Test in eine Sprachausgabe um.

Für unser SONOS Projekt nutzen wir den kostenlosen TTS-Service Voice RSS.

Um diesen nutzen zu können, müsst ihr den obigen Link verwenden und auf der Startseite seht ihr gleich die verschieden Profile, welche ihr nutzen könnt.

Preisbeispiele auf der Startseite

Ganz links seht ihr die kostenlose Option, mit der ihr täglich bis zu 350 mal den Service nutzen könnt. Ich denke das sollte reichen.

Um den Service nutzen zu können, müsst ihr auf den Button „GET STARTED“ klicken. Dann geht ein Fenster auf in dem ihr euch registrieren müsst. (Existierende Mail-Adresse notwendig).

Registrierungs Bildschirm (Voice RSS)

Nachdem ihr alle notwendigen Felder ausgefüllt habt und auf den Button „Register“ geklickt habt, bekommt ihr eure Registrierungsdaten angezeigt. Das wichtigste für die Funktion ist die API Key.

Zum Abschluß müsst ihr dann nur noch den Button „Update“ klicken. Dann bekommt ihr eine Mail mit den Registrierungsinformationen an die angegebene Mail-Adresse.

Damit ist dann die kostenlose Registrierung bei Voice RSS abgeschlossen. Als nächsten Schritt müssen wir innerhalb der SONOS API diese Registrierung definieren. Dazu gehen wir am besten über WINSCP in das folgende Verzeichnis:

Dort dann eine Datei mit dem Namen „settings.json anlegen, dessen Inhalt wiefolgt aussehen sollte.

Erklärung:

  • announceVolume   =   Hier könnt ihr die Standardlautstärke der Ansagen einstellen.
  • voicerss   =   Hier die „xxx“ durch euren API key ersetzen.

Zum Abschluss die Datei über das entsprechende ICON speichern. Damit ist die Konfiguration des TTS abgeschlossen.

Voraussetzung CUx-Daemon

Da zur Steuerung der SONOS Komponenten viele Scripte durchgeführt werden, empfehle ich das AddOn CUx-Daemon (CUxD) zu verwenden. Es ist die deutlich bessere Methode um Systembefehle aufzurufen. Weil die Methode über „system.exec“ bei so etwas sehr schnell zu Problemen führt. Wie ihr das AddOn CUxD installiert und ein virtuelles Gerät einrichten könnt, habe ich im Artikel „AddOn CUx-Daemon (CUxD) – system.exec ersetzen“ beschrieben. Keine Sorge, das ist recht einfach.

Bitte beachten das es für RaspberryMatic eine spezielle Version dieses AddOns gibt. Da piVCCU auf der Original CCU2 Firmware basiert, nutzen diese beiden die CCU2 Version.


Voraussetzung Sonos System

Voraussetzung ist das ihr die Räume in eurer SONOS Installation entsprechend definiert habt. Dabei sollte ihr bitte auf Umlaute verzichten.  Ändert „Küche“ bitte in „Kueche“. Groß- und Kleinschreibung spielt dabei keine Rolle.

SONOS – Beispiel Raum Definitionen

Sprachausgaben über WebUI/Skript

Beispiel 1 – Sprachausgabe auf einer Sonos Box abspielen

Als Beispiel zeige ich euch hier ein Skript, mit dem wir in der Kueche eine Sprachdurchsage abspielen können.

Wenn euch der Ausdruck gefällt, hier wird er beschrieben.

Erklärung HTTP Befehl

  • 192.168.1.54   =   hier müsst ihr die IP Adresse eurer Sonos Raspberry eintragen
  • 5005   =   dies ist der Port auf dem die SONOS API auf die Befehle „wartet“
  • kueche   =   Raumname innerhalb des Sonos Systems
  • say   =   Aktion
  • „Hallo …..“   =   Text welcher als Durchsage ausgegeben werden soll
  • de-de   =   deutsch
  • 50   =   Lautstärke der Durchsage

Beispiel 2 – Sprachausgabe auf allen Boxen abspielen

Als Beispiel zeige ich euch hier ein Skript, mit dem wir auf allen Sonos Boxen eine Sprachdurchsage abspielen können.

Erklärung HTTP Befehl

Hier ist der entscheidende Unterschied, das aus dem Befehl „say“ ein „sayall“ zu machen ist, sowie der Raum weggelassen werden muss.

Damit habt ihr alle Voraussetzungen eigene Texte als Sprachausgabe auf einer bestimmten oder allen SONOS Boxen abzuspielen. Viel Spass beim ausprobieren.

Abspielen von eigenen MP3 Dateien

Eine weitere Möglichkeit Sprachausgaben oder Sounds auf einer bestimmten oder allen SONOS Bosen abzuspielen, sind eigene MP3 Dateien. Wer bereits einen HomeMatic MP3 Lautsprecher verwendet hat vielleicht schon die ein oder andere MP3 Datei.

Voraussetzung

Die abzuspielenden MP3 Dateien müssen sich auf der SONOS Raspberry in  dem folgenden Verzeichnis befinden:

/home/pi/node-sonos-http-api-master/static/clips

Standardmäßig befindet sich bereits eine sample MP3 Datei im Verzeichnis.

Ich habe zusätzlich ein paar eigene MP3-Sounds über WINSCP hochgeladen:

Zusätzliche eigene MP3 Dateien.

MP3 über WebUI/Skript

Beispiel 1 – MP3 auf einer Sonos Box abspielen

Als Beispiel zeige ich euch hier ein Skript, mit dem wir in der Kueche eine MP3 abspielen können.

Erklärung HTTP Befehl

  • 192.168.1.54   =   hier müsst ihr die IP Adresse eurer Sonos Raspberry eintragen
  • 5005   =   dies ist der Port auf dem die SONOS API auf die Befehle „wartet“
  • kueche   =   Raumname innerhalb des Sonos Systems
  • clip   =   Aktion
  • „Der_Trochner….“   =   Name der MP3 Datei welche ausgegeben werden soll
  • 30   =   Lautstärke der Durchsage

Beispiel 2 – Sprachausgabe auf allen Boxen abspielen

Als Beispiel zeige ich euch hier ein Skript, mit dem wir auf allen Sonos Boxen eine MP3 abspielen können.

Erklärung HTTP Befehl

Hier ist der entscheidende Unterschied, das aus dem Befehl „clip“ ein „clipall“ zu machen ist, sowie der Raum weggelassen werden muss.

Damit habt ihr alle Voraussetzungen eigene MP3 Dateien als Sprachausgabe auf einer bestimmten oder allen SONOS Boxen abzuspielen. Viel Spass beim ausprobieren.

Anmerkungen

Alle Beispiele funktionieren wie beschrieben. Es gibt jedoch eine kleine Einschränkung, welche ich euch nicht vorenthalten möchte.

Wenn ihr über „clipall“ eine MP3 Datei auf allen Boxen abspielt, kommt es zu einer Verzögerung. Dies liegt daran, dass innerhalb des SONOS Systemes erst alle Boxen zu einer Gruppe verbunden werden. Erst dann erfolgt das abspielen der MP3 Datei. Danach wird die Gruppe wieder aufgelöst. Das dauert je nach Anzahl der Boxen ein paar Sekunden.


Zu überlegen ist an dieser Stelle ob es nicht mehr Sinn macht, die einzelnen Boxen über ein Skript nacheinander anzusprechen und die MP3 abzuspielen. Meine Tests haben gezeigt, dass diese Methode schneller ist.

Fazit

Mit diesem Artikel ist dann meine SONOS Serie beendet.

Es handelt sich hierbei um einer tolle Möglichkeit euer SONOS System über HomeMatic zusteuern und somit Standardaktivitäten zu automatisieren. Auch die ansonsten in SONOS nicht vorhandene Möglichkeit der Sprachausgabe ist eine interessante Erweiterung.

Weil ich bereits einige Anfragen habe, ob man die SONOS API auch auf eine bereits existierende Raspberry installieren kann, führe ich gerade ein paar Tests durch.

Es ist dabei deutlich geworden, dass es mit RaspberryMatic zusammen nicht auf der selben Raspberry funktioniert. Aber ansonsten sind einige interessante „All-In-One“ Lösungen möglich, welche ich euch in einem weiteren Artikel vorstellen werde.

15 Kommentare
  1. Christoph
    Christoph sagte:

    Hallo,

    vielen Dank für die tolle Anleitung und die hilfreichen Kommentare. Folgendes Thema beschäftigt mich:
    wenn ich mit sayall bzw. clipall etwas abspiele, gehen manchmal die bestehenden Sonosgruppen verloren, d.h. die Musik, die vorher in einer Gruppe Küche + Wohnzimmer lief, läuft nach der Durchsage überall. Kann man entweder die aktuellen Gruppen vorher auslesen und in einer Variable zwischenspeicherm oder mit say bzw. clip nur 2 Räume (z.B. Keller + Bad) ansprechen bzw. eine Sonosgruppe vor der Durchsage bilden? Kann man überhaupt Sonosgruppen anstelle von Räumen ansprechen?
    vg Christoph

    Antworten
  2. Alex
    Alex sagte:

    Hallo Werner,

    respekt zu dieser Sonos-Reihe. Ist mit Abstand die beste Anleitung die ich jemals gesehen habe, so tief ins Detail wie das Ganze geht.
    Eine Frage habe ich allerdings noch: Kann man das ganze auch nur mit einer CCU3 in diesem Umfang realisieren? Ich denke es macht ja keinen Sinn, noch eine Raspberrymatic auf nen Raspi zu installieren wenn man schon die CCU3 besitzt oder?

    Über eine kleine Hilfe dazu würde ich mich freuen :-).

    Viele Grüße
    Alex

    Antworten
  3. Stephan
    Stephan sagte:

    Hallo Werner, konnte alles nachvollziehen und funktioniert auch alles sehr gut. Deine Beschreibung zollt Respekt! Auf der SONOS API Seite sind auch noch Details beschrieben. Doch ein hoffentlich kleines Problem habe ich.
    Wenn der Lautsprecher vorher auf „Mute“ steht, werden leider Sprachdurchsage auch unterdrückt. Ich habe nun vorher ein „unmute“ gesendet, dann die Sprachdurchsage und dann wieder ein „mute“. Leider muss ich jetzt zwischen der Sprachdurchsage und dem „mute“ eine Zeitverzögerung einbauen, was aber nicht so Praktisch ist.
    Gibt es hier eine elegantere Lösung ? Stell mir das so vor, wie beim Wiedereinblenden des vorherigen Senders. Als egal wie der Zustand des Speakers war, soll dieser wieder – nach Sprachdurchsage oder Clip-Ausgabe – so hergestellt werden wie er war ….Ist bestimmt ziemlich tricky doch ich hoffe auf Hilfe …. Schon mal Danke für Deine Mühe .. :-)

    Antworten
  4. Heiko
    Heiko sagte:

    Hallo,
    ich habe die Sprachausgabe wie hier beschrieben auf meiner Raspberrymatic übernommen und es funktioniert soweit auch prima. Heute wollte ich nun eine weitere Sprachausgabe einrichten und musste feststellen, das wenn ich den Inhalt des Textes ändere, die Sprachausgabe nicht mehr funktioniert. Setzte ich den String im Browser ab, bekomme ich auch ein {„status“:“success“}
    Hier der String (mit anonymisierter IP-Adresse):
    http://192.168.1.10:5005/buero/say/Hallo,%20Die%20Waschmaschine%20ist%20jetzt%20fertig/de-de/40/
    Ändere ich den Text wieder zurück auf den Originaltext, funktioniert die Ausgabe wieder. Woran kann das liegen?

    Antworten
  5. Mike
    Mike sagte:

    Hallo
    wie kann ich einen Temperatur Wert in ein „say“ integrieren, sprich:
    string url = „wget –no-check-certificate –quiet -O /dev/null \“http://[IP]:5005/[ROOMNAME]/say/Die%20Temperatur%20ist%20[WERT VOM TEMPERATUR GERÄT]’%20Grad/de-de/50\““;
    dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State (url);
    Vielleicht kann mir jemand helfen und ich denke das wäre auch für andere nützlich.
    Schöne Grüsse

    Antworten
  6. Wolfgang
    Wolfgang sagte:

    Hallo Werner !
    Da ich meine Türklingel mit den Sonos Boxen verbinden will, hab ich Deine Anleitung ( wirklich super!) Schritt für Schritt nachgebaut. Allerdings stoppt das bei der Anlage der Datei settings.json, da ich das Verzeichnis nicht finde. (Bei mir läuft eine Raspberrymatic 3.37.8.20180929) und der Verzeichnisbaum differiert völlig. Kann es sein, dass das Verzeichnis jetzt::
    /usr/local/etc/config/addons/www/sonos2/settings
    heisst? Da ich Neuling bin, möchte ich meine Installation nicht zerstören !
    Herzliche Grüße
    Wolfgang

    Antworten
  7. Juergen Tolksdorf
    Juergen Tolksdorf sagte:

    Na klasse!
    Vielen Dank Werner. Ich war nämlich schon dabei herauszufinden, wie ich mit AWK wohl das zurück bekommene JSON meines SONOS insofern destrukturieren kann, um alles in Variablen zu packen, sodass ich danach eine URL aufrufen kann, die meinen Sonos wieder in den vorigen Zustand versetzt. Naja, die JSON-AWK destrukturierung von /state steht mir ohnehin noch bevor, aber das ist wohl ein anderes Fess, welches ich mal öffnen muss …

    Antworten
  8. Thomas
    Thomas sagte:

    Ohne Zweifel, das gibt wirklich einen sehr guten Einblick wenn man sich mit dem Gedanken Sonos anzuschaffen trägt. Vielen Dank dafür.

    Meine Frage: Ist es auch möglich für eine Durchsage z.B. vorneweg einen Signalton (Gong etc.) abzuspielen? Meine Erfahrung hat gezeigt, dass dann „besser“ auf Durchsagen geachtet wird.

    Vielen Dank schon mal.

    Antworten
  9. Mike
    Mike sagte:

    Bisher funktionerte die Sprachausgabe perfekt! Neuerdings wird jedoch die laufende Musik nach einer Sprachausgabe nicht mehr fortgesetzt. Vielleicht hat das mit der Aktualisierung der Sonossoftware (April 2018) zu tun. Gibt es dafür eine Lösung?

    Antworten
  10. Christian Lippuner
    Christian Lippuner sagte:

    Lieber Werner

    Ich habe soeben Deine drei Artikel zum Thema SONOS mit Homematic gelesen und bin echt beeindruckt. Auch dass Du Dein Know How hier zur Verfügung stellst: Hut ab ….. und vielen Dank.

    Darf ich Dir eine Frage stellen?

    Mein Homematic-Grundsatz war bisher immer der, dass ich – wenn irgend möglich – keine Hardware von Drittherstellern verwenden wollte, da mir der Wartungsaufwand dafür einfach zu gross scheint. Hast Du Pläne, Dein Projekt auch Raspberry PI-unabhängig zu realisieren, z. B. mittels eines Add-ons auf der CCU2? Das wäre dann wirklich der ultimative „Hammer“.

    Beste Grüsse aus der Schweiz
    Christian

    Antworten
    • Werner
      Werner sagte:

      Hallo Christian,

      vielen Dank für deine sehr netten und anerkennenden Worte. Freut mich besonders auch mal aus der Schweiz eine Resonanz zu bekommen.

      Da ich zu deiner Frage etwas weiter ausholen muss, sende ich dir nachher eine Mail.

      Liebe Grüße
      Werner

      Antworten
      • Marcus
        Marcus sagte:

        Vielen Dank auch von mir.

        Karst du so nett und würdest diese angesprochene Mail auch an mich senden?
        würde mich freuen zu erfahren, was da so möglich ist.

        Gruß
        Marcus

        Antworten
  11. Michael
    Michael sagte:

    Hi, die Artikel zur steuerung des Sonos Systems sind super. Bisher nutze ich hierfür iobroker.
    Wie verhält es sich wenn eine aktuelle Wiedergabe (z.B. Spotify) für die Sprachausgabe unterbrochen wird?
    Muss ich dann vorher per Skript abfragen was gerade läuft, dann die Sprachausgabe aufrufen, und anschließend die vorige Wiedergabe wieder starten?
    Bei iobroker und dem SayIt Adapter funktioniert dies automatisch.

    Antworten
    • Werner
      Werner sagte:

      Hallo Michael,

      ich Danke dir für deine netten Worte zu den Artikeln.

      Es funktioniert auch mit der von mir beschriebenen Lösung automatisch. Egal was du gerade auf der jeweiligen Sonos Box hörst, wird das für die Dauer der Sprachausgabe unterbrochen und dann wieder fortgesetzt.

      Ich habe das mit Playlisten, Radio, Deezer und auch mit TV-Ton ausprobiert. Es hat einwandfrei funktioniert. Selbst im Wohnzimmer, wo ich eine Playbar mit zwei Play 1 zu einem System verknüpft habe. Auch dort wird der Fernsehton nach Ende der Durchsage automatisch fortgesetzt.

      Vielleicht auch noch interessant ist die Tatsache, das die Ursprungslautstärke beim Fortsetzen des Ursprungstons beibehalten wird, egal was du für eine Lautstärke für die Durchsage eingestellt hast. Beispiel: TV = Lautstärke 20, Sprachansage = Lautstärke 70, anschließend wird TV mit Lautstärke 20 fortgesetzt.

      Ich hoffe das beantwortet deine Frage ausreichend.

      Grüße
      Werner

      Antworten
      • Yves
        Yves sagte:

        Hallo Werner,

        Deine Aussage finde ich interessant und macht mich dennoch ein wenig stutzig.
        Ich lasse mittels Homematic via Sonos API Ansagen auf den Sonos Boxen ausgeben.
        Wie auch bei Mike – Post vom 22. April 2018 um 10:08, wird bei mir nun die aktuelle Aktion auf der Sonos abgebrochen. Hinzu kommt, dass auch die ursprünglich eingestellte Lautstärke der Sonos Boxen nicht mehr hergestellt wird – diese bleibt auf der Höhe der Lautstärke der Skripte.

        Hast Du ggf. einen Workaround?

        Danke und viele Grüße und „macht unbedingt weiter so!!!!!“,
        Yves

        Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert