From ad36b3a18ec68cad134a20965d1899ff6d9bfc9b Mon Sep 17 00:00:00 2001 From: rleins <> Date: Tue, 27 Jan 2015 13:18:34 +0000 Subject: [PATCH] Sonos: Add a feature-procedure for retreiving the devicename of the masterplayer of a group. git-svn-id: https://svn.fhem.de/fhem/trunk@7743 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_SONOS.pm | 13 +++++++++++++ fhem/FHEM/21_SONOSPLAYER.pm | 26 ++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm index 4a8e6e895..d52920c74 100755 --- a/fhem/FHEM/00_SONOS.pm +++ b/fhem/FHEM/00_SONOS.pm @@ -47,6 +47,9 @@ # Changelog # # SVN-History: +# 27.01.2015 +# Bei den Befehlen "AddMember", "RemoveMember" und "CreateStereoPair" werden nun alle in Fhem verfügbaren Sonosplayer in einer Auswahl angeboten. Das erfolgt allerdings ungeachtet der Gültigkeit eines Players in diesem Kontext (z.B. kann man keinen Player aus der Gruppe entfernen, der nicht in der Gruppe ist, die Auswahl bietet aber alle an). +# Es gibt jetzt eine Prozedur "SONOSPLAYER_GetMasterPlayerName()" mit der man sich den Devicenamen des Masterplayer zu dem übergebenen Playernamen geben lassen kann. # 26.01.2015 # Beim Setzen von "disable" am Sonos-Device wurde der "state" und "STATE" der Player nicht korrekt gesetzt. # 24.01.2015 @@ -4391,6 +4394,16 @@ sub SONOS_Discover_Callback($$$) { SONOS_Client_Notifier('CommandAttr:'.$name.'RG sortby 2'); SONOS_Client_Notifier('CommandAttr:'.$name.'RG noheading 1'); SONOS_Client_Notifier('CommandAttr:'.$name.'RG nonames 1'); + + #SONOS_Client_Notifier('CommandDefine:'.$name.'RG2 ReadingsGroup '.$name.':infoSummarize2@{SONOSPLAYER_GetMasterPlayerName($DEVICE)}'); + #SONOS_Client_Notifier('CommandAttr:'.$name.'RG2 valueFormat {" "}'); + #SONOS_Client_Notifier('CommandAttr:'.$name.'RG2 valuePrefix {SONOS_getCoverTitleRG(SONOSPLAYER_GetMasterPlayerName($DEVICE))}'); + #SONOS_Client_Notifier('CommandAttr:'.$name.'RG2 room '.$SONOS_Client_Data{SonosDeviceName}); + #SONOS_Client_Notifier('CommandAttr:'.$name.'RG2 group '.$groupName); + #SONOS_Client_Notifier('CommandAttr:'.$name.'RG2 sortby 4'); + #SONOS_Client_Notifier('CommandAttr:'.$name.'RG2 noheading 1'); + #SONOS_Client_Notifier('CommandAttr:'.$name.'RG2 nonames 1'); + #SONOS_Client_Notifier('CommandAttr:'.$name.'RG2 notime 1'); } # Define Readingsgroup Listen diff --git a/fhem/FHEM/21_SONOSPLAYER.pm b/fhem/FHEM/21_SONOSPLAYER.pm index 8659c07ed..4becf6027 100755 --- a/fhem/FHEM/21_SONOSPLAYER.pm +++ b/fhem/FHEM/21_SONOSPLAYER.pm @@ -387,6 +387,13 @@ sub SONOSPLAYER_Set($@) { $key = $key.':'.$icons; } + # Playerauswahl einsetzen + my @playerNames = (); + for my $player (SONOS_getAllSonosplayerDevices()) { + push @playerNames, $player->{NAME} if ($hash->{NAME} ne $player->{NAME}); + } + $key = $key.':'.join(',', sort(@playerNames)) if ((lc($key) eq 'addmember') || (lc($key) eq 'createstereopair') || (lc($key) eq 'removemember')); + # Wifi-Auswahl setzen $key = $key.':off,on,persist-off' if (lc($key) eq 'wifi'); @@ -801,6 +808,21 @@ sub SONOSPLAYER_GetRealTargetPlayerHash($) { return $hash; } +######################################################################################## +# +# SONOSPLAYER_GetMasterPlayerName - Retreives the Real Player Name for Device-Commands +# In Case of no grouping: the given name (the normal device) +# In Case of grouping: the name of the groupmaster +# +# Parameter name = name of device, for which the master is searched +# +######################################################################################## +sub SONOSPLAYER_GetMasterPlayerName($) { + my ($name) = @_; + + return SONOSPLAYER_GetRealTargetPlayerHash(SONOS_getDeviceDefHash($name))->{NAME}; +} + ######################################################################################## # # SONOSPLAYER_Undef - Implements UndefFn function @@ -872,7 +894,7 @@ sub SONOSPLAYER_Log($$$) {
FHEM module to work with a Sonos Zoneplayer
-For more informations have also a closer look at the wiki at http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel
+For more informations have also a closer look at the wiki at http://www.fhemwiki.de/wiki/SONOS
Normally you don't have to define a Sonosplayer-Device on your own, because the Sonos-Device will do this for you during the discovery-process.
@@ -1151,7 +1173,7 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
FHEM Modul für die Steuerung eines Sonos Zoneplayer
-Für weitere Hinweise und Beschreibungen bitte auch im Wiki unter http://www.fhemwiki.de/wiki/Sonos_Anwendungsbeispiel nachschauen.
+Für weitere Hinweise und Beschreibungen bitte auch im Wiki unter http://www.fhemwiki.de/wiki/SONOS nachschauen.
Im Normalfall braucht man dieses Device nicht selber zu definieren, da es automatisch vom Discovery-Process des Sonos-Device erzeugt wird.