From 09fdf07f12a8492df0e9e23c6ae5f8fa5ced86de Mon Sep 17 00:00:00 2001 From: rleins <> Date: Thu, 8 Jan 2015 21:48:22 +0000 Subject: [PATCH] Sonos: The PlayURI-command doesn't work properly git-svn-id: https://svn.fhem.de/fhem/trunk@7476 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_SONOS.pm | 3 +++ fhem/FHEM/21_SONOSPLAYER.pm | 40 +++++++++++++++++++------------------ 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm index ac2162ee7..d53ce6f6e 100755 --- a/fhem/FHEM/00_SONOS.pm +++ b/fhem/FHEM/00_SONOS.pm @@ -32,6 +32,8 @@ # Changelog # # SVN-History: +# 08.01.2015 +# Bei der Wiedergabeanweisung "PlayURI" gab es einen Fehler # 05.01.2105 # Die Cover beim Abspielen "von diesem Gerät" (also iPad, oder Android-Tablet) wurden nicht angezeigt. # 04.01.2015 @@ -5793,6 +5795,7 @@ sub SONOS_getDeviceDefHash($) { } SONOS_Log undef, 1, "The Method 'SONOS_getDeviceDefHash' cannot find the FHEM-Device according to '$devicename'. This should not happen!"; + return undef; } ######################################################################################## diff --git a/fhem/FHEM/21_SONOSPLAYER.pm b/fhem/FHEM/21_SONOSPLAYER.pm index 5d56301a1..4480ed361 100755 --- a/fhem/FHEM/21_SONOSPLAYER.pm +++ b/fhem/FHEM/21_SONOSPLAYER.pm @@ -600,27 +600,29 @@ sub SONOSPLAYER_Set($@) { $udn = $hash->{UDN}; # Prüfen, ob ein Sonosplayer-Device angegeben wurde, dann diesen AV Eingang als Quelle wählen - my $dHash = SONOS_getDeviceDefHash($value); - if (defined($dHash)) { - my $udnShort = $1 if ($dHash->{UDN} =~ m/(.*)_MR/); - - # Wenn dieses Quell-Device eine Playbar ist, dann den optischen Eingang als Quelle wählen... - if (ReadingsVal($dHash->{NAME}, 'playerType', '') eq 'S9') { - # Das ganze geht nur bei dem eigenen Eingang, ansonsten eine Gruppenwiedergabe starten - if ($dHash->{NAME} eq $hash->{NAME}) { - $value = 'x-sonos-htastream:'.$udnShort.':spdif'; + if (defined($defs{$value})) { + my $dHash = SONOS_getDeviceDefHash($value); + if (defined($dHash)) { + my $udnShort = $1 if ($dHash->{UDN} =~ m/(.*)_MR/); + + # Wenn dieses Quell-Device eine Playbar ist, dann den optischen Eingang als Quelle wählen... + if (ReadingsVal($dHash->{NAME}, 'playerType', '') eq 'S9') { + # Das ganze geht nur bei dem eigenen Eingang, ansonsten eine Gruppenwiedergabe starten + if ($dHash->{NAME} eq $hash->{NAME}) { + $value = 'x-sonos-htastream:'.$udnShort.':spdif'; + } else { + # Auf dem anderen Player den TV-Eingang wählen + SONOS_DoWork($dHash->{UDN}, 'playURI', 'x-sonos-htastream:'.$udnShort.':spdif', undef); + + # Gruppe bilden + SONOS_DoWork($hash->{UDN}, 'playURI', 'x-rincon:'.$udnShort, $value2); + + # Wir sind hier fertig + return undef; + } } else { - # Auf dem anderen Player den TV-Eingang wählen - SONOS_DoWork($dHash->{UDN}, 'playURI', 'x-sonos-htastream:'.$udnShort.':spdif', undef); - - # Gruppe bilden - SONOS_DoWork($hash->{UDN}, 'playURI', 'x-rincon:'.$udnShort, $value2); - - # Wir sind hier fertig - return undef; + $value = 'x-rincon-stream:'.$udnShort; } - } else { - $value = 'x-rincon-stream:'.$udnShort; } }