2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-07 23:09:26 +00:00

SONOS: New Features GroupVolumeD and GroupVolumeU, Fixed a bug according the use of fhem devicenames inside the subprocess

git-svn-id: https://svn.fhem.de/fhem/trunk@8948 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rleins 2015-07-12 19:10:31 +00:00
parent 4c93c3012f
commit 0ea89726e4
2 changed files with 34 additions and 14 deletions

View File

@ -1,6 +1,6 @@
########################################################################################
#
# SONOS.pm (c) by Reiner Leins, February 2015
# SONOS.pm (c) by Reiner Leins, July 2015
# rleins at lmsoft dot de
#
# $Id$
@ -44,9 +44,12 @@
# define Sonos SONOS localhost:4711 30
#
########################################################################################
# Changelog
# Changelog (last 4 entries only, see Wiki for complete changelog)
#
# SVN-History:
# 12.07.2015
# Es gibt zwei neue Setter "GroupVolumeU" und "GroupVolumeD", um die Gruppenlautstärke um 'VolumeStep'-Einheiten zu erhöhen oder zu verringern.
# Innerhalb des SubProzesses wurden die Devicenamen der bereits in Fhem definierten Player nicht korrekt verwendet. Das machte sich erst mit dem neuen Feature Bookmarks bemerkbar.
# 14.06.2015
# Zwei weitere Ausnahmen für das Neustarten des SubThreads eingefügt.
# ControlPoint.pm: Beim Renew von Subscription wurde aus dem "carp" ein "croak" gemacht. Dadurch greifen die darüberliegenden Auffangmassnahmen.
@ -57,12 +60,6 @@
# Es gibt drei neue Readings "FavouritesVersion", "RadiosVersion" und "PlaylistsVersion", die bei einer Änderung des jeweiligen Bereichs durch einen Sonos Controller aktualisiert werden, und auf die man mit einem Notify reagieren kann, um z.B. ein "get player FavouritesWithCovers" ausführen zu können. Damit entfällt die Notwendigkeit von zeitgesteuerten Aktualisierungen.
# 14.04.2015
# Zusätzliche Fehlerüberprüfung und -ausgabe beim Herunterladen der Cover-Bilder eingebaut, sowie relative URLs unterbunden
# 07.04.2015
# Neues Feature 'ExportSonosBibliothek': Hiermit kann eine Datei mit der textuellen Darstellung eines Struktur- und Titelhashs erzeugt werden, das die komplette Navigationsstruktur aus der Sonos-Bibliothek abbildet. Richtwerte bei ca. 20.000 Titeln auf einem Windows-Server mit Intel Core i5 mit 2.8GHz: Laufzeit: ca. 8Min, Arbeitsspeicher: ca. 1GB, Resultierende Datei: ca. 52MB
# Neues Feature 'DeletePlaylist': Hiermit kann eine Playlist gelöscht werden. Genauso wie bei LoadPlaylist kann man hier URL-Encoded arbeiten, oder einen regulären Ausdruck verwenden
# Neues Feature 'SnoozeAlarm': Hiermit kann ein gerade abspielender Alarm für die übergebene Zeit unterbrochen werden
# Neues Feature bei 'LoadPlaylist': Man kann nun einen Devicenamen angeben, dann wird dessen aktuelle Abspielliste kopiert
# Bei der Titelanzeige wird der Numerische Vergleichsfehler abgefangen, der auftritt, wenn der Player keinerlei aktuelle Abspielinformationen hat
#
########################################################################################
#
@ -5036,14 +5033,19 @@ sub SONOS_Discover_Callback($$$) {
SONOS_Client_Notifier($elem);
}
SONOS_Log undef, 1, "Successfully autocreated SonosPlayer '$saveRoomName' ($modelNumber) Software Revision $displayVersion with ID '$udn'";
# Name sichern...
SONOS_Client_Data_Refresh('', $udn, 'NAME', $name);
SONOS_Log undef, 1, "Successfully autocreated SonosPlayer '$saveRoomName' ($modelNumber) as '$name' with Software Revision $displayVersion and ID '$udn'";
} else {
SONOS_Log undef, 2, "SonosPlayer '$saveRoomName' ($modelNumber) with ID '$udn' is already defined and will only be updated";
# Wenn das Device schon existiert, dann den dort verwendeten Namen holen
$name = SONOS_Client_Data_Retreive($udn, 'def', 'NAME', $udn);
SONOS_Log undef, 2, "SonosPlayer '$saveRoomName' ($modelNumber) with ID '$udn' is already defined (as '$name') and will only be updated";
}
# Wenn der Player noch nicht auf der "Aktiv"-Liste steht, dann draufpacken...
push @{$SONOS_Client_Data{PlayerAlive}}, $udn if (!SONOS_isInList($udn, @{$SONOS_Client_Data{PlayerAlive}}));
SONOS_Client_Data_Refresh('', $udn, 'NAME', $name);
# Readings aktualisieren
SONOS_Client_Notifier('ReadingsBeginUpdate:'.$udn);
@ -8278,7 +8280,7 @@ sub SONOS_Client_ConsumeMessage($$) {
}
}
SONOS_Log undef, 4, 'BookmarkQueueDefinition: '.Dumper(\%SONOS_BookmarkQueueDefinition);
SONOS_Log undef, 4, 'BookmarkPlaylistDefinition: '.Dumper(\%SONOS_BookmarkQueueDefinition);
}
if ($1 eq 'bookmarkTitleDefinition') {

View File

@ -1,6 +1,6 @@
########################################################################################
#
# SONOSPLAYER.pm (c) by Reiner Leins, February 2015
# SONOSPLAYER.pm (c) by Reiner Leins, July 2015
# rleins at lmsoft dot de
#
# $Id$
@ -117,6 +117,8 @@ my %sets = (
'AddMember' => 'member_devicename',
'RemoveMember' => 'member_devicename',
'GroupVolume' => 'volumelevel',
'GroupVolumeD' => '',
'GroupVolumeU' => '',
'SnapshotGroupVolume' => '',
'GroupMute' => 'state',
'CreateStereoPair' => 'RightPlayer',
@ -429,10 +431,14 @@ sub SONOSPLAYER_Set($@) {
$udn = $hash->{UDN};
if ($value =~ m/^[+-]{1}/) {
SONOS_DoWork($udn, 'setRelativeGroupVolume', $value, $value2);
SONOS_DoWork($udn, 'setRelativeGroupVolume', $value);
} else {
SONOS_DoWork($udn, 'setGroupVolume', $value, $value2);
}
} elsif (lc($key) eq 'groupvolumed') {
SONOS_DoWork($udn, 'setRelativeGroupVolume', -AttrVal($hash->{NAME}, 'VolumeStep', 7));
} elsif (lc($key) eq 'groupvolumeu') {
SONOS_DoWork($udn, 'setRelativeGroupVolume', AttrVal($hash->{NAME}, 'VolumeStep', 7));
} elsif (lc($key) eq 'snapshotgroupvolume') {
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
$udn = $hash->{UDN};
@ -1174,6 +1180,12 @@ sub SONOSPLAYER_Log($$$) {
<li><a name="SONOSPLAYER_setter_GroupVolume">
<b><code>GroupVolume &lt;VolumeLevel&gt;</code></b></a>
<br />Sets the group-volume in the way the original controller does. This means, that the relative volumelevel between the different players will be saved during change.</li>
<li><a name="SONOSPLAYER_setter_GroupVolumeD">
<b><code>GroupVolumeD</code></b></a>
<br /> Turns the group volume by volumeStep-ticks down.</li>
<li><a name="SONOSPLAYER_setter_GroupVolumeU">
<b><code>GroupVolumeU</code></b></a>
<br /> Turns the group volume by volumeStep-ticks up.</li>
<li><a name="SONOSPLAYER_setter_RemoveMember">
<b><code>RemoveMember &lt;devicename&gt;</code></b></a>
<br />Removes the given device, so that they both are not longer a group. The current playing of the current device goes on normally. The cutted device stops his playing and has no current playlist anymore (since Sonos Version 4.2 the old playlist will be restored).</li>
@ -1494,6 +1506,12 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<li><a name="SONOSPLAYER_setter_GroupVolume">
<b><code>GroupVolume &lt;VolumeLevel&gt;</code></b></a>
<br />Setzt die Gruppenlautstärke in der Art des Original-Controllers. Das bedeutet, dass das Lautstärkeverhältnis der Player zueinander beim Anpassen erhalten bleibt.</li>
<li><a name="SONOSPLAYER_setter_GroupVolumeD">
<b><code>GroupVolumeD</code></b></a>
<br /> Verringert die aktuelle Gruppenlautstärke um volumeStep-Einheiten.</li>
<li><a name="SONOSPLAYER_setter_GroupVolumeU">
<b><code>GroupVolumeU</code></b></a>
<br /> Erhöht die aktuelle Gruppenlautstärke um volumeStep-Einheiten.</li>
<li><a name="SONOSPLAYER_setter_RemoveMember">
<b><code>RemoveMember &lt;devicename&gt;</code></b></a>
<br />Entfernt dem Device das übergebene Device, sodass die beiden keine Gruppe mehr bilden. Die Wiedergabe des aktuellen Devices läuft normal weiter. Das abgetrennte Device stoppt seine Wiedergabe, und hat keine aktuelle Abspielliste mehr (seit Sonos Version 4.2 hat der Player wieder die Playliste von vorher aktiv).</li>