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>
    Sets the repeat-state. Retrieves the new state as the result.
  • +
  • +RepeatT +
    Toggles the repeat-state. Retrieves the new state as the result.
  • Shuffle <State>
    Sets the shuffle-state. Retrieves the new state as the result.
  • +
  • +ShuffleT +
    Toggles the shuffle-state. Retrieves the new state as the result.
  • SleepTimer <Time>
    Sets the Sleeptimer to the given Time. It must be in the full format of "HH:MM:SS". Deactivate with "00:00:00" or "off".
  • @@ -1305,9 +1323,15 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
  • Repeat <State>
    Legt den Zustand des Repeat-Zustands fest. Liefert den aktuell gültigen Repeat-Zustand.
  • +
  • +RepeatT +
    Schaltet den Zustand des Repeat-Zustands um. Liefert den aktuell gültigen Repeat-Zustand.
  • Shuffle <State>
    Legt den Zustand des Shuffle-Zustands fest. Liefert den aktuell gültigen Shuffle-Zustand.
  • +
  • +ShuffleT +
    Schaltet den Zustand des Shuffle-Zustands um. Liefert den aktuell gültigen Shuffle-Zustand.
  • SleepTimer <Time>
    Legt den aktuellen SleepTimer fest. Der Wert muss ein kompletter Zeitstempel sein (HH:MM:SS). Zum Deaktivieren darf der Zeitstempel nur Nullen enthalten oder das Wort 'off'.