Hauptmenü

Sonos Speak Docker

Begonnen von Kassard, 23 Februar 2020, 21:36:54

Vorheriges Thema - Nächstes Thema

Kassard

Hallo zusammen.
Ich bin grade dabei mein FHEM auf das Docker Image/ Container umzustellen.

Beim Sonos Speak bin ich auf ein für mich unlösbares Problem gestossen:

Wenn ein neues mp3 erzeugt wird, ist diese Datei von den Rechten her geschützt, sodass die Sonosbox diese Datei nicht lesen/ausführen kann.
Wenn ich jetzt meinen Freigabeordner im Container mit chmod -R 777 offen lege und damit natürlich auch alle Files die hier liegen, kann die Sonos-Box mein *.mp3 abspielen.

Wird jetzt aber mit "set Sonos_Wohnzimmer Speak 25 de Hallo" eine neue Datei angelegt, ist nur diese von den Rechten her nicht lesbar.

ls -l zeigt mir dieses an.

Hat zufällig jemand eine Idee für mich?



Otto123

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

Kassard


freakadings

Hi stehe gerade auch vor dem Umzug auf docker.

Lasse diesen auf einem Synology NAS laufen und hänge gerade etwas an der Freigabe über's Netzwerk, sodass die Sonos-Lautsprecher darauf zugreifen können.

Per default hat der fhem/fhem Container ja kein Samba installiert, wie hast du das gelöst? Hast du Samba nachinstalliert? Falls ja, ist dann nicht beim nächsten Container recreate das wieder weg? Bin mir im Bereich Container noch nicht so sicher was außerhalb der gemappten volumes persistent ist.

Den fhem-Ordner habe ich komplett nach außen gemappt, allerdings ist der dann über das Netzwerk nur für den Synology "admin"-Nutzer freigegeben.

Vielleicht sitze ich gerade aber auch schon zu lange vor der Kiste und habe einen Knoten im Hirn und die Lösung ist total simpel.

Wäre für jeden Tipp dankbar :)

Otto123

Warum ein extra samba? Du hast eine NAS, die kann doch tanzen?!
Mach doch einfach ein Share auf der NAS und binde das über mount / fstab / cifs ein.

Gruß Otto
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

freakadings

#5
Hallo Otto,

sowas ähnliches habe ich schon versucht, scheitere aber leider daran den Ordner freizugeben ohne, dass Benutzereingaben erwartet werden.

Otto123

