Sonosspeak

Begonnen von omnior, 01 September 2017, 11:47:12

Vorheriges Thema - Nächstes Thema

omnior

Seit einiger Zeit klappt einiges bei meinem vorher funktionierenden Sonos nicht mehr.
Wenn ich ein set Sonos_Kueche Speak 40 de Hallo
absetze, so wird nix abgespielt und ich erhalte im Log die Ausgabe:
SONOSPLAYER Sonos_Kueche LastActionResult: PlayURITemp: Error! UPnP-Fault-Fields: Code: "s:Client", String: "UPnPError", Actor: "-", Detail: "{UPnPError => {errorCode => 701}}"
Jemand eine Idee wo ich hier suchen sollte, bzw. was das Problem sein könnte?

omnior

was mir noch auffällt, und da bin ich nicht sicher ob das richtig ist: im SonosSpeak Verzeichnis werden alle Ausgabedateien abgespeichert mit den Rechten 644. Eventuell reicht das nicht? Das Verzeichnis selber steht auf 777

Reinerlein

Hi Omnior,

hast du mal geprüft, ob die Freigabe als solches überhaupt noch funktioniert?
Also z.B. mit einem Windowsrechner zugreifen, und die Datei mal abspielen...

Grüße
Reiner

omnior

Danke Rainer, hier könnte tatsächlich das Problem liegen. Ich hatte nämlich vorher den Zugriff direkt mit selbstgemachtem Zertifikat und nun vor einiger Zeit geändert auf Letsencrypt mit einem für diese Authentifizierung davorliegendem apache.

Wenn ich also jetzt die Freigabe raspberrypi:8085\opt\fhem\SonosSpeak am Windows Rechner aufrufe, werde ich sofort auf die Standard fhem Seite raspberrypi:8085/fhem weitergeleitet.

Wenn das das Problem ist, wie kann ich das denn umgehen?

Reinerlein

Hi Omnior,

nee, das ist der Webzugriff auf FHEM :)

Die Datei-Freigabe ist eine Samba-Freigabe (vermutlich), auf die du von einem Windowsrechner z.B. mittels

\\IPDESFHEMRECHNERS\FREIGABENAME
.
.
\\192.168.0.5\SonosSpeak
zugreifen kannst.

Grüße
Reiner

omnior

Also eigentlich ist die Freigabe m.E. eingerichtet. In der smb.conf steht nämlich:
[SonosSpeak]
  comment = Audio-Filesfor SonosPlayer to Speak
  read only = false
  path = /opt/fhem/SonosSpeak
  guest ok = yes


im Browser oder Explorer komme ich mit dieser Freigabe //raspberrypi/SonosSpeak/ auf das Verzeichnis und sehe die ganzen abgespeicherten Rincon...mp3 files

Reinerlein

Hi Omnior,

das ist doch schonmal gut. Dann solltest du jetzt doch die Konfiguration in Fhem prüfen, irgendwas muss sich ja geändert haben...

Grüße
Reiner

omnior

Hallo Reiner, naja, gut ;) bin ja noch überhaupt nicht weitergekommen. Ich prüfe und versuche seit gut zwei Wochen mit diversen Sonos ModulEinstellungen herum und komme selber eben nicht mehr weiter.
Es wäre hilfreich wenn ich aufgrund der ursprünglich geposteten Fehlermeldung einen Hinweis darauf bekommen könnte, was ich noch überprüfen sollte oder könnte.

Reinerlein

Hi Omnior,

den 701er Fehler gibt der Player immer dann zurück, wenn er etwas nicht durchführen kann.
Das ist nicht weiter hilfreich, nur insofern, dass sozusagen absichtlich keine Wiedergabe am Player erfolgt.

Deswegen tippe ich auf ein Konfigurationsproblem...
Daher wäre es gut, wenn du mal ein List vom Sonos-Device posten könntest.

Grüße
Reiner

omnior

Hallo Reiner, ja klar, mach ich. Welche wären denn wichtig? Die readings sind ja riesig groß, reichen die Internals und Attribute? Das Sonos Device und auch ein Sonos Player?

Reinerlein

Hi Omnior,

