diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm index 8bff7fd22..7bed1e897 100755 --- a/fhem/FHEM/00_SONOS.pm +++ b/fhem/FHEM/00_SONOS.pm @@ -52,6 +52,8 @@ # # SVN-History: # 05.07.2017 +# Neue Variante für das Ermitteln der laufenden Favoriten, Radios oder Playlists. +# 05.07.2017 # Veralteten Mechanismus für das Unterbrechen der Sendeschleife aufgeräumt. # SONOS_ConvertNumToWord kann nun mit undef-Übergaben umgehen. # Andere Methodik zum Ermitteln von FavouriteName, RadioName und PlaylistName eingebaut. @@ -80,10 +82,6 @@ # Es gibt vier neue Attribute am Sonosdevice: "getFavouritesListAtNewVersion", "getPlaylistsListAtNewVersion", "getRadiosListAtNewVersion" und "getQueueListAtNewVersion". In Zusammenarbeit mit "getListsDirectlyToReadings" wird dann bei Änderung der entsprechenden Liste automatisch das entsprechende Reading aller Sonosplayer-Devices aktualisiert. Hierbei entfallen dann etwaige eigene Notifies, die eine Aktualisierung der Readings veranlassen. Diese sollten dann natürlich auch entfernt werden. # Die Überprüfung, ob der SubProzess noch lebt, wird nun über die bereits bestehende Verbindung abgewickelt. Dadurch entfallen die ständigen Verbindungsversuche zum SubProzess. Dazu wird ein Reading 'LastProcessAnswer' am zentralen Sonos-Device geführt. # Bei Verlust der Verbindung zum SubProzess wird nun keine 100% Systemlast mehr verursacht. -# 15.05.2017 -# Bei der Ermittlung der Masterplayer werden "unsichtbare" Player (wie Bridge o.ä.) nun unterdrückt. -# An einer Stelle wurde ein fehlerhafter Default-Wert für 'currentTrackPositionSec' eingesetzt, was zu Folgefehlern führte. -# Die Wiederverwendung von Ports für die UPnP-Erkennung muss nun mittels dem Attribut 'reusePorts' aktiviert werden. # ######################################################################################## # @@ -1330,12 +1328,13 @@ sub SONOS_Read($) { $current{FavouriteName} = ''; eval { my $readingsValue = ReadingsVal($hash->{NAME}, 'Favourites', ''); - $readingsValue = '()' if (trim($readingsValue) eq ''); - my %favourites = %{eval($readingsValue)}; - while (my ($key, $value) = each (%favourites)) { - if (defined($current{EnqueuedTransportURI}) && defined($value->{Ressource})) { - if ($value->{Ressource} eq $current{EnqueuedTransportURI}) { - $current{FavouriteName} = $value->{Title}; + if ($readingsValue ne '') { + my %favourites = %{eval($readingsValue)}; + while (my ($key, $value) = each (%favourites)) { + if (defined($current{EnqueuedTransportURI}) && defined($value->{Ressource})) { + if ($value->{Ressource} eq $current{EnqueuedTransportURI}) { + $current{FavouriteName} = $value->{Title}; + } } } } @@ -1348,12 +1347,13 @@ sub SONOS_Read($) { $current{PlaylistName} = ''; eval { my $readingsValue = ReadingsVal($hash->{NAME}, 'Playlists', ''); - $readingsValue = '()' if (trim($readingsValue) eq ''); - my %playlists = %{eval($readingsValue)}; - while (my ($key, $value) = each (%playlists)) { - if (defined($current{EnqueuedTransportURI}) && defined($value->{Ressource})) { - if ($value->{Ressource} eq $current{EnqueuedTransportURI}) { - $current{PlaylistName} = $value->{Title}; + if ($readingsValue ne '') { + my %playlists = %{eval($readingsValue)}; + while (my ($key, $value) = each (%playlists)) { + if (defined($current{EnqueuedTransportURI}) && defined($value->{Ressource})) { + if ($value->{Ressource} eq $current{EnqueuedTransportURI}) { + $current{PlaylistName} = $value->{Title}; + } } } } @@ -1366,12 +1366,13 @@ sub SONOS_Read($) { $current{RadioName} = ''; eval { my $readingsValue = ReadingsVal($hash->{NAME}, 'Radios', ''); - $readingsValue = '()' if (trim($readingsValue) eq ''); - my %radios = %{eval($readingsValue)}; - while (my ($key, $value) = each (%radios)) { - if (defined($current{EnqueuedTransportURI}) && defined($value->{Ressource})) { - if ($value->{Ressource} eq $current{EnqueuedTransportURI}) { - $current{RadioName} = $value->{Title}; + if ($readingsValue ne '') { + my %radios = %{eval($readingsValue)}; + while (my ($key, $value) = each (%radios)) { + if (defined($current{EnqueuedTransportURI}) && defined($value->{Ressource})) { + if ($value->{Ressource} eq $current{EnqueuedTransportURI}) { + $current{RadioName} = $value->{Title}; + } } } } @@ -10692,7 +10693,7 @@ The order in the sublists are important, because the first entry defines the so-
reusePort <int>
SubProcessLogfileName <Path>
-usedonlyIPs <IP-Adresse>[,IP-Adresse]
reusePort <int>
SubProcessLogfileName <Pfad>
-usedonlyIPs <IP-Adresse>[,IP-Adresse]