2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

Sonos: Add feature to set "OutputFixed"

git-svn-id: https://svn.fhem.de/fhem/trunk@7897 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rleins 2015-02-06 22:42:22 +00:00
parent acd60c293e
commit 92e006bedf
2 changed files with 36 additions and 4 deletions

View File

@ -48,6 +48,8 @@
#
# SVN-History:
# 06.02.2015
# Der Getter "EthernetPortStatus" hat jetzt auch die Portnummern 2 und 3 zur Auswahl.
# Es gibt ein neues Reading "OutputFixed" sowie ein zugehöriger Setter zum Setzen des Wertes.
# Es wurde im Standard-RemoteControl-Design ein :blank zwischen den Steuerbefehlen und den drei Umschaltbefehlen ("MuteT", "ShuffleT" und "RepeatT") eingefügt.
# Es gibt ein neues Reading "roomNameAlias", das den Namen enthält, der für das Attribut "alias" beim Erkennen des Players verwendet werden würde (z.B. "Wohnzimmer - Rechts"). Wird zu Laufzeit mit aktualisiert.
# Es gibt zwei neue Setter-Befehle "LoadSearchlist" und "StartSearchlist". Mit diesen kann eine dynamisch erzeugte Playliste mit Titeln aus der Sonos-Bibliothek geladen werden. Nähere Informationen dazu im Wiki.
@ -402,7 +404,7 @@ my %sets = (
my @SONOS_PossibleDefinitions = qw(NAME INTERVAL);
my @SONOS_PossibleAttributes = qw(targetSpeakFileHashCache targetSpeakFileTimestamp targetSpeakDir targetSpeakURL Speak0 Speak1 Speak2 Speak3 Speak4 SpeakCover Speak1Cover Speak2Cover Speak3Cover Speak4Cover minVolume maxVolume minVolumeHeadphone maxVolumeHeadphone getAlarms disable generateVolumeEvent buttonEvents characterDecoding generateProxyAlbumArtURLs proxyCacheTime);
my @SONOS_PossibleReadings = qw(AlarmList AlarmListIDs UserID_Spotify UserID_Napster location SleepTimerVersion Mute HeadphoneConnected Balance Volume Loudness Bass Treble AlarmListVersion ZonePlayerUUIDsInGroup ZoneGroupID fieldType ZoneGroupName roomName roomNameAlias roomIcon LineInConnected currentAlbum currentArtist currentTitle);
my @SONOS_PossibleReadings = qw(AlarmList AlarmListIDs UserID_Spotify UserID_Napster location SleepTimerVersion Mute OutputFixed HeadphoneConnected Balance Volume Loudness Bass Treble AlarmListVersion ZonePlayerUUIDsInGroup ZoneGroupID fieldType ZoneGroupName roomName roomNameAlias roomIcon LineInConnected currentAlbum currentArtist currentTitle);
# Obsolete Einstellungen...
my $SONOS_UseTelnetForQuestions = 1;
@ -2351,6 +2353,15 @@ sub SONOS_Discover() {
# Wert wieder abholen, um das wahre Ergebnis anzeigen zu können
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.SONOS_ConvertNumToWord($SONOS_RenderingControlProxy{$udn}->GetMute(0, 'Master')->getValue('CurrentMute')));
}
} elsif ($workType eq 'setOutputFixed') {
my $value1 = $params[0];
if (SONOS_CheckProxyObject($udn, $SONOS_RenderingControlProxy{$udn})) {
$SONOS_RenderingControlProxy{$udn}->SetOutputFixed(0, SONOS_ConvertWordToNum($value1));
# Wert wieder abholen, um das wahre Ergebnis anzeigen zu können
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.SONOS_ConvertNumToWord($SONOS_RenderingControlProxy{$udn}->GetOutputFixed(0)->getValue('CurrentFixed')));
}
} elsif ($workType eq 'setMuteT') {
my $value1 = 'off';
if (SONOS_CheckProxyObject($udn, $SONOS_RenderingControlProxy{$udn})) {
@ -5135,6 +5146,7 @@ sub SONOS_GetReadingsToCurrentHash($$) {
# Insert Variables scanned during Device Detection or other events (for simple Replacing-Option of InfoSummarize)
$current{Volume} = ReadingsVal($name, 'Volume', 0);
$current{Mute} = ReadingsVal($name, 'Mute', 0);
$current{OutputFixed} = ReadingsVal($name, 'OutputFixed', 0);
$current{Balance} = ReadingsVal($name, 'Balance', 0);
$current{HeadphoneConnected} = ReadingsVal($name, 'HeadphoneConnected', 0);
$current{SleepTimer} = ReadingsVal($name, 'SleepTimer', '');
@ -5575,6 +5587,17 @@ sub SONOS_RenderingCallback($$) {
}
}
# OutputFixed?
my $outputFixed = SONOS_Client_Data_Retreive($udn, 'reading', 'OutputFixed', 0);
if ($properties{LastChangeDecoded} =~ m/<OutputFixed.*?val="([-]{0,1}\d+)".*?\/>/i) {
$outputFixed = $1;
if ($generateVolumeEvent) {
SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'OutputFixed', $outputFixed);
} else {
SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChangedNoTrigger', $udn, 'OutputFixed', $outputFixed);
}
}
SONOS_Log $udn, 4, "Rendering-Event: Current Values for '$name' ~ Volume: $currentVolume, HeadphoneConnected: $headphoneConnected, Bass: $bass, Treble: $treble, Balance: $balance, Loudness: $loudness, Mute: $mute";

View File

@ -128,6 +128,7 @@ my %sets = (
'PlayURITemp' => 'songURI',
'AddURIToQueue' => 'songURI',
'Speak' => 'volume language text',
'OutputFixed' => 'state',
'Mute' => 'state',
'Shuffle' => 'state',
'Repeat' => 'state',
@ -185,7 +186,7 @@ sub SONOSPLAYER_Initialize ($) {
$hash->{StateFn} = "SONOSPLAYER_State";
$hash->{NotifyFn} = 'SONOSPLAYER_Notify';
$hash->{AttrList}= "disable:1,0 generateVolumeSlider:1,0 generateVolumeEvent:1,0 generateSomethingChangedEvent:1,0 generateInfoSummarize1 generateInfoSummarize2 generateInfoSummarize3 generateInfoSummarize4 stateVariable:TransportState,NumberOfTracks,Track,TrackURI,TrackDuration,Title,Artist,Album,OriginalTrackNumber,AlbumArtist,Sender,SenderCurrent,SenderInfo,StreamAudio,NormalAudio,AlbumArtURI,nextTrackDuration,nextTrackURI,nextAlbumArtURI,nextTitle,nextArtist,nextAlbum,nextAlbumArtist,nextOriginalTrackNumber,Volume,Mute,Shuffle,Repeat,CrossfadeMode,Balance,HeadphoneConnected,SleepTimer,Presence,RoomName,SaveRoomName,PlayerType,Location,SoftwareRevision,SerialNum,InfoSummarize1,InfoSummarize2,InfoSummarize3,InfoSummarize4 model minVolume maxVolume minVolumeHeadphone maxVolumeHeadphone VolumeStep getAlarms:1,0 buttonEvents ".$readingFnAttributes;
$hash->{AttrList}= "disable:1,0 generateVolumeSlider:1,0 generateVolumeEvent:1,0 generateSomethingChangedEvent:1,0 generateInfoSummarize1 generateInfoSummarize2 generateInfoSummarize3 generateInfoSummarize4 stateVariable:TransportState,NumberOfTracks,Track,TrackURI,TrackDuration,Title,Artist,Album,OriginalTrackNumber,AlbumArtist,Sender,SenderCurrent,SenderInfo,StreamAudio,NormalAudio,AlbumArtURI,nextTrackDuration,nextTrackURI,nextAlbumArtURI,nextTitle,nextArtist,nextAlbum,nextAlbumArtist,nextOriginalTrackNumber,Volume,Mute,OutputFixed,Shuffle,Repeat,CrossfadeMode,Balance,HeadphoneConnected,SleepTimer,Presence,RoomName,SaveRoomName,PlayerType,Location,SoftwareRevision,SerialNum,InfoSummarize1,InfoSummarize2,InfoSummarize3,InfoSummarize4 model minVolume maxVolume minVolumeHeadphone maxVolumeHeadphone VolumeStep getAlarms:1,0 buttonEvents ".$readingFnAttributes;
return undef;
}
@ -290,7 +291,7 @@ sub SONOSPLAYER_Get($@) {
for my $elem (sort keys %gets) {
my $newElem = $elem.(($gets{$elem} eq '') ? ':noArg' : '');
$newElem = $elem.':0,1' if (lc($elem) eq 'ethernetportstatus');
$newElem = $elem.':0,1,2,3' if (lc($elem) eq 'ethernetportstatus');
push @newGets, $newElem;
}
@ -384,7 +385,7 @@ sub SONOSPLAYER_Set($@) {
}
# On/Off einsetzen; Da das jeweilige Reading dazu 0,1 enthalten wird, auch mit 0,1 arbeiten, damit die Vorauswahl passt
$key = $key.':0,1' if ((lc($key) eq 'crossfademode') || (lc($key) eq 'groupmute') || (lc($key) eq 'ledstate') || (lc($key) eq 'loudness') || (lc($key) eq 'mute') || (lc($key) eq 'repeat') || (lc($key) eq 'shuffle'));
$key = $key.':0,1' if ((lc($key) eq 'crossfademode') || (lc($key) eq 'groupmute') || (lc($key) eq 'ledstate') || (lc($key) eq 'loudness') || (lc($key) eq 'mute') || (lc($key) eq 'outputfixed') || (lc($key) eq 'repeat') || (lc($key) eq 'shuffle'));
# Iconauswahl einsetzen
if (lc($key) eq 'roomicon') {
@ -497,6 +498,8 @@ sub SONOSPLAYER_Set($@) {
$udn = $hash->{UDN};
SONOS_DoWork($udn, 'setGroupMute', $value);
} elsif (lc($key) eq 'outputfixed') {
SONOS_DoWork($udn, 'setOutputFixed', $value);
} elsif (lc($key) eq 'mute') {
SONOS_DoWork($udn, 'setMute', $value);
} elsif (lc($key) eq 'mutet') {
@ -979,6 +982,9 @@ sub SONOSPLAYER_Log($$$) {
<li><a name="SONOSPLAYER_setter_Name">
<b><code>Name &lt;Zonename&gt;</code></b></a>
<br />Sets the Name for this Zone</li>
<li><a name="SONOSPLAYER_setter_OutputFixed">
<b><code>OutputFixed &lt;State&gt;</code></b></a>
<br /> Sets the outputfixed-state. Retrieves the new state as the result.</li>
<li><a name="SONOSPLAYER_setter_Reboot">
<b><code>Reboot</code></b></a>
<br />Initiates a reboot on the Zoneplayer.</li>
@ -1269,6 +1275,9 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<li><a name="SONOSPLAYER_setter_Name">
<b><code>Name &lt;Zonename&gt;</code></b></a>
<br />Legt den Namen der Zone fest.</li>
<li><a name="SONOSPLAYER_setter_OutputFixed">
<b><code>OutputFixed &lt;State&gt;</code></b></a>
<br /> Setzt den angegebenen OutputFixed-Zustand. Liefert den aktuell gültigen OutputFixed-Zustand.</li>
<li><a name="SONOSPLAYER_setter_Reboot">
<b><code>Reboot</code></b></a>
<br />Führt für den Zoneplayer einen Neustart durch.</li>