im ersten Schritt reichen erstmal nur die Attribute des Sonos-Devices. Mal schauen, ob man da schon was sieht...

Grüße
Reiner

omnior

das Sonos Device:
defmod Sonos SONOS
attr Sonos Speak1 1
attr Sonos getRadiosListAtNewVersion 1
attr Sonos room 1.2_Wohnzimmer,9.6.4_Sonos
attr Sonos targetSpeakDir /opt/fhem/SonosSpeak
attr Sonos targetSpeakFileTimestamp 1
attr Sonos targetSpeakMP3FileDir /opt/fhem/SonosSpeak
attr Sonos targetSpeakURL \\raspberrypi:8085\opt\fhem\SonosSpeak
attr Sonos verbose 0


und der Player in der Küche:
defmod Sonos_Kueche SONOSPLAYER RINCON_5CAAFD286E4601400_MR
attr Sonos_Kueche alias Küche
attr Sonos_Kueche generateInfoSummarize1 <NormalAudio><Artist prefix="(" suffix=")"/><Title prefix=" '" suffix="'" ifempty="[Keine Musikdatei]"/><Album prefix=" vom Album '" suffix="'"/></NormalAudio> <StreamAudio><Sender suffix=":"/><SenderCurrent prefix=" '" suffix="' -"/><SenderInfo prefix=" "/></StreamAudio>
attr Sonos_Kueche generateInfoSummarize2 <TransportState/><InfoSummarize1 prefix=" => "/>
attr Sonos_Kueche generateInfoSummarize3 <Volume prefix="Lautstärke: "/><Mute instead=" ~ Kein Ton" ifempty=" ~ Ton An" emptyval="0"/> ~ Balance: <Balance ifempty="Mitte" emptyval="0"/><HeadphoneConnected instead=" ~ Kopfhörer aktiv" ifempty=" ~ Kein Kopfhörer" emptyval="0"/>
attr Sonos_Kueche generateVolumeSlider 1
attr Sonos_Kueche getAlarms 1
attr Sonos_Kueche group Kueche
attr Sonos_Kueche icon icoSONOSPLAYER_icon-S1.png
attr Sonos_Kueche minVolume 0
attr Sonos_Kueche model Sonos_S1
attr Sonos_Kueche room 1.1_Küche,9.6.4_Sonos
attr Sonos_Kueche sortby 1
attr Sonos_Kueche stateVariable Presence
attr Sonos_Kueche userReadings Favourites:LastActionResult.*?GetFavouritesWithCovers.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1;; } }, Radios:LastActionResult.*?GetRadiosWithCovers.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1;; } }, Playlists:LastActionResult.*?GetPlaylistsWithCovers.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1;; } }, currentTrackPosition:LastActionResult.*?GetCurrentTrackPosition.* { if (ReadingsVal("Sonos_Kueche", "LastActionResult", "") =~ m/.*?: (.*)/) { return $1;; } }

Reinerlein

Hi Omnior,

schon gefunden :)

Das Attribut targetSpeakURL sollte so aussehen:

attr Sonos targetSpeakURL \\raspberrypi\SonosSpeak
Dort muss immer das stehen, was du z.B. auch auf einem Windowsrechner eingeben müsstest, um die Dateien erreichen zu können...

Nachdem du das Attribut gesetzt hast, muss der SubProzess neugestartet werden. Dazu kurz das Attribut "disable" am Sonosdevice auf 1 setzen, kurz warten (damit sich alles sauber beenden kann), und einfach wieder löschen...

Grüße
Reiner

Reinerlein

Ach ja: das Attribut "Speak1" kannst du löschen. Dort würde die Konfiguration eines lokalen Sprachsynthesizers stehen...

omnior

Leider ändert sich aber am Fehler nix, es erscheint immer, egal ob ich
2017-09-01 21:06:52 Global global ATTR Sonos targetSpeakURL \\raspberrypi\SonosSpeak[/code]
oder
2017-09-01 21:03:38 Global global ATTR Sonos targetSpeakURL \\raspberrypi:8085\SonosSpeak
eingebe, e erscheint immer:

2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche LastActionResult: PlayURITemp: Error! UPnP-Fault-Fields: Code: "s:Client", String: "UPnPError", Actor: "-", Detail: "{UPnPError => {errorCode => 701}}"
2017-09-01 21:07:13 SONOS Sonos LastProcessAnswer: 2017-09-01 21:07:13
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche currentTrackURI: //raspberrypi:8085/opt/fhem/SonosSpeak/RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche currentTrackHandle: //raspberrypi:8085/opt/fhem/SonosSpeak/RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3|x-file-cifs://raspberrypi:8085/opt/fhem/SonosSpeak/RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3object.item
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche currentEnqueuedTransportURI: x-file-cifs://raspberrypi:8085/opt/fhem/SonosSpeak/RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche currentEnqueuedTransportHandle: x-file-cifs://raspberrypi:8085/opt/fhem/SonosSpeak/RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3|object.item.audioItem.musicTrackRINCON_AssociatedZPUDN
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche currentTrackPosition: 0:00:00
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche currentTrackPositionSec: 0
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche currentTitle: RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche infoSummarize1:  'RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3'
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche infoSummarize2: STOPPED =>  'RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3'
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche currentTrackPositionSimulated: 0:00:00
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche currentTrackPositionSimulatedSec: 0
2017-09-01 21:07:13 SONOS Sonos LastProcessAnswer: 2017-09-01 21:07:13
2017-09-01 21:07:13 SONOSPLAYER Sonos_Kueche display_covertitle:  if (!document.getElementById("global_fulldiv_Sonos_Kueche")) {  var newDiv = document.createElement("div"); newDiv.setAttribute("id", "global_fulldiv_Sonos_Kueche"); document.body.appendChild(newDiv);   var newScript = document.createElement("script"); newScript.setAttribute("type", "text/javascript");  newScript.appendChild(document.createTextNode('function refreshFullSonos_Kueche() {  var fullDiv = document.getElementById("element_fulldiv_Sonos_Kueche"); if (!fullDiv) { return; }  var elementHTML = decodeURIComponent(fullDiv.innerHTML); var global = document.getElementById("global_fulldiv_Sonos_Kueche");  var oldGlobal = global.innerHTML; var hash = document.getElementById("hash_Sonos_Kueche"); var hashMatch = /(.+?)<.div>/i;  hashMatch.exec(elementHTML); if ((oldGlobal != "") && (!hash || (hash.innerHTML != RegExp.$1))) { global.innerHTML = elementHTML; }   if (oldGlobal != "") { setTimeout(refreshFullSonos_Kueche, 1000); var playing = document.getElementById("prog_playing_Sonos_Kueche");  if (playing && playing.innerHTML == "1") { setTimeout(refreshTimeSonos_Kueche, 100); } } } function refreshTimeSonos_Kueche() {  var playing = document.getElementById("prog_playing_Sonos_Kueche"); if (!playing || (playing && (playing.innerHTML == "0"))) { return; }   var runtime = document.getElementById("prog_runtime_Sonos_Kueche"); var starttime = document.getElementById("prog_starttime_Sonos_Kueche");  if (runtime && starttime) { var now = new Date().getTime();  var percent = (Math.round(now / 10.0) -  Math.round(starttime.innerHTML * 100.0)) / runtime.innerHTML;  document.getElementById("progressbarSonos_Kueche").style.width = percent + "%"; setTimeout(refreshTimeSonos_Kueche, 100); } }'));   document.body.appendChild(newScript); }  %3Cstyle%20type%3D%22text%2Fcss%22%3E.SONOS_Transportstate%20%7B%20height%3A%200.8em%3B%20margin-top%3A%20-6px%3B%20margin-left%3A%202px%3B%20%7D%3C%2Fstyle%3E%3Cdiv%20id%3D%22cover_currentSonos_Kueche%22%20style%3D%22position%3A%20fixed%3B%20top%3A%200px%3B%20left%3A%200px%3B%20width%3A%20100%25%3B%20height%3A%20100%25%3B%20z-index%3A%2010000%3B%20background-color%3A%20rgb%2820%2C20%2C20%29%3B%22%20onclick%3D%22document.getElementById%28%27cover_currentSonos_Kueche%27%29.style.display%20%3D%20%27none%27%3B%20document.getElementById%28%27global_fulldiv_Sonos_Kueche%27%29.innerHTML%20%3D%20%27%27%3B%22%3E%3Cdiv%20style%3D%22position%3A%20absolute%3B%20top%3A%2010px%3B%20left%3A%205px%3B%20display%3A%20inline-block%3B%20height%3A%2035px%3B%20width%3A%2035px%3B%20background-image%3A%20url%28%2Ffhem%2Fsonos%2Fcover%2Fbibliothek_round.png%29%3B%20background-repeat%3A%20no-repeat%3B%20background-size%3A%20contain%3B%20background-position%3A%20center%20center%3B%22%3E%3C%2Fdiv%3E%3Cdiv%20style%3D%22width%3A%20100%25%3B%20top%205px%3B%20text-align%3A%20center%3B%20font-weight%3A%20bold%3B%20color%3A%20lightgray%3B%20font-size%3A%20200%25%3B%22%3EK%C3%BCche%3Csvg%20class%3D%22SONOS_Transportstate%20audio_stop%22%20data-txt%3D%22Stopped%22%20version%3D%221.0%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20width%3D%22468pt%22%20height%3D%22468pt%22%20viewBox%3D%220%200%20468%20468%22%20%20preserveAspectRatio%3D%22xMidYMid%20meet%22%3E%20%3Cmetadata%3E%20Created%20by%20potrace%201.8%2C%20written%20by%20Peter%20Selinger%202001-2007%20%3C%2Fmetadata%3E%20%3Cg%20transform%3D%22translate%280%2C468%29%20scale%280.258564%2C-0.258564%29%22%20%20stroke%3D%22none%22%3E%20%3Cpath%20d%3D%22M97%201796%20c-51%20-19%20-75%20-42%20-87%20-85%20-6%20-23%20-10%20-326%20-10%20-814%200%20-842%20-2%20-815%2055%20-867%20l27%20-25%20811%20-3%20c758%20-2%20814%20-1%20847%2015%2073%2037%2070%20-6%2070%20888%200%20775%20-1%20801%20-20%20832%20-44%2073%2016%2068%20-865%2070%20-650%202%20-797%200%20-828%20-11z%20m1573%20-896%20l0%20-770%20-765%200%20-765%200%200%20770%200%20770%20765%200%20765%200%200%20-770z%22%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E%3C%2Fdiv%3E%3Cdiv%20style%3D%22position%3A%20relative%3B%20top%3A%208px%3B%20height%3A%2086%25%3B%20max-width%3A%20100%25%3B%20text-align%3A%20center%3B%22%3E%3Cdiv%20style%3D%22display%3A%20inline-block%3B%20height%3A%20calc%28100%25%20-%2070px%29%3B%20width%3A%20100%25%3B%20background-image%3A%20url%28%2Ffhem%2Fsonos%2Fcover%2Fempty.jpg%29%3B%20background-repeat%3A%20no-repeat%3B%20background-size%3A%20contain%3B%20background-position%3A%20center%20center%3B%22%2F%3E%3C%2Fdiv%3E%3Cdiv%20style%3D%22position%3A%20absolute%3B%20width%3A%20100%25%3B%20bottom%3A%208px%3B%20padding%3A%205px%3B%20text-align%3A%20center%3B%20font-weight%3A%20bold%3B%20color%3A%20lightgray%3B%20background-color%3A%20rgb%2820%2C20%2C20%29%3B%20font-size%3A%20120%25%3B%22%3E%20%27RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3%27%3C%2Fdiv%3E%3Cdiv%20id%3D%22hash_Sonos_Kueche%22%20style%3D%22display%3A%20none%3B%20color%3A%20white%3B%22%3Ede47208ad347dac1cafedc66fde5610b%3C%2Fdiv%3E%3Cdiv%20id%3D%22prog_runtime_Sonos_Kueche%22%20style%3D%22display%3A%20none%3B%20color%3A%20white%3B%22%3E1%3C%2Fdiv%3E%3Cdiv%20id%3D%22prog_starttime_Sonos_Kueche%22%20style%3D%22display%3A%20none%3B%20color%3A%20white%3B%22%3E1504292833%3C%2Fdiv%3E%3Cdiv%20id%3D%22prog_playing_Sonos_Kueche%22%20style%3D%22display%3A%20none%3B%20color%3A%20white%3B%22%3E0%3C%2Fdiv%3E%3Cdiv%20id%3D%22progressSonos_Kueche%22%20style%3D%22position%3A%20absolute%3B%20bottom%3A%200px%3B%20width%3A%20100%25%3B%20height%3A%202px%3B%20border%3A%201px%20solid%20%23000%3B%20overflow%3A%20hidden%3B%22%3E%3Cdiv%20id%3D%22progressbarSonos_Kueche%22%20style%3D%22width%3A%200%25%3B%20height%3A%202px%3B%20border-right%3A%201px%20solid%20%23000000%3B%20background%3A%20%23d65946%3B%22%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3EStop bei Titel 1 von 1Titel: RINCON_5CAAFD286E4601400_MR_Speak_20170901-210708.mp3Interpret: Album:
2017-09-01 21:07:13 SONOS Sonos LastProcessAnswer: 2017-09-01 21:07:13
2017-09-01 21:07:13 SONOS Sonos LastProcessAnswer: 2017-09-01 21:07:13
2017-09-01 21:07:14 SONOSPLAYER Sonos_Kueche currentTrackPosition: 0:00:00
2017-09-01 21:07:14 SONOSPLAYER Sonos_Kueche currentTrackPositionSec: 0
2017-09-01 21:07:14 SONOS Sonos LastProcessAnswer: 2017-09-01 21:07:14

