NEWS
Ersatz für sayit-Adapter zur Sprachausgabe auf Sonos
-
Nachdem ich die letzten Monate das Thema Sprachausgabe hab schleifen lassen, weil bei mir - wie bei vielen anderen auch - der sayIt-Adapter nicht mehr zum Laufen zu bewegen war, habe ich mich nochmal etwas mit dem Thema beschäftigt.
Dabei habe ich einen sehr interessanten, leistungsfähigeren und sehr komfortablen Weg gefunden:
Da ich im ioBroker bereits node-red als Adapter-Integration am Laufen hatte, habe ich mich einfach dort ein wenig umgesehen und prompt einen Weg gefunden, der super klappt - ohne die nervigen hickups und auch viel flexibler als mit sayit.
Was wird benötigt:
- ein Google oder Polly-Account (das setze ich aber mal als gegeben voraus - das braucht man ja auch bei sayit-Adapter);
- installierter node-red Adapter;
- in node-red über den Palettenmanager das Modul node-red-contrib-tts-ultimate
Das war's eigentlich schon.
Im Paletten-Manager diese Paket installieren:
Danach sieht man links folgende neuen nodes:
ttsultimate in den Flow ziehen und mit Doppelklick konfigurieren.
Hier kann man neben der Sprachdienstauswahl auch einfach MP3-Files (Damit haben ja hier auch eine Menge Leute Probleme mit dem Sayit-Adapter) uploaden.Über den Bleistift oben kommt man in das Menü zur Sprachdienst-Konfig:
Dort dann z.B. die Credentials von Polly eintragen und wieder schließen:
Dann habe ich mir noch im User-Bereich von ioBroker so viele Text-Datenpunkte angelegt, wie ich Sonos-Geräte habe und diese in die TTS-Nodes in gleicher Anzahl reinlaufen lassen.
Jetzt habe ich für jeden Sonos-Lautsprecher einen Text-Datenpunkt. Das sieht dann so aus:
Wenn ich diesen beschreibe, dann kommt eine Sprachnachricht auf dem jeweiligen Sonos-Lautsprecher, ohne mehrere Sayit-Adapter installieren zu müssen und vor allem:
Es läuft, ohne Murren und Knurren.Die Grundindee habe ich von hier: https://technikkram.net/blog/2020/09/26/sonos-sprachausgabe-mit-raspberry-pi-node-red-und-amazon-polly-fuer-homematic-oder-knx-systeme/
Viel Spaß damit.
-
@kptkip Ich bin per Zufall auf Deinen Beitrag gestossen. Hab mir das nachgebaut und bin ebenfalls überrascht wie einfach und zuverlässig das funktioniert. Will gar nicht darüber nachdenken wieviel Zeit ich schon in die Funktion des sayit gesteckt habe leider erfolglos. Damit hast Du einen sehr praktikablen Weg aufgezeigt. Vielen Dank dass Du diesen offen gelegt hast. Somit hab ich nun auch mein erstes Node-red Projekt. Mal schauen ob noch ein paar dazu kommen
-
@drapo Na willkommen - wieder einer, der das Potential von NodeRed erkannt hat.
-
Danke für den Hinweis.
Läuft seit einer Woche und und funktioniert wirklich ohne Probleme. -
Was mache ich denn, wenn er den Lautsprecher nicht findet? Ich habe den Symfonisk von IKEA, im Prinzip Sonos. Er sucht schon eine ganze Zeit und findet scheinbar nichts...
-
Das hier muss ich jetzt auch mal testen.
Hab im Moment auch Stress mit SayIt.Hab nur zuletzt vor Gefühl Jahren einmal mit Node Red gearbeitet....
Wo legt er die mp3 denn ab?
Finde es nicht wirklich raus......Teste grad die Grundlagen.
Nachher soll es folgendes können:
- DP mit Text überwachen
- mp3 erstellen
- mp3 im Netzwerk bereitstellen
- einen Befehl per curl aufrufen in dem der Pfad zur mp3 vorkommt und ein Wert auf einem DP
Bekommt man den Flow so hin @mickym ?
Aktuell in Node Red:
Zu ersetzendes Blockly (an die mp3 kommt man so dran):
-
Hi,
Bin über diesen Thread gestolpert da auch Sayit bei mir nicht mehr funktioniert.
Könntet ihr mir dennoch den Gefallen tun entweder ein entsprechendes Issue auf GitHub zu öffnen oder z.b. hier
https://github.com/ioBroker/ioBroker.sayit/issues/320
Oder hier https://github.com/ioBroker/ioBroker.sayit/issues/269
Oder hier https://github.com/ioBroker/ioBroker.sayit/issues/278
Zu kommentieren.
-
@wendy2702
Hast du mal probiert über die Control Objekte der vis ein mp3 abzuspielen welches zuvor lokal gespeichert wurde? Dann hättest du eine Alternative bis der Sayit Adapter wieder geht. -
@shadowhunter23 da müsstest du mir gerade mal auf die Sprünge helfen wie genau du das meinst.
-
@wendy2702
Ich habe es gerade probiert aber es kam kein Sound. Grundsätzlich sollte es so aber funktionieren: -
Beklommt.man das so umgesetzt?
- DP mit Text überwachen
- mp3 erstellen
- mp3 im Netzwerk bereitstellen
- einen Befehl per curl aufrufen in dem der Pfad zur mp3 vorkommt und ein Wert auf einem DP
(Ich weiß, hab ich weiter oben schonmal gefragt mit einem Beispielbild.
Aber eigentlich Antwortest du immer fast sofort, da gehe ich mal ganz dreist von aus, dass du es übersehen hast ) -
@david-g Nun - ich hab mir mal die Node runtergeladen, ich habe allerdings kein Sonos.
So und den Rest habe ich ausprobiert. Das was in Deinem Blockly machst ist kein Problem im Prinzip.
bei dem mp3 im Netzwerk bereitstellen, weiss ich nicht - der Pfad ist in der Regel nur auf auf das lokale Datensystem beschränkt. Den Curl Befehl mit dem Pfad zur mp3 ist kein Problem - aber der ist halt relativ fix.
Das Einzige, wenn man keine Lautsprecher dran hat, ist wohl dass man mit dieser Warnmeldung leben muss.
Aber ansonsten ist das kein Problem.
Du triggerst einfach mit Deinem Datenpunkt den Text den Du ausgeben willst, dann bekommst Du den Pfad zu dem mp3 und kannst dann noch die Lautstärke abholen und den Befehlstext erstellen.
-
Auch wenn ich bei Blockly den Leuten immer sage "Testet erstmal selber.... ", könntest du mir den Aufbau mal zeigen (ggf eine Export ^^)?
Ich schaffe es einfach nicht......
Bereitgestellt bekomme ich die mp3s bestimmt über den proxy Adapter.
-
@david-g Nochmal - die Node erzeugt Dir mp3 da musst Du nichts machen. Ich dachte die mp3s sollen aus dem Text erzeugt werden? -
Bei dem Service habe ich halt mal das ohne Authentifizierung genommen und ein iobroker homeverzeichnis als cache root genommen.
Dort legt Dir die Node dann die mp3 files ab - die Struktur ist vorgegeben.
Bei der Node selbst gibst dann noch die Stimme an - für Deutsch ist nur eine Stimme vorhanden:
Mit Inject Nodes kannst Du testen - so wie ich das unten gemacht habe. Ansonsten gibst Du dann einfach die iobroker-In Node ein mit dem Datenpunkt der dann gesprochen werden soll.
-
Ich müsste den Dateinamen der mp3 bekommen. Das schaffe ich nicht.
Und dann für den curl dem curl Befehl zusammenbauen.
curl -d \ "<play_info><app_key>xxxxxxx</app_key><url>http://192.168.99.33:8083/xxxx.0/Dateiname.mp3</url><service>service text</service><reason>reason text</reason><message>message text</message><volume>Wert_aus_DP</volume></play_info>" http://192.168.99.24:8090/speaker
Quasi so, nur dass da vermutlich noch einiges zwischen muss....
-
@david-g sagte in Ersatz für sayit-Adapter zur Sprachausgabe auf Sonos:
curl -d \ "<play_info><app_key>xxxxxxx</app_key><url>http://192.168.99.33:8083/xxxx.0/Dateiname.mp3</url><service>service text</service><reason>reason text</reason><message>message text</message><volume>Wert_aus_DP</volume></play_info>" http://192.168.99.24:8090/speaker
Der Pfad zu dem Dateinamen ist lokal und wird in einem Array ausgegeben.
Sobald die Node fertig ist, gibt sie Dir doch den Pfad zur mp3
-
@david-g sagte in Ersatz für sayit-Adapter zur Sprachausgabe auf Sonos:
Ja das ist alles kein Problem, aber ich sehe das als Problem: http://192.168.99.33:8083/xxxx.0/Dateiname.mp3
Kannst Du den da auch einfach einen lokalen Pfad mitgeben? Also einen lokalen Pfad wie ich Dir unten gezeigt habe?
-
Ja, das müsste mit dem Proxy Adapter gehen.
Teste das jetzt/gleich mal.EDIT
Ist eingerichtet.
Komme jetzt über http://192.168.99.33:8083/proxy.0/nodetts/ auf alle generierten mp3s.Dann muss man den Pfad entfernen und nur den Dateinamen nehmen.
-
@david-g sagte in Ersatz für sayit-Adapter zur Sprachausgabe auf Sonos:
Ja, das müsste mit dem Proxy Adapter gehen.
Teste das jetzt/gleich mal.So ich habe dann mal den Flow fertiggemacht - ggf. musst Du halt die Pfade noch anpassen - musst halt sagen, wenn Du da noch Hilfe brauchst.
Momentan sieht Dein Befehl halt so aus mit dem lokalen Pfad:
curl -d \ "<play_info><app_key>xxxxxxx</app_key><url>/home/iobroker/tts/sonospollyttsstorage/ttsfiles/f47f65d4ae122e0003d1f51977b47d71.mp3</url><service>service text</service><reason>reason text</reason><message>message text</message><volume>50</volume></play_info>" http://192.168.99.24:8090/speaker
-
@david-g sagte in Ersatz für sayit-Adapter zur Sprachausgabe auf Sonos:
Dann muss man den Pfad entfernen und nur den Dateinamen nehmen.
Ah Ok - dann passe ich das noch kurz an