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:
parent
9d1e5cb245
commit
5ebfbe67c4
@ -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.
|
||||
|
@ -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 <Level></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 <time></code></b></a>
|
||||
<b><code>DailyIndexRefreshTime <Timestring></code></b></a>
|
||||
<br />Sets the current DailyIndexRefreshTime for the whole bunch of Zoneplayers.</li>
|
||||
<li><a name="SONOSPLAYER_setter_DialogLevel">
|
||||
<b><code>DialogLevel <State></code></b></a>
|
||||
@ -1142,7 +1147,7 @@ sub SONOSPLAYER_Log($$$) {
|
||||
<b><code>RoomIcon <Iconname></code></b></a>
|
||||
<br />Sets the Icon for this Zone</li>
|
||||
<li><a name="SONOSPLAYER_setter_SnoozeAlarm">
|
||||
<b><code>SnoozeAlarm <Time></code></b></a>
|
||||
<b><code>SnoozeAlarm <Timestring|Seconds></code></b></a>
|
||||
<br />Snoozes a currently playing alarm for the given time</li>
|
||||
<li><a name="SONOSPLAYER_setter_SubEnable">
|
||||
<b><code>SubEnable <State></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 <Time></code></b></a>
|
||||
<b><code>SleepTimer <Timestring|Seconds></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 <TrebleValue></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 <Level></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 <time></code></b></a>
|
||||
<b><code>DailyIndexRefreshTime <Timestring></code></b></a>
|
||||
<br />Setzt die aktuell gültige DailyIndexRefreshTime für alle Zoneplayer.</li>
|
||||
<li><a name="SONOSPLAYER_setter_DialogLevel">
|
||||
<b><code>DialogLevel <State></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 <Iconname></code></b></a>
|
||||
<br />Legt das Icon für die Zone fest</li>
|
||||
<li><a name="SONOSPLAYER_setter_SnoozeAlarm">
|
||||
<b><code>SnoozeAlarm <Time></code></b></a>
|
||||
<b><code>SnoozeAlarm <Timestring|Seconds></code></b></a>
|
||||
<br />Unterbricht eine laufende Alarmwiedergabe für den übergebenen Zeitraum.</li>
|
||||
<li><a name="SONOSPLAYER_setter_SubEnable">
|
||||
<b><code>SubEnable <State></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 <Time></code></b></a>
|
||||
<b><code>SleepTimer <Timestring|Seconds></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 <TrebleValue></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.
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user