omnior

ok, ich habs noch ein paarmal probiert und offensichtlich hatte ich beim ersten mal nicht lange genug nach dem disable gewartet ;)
Jetzt kam grad noch eine andere Fehlermeldung, aber es sieht jetzt schon mal viel besser aus und eine Sprachausgabe ist tatsächlich erfolgt.
Super. Schon mal vielen Dank für diese klasse Ersthilfe!

juemuc

Hallo,

bei mir funktioniert SonosSpeak auch nicht richtig. Anstatt zu melden, dass die Waschmaschine fertig ist, hat er nur die Lautstärke bei den 4 Sonosboxen hoch gesetzt und folgende Fehlermeldung im Logfile erzeugt.
ZitatUse of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 5092.
2017.09.02 19:10:13 1: SONOS1: Da keine Endzeit ermittelt werden konnte, wird kein Restoring durchgeführt werden!
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 5092.
2017.09.02 19:10:14 1: SONOS1: Da keine Endzeit ermittelt werden konnte, wird kein Restoring durchgeführt werden!
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 5092.
2017.09.02 19:10:14 1: SONOS1: Da keine Endzeit ermittelt werden konnte, wird kein Restoring durchgeführt werden!
Use of uninitialized value in concatenation (.) or string at ./FHEM/00_SONOS.pm line 5092.
2017.09.02 19:10:14 1: SONOS1: Da keine Endzeit ermittelt werden konnte, wird kein Restoring durchgeführt werden!

Der WAF ist -100  ???

Wenn ich die eine Sprachausgabe direkt über die Befehlseingabe durchführe, besteht die Ausgabe oft nur aus den ersten Worten und hört dann einfach auf.
Hier noch meine Definition:
defmod Sonos SONOS
attr Sonos devStateIcon opened:remotecontrol/black_btn_GREEN disconnected:remotecontrol/black_btn_RED disabled:remotecontrol/black_btn_RED
attr Sonos devStateStyle style="text-align:right"
attr Sonos disable 0
attr Sonos event-on-change-reading .*
attr Sonos getFavouritesListAtNewVersion 1
attr Sonos getListsDirectlyToReadings 1
attr Sonos group Sonos
attr Sonos icon SONOS
attr Sonos ignoredIPs 192.168.70.23
attr Sonos room Sonos,Statuszentrale
attr Sonos sortby 04
attr Sonos targetSpeakDir /mnt/SonosSpeak
attr Sonos targetSpeakFileHashCache 1
attr Sonos targetSpeakFileTimestamp 1
attr Sonos targetSpeakMP3FileDir /mnt/SonosSpeak
attr Sonos targetSpeakURL \\raspberrypi\SonosSpeak
attr Sonos verbose 1

Reinerlein Hilfe  ::)

VG
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Reinerlein

