[Modul] ONVIF Profil-S und T für IP-Kameras und Encoder

SDK Version Version
License Check Style Run Tests
SpendenWunschliste

ONVIF Profil S, T & G Library

Einbinden von ONVIF kompatiblen Geräten in IPS.

Inhaltsverzeichnis


1. Vorbemerkungen

Zur Library

Diese Library wurde nicht dazu entwickelt komplett den Profil Spezifikationen S, T & G zu entsprechen oder deren gesamten Funktionsumfang abzubilden.
Vielmehr liegt der Schwerpunkt auf eine einfache und unkomplizierte Integration bestimmter Bestandteile (LiveStream, Steuerung) und Funktionen (Events, Digital Ein-/Ausgänge) in Symcon.
Dadurch ist es auch möglich Geräte in Symcon einzubinden welche ihrerseits die Spezifikationen nicht vollständig oder nicht korrekt umsetzen.
Dennoch wird geprüft ob Geräte sich nicht an verpflichtende Funktionen halten und diese als Popup in der Konfiguration der IO-Instanzen gemeldet.
Dies ist kein Fehler, sondern ein beabsichtigtes Verhalten.


Zur Integration von Geräten

Es werden Instanzen zum auffinden (Discovery) und einrichten (Konfigurator) von Geräten in Symcon bereitgestellt.
Diese Instanzen werden nur korrekt funktionieren, wenn die betreffenden Geräte entsprechend Konfiguriert wurden.
So gibt es Geräte bei welchen am Werk z.B. das ONVIF Protokoll oder ONVIF Discover deaktiviert ist.
Oder wo eine entsprechende Zugangsberechtigung erstellt bzw. erweitert werden muss.
Eine Konfiguration der Geräte über Symcon ist in dieser Library aktuell nicht vorgesehen.
Unerlässlich ist eine korrekte Uhrzeit auf den Geräten, da eine Authentifizierung sonst fehlschlägt.
Es wird dringend empfohlen vor der Integration in IPS folgende Parameter in den Geräten fertig zu konfigurieren und ggfls. zu testen:

  • Netzwerk-Schnittstelle (IP-Adresse)
  • Auffindbarkeit / Discovery über ONVIF aktivieren
  • Zugangsdaten (u.U. eigene für ONVIF)
    • Die Zugangsdaten sollten bei allen Geräten identisch sein.
  • Zeitsynchronisation
    • Nach Möglichkeit sollten die Geräte und der Symcon Host die Uhrzeit aus der gleichen Quelle beziehen (NTP-Server).
  • PTZ-Vorpositionen / Szenen (sofern vorhanden)
  • h264-Profile bzw. Media-Profile für ONVIF
  • Sinnvolle Namen der Videoquellen, der Media-Profile und der Ein-/Ausgänge, sofern die Geräte das umbenennen unterstützen.

Hinweise zum Symcon-System / Host

Die Maximale Anzahl der gleichzeitig verwendbaren RTSP-Streams hängt von der Symcon Lizenz ab. Bitte hierzu die Funktionsübersicht der Editionen beachten.


Folgendes gilt nicht für reine Profil T Geräte:

Um Ereignisse der Geräte ressourcenschonend in Symcon zu verarbeiten, werden diese vom Gerät abonniert. Dazu wird beim abonnieren eine Zieladresse an das Gerät übertragen, an welches es auftretende Ereignisse senden soll.
Die Zieladresse ist ein Webhook, welcher pro IO-Modul automatisch erzeugt wird.
Beim anlegen der IO-Instanz wird automatisch nur der interne WebServer von Symcon auf Port 3777 eingetragen.
Die IP-Adresse auf welchem Symcon die Daten empfängt wird automatisch ermittelt.

Bei System mit aktiven NAT-Support funktioniert die automatische Erkennung der eigenen IP-Adresse nicht.
In dem Fall wird automatisch die NATPublicIP aus den Symcon-Spezialschaltern benutzt.
Auch bei Systemen mit aktiven NAT-Support wird extern automatisch nur der Port 3777 beim anlegen von IO-Instanzen unterstützt.

