Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

Begonnen von Otto123, 31 Mai 2020, 18:30:55

Vorheriges Thema - Nächstes Thema

TomLee

ZitatDa passt doch jetzt SonosSpeakWeb und FileDir nicht zusammen?

Ja, ok. Aber muss in der HTTPSRV-Definition <infix> <directory> das Verzeichnis cache heissen und genau dort liegen ?
Kann ich nicht irgendeinen anderen Ordner angeben ?

Ich habs schon so versucht gehabt:
defmod SonosSpeakWeb HTTPSRV www/sounds www/sounds SonosSpeakWebund
attr SonosTTS TTS_CacheFileDir www/sounds

Otto123

#1366
ZitatNotice: All links are relative to http://hostname:8083/fhem.
Ich meine laut dem Beispiel in der commandref es ist so:
defmod SonosSpeakWeb HTTPSRV cache cache SonosSpeakWeb
der Pfad liegt in /opt/fhem/cache
der Zugriff ist http://hostname:8083/fhem/cache

defmod SonosSpeakWeb HTTPSRV cache www/sounds SonosSpeakWeb
der Pfad liegt in /opt/fhem/www/sounds
der Zugriff ist http://hostname:8083/fhem/cache

defmod SonosSpeakWeb HTTPSRV willi /home/lustig/sounds SonosSpeakWeb
der Pfad liegt in /home/lustig/sounds
der Zugriff ist http://hostname:8083/fhem/willi

BTW: der erste Aufruf mit set ... notify 40 datei.mp3 funktioniert bei mir auch nur als kurzes Bruchstück. Danach wird immer sauber gespielt.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

#1367
Zitatdefmod SonosSpeakWeb HTTPSRV cache www/sounds SonosSpeakWeb
der Pfad liegt in /opt/fhem/www/sounds

so weit komm ich mit und klappt auch mit:
defmod SonosTTS Text2Speech none
attr SonosTTS TTS_CacheFileDir www/sounds
attr SonosTTS TTS_FileMapping Vibrating:Vibrating.mp3 Temple:Temple.mp3
attr SonosTTS TTS_Language Deutsch
attr SonosTTS TTS_Speed 10
attr SonosTTS TTS_UseMP3Wrap 1
attr SonosTTS group s2m
attr SonosTTS room Media
attr SonosTTS userReadings httpName:lastFilename.* {'http://'.ReadingsVal($name,'host','set host:port first').'/fhem/'.ReadingsVal($name,'lastFilename','')}

setstate SonosTTS 2023-11-20 02:27:40 host 192.168.188.30:8084
setstate SonosTTS 2023-11-20 20:29:33 httpName http://192.168.188.30:8084/fhem/www/sounds/42eb2a6d84f64027c88d1ed59ef1d50f.mp3
setstate SonosTTS 2023-11-20 20:29:33 lastFilename www/sounds/42eb2a6d84f64027c88d1ed59ef1d50f.mp3
setstate SonosTTS 2023-11-20 20:29:33 playing 0

Das verstehe ich (noch) nicht:
Zitatder Zugriff ist http://hostname:8083/fhem/cache

Der Zugriff erfolgt doch über die URL in httpName, oder lieg ich da falsch?
Ich verstehe <infix> immer noch nicht, die "gespeicherten Sprachausgaben" landen ja jetzt auch in www/sounds, die hätte ich irgendwie gerne in cache gehabt.
ZitatBTW: der erste Aufruf mit set ... notify 40 datei.mp3 funktioniert bei mir auch nur als kurzes Bruchstück. Danach wird immer sauber gespielt.
Gut zu hören dass das bei Dir auch so ist.

Otto123

naja es sind doch zwei Dinge:
Der eine (TTS) schreibt eine Datei in ein Verzeichnis der andere (HTTPSRV) stellt die über eine URL zur Verfügung. Die URL muss funktionieren und der HTTPSRV muss richtig konfiguriert werden

Im TTS Device ist der Name der Sprachdatei bekannt, deswegen baut TTS hilfsweise den String für die URL zusammen.

Wenn jetzt lastFilename (welcher den Pfad enthält) nicht zum Webserver passt funktioniert das so einfach nicht. Dann musst Du das userReadings httpName anders bauen. Bei cache cache funktioniert es, bei willi willi auch, bei willi lustig liefert das TTS Device die falsche URL!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Danke für das ausführliche erläutern, glaube das hat mich weiter gebracht (in der Theorie), muss mich aber noch mit beschäftigen und genau nachvollziehen.

TomLee

#1370
ZitatDas dies überhaupt funktioniert? Da passt doch jetzt SonosSpeakWeb und FileDir nicht zusammen?

Braucht man denn wirklich SonosSpeakWeb ?
Wir nutzen doch die Text2speech-Definition im Server-Modus! Wenn du Lust und Zeit hast, lösch mal bitte SonosSpeakWeb. Die Dateien abspielen und die Sprachausgaben sind dann trotzdem möglich. Man braucht gar keine zusätzliche http-Server-Definition, alle Dateien die sich in TTS_CacheFileDir befinden werden doch "bereitgestellt" oder übersehe ich was ?

TomLee

Ich denke das passt schon so.

Wenn ich jetzt in TTS_CacheFileDir www/s2m angebe und meinen setter von
playSound:textField {my $tts="SonosTTS";my ($cmd,$vol,$file)=split(' ', $EVENT,3);$file=($file=~m/.*\.mp3$/)?"$file":"$file.mp3";fhem("set $NAME notify $vol http://[$tts:host]/fhem/[a:$tts:TTS_CacheFileDir]/$file")}auf
ZitatplaySound:textField {my $tts="SonosTTS";my ($cmd,$vol,$file)=split(' ', $EVENT,3);$file=($file=~m/.*\.mp3$/)?"$file":"$file.mp3";fhem("set $NAME notify $vol http://[$tts:host]/fhem/[a:$tts:TTS_CacheFileDir]/".'sounds/'.$file)}
ändere, dann hab ich wie ich mir das in etwa vorstellte einen extra Ordner für die gespeicherten Sprachausgaben und einen für die Sounds.

Otto123

Zitat von: TomLee am 21 November 2023, 12:22:16Wir nutzen doch die Text2speech-Definition im Server-Modus!
Hier zur Erklärung: Server-Modus bedeutet doch nur, dass TTS selbst kein play Kommando absetzt sondern einfach nur die Datei erzeugt.

Ich vermute Du verwendest bei deinem Test jetzt anstatt dem SonosSpeakWeb einfach den FHEMWEB Server, weil die Verzeichnisstruktur zufällig passt.

Das mit der Änderung des userReadings wäre auch mein Vorschlag für Dich gewesen. 
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Zitat... weil die Verzeichnisstruktur zufällig passt.

Da ist was dran, auch wenn ich das Attribut TTS_CacheFileDir (default dann cache) lösche oder irgendeinen anderen Pfad angebe, sind die Dateien in www/s2m weiterhin im Browser aufrufbar.
Nicht nur die in www/s2m, sondern immer alle Dateien die sich in einem Unterordner von www befinden, die in www direkt nicht.