Hi Jürgen,

hmm... da scheint etwas nicht geschrieben werden zu können (?). Da müsstest du mal den Loglevel hochdrehen, um näheres zu erfahren.

Ansonsten ist es im Normalfall nicht logisch, wenn du die Attribute "targetSpeakFileHashCache" und "targetSpeakFileTimestamp" gleichzeitig verwendest.
Der Sinn von "targetSpeakFileTimestamp" ist es, den Cache von Sonos auszutricksen, damit die Datei immer einen neuen Namen hat.
Der Sinn von "targetSpeakFileHashCache" ist es, bei einem gleichen Text keine erneute Anfrage an Google durchführen zu müssen, da der Text als Hashwert an den Dateinamen angehangen wird, und somit wiedergefunden werden kann.

Zusammen ergeben sie keinen sinnvollen Usecase :) Sollten aber auch keine Probleme machen...

Prüf mal, ob der Ordner irgendwelche Beschränkungen enthält. Z.B. Speicher voll, bestehende Dateien können wegen Dateirechten nicht überschrieben werden o.ä...
Vielleicht ergibt sich da schon was.

Grüße
Reiner

P.S.: Das Attribut "event-on-change-reading" ist eigentlich überflüssig, da das Sonos-Modul das sowieso selber stets auf Veränderung prüft...

juemuc

#18
Ich habe nun einmal verbose auf 5 gesetzt. Das Ergebnis im Log habe ich als Datei angehängt. Den Befehl

set Sonos_Buero:FILTER=presence=appeared Speak 25 de         |Die_Waschmaschine_ist_fertig.mp3|

habe ich direkt in der Befehlszeile eingegeben. Zusätzlich habe ich die Attribute targetSpeakFileTimestamp und event-on-change-reading gelöscht. 

Die Rechte sind wie folgt vergeben:
Zitatdrwxrwxrwx 2 root root 4096 Sep  3 13:17 SonosSpeak
-rwxr--r-- 1 nobody nogroup 16896 Jun  3 18:50 Das_Schlafzimmerfenster_ist_offen.mp3
-rwxr--r-- 1 nobody nogroup 16896 Jun  3 19:04 Die_Waschmaschiene_ist_fertig.mp3
-rwxr--r-- 1 nobody nogroup 34294 Mär 17 19:43 Dingdong.mp3
-rwxr--r-- 1 nobody nogroup 13312 Mär 17 19:27 Es_hat_geklingelt.mp3
-rw-r--r-- 1 fhem   dialout  6144 Sep  3 13:17 RINCON_949F3E08E98201400_MR_Speak_a6a89e5dd9ffefb366f2bfca68d47ed8e05a956e.mp3
-rw-r--r-- 1 fhem   dialout 15360 Sep  3 11:34 RINCON_949F3E08E98201400_MR_Speak_b2a4c1f9e1d62464129d04f6d63910cb3ee90c03.mp3

Die Datei "Das_Schlafzimmer_ist_offen.mp3" wird zumindest bis zum "ist" ausgegeben.
VG
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

juemuc

@reinerlein:
Den ersten Fehler habe ich schon gefunden. Ich habe in Fhem "Waschmaschine" richtig und im Dateiname falsch geschrieben  :-[ . Das konnte nicht funktionieren.

Jetzt geht es nur noch darum, warum er den Satz nicht komplett ausgibt.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Reinerlein

Hi Jürgen,

kannst du mal eine reine Textausgabe machen lassen, mit demselben Text. Durch den Cache sollte das auch nur einmal geholt werden.
Für eine reine Dateiwiedergabe (ohne Google TTS) ist eigentlich der Befehl "PlayURITemp" gedacht. Dieser versucht nämlich auch nicht einen leeren Text mit der Sounddatei zu verbinden.
Vielleicht geht dabei etwas schief...

Ansonsten scheint das resultierende MP3-File, welches durch einfaches hintereinanderkopieren zusammengestellt wird, fehlerhaft zu sein.
Dabei könnte es helfen, nochmal den AVConv drüberzujagen.
Unter https://wiki.fhem.de/wiki/SONOS#Sprachattribute gibt es die Beschreibung des Attributs "targetSpeakMP3FileConverter". Dort gibt es ein Beispiel dafür:

attr Sonos targetSpeakMP3FileConverter /usr/bin/avconv -i %infile% %outfile%


Damit ist die Verzögerung bei dem Wiedergabestart höher (AVConv braucht auch etwas Zeit :) ), aber die MP3-Datei ist dann vollständig Norm-konform...

