mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
SONOS: Minor bugfixes, see changelog
git-svn-id: https://svn.fhem.de/fhem/trunk@16478 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
5111eb646b
commit
214fc1b059
@ -51,6 +51,11 @@
|
||||
# Changelog (last 4 entries only, see Wiki for complete changelog)
|
||||
#
|
||||
# SVN-History:
|
||||
# 24.03.2018
|
||||
# Einige Log-Ausgaben haben bei undefinierten Default-Übergaben Fehlermeldungen verursacht.
|
||||
# Bei einigen Positionsabfragen an die Player wurden Sonderfälle (wie NOT_IMPLEMENTED) nicht berücksichtigt.
|
||||
# Slider-Wertebereich für Bass und Treble auf den Bereich -10..10 korrigiert.
|
||||
# Es gibt jetzt ein Reading "IsZoneGroup", das 0 oder 1 sein kann. Danach wird jetzt auch entschieden, ob eine Playersteuerung dargestellt wird, oder nicht.
|
||||
# 10.03.2018
|
||||
# Die PlayBase kann nun auch den SPDIF-Eingang aktivieren (wie die PlayBar)
|
||||
# Wenn man über Alexa Musik hört, wird das aktuelle Cover nun auch angezeigt.
|
||||
@ -70,14 +75,6 @@
|
||||
# Der Initialwert von LastProcessAnswer (wird beim Start auf 0 gesetzt) wird nun korrekt berücksichtigt
|
||||
# Bei ignoredIPs und bei usedOnlyIPs kann jetzt für jedes Komma-Getrennte Element auch ein regulärer Ausdruck stehen. Wird mit // umschlossen, und darf keine Doppelpunkte enthalten.
|
||||
# Logausgabe im UPnP-Modul, welche Devices mit welchen Header-Angaben nun akzeptiert wurden (Ausgabe auf Level 5)
|
||||
# 23.12.2017
|
||||
# Subscriptions-Refresh umgebaut.
|
||||
# Devicenamen mit Punkt (.) funktionieren nun.
|
||||
# Fehler mit "undefined value $value" behoben.
|
||||
# GetTrackProvider liefert bei Nichtfinden in der MusicServicesList nun eine leere Angabe, und keine undefined.
|
||||
# Die Angabe in LastProcessAnswer ist nicht Zeitumstellungsfest. Der Wert wurde nun umgestellt auf epoch-Zeit.
|
||||
# Der Verweis auf %intAt wurde entfernt. Die Variable wurde sowieso nie verwendet.
|
||||
# Warnungsunterdrückung von 'mumpitzstuff' eingebaut.
|
||||
#
|
||||
########################################################################################
|
||||
#
|
||||
@ -2556,6 +2553,9 @@ sub SONOS_Discover_DoQueue($) {
|
||||
if (SONOS_CheckProxyObject($udn, $SONOS_AVTransportControlProxy{$udn})) {
|
||||
if (SONOS_Client_Data_Retreive('undef', 'attr', 'getListsDirectlyToReadings', 0)) {
|
||||
my $position = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0)->getValue('RelTime');
|
||||
if ($position !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
|
||||
$position = '0:00:00';
|
||||
}
|
||||
|
||||
SONOS_Client_Notifier('ReadingsBeginUpdate:'.$udn);
|
||||
my $modus = 'ReadingsBulkUpdate'.((SONOS_Client_Data_Retreive($udn, 'reading', 'currentStreamAudio', 0)) ? 'IfChanged' : '');
|
||||
@ -2565,7 +2565,11 @@ sub SONOS_Discover_DoQueue($) {
|
||||
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': DirectlySet');
|
||||
} else {
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.$SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0)->getValue('RelTime'));
|
||||
my $position = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0)->getValue('RelTime');
|
||||
if ($position !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
|
||||
$position = '0:00:00';
|
||||
}
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.$position);
|
||||
}
|
||||
}
|
||||
} elsif ($workType eq 'setCurrentTrackPosition') {
|
||||
@ -2582,6 +2586,9 @@ sub SONOS_Discover_DoQueue($) {
|
||||
# Positionswerte abfragen...
|
||||
my $result = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0);
|
||||
my $pos = SONOS_GetTimeSeconds($result->getValue('RelTime'));
|
||||
if ($pos !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
|
||||
$pos = '0:00:00';
|
||||
}
|
||||
my $duration = SONOS_GetTimeSeconds($result->getValue('TrackDuration'));
|
||||
|
||||
# Neue Position berechnen...
|
||||
@ -2604,7 +2611,11 @@ sub SONOS_Discover_DoQueue($) {
|
||||
$SONOS_AVTransportControlProxy{$udn}->Seek(0, 'REL_TIME', $value1);
|
||||
}
|
||||
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.$SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0)->getValue('RelTime'));
|
||||
my $trackPosition = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0)->getValue('RelTime');
|
||||
if ($trackPosition !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
|
||||
$trackPosition = '0:00:00';
|
||||
}
|
||||
SONOS_MakeSigHandlerReturnValue($udn, 'LastActionResult', ucfirst($workType).': '.$trackPosition);
|
||||
}
|
||||
} elsif ($workType eq 'reportUnresponsiveDevice') {
|
||||
my $value1 = $params[0];
|
||||
@ -4994,6 +5005,12 @@ sub SONOS_RestoreOldPlaystate() {
|
||||
$SIG{'CHLD'} = 'IGNORE';
|
||||
|
||||
$SIG{'INT'} = sub {
|
||||
# Alle noch offenen Restore-Aufträge löschen..-
|
||||
%SONOS_PlayerRestoreRunningUDN = ();
|
||||
while ($SONOS_PlayerRestoreQueue->pending()) {
|
||||
$SONOS_PlayerRestoreQueue->dequeue();
|
||||
}
|
||||
|
||||
$runEndlessLoop = 0;
|
||||
};
|
||||
|
||||
@ -5117,6 +5134,9 @@ sub SONOS_PlayURITemp($$$) {
|
||||
my $result = $SONOS_AVTransportControlProxy{$udn}->GetPositionInfo(0);
|
||||
$old{Track} = $result->getValue('Track');
|
||||
$old{RelTime} = $result->getValue('RelTime');
|
||||
if ($old{RelTime} !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
|
||||
$old{RelTime} = '0:00:00';
|
||||
}
|
||||
|
||||
$result = $SONOS_AVTransportControlProxy{$udn}->GetMediaInfo(0);
|
||||
$old{CurrentURI} = $result->getValue('CurrentURI');
|
||||
@ -5987,6 +6007,7 @@ sub SONOS_Discover_Callback($$$) {
|
||||
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'fieldType', $fieldType);
|
||||
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'IsBonded', (($fieldType eq '') || ($fieldType eq 'LF') || ($fieldType eq 'LF_RF')) ? '0' : '1');
|
||||
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'IsMaster', $master ? '1' : '0');
|
||||
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'IsZoneBridge', $isZoneBridge ? '1' : '0');
|
||||
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'MasterPlayer', $masterPlayerName);
|
||||
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'SlavePlayer', SONOS_Dumper(\@slavePlayerNames));
|
||||
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'SlavePlayerNotBonded', SONOS_Dumper(\@slavePlayerNotBondedNames));
|
||||
@ -6014,8 +6035,13 @@ sub SONOS_Discover_Callback($$$) {
|
||||
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'currentTrackDurationSec', SONOS_GetTimeSeconds($result->getValue('TrackDuration')));
|
||||
|
||||
my $modus = 'ReadingsBulkUpdate'.((SONOS_Client_Data_Retreive($udn, 'reading', 'currentStreamAudio', 0)) ? 'IfChanged' : '');
|
||||
SONOS_Client_Data_Refresh($modus, $udn, 'currentTrackPosition', $result->getValue('RelTime'));
|
||||
SONOS_Client_Data_Refresh($modus, $udn, 'currentTrackPositionSec', SONOS_GetTimeSeconds($result->getValue('RelTime')));
|
||||
|
||||
my $trackPosition = $result->getValue('RelTime');
|
||||
if ($trackPosition !~ /\d+:\d+:\d+/i) { # e.g. NOT_IMPLEMENTED
|
||||
$trackPosition = '0:00:00';
|
||||
}
|
||||
SONOS_Client_Data_Refresh($modus, $udn, 'currentTrackPosition', $trackPosition);
|
||||
SONOS_Client_Data_Refresh($modus, $udn, 'currentTrackPositionSec', SONOS_GetTimeSeconds($trackPosition));
|
||||
|
||||
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'currentTrack', $result->getValue('Track'));
|
||||
|
||||
@ -10023,10 +10049,10 @@ sub SONOS_Client_Data_Retreive($$$$;$) {
|
||||
|
||||
# Anfrage zulässig, also ausliefern...
|
||||
if (defined($SONOS_Client_Data{Buffer}->{$udnBuffer}) && defined($SONOS_Client_Data{Buffer}->{$udnBuffer}->{$name})) {
|
||||
SONOS_Log undef, 4, "SONOS_Client_Data_Retreive($udnBuffer, $reading, $name, $default) -> ".$SONOS_Client_Data{Buffer}->{$udnBuffer}->{$name} if (!$nologging);
|
||||
SONOS_Log undef, 4, "SONOS_Client_Data_Retreive($udnBuffer, $reading, $name, ".((defined($default)) ? $default : 'undef').") -> ".$SONOS_Client_Data{Buffer}->{$udnBuffer}->{$name} if (!$nologging);
|
||||
return $SONOS_Client_Data{Buffer}->{$udnBuffer}->{$name};
|
||||
} else {
|
||||
SONOS_Log undef, 4, "SONOS_Client_Data_Retreive($udnBuffer, $reading, $name, $default) -> DEFAULT" if (!$nologging);
|
||||
SONOS_Log undef, 4, "SONOS_Client_Data_Retreive($udnBuffer, $reading, $name, ".((defined($default)) ? $default : 'undef').") -> DEFAULT" if (!$nologging);
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
@ -129,8 +129,8 @@ my %sets = (
|
||||
'VolumeRestore' => '',
|
||||
'Balance' => 'balancevalue(-100..100)',
|
||||
'Loudness' => 'state',
|
||||
'Bass' => 'basslevel(0..100)',
|
||||
'Treble' => 'treblelevel(0..100)',
|
||||
'Bass' => 'basslevel(-10..10)',
|
||||
'Treble' => 'treblelevel(-10..10)',
|
||||
'CurrentTrackPosition' => 'timeposition',
|
||||
'Track' => 'tracknumber|Random',
|
||||
'currentTrack' => 'tracknumber',
|
||||
@ -256,7 +256,7 @@ sub SONOSPLAYER_Detail($$$;$) {
|
||||
|
||||
my $hash = $defs{$d};
|
||||
|
||||
return '' if (!ReadingsVal($d, 'IsMaster', 0) || (ReadingsVal($d, 'playerType', '') eq 'ZB100'));
|
||||
return '' if (!ReadingsVal($d, 'IsMaster', 0) || (ReadingsVal($d, 'IsZoneBridge', 0) == 1));
|
||||
|
||||
# Open incl. Inform-Div
|
||||
my $html .= '<html><div informid="'.$d.'-display_covertitle">';
|
||||
@ -568,8 +568,8 @@ sub SONOSPLAYER_Set($@) {
|
||||
if (AttrVal($hash, 'generateVolumeSlider', 1) == 1) {
|
||||
$key = $key.':slider,0,1,100' if ($key eq 'Volume');
|
||||
$key = $key.':slider,0,1,100' if ($key eq 'GroupVolume');
|
||||
$key = $key.':slider,0,1,100' if ($key eq 'Treble');
|
||||
$key = $key.':slider,0,1,100' if ($key eq 'Bass');
|
||||
$key = $key.':slider,-10,1,10' if ($key eq 'Treble');
|
||||
$key = $key.':slider,-10,1,10' if ($key eq 'Bass');
|
||||
$key = $key.':slider,-100,1,100' if ($key eq 'Balance');
|
||||
$key = $key.':slider,-15,1,15' if ($key eq 'SubGain');
|
||||
$key = $key.':slider,-15,1,15' if ($key eq 'SurroundLevel');
|
||||
|
Loading…
x
Reference in New Issue
Block a user