Sonos steuern

Begonnen von Will, 05 Januar 2013, 15:51:12

Vorheriges Thema - Nächstes Thema

Reinerlein

Hi Elektrolurch,

leider noch nicht fertig, aber in Arbeit. Deswegen kann ich ja momentan nicht einchecken :)

Ich kenne jetzt keine direkte Perl-Bibliothek für deine MP3-DB, aber für das Einlesen der Meta-Informationen habe ich ja die MP3-Lib eingecheckt. Mit der erkenne ich ja die Tracklänge der Durchsagen, und setze Titelinformationen im Durchsage-MP3...
Da müsstest du dir also was bauen können :)

Grüße
Reiner

Phiolin

#3151
Sagt dieser Fehler jemandem was? Tauch neuerdings bei Sprachausgabe im Log auf. Die Ausgabe funktioniert aber...

2018.02.02 13:40:38 2: SONOS1: Beim Setzen der MP3-Informationen (ID3TagV2) ist ein Fehler aufgetreten: Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/(\\%(?:\\=)?(\w|\\{ <-- HERE (?:\w|\\[^\w\\{}]|\\\\\\[\\{}])*\\}|\\\W))/ at FHEM/lib/MP3/Tag.pm line 2610.
Compilation failed in require at ./FHEM/00_SONOS.pm line 4146.


Danach gibt's dann bei der nächsten Speak Ansage alternativ auch noch den hier, der dann wahrscheinlich eine Folge aus dem ersten Fehler ist:
2018.02.02 13:43:45 2: SONOS1: Beim Setzen der MP3-Informationen (ID3TagV2) ist ein Fehler aufgetreten: Attempt to reload MP3/Tag.pm aborted.
Compilation failed in require at ./FHEM/00_SONOS.pm line 4146.



In Perl 5.24 war es wohl schon deprecated, gerade mal in alten Logs geschaut:
fhem-2017-12.log:Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/(\\%(?:\\=)?(\w|\\{ <-- HERE (?:\w|\\[^\w\\{}]|\\\\\\[\\{}])*\\}|\\\W))/ at FHEM/lib/MP3/Tag.pm line 2611.

In Perl 5.26 ist es wohl jetzt verboten und führt deshalb zum Fehler. Installationen die Debian-Testing verwenden, dürften damit bereits betroffen sein.
So geht's auch in Perl 5.26:

--- ../Tag.pm 2018-02-02 14:33:35.298521245 +0100
+++ Tag.pm 2018-02-02 14:30:10.254105422 +0100
@@ -2607,7 +2607,7 @@
     my ($self, $pattern) = @_;
     $pattern = "^\Q$pattern\E\$";
     # unquote %. and %=. and %={WHATEVER} and %{WHATEVER}
-    $pattern =~ s<(\\%(?:\\=)?(\w|\\{(?:\w|\\[^\w\\{}]|\\\\\\[\\{}])*\\}|\\\W))>
+    $pattern =~ s<(\\%(?:\\=)?(\w|\\\{(?:\w|\\[^\w\\\{}]|\\\\\\[\\\{}])*\\}|\\\W))>
( __unquote($1) )ge;
     # $pattern =~ s/(\\%(?:\\=)?)(\w|\\(\W))/$unquote{$1}$+/g;
     return $self->parse_rex_prepare($pattern);


Der Fehler führt dazu, dass in der FHEM/Sonos Oberfläche kein passender Titel/Interpret/Album/Coverbild angezeigt werden, weil die Informationen vom Sonos Modul nicht in der generierten MP3 Datei eingebettet werden können.

Reinerlein

Hi Phiolin,

danke für den Patch. Ich habe es bei mir eingearbeitet, es ist also beim nächsten Checkin mit dabei.
Da ich aber noch am Umbauen bin (Stichwort: LongJobs), dauert es noch etwas...

Grüße
Reinerlein

aliate

Hallo,

ich seh den Wald vor lauter Bäumen nicht und bitte euch um Hilfe.

Ich möchte die Playlisten/Titel zwischen meinen drei Sonos Playern (Sonos_Bad, Sonos_Kueche, Sonos_Wohnzimmer) synchronisieren, sprich wenn ich auf Sonos_Wohnzimmer die GoolgeMusic-Playlist XY höre, dann möchte ich diese später auch auf Sonso_Küche weiterhören. Meiner Meinung nach ist Bookmark genau das Richtige dafür, nur verstehe ich die Funktion einfach noch nicht richtig.

Am Sonos Device habe ich folgende Attribute erfolgreich angelegt

