NEWS
[gelöst] Workaround: SayIt erzeugt keine Sayit.0.say.mp3
-
Hallo zusammen,
ich habe die aktuelle Zeit genutzt, mich endlich mal mit Heimautomatisierung zu beschäftigen. Allerdings muss ich mich sowohl in Linux wie in ioBroker komplett von 0 aus einarbeiten und verbringe wohl die meiste Zeit bei google.
Entstanden ist dabei die Funktion, dass auf der Fritzbox eingehende Anrufe per ioBroker auf dem Sonos ausgeben werden.
Mein Problem ist, dass mein SayIt keine sayit.0.say.mp3 -Datei (mehr) auf dem PC speichert und dadurch meine Sonos-Ausgabe nicht mehr klappt.
Als System habe ich auf einem Intel NUC Ubuntu 18.04 LTS installiert und darauf ioBroker.
Im ioBroker habe ich den Fritzbox-Adapter, SayIT und den Sonos Adapter installiert.
https://forum.iobroker.net/topic/22888/gelöst-sonos-http-api-installation-für-newbies-dummies-und-michNach der Anleitung habe ich ich die Sonos HTTP API installiert und zum laufen gebracht. Über IP:5005 kann ich entsprechend meine Sonos-Lautsprecher steuern.
Über das Forum (Vorlagen von ruhr70, nobob u.a.) hier habe ich mir ein Script zusammengebastelt, was prinzipiell auch so funktioniert wie es soll:
var telefonbuchRufnummer = { "0123456": {"name":"Vorname Nachname"}, "### ? ###": {"name":"Rufnummer unterdrückt"} }; // Variable wenn die Rufnummer nicht im Telefonbuch vorhanden ist var telefonbuchRufnummerNichtBekannt = "unbekannter Rufnummer"; // Variable für die aktuell anrufende Rufnummer (Fritzbox Adapter X (hier: Adapter 0)) var Anrufer = "fritzbox.0.calls.ringActualNumber"; // actual last ringing number function rufnummer2name (rufnummer) { var name = ""; // Variable name ablöschen if (!telefonbuchRufnummer[rufnummer]) { // Wenn Rufnummer nicht im Telefonbuch name = telefonbuchRufnummerNichtBekannt; // Oben festgelegter Text in Ausgabevariable schreiben } else { name = telefonbuchRufnummer[rufnummer].name; // Rufnummer im Telefonbuch vorhanden; in Ausgabevariable schreiben } return name; // Rückgabewert entweder Telefonbucheintrag oder nicht bekannt. } // FUNKTION : Sprachausgabe über SayIT Adapter on ({id: Anrufer, valGe: 1}, AusgabeAnrufer); function AusgabeAnrufer(){ //setState("sayit.0.tts.text", "Anruf von. " + getState(Anrufer).val); var vol ="sayit.0.tts.volume"; setState (vol,70); setState("sayit.0.tts.text", "Anruf von. " + rufnummer2name(getState(Anrufer).val)); /* Ubuntu Datei verlinken: ln /opt/iobroker/node_modules/iobroker.sayit/sayit.0.say.mp3 /home/user/node-sonos-http-api-master/static/clips/sayit.mp3 */ exec ("curl 'http://192.168.XX.YY:5005/Office/clip/sayit.mp3/30'"); }Das Ganze funktioniert auch soweit:

Ich habe bislang im SayIT die Ausgabe auf den Sonos-Adapter gelegt, auch wenn er nicht funktioniert und das laut dem Forum ja eher üblich ist.
Aber über diesen Weg erzeugte SayIT bislang die sayit.0.say.mp3, welche ich über einen Hardlink (siehe Kommentar) in den sonos http api-Ordner linke. Die exec -Zeile führt das dann aus. Klappt. Ob das elegant ist, keine Ahnung, zu mehr reicht mein Wissen nicht.
Seit 2 Tagen hat aber die SayIT Datei die Ausgabe-MP3 nicht mehr in den Ordner geschrieben. Wenn ich die Datei gelöscht habe, wurde diese nicht neu erstellt.
Wenn ich aber unter Objekte sayit.0/tts/mp3 mir den Wert anschaue:
http://192.168.XX.YY:8082/state/sayit.0.tts.mp3dann höre ich dort die richtige Datei, auch wenn diese jetzt als sayit.0.tts.mp3 bezeichnet wird.
Ich finde auf meinem Linux-PC jetzt weder die sayit.0.say.mp3 noch die sayit.0.tts.mp3
Ich habe zwischendurch auch schon den SayIT-Adapter komplett entfernt und neu installiert. Das halt leider auch nichts gebracht.
Wo ist mein Fehler, bzw. was müsste ich machen? Google bzw. die Forums-Suche hat mich bislang nicht weitergebracht.
Danke für eure Mühe :-)
-
Hallo zusammen,
ich habe die aktuelle Zeit genutzt, mich endlich mal mit Heimautomatisierung zu beschäftigen. Allerdings muss ich mich sowohl in Linux wie in ioBroker komplett von 0 aus einarbeiten und verbringe wohl die meiste Zeit bei google.
Entstanden ist dabei die Funktion, dass auf der Fritzbox eingehende Anrufe per ioBroker auf dem Sonos ausgeben werden.
Mein Problem ist, dass mein SayIt keine sayit.0.say.mp3 -Datei (mehr) auf dem PC speichert und dadurch meine Sonos-Ausgabe nicht mehr klappt.
Als System habe ich auf einem Intel NUC Ubuntu 18.04 LTS installiert und darauf ioBroker.
Im ioBroker habe ich den Fritzbox-Adapter, SayIT und den Sonos Adapter installiert.
https://forum.iobroker.net/topic/22888/gelöst-sonos-http-api-installation-für-newbies-dummies-und-michNach der Anleitung habe ich ich die Sonos HTTP API installiert und zum laufen gebracht. Über IP:5005 kann ich entsprechend meine Sonos-Lautsprecher steuern.
Über das Forum (Vorlagen von ruhr70, nobob u.a.) hier habe ich mir ein Script zusammengebastelt, was prinzipiell auch so funktioniert wie es soll:
var telefonbuchRufnummer = { "0123456": {"name":"Vorname Nachname"}, "### ? ###": {"name":"Rufnummer unterdrückt"} }; // Variable wenn die Rufnummer nicht im Telefonbuch vorhanden ist var telefonbuchRufnummerNichtBekannt = "unbekannter Rufnummer"; // Variable für die aktuell anrufende Rufnummer (Fritzbox Adapter X (hier: Adapter 0)) var Anrufer = "fritzbox.0.calls.ringActualNumber"; // actual last ringing number function rufnummer2name (rufnummer) { var name = ""; // Variable name ablöschen if (!telefonbuchRufnummer[rufnummer]) { // Wenn Rufnummer nicht im Telefonbuch name = telefonbuchRufnummerNichtBekannt; // Oben festgelegter Text in Ausgabevariable schreiben } else { name = telefonbuchRufnummer[rufnummer].name; // Rufnummer im Telefonbuch vorhanden; in Ausgabevariable schreiben } return name; // Rückgabewert entweder Telefonbucheintrag oder nicht bekannt. } // FUNKTION : Sprachausgabe über SayIT Adapter on ({id: Anrufer, valGe: 1}, AusgabeAnrufer); function AusgabeAnrufer(){ //setState("sayit.0.tts.text", "Anruf von. " + getState(Anrufer).val); var vol ="sayit.0.tts.volume"; setState (vol,70); setState("sayit.0.tts.text", "Anruf von. " + rufnummer2name(getState(Anrufer).val)); /* Ubuntu Datei verlinken: ln /opt/iobroker/node_modules/iobroker.sayit/sayit.0.say.mp3 /home/user/node-sonos-http-api-master/static/clips/sayit.mp3 */ exec ("curl 'http://192.168.XX.YY:5005/Office/clip/sayit.mp3/30'"); }Das Ganze funktioniert auch soweit:

Ich habe bislang im SayIT die Ausgabe auf den Sonos-Adapter gelegt, auch wenn er nicht funktioniert und das laut dem Forum ja eher üblich ist.
Aber über diesen Weg erzeugte SayIT bislang die sayit.0.say.mp3, welche ich über einen Hardlink (siehe Kommentar) in den sonos http api-Ordner linke. Die exec -Zeile führt das dann aus. Klappt. Ob das elegant ist, keine Ahnung, zu mehr reicht mein Wissen nicht.
Seit 2 Tagen hat aber die SayIT Datei die Ausgabe-MP3 nicht mehr in den Ordner geschrieben. Wenn ich die Datei gelöscht habe, wurde diese nicht neu erstellt.
Wenn ich aber unter Objekte sayit.0/tts/mp3 mir den Wert anschaue:
http://192.168.XX.YY:8082/state/sayit.0.tts.mp3dann höre ich dort die richtige Datei, auch wenn diese jetzt als sayit.0.tts.mp3 bezeichnet wird.
Ich finde auf meinem Linux-PC jetzt weder die sayit.0.say.mp3 noch die sayit.0.tts.mp3
Ich habe zwischendurch auch schon den SayIT-Adapter komplett entfernt und neu installiert. Das halt leider auch nichts gebracht.
Wo ist mein Fehler, bzw. was müsste ich machen? Google bzw. die Forums-Suche hat mich bislang nicht weitergebracht.
Danke für eure Mühe :-)
@Ryco habe am Handy nicht den ganzen Text gelesen.
Der Sonos Adapter kann kein TTS mehr.
Dazu gibt es eine Anleitung über die Sonos API -
Möglicherweise hast du ein ähnliches Problem wie ich. Wenn ich in der Instanz des SayIt Adapters als Sprache Google - Deutsch einstelle und der anzusagende Text zu lange ist, funktioniert es nicht. Kurze Texte dagegen funktionieren. Habe jetzt als Sprache Cloud - Deutsch - Hans eingestellt, dort scheint die Längenbegrenzung nicht zu geben.
-
@Homoran: Das weiß ich. Die Sound-Ausgabe über meinen Weg über die Sonos-API funktioniert ja auch. Habe jetzt testweise die Ausgabe auf System umgestellt. Bringt erstmal keine Änderung.
@UweRLP: Nein, die Sprache wird erzeugt.
IP:8082/state/sayit.0.tts.mp3 das ist die Datei, die ich brauche. Der Pfad ergibt sich aus dem Wert von Objekte sayit.0/tts/mp3. Nur. Wo ist die Datei? Die Datei passt jedes mal zur Anfruferansage. Dadurch dass ich diese ja später noch aus einem Browser aufrufen kann, muss die doch irgendwo gespeichert sein?
Oder gibt es einen Weg, wie ich diese Datei vom ioBroker-Webserver an den Sonos übergeben kann? Denn der Sonos spielt ja nur Dateien ab, die im /clips/ im Ordner node-sonos-http-api-master/static/ liegen.
-
@Homoran: Das weiß ich. Die Sound-Ausgabe über meinen Weg über die Sonos-API funktioniert ja auch. Habe jetzt testweise die Ausgabe auf System umgestellt. Bringt erstmal keine Änderung.
@UweRLP: Nein, die Sprache wird erzeugt.
IP:8082/state/sayit.0.tts.mp3 das ist die Datei, die ich brauche. Der Pfad ergibt sich aus dem Wert von Objekte sayit.0/tts/mp3. Nur. Wo ist die Datei? Die Datei passt jedes mal zur Anfruferansage. Dadurch dass ich diese ja später noch aus einem Browser aufrufen kann, muss die doch irgendwo gespeichert sein?
Oder gibt es einen Weg, wie ich diese Datei vom ioBroker-Webserver an den Sonos übergeben kann? Denn der Sonos spielt ja nur Dateien ab, die im /clips/ im Ordner node-sonos-http-api-master/static/ liegen.
-
@Ryco kann es sein, dass Du auf redis umgestellt hast? Wenn ja, dann liegt das sayit file in der Redis db und nicht mehr im File System.
-
Ich habe mir jetzt einen Workaround gebastelt und würde mein Problem als gelöst bezeichnen wollen. Auch wenn ich dadurch den Eindruck habe, dass ich unter Linux Probleme genauso mit der Holzhammermethode lösen kann, wie unter Windows ...
Gedanke: Die Datei liegt ja auf einem Webserver ... holdmybeer
Linux-Terminal:
wget -qO /opt/iobroker/cache/sayit.mp3 IP:8082/state/sayit.0.tts.mp3 sudo chown iobroker:iobroker /opt/iobroker/cache/sayit.mp3Dann angepasster Hardlink:
sudo ln /opt/iobroker/cache/sayit.0.say.mp3 /home/user/node-sonos-http-api-master/static/clips/sayit.mp3Und dann zum Schluss im eigentlichen ioBroker-Script folgende Veränderung:
function AusgabeAnrufer(){ //setState("sayit.0.tts.text", "Anruf von. " + getState(Anrufer).val); var vol ="sayit.0.tts.volume"; setState (vol,70); setState("sayit.0.tts.text", "Anruf von. " + rufnummer2name(getState(Anrufer).val)); /* Ubuntu Datei verlinken: ln /opt/iobroker/cache/sayit.0.say.mp3 /home/user/node-sonos-http-api-master/static/clips/sayit.mp3 */ // wget: Download der Datei über Terminal exec ("wget -qO /opt/iobroker/cache/sayit.mp3 IP:8082/state/sayit.0.tts.mp3") // exec ("curl 'http://192.168.66.111:5005/flur/clip/sayit.mp3/30'"); // Verzögerte Auführung der Wiedergabe für Kopierbefehl, Delay 300 ms setTimeout(function() { exec ("curl 'http://192.168.66.111:5005/Office/clip/sayit.mp3/30'"); }, 600); }Damit klappt alles wie gewünscht. Die
300 ms600 msVerzögerung reichen bei mir. 300 ms klappt nicht immer.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden