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

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
This commit is contained in:
rleins 2015-12-31 11:29:40 +00:00
parent 9d1e5cb245
commit 5ebfbe67c4
3 changed files with 25 additions and 40 deletions

View File

@ -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
<br />Sets the current groups on the whole Sonos-System. The format is the same as retreived by getter 'Groups'.<br >A reserved word is <i>Reset</i>. It can be used to directly extract all players out of their groups.</li>
</ul></li>
</ul>
<br />
<a name="SONOSget"></a>
<h4>Get</h4>
<ul>
@ -9008,7 +8997,6 @@ You can start this client on your own (to let it run instantly and independent f
The order in the sublists are important, because the first entry defines the so-called group-coordinator (in this case <code>Sonos_Wohnzimmer</code>), from which the current playlist and the current title playing transferred to the other member(s).</li>
</ul></li>
</ul>
<br />
<a name="SONOSattr"></a>
<h4>Attributes</h4>
'''Attention'''<br />The most of the attributes can only be used after a restart of fhem, because it must be initially transfered to the subprocess.
@ -9167,7 +9155,6 @@ Man kann den Server unabhängig von FHEM selbst starten (um ihn dauerhaft und un
<br />Setzt die aktuelle Gruppierungskonfiguration der Sonos-Systemlandschaft. Das Format ist jenes, welches auch von dem Get-Befehl 'Groups' geliefert wird.<br >Hier kann als GroupDefinition das Wort <i>Reset</i> verwendet werden, um alle Player aus ihren Gruppen zu entfernen.</li>
</ul></li>
</ul>
<br />
<a name="SONOSget"></a>
<h4>Get</h4>
<ul>
@ -9178,7 +9165,6 @@ Man kann den Server unabhängig von FHEM selbst starten (um ihn dauerhaft und un
Dabei ist die Reihenfolge innerhalb der Unterlisten wichtig, da der erste Eintrag der sogenannte Gruppenkoordinator ist (in diesem Fall also <code>Sonos_Wohnzimmer</code>), von dem die aktuelle Abspielliste un der aktuelle Titel auf die anderen Gruppenmitglieder übernommen wird.</li>
</ul></li>
</ul>
<br />
<a name="SONOSattr"></a>
<h4>Attribute</h4>
'''Hinweis'''<br />Die Attribute werden erst bei einem Neustart von Fhem verwendet, da diese dem SubProzess initial zur Verfügung gestellt werden müssen.

View File

@ -46,6 +46,7 @@ use warnings;
use URI::Escape;
use Thread::Queue;
use Encode;
use Scalar::Util qw(reftype looks_like_number);
# SmartMatch-Fehlermeldung unterdrücken...
no if $] >= 5.017011, warnings => 'experimental::smartmatch';
@ -122,9 +123,9 @@ my %sets = (
'Track' => 'tracknumber|Random',
'currentTrack' => 'tracknumber',
'Alarm' => 'create|update|delete ID valueHash',
'SnoozeAlarm' => 'time',
'DailyIndexRefreshTime' => 'time',
'SleepTimer' => 'time',
'SnoozeAlarm' => 'timestring|seconds',
'DailyIndexRefreshTime' => 'timestring',
'SleepTimer' => 'timestring|seconds',
'AddMember' => 'member_devicename',
'RemoveMember' => 'member_devicename',
'MakeStandaloneGroup' => '',
@ -802,6 +803,8 @@ sub SONOSPLAYER_Set($@) {
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
$udn = $hash->{UDN};
$value = SONOS_ConvertSecondsToTime($value) if (looks_like_number($value));
SONOS_DoWork($udn, 'setSnoozeAlarm', $value);
} elsif (lc($key) eq 'dailyindexrefreshtime') {
SONOS_DoWork($udn, 'setDailyIndexRefreshTime', $value);
@ -809,6 +812,8 @@ sub SONOSPLAYER_Set($@) {
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
$udn = $hash->{UDN};
$value = SONOS_ConvertSecondsToTime($value) if (looks_like_number($value));
SONOS_DoWork($udn, 'setSleepTimer', $value);
} elsif (lc($key) eq 'addmember') {
$hash = SONOSPLAYER_GetRealTargetPlayerHash($hash);
@ -1115,7 +1120,7 @@ sub SONOSPLAYER_Log($$$) {
<b><code>AudioDelayRightRear &lt;Level&gt;</code></b></a>
<br /> Sets the audiodelayrightrear of the player to the given value. The value can range from 0 to 2. The values has the following meanings: 0: >3m, 1: >0.6m und <3m, 2: <0.6m</li>
<li><a name="SONOSPLAYER_setter_DailyIndexRefreshTime">
<b><code>DailyIndexRefreshTime &lt;time&gt;</code></b></a>
<b><code>DailyIndexRefreshTime &lt;Timestring&gt;</code></b></a>
<br />Sets the current DailyIndexRefreshTime for the whole bunch of Zoneplayers.</li>
<li><a name="SONOSPLAYER_setter_DialogLevel">
<b><code>DialogLevel &lt;State&gt;</code></b></a>
@ -1142,7 +1147,7 @@ sub SONOSPLAYER_Log($$$) {
<b><code>RoomIcon &lt;Iconname&gt;</code></b></a>
<br />Sets the Icon for this Zone</li>
<li><a name="SONOSPLAYER_setter_SnoozeAlarm">
<b><code>SnoozeAlarm &lt;Time&gt;</code></b></a>
<b><code>SnoozeAlarm &lt;Timestring|Seconds&gt;</code></b></a>
<br />Snoozes a currently playing alarm for the given time</li>
<li><a name="SONOSPLAYER_setter_SubEnable">
<b><code>SubEnable &lt;State&gt;</code></b></a>
@ -1251,7 +1256,7 @@ sub SONOSPLAYER_Log($$$) {
<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>
<b><code>SleepTimer &lt;Timestring|Seconds&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>
<li><a name="SONOSPLAYER_setter_Treble">
<b><code>Treble &lt;TrebleValue&gt;</code></b></a>
@ -1337,7 +1342,6 @@ sub SONOSPLAYER_Log($$$) {
<br /> Save the current volume-relation of all players of the same group. It's neccessary for the use of "GroupVolume" and is stored until the next call of "SnapshotGroupVolume".</li>
</ul></li>
</ul>
<br />
<a name="SONOSPLAYERget"></a>
<h4>Get</h4>
<ul>
@ -1384,7 +1388,6 @@ sub SONOSPLAYER_Log($$$) {
<br /> Retrieves the current timeposition inside a title</li>
</ul></li>
</ul>
<br />
<a name="SONOSPLAYERattr"></a>
<h4>Attributes</h4>
'''Attention'''<br />The attributes can only be used after a restart of fhem, because it must be initially transfered to the subprocess.
@ -1477,7 +1480,7 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<b><code>AudioDelayRightRear &lt;Level&gt;</code></b></a>
<br /> Setzt den AudioDelayRightRear des Players auf den angegebenen Wert. Der Wert kann zwischen 0 und 2 liegen. Wobei die Werte folgende Bedeutung haben: 0: >3m, 1: >0.6m und <3m, 2: <0.6m</li>
<li><a name="SONOSPLAYER_setter_DailyIndexRefreshTime">
<b><code>DailyIndexRefreshTime &lt;time&gt;</code></b></a>
<b><code>DailyIndexRefreshTime &lt;Timestring&gt;</code></b></a>
<br />Setzt die aktuell gültige DailyIndexRefreshTime für alle Zoneplayer.</li>
<li><a name="SONOSPLAYER_setter_DialogLevel">
<b><code>DialogLevel &lt;State&gt;</code></b></a>
@ -1504,7 +1507,7 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<b><code>RoomIcon &lt;Iconname&gt;</code></b></a>
<br />Legt das Icon für die Zone fest</li>
<li><a name="SONOSPLAYER_setter_SnoozeAlarm">
<b><code>SnoozeAlarm &lt;Time&gt;</code></b></a>
<b><code>SnoozeAlarm &lt;Timestring|Seconds&gt;</code></b></a>
<br />Unterbricht eine laufende Alarmwiedergabe für den übergebenen Zeitraum.</li>
<li><a name="SONOSPLAYER_setter_SubEnable">
<b><code>SubEnable &lt;State&gt;</code></b></a>
@ -1613,7 +1616,7 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<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>
<b><code>SleepTimer &lt;Timestring|Seconds&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>
<li><a name="SONOSPLAYER_setter_Treble">
<b><code>Treble &lt;TrebleValue&gt;</code></b></a>
@ -1699,7 +1702,6 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<br /> Legt das Lautstärkeverhältnis der aktuellen Player der Gruppe für folgende '''GroupVolume'''-Aufrufe fest. Dieses festgelegte Verhältnis wird bis zum nächsten Aufruf von '''SnapshotGroupVolume''' beibehalten.</li>
</ul></li>
</ul>
<br />
<a name="SONOSPLAYERget"></a>
<h4>Get</h4>
<ul>
@ -1746,7 +1748,6 @@ Here an event is defined, where in time of 2 seconds the Mute-Button has to be p
<br /> Liefert die aktuelle Position innerhalb des Titels.</li>
</ul></li>
</ul>
<br />
<a name="SONOSPLAYERattr"></a>
<h4>Attribute</h4>
'''Hinweis'''<br />Die Attribute werden erst bei einem Neustart von Fhem verwendet, da diese dem SubProzess initial zur Verfügung gestellt werden müssen.

View File

@ -279,10 +279,8 @@ sub _createDevice {
($device, $base) = $self->parseDeviceDescription($response->content,
{Location => $location},
{ControlPoint => $self});
}
else {
carp("Loading device description failed with error: " .
$response->code . " " . $response->message);
} else {
carp("Loading device description failed with error: " . $response->code . " " . $response->message) if ($response->code != 200);
}
pop(@LWP::Protocol::http::EXTRA_SOCK_OPTS);