Ok - blöde Idee :(
Da kenn ich Syno leider nicht. Aber Sonos will SMB1 (sollte per default nicht aktiviert sein) und anonym.
https://www.synology.com/de-de/knowledgebase/DSM/help/DSM/AdminCenter/file_winmacnfs_win

Da steht im Prinzip: SMB1 ein und Verschlüsselung aus
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

freakadings

#7
Ok,
ich habe jetzt ne weile rumgekaspert und irgendwie geht was, aber nicht alles.

1. Über die NAS-Oberfläche einen neuen "Gemeinsamen Ordner" angelegt, mit Namen "Sonos".
2. Per SSH auf das NAS zugegriffen und im Sonos Ordner noch einen "Mp3"-Ordner angelegt. Für runtergeladene Sounds oder was auch immer.
3. Per Shell in den FHEM-Container gegangen und dort unter /opt/fhem/ einen Ordner "Sonos" angelegt.
4. Container runtergefahren.
5. In der Containerverwaltung vom FHEM-Container den NAS-"Sonos"-Ordner auf den Container-"/opt/fhem/Sonos"-Ordner gemappt.
6. Container wieder hochgefahren.
7. Per SSH auf das NAS zugegriffen und dem Ordner "Sonos" (und Unterordner) über "sudo chmod -R 777 Sonos/" jedem Vollzugriff gewährt.
8. In FHEM das Sonos Modul angelegt mit
define Sonos SONOS 192.168.178.99:4712 45
Da mein Fhem Container nicht im Host-Netz läuft, hat der Subprozess vom Sonos-Modul auch keinen Zugriff auf das Netz in dem die Sonos-Lautsprecher sind.
Deshalb habe ich im define die IP des Raspberry Pis angegeben auf dem meine derzeitige FHEM-Installation und auch das Sonos-Modul inkl. Subprozess. Leider nicht wirklich stabil, dazu später mehr.
9. Mein Sonos Lautsprecher wurde gefunden und angelegt.
10. Folgendes funktioniert: Den Lautsprecher normal steuern, aus beiden FHEM-Instanzen und
set Sonos_Kueche PLAYURITEMP \\192.168.178.79\Sonos\Mp3\vierzehn.mp3 50
(die .79 ist das NAS)
aber nur aus der Docker-Instanz, in der RPI-Instanz taucht hierbei nicht mal ein Fehler im Log auf.
11. Folgendes funktioniert nicht:
Alles was mit "set Sonos_Kueche Speak" zu tun hat aus beiden Instanzen.

Jede Fehlermeldung sieht in etwa so aus, egal ob sie vom RPI oder aus dem Container kommt:

2020.04.28 21:15:44 3: SONOS5: Start temporary playing of "\\192.168.178.79\Sonos/RINCON_347E5CF435A001400_MR_Speak.mp3"
2020.04.28 21:15:45 3: SONOS1: Event: Received Transport-Event for Zone "Sonos_Kueche".
2020.04.28 21:15:46 3: SONOS5: SleepTimer berechnet die Laufzeit des Titels selber, da keine Wartezeit uebermittelt wurde!
2020.04.28 21:15:46 1: SONOS5: Da keine Endzeit ermittelt werden konnte, wird kein Restoring durchgeführt werden!
2020.04.28 21:15:46 3: SONOS5: Event: Received Transport-Event for Zone "Sonos_Kueche".
2020.04.28 21:15:46 3: SONOS1: Event: End of Transport-Event for Zone "Sonos_Kueche".
2020.04.28 21:15:46 3: SONOS5: Event: End of Transport-Event for Zone "Sonos_Kueche".
2020.04.28 21:15:46 3: SONOS5: Event: Received Transport-Event for Zone "Sonos_Kueche".
2020.04.28 21:15:46 3: SONOS1: Event: Received Transport-Event for Zone "Sonos_Kueche".
2020.04.28 21:15:47 3: SONOS1: Event: End of Transport-Event for Zone "Sonos_Kueche".
2020.04.28 21:15:47 3: SONOS5: Event: End of Transport-Event for Zone "Sonos_Kueche".
2020.04.28 21:16:46 3: SONOS5: Copy MP3-File (1. Element) from "/opt/fhem/Sonos/Mp3//Gong.mp3" to "/opt/fhem/Sonos//RINCON_347E5CF435A001400_MR_Speak.mp31"
2020.04.28 21:16:46 3: SONOS5: Load Google generated MP3 (2. Element) from "http://translate.google.com/translate_tts?tl=de&client=tw-ob&q=%20Das%20Fenster%20im%20Bad%20ist%20noch%20ge%F6ffnet" to "/opt/fhem/Sonos//RINCON_347E5CF435A001400_MR_Speak.mp32"
2020.04.28 21:16:46 3: SONOS5: Combine loaded chunks into "/opt/fhem/Sonos//RINCON_347E5CF435A001400_MR_Speak.mp3"
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4833, <$client> line 4.
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 4833, <$client> line 4.
binmode() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4840, <$client> line 4.
print() on closed filehandle MPFILE at ./FHEM/00_SONOS.pm line 4841, <$client> line 4.
2020.04.28 21:16:47 2: SONOS5: Beim Setzen der MP3-Informationen (ID3TagV2) ist ein Fehler aufgetreten: Can't call method "config" on an undefined value at ./FHEM/00_SONOS.pm line 4137, <$client> line 4.



Er legt auch keine automatischen .mp3-Dateien an, zumindest wüsste ich nicht wo, weder im alten (RPI) noch im neuen (NAS) Verzeichnis.
Für meinen Geschmack sind da in den Pfadangaben aber auch ein paar viele "/" und noch anzumerken ist, dass die Pfade exakt gleich sind, egal aus welche Instanz ich den Befehl abgesetzt habe.

Ein Problem ist mit Sicherheit, dass zwei FHEMs auf den gleichen Subprozess zugreifen, aber da scheint noch was nicht zu stimmen was vermutlich nicht damit zusammenhängt.

Der Subprozess ist mir auch schon vorher dem ganzen Docker-Zeug ständig eingeschlafen, warum weiß ich nicht, er hat sich einfach ohne Grund selbst umgebracht und war dann weg. Ohne Fehlermeldung und davor war nichts im Log:

2020.04.28 19:06:14 3: SONOS0: Disconnecting client and shutdown server...
2020.04.28 19:06:14 3: SONOS0: Trying to kill Sonos_Thread...
2020.04.28 19:06:14 3: SONOS0: Trying to kill LongJobs_Thread...
2020.04.28 19:06:14 3: SONOS0: Trying to kill IsAlive_Thread...
2020.04.28 19:06:14 3: SONOS0: Trying to kill PlayerRestore_Thread...
2020.04.28 19:06:14 0: SONOS0: Das Lauschen auf der Schnittstelle wurde beendet. Prozess endet nun auch...


Da ich dann das SONOS-Device immer mit disable 1 und disable 0 dazu bringen muss ihn neu zu starten ist das ziemlich nervig. Ein Königreich für eine "Restart" funktion aus FHEM heraus!


Bei Bedarf kann ich gerne noch mehr log-Auszüge liefern, aber ich komme da leider nicht mehr weiter :/



Muh. Bin durch für heute...

Edit:
Fazit: MP3s Abspielen geht von beiden Instanzen aus, aber Speak von keiner.

Noch mein SONOS-Device vom Container-FHEM:


defmod Sonos SONOS 192.168.178.99:4712 45
attr Sonos DbLogExclude .*
attr Sonos SubProcessLogfileName -
attr Sonos alias Sonos Modul
attr Sonos disable 0
attr Sonos event-on-change-reading .*
attr Sonos icon sonos_play1
attr Sonos room Gateways
attr Sonos targetSpeakDir /opt/fhem/Sonos
attr Sonos targetSpeakFileTimestamp 1
attr Sonos targetSpeakMP3FileDir /opt/fhem/Sonos/Mp3
attr Sonos targetSpeakURL \\192.168.178.79\Sonos

ch.eick

Hallo zusammen,
wer hat denn eventuell eine funktionierende Konfiguration, um Speak im docker Container zu verwenden.
Ich verzweifel langsam.

Gruß
  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

freakadings

Zitat von: ch.eick am 05 November 2020, 14:02:29
Hallo zusammen,
wer hat denn eventuell eine funktionierende Konfiguration, um Speak im docker Container zu verwenden.
Ich verzweifel langsam.

Gruß
  Christian

Ich schließe mich an, ich würde wirklich gerne Sonos Lautsprecher im Smarthome verwenden, aber ich bekomme es nicht mal hin, dass die Verbindung zu den Lautsprechern bestehen bleibt, geschweige denn Speak zum Laufen zu bekommen. Ich habe sogar schon eine parallele FHEM-Umgebung auf einem pi hochgezogen, nicht mal das hat vernünftig funktioniert.
Ich wäre auch für eine Schritt für Schritt Anleitung sehr, sehr dankbar...

kjmEjfu

vielleicht ist es eine Option sich sonos2mqtt https://forum.fhem.de/index.php/topic,111711.0.html anzuschauen? Das kann man schön in Docker-Container packen und bisher hatte ich keine Aussetzer.
Migriere derzeit zu Home Assistant

Otto123

Zitat von: freakadings am 08 November 2020, 21:57:02
Ich habe sogar schon eine parallele FHEM-Umgebung auf einem pi hochgezogen, nicht mal das hat vernünftig funktioniert.
Ich wäre auch für eine Schritt für Schritt Anleitung sehr, sehr dankbar...
Das ist eine sehr unspezifische Fehlerbeschreibung. Im Wiki steht eigentlich alles:
ZitatZusammenfassung der Spracheinrichtung
Um die Sprachausgabe des Moduls nutzen zu können, müssen einige Grundvoraussetzungen geschaffen werden. Hier soll nur eine kurze Übersicht geschaffen werden, was alles getan werden muss. Die einzelnen Themen selbst sind in diesem Wiki-Artikel bereits beschrieben.

Es muss einen Speicherplatz für Dateien geben, wo das Sonos-Modul (also FHEM) schreibend zugreifen kann, und das Sonos-System selbst lesend zugreifen kann. Das Sonos-System versucht immer ohne Passwort zuzugreifen, FHEM mit seinem Benutzerkontext
Dafür kann man sich z.B. auf dem lokalen Debian-System (sofern FHEM darauf läuft) eine Samba-Freigabe einrichten. Das ist unter "Einrichtung von Samba für Sprachausgabemöglichkeit" beschrieben.
Man kann sich auch auf einem bestehenden NAS-System einen Ordner extra für diesen Zweck anlegen und entsprechend freigeben
Bei Problemen bitte die Datei-/Ordnerrechte genauestens prüfen, notfalls mit einem Windows-/Macrechner einen direkten Zugriffstest durchführen. Hier sind die häufigsten Fehlerquellen zu suchen.
Es müssen mindestens die Attribute targetSpeakDir und targetSpeakURL am FHEM-Sonos-Device gesetzt werden. Diese Attribute werden bei den "Sonos Sprachattributen" beschrieben.
Empfehlenswert ist auch das Setzen eines der Attribute targetSpeakFileTimestamp oder targetSpeakFileHashCache am FHEM-Sonos-Device. Damit werden Indizierungsprobleme des Sonos-Systems umgangen. Es ist nicht sinnvoll beide Attribute gleichzeitig zu setzen. Auch diese Attribute werden bei den "Sonos Sprachattributen" beschrieben.
Wenn man die Möglichkeit der in den Text eingebetteten MP3-Dateien nutzen möchte, ist es empfehlenswert, das Attribut targetSpeakMP3FileDir für den Standardpfad der Jingles zu setzen. Damit werden die einzugebenden Texte deutlich übersichtlicher.
Viele Fehlerquellen wurden aber hier im Thread schon behandelt.

Gruß Otto
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

ch.eick

Hallo Otto,

ist "targetSpeakDir " als Pfadname oder als URL anzugeben?

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

FunkOdyssey

Ich hätte dir gerne meine funktionierende Version meines FHEM/Sonos und Samba-Container inkl. der FHEM-Konfiguration zugeschickt.
Ich weiß, dass das problemlos funktioniert hat. Aber ich bin mittlerweile auf sonos2mqtt umgestiegen und habe die alte Variante vor wenigen Tagen gelöscht.

Ich kann mich an Probleme mit IPV6 erinnern, da hierdurch die MP3-Generierung durch Google enorm verzögert wurde.
Und ich weiß noch, dass man unbedingt SMB1 für den Samba-Container auswählen musste.

Otto123

#14
natürlich als Verzeichnis  :-X
targetSpeakDir
Das ist der Pfad wo das Modul Sonos hinschreibt (schreiben können muss)
Im Gegensatz zu targetSpeakURL
Das ist die Adresse (URL, SMB Share \\Server\name) wo der Sonos Lautsprecher lesen können muss!
ZitatSprachoptionen
targetSpeakDir <string>
Gibt an, welches Verzeichnis für die Ablage des MP3-Files der Textausgabe verwendet werden soll
targetSpeakMP3FileConverter <string>
Hiermit kann ein MP3-Konverter angegeben werden, da am Ende der Verkettung der Speak-Ansage das resultierende MP3-File nochmal sauber durchkodiert. Damit können Restzeitanzeigeprobleme behoben werden. Dadurch vegrößert sich allerdings u.U. die Ansageverzögerung.
targetSpeakMP3FileDir <string>
Das Verzeichnis, welches als Standard für MP3-Fileangaben in Speak-Texten verwendet werden soll. Wird dieses Attribut definiert, können die Angaben bei Speak ohne Verzeichnis erfolgen.
targetSpeakURL <string>
Gibt an, unter welcher Adresse der ZonePlayer das unter targetSpeakDir angegebene Verzeichnis erreichen kann.
targetSpeakFileTimestamp <int>
One of (0, 1). Gibt an, ob die erzeugte MP3-Sprachausgabedatei einen Zeitstempel erhalten soll (1) oder nicht (0).
targetSpeakFileHashCache <int>
One of (0, 1). Gibt an, ob die erzeugte Sprachausgabedatei einen Hashwert erhalten soll (1) oder nicht (0). Wenn dieser Wert gesetzt wird, dann wird eine bereits bestehende Datei wiederverwendet, und nicht neu erzeugt.
Also als erstes schauen, ob eine mp3 im Pfad landet, von dem Modul Sonos erzeugt!
Testen ob sich die mp3 abspielen lässt (lokal auf einem PC oder so)
Von mir aus die Serverfreigabe als Pfad in der SonosApp als Musikbibliothek einbinden - NUR um zu testen ob der Sonoslautsprecher dort zugreifen kann!
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