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

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: