diff --git a/ONVIF Configurator/README.md b/ONVIF Configurator/README.md index 5fe272a..12b0735 100644 --- a/ONVIF Configurator/README.md +++ b/ONVIF Configurator/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) diff --git a/ONVIF Digital Input/README.md b/ONVIF Digital Input/README.md index c662b03..17e3008 100644 --- a/ONVIF Digital Input/README.md +++ b/ONVIF Digital Input/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) diff --git a/ONVIF Digital Output/README.md b/ONVIF Digital Output/README.md index d4d236b..72c4b5c 100644 --- a/ONVIF Digital Output/README.md +++ b/ONVIF Digital Output/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) diff --git a/ONVIF Discovery/README.md b/ONVIF Discovery/README.md index 751aecd..cf83f2c 100644 --- a/ONVIF Discovery/README.md +++ b/ONVIF Discovery/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) diff --git a/ONVIF Discovery/module.php b/ONVIF Discovery/module.php index cc98610..93f9071 100644 --- a/ONVIF Discovery/module.php +++ b/ONVIF Discovery/module.php @@ -254,7 +254,7 @@ protected function DiscoverDevices(): array } $this->SendDebug('Receive', $response, 0); $xml = new DOMDocument(); - if (false === $xml->loadXML($response)) { + if (false === @$xml->loadXML($response)) { $this->SendDebug('Error on parse XML', $response, 0); continue; } @@ -298,7 +298,7 @@ protected function DiscoverDevices(): array } $this->SendDebug('Receive', $response, 0); $xml = new DOMDocument(); - if (false === $xml->loadXML($response)) { + if (false === @$xml->loadXML($response)) { $this->SendDebug('Error on parse XML', $response, 0); continue; } diff --git a/ONVIF Events/README.md b/ONVIF Events/README.md index 10080cc..1a4654a 100644 --- a/ONVIF Events/README.md +++ b/ONVIF Events/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) diff --git a/ONVIF IO/README.md b/ONVIF IO/README.md index 04ef6fa..ebac7a9 100644 --- a/ONVIF IO/README.md +++ b/ONVIF IO/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) diff --git a/ONVIF IO/module.php b/ONVIF IO/module.php index b436011..a28a466 100644 --- a/ONVIF IO/module.php +++ b/ONVIF IO/module.php @@ -784,6 +784,8 @@ protected function StartConnection() $AllEventProperties = array_merge($AllEventProperties, $SupportedRuleTopicData); } } + //$this->SendData($XAddr[\ONVIF\NS::Analytics], \ONVIF\WSDL::Analytics, 'GetRules', true); VideoAnalyticsConfiguration + //$this->SendData($XAddr[\ONVIF\NS::Analytics], \ONVIF\WSDL::Analytics, 'GetSupportedRules', true); Video Analytics configuration } else { if (count($AnalyticsTokens)) { $this->Warnings = array_merge($this->Warnings, [$this->Translate('Analytics events could not be retrieved. The device reported AnalyticsTokens, but the Analytics namespace and XAddr were not reported!')]); @@ -1268,7 +1270,7 @@ protected function SetSynchronizationPoint(): bool { $SubscriptionReference = $this->ReadAttributeString(\ONVIF\IO\Attribute::SubscriptionReference); if ($SubscriptionReference == '') { - $this->SendDebug('ERROR SetSynchronizationPoint', 'No SubscriptionReference', 0); + $this->SendDebug('ERROR ' . __FUNCTION__, 'No SubscriptionReference', 0); $this->LogMessage($this->Translate('Call SetSynchronizationPoint with no SubscriptionReference'), KL_ERROR); return false; } @@ -1277,7 +1279,12 @@ protected function SetSynchronizationPoint(): bool $SubscriptionId = $this->ReadAttributeString(\ONVIF\IO\Attribute::SubscriptionId); if ($SubscriptionId != '') { $xml = new DOMDocument(); - $xml->loadXML($SubscriptionId); + $validXML = @$xml->loadXML($SubscriptionId); + if (!$validXML) { + $this->LogMessage($this->Translate('Malformed XML in ' . __FUNCTION__ . ' received'), KL_ERROR); + $this->SendDebug('ERROR ' . __FUNCTION__, $this->Translate('Malformed XML received'), 0); + return false; + } $ns = $xml->firstChild->namespaceURI; $name = $xml->firstChild->nodeName; $Header[] = new SoapHeader($ns, $name, new SoapVar($SubscriptionId, XSD_ANYXML), true); @@ -1300,7 +1307,7 @@ protected function Renew(): bool $this->lock(\ONVIF\IO\Property::EventHandler); $SubscriptionReference = $this->ReadAttributeString(\ONVIF\IO\Attribute::SubscriptionReference); if ($SubscriptionReference == '') { - $this->SendDebug('ERROR Renew', 'No SubscriptionReference', 0); + $this->SendDebug('ERROR ' . __FUNCTION__, 'No SubscriptionReference', 0); $this->LogMessage($this->Translate('Call Renew with no SubscriptionReference'), KL_ERROR); $this->unlock(\ONVIF\IO\Property::EventHandler); return false; @@ -1310,7 +1317,13 @@ protected function Renew(): bool $SubscriptionId = $this->ReadAttributeString(\ONVIF\IO\Attribute::SubscriptionId); if ($SubscriptionId != '') { $xml = new DOMDocument(); - $xml->loadXML($SubscriptionId); + $validXML = @$xml->loadXML($SubscriptionId); + if (!$validXML) { + $this->LogMessage($this->Translate('Malformed XML in ' . __FUNCTION__ . ' received'), KL_ERROR); + $this->SendDebug('ERROR ' . __FUNCTION__, $this->Translate('Malformed XML received'), 0); + $this->unlock(\ONVIF\IO\Property::EventHandler); + return false; + } $ns = $xml->firstChild->namespaceURI; $name = $xml->firstChild->nodeName; $Header[] = new SoapHeader($ns, $name, new SoapVar($SubscriptionId, XSD_ANYXML), true); @@ -1329,7 +1342,7 @@ protected function Renew(): bool return false; } if (!is_object($RenewResult)) { - $this->SendDebug('ERROR Renew', 'No Response', 0); + $this->SendDebug('ERROR ' . __FUNCTION__, 'No Response', 0); $this->LogMessage($this->Translate('Error Renew with no Response'), KL_ERROR); $this->SetStatus(IS_EBASE + 3); $this->isSubscribed = false; @@ -1365,7 +1378,13 @@ protected function Unsubscribe(): bool $Header = $this->GenerateSOAPHeader($Action, $SubscriptionReference); if ($SubscriptionId != '') { $xml = new DOMDocument(); - $xml->loadXML($SubscriptionId); + $validXML = @$xml->loadXML($SubscriptionId); + if (!$validXML) { + $this->LogMessage($this->Translate('Malformed XML in ' . __FUNCTION__ . ' received'), KL_ERROR); + $this->SendDebug('ERROR ' . __FUNCTION__, $this->Translate('Malformed XML received'), 0); + $this->unlock(\ONVIF\IO\Property::EventHandler); + return false; + } $ns = $xml->firstChild->namespaceURI; $name = $xml->firstChild->nodeName; $Header[] = new SoapHeader($ns, $name, new SoapVar($SubscriptionId, XSD_ANYXML)); @@ -1392,7 +1411,12 @@ protected function GetEventProperties(): false|array } $xml = new DOMDocument(); - $xml->loadXML($Response); + $validXML = @$xml->loadXML($Response); + if (!$validXML) { + $this->LogMessage($this->Translate('Malformed XML in ' . __FUNCTION__ . ' received'), KL_ERROR); + $this->SendDebug('ERROR ' . __FUNCTION__, $this->Translate('Malformed XML received'), 0); + return false; + } $xpath = new DOMXPath($xml); foreach (\ONVIF\NS::Namespaces as $NSKey => $Namespace) { $EventNS[$NSKey] = $xml->lookupPrefix($Namespace); @@ -1814,6 +1838,7 @@ protected function GetSupportedAnalyticsModules(string $AnalyticsToken): false|a } return $this->DecodeAnalyticsAndRuleResponse($Response); } + protected function GetSupportedRules(string $AnalyticsToken): false|array { $XAddr = $this->ReadAttributeArray(\ONVIF\IO\Attribute::XAddr); @@ -1827,10 +1852,16 @@ protected function GetSupportedRules(string $AnalyticsToken): false|array } return $this->DecodeAnalyticsAndRuleResponse($Response); } + protected function DecodeAnalyticsAndRuleResponse(string $ResponseXML): array { $xml = new DOMDocument(); - $xml->loadXML($ResponseXML); + $validXML = @$xml->loadXML($ResponseXML); + if (!$validXML) { + $this->LogMessage($this->Translate('Malformed XML in ' . __FUNCTION__ . ' received'), KL_ERROR); + $this->SendDebug('ERROR ' . __FUNCTION__, $this->Translate('Malformed XML received'), 0); + return []; + } $xpath = new DOMXPath($xml); foreach (\ONVIF\NS::Namespaces as $NSKey => $Namespace) { $EventNS[$NSKey] = $xml->lookupPrefix($Namespace); @@ -1851,6 +1882,7 @@ protected function DecodeAnalyticsAndRuleResponse(string $ResponseXML): array } return $TopicData; } + protected function GetServices(): bool { $Params = [ @@ -1869,9 +1901,13 @@ protected function GetServices(): bool } $XAddr = $this->ReadAttributeArray(\ONVIF\IO\Attribute::XAddr); $xml = new DOMDocument(); - $xml->loadXML($Response); + $validXML = @$xml->loadXML($Response); + if (!$validXML) { + $this->LogMessage($this->Translate('Malformed XML in ' . __FUNCTION__ . ' received'), KL_ERROR); + $this->SendDebug('ERROR ' . __FUNCTION__, $this->Translate('Malformed XML received'), 0); + return false; + } $xPath = new DOMXPath($xml); - foreach ($ServicesResult as $Service) { $XAddr[$Service['Namespace']] = parse_url($Service['XAddr'], PHP_URL_PATH); $NSKey = array_search($Service['Namespace'], \ONVIF\NS::Namespaces); @@ -2178,8 +2214,9 @@ protected function ProcessHookData(): void protected function DecodeNotificationMessage(string $NotificationMessageXML): bool { $xml = new DOMDocument(); - $xml->loadXML($NotificationMessageXML); - if ($xml === false) { + /** @var mixed $validXML */ + $validXML = @$xml->loadXML($NotificationMessageXML); + if (!$validXML) { $this->LogMessage($this->Translate('Malformed XML event received'), KL_ERROR); $this->SendDebug('Event', $this->Translate('Malformed XML event received'), 0); return false; diff --git a/ONVIF Image Grabber/README.md b/ONVIF Image Grabber/README.md index 25107a5..66bbe69 100644 --- a/ONVIF Image Grabber/README.md +++ b/ONVIF Image Grabber/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) diff --git a/ONVIF Media Stream/README.md b/ONVIF Media Stream/README.md index 7014152..2f15822 100644 --- a/ONVIF Media Stream/README.md +++ b/ONVIF Media Stream/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) diff --git a/ONVIF Recording/README.md b/ONVIF Recording/README.md index 6c88e24..db6aeec 100644 --- a/ONVIF Recording/README.md +++ b/ONVIF Recording/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) @@ -48,10 +48,10 @@ __Konfigurationsseite__: ![Config](imgs/Config.png) -| Name | Text | Beschreibung | -| ----------- | -------------------------- | ------------------------------------------------------------------------------------------------------------- | -| EventTopic | Ereignisse für die Aufzeichnung | Auswahl des Ereignis-Pfad für Recording-Jobs (*). | -| EmulateStatus | Status simulieren | Wenn aktiviert, wird die Statusvariable in Symcon auf den neuen Wert gesetzt, sobald ein Steuerbefehl erfolgreich übertragen wurde. Sonst wird nur über ankommende Ereignisse gesetzt. | +| Name | Text | Beschreibung | +| ------------- | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| EventTopic | Ereignisse für die Aufzeichnung | Auswahl des Ereignis-Pfad für Recording-Jobs (*). | +| EmulateStatus | Status simulieren | Wenn aktiviert, wird die Statusvariable in Symcon auf den neuen Wert gesetzt, sobald ein Steuerbefehl erfolgreich übertragen wurde. Sonst wird nur über ankommende Ereignisse gesetzt. | (*) _Durch eine Änderung des Ereignis-Pfad werden die alten Statusvariablen hinfällig und müssen manuell gelöscht werden._ @@ -61,8 +61,8 @@ Der Ereignis-Pfad wird für Recordings Jobs versucht automatisch zu erkennen, fu Die Statusvariablen werden automatisch angelegt und erhalten das `~Switch` Profil. Das Löschen einzelner Statusvariablen kann zu Fehlfunktionen führen. -| Name | Typ | Beschreibung | -| --------------------------------------------------- | ---- | -------------------------------------------------------------------------- | +| Name | Typ | Beschreibung | +| ---------------------------------------------------------- | ---- | ----------------------------------------------------------------------- | | je nach Name des RecordingJob-Token aus dem Onvif-Ereignis | bool | Für jeden bekannten Job wird eine passende Variable in Symcon erstellt. | ## 6. WebFront diff --git a/README.md b/README.md index 9a6f436..0449756 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [![SDK](https://img.shields.io/badge/Symcon-PHPModul-red.svg)](https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/) -[![Version](https://img.shields.io/badge/Modul%20Version-2.20-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) +[![Version](https://img.shields.io/badge/Modul%20Version-2.21-blue.svg)](https://community.symcon.de/t/modul-onvif-profil-s-fuer-ip-kameras-und-encoder/52036) [![Version](https://img.shields.io/badge/Symcon%20Version-7.0%20%3E-green.svg)](https://www.symcon.de/service/dokumentation/installation/migrationen/v60-v61-q1-2022/) [![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-green.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/) [![Check Style](https://github.com/Nall-chan/ONVIF/workflows/Check%20Style/badge.svg)](https://github.com/Nall-chan/ONVIF/actions) @@ -143,6 +143,9 @@ Für das Discovery werden Pakete über die Multicast-Adresse `239.255.255.250` a ---------- ### 2. Changelog +**Version 2.21** + - Verbesserte Fehlerbehandlung bei falschen/defekten/korrupten XML Antworten von Geräten. + **Version 2.20** - Voraussetzung für IP-Symcon Version 7.0 oder neuer. - IO zeigt unter Geräteinformationen die Scopes und Adressen der Services an. diff --git a/library.json b/library.json index f57fcd0..0a58ff5 100644 --- a/library.json +++ b/library.json @@ -6,7 +6,7 @@ "compatibility": { "version": "7.0" }, - "version": "2.20", - "build": 220, - "date": 1724429457 + "version": "2.21", + "build": 221, + "date": 1729766727 } \ No newline at end of file diff --git a/libs/wsdl.php b/libs/wsdl.php index a9a2da0..2b291db 100644 --- a/libs/wsdl.php +++ b/libs/wsdl.php @@ -101,6 +101,7 @@ class Scopes public const ProfileT = 'onvif://www.onvif.org/Profile/T'; public const ProfileG = 'onvif://www.onvif.org/Profile/G'; public const ProfileS = 'onvif://www.onvif.org/Profile/Streaming'; + public const ProfileM = 'onvif://www.onvif.org/Profile/M'; } class EventHandler @@ -137,16 +138,19 @@ class Profile public const S = 2; // Streaming und WS-Event public const G = 4; // Recording (ohne streaming!) public const T = 8; // Streaming und pull point Event, Image Settings + public const M = 16; // Metadata (u.a. MQTT) private const ScopesToProfile = [ Scopes::ProfileS => self::S, Scopes::ProfileG => self::G, - Scopes::ProfileT => self::T + Scopes::ProfileT => self::T, + Scopes::ProfileM => self::M ]; private const ProfileBitToChar = [ self::NONE => 'Fallback S', self::S => 'S', self::G => 'G', - self::T => 'T' + self::T => 'T', + self::M => 'M' ]; public int $Profile; public function __construct(array $Scopes = [])