NEWS
UNSOLVED [gelöst] BUG: sayit funktioniert bei win nicht zuverlässig.
-
@apollon77 sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
Ääähm ja genau ... Das Copy file" macht er nur um das Ergebnisfile in den Cache zu kopieren das man nicht jedes mal beim gleichen Text das File neu generieren muss.
Kann man das ändern; und zwar so, dass das mp3 immer erzeugt wird.
Habe festgestellt, dass das mp3 auch nicht erzeugt wird, wenn der gleiche Text etwas zurück liegt; und nicht wie gedacht nur das letzte mal.
-
@bahnuhr Ok, dann nochmal: Was willst Du mit exakt diesem File tun? Warum sollte es da sein? Ich glaube wirklich das es um ein fundamentales Missverständnis geht wie der Adapter funktionieren soll.
Der Adapter ist quasi zweigeteilt:
1.) Text to Speech File ... also ein MP3 (nicht unbediengt das sondern ggf auch ein gecachtes auswählen
2.) Ausgabe der Datei. Hier landet es in einem Binary State und wird ggf im browser, per mpd oder Sonos oder whatever ausgegeben.An sich musst Du nicht an das File ran - und wenn ist denke der saubere Weg es sich aus dem State zu holen.
-
@apollon77 sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
Was willst Du mit exakt diesem File tun?
Hatte ich oben schon geschrieben.
Ich möchte eine mp3 kopieren um Sie dann Yamaha musiccast zur Verfügung zu stellen.
Also: Ansage eines Textes über Yamaha Lautsprecher.Dies funktioniert auch soweit. Nur brauche ich halt zuverlässig die mp3.
@apollon77 sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
denke der saubere Weg es sich aus dem State zu holen.
Ok, das wäre doch ein Weg. (Du meinst doch dieses Objekt, oder ?: sayit.2.tts.mp3)
Kannst du mir sagen, wie man dies macht. Wenn ich auf den State klicke wird die Datei ja wiedergegeben.
Als konkrete Frage:
Wie speichere ich den Statte als mp3?mfg
Dieter -
@bahnuhr sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
Also: Ansage eines Textes über Yamaha Lautsprecher.
Geht das nicht direkt via XML Command?
Welchen Yamaha Lautsprecher hast du? -
@sigi234 sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
@bahnuhr sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
Also: Ansage eines Textes über Yamaha Lautsprecher.
Geht das nicht direkt via XML Command?
Welchen Yamaha Lautsprecher hast du?Text vielleicht.
Sound nein.Lautsprecher: 10, 20, 30
-
@bahnuhr sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
Wie speichere ich den Statte als mp3?
evtl. musst du noch den timeout anpassen, je nach Länge deines Textes
const fs = require('fs'); const url = 'http://ip:8082/state/sayit.0.tts.mp3'; const outfile = './Test.mp3'; setState('sayit.0.tts.text','Hallo, dies ist ein ziemlich unnützer Text'); setTimeout(function(){ request(url, {encoding:'binary'}, function(error, response, body) { fs.writeFile(outfile, body, 'binary', function (err) { if(err) log('Fehler!'); }); }); }, 2000);
-
@fastfoot sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
@bahnuhr sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
Wie speichere ich den Statte als mp3?
evtl. musst du noch den timeout anpassen, je nach Länge deines Textes
const fs = require('fs'); const url = 'http://ip:8082/state/sayit.0.tts.mp3'; const outfile = './Test.mp3'; setState('sayit.0.tts.text','Hallo, dies ist ein ziemlich unnützer Text'); setTimeout(function(){ request(url, {encoding:'binary'}, function(error, response, body) { fs.writeFile(outfile, body, 'binary', function (err) { if(err) log('Fehler!'); }); }); }, 2000);
Super,cool.
Das probier ich heute abend gleich aus.
Danke. -
@fastfoot sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
evtl. musst du noch den timeout anpassen, je nach Länge deines Textes
hier noch eine Version für die Blockly Fraktion
-
ein getBinaryState ist denke einfacher als der http Request (ok macht am Ende das gleiche)
-
@apollon77 sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
getBinaryState
Gib uns mal ein Beispiel.
-
@bahnuhr sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
Das probier ich heute abend gleich aus.
funktioniert es denn jetzt wie gewünscht?
-
@fastfoot sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
@bahnuhr sagte in BUG: sayit funktioniert unter win nicht zuverlässig.:
Das probier ich heute abend gleich aus.
funktioniert es denn jetzt wie gewünscht?
Also folgendes Fazit nach meinen Tests:
a) Datei sayit.2.say.mp3
Die Datei wird ja jetzt gespeichert unter: C:\iobroker\iobroker-data\sayit
Dies funktioniert aber nicht zuverlässig. Manchmal wird sie nicht gespeichert.b) cache Datei
Hier wird ja auch die mp3 gespeichert; als Zufallszahl.mp3
Deshalb hab ich probiert immer die neueste Datei zu lesen (siehe anderer Thread).
Die neueste Datei hab ich auch ermittelt bekommen; jedoch ist es durch den Adapter nicht gesagt, dass zuverlässig die aktuell gewollte neueste Version gespeichert ist. Also auch nicht zuverlässig.c) state: sayit.2.tts.mp3
Unter diesem objekt ist ein Link gespeichert. Und dieser enthält zuverlässig !!! die aktuelle mp3.
Durch o.g. Script von @fastfoot konnte ich zuverlässig die mp3 kopieren und damit weiter arbeiten.Gesamt:
a und b ist nicht zuverlässig.
c hat zuverlässig geklappt.Noch ein Problem hatte ich:
Ich benutze den Windows Media Player zum streamen ins Netz. Die Datei wurde dann per Script gelöscht. Diese Löschung hat auch nicht zuverlässig gelöscht. WMP hat die Datei offensichtlich für x Sek./Min. geblockt.
Also Alternative gesucht und gefunden:
Programm: universal media server
Das Programm ist kostenlos und funktioniert bisher einwandfrei. die Datei wird auch sofort frei gelassen und man kann sie per script sofort löschen.Insgesamt Danke an alle die hier mit gelesen und zur Lösung beigetragen haben. Bin da jetzt schon mehrere Monate/Jahre dran.
Aber wie immer: wenn man weiß wie es geht, ist es einfach.Nochmals Danke.
(Thread kennzeichne ich mal als gelöst und issue bei sayit nehm ich auch raus.mfg
Dieter -
@bahnuhr sagte in [gelöst] BUG: sayit funktioniert bei win nicht zuverlässig.:
Durch o.g. Script von @fastfoot konnte ich zuverlässig die mp3 kopieren und damit weiter arbeiten.
Schön dass es endlich funktioniert, hier dann noch die Version mit getBinaryState(), die hat den Vorteil, dass man keine URL braucht sondern direkt mit dem DP arbeiten kann, ausserdem muss bei den beiden anderen Versionen jeweils der WEB-Adapter laufen, das ist hier nicht nötig.
const fs = require('fs'); const idMP3 = 'sayit.0.tts.mp3'; const outfile = '/opt/iobroker/Test.mp3'; setState('sayit.0.tts.text','Hallo, dies ist ein ziemlich unnützer Text'); setTimeout(function(){ getBinaryState(idMP3, function (err, data) { fs.writeFile(outfile, data, function (err) { if(err) log('Fehler!'); }); }); }, 2000);
-
@bahnuhr hey, ich kann am Ende mur wiederholen was ich oben schon zu a gesagt habe: diese Datei ist niemals für eine direkte Benutzung gedacht gewesen. Auch die Cache files nicht.
Von daher ist Lösung c die sinnvollste und richtige.
-
Ja, nochmals Danke an euch beide.
Ohne den Input hätte ich dies nicht geschafft. -
Bitte testet mal 1.11.0 ob noch alles tut wie bisher
-
@apollon77 sagte in [gelöst] BUG: sayit funktioniert bei win nicht zuverlässig.:
Bitte testet mal 1.11.0 ob noch alles tut wie bisher
aus meiner Sicht ok unter linux(Docker, buanet, qnap)
- Browser: funktioniert
- System: mpg321 habe ich nicht installiert, aber das im LOG genannte file in /opt/iobroker/cache/ lässt sich abspielen
- Sonos: ok
- die gezeigten Methoden mit request() und getBinaryState() funktionieren
- im Ordner iobroker-data/sayit taucht kein file auf(hatte ich erwartet wg. Änderungshistorie)
-
1.11.0 läuft auch bei mir.
installiert über gitMethode request mit dem state funktioniert ebenfalls.
mfg