Kameras mit Motion auf Bewegung überwachen

//Kameras mit Motion auf Bewegung überwachen
Kameras mit Motion auf Bewegung überwachen 2018-05-01T15:16:32+00:00

Mit Hilfe der Linux-Software „Motion“ läßt sich ein vollwertiges Überwachungsszenario realisieren. Ich habe zu dem Zweck auf meinem Server motion installiert und greife auf verschiedene Netcams sowie RaspberryPis mit Kameramodul zu.

Motion installieren:
apt-get install motion

Motion nach Neustart automatisch starten:
mcedit /etc/default/motion
„start_motion_daemon=yes“ => beim Neustart automatisch starten
„log_level 4“ => Nur Errors loggen, log in /var/log/syslog
am Ende „thread /etc/motion/thread1.conf“ aktivieren, damit mehrere Kameras gehen

Motion erstmalig starten:
motion

Motion neustarten um Änderungen zu übernehmen:
/etc/init.d/motion restart

Kameras einbinden:
mcedit /etc/motion/thread1.conf
„netcam_url http://…“ => URL der Kamera
„netcam_userpass benutzername:passwort“ => HTTP Authentifizierung
„stream_port 8082“

chown -R motion:motion /var/lib/motion/

Unerwünschte Bereiche von der Bewegungserkennung ausschließen

Um eine Maskierung zu erstellen, damit nicht alle Bereiche der Kamera für die Bewegungserkennung erfasst werden, kann ein Mask-File erstellt werden. Dazu nimmt man ein von Motion erzeugtes JPEG, da die Größe exakt stimmen muss und öffnet es beispielsweise in GIMP. Dort werden die Bereiche, die nicht erfasst werden sollen, schwarz gezeichnet, alle anderen zeichnet man weiß. Dann wird die Datei als *.pgm gespeichert und auf den Server z.B. in /etc/motion/ gespeichert. In der Datei threadX.conf wird die Zeile
mask_file /etc/motion/#name#.pgm
ergänzt und schon werden nicht mehr alle Bereiche erfasst.

Erkannte Bewegungen in Datenbank ablegen

Per phpmyadmin folgendes SQL-Statement eingeben, um die Tabelle zu erzeugen:
CREATE TABLE security (camera int, filename char(80) not null, frame int, file_type int, time_stamp timestamp, text_event timestamp)

In /etc/motion/motion.conf die Werte database_type, database_dbname, database_host, database_user, database_password und database_port anpassen. Außerdem Wert sql_query aktivieren.

Erzeugte AVI-Dateien in MP4 umwandeln

Um die Videodateien nach Erzeugung in Browser-abspielbare MP4-Dateien umzuwandeln, wird in der threadX.conf folgende Zeile verwendet:
on_movie_end /pfad/zur/ausfuehrbaren/datei/convert_avi2mp4.sh „%f“
Es wird also nachdem die Datei erzeugt wurde, direkt die Datei umgewandelt. %f hängt den Dateinamen inklusive vollständigen Pfad an den Befehl an.
Die Datei convert_avi2mp4.sh kann wie folgt aussehen:
#!/bin/bash
avconv -i $1 -an -vcodec libx264 -crf 23 ${1/avi/mp4}
rm $1

Dateien nach einem bestimmten Zeitraum automatisch löschen

Um die Dateien automatisiert zu löschen, wird ein Cronjob angelegt. Dazu wird die Datei /etc/cron.d/#dateiname# editiert und folgende Zeile angefügt:
0 0 * * * root find /var/lib/motion/ -name ‚*.mp4‘ -mtime +7 -exec rm {} \;
Hiermit werden täglich um Null Uhr alle Dateien mit der Endung MP4 gelöscht, die älter als sieben Tage sind.

Aufnahmen im Apache-Webserver freigeben

Um die erzeugten MP4-Dateien im Browser darstellen zu können, muss das nicht für Apache erreichbare Verzeichnis noch freigegeben werden. Dazu wird in der Datei /etc/apache2/sites.enabled/#dateiname# folgendes eingetragen:
Alias /pfadname/ /var/lib/motion/
<Directory /var/lib/motion/>
Order allow,deny
Allow from all
Require all granted
Options Indexes
</Directory>