2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-01 15:44:52 +00:00

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
This commit is contained in:
rleins 2015-02-01 01:08:39 +00:00
parent c65a889204
commit a677458eab
2 changed files with 46 additions and 7 deletions

@ -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');

@ -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($$$) {
<li><a name="SONOSPLAYER_setter_Repeat">
<b><code>Repeat &lt;State&gt;</code></b></a>
<br /> Sets the repeat-state. Retrieves the new state as the result.</li>
<li><a name="SONOSPLAYER_setter_RepeatT">
<b><code>RepeatT</code></b></a>
<br /> Toggles the repeat-state. Retrieves the new state as the result.</li>
<li><a name="SONOSPLAYER_setter_Shuffle">
<b><code>Shuffle &lt;State&gt;</code></b></a>
<br /> Sets the shuffle-state. Retrieves the new state as the result.</li>
<li><a name="SONOSPLAYER_setter_ShuffleT">
<b><code>ShuffleT</code></b></a>
<br /> Toggles the shuffle-state. Retrieves the new state as the result.</li>
<li><a name="SONOSPLAYER_setter_SleepTimer">
<b><code>SleepTimer &lt;Time&gt;</code></b></a>
<br /> 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".</li>
@ -1305,9 +1323,15 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<li><a name="SONOSPLAYER_setter_Repeat">
<b><code>Repeat &lt;State&gt;</code></b></a>
<br /> Legt den Zustand des Repeat-Zustands fest. Liefert den aktuell gültigen Repeat-Zustand.</li>
<li><a name="SONOSPLAYER_setter_RepeatT">
<b><code>RepeatT</code></b></a>
<br /> Schaltet den Zustand des Repeat-Zustands um. Liefert den aktuell gültigen Repeat-Zustand.</li>
<li><a name="SONOSPLAYER_setter_Shuffle">
<b><code>Shuffle &lt;State&gt;</code></b></a>
<br /> Legt den Zustand des Shuffle-Zustands fest. Liefert den aktuell gültigen Shuffle-Zustand.</li>
<li><a name="SONOSPLAYER_setter_ShuffleT">
<b><code>ShuffleT</code></b></a>
<br /> Schaltet den Zustand des Shuffle-Zustands um. Liefert den aktuell gültigen Shuffle-Zustand.</li>
<li><a name="SONOSPLAYER_setter_SleepTimer">
<b><code>SleepTimer &lt;Time&gt;</code></b></a>
<br /> 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'.</li>