Sollte es nötig sein, so können bei Bedarf die eigene IP und der Port, sowie die Verwendung von https anstatt http, in den IO-Instanzen unter Experteneinstellungen geändert und fixiert werden.


Damit Geräte über das Discovery-Modul gefunden werden können, müssen bei in gerouteten Netzen und bei NAT Systemen Multicast-Pakete korrekt weitergeleitet werden.
Discovery funktioniert nicht in einem Docker Container welcher per NAT angebunden ist. Diese Konstellation wird aufgrund der fehlenden Multicast Fähigkeiten von Docker nicht unterstützt.
Für das Discovery werden Pakete über die Multicast-Adresse 239.255.255.250 auf Port 3702 gesendet und auf UDP Port 3703 empfangen.


2. Voraussetzungen

  • IP-Symcon ab Version 7.0
  • Kameras oder Video-Encoder mit ONVIF Profil S und/oder Profil T & G Unterstützung.

3. Software-Installation

Über den ‚Module-Store‘ in IPS das Modul ‚ONVIF‘ hinzufügen.
Bei kommerzieller Nutzung (z.B. als Errichter oder Integrator) wenden Sie sich bitte an den Autor.
Module-Store

4. Enthaltende Module

  • ONVIF Discovery (Dokumentation)
    Erkennt ONVIF kompatible Geräte innerhalb des lokalen LAN.
    Funktioniert nicht in einem Docker Container welcher per NAT angebunden ist
  • ONVIF Configurator (Dokumentation)
    Unterstützt beim Einrichten der verschiedenen Instanzen für ein ONVIF-Gerät.
  • ONVIF IO (Dokumentation)
    Stellt die Verbindung zu einem ONVIF-Gerät her.
  • ONVIF Media Stream (Dokumentation)
    Konfiguriert ein IPS Medien-Objekt (RTSP-Stream) anhand der Geräte-Fähigkeiten.
  • ONVIF Image Grabber (Dokumentation)
    Lädt Snapshots (Standbilder) von dem Gerät und legt es in einem Media-Objekt ab.
  • ONVIF Digital Input (Dokumentation)
    Bildet die Digitalen Eingänge in Symcon ab.
  • ONVIF Digital Output (Dokumentation)
    Bildet Digitale Ausgänge (Relays) in Symcon ab.
  • ONVIF Events (Dokumentation)
    Bildet empfangbare ONVIF-Ereignisse in Symcon ab.
  • ONVIF Recording (Dokumentation)
    Anzeige und Steuerung von vom Gerät verwalteten Aufzeichnungen.

5. Anhang

1. GUID der Module

Modul Typ Prefix GUID
ONVIF Discovery Discovery ONVIF {3E7839DC-5CC9-30A0-F48A-58DF2339EADD}
ONVIF Configurator Konfigurator ONVIF {C6A79C49-19D5-8D45-FFE5-5D77165FAEE6}
ONVIF IO IO ONVIF {F40CA9A7-3B4D-4B26-7214-3A94B6074DFB}
ONVIF Media Stream Gerät ONVIF {FA889450-38B6-7E20-D4DC-F2C6D0B074FB}
ONVIF Image Grabber Gerät ONVIF {18EA97C1-3CEC-80B7-4CAA-D91F8A2A0599}
ONVIF Events Gerät ONVIF {62584C2E-4542-4EBF-1E92-299F4CF364E4}
ONVIF Input Gerät ONVIF {73097230-1ECC-FEEB-5969-C85148DFA76E}
ONVIF Output Gerät ONVIF {A44B3114-1F72-1FD1-96FB-D7E970BD8614}
ONVIF Recording Gerät ONVIF {24EE27C1-F77B-4EEE-9C9E-C53C674EFF47}

2. Changelog

siehe nächster Beitrag


3. Spenden

Die Library ist für die nicht kommerzielle Nutzung kostenlos, Schenkungen als Unterstützung für den Autor werden hier akzeptiert:

Wunschliste

6. Lizenz

IPS-Modul:
CC BY-NC-SA 4.0

1 „Gefällt mir“

2. Changelog

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.
  • Unterstützung für Profil G (Recording).
  • Neue Instanz ONVIF Recording.

Version 2.17 (Dies ist die letzte Version für IPS kleiner Version 7.0)

  • Weitere Prüfungen in der Auswertungen von Gerätefähigkeiten eingebaut um Fehler vorzubeugen.

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:

  • Lesen der Fähigkeiten eines Gerätes in der IO Instanz verbessert.
  • IO Instanz schreibt Warnungen in das Meldungslog.
  • Vorhandene Fehlermeldungen bei der Kommunikation enthalten jetzt den Funktionsnamen bei welchem er Fehler aufgetreten ist.
  • Falsche Zeitstempel in Antworten von Geräten (TerminationTime) konnten zu Fehlern führen.

Version 2.10:

  • Discovery Instanz hat bei Geräten mit Port 80xx nicht mehr funktioniert.
  • Änderungen an der IO-Instanz:
    • Möglichkeit die Geräte-URL im Browser zu öffnen.
    • Die Art der Ereignisverarbeitung kann eingestellt werden.
    • Experteneinstellungen für Abonnieren um erste Abbruchzeit (Subscribe Timeout) und Zeitüberschreitung des ersten Ereignis (Timeout nach Subscribe) erweitert.
    • Experteneinstellungen für Ereignisse abfragen (PullPoint) hinzugefügt.
    • Geräteinformationen um Informationen zur Ereignisverarbeitung ergänzt.
    • Das Intervall zum erneuern der Registrierung für Ereignisse ist nicht mehr fest auf 55 Sekunden eingestellt, sondern wird automatisch durch das Feld TerminationTime aus der Antwort der Geräte berechnet.

Version 2.00:

  • Verbindungsaufbau des IO überarbeitet.
  • Wechsel von PHP-Streams auf CURL zur Unterstützung von HTTP digest Authentifizierung.
  • Sonderzeichen in Passwörtern und auch Benutzernamen sind jetzt möglich. *1
  • Unterstützung von ONVIF T Profil. *1
  • Damit einher gehende Unterstützung von PullMessages für reine Profil T Geräte.
  • Unterstützung der Rule & Analytics Funktionen für die Events. *1
  • IO Instanz zeigt Geräte-Informationen und dessen erkannte Fähigkeiten an.
  • Die Events in der IO-Instanz zeigen alle gemeldeten Quellen und Daten der Events an.
  • Auswertung von allen Quellen und allen Daten der Events. (Achtung, hierdurch können neue Statusvariablen angelegt werden und alte ungültig werden!)
  • Konfigurator bietet jetzt von allen Events das Parent-Topics zum Erstellen einer Events-Instanz an.
  • Verbesserte Erkennung von Relais und Digitalen Eingängen.
  • Childs versuchen keine Daten mehr abzurufen, wenn der IO noch nicht fertig initialisiert ist.
  • Übersetzungen ergänzt / verbessert.

*1 Sofern von den Geräten untertützt.

Version 1.23:

  • Image im Testbereich des ImageGrabber wurde nicht aktualisiert.

Version 1.20:

  • Fehlermeldung in der Discovery Instanz bei ungültiger Anmeldung wird durch bestätigen mit ‚Ignorieren‘ nicht mehr angezeigt, bis die Anmeldedaten geändert wurden.
  • Es wird eine Meldung angezeigt, wenn die Discovery Instanz nicht funktioniert (Docker + NAT).
  • Experteneinstellungen in den IO-Instanzen ermöglichen das umstellen auf http/https und ändern der IP und Port vom Ereignis-Hook.
  • Aktion für Digital Output war defekt.

Version 1.10:

  • Beta Release für Symcon 6.0
  • Aktionen für Kamerasteuerung, Snapshot des Image Grabber und für Ansteuerung der Ausgänge.

Version 1.08:

  • Fehlermeldungen vom Image Grabber, wenn IO nicht verbunden war.