Grüße
Reiner

juemuc

#21
Leider funktioniert auch die direkt Sprachausgabe nicht korrekt.
Set Sonos_Buero Speak 15 de Die Waschmaschine ist fertig

Nach "Die Waschmaschine" hört die Wiedergabe auf. Der Sender, der vorher lief, wird nicht wieder gestartet. Im Logfile ist aktuell keine Info zu finden. Danach habe ich verbose auf 5 gesetzt und die Info aus dem Log als Anhang zur Verfügung gestellt. Zusätzlich habe ich auch das dazugehörige mp3-file angehängt.


VG
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

juemuc

Hallo Reinerlein,

ich habe auch bei der Nutzung von set Sonos_Buero PlayURITemp \\raspberrypi\SonosSpeak\Die_Waschmaschine_ist_fertig.mp3 15 das gleiche Problem. Ich vermute das Problem liegt hier
Zitat aus dem Wiki:
ZitatWenn die Länge der Datei nicht ermittelt werden kann (z.B. bei Streams), läuft die Wiedergabe genauso wie bei PlayURI ab, es wird also nichts am Ende (wenn es eines geben sollte) wiederhergestellt.
Dies würde zumindest erklären, warum am Ende der alte Zustand nicht wieder hergestellt wird. Warum die Wiedergabe nicht vollständig erfolgt ist damit aber für mich nicht erklärbar.
Ich hoffe weiter auf eine Lösung von Dir  8)
VG
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Reinerlein

Hi Jürgen,

hmm... irgendwie scheint zwischendurch ein Startfavourite mit dem Parameter "ANTENNE%20BAYERN" und NoStart aufgerufen zu werden. Das bricht dann auch die Wiedergabe der Durchsage ab, und da nix mehr zum Restoren vorhanden ist, passiert da dann auch nichts weiter mehr...

Hast du da irgendeinen Notify oder DoIf auf ein STOPPED-Zustand oder was anderes?

Grüße
Reiner

juemuc

Ich habe folgende doifs bzw. notifys definiert:

Senderwechsel bei laut/leiser
defmod Buero_Favoriten_V_DOIF DOIF ([Sonos_Buero:"UD"]) \
({my @fav = split(/\|/, \
            "[Sonos_Buero:FavouritesListAlias]");;;;\
my $pos = SONOS_posInList("[currentFavouriteName_Buero]",\
   @fav);;;;\
my $anz=$#fav;;;;\
if ($pos < $anz)\
   {$pos=$pos+1}\
else\
   {$pos=0};;;;\
my $next_current_favorit=$fav["$pos"];;;;\
my $ncf = urlEncode($next_current_favorit);;;;\
fhem("set Sonos_Buero StartFavourite $ncf")})
attr Buero_Favoriten_V_DOIF do always


Senderwechsel bei leiser/laut
defmod Buero_Favoriten_Z_DOIF DOIF ([Sonos_Buero:"DU"]) \
({my @fav = split(/\|/, \
            "[Sonos_Buero:FavouritesListAlias]");;;;\
my $pos = SONOS_posInList("[currentFavouriteName_Buero]",\
   @fav);;;;\
my $anz=$#fav;;;;\
if ($pos > 0)\
   {$pos=$pos-1}\
else\
   {$pos=$anz};;;;\
my $next_current_favorit=$fav["$pos"];;;;\
my $ncf = urlEncode($next_current_favorit);;;;\
fhem("set Sonos_Buero StartFavourite $ncf")})
attr Buero_Favoriten_Z_DOIF do always


