From 93f41b6d52bfa0a5075b963e81aefbde48adbb30 Mon Sep 17 00:00:00 2001 From: Reinerlein <> Date: Wed, 25 Apr 2018 06:00:12 +0000 Subject: [PATCH] SONOS: Small bugfixes, Controlpoint: added support for envelope-prefix git-svn-id: https://svn.fhem.de/fhem/trunk@16658 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_SONOS.pm | 18 ++++++------------ fhem/FHEM/lib/UPnP/ControlPoint.pm | 8 ++++++-- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm index 5175c9ac0..0136d0b13 100755 --- a/fhem/FHEM/00_SONOS.pm +++ b/fhem/FHEM/00_SONOS.pm @@ -51,6 +51,10 @@ # Changelog (last 4 entries only, see Wiki for complete changelog) # # SVN-History: +# 25.04.2018 +# "Deep Recursion"-Warnung beim loggen wird nun verhindert +# Beim Erzeugen der Gruppen-ReadingsGroup ist bei der Verwendung eines Boosts ab und zu ein Fehler aufgetreten +# Beim Erzeugen eines ControlPoint-Objekts kann man nun das Envelope-Prefix angeben (nicht für das Sonos-Modul relevant) # 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" @@ -66,14 +70,6 @@ # Wenn ein Player disabled oder disappeared ist, wird ein Proxy-Cover-Zugriffsversuch auf diesen Player unterbunden. # Ein Modify-Befehlsaufruf wird nun am Vorhandensein von $hash->{OLDDEF} erkannt. # Bei einigen PERL-Installationen stand im Reading 'currentTrackPositionSimulatedSec' eine Kommazahl (da sie von time() aus berechnet wird). Diese Zahl wird nun gerundet. -# 26.02.2018 -# ComObjectTransportQueue in Client_ReceiveQueue umbenannt. -# If-Abfrage um die can_read-Schleife im SubProzess eingebaut, Um Signalunterbrechungen zu berücksichtigen. -# Neuer Getter "WifiPortStatus". Liefert Active, wenn das WLAN aktiviert ist, sonst Inactive. -# Drei neue (automatisch ermittelte) Readings "Orientation", "WifiEnabled" und "WirelessMode". -# 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. # ######################################################################################## # @@ -2105,9 +2101,7 @@ sub SONOS_ConvertZoneGroupState($) { # Etwaig von vorher enthaltene Bridges wieder entfernen (wenn sie bereits als Koordinator eingesetzt wurde) if ($string =~ m/IsZoneBridge="."/) { - for(my $i = 0; $i <= $#group; $i++) { - delete $group[$i] if ($group[$i] eq $udn.'_MR'); - } + @group = grep { $_ ne $udn.'_MR' } @group; } } @@ -9563,7 +9557,7 @@ sub SONOS_getSonosPlayerByUDN(;$) { return SONOS_getSonosPlayerByName(); } - SONOS_Log $udn, 0, "The Method 'SONOS_getSonosPlayerByUDN' cannot find the FHEM-Device according to '".(defined($udn) ? $udn : 'undef')."'. This should not happen!"; + SONOS_Log undef, 0, "The Method 'SONOS_getSonosPlayerByUDN' cannot find the FHEM-Device according to '".(defined($udn) ? $udn : 'undef')."'. This should not happen!"; return undef; } diff --git a/fhem/FHEM/lib/UPnP/ControlPoint.pm b/fhem/FHEM/lib/UPnP/ControlPoint.pm index 88a5271d4..e52ef52ae 100644 --- a/fhem/FHEM/lib/UPnP/ControlPoint.pm +++ b/fhem/FHEM/lib/UPnP/ControlPoint.pm @@ -51,6 +51,7 @@ use constant DEFAULT_SUBSCRIPTION_URL => '/eventSub'; our @IGNOREIP; our @USEDONLYIP; our $LogLevel; +our $EnvPrefix; sub isIgnoreIP($) { my($ip) = @_; @@ -102,6 +103,7 @@ sub new { @IGNOREIP = @{$args{IgnoreIP}}; @USEDONLYIP = @{$args{UsedOnlyIP}}; $LogLevel = $args{LogLevel} || 0; + $EnvPrefix = $args{EnvPrefix} || $SOAP::Constants::PREFIX_ENV; my $reuseport = $args{ReusePort}; $reuseport = 0 if (!defined($reuseport)); @@ -709,6 +711,7 @@ sub queryStateVariable { my $result; if ($SOAP::Lite::VERSION >= 0.67) { $result = SOAP::Lite + ->envprefix($EnvPrefix) ->ns("u") ->uri('urn:schemas-upnp-org:control-1-0') ->proxy($self->controlURL) @@ -718,6 +721,7 @@ sub queryStateVariable { ->value($name)); } else { $result = SOAP::Lite + ->envprefix($EnvPrefix) ->uri('urn:schemas-upnp-org:control-1-0') ->proxy($self->controlURL) ->call('QueryStateVariable' => @@ -880,12 +884,12 @@ sub new { if ($SOAP::Lite::VERSION >= 0.67) { return bless { _service => $service, - _proxy => SOAP::Lite->ns("u")->uri($service->serviceType)->proxy($service->controlURL), + _proxy => SOAP::Lite->envprefix($EnvPrefix)->ns("u")->uri($service->serviceType)->proxy($service->controlURL), }, $class; } else { return bless { _service => $service, - _proxy => SOAP::Lite->uri($service->serviceType)->proxy($service->controlURL), + _proxy => SOAP::Lite->envprefix($EnvPrefix)->uri($service->serviceType)->proxy($service->controlURL), }, $class; } }