Sonos TTS : Sprachausgabe in homee nutzen (NodeRed, Polly, Webhooks)

Servus zusammen,

heute gibt es mal wieder ein kleines Projekt für die NodeRed Interessierten unter euch.
Die Sonos Integration in homee wird ja von vielen seit längerem gewünscht.

Zwei Dinge sind dabei von Interesse. Einmal die Einbindung der Sonos Lautsprecher als Geräte, um die Wiedergabe von Musik zu steuern. Zum anderem die Sprachausgabe von beliebigen Texten als Ansage- oder Informationsmedium.

In diesem Tutorial geht es genau um diesen zweiten Punkt: die Nutzung der Sprachausgabe über Sonos Lautsprecher in homee.

Voraussetzungen:
a) Sonos Lautsprecher
b) Raspberrypi mit NodeRed
c) Node: node-red-contrib-sonospollytts
d) ein Amazon AWS-Konto für Zugriff auf Amazon Polly Sprachausgabe
d) Homegramme mit den Texten aus homee

Eindrücke:

Vorgehen:
a) Bei Amazon AWS ein Konto anlegen , wer das nicht nicht hat. Die Services sin im 1. Jahr kostenlos, danach bewegen sich die Kosten pro Leistung (im Fall für die TTS) im Cent-Bereich.
b) Danach in der Management Console Anlage eines IAM-Benutzer nur für den Polly Dienst. Man bekommt damit einen Benutzernamen, einen Accesskey und einen Secretkey. Diese Daten braucht man dann in NodeRed.
c) In NodeRed Einrichten des sonospollytts node mit Eingabe der Amazon Daten sowie der IP des Sonos-Lautsprechers. Zusätzlich kann man 4 verschiedene deutsche Stimmen auswählen.
d) In homee Anlage von Webhooks mit verschiedenen Text-Nachrichten.

Beispielflow:

[{"id":"9174ad5f.70b808","type":"sonospollytts","z":"2cc975df.7f8f7a","name":"","voice":"48","ssml":false,"dir":"/tmp","sonosipaddress":"192.168.1.113","sonosvolume":"70","sonoshailing":"0","noderedipaddress":"192.168.1.144","noderedport":"1880","config":"81d413f5.ee44e8","x":710,"y":4380,"wires":[[]]},{"id":"b69afde7.4c49a","type":"inject","z":"2cc975df.7f8f7a","name":"","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":350,"y":4440,"wires":[["5712b39d.5abc8c"]]},{"id":"5712b39d.5abc8c","type":"function","z":"2cc975df.7f8f7a","name":"Sample function 1","func":"// The simplest way\nmsg.payload=\"Benvenuti,Wilkommen,Wellcome!\";\nreturn msg;\n","outputs":1,"noerr":0,"x":510,"y":4440,"wires":[["9174ad5f.70b808"]]},{"id":"7834e660.481d18","type":"inject","z":"2cc975df.7f8f7a","name":"","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":350,"y":4480,"wires":[["ba7914e8.37fd28"]]},{"id":"ba7914e8.37fd28","type":"function","z":"2cc975df.7f8f7a","name":"Sample function 2","func":"// Set the Volume\nmsg.volume=\"60\"; // If not set, will take the volume from setting page\nmsg.payload=\"Benvenuti,Wilkommen,Wellcome!\";\nreturn msg;\n\n","outputs":1,"noerr":0,"x":510,"y":4480,"wires":[["9174ad5f.70b808"]]},{"id":"9b1f0f5f.9576f8","type":"inject","z":"2cc975df.7f8f7a","name":"","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":350,"y":4520,"wires":[["4af84cb2.270eac"]]},{"id":"4af84cb2.270eac","type":"function","z":"2cc975df.7f8f7a","name":"Sample function 3","func":"// Create an array of messages\nvar aMessages=[];\n// Add random messages\naMessages.push({volume:\"50\",payload:\"Benvenuti.\"});\n// Wheater in Italy\naMessages.push({volume:\"40\",payload:\"http://media.ilmeteo.it/audio/2018-03-31.mp3\"});\n// Add random messages\naMessages.push({volume:\"30\",payload:\"Cambia la tua voce nei settaggi.\"});\nreturn [aMessages];\n","outputs":1,"noerr":0,"x":510,"y":4520,"wires":[["9174ad5f.70b808"]]},{"id":"cba2165.c9f6168","type":"inject","z":"2cc975df.7f8f7a","name":"Guten Morgen!","topic":"","payload":"Guten Morgen!","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":380,"y":4400,"wires":[["9174ad5f.70b808"]]},{"id":"18aad97d.030f37","type":"comment","z":"2cc975df.7f8f7a","name":"PUSH THE BUTTONS!","info":"","x":380,"y":4360,"wires":[]},{"id":"1ae219a4.028f26","type":"change","z":"2cc975df.7f8f7a","name":"msg-change","rules":[{"t":"move","p":"payload.On","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":4320,"wires":[["9174ad5f.70b808","fecad966.407f9"]]},{"id":"c12d5a2c.2f96","type":"http in","z":"2cc975df.7f8f7a","name":"Webhook von homee","url":"/tts","method":"post","upload":false,"swaggerDoc":"","x":380,"y":4320,"wires":[["1ae219a4.028f26"]]},{"id":"fecad966.407f9","type":"debug","z":"2cc975df.7f8f7a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":710,"y":4260,"wires":[]},{"id":"81d413f5.ee44e8","type":"sonospollytts-config","z":"","name":"PollyAWS"}]

Fragen, Anregungen, Hinweise:
Sind gerne willkommen! :wink:

Viel Spaß beim Selbermachen!

VG
Michael

8 Like

Auch dieses Projekt ist wieder super erklärt und sehr interessant :+1:t2:
Eine Frage stellt sich mir dennoch: kann man einzelne Sonos gezielt absprechen?
Du schickst den Webhook ja an die tts Schnittstelle. Oder habe ich etwas falsch verstanden?

1 Like

Ja, jeder Sonos kann per IP separat angesprochen werden… D.h. für jeden Sonos Speaker konfiguriert man einen sonospollytts node und verknüpft dann entsprechend die Webhooks, die dort landen sollen in NodeRed…

Schön ist auch die Möglichkeit die Lautstärke zu konfigurieren und festlegen, ob ein Ankündigungssound vorher erklingen soll.

Die Aussprache ist übrigens super. :+1:t2:

1 Like

umgesetzt :slight_smile: super. Das hatte ich mir schon seit 2 Jahren gewünscht. Nun muss meine Frau ganz viel ertragen :slight_smile:

1 Like

Hi
wenn ich die Sample funktion teste geht es, wenn ich den Webhook über ein Homeegramm teste
kommt im Log folgende Meldung:

“Playsonos RED.httpAdmin file not found: undefined”

Hat jmd eine Idee, was das bedeutet?

Hey :wave:

Habe heute was anderes umgesetzt und das hat nicht viel mit homee zu tun aber mit der Sprachausgabe auf Sonos.

Da ich mich gerade viel mit Telegram beschäftige habe ich auch die Sprachausgabe auf Sonos damit gemacht.
Ich spreche einfach eine Nachricht im Telegram Chat und diese wird dann an den pi gesendet und von dort dann auf der Sonosbox als Audio ausgegeben.

Bei Interesse stelle ich das gerne mal zusammen.
VG
Micha

1 Like

Interesse wenn es auch mit Bose geht :see_no_evil:

Ich habe ne Anlage von Teufel. Da geht das leider gar nicht.

Danke, seit heute auch Sonos im Haus, und direkt umgesetzt.

:beers:

cheers,
spoocs

1 Like

Heho,

So, leider erst jetzt richtig mal einem richtigen Test unterzogen.
Aufgrund des Verhaltens des „Play“-Buttons stehen aber der Praxistauglichkeit stehen noch ein paar Kleinigkeiten im Weg.

1.) wenn Radio-Stream läuft und der SonosPollyTTS schickt was, dann wird das ge-queued, also hintenangestellt und nicht abgespielt. Wenn man später das Radio ausmacht, dann wird in dem Moment der Polly Schnipsel dann (verspätet) abgespielt.

2.) Bei uns wird im Moment nahezu nur Radio gehört, und das per Touch Button oben eben gestartet und gestoppt. Der Play-Touch-Button spielt ja aber nur die letzte Quelle noch mal ab. Man will also das Radio anmachen und hört dann aber z.B. „Der Trockner ist fertig“, Was ja wenig hilft :wink:

Gibts dafür einen Workaround, oder wie handhabt ihr das? Klar, mit Griff zum Handy ist das Radio wieder gestartet, aber a) falls sich dieser Griff vemeiden liesse würd ichs gern tun, und b) ist das abspielen der jeweils letzten homee Meldung ja doch etwas irritierend.

cheers,
spoocs

Hallo spoocs,

eine technische Lösung kann ich dir leider nicht anbieten.

Aber von der Logik her müsste der flow doch einfach das laufende Programm am entsprechenden Lautsprecher stoppen, erst dann die Nachricht abspielen und dann wieder das alte Programm starten.
Grundsätzlich ist das ja sicher möglich. du musst nur einfach einen Schritt vor dem Abspielen einbauen und dann nachher auch wieder einen.

Frag mich aber bitte nicht, wie das funktioniert :wink:
Ich bin noch absoluter nod red Anfänger…
Die Sonos Integration ist aber bei mir das nächste was ich angehen möchte, daher klinke ich mich einfach mal ein.

Bist du evtl. so nett und schickst mir mal deinen flow zu? Dann hätte ich schon mal einen Anfang.

Vielen Dank und ein schönes Wochenende vorab!

Tobias

Hi,

Ein erster Anfang ist eigentlich ja genau oben beschrieben, Inklusive einem Beispielflow…? :wink:

cheers,
spoocs

Alles klar.
Ich sehe es mir Morgen mal genauer an.
Danke.

Hast du denn eine Lösung für dein „Abspiel-Problem“ gefunden?