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:
parent
acd60c293e
commit
92e006bedf
@ -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";
|
||||
|
||||
|
@ -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 <Zonename></code></b></a>
|
||||
<br />Sets the Name for this Zone</li>
|
||||
<li><a name="SONOSPLAYER_setter_OutputFixed">
|
||||
<b><code>OutputFixed <State></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 <Zonename></code></b></a>
|
||||
<br />Legt den Namen der Zone fest.</li>
|
||||
<li><a name="SONOSPLAYER_setter_OutputFixed">
|
||||
<b><code>OutputFixed <State></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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user