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

Hallo zusammen,

ich habe mal noch eine Frage zur Umsetzung.

Soweit funktionieren die Trockenübungen ohne homee super.
@spoocs auch dein Problem mit der queue kann ich nicht nachvollziehen. Ich habe allerdings den node-red-contrib-sonospollytts node durch den tts-ultimative node (wie in node red vorgeschlagen) geändert. Da scheint es ja kürzlich ein Update gegeben zu haben. Evtl. hilft dir das weiter?
Damit spielt er entsprechende Meldungen während einem laufenden Stream (in meinem Fall Radio) ab und läßt den stream anschließend weiterlaufen.

Ich habe allerdings noch ein Problem mit dem webhook. Evtl. kann mir da einer einen Tipp geben.
1
Welchen port gebe ich im webhook an? den von node red oder den vom tts-ultimate? Aktuell habe ich aber bei keinem eine entsprechende Ausgabe, daher muss der Fehler noch woanders sein. Laut Beispiel von @medicus07 ist es ja der port von node red.

2
In welchem Format gebe ich das in homee ein?
Ich habe es wie oben gezeigt versucht, aber das klappt noch nicht.

Bei mir sieht mein Test-flow aktuell so aus

Danke für ein paar Tipps!

Ok, das Thema mit dem webhook habe ich lösen können.
Zum einen war es ein Problem mit der homee web app, die das hg gar nicht abgespielt hat und zum anderen war es ein schlichter Schreibfehler im webhook…

Ich habe
"{ „0n“ : „Die Waschmaschine ist fertig“ } gesendet
und nicht
{ „On“ : „Die Waschmaschine ist fertig“ }
:see_no_evil:

Aber gut, Problem gelöst.

Kann ich den per webhook auch steuern, auf welchem Lautsprecher die Ansage ausgegeben wird?
Ich möchte bestimmte Meldungen nur auf bestimmten Lautsprechern ausgeben. Über den node wäre es ja immer die gleiche Einstellung für alle Ansagen.

Danke

@Shadow31 Hallo Shadow31, vor dem gleichen Problem stehe ich jetzt auch, der Webhook funktioniert nicht. Welche URL muss denn im Webhook angegeben werden ?

Und was muss eigentlich im „http in node“ in node red für eine URL angegeben werden ?

Hallo Christian,

Der webhook sieht bei mit wie folgt aus:


Du gibst also die IP von node red inklusive dem port von node red und /tts ein.
Methode ist Post
Content Type application/json
Und im Body z.b.
{ „On“ : „Der Trockner ist fertig“ }

http in node ist wie folgt:

image

Ich hatte wie oben erwähnt auch das Problem, das mein hg gar nicht abgespielt wurde. Ich hab immer nach dem Fehler in node red oder dem webhook an sich gesucht.
Ist mir erst aufgefallen, als ich im hg gesehen habe, das das zum letzten mal 2 stunden vorher abgespielt wurde. Hab das hg dann einfach gelöscht und nochmal erstellt und dann gings.
War bei mir aber die web app.

hoffe das hilft dir weiter.

vg

@Shadow31 Ich danke dir vielmals, es funktioniert :slight_smile:

Nur noch mal der Verständlichkeit für Anfänger halber:
das „/tts“ ist natürlich ein frei wählbarer Name bzw. URL-Bestandteil (sollte URL-syntaxkonfom sein). Er muss nur auf beiden Seiten gleich sein - im http-Node und im HG-webhook.

cheers,
spoocs

Hallo @spoocs,

kann man Meldungen auch nur auf bestimmten Sonos ausgeben?
Also abhängig der Meldung, sollen unterschiedliche sonos angesprochen werden.

Der Webhook sagt ja aktuell einfach nur „Spiele das ab“ und im flow sage ich, wo er was abspielen soll. Wäre ja super, wenn ich das über den Webhook definieren könnte.

Besten Dank und VG

Hi,

weiss nicht genau, ob ich die Anforderungen richtig verstanden habe, aber sollte doch gehen: definiere Dir in dem POST body einfach noch eine Variable, z.B. „target“, die eine oder mehrere Werte enthalten kann (Bezeichner, Nummern, IPs o.ä.) und bau Dir im Flow eine Weiche, die das auswertet und an den/die entsprechenden Ausgabe-Nodes weiterleitet.

Hab im Moment noch immer kaum Zeit für Bastelei… leider.

