2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-07 16:59:18 +00:00

SONOS: Amazon Streaiming angepasst, Verfügbare Softwareversion wird ermittelt

git-svn-id: https://svn.fhem.de/fhem/trunk@16618 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Reinerlein 2018-04-15 10:16:34 +00:00
parent b24126d890
commit 13335c718d

View File

@ -51,11 +51,14 @@
# Changelog (last 4 entries only, see Wiki for complete changelog)
#
# SVN-History:
# 15.04.2018
# Streams über Alexa (z.B. Sonos One) werden nun korrekt als Radiostreams dargestellt
# Es werden nun auch Updateinformationen und die interne Softwareversionsnummer gesucht und als Reading gesetzt: "softwareRevisionAvailable", "softwareRevisionInternal" und "softwareRevisionInternalAvailable"
# 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.
# Es gibt jetzt ein Reading "IsZoneBridge", 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.
@ -71,10 +74,6 @@
# Warnung mit "unescaped left brace" in Tag.pm wurde korrigiert.
# ExportSonosBibliothek wird nun in einem eigenen Thread (LongJobs-Thread) ausgeführt. Dadurch bleibt das System steuerbar, auch wenn gerade ein langwieriger Export läuft.
# Prüfmethode eingebaut, um verlorengegangene Fhem-Prozessverbindungen (aus Sicht des SubProzesses) zu erkennen, und entsprechende Thread-Bereinigungmaßnahmen durchführen zu können.
# 07.01.2018
# 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)
#
########################################################################################
#
@ -5775,6 +5774,7 @@ sub SONOS_Discover_Callback($$$) {
my $saveRoomName = '';
my $modelNumber = '';
my $displayVersion = '';
my $internalVersion = '';
my $serialNum = '';
my $iconURI = '';
@ -5796,7 +5796,10 @@ sub SONOS_Discover_Callback($$$) {
# DisplayVersion ermitteln
$displayVersion = decode_entities($1) if ($descriptionDocument =~ m/<displayVersion>(.*?)<\/displayVersion>/im);
# Interne Version ermitteln
$internalVersion = decode_entities($1) if ($descriptionDocument =~ m/<softwareVersion>(.*?)<\/softwareVersion>/im);
# SerialNum ermitteln
$serialNum = decode_entities($1) if ($descriptionDocument =~ m/<serialNum>(.*?)<\/serialNum>/im);
@ -5991,6 +5994,15 @@ sub SONOS_Discover_Callback($$$) {
# 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}}));
# Verfügbare Software herausfinden...
my $internalVersionAvailable = '';
my $softwareVersionAvailable = '';
my $updateItem = $SONOS_ZoneGroupTopologyProxy{$udn}->CheckForUpdate('Software', 'false', '')->getValue('UpdateItem');
if ($updateItem =~ m/<UpdateItem xmlns=".*?" Type="Software" Version="(.+?)" UpdateURL=".+?v(.+?)-.+?" DownloadSize=".+?" ManifestURL=".+?"\/>/i) {
$internalVersionAvailable = $1;
$softwareVersionAvailable = $2;
}
# Readings aktualisieren
SONOS_Client_Notifier('ReadingsBeginUpdate:'.$udn);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'presence', 'appeared');
@ -6003,6 +6015,9 @@ sub SONOS_Discover_Callback($$$) {
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'Volume', $currentVolume);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'location', $device->location);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'softwareRevision', $displayVersion);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'softwareRevisionAvailable', $softwareVersionAvailable);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'softwareRevisionInternal', $internalVersion);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'softwareRevisionInternalAvailable', $internalVersionAvailable);
SONOS_Client_Data_Refresh('ReadingsBulkUpdateIfChanged', $udn, 'serialNum', $serialNum);
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');
@ -6881,7 +6896,7 @@ sub SONOS_TransportCallback($$) {
SONOS_Client_Notifier('ProcessCover:'.$udn.':0:'.SONOS_URI_Escape($tempURI).':'.SONOS_URI_Escape($groundURL));
# Auch hier den XML-Parser verhindern, und alles per regulärem Ausdruck ermitteln...
if ($currentTrackMetaData =~ m/<dc:title>x-(sonosapi|rincon)-(stream|mp3radio):.*?<\/dc:title>/) {
if ($currentTrackMetaData =~ m/(<dc:title>x-(sonosapi|rincon)-(stream|mp3radio):.*?<\/dc:title>|<res protocolInfo="x-(sonosapi|rincon)-(stream|mp3radio):.*?">)/) {
# Wenn es ein Stream ist, dann muss da was anderes erkannt werden
SONOS_Log $udn, 4, "Transport-Event: Stream erkannt!";
SONOS_Client_Notifier('SetCurrent:StreamAudio:1');