Zoneminder ist eine auf Linux basierende Opensource Videoüberwachungssoftware, mit der diverse Videoquellen wie IP Kameras, USB Kameras, TV Kameras, Lan/Wlan Kameras uvm. genutzt werden können und auch professionellen Ansprüchen genügt. Die Bedienung der Zoneminder Software erfolgt über eine kommerzielle Android App oder ein Webinterface und funktioniert, im Falle des Webinterfaces, daher mit allen gängigen Browsern und Endgeräten ( Linux,Windows,Mac,Android ). Zoneminder verfügt über viele verschiedene Zusatzfunktion wie beispielsweise den automatischen Mail oder SMS Versand, softwarebasierten Bewegungsmeldern uvm..
- Software Installation
- Konfiguration – Webinterface
- Konfiguration – Kameras
- Konfiguration – Datenspeicher
- Konfiguration – Alarmzonen ( Bewegungssensoren )
- Tipps und Tricks
Software – Installation
Bei der Zoneminder Software handelt es sich um eine stark modularisierte Applikation. Neben Video4Linux für die Unterstützung der Kameras und TV-Karten, einem Apache-Webserver sowie MySQL, PHP und Perl müssen auf dem Rechner für die Aufnahme von Stand- und Bewegtbildern die Ffmpeg- und Libjpeg-Pakete installiert sein. Erfreulicherweise findet sich Zoneminder inzwischen in den Repositories aller gängigen Linux-Distributionen und deren Derivaten, sodass das Programm ohne aufwendiges manuelles kompilieren installiert werden kann. Im Zoneminder eigenen Wiki werden die Installationen für versch. Linux Distributionen beschrieben.
Debian 11
Der Benutzer (zm) sowie die Datenbank (zm) muss unter Debian 11 manuell angelegt werden. Die Grundstruktur der Datenbank muss ebenfalls manuell importiert werden. Der Datenbank Login muss dann in der Datei /etc/zm/zm.conf eingetragen werden
1 | mysql < /usr/share/zoneminder/db/zm_create.sql |
Konfiguration – Webinterface
Als erstes empfiehlt es sich ein Passwort für den Admin Nutzer zu setzen :
- Optionen => System : OPT_USE_AUTH aktivieren
- Optionen => Benutzer : Admin auswählen und Passwort vergeben
Das Zoneminder Webinterface unterstützt verschiedene Sprachen, die in den Optionen ausgewählt werden können :
- Optionen => System => LANG_DEFAULT
Konfiguration – Kameras
Kameras werden durch klicken auf die “Neuer Monitor” Schaltfläche in Zoneminder eingebunden. Es gibt zwei grundlegende Möglichkeiten dies zu realisieren :
- Direkt am Host angeschlossenen Kameras => Allgemeines => Quellentyp => Lokal
- Über das Netzwerk erreichbare Kameras => Allgemeines => Quellentyp => Remote
Die Konfiguration der Netzwerkadresse, Bildgröße, Farbeinstellungen, Zugangsdaten und Pfade etc erfolgt unter dem Menüpunkt Quelle :
- Zugriffsart auf Bildquelle ( http oder Stream ) => Remote Protokol => <HTTP|RTSP>
- Netzwerkadresse der Kamera => Remote Hostname => <IP|URL>
- Port der Netzwerkkamera => Remote Hostport => <Port>
- Pfad der Video-, Bildquelle => <Remote Hostpfad>
- Benutzte Bildgröße ( Breite ) => Erfassungsbreite => <Pixelanzahl>
- Benutzte Bildgröße ( Höhe ) => Erfassungsbreite => <Pixelanzahl>
- Lagenanpassung des Kamerabildes ( Drehen, Spiegeln etc. – 180° Drehung : Invertiert ) => Ausrichtung => <Wert>
Für Lokale am Host angeschlossene Kameras werden andere Angaben benötigt :
- Anschlusspfad bzw. Gerätedatei der Kamera => Gerätepfad => </dev/video1-x>
- Verwendetes Linux Videosystem => Erfassungsmethode => VFL2 ( für ältere Systeme VFL1 )
- Für Quellen mit mehreren Kameraausgaben verwendeter Kanal => Gerätekanal => 0-X ( TV Karten für den Anschluss analoger Kameras )
- Verwendetes Bildübertragungsformat => Geräteformat => <PAL|NTSC> ( TV Kartenformat für den Anschluss analoger Kameras )
- Verwendeter Übertragungsmodus der Kamera => Erfassungsfarbpalette => MJPEG ( komprimierte Bildübertragung, muss von Kamera unterstützt werden )
- Verwendete Farbtiefe => Zielfarbbereich => <24|32Bit> ( 24 Bit sind in der Regel ausreichend und reduzieren den benötigten Speicher )
- Benutzte Bildgröße ( Breite ) => Erfassungsbreite => <Pixelanzahl>
- Benutzte Bildgröße ( Höhe ) => Erfassungsbreite => <Pixelanzahl>
- Lagenanpassung des Kamerabildes ( Drehen, Spiegeln etc. – 180° Drehung : Invertiert ) => Ausrichtung => <Wert>
Zoneminderspezifische Aufzeichnungsoptionen der jeweiligen Kamera werden unter dem Menüpunkt Puffer konfiguriert. Die verschiedenen Optionen bieten Konfigurationsmöglichkeiten für Vor-, und Nachlaufbilder von Aufzeichnungen oder div. Puffereinstellungen. Weitere Konfigurationsmöglichkeiten sind größtenteils selbsterklärend.
Um Optionen bereits konfigurierter Kameras zu ändern genügt ein Klick auf den Link in der Quellenspalte der Zoneminderübersicht für die entsprechende Kamera.
Konfiguration – Datenspeicher
Die Aufzeichnungen sollten aufgrund des Datenumfangs und der vielen Zugriffe auf das Speichermedium nicht auf Chip basierten Speichermedien, wie SSDs oder Speicherchips erfolgen. Die Speicherpfade können entweder über Symlinks des Hostsystems oder direkt in der Zoneminderkonfiguration ( Optionen => Pfade ) geändert werden. Dabei ist zu beachten, dass der Zoneminder Benutzer Vollzugriff auf das entsprechende Verzeichnis benötigt (www-data.www-data). Bei der Nutzung von Netzlaufwerken sollte Aufgrund von technisch bedingten Instabilitäten von WLAN Anbindungen sowie Cloudspeichern verzichtet werden. Kabelbasierte NAS Systeme haben sich bewährt und bieten bei räumlicher Trennung und korrekter Konfiguration keine Möglichkeit des Zugriffs auf den Datenspeicher um diesen zu zerstören oder zu manipulieren.
Netzlaufwerke
Die Datenspeicherung auf Netzlaufwerken via sshfs erfordert einige spezielle Parameter. Das Remoteverzeichniss muss als www-data user incl der www-data Gruppe eingehängt werden. Die Ids (i.d.R ID 33) können aus der /etc/passwd und der /etc/groups ausgelesen werden (grep www /etc/passwd /etc/group). Die Option <follow-symlinks> darf nicht gesetzt werden, da Zoneminder selbst mit Symlinks arbeitet. Daraus ergibt sich folgendes Beispiel zum einhängen eines Remoteverzeichnisses auf den Zoneminderhost :
1 | sshfs <user>@<host>:<storage_dir> <mount_point> -o gid=33,uid=33,IdentityFile=/home/<user>/.ssh/id_rsa,allow_other |
Konfiguration – Alarmzonen ( Bewegungssensoren )
Zur Reduzierung des benötigten Datenspeichers ist eine Aufzeichnung, die nur Bewegungen oder Ereignise in dem überwachten Bereichen aufzeichnet, sinnvoll. Der dabei benutzte softwareseitige “Bewegungsmelder” funktioniert durch den Vergleich zweier oder mehr Bilder anhand von verschiedenen Filtern und Faktoren, die zum Auslösen des Bewegungsalarms und damit zur Aufzeichnung der Kamerabilder führen. Die Konfiguration der Filter bietet eine Vielzahl an Kombinationen um nur wirklich relevante Ereignisse aufzuzeichnen und Fehlalarme wie z.B. wankende Bäume oder Baumschatten zu unterbinden.
Zeitabhängige Betriebsmodi
Die Erstellung eines Zeitplans um einzelne Modi, wie z.B. Monitor oder Aufnahme zu aktiveren, erfordert einen Zeitplan für den jeweiligen Betriebszustand. Dabei werden Konfigurationsvorlagen erstellt und diese mittels cronjobs aktiviert bzw. deaktiviert.
- crontab -e
- 0 7 * * 1-5 /usr/bin/zmpkg.pl day
- 0 18 * * 1-5 /usr/bin/zmpkg.pl night
- * * * * 0,6 /usr/bin/zmpkg.pl night
Diese Einstellung sagt aus das die Kameras ab Minute 0 Stunde 7 Tag 1-5(Mo-Fr) den Zustand day haben und das ganze ab 18 Uhr auf night geändert wird. Für Samstag und Sonntag ist die ganze Zeit die Aufnahme aktiv.
Tipps und Tricks
Um die Zoneminder Datenbank ( /usr/share/zoneminder/db/zm_create.sql ) manuell einzurichten wird ein Zoneminder Benutzer mit entsprechender Datenbank und Zugriffrechten benötigt auf dem SQL Server benötigt. Der Datenbankname (Vorgabe: zm) kann vor dem Import in der o.g. Datenbankdatei ( zm_create.sql ) geändert werden. Der Datenbankname des SQL Servers muss mit dem in der zm_create.sql Datenbank übereinsteimmen.
- Datenbank und Benutzer anlegen ( Benutzer: zm_user Passwort: zm_pass / Datenbankname: zm_database ) :123sudo mysql -e "CREATE USER 'zm_user'@'localhost' IDENTIFIED BY 'zm_pass';"sudo mysql -e "CREATE DATABASE zm_database;"sudo mysql -e "GRANT ALL PRIVILEGES ON zm_database.* TO 'zm_user'@'localhost';"
- Datenbank vorbereiten ( nicht nötig wenn der Datenbankname “zm” genutzt wird ):12sudo cp /usr/share/zoneminder/db/zm_create.sql .sudo sed 's/`zm`/`'zm_database'`/g' -i zm_create.sql
- Datenbank auf SQL Server laden:1sudo mysql -uzm_user -pzm_pass zm_database < zm_create.sql
- Zoneminder Konfiguration anpassen:123sudo sed 's/ZM_DB_USER=.*/ZM_DB_USER='zm_user'/g' -i /etc/zm/zm.confsudo sed 's/ZM_DB_PASS=.*/ZM_DB_PASS='zm_pass'/g' -i /etc/zm/zm.confsudo sed 's/ZM_DB_NAME=.*/ZM_DB_NAME='zm_database'/g' -i /etc/zm/zm.conf
Oben genannte Schritte als Script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #!/bin/bash # set default vars zm_user="zm_user" zm_pass="zm_pass" zm_database="zm_db" # read user input read -e -p " Enter database username: " -i "$zm_user" zm_user read -e -p " Enter database password: " -i "$zm_pass" zm_pass read -e -p " Enter database name: " -i "$zm_database" zm_database # check user input echo "" echo " Create SQL database containig following values :" echo "" echo " User: $zm_user" echo " Pass: $zm_pass" echo " Database: $zm_database" echo "" request_loop () { Request= read -n1 -e -p " Create database (y/N)? " Request if [[ "$Request" == [yY] ]]; then printf " creating database ... " elif [[ "$Request" == [nN] ]]; then printf " creation canceled ... exit\n" exit 1 else request_loop fi printf "" } request_loop # write database sudo mysql -e "CREATE USER '$zm_user'@'localhost' IDENTIFIED BY '$zm_pass';" sudo mysql -e "CREATE DATABASE $zm_database;" sudo mysql -e "GRANT ALL PRIVILEGES ON $zm_database.* TO '$zm_user'@'localhost';" printf "DONE \n" sudo cp /usr/share/zoneminder/db/zm_create.sql . sudo sed 's/`zm`/`'$zm_database'`/g' -i zm_create.sql sudo mysql -u$zm_user -p$zm_pass $zm_database < zm_create.sql sudo sed 's/ZM_DB_USER=.*/ZM_DB_USER='$zm_user'/g' -i /etc/zm/zm.conf sudo sed 's/ZM_DB_PASS=.*/ZM_DB_PASS='$zm_pass'/g' -i /etc/zm/zm.conf sudo sed 's/ZM_DB_NAME=.*/ZM_DB_NAME='$zm_database'/g' -i /etc/zm/zm.conf # restart zoneminder sudo service zoneminder restart |
Datenbank Logspeicher manuell leeren:
Zoneminder speichert Logeinträge in der Datenbank und im Syslog. Folgender Befehl löscht sämtliche Logeinträge in der Datenbank :
1 2 3 | mysql -uroot -ppassword zm truncate table Logs; quit |