From 5ebfbe67c4737d1de99e502560ac2d415624e54d Mon Sep 17 00:00:00 2001
From: rleins <>
Date: Thu, 31 Dec 2015 11:29:40 +0000
Subject: [PATCH] SONOS: Bugfix Enlargement of ZoneGroupID, feature seconds as
parameter for SnoozeAlarm and SleepTimer
git-svn-id: https://svn.fhem.de/fhem/trunk@10316 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/00_SONOS.pm | 32 +++++++++---------------------
fhem/FHEM/21_SONOSPLAYER.pm | 27 +++++++++++++------------
fhem/FHEM/lib/UPnP/ControlPoint.pm | 6 ++----
3 files changed, 25 insertions(+), 40 deletions(-)
diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm
index ea60ace90..d610a2d5e 100755
--- a/fhem/FHEM/00_SONOS.pm
+++ b/fhem/FHEM/00_SONOS.pm
@@ -49,6 +49,10 @@
# Cover von Amazon funktionieren nicht
#
# SVN-History:
+# 31.12.2015
+# Das Reading ZoneGroupID wurde immer länger (mit ":__"), wenn Gruppierungen anderer Player verändert wurden.
+# Bei den Settern von "SleepTimer" und "SnoozeAlarm" kann man jetzt auch eine Zahl als Dauer in Sekunden angeben. Dazu wurde auch die Doku entsprechend angepasst.
+# In der ControlPoint.pm wurde eine Fehlermeldung korrigiert
# 24.12.2015
# Wenn ein Player ein "ß" (oder auch andere besondere Zeichen, wie Smilies o.ä.) im Namen hatte, funktionierte die Erkennung nicht mehr, und der SubThread verstarb.
# Man kann nun mittels dem Setter "Name" auch "ß" und Smilies o.ä. im Playernamen setzen.
@@ -67,23 +71,6 @@
# Bei der Verwendung von "set Sonos Groups Reset" tauchte eine Fehlermeldung wegen eines Leerstrings auf.
# Es wurde ein neuer Setter "LoadFavourite" eingebaut, der einem StartFavourite mit der Angabe von NoStart entspricht.
# Man kann bei LoadSearchList nun auch an das Ende der aktuellen Abspielliste anhängen lassen. Dazu muss man an den Parameter maxElem ein "+" anhängen.
-# 07.12.2015
-# Zwei neue Setter "DialogLevel" und "NightMode", die an einer PlayBar ausgeführt werden können.
-# "Set Sonos Groups" hat eine neue Option "Reset", mit der alle Gruppen in einem Rutsch aufgelöst werden können.
-# ControlPoint.pm: Bei einem Fehler beim Verbindungsaufbau zum Player wurde aus dem "carp" ein "croak" gemacht. Dadurch greifen die Auffangmechanismen.
-# Beim Verlieren des Gruppenmaster stand der TransportState bei allen zukünftigen NICHT-Gruppenmastern bis zum nächsten Titelwechsel auf "ERROR".
-# Man kann bei einer Speak-Definition nun auch den Parameter %textescaped% verwenden, um den URL-Enkodierten Text einzufügen.
-# Die Smartmatch-Fehlermeldung wird nun unterdrückt
-# Die Fehlerausgabe bei fehlenden Set- oder Get-Parametern enthält jetzt auch den zulässigen Wertebereich des Parameters (z.B. '(0..100)' für die Lautstärke), sowie die optionalen Parameter
-# StartSearchList hat die Wiedergabe immer neu gestartet, obwohl das u.U. gar nicht nötig war.
-# Die Attribute für die Lautstärke (minVolume, maxVolume, minVolumeHeadphone und maxVolumeHeadphone) können nun im laufenden Betrieb geändert werden und die neuen Grenzen werden sofort sichergestellt.
-# Es gibt einen neuen Setter 'MakeStandaloneGroup', mit dem man einen Player aus seiner Gruppe lösen kann.
-# Es wird der Provider Amazon nun mit angezeigt.
-# Es gibt nun ein Attribut usedonlyIPs, mit dem man die IP-Adressen der zu verwendenden Player angeben kann. Damit ist man manchmal besser dran, als mit dem Ausschluss von einzelnen Adressen
-# Es gibt einen neuen Setter "TruePlay".
-# Es gibt ein neues Attribut 'SpeakGoogleURL' für die Definition der zu verwendenden Google-URL für die Sprachausgabe
-# Die Standard-Google-URL wurde nach neuen Hinweisen angepasst.
-# Es gibt neue Setter "AudioDelayLeftRear" (Abstand hinterer linker Lautsprecher), "AudioDelayRightRear" (Abstand hinterer rechter Lautsprecher) und "SubPolarity" (Sub Aufstellung) bei einem 5.1 Surroundsystem.
#
########################################################################################
#
@@ -7294,6 +7281,8 @@ sub SONOS_ZoneGroupTopologyCallback($$) {
$zoneGroupID = $2;
my $member = $3;
+ $zoneGroupID .= ':__' if ($zoneGroupID !~ m/:/);
+
my $topoType = '';
# Ist dieser Player in einem ChannelMapSet (also einer Paarung) enthalten?
if ($member =~ m/ChannelMapSet=".*?$udnShort:(.*?),(.*?)[;"]/is) {
@@ -7324,9 +7313,10 @@ sub SONOS_ZoneGroupTopologyCallback($$) {
my $roomName = SONOS_Client_Data_Retreive($udn, 'reading', 'roomName', '');
SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'roomNameAlias', $roomName.$aliasSuffix);
+
+ SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'ZoneGroupID', $zoneGroupID);
+ SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'fieldType', $fieldType);
}
- SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'ZoneGroupID', $zoneGroupID.':__');
- SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'fieldType', $fieldType);
# ZoneGroupName: Welchen Namen hat die aktuelle Gruppe?
my $zoneGroupName = SONOS_Client_Data_Retreive($udn, 'reading', 'ZoneGroupName', '');
@@ -8997,7 +8987,6 @@ You can start this client on your own (to let it run instantly and independent f
Sets the current groups on the whole Sonos-System. The format is the same as retreived by getter 'Groups'.
A reserved word is Reset. It can be used to directly extract all players out of their groups.
-
Sonos_Wohnzimmer
), from which the current playlist and the current title playing transferred to the other member(s).
Sonos_Wohnzimmer
), von dem die aktuelle Abspielliste un der aktuelle Titel auf die anderen Gruppenmitglieder übernommen wird.
AudioDelayRightRear <Level>
DailyIndexRefreshTime <time>
+DailyIndexRefreshTime <Timestring>
DialogLevel <State>
@@ -1142,7 +1147,7 @@ sub SONOSPLAYER_Log($$$) {
RoomIcon <Iconname>
SnoozeAlarm <Time>
+SnoozeAlarm <Timestring|Seconds>
SubEnable <State>
@@ -1251,7 +1256,7 @@ sub SONOSPLAYER_Log($$$) {
ShuffleT
SleepTimer <Time>
+SleepTimer <Timestring|Seconds>
Treble <TrebleValue>
@@ -1337,7 +1342,6 @@ sub SONOSPLAYER_Log($$$) {
AudioDelayRightRear <Level>
DailyIndexRefreshTime <time>
+DailyIndexRefreshTime <Timestring>
DialogLevel <State>
@@ -1504,7 +1507,7 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
RoomIcon <Iconname>
SnoozeAlarm <Time>
+SnoozeAlarm <Timestring|Seconds>
SubEnable <State>
@@ -1613,7 +1616,7 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
ShuffleT
SleepTimer <Time>
+SleepTimer <Timestring|Seconds>
Treble <TrebleValue>
@@ -1699,7 +1702,6 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p