ZoneMinder
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