From c7a8cc81b127bdf025cccfe85d32337f1f365002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Tr=C3=B6ger?= Date: Fri, 26 Jan 2024 07:54:30 +0100 Subject: [PATCH] no message --- ONVIF IO/locale.json | 1 + ONVIF IO/module.php | 27 ++++++++++++++++++++++----- README.md | 3 ++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/ONVIF IO/locale.json b/ONVIF IO/locale.json index 417b3f7..c38d852 100644 --- a/ONVIF IO/locale.json +++ b/ONVIF IO/locale.json @@ -42,6 +42,7 @@ "Address is invalid": "Adresse ungültig", "Failed to get scopes, device not ONVIF compliant!": "Scopes konnten nicht abgerufen werden, Gerät ist nicht ONVIF-konform!", "No profile in scopes, device not ONVIF compliant!": "Kein Profil in Scopes, Gerät nicht ONVIF-konform!", + "Failed to get GetProfiles on Media2 service. Device reported Media2 support, but does not support this service!": "Fehler beim laden von GetProfiles. Das Gerät meldet Media2 Unterstützung, unterstützt diesen Dienst aber nicht!", "Failed to get DeviceIO service capabilities. Device reported ONVIF T scope, but is not compliant!": "DeviceIO-Dienstfunktionen konnten nicht abgerufen werden. Das Gerät hat den ONVIF T-Scope gemeldet, ist aber nicht konform!", "Failed to get Media2 service capabilities. Device reported ONVIF T scope, but is not compliant!": "Fehler beim Abrufen der Media2-Dienstfunktionen. Das Gerät hat den ONVIF T-Scope gemeldet, ist aber nicht konform!", "Failed to get Imaging service capabilities. Device reported ONVIF T scope, but is not compliant!": "Imaging-Dienstfunktionen konnten nicht abgerufen werden. Das Gerät hat den ONVIF T-Scope gemeldet, ist aber nicht konform!", diff --git a/ONVIF IO/module.php b/ONVIF IO/module.php index 821c768..4698d08 100644 --- a/ONVIF IO/module.php +++ b/ONVIF IO/module.php @@ -615,6 +615,7 @@ protected function StartConnection() $this->WriteAttributeArray(\ONVIF\IO\Attribute::DigitalInputs, $DigitalInputs); // Wenn \ONVIF\WSDL::Media2 unterstützt + $Media2Supported = $XAddr[\ONVIF\NS::Media2] != ''; if ($XAddr[\ONVIF\NS::Media2]) { // 4c.ONVIF Request GetServiceCapabilities an \ONVIF\WSDL::Media2 $MediaCapabilities = $this->GetServiceCapabilities($XAddr[\ONVIF\NS::Media2], \ONVIF\WSDL::Media2); // noch ohne Funktion.. @@ -631,11 +632,9 @@ protected function StartConnection() } } // 4c.ONVIF Request GetProfiles an \ONVIF\WSDL::Media2 - if (!$this->GetProfiles2()) { - $this->SetStatus(IS_EBASE + 2); - return; - } - } else { + $Media2Supported = $this->GetProfiles2(); + } + if (!$Media2Supported) { // Wenn \ONVIF\WSDL::Media2 NICHT unterstützt // 4c.ONVIF Request GetServiceCapabilities an \ONVIF\WSDL::Media $MediaCapabilities = $this->GetServiceCapabilities($XAddr[\ONVIF\NS::Media], \ONVIF\WSDL::Media); // noch ohne Funktion.. @@ -1335,6 +1334,9 @@ protected function GetProfiles2(string $Token = null, string $ConfigurationEnume }); $H264VideoSourcesItems = []; foreach ($H264Profiles as $Profile) { + if (!array_key_exists('Configurations', $Profile)) { + continue; + } if (!array_key_exists('VideoEncoder', $Profile['Configurations'])) { continue; } @@ -1370,6 +1372,9 @@ protected function GetProfiles2(string $Token = null, string $ConfigurationEnume } $JPEGVideoSourcesItems = []; foreach ($JPEGProfiles as $Profile) { + if (!array_key_exists('Configurations', $Profile)) { + continue; + } if (!array_key_exists('VideoEncoder', $Profile['Configurations'])) { continue; } @@ -1396,14 +1401,26 @@ protected function GetProfiles2(string $Token = null, string $ConfigurationEnume if (isset($Profile['Configurations']['Analytics'])) { return true; } + return false; }); foreach ($AnalyticsProfiles as $AnalyticsProfile) { + if (!array_key_exists('Configurations', $AnalyticsProfile)) { + continue; + } + if (!array_key_exists('Analytics', $AnalyticsProfile['Configurations'])) { + continue; + } $Token = $AnalyticsProfile['Configurations']['Analytics']['token']; $Name = $AnalyticsProfile['Configurations']['Analytics']['Name']; $AnalyticsTokens[$Token] = $Name; } $this->SendDebug('AnalyticsTokens', $AnalyticsTokens, 0); $this->WriteAttributeArray(\ONVIF\IO\Attribute::AnalyticsTokens, $AnalyticsTokens); + if ((count($H264VideoSources) + count($JPEGVideoSources) + count($AnalyticsTokens)) == 0) { + $this->Warnings = array_merge($this->Warnings, [$this->Translate('Failed to get GetProfiles on Media2 service. Device reported Media2 support, but does not support this service!')]); + $this->LogMessage($this->Translate('Failed to get GetProfiles on Media2 service. Device reported Media2 support, but does not support this service!'), KL_WARNING); + return false; + } return true; } protected function GetProfiles(): bool diff --git a/README.md b/README.md index efe5c1b..fe35366 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,8 @@ Für das Discovery werden Pakete über die Multicast-Adresse `239.255.255.250` a **Version 2.15** - Wurde nur ein Service von dem Gerät gemeldet, so erzeugte der IO Fehlermeldungen. - + - Können die Stream-Profile von `ver20/media` nicht ermittelt werden, wo wird versucht die Stream-Profile vom `ver10/media` zu laden. Auch wenn das Gerät explizit `ver20/media` unterstützt. + **Version 2.13:** **(Dies ist die letzte Version für IPS kleiner Version 7.0)** - Lesen der Fähigkeiten eines Gerätes in der IO Instanz verbessert. - IO Instanz schreibt Warnungen in das Meldungslog.