Sonos-Box mit dem letzten Favoriten "startklar machen" (z.B. nach Stromausfall). Somit kann die Musik auch nach einem Stromausfall direkt wieder an der Box gestartet werden
defmod Sonos_Buero_appeared_DOIF DOIF ([Sonos_Buero:presence] eq "appeared" and\
[Sonos_Buero:currentFavouriteName] eq ""and\
[Sonos_Buero:transportState] ne "PLAYING")\
({ my @fav = split(/\|/, \
              "[Sonos_Buero:FavouritesListAlias]");;;;\
   my $exists = SONOS_isInList\
                ("[currentFavouriteName_Buero]",@fav);;;;\
   if ($exists == 1)\
     {my $sfurl = (urlEncode\
        ("[currentFavouriteName_Buero]"));;;;\
     {fhem("set Sonos_Buero StartFavourite $sfurl \
            NoStart")}}\
   else\
     {my @fav = split(/\|/, \
                "[Sonos_Buero:FavouritesListAlias]");;;;\
      my $next_current_favorit=$fav[0];;;;\
      my $ncf = urlEncode($next_current_favorit);;;;\
      set Sonos_Buero StartFavourite $ncf}})
attr Sonos_Buero_appeared_DOIF do always


aktuellen Sender ermitteln
defmod currentFavouriteName_Buero_DOIF DOIF ([Sonos_Buero:currentFavouriteName] ne \
             [currentFavouriteName_Buero])\
(IF ([Sonos_Buero:currentFavouriteName] ne "")\
   (set currentFavouriteName_Buero \
       [Sonos_Buero:currentFavouriteName])\
ELSE \
   (IF ([currentFavouriteName_Buero] eq "")\
      ({my @fav = split(/\|/, \
                  "[Sonos_Buero:FavouritesListAlias]");;;;\
      my $next_current_favorit=$fav[0];;;;\
      my $ncf = urlEncode($next_current_favorit);;;;\
      fhem("set Sonos_Buero StartFavourite $ncf")})))
attr currentFavouriteName_Buero_DOIF do always
attr currentFavouriteName_Buero_DOIF event-on-change-reading .*


Favoriten aktualisieren
defmod Sonos_Favoritenupdate_Bu notify Sonos_Buero:FavouritesVersion:.* \
get Sonos_Buero Favourites


Favoriten aktualisieren
defmod refreshFavouritesSonos_Buero notify Sonos_Buero:presence:.appeared\
get Sonos_Buero Favourites


VG
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Reinerlein

Hi Jürgen,

der DoIf für dein StartFavourite greift natürlich genau in der Sequenz einer Durchsage.
Deaktiviere den mal, dann wird deine Durchsage wieder gehen...

Vermutlich wird es schwierig, eine passende Bedingung zu finden, die nur greift, wenn der Player wiedergekommen ist. Es geht aber in die Richtung, dass du nur auf den Wechsel des Presence-Readings von disappeared -> appeared reagierst... alle weiteren Bedingungen sorgen nur dafür, dass dein DoIf ständig triggern kann...
Deine Zielbedingung darf kein statischer Zustand sein, sondern eben genau ein bestimmter Zustandswechsel...

Grüße
Reiner

juemuc

Zitat von: Reinerlein am 07 September 2017, 22:56:06
Hi Jürgen,

der DoIf für dein StartFavourite greift natürlich genau in der Sequenz einer Durchsage.
Deaktiviere den mal, dann wird deine Durchsage wieder gehen...

Vermutlich wird es schwierig, eine passende Bedingung zu finden, die nur greift, wenn der Player wiedergekommen ist. Es geht aber in die Richtung, dass du nur auf den Wechsel des Presence-Readings von disappeared -> appeared reagierst... alle weiteren Bedingungen sorgen nur dafür, dass dein DoIf ständig triggern kann...
Deine Zielbedingung darf kein statischer Zustand sein, sondern eben genau ein bestimmter Zustandswechsel...

Grüße
Reiner
Danke!!!!
Nachdem ich die DOIFs deaktiviert hatte, funktioniert es. Jetzt muss ich die DOIFs noch umbauen  ;D

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).