From a677458eabebc00f1e40e3bd04bc5cb1d2170613 Mon Sep 17 00:00:00 2001 From: rleins <> Date: Sun, 1 Feb 2015 01:08:39 +0000 Subject: [PATCH] Sonos: Add a setter ShuffleT and RepeatT to toggle the appropriate value git-svn-id: https://svn.fhem.de/fhem/trunk@7810 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_SONOS.pm | 29 ++++++++++++++++++++++------- fhem/FHEM/21_SONOSPLAYER.pm | 24 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm index 7d0fd731b..4972a803b 100755 --- a/fhem/FHEM/00_SONOS.pm +++ b/fhem/FHEM/00_SONOS.pm @@ -47,7 +47,10 @@ # Changelog # # SVN-History: -# .01.2015 +# 01.02.2015 +# Es gibt nun zwei neue Befehle "ShuffleT" und "RepeatT", die jeweils den aktuellen Zustand von "Shuffle" und "Repeat" umschalten +# Das angelegte RemoteControl sowie die RemoteControl Vorlagen enthalten nun zwei neue Icons für Shuffle-Umschaltung und Repeat-Umschaltung +# 31.01.2015 # Es gibt jetzt drei Sonos-Vorlagen für RemoteControl: "Sonos", "SonosSVG_Buttons" und "SonosSVG_Icons". # Es gibt jetzt ein neues Standardlayout (SonosSVG_Buttons) für die Erzeugung der RemoteControl. # Es gibt jetzt ein Attribut "ignoredIPs", mit dem man problematische oder unerwünschte IPs bei der UPnP-Erkennung ausschließen kann. @@ -524,7 +527,7 @@ sub SONOS_Initialize ($) { sub SONOS_RCLayout() { my @rows = (); - push @rows, "Play:PLAY,Pause:PAUSE,Previous:REWIND,Next:FF,VolumeD:VOLDOWN,VolumeU:VOLUP,MuteT:MUTE"; + push @rows, "Play:PLAY,Pause:PAUSE,Previous:REWIND,Next:FF,VolumeD:VOLDOWN,VolumeU:VOLUP,MuteT:MUTE,ShuffleT:SHUFFLE,RepeatT:REPEAT"; push @rows, "attr rc_iconpath icons/remotecontrol"; push @rows, "attr rc_iconprefix black_btn_"; @@ -539,7 +542,7 @@ sub SONOS_RCLayout() { sub SONOS_RCLayoutSVG1() { my @rows = (); - push @rows, "Play:rc_PLAY.svg,Pause:rc_PAUSE.svg,Previous:rc_PREVIOUS.svg,Next:rc_NEXT.svg,VolumeD:rc_VOLDOWN.svg,VolumeU:rc_VOLUP.svg,MuteT:rc_MUTE.svg"; + push @rows, "Play:rc_PLAY.svg,Pause:rc_PAUSE.svg,Previous:rc_PREVIOUS.svg,Next:rc_NEXT.svg,VolumeD:rc_VOLDOWN.svg,VolumeU:rc_VOLUP.svg,MuteT:rc_MUTE.svg,ShuffleT:rc_SHUFFLE.svg,RepeatT:rc_REPEAT.svg"; push @rows, "attr rc_iconpath icons/remotecontrol"; push @rows, "attr rc_iconprefix black_btn_"; @@ -554,7 +557,7 @@ sub SONOS_RCLayoutSVG1() { sub SONOS_RCLayoutSVG2() { my @rows = (); - push @rows, "Play:audio_play.svg,Pause:audio_pause.svg,Previous:audio_rew.svg,Next:audio_ff.svg,VolumeD:audio_volume_low.svg,VolumeU:audio_volume_high.svg,MuteT:audio_volume_mute.svg"; + push @rows, "Play:audio_play.svg,Pause:audio_pause.svg,Previous:audio_rew.svg,Next:audio_ff.svg,VolumeD:audio_volume_low.svg,VolumeU:audio_volume_high.svg,MuteT:audio_volume_mute.svg,ShuffleT:audio_shuffle.svg,RepeatT:audio_repeat.svg"; push @rows, "attr rc_iconpath icons/remotecontrol"; push @rows, "attr rc_iconprefix black_btn_"; @@ -2367,7 +2370,11 @@ sub SONOS_Discover() { SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.SONOS_ConvertNumToWord($SONOS_GroupRenderingControlProxy{$udn}->GetGroupMute(0)->getValue('CurrentMute'))); } } elsif ($workType eq 'setShuffle') { - my $value1 = SONOS_ConvertWordToNum($params[0]); + my $value1 = undef; + + if ($params[0] ne '~~') { + $value1 = SONOS_ConvertWordToNum($params[0]); + } if (SONOS_CheckProxyObject($udn, $SONOS_AVTransportControlProxy{$udn})) { my $result = $SONOS_AVTransportControlProxy{$udn}->GetTransportSettings(0)->getValue('PlayMode'); @@ -2375,6 +2382,8 @@ sub SONOS_Discover() { my $shuffle = $result eq 'SHUFFLE' || $result eq 'SHUFFLE_NOREPEAT'; my $repeat = $result eq 'SHUFFLE' || $result eq 'REPEAT_ALL'; + $value1 = !$shuffle if (!$value1); + my $newMode = 'NORMAL'; $newMode = 'SHUFFLE' if ($value1 && $repeat); $newMode = 'SHUFFLE_NOREPEAT' if ($value1 && !$repeat); @@ -2387,7 +2396,11 @@ sub SONOS_Discover() { SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.SONOS_ConvertNumToWord($result eq 'SHUFFLE' || $result eq 'SHUFFLE_NOREPEAT')); } } elsif ($workType eq 'setRepeat') { - my $value1 = SONOS_ConvertWordToNum($params[0]); + my $value1 = undef; + + if ($params[0] ne '~~') { + $value1 = SONOS_ConvertWordToNum($params[0]); + } if (SONOS_CheckProxyObject($udn, $SONOS_AVTransportControlProxy{$udn})) { my $result = $SONOS_AVTransportControlProxy{$udn}->GetTransportSettings(0)->getValue('PlayMode'); @@ -2395,6 +2408,8 @@ sub SONOS_Discover() { my $shuffle = $result eq 'SHUFFLE' || $result eq 'SHUFFLE_NOREPEAT'; my $repeat = $result eq 'SHUFFLE' || $result eq 'REPEAT_ALL'; + $value1 = !$repeat if (!$value1); + my $newMode = 'NORMAL'; $newMode = 'SHUFFLE' if ($value1 && $shuffle); $newMode = 'SHUFFLE_NOREPEAT' if (!$value1 && $shuffle); @@ -4468,7 +4483,7 @@ sub SONOS_Discover_Callback($$$) { SONOS_Client_Notifier('CommandAttr:'.$name.'RC group '.$SONOS_Client_Data{SonosDeviceName}); SONOS_Client_Notifier('CommandAttr:'.$name.'RC rc_iconpath icons/remotecontrol'); SONOS_Client_Notifier('CommandAttr:'.$name.'RC rc_iconprefix black_btn_'); - SONOS_Client_Notifier('CommandAttr:'.$name.'RC row00 Play:rc_PLAY.svg,Pause:rc_PAUSE.svg,Previous:rc_PREVIOUS.svg,Next:rc_NEXT.svg,VolumeD:rc_VOLDOWN.svg,VolumeU:rc_VOLUP.svg,MuteT:rc_MUTE.svg'); + SONOS_Client_Notifier('CommandAttr:'.$name.'RC row00 Play:rc_PLAY.svg,Pause:rc_PAUSE.svg,Previous:rc_PREVIOUS.svg,Next:rc_NEXT.svg,VolumeD:rc_VOLDOWN.svg,VolumeU:rc_VOLUP.svg,MuteT:rc_MUTE.svg,ShuffleT:rc_SHUFFLE.svg,RepeatT:rc_REPEAT.svg'); SONOS_Client_Notifier('CommandDefine:'.$name.'RC_Notify notify '.$name.'RC set '.$name.' $EVENT'); diff --git a/fhem/FHEM/21_SONOSPLAYER.pm b/fhem/FHEM/21_SONOSPLAYER.pm index a5246e195..207c15e5a 100755 --- a/fhem/FHEM/21_SONOSPLAYER.pm +++ b/fhem/FHEM/21_SONOSPLAYER.pm @@ -134,6 +134,8 @@ my %sets = ( 'CrossfadeMode' => 'state', 'LEDState' => 'state', 'MuteT' => '', + 'ShuffleT' => '', + 'RepeatT' => '', 'VolumeD' => '', 'VolumeU' => '', 'Volume' => 'volumelevel', @@ -500,11 +502,21 @@ sub SONOSPLAYER_Set($@) { $udn = $hash->{UDN}; SONOS_DoWork($udn, 'setShuffle', $value); + } elsif (lc($key) eq 'shufflet') { + $hash = SONOSPLAYER_GetRealTargetPlayerHash($hash); + $udn = $hash->{UDN}; + + SONOS_DoWork($udn, 'setShuffle', '~~'); } elsif (lc($key) eq 'repeat') { $hash = SONOSPLAYER_GetRealTargetPlayerHash($hash); $udn = $hash->{UDN}; SONOS_DoWork($udn, 'setRepeat', $value); + } elsif (lc($key) eq 'repeatt') { + $hash = SONOSPLAYER_GetRealTargetPlayerHash($hash); + $udn = $hash->{UDN}; + + SONOS_DoWork($udn, 'setRepeat', '~~'); } elsif (lc($key) eq 'crossfademode') { $hash = SONOSPLAYER_GetRealTargetPlayerHash($hash); $udn = $hash->{UDN}; @@ -1030,9 +1042,15 @@ sub SONOSPLAYER_Log($$$) {
Repeat <State>
RepeatT
+Shuffle <State>
ShuffleT
+SleepTimer <Time>
Repeat <State>
RepeatT
+Shuffle <State>
ShuffleT
+SleepTimer <Time>