Attributes:
   bookmarkPlaylistDefinition Sync:Sonos_Wohnzimmer
   bookmarkSaveDir /opt/fhem/SonosBookmark


Mit dem Bookmark Namens "Sync" will ich die Playlist von Sonos_Wohnzimmer sichern und später entsprechend auch auf anderen Playern wiederherstellen können. Im Verzeichnis opt/fhem/SonosBookmark wird auch eine Datei angelegt.

Mein Problem wie stelle ich dieses Bookmark wieder her bzw. lade es auf anderen Playern?

Gruß
Hermann

Reinerlein

Hi Hermann,

Bookmarks sind dafür eher ungeeignet, damit kannst du nur einen Abspielposition synchronisieren, aber nicht die Liste selbst.

Für eine Abspielpositionsübertragung brauchst du nur eine gemeinsame Gruppe über die gewünschten Player zu bilden:

attr Sonos bookmarkTitleDefinition SyncGruppe:(Sonos_Wohnzimmer|Sonos_Kueche|Sonos_Flur)
attr Sonos bookmarkPlaylistDefinition SyncGruppe:(Sonos_Wohnzimmer|Sonos_Kueche|Sonos_Flur)


Wenn du jetzt auf Player 1 eine Wiedergabe stoppst, und auf einem anderen Player 2 die gleiche Playlist (bzw. den gleichen Titel) lädst/startest, dann wird dort die Wiedergabe an der gespeicherten Position fortgesetzt.

Um z.B. eine aktuelle Abspielliste auf einen anderen Player zu übertragen, kannst du folgenden Befehl verwenden.

set Sonos_Kueche LoadPlaylist Sonos_Wohnzimmer
Hier wird die Küche mit der Abspielliste vom Wohnzimmer bestückt.

Grüße
Reiner

binford6000

Hallo Phiolin,
endlich konnte ich die lästige Meldung
fhem-2017-12.log:Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/(\\%(?:\\=)?(\w|\\{ <-- HERE (?:\w|\\[^\w\\{}]|\\\\\\[\\{}])*\\}|\\\W))/ at FHEM/lib/MP3/Tag.pm line 2611.

mit deinem Code
-    $pattern =~ s<(\\%(?:\\=)?(\w|\\{(?:\w|\\[^\w\\{}]|\\\\\\[\\{}])*\\}|\\\W))>
+    $pattern =~ s<(\\%(?:\\=)?(\w|\\\{(?:\w|\\[^\w\\\{}]|\\\\\\[\\\{}])*\\}|\\\W))>

eliminieren. Danke!
VG Sebastian

n4rrOx

#3156
Hallo Reinerlein,

vielen Dank erstmal für das super Modul!

Leider spamt mir das Modul meinen FHEM log voll:
Zitat
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
...

Habe mir vor kurzem einen neuen Fernseher von Sony gekauft (KD-65XE9005) und das Sonos-Modul versucht Informationen von diesem zu laden?
Habe jetzt zwar im Sonos Modul ignoredIPs auf 192.168.188.101 gesetzt, aber wieso kommt es eigentlich dazu?

Gruß
Mathias

Wuppi68

Hallo Reinerlein,

auch von mir noch einmal ein riesengroßes Dankeschön an Deinen Einsatz und Dein Modul :-)

ein Bitte hätte ich noch, da ich zum wiederholten male darüber gestolpert bin (es läuft alles bei *wieder* mir)

Kannst Du vielleicht ein Internal oder Sonstiges einführen, wenn die Devices neu erstellt werden sollten ...

Also zum Beispiel:

VersionCreated    0.5
VersionCurrent    0.6
VersionMinumum 0.7
RecreationNeeded     Yes|No


könnte die Fehlersuche für die Leute die viele verschiedene Module haben deutlich erleichtern :-)

Liebe Grüße und ein tolles Wochenende

Ralf
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Reinerlein

Hi Ralf, hi Mathias,

hmmm... prinzipiell eine gute Idee, nur ist das für dieses Modul eigentlich noch nie notwendig gewesen. Aus irgendwelchen, nicht ermittelten, Gründen scheint es bei manchen manchmal zu helfen.
Einen Grund vom Modul aus gibt es dafür aber eigentlich nicht.

Die Definition der Devices ist seit der ersten Version identisch, und wie üblich, wird der Rest dann dynamisch geholt.

Wenn ich etwas anpasse, so versuche ich auch darauf zu achten, dass die Attribute (und Reading-Inhalte) abwärtskompatibel bleiben.
Was natürlich mal passieren kann, und was neulich ja auch zugeschlagen hat, ist, wenn jemand anderes z.B. die von mir eingebrachten UPnP-Libraries verwendet, und ich dort die Schnittstelle anpasse... das sollte aber die Ausnahme bleiben, und ist ja auch erst einmal vorgekommen...

Wie gesagt, ich wüsste jetzt gerade nicht, an was ich diese Festlegung im Code festmachen könnte. Wenn ich es wüsste, so würde ich es für die Anwender ohne Anpassungsnotwendigkeit machen, und damit wäre es wieder obsolet :)
Bedeutet, wenn es passiert, dann wegen meiner Unachtsamkeit, dann würde ich aber auch keinen notwendigen Benutzereingriff im Vorfeld erkennen...

@Mathias: wenn du ein Log mit Verbose-Level 5 erzeugst, dann erhältst du Ausgaben mit einem xx:xx:xx als Datums- und Zeitangabe. Damit werden alle Antworten aller Devices geloggt, die auf meinen Broadcast reagieren. Kannst du mir diese Ausgaben (von deinem Fernseher) mal zukommen lassen, dann kann ich vielleicht was gegen machen...

Grüße
Reiner

Wuppi68

Hallo Reineren,

danke für die ausführliche Antwort - habe ich bis dato auch immer so erlebt :-)

ZitatDie Definition der Devices ist seit der ersten Version identisch, und wie üblich, wird der Rest dann dynamisch geholt.

nachdem ich das Songs Device gelöscht und wieder neu erstellt habe wurden auch alle ReadingGroups wieder neu erstellt, diese fehlten auch vorher und wurden in der Vergangenheit nicht wieder neu erstellt...

was mir aber wichtig ist, ist das es funktioniert :-) Und das tut es
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

n4rrOx

#3160
Zitat von: Reinerlein am 16 Februar 2018, 23:24:27
Hi Ralf, hi Mathias,
[...]
@Mathias: wenn du ein Log mit Verbose-Level 5 erzeugst, dann erhältst du Ausgaben mit einem xx:xx:xx als Datums- und Zeitangabe. Damit werden alle Antworten aller Devices geloggt, die auf meinen Broadcast reagieren. Kannst du mir diese Ausgaben (von deinem Fernseher) mal zukommen lassen, dann kann ich vielleicht was gegen machen...

Grüße
Reiner

Hallo Reiner,

habe mal die IP gelöscht und beim Sonos Device verbose auf 5 gestellt.
Leider erhalte ich nicht mehr Infos, die ich dir liefern könnte:
2018.02.19 11:04:18 5: SONOS0: Received: 'DoWork:undef:refreshProcessAnswer:'
2018.02.19 11:04:18 4: SONOS1: SONOS_Client_Notifier(rePing:undef::)
2018.02.19 11:04:19 5: SONOS0: Received from UPnP-Server: 'rePing:undef::'
2018.02.19 11:04:49 5: SW: DoWork:undef:refreshProcessAnswer:

2018.02.19 11:04:49 5: SONOS0: Received: 'DoWork:undef:refreshProcessAnswer:'
2018.02.19 11:04:49 4: SONOS1: SONOS_Client_Notifier(rePing:undef::)
2018.02.19 11:04:49 5: SONOS0: Received from UPnP-Server: 'rePing:undef::'
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
Loading device description failed with error: 500 Can't connect to 192.168.188.101:22959 (Location: http://192.168.188.101:22959/devdesc.xml) at ./FHEM/00_SONOS.pm line 2406 thread 1.
2018.02.19 11:05:19 5: SW: DoWork:undef:refreshProcessAnswer:

2018.02.19 11:05:19 5: SONOS0: Received: 'DoWork:undef:refreshProcessAnswer:'
2018.02.19 11:05:19 4: SONOS1: SONOS_Client_Notifier(rePing:undef::)
2018.02.19 11:05:19 5: SONOS0: Received from UPnP-Server: 'rePing:undef::'
2018.02.19 11:05:49 5: SW: DoWork:undef:refreshProcessAnswer:


Mit ignoreIP funktioniert es ja .... die Nachfrage war eher zur Info gedacht .... man lernt ja nie aus ^^

edit:
Das ist ja übel, was alles in's Log geschrieben wird, wenn man eine Box einschaltet und verbose auf 5 steht  ;D

Grüße
Mathias

Phiolin

Frage zum Sonos Logfile für den Hintergrundprozess:
Ich habe bei mir das FHEM Logfile so eingestellt, dass jeden Tag ein neues Logfile begonnen wird.
Allerdings loggt offenbar der Sonos Hintergrundprozess fröhlich weiter in das Logfile, welches halt das aktuelle war als der Prozess gestartet wurde.
Ist also mein heutiges Logfile eigentlich fhem-2018-02-20.log, wurde der Sonos Prozess aber gestern gestartet, loggt er weiter fröhlich in fhem-2018-02-19.log.
Das ist natürlich kaum verwirrend, und bringt zusätzlich mein System-Monitoring durcheinander, dass eigentlich keine neuen Einträge in der Datei von gestern erwartet (nur deshalb ist es mir überhaupt aufgefallen).
Kann man da was machen? Das sollte ja eigentlich nicht so sein. Wenn der Hintergrundprozess sich schon des FHEM Logfiles bedient, dann sollte er auch der entsprechenden globalen Definition folgen, also beim Tageswechsel dann auch in das nächste File schreiben.

attr global logfile ./log/fhem-%Y-%m-%d.log

Kann man dem irgendwie abhelfen?

Nobby1805

Wobei das m.E. kein Problem des SONOS-Moduls ist sondern generell für alle Hintergrundprozesse gilt ... der Output des Hintergrundprozesses wird nach STDOUT geschrieben und STDOUT des Hintergrundprozesses wird beim Start auf den aktuellen Logfile umgeleitet
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

binford6000

ZitatHallo Phiolin,
endlich konnte ich die lästige Meldung
Code: [Auswählen]
fhem-2017-12.log:Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/(\\%(?:\\=)?(\w|\\{ <-- HERE (?:\w|\\[^\w\\{}]|\\\\\\[\\{}])*\\}|\\\W))/ at FHEM/lib/MP3/Tag.pm line 2611.
mit deinem Code
Code: [Auswählen]
-    $pattern =~ s<(\\%(?:\\=)?(\w|\\{(?:\w|\\[^\w\\{}]|\\\\\\[\\{}])*\\}|\\\W))>
+    $pattern =~ s<(\\%(?:\\=)?(\w|\\\{(?:\w|\\[^\w\\\{}]|\\\\\\[\\\{}])*\\}|\\\W))>
eliminieren. Danke!
VG Sebastian

Moin,
mit dem letzten Update wurde auch Tag.pm aktualisiert. Jetzt habe ich beim Start von Radio via RegEx die bekannte Fehlermeldung:
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/(\\%(?:\\=)?(\w|\\{ <-- HERE (?:\w|\\[^\w\\{}]|\\\\\\[\\{}])*\\}|\\\W))/ at FHEM/lib/MP3/Tag.pm line 2611.

Hab wieder -    $pattern =~ s<(\\%(?:\\=)?(\w|\\{(?:\w|\\[^\w\\{}]|\\\\\\[\\{}])*\\}|\\\W))>
+    $pattern =~ s<(\\%(?:\\=)?(\w|\\\{(?:\w|\\[^\w\\\{}]|\\\\\\[\\\{}])*\\}|\\\W))>

geändert und gut ist. Und mit die Datei exclude_from_update Tag.pm verbannt...
VG Sebastian

Obi-Wan

Hallo Reiner,

ich benutze Dein Modul seit neuestem mit einem Sonos One und verbundenem Amazon Unlimited Music Account. Das Reading currentAlbumArtURL ( und somit die Anzeige des Coverbildes in FHEM ) wird dabei nur korrekt gesetzt und die Readings zum nächsten Titel gefüllt wenn ich die Musik über die Sonos App auf Tablet, PC oder Smartphone starte.
Nutze ich die im Sonos One integrierte Sprachsteuerung über Alexa werden die Readings zum nächsten Titel gar nicht und der Link zum aktuellen Coverbild in currentAlbumArtURL falsch gefüllt: Im per Screenshots beigefügten Beispiel lautet der falsche Link so:
//m.media-amazon.com/images/I/71qumL7WrpL._UL600_.jpg:http://192.168.0.69:1400https
setzt man https: davor und streicht alles ab dem 1. Doppelpunkt erhält man den korrekten Link zum Cover:
https://m.media-amazon.com/images/I/71qumL7WrpL._UL600_.jpg

Fehlende Infos zum nächsten Titel sind verkraftbar aber ohne Anzeige des Coverbildes wird es unschön. Könntest Du das bitte mal prüfen ob das lösbar wäre?

Danke und Gruß,
Oliver