cheers,
spoocs

Alles klar. Danke für die Info.
Dann hast du meine ersten Gedanken aber schon mal bestätigt.

Mals sehen, wann ich mal die Zeit habe und ein bisschen basteln kann.
Bin in node red noch nicht ganz so bewandert und weiß daher noch nicht immer, was wie funktioniert, aber da hilft basteln ja auch, um ein besseres Verständnis zu bekommen :wink:

VG

Hallo zusammen,

wie ich Meldungen nur auf einer bestimmten Box ausgegeben kann, hab ich zumindest schon mal in NodeRed verstanden. Alles andere sollte dann ja über einen entsprechenden Webhook auch dann vom homee aus funktionieren.

Aber wie kann ich denn eine Meldung auf mehreren Boxen ausgeben?

Mein Testaufbau in NodeRed ist wie folgt:

wie zu sehen ist, gibt es im unteren function node noch ein Problem.
Der sieht wie folgt aus.
image

Mein erster Gedanke war, bei der mainplayer id einen Sonos reinpacken und die anderen dann unter setplayergrouparry reinschreiben. Das hat im ersten Schritt nicht funktioniert, daher hatte ich jetzt mal alle hintereinander bei mainplayerip gepackt. Ist aber ja wohl auch falsch.

In welcher Art uns Weise muss ich die IP´s hier aufführen, damit eine Meldung in mehreren oder allen Räumen wiedergegeben wird?

Danke vorab für eure Hilfe!
VG
Tobias

Was steht denn in einer Funktion „change config“ weiter oben drin?

Hallo Michael,

vielen Dank für deine Rückmeldung.
Habe es leider jetzt erst gesehen und bin für den Rest der Woche beruflich unterwegs.

Die change config, ist aber ja aktuell nur für den Test direkt in nr drin. Beim webhook ganz oben ist der ja gar nicht dabei.

Ich hab den Flow ja übernommen und nicht selbsterstellt, daher ist mir die Logik dahinter noch nicht wirklich klar.

Ich melde mich nochmal, wenn ich wieder zuhause bin, ok?

Vg
Tobias

1 „Gefällt mir“

Hallo Michael,

da bin ich wieder.

Hier mal die Funktion für die Ausgabe einer Nachricht im Büro

image

Funktioniert einwandfrei.
Hier hab ich dann halt nur die IP der Box im Büro drin.

Die Frage ist jetzt, wie ich eine Nachricht auch auf unterschiedlichen Boxen wiedergeben kann.

VG
Tobias

Hi,

ich habe jetzt bei mir erstmal von dem veralteten Node auf node-red-contrib-tts-ultimate geupdated.

Im tis-ultimate node kann man unten „additional player“ wählen. Habs getestet… kann dort mehrere Player eintragen und der inject kommt überall an.

1 „Gefällt mir“

Hallo Michael,

ok. Hab jetzt nochmal rumprobiert.

Wenn ich im tts ultimate alle Sonos „aktiviere“, kann ich mit einem entsprechenden function node auch nur bestimmte ansprechen.

Hier ein Beispiel

image

Einfach eine Box als Mainplayer und die anderen über PlayerGroupArray.

Besten dank für den Denkanstoß!

Wie kann ich denn eine Box per Schalter steuern?
Also sowas wie: Wenn ich Taste x drücke, dann startet eine bestimmte Playlist in einer bestimmten Lautstärke auf einer bestimmten Box?
Dann kommen natürlich noch so Sachen wie Lautstärke und Sender dazu.

Hier gibt es ja ein paar Beispiele im Forum, aber die sind auch schon älter und ggf. gibt es da ja mittlerweile auch neuere/bessere nodes?
Hast du sowas im Einsatz?
Dann müsste ich die Sonos doch wahrscheinlich erstmal über einen virtuellen homee in homee bringen, oder? Von da könnte ich ja dann bestimmte Taster mit enstprechenden Aktionen versehen

Schönes Wochenende

Hallo zusammen

Ich versuche diesen Flow im Node-Red nachzubauen. Das Node-Red habe ich mir dazu gerade im Dockers auf meiner Synology Disk installiert. Ich muss dazu sagen, dass ich absoluter Anfänger bin was Nod-Red und Coden angeht :wink: Ich glaube aber fast am Ziel zu sein.

Muss ich die Nachricht welche vom Webhook kommt noch irgendwie „umwandeln“ mit einer Funktion? Wenn ja wie muss die aussehen? Ich würde auch gerne das ganze zuerst ohne HG direkt im Node-Red testen. Wie muss ich dazu den Inject node konfigurieren? Hat hier ev. jemand ein Beispiel? :grin:

LG
Hosi


grafik

grafik

Hallo hosi,

fang doch erstmal mit einem manuellen Test an, bevor du schon zum webhook weitergehst.
Ich bin da ja auch nur Laie und hab mir das mit Hilfe von vielen hier zusammengebastelt, daher kann es gut sein, das ich dir jetzt nicht unbedingt den besten Weg zur Lösung aufzeige :wink:

Der Aufbau bei mir ist wie folgt:

image

Du brauchst also einen inject node und dann noch einen function node vor dem tts ultimate.

inject node sieht wie folgt aus
image
hier kannst du reinschreiben, was er ausgeben soll

im function node wird es etwas wilder
image
die xxx.xxx.x.xxx musst du doch die IP deines Lautsprechers ersetzen.

dann das Ganze deployen und er sollte deine Nachricht auf dem angegebenen Lautsprecher wiedergeben.

Wenn das funktioniert, gehts weiter.

Hier mal das Ganze zum importieren:

[{"id":"4fe0873f.456c68","type":"tab","label":"Test","disabled":false,"info":""},{"id":"8a52944f.d0c678","type":"ttsultimate","z":"4fe0873f.456c68","name":"","voice":"de-DE","ssml":true,"sonosipaddress":"192.168.1.238","sonosvolume":"15","sonoshailing":"Hailing_Hailing.mp3","config":"4f941d61.f52c4c","property":"payload","propertyType":{},"rules":[{"host":null},{"host":null}],"playertype":"sonos","speakingrate":"","speakingpitch":"","unmuteIfMuted":false,"x":830,"y":240,"wires":[[],[]]},{"id":"93abac31.f53a4","type":"function","z":"4fe0873f.456c68","name":"Change Config","func":"// Set the main player IP and each IP belonging to the player's group\nvar config= {\n    setMainPlayerIP:\"xxx.xxx.x.xxx\",\n    setPlayerGroupArray:[]\n};\nmsg.setConfig = config;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":600,"y":240,"wires":[["8a52944f.d0c678"]]},{"id":"67cfd6fd.05f4d8","type":"inject","z":"4fe0873f.456c68","name":"Testnachricht","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Was geht ab, homee?","payloadType":"str","x":330,"y":240,"wires":[["93abac31.f53a4"]]},{"id":"4f941d61.f52c4c","type":"ttsultimate-config","name":"GoogleTTS","noderedipaddress":"xxx.xxx.x.xxx","noderedport":"1980","purgediratrestart":"leave","ttsservice":"googletranslate","TTSRootFolderPath":""}]```

Auch hier muss du natürlich die xxx.xxx.x.xxx durch deine IP ersetzen.

Hey Shadow

Vielen Dank! Genau dieses Change Config hat mir gefehlt. Testnachricht und webhook funktionieren nun :grin: Habe das Webhook noch im HG wie folgt anpassen müssen:

Coole Sache :sunglasses: Nur das resumen der Sonos funktioniert nicht jedesmal und wenn ich z.B. etwas via Airplay höre, dann spielt sie nach der Mitteilung meine Spotify-Liste über den Spotify-Dienst auf meiner Sonos App ab. Vielleicht kriegt man das ja auch noch hin mit der richtigen Einstellung. Bin auf jeden Fall zufrieden :grin: Danke nochmals für die schnelle Hilfe!

LG
Hosi

Hallo Hosi,

das hört sich doch gut an!

Das mit dem resumen funktioniert bei mir einwandfrei, aber ich nutzte das auch nur in Verbindung mit Radio über die Sonos App.

Ich könnte mir vorstellen, das bei dir Airplay das „Problem“ ist, da das ja eine „externe“ Quelle ist.
Kann es sein, das er dir dann wieder die letzte über Spotify/Sonos gespielte Playlist startet?
Das wäre dann zumindest ein Anzeichen, das er mit Airplay anders umgeht, als mit über die App gestarteten Titeln und Playlisten.
Da bin ich aber leider keine Hilfe und da müssen dann die Profis ran. Das übersteigt meine Grundkenntnisse :wink: