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.
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).
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.
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.
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
Ich habe zusätzlich ein paar eigene MP3-Sounds über WINSCP hochgeladen:
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.
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
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
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 .. :-)
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?
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
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
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 …
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.
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?
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
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
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
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.
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
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