Version 1.07:

  • Die Ansteuerung der PTZ-Kommandos kann invertiert werden.
  • Eventuelle Fehlermeldung wenn die Option Variablenprofil benutzt Namen der Szenen aktiviert war.

Version 1.06:

  • Eventuell wurden die Topics eines Events falsch ermittelt.
  • Statusvariablen für Topics mit Sonderzeichen wurden nicht korrekt angelegt.

Version 1.05:

  • Fehlermeldung wenn Geräte keinen Namen für PTZ-Szenen geliefert haben.
  • Fehlermeldung im IO wenn Geräte keine Auflösung, kein Encoding oder keine Bitrate gemeldet haben.

Version 1.02:

  • ONVIF_StopPTZ und das Anhalten beim loslassen der PTZ-Overlay Steuerung hat bei einigen Geräten nicht funktioniert
  • Profile ONVIF.Time und ONVIF.Speed waren bei der Beschreibung vertauscht
  • Fehlende Übersetzungen ergänzt

Version 1.01:

  • Release für Symcon 5.5
  • Fehlende Übersetzungen ergänzt

Version 1.00:

  • Beta Release für Symcon 5.5

Halo Michael,

habe nochmal versucht ONVIF Kameras über die Instanzenkonfiguration einzubeinden
es kommt jedoch nachfolgende Fehlermeldung.

Nachtrag:
Ist in der Discovery beim anlagen der Instanz ID


Abort Processing during Fatal-Error: strpos(): Non-string needles will be interpreted as strings in the future.
Use an explicit chr() call to preserve the current behavior
Error in Script C:\ProgramData\Symcon\modules\.store\de.nall.chan.onvif\ONVIF IO\module.php on Line 287 (Code: -32603)

Sorry, Bahnhof.
Es gibt keine ONVIF Kamera Instanz.

Ah, also wenn du in der Discovery Instanz ein ONVIF Konfigurator für ein Gerät erzeugst, kommt der Fehler?
Sende mir bitte einmal den Debug der Discovery Instanz.
Und bitte den IO manuell für dieses Gerät anlegen und mir den Debug vom übernehmen der Einstellung ebenfalls zusenden.
Michael

Hallo Michael,

super Idee Dein ONVIF-Modul, habe mich mal zu Beta-Tester gemacht. :wink:
Das Modul habe ich zum Laufen bekommen, allerdings komme ich mit den Events nicht zurecht, da fehlt mir ein kleines Beispiel wie ich an die Bewegungmeldung der Kamera komme.

Die Meldung an sich scheint zu funktionieren, sowohl die Hersteller-Anwendung als auch der ONVIF-Manager bekommen diese angezeigt.

Gruß Mirco

Beispiele sind schwer, da jeder Hersteller die Events anders benennt.
Du kannst aus der Drop-Down Liste in der Instanz auswählen was du haben willst, bzw. ab welcher Ebene.
Sofern es dann eintritt, wird eine Variable automatisch erzeugt.
Michael

Danke guter Hinweis, wieder einen Schritt weiter.
Im ONVIF Event, der Knopf Gateway ändern, dann konnte ich auch den Ereignis-Pfad auswählen.

Ich bekomme ca. 1 mal je Minute die Meldung:

23.03.2020, 16:45:53 | ONVIF IO | Connection lost
23.03.2020, 16:45:53 | TimerPool | ONVIF IO (RenewSubscription): <br />
<b>Warning</b>: <br />
<b>Warning</b>: Error Fetching http headers in <b>/var/lib/symcon/modules/.store/de.nall.chan.onvif/ONVIF IO/module.php</b> on line <b>322</b><br />
in <b>/-</b> on line <b>1</b><br />

Vielleicht hast Du ja ne Idee.

Zeig mal bitte die IO Instanz, wenn die Verbindung neu aufgebaut wurde.
Da stehen dann z.b. ein Hook und die Subscribtion.
Der Debug der Instanz vom Verbindungsaufbau und dann 1 Minuten beim Verbindung verloren hätte ich auch gerne.
Vermutlich wird dort etwas nicht korrekt erkannt im Modul.
Michael

So schaut die IO Instanz aus :


und das Log
(deleted)

Vielen Dank für Deine Mühe

Diese Fehlermeldung fange ich jetzt ab, allerdings wird das wohl nicht die Lösung sein.
Bitte updaten und bitte Feedback geben ob jetzt eine sinnvolle (Fehler)-Meldung im IO und IPS-Logfile/Meldungsfenster kommt.

Auf dein folgenden Screenshot sieht man, dass der Ereignis-Hook defekt war.
Eventuell war das die Ursache für den Fehler oben.
Bitte einmal updaten und Feedback geben :slight_smile:

Michael

Die Meldung sieht jetzt so aus.
Muss ich nach dem Update aus dem Modulestore nochwas machen?


23.03.2020, 20:31:58 | TimerPool | ONVIF IO Kamera1 (RenewSubscription): <br />
<b>Warning</b>:  <br />
<b>Warning</b>:  Error Fetching http headers in <b>/var/lib/symcon/modules/.store/de.nall.chan.onvif/ONVIF IO/module.php</b> on line <b>438</b><br />
 in <b>/-</b> on line <b>1</b><br />

dump (4).txt (91.1 KB)

Irgendwie schafft er da nicht zu ermitteln wie der die ConsumerAddress für den Webhook ist. :banghead:

Bitte mal ganz stumpf eine falsche IP-Adresse im IO eintragen und übernehmen.
Wenn der IO dann in Fehler geht, das Debug öffnen, die IP wieder zurück ändern und übernehmen.

Eventuell wird dann die Adresse vom Webhook mal mit IP erstellt :rolleyes:
Das Debug dann bitte noch mal hochladen.

Danke,
Michael

Aus http://192.168.0.55:8000/onvif/device_service
habe ich http://192.168.0.5:8000/onvif/device_service gemacht, Änderungen übernommen und wieder zurück.

dump (6).txt (190 KB)

Oh Mann… Was bin ich blind.
Im Debug steht das du NAT aktiv hast.
Dann musst du die externe IP vom Host unter dem dein Container läuft unten im IO eintragen.
Das bessere ich aus, damit dort dann eine Meldung kommt, wenn das Feld leer ist.
Michael

Problem sitzt wie immer vor dem Bildschirm, ich hatte den Schalter NAT aktiviert (irgendwas testen :confused:) aber nicht zurück gedreht.
Jetzt habe ich mein Event:cool:

Vielen Dank für Deine Hilfe.

Das RenewSubscription bleibt allerdings.

23.03.2020, 21:39:45 | TimerPool | ONVIF IO Kamera1 (RenewSubscription): <br />
<b>Warning</b>: <br />
<b>Warning</b>: Error Fetching http headers in <b>/var/lib/symcon/modules/.store/de.nall.chan.onvif/ONVIF IO/module.php</b> on line <b>438</b><br />
in <b>/-</b> on line <b>1</b><br />

Okay, dann bitte noch mal ein Debug :slight_smile:
Wie zuvor, beim übernehmen der Einstellungen/Verbindungsaufbau und eine wenn der Fehler auftritt.
Michael

Hab ich schon gesagt wie cool das ist das Du Dich direkt darum kümmerst :smiley:

dump (Verbindung hergestellt).txt (171 KB)

dump (Connection lost).txt (91.1 KB)

Danke.

Allerdings komme ich da heute nicht mehr weiter.
Ich vermute irgendwas hält sich wieder nicht an den Standard.
Ich muss da morgen noch mal die Specs wälzen. Keine Ahnung ob ich wieder etwas falsch verstanden habe (allerdings funktionieren meine Geräte) oder deine Kamera ’ IPC ’ sich nicht an die Specs hält.

Michael

Hallo Michael,

evtl erleichtert Dir das die Suche.

Mit dem ONVIF Device Manager habe ich folgende Informationen zu den Kameras (die Haben sich wohl vermehrt) erhalten:
Gekauft hab ich von Rolink RLC-520 PoE und RLC-410W
ONVIF Version: ist bei Beiden 2.01