ZoneMinder

Aus FHEMWiki
ZoneMinder
Zweck / Funktion
Integration mit Events und Kamerasteuerung der ZoneMinder API
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Thema
Modulname 70_ZoneMinder.pm
Ersteller DelMar (Forum /Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


ZoneMinder ist eine OpenSource Video-Überwachungssoftware. Das modulare Konzept ermöglicht die Integration von Kameras aller Art (IP, Analog, ...) und bietet Bewegungserkennung, verschiedene Aufnahmemodi und Alarmierung. Mehr Informationen zu Features findet man auf zoneminder.com, Informationen zur hier angebundenen API gibt es auf zoneminder.readthedocs.io.

Hinweise zum Betrieb mit FHEM

ZoneMinder bietet mehrere Arten der Integration, die einzeln in den Optionen aktiviert werden müssen. In der original Doku werden Kameras als Monitor bezeichnet.

Abhängigkeiten

Folgende Perl-Libs werden benötigt: libcrypt-mysql-perl

Alerting

Wenn ZoneMinder Bewegungen erkennt, wird die jeweilige Kamera für bestimmte Zeit in den Alarm-Modus versetzt. Damit auch andere Anwendungen diesen Alarmzustand auswerten können, muss in den Optionen im Tab System die Option OPT_TRIGGERS aktiviert werden. Rein technisch öffnet ZoneMinder mit dieser Option den TCP-Port 6802, zu welchem sich FHEM verbindet und unmittelbar über neue Ereignisse informiert wird. Das ZoneMinder-Wiki enthält detailierte Informationen dazu.

Aufzeichnung und Bewegungserkennung

Kameras in ZoneMinder kennen unterschiedliche Betriebsarten (Quelle):

  • None – Die Kamera ist deaktiviert. Streaming, Bewegungserkennung, Aufzeichnung und Alerting sind nicht möglich.
  • Monitor – Die Kamera wird nur für Live-Streaming verwendet. Bewegungserkennung, Aufzeichnung und Alerting sind nicht möglich.
  • Modect – steht für MOtion DEteCTtion. Sobald eine Bewegung erkannt wird, wird ein Event generiert und die Aufzeichnung gestartet.
  • Record – Das Kamerabild wird kontinuierlich aufgezeichnet. Dieser Modus kennt keine Bewegungserkennung.
  • Mocord – Das Kamerabild wird kontinuierlich aufgezeichnet. Bewegungen werden innerhalb der Aufnahme als Events markiert.
  • Nodect – steht für No DEteCTtion. Dieser Modus wurde für externe Trigger eingeführt. Es erfolgt keine Bewegungserkennung, die Aufzeichnung kann aber durch externe Trigger gestartet werden. Dies könnten eigene Bewegungsmelder sein, oder aber auch FHEM (Trigger an ZoneMinder zb über set ZM_Monitor_xyz Alarm on|off|on-for-timer <sekunden>).

Daneben kann pro Kamera die Bewegungserkennung auch noch explizit aktiviert und deaktiviert werden. Der Begriff Enabled/disabled kann hier irreführend sein, da nicht die Kamera als solche, sondern nur die Bewegungserkennung betroffen ist. Um eine Kamera zu deaktivieren, muss der Betriebsmodus auf None gestellt werden.

Einbindung in FHEM

Das FHEM Modul kann in drei Ausbaustufen verwendet werden.

Events und Alerting

Mit folgender definition wird nur das weitergeben von Events nach ZM aktiviert:

define zm ZoneMinder <ZM-Host>

Beispiel

define zm ZoneMinder 192.168.1.1

Diese IP wird - wie oben beschrieben - verwendet, um den Event-Port von ZoneMinder zu öffnen. In den ZoneMinder Optionen muss hierfür ZM_TRIGGERS aktiv sein.

ZoneMinder 1.32 und später

Ab ZoneMinder 1.32 muss das folgende Attribut gesetzt sein, damit sich dieses FHEM-Modul an der ZoneMinder API anmelden kann.

attr zm apiVersion post132

ZoneMinder API

Um Kamera-Modi in FHEM verändern und auslesen zu können, muss auf die ZoneMinder-API zugegriffen werden. Die Authentifizierung hierfür besteht (noch) aus username und password. Aus Sicherheitsgründen bietet es sich evtl an, einen eigenen User für FHEM einzurichten, der nur die nötigen Rechte hat.

define zm ZoneMinder <ZM-Host> <ZM-Username> <ZM-Password>

Mit diesen Parametern kann außerdem direkt von ZoneMinder nach FHEM gestreamt werden und das Reading streamUrl wird verfügbar. Wichtig: diese Stream-URL enthält username und password als GET-Parameter. Diese sind also in der URL sichtbar, was tatsächlich ein Sicherheitsproblem darstellt.

Damit die API verwendet werden kann, muss in den ZoneMinder Optionen OPT_USE_API aktiviert sein.

Kameramodi setzen

ZoneMinder selber kennt zwar unterschiedliche Aufzeichnungsmodi, kann diese aber nicht Zeit- oder Ereignisgesteuert verändern. FHEM füllt diese Lücke und kann die folgenden Kommandos an ZoneMinder senden:

  • alarmState: Alert state in ZoneMinder setzen.
  • monitorFunction: Entspricht 'Function' in ZoneMinder.
  • motionDetectionEnabled: Entspricht 'Enabled' in ZoneMinder
  • text: Setzt einen freien Text im Timestamp der Kamera. Der Timestamp der Kamera muss %Q enthalten und ZoneMinder muss uU neu gestartet werden, nachdem %Q hinzugefügt wurde.

Public Streaming-URLs

Hierfür muss als Attribut eine öffentlich erreichbare Adresse für ZoneMinder angegeben werden:

attr zm publicAddress https://my.home.server.net:8043

Damit wird in den ZM_Monitor Devices neben streamUrl auch noch ein Reading pubStreamUrl erzeugt. Für dieses Reading wird das eben angegebene Attribut mit dem Wert PATH_ZMS aus der ZoneMinder Konfiguration kombiniert.

Auth Hash

Um nicht username und Password öffentlich sichtbar machen zu müssen, bietet ZoneMinder auch das Sicherheitskonzept des Auth-Hash. Wenn FHEM erkennt, dass in ZoneMinder AUTH_HASH_SECRET und AUTH_HASH_LOGINS konfiguriert sind, wird der Auth-Hash errechnet. Für public streaming URLs wird dann automatisch der Auth-Hash anstatt Username und Passwort verwendet. Somit kann die URL auch nach außen gegeben werden. Wie vorher erwähnt, wird diese nach maximal zwei Stunden ungültig. Für den Login wird der Auth-Hash übrigens nicht akzeptiert, dh man kann maximal für zwei Stunden den Stream sehen, aber der Auth-Hash berechtigt nicht zum Verändern von Werten. Das FHEM-ZoneMinder Modul errechnet den Auth-Hash jede Stunde neu, somit sollten die Readings immer einen gültigen Hash liefern.

Bitte beachten, dass das Einbeziehen der IP für den Auth-Hash derzeit nicht unterstützt wird.

Link zur ZoneMinder Console

Das ZoneMinder Device zeigt ganz oben einen Link zur ZoneMinder Console (dem Web UI) an. Ist publicAddress als Attribut definiert, wird dieser Link mit der publicAddress gebildet und sollte auch im Internet funktionieren. Wer will, kann so bequem von FHEM aus nach ZoneMinder wechseln.

Live-Streams in FHEMWEB anzeigen

Wer auf der Detailseite eines ZM_Monitor Devices auch gleich den Live-Stream sehen will, kann das Attribut showLiveStreamInDetail auf 1 setzen.

Probleme mit ZoneMinder

Bei Problemen mit ZoneMinder sollten natürlich zuerst die Doku unter https://zoneminder.readthedocs.io/ oder das Forum unter https://forums.zoneminder.com/ konsultiert werden.

Trotzdem sollen auch hier spezielle Probleme festgehalten werden.

Kamera funktioniert nach ZoneMinder Upgrade auf neue Version nicht mehr zuverlässig

ZoneMinder hat eine fixe Abhängigkeit zu FFmpeg und nutzt nur dessen Funktionen. Leider kann die Kompatibilität von FFmpeg zu einer bestimmten Kamera in neueren Versionen schlechter werden.

Die Reolink RLC-410 mit Firmware v2.x funktioniert mit FFmpeg 3.x einwandfrei, zieht mit FFmpeg 4.x aber schlieren und hat oft ein verschwommenes Bild. ZoneMinder kann hier nix dafür; FFmpeg ist das Problem.

Oft geht ein ZoneMinder Upgrade Hand in Hand mit einem Upgrade des Betriebssystems, was dann auch zu einer neuen FFmpeg Version führt, und Kameraprobleme verursacht.

Kompiliert man eine fixe FFmpeg Version von Hand, muss sichergestellt werden, dass auch die shared libs daraus installiert werden (nicht nur das Binary), weil ZoneMinder tatsächlich über die shared library auf FFmpeg Funktionalität zugreift, nicht über das Binary (Ausnahme: Export von Videos).

Installation des Moduls

Das grunsätzliche Setup sollte hier ausreichend beschrieben sein. Seit Oktober 2018 ist das Modul offizieller Bestandteil von FHEM. Weitere Hintergrund-Infos finden sich außerdem noch im Forum.

Troubleshooting des Moduls

Problem: ZoneMinder selber funktioniert, allerdings kann FHEM keine Verbindung zur API herstellen. Das Log liefert immer HTTP-404

Antwort: Das Problem wird hier diskutiert: https://forums.zoneminder.com/viewtopic.php?t=28554