RaspberryPi: Konfiguration Videoüberwachung mit Motion
Der Server
Als Grundlage für den Server dient Ubuntu Server 10.04 [2]. Der spätere Überwachungsrechner benötigt weder Tastatur
noch Monitor. Beim Partitionieren gilt es zu beachten, dass abhängig von der Anzahl der Kameras, der Dauer der
Zeiträume und den Aktivitäten in den zu überwachenden Bereichen erhebliche Datenmengen anfallen, sodass Sie gleich
zu Beginn genügend Platz für Bilder und Videos auf der Zielpartition einplanen sollten.
Um den Server später aus der Ferne zu administrieren, wählen Sie bei der Frage nach der zu installierenden Software
auch den SSH-Server aus. Nach der Installation des Grundsystems lohnt es sich, dieses mit sudo apt-get update,
sudo apt-get upgrade auf den neuesten Stand zu bringen. Anschließend braucht es noch einige zusätzliche Pakete,
bevor es an die eigentliche Konfiguration geht. Dazu zählt ntp, um die Serverzeit zu synchronisieren –
So zeigen die Überwachungsvideos stets die korrekte Zeit an. Das Paket acpi-support bietet einen einfachen
Weg, um den Motion-Server abzuschalten, und zu guter Letzt brauchen Sie natürlich motion selbst.
Motion konfigurieren
Nach der Installation ist Motion so konfiguriert, dass es nicht automatisch beim Booten als Daemon startet.
Um dem abzuhelfen, setzen Sie in der Datei /etc/default/motion den Wert start_motion_daemon auf yes.
Um das Programm im Daemon-Modus zu betreiben, benötigt es eine Möglichkeit, eine Systemdatei und die Bilder abzulegen.
Im Beispiel kam für die Dateien die Home-Partition zum Einsatz, wo mit mkdir /home/motion und
chown -R motion:motion /home/motion ein passendes Verzeichnis für die Programmdaten entstand.
Jetzt geht es daran, Motion an die lokalen Gegebenheiten und Bedürfnisse anzupassen.
Alle Einstellungen finden sich in /etc/motion/motion.conf. Kommen mehrere Kameras zum Einsatz, sind
für deren individuelle, von den Standards abweichende Einstellungen die Dateien threadNummer.conf vorgesehen.
Die Hauptkonfigurationsdatei enthält Angaben, die für alle Kameras gelten. Dazu zählen unter anderem der Speicherort
der Daten, das Format des Videostreams und der Bildern, die Zugangsdaten für den Zugang über ein Webinterface oder Aktionen,
die die Software bei Bewegungen auslöst. Auf dem Server verwenden Sie die Applikation über die Option daemon on,
um Motion im Hintergrund zu betreiben. Die Werte für das Videogerät (videodevice /dev/video0) übernehmen Sie
in der Regel ebenso wie die Schalter v4l2_palette und input. Letzteres erfordert Änderungen, wenn es sich bei den
Kameras nicht um Webcams handelt, sondern um Geräte, die Sie über eine Video-Capture-Karte angeschlossen haben.
Für weitere Kameras verwenden Sie die oben genannten zusätzlichen Konfigurationsdateien.
Abmaße
Die Punkte width und height hängen von den verwendeten Kameras ab und sollten möglichst einem Vielfachen von 16 entsprechen.
Eine höhere Auflösung fängt zwar mehr Informationen ein, allerdings fallen in diesem Fall bedeutend mehr Daten an,
und nicht jede Kamera unterstützt hohe Auflösungen. Experimentieren Sie bei Bedarf mit diesen Werten, um die optimalen
Einstellungen zu ermitteln. Die gefundenen Werte nutzen Sie für das Maskieren, um Änderungen in bewegten,
aber uninteressanten Bereichen zu ignorieren. Die Variable framerate steuert, wie viele Bilder Motion pro Sekunde aufnimmt.
Standardmäßig steht hier 2 als Wert, was bedeutet, dass das Programm zwei Bilder in der Sekunde aufnimmt.
Überwacht die Software enge Bereiche, dann nimmt Motion entweder gar nichts oder nur einen Schatten auf,
wenn eine Person den Bereich zügig durchquert. Werte zwischen 10 und 15 Bildern pro Sekunde sorgen aber dafür,
dass Motion alle Bewegungen einfängt. Der nächste Punkt, der Aufmerksamkeit verdient, ist threshold 1500.
Das bedeutet, dass die Software Änderungen von 1500 Pixeln als Bewegung interpretiert. Der Wert entspricht bei einer
Auflösung von 640x480 Pixeln weniger als einem halben Prozent des Bilds. Dabei mutiert schon eine vor dem Fenster hüpfende Krähe
zum Filmstar, sodass hier ein höherer Wert nichts schadet. In Tests erwiesen sich Werte zwischen 3000 und 5000 Pixeln als
ausreichend,
um Bewegungen größerer Objekte festzuhalten. Bei Werten jenseits 15 000 marschierten dann Personen unbemerkt durchs Bild.
Unter dem Abschnitt Image File Output nehmen Sie bei Bedarf Einstellungen für die Ausgabe der Bilder vor.
Da es viel mehr Zeit braucht, mehrere tausend Bilder auszuwerten, als ein paar Videos anzusehen, kam im Beispiel die Option
output_normal off
zum Einsatz, so dass Motion vom Speichern von Bildern absieht. Die Angaben für Videos nehmen Sie direkt im folgenden Abschnitt
FFMPEG related options vor. Die Variable ffmpeg_cap_new on sorgt dafür, dass Motion MPEG-Videos mit Hilfe von Ffmpeg in
Echtzeit encodiert. Der Wert der Option ffmpeg_video_codec definiert das Dateiformat, in dem Videos auf dem Server landen.
Schnappschuss gefällig
Wünschen Sie in bestimmten Zeitabschnitten Schnappschüsse des Überwachungsbereichs, dann legen Sie das Zeitintervall in
Sekunden in der Variable snapshot_interval fest. Die Variable
text_right sorgt dafür, dass die Software in der rechten unteren Ecke einen Text einblendet, der in der Standardeinstellung darüber
informiert, wann ein Video oder Bild aufgenommen
wurde und welches interne Ereignis dies ausgelöst hat. Bei Bedarf passen Sie das Textfeld an eigene Bedürfnisse an
(siehe Tabelle "OSD-Informationen".
Der Parameter target_dir gibt das Zielverzeichnis an, in dem die Bilder und Videos landen. Standardmäßig legt das Programm alle
Daten in /tmp ab – mit der Folge, dass Ubuntu sie nach
einem Neustart von Ubuntu ins Nirwana schickt. Im Beispiel ist das nicht erwünscht, so dass hier das Verzeichnis entsprechend
/home/motion/videos lautet.
Über das Netz
Motion kommt mit einem kleinen eigenen Webserver, mit dessen Hilfe es einen Livestream der Kameras ins Netz stellt.
Wer das Feature nutzen möchte, nimmt die nötigen Änderungen in der Sektion Live Webcam Server vor. Nun mag es zwar sein,
dass nur Wenige die Bilder live betrachten wollen. Bei der HTTP-basierten Steuerung (HTTP Based Control) sieht das schon
wieder anders aus: Ein Zugriff von außen ergibt durchaus Sinn – etwa, um die Kameras für eine bestimmte Zeit zu deaktivieren
oder deren Status aus der Ferne abzufragen. Da derartige Zugriffe vermutlich nur selten vom Überwachungsserver aus geschehen,
gilt es, den Zugriff von außen zuzulassen (control_localhost off) und den Passwortschutz zu aktivieren, wofür Sie in der Zeile
control_authentication das kommentierende Semikolon am Beginn entfernen und die Platzhalter username und password durch eigene Werte ersetzen.
Startklar
Damit ist Motion fertig eingerichtet. Bewegt sich etwas vor der Kamera, die Sie dem Programm zugeordneten haben, sollten im
Zielverzeichnis einzelne Videos auftauchen. Positionieren Sie
das Gerät richtig und aktivieren Sie einem Testlauf. Haben Sie die richtige Position gefunden, fixieren Sie die Webcam am besten:
Oft scheitern Aufnahmen, weil Unbeteiligte
unabsichtlich gegen das Kabel stoßen und so die Aufnahmeposition verändern.
Einem längerer Testlauf fördert dann schnell erste Kandidaten für kritische Elemente im zu überwachenden Bereich ans Tageslicht,
die zu Fehlalarmen führen. Das können sich im Wind
wiegende Bäume und Sträucher oder flatternde Sonnensegel und Zelte sein. Motion bietet mehrere Möglichkeiten, diese Fehlerquellen
zu beseitigen. Zum einen haben Sie die Möglichkeit,
fest definierte Bereiche, die sogenannten Areas, ein- und auszublenden, zum anderen legen Sie bei Bedarf Masken über das Bild.
Kamera hinzufügen
Eine einzelne Kamera bringt den Motion-Server in der Regel nicht in Bedrängnis. Läuft soweit alles, fügen Sie zusätzliche Kameras
mit nur wenigen Handgriffen hinzu. Sie erstellen dann für jede Kamera eine Konfiguration und binden Sie diese in die motion.conf ein.
Verfügen alle Kameras über identische Auflösungen, genügen hier der Name des Geräts (videodevice) und eventuell die zugehörigen
Bereiche oder Maskierungsdateien. Haben die Kameras ähnlich aussehende Bereiche im Blick und möchten Sie auf einen Blick erkennen,
von welcher Kamera die Bilder kommen, entfernen Sie dazu entweder das Kommentarzeichen in der Zeile text_left oder ergänzen text_right um ein Kamera %t.
Ereignisse
Jede von Motion erfasste Aktivität (siehe Tabelle "Ereignisse") erlaubt eine Folgeaktion, wie etwa den Versand einer E-Mail
beziehungsweise SMS oder das Ausführen eines Skripts auf dem
Server. Um eine Mail zu versenden, bedarf es der Mailutils und eines kleinen SMTP-Clients wie MSMTP [3], die Sie mit
sudo apt-get install mailutils msmtp msmtp-mta installieren.
Aktivität Beschreibung
on_area_detect Bewegung in vorher bestimmten Regionen
on_motion_detected Bewegung im Bild festgestellt
on_event_start Start eines Ereignisses
on_event_end Ende eines Ereignisses
on_movie_start Start einer Video-Aufnahme
on_movie_end Ende einer Video-Aufnahme
on_picture_save Abspeichern eines Bilds
on_camera_lost Kamera nicht erkannt / Kontakt zur Hardware verloren
Anschließend ist es ein leichtes, den Server anzuweisen, bei bestimmten Ereignissen eine Mail zu versenden, wie Listing 1
m Beispiel einer verlustig gegangenen Kamera demonstriert.
Listing 1
on_camera_lost echo "Kamera %t am %d.%m.%Y um %T bei Ereignis %v verloren." | mail -s "[Motion] Kamera verloren" empfaenger@mail.provider
Steuern via HTTP
Motion bietet die Möglichkeit, die Software über den Browser zu steuern. So haben Sie die Möglichkeit, das Programm auch von der
Kommandozeile aus zu bedienen (Abbildung 5), indem Sie
die Links mit einem Werkzeug wie Wget aufrufen. Um die Software von einem anderen Rechner aus zu steuern, deaktivieren Sie wie
bereits beschreiben die Option control_localhost in der
Hauptkonfiguration. Standardmäßig erreichen Sie Motion über den Port 8080. Die aufzurufende URL setzt sich wie folgt zusammen:
http://Server<§§>:<§§>Port<§§>/Thread<§§>/Kommandokategorie/Aktion$Parameter
Hinter Thread verbirgt sich die Nummer der jeweiligen Kamera. Setzen Sie mehr als eine Kamera ein, fragen Sie über den Thread 0 die
Standardeinstellungen ab und ändern diese bei Bedarf.
Die Tabelle "HTTP-Aktionen" listet die wichtigsten Kategorien und Kommandos auf. Setzen Sie zum Beispiel eine Logitech Quickcam
Sphere/Orbit in Verbindung mit Motion ein, ist es
möglich, deren Servermotoren anzusteuern und Bewegungen zu verfolgen.
Aktion Beschreibung
config/list Konfiguration anzeigen
config/write Konfigurationsdateien neu schreiben
config/get Wert einer Option anzeigen
config/set Wert einer Option ändern
action/makemovie Video-Aufnahme starten
action/snapshot Schnappschuss auslösen
action/restart Jeweiligen Thread neu starten
action/quit Thread beenden
detection/status Status der Kamera anzeigen
detection/start Aufnahme starten
detection/pause Aufnahme pausieren
detection/connection Verbindung prüfen
Komfort
Haben Sie den Motion-Server einmal eingerichtet und läuft dieser rund, vereinfachen einige Skripte Abruf und Anzeige der frisch
hinzugekommenen Aufzeichnungen. Um neue Videos auf den
Arbeitsrechner oder Wohnzimmer-PC zu holen, bietet sich das Rsync-Protokoll [4] an. Rsync überträgt nur die Daten, die sich
geändert haben, wodurch erheblich weniger Datenvolumen
anfällt. Das macht sich vor allem dann bezahlt, wenn Quell- und Zielrechner nicht im selben Netzwerk stehen und der Quellrechner
nur über einen gewöhnlichen DSL-Anschluss mit der
entsprechend dürftigen Upload-Rate arbeitet.
Listing 2 zeigt ein kommentiertes Rsync-Skript, das die Videos vom Server holt und abspielt. Es speichert in timestamp.txt die
Zeitstempel der bereits geholten und angesehenen Videos,
sodass es nur diejenigen Videos automatisch wiedergibt, die seit dem letzten Abruf hinzu kamen.
Listing 2
# Variable für Zeitstempeldatei
TIMEFILE=~/timestamp.txt
# Mediaplayer
PLAYER=/usr/bin/mplayer
# Kommandozeilenargument auswerten
case $1 in
# neue Ueberwachungsaufzeichnungen holen und abspielen neu)
# Synchronisieren
# --progress Fortschritt anzeigen
# --delete Remote geloeschte Dateien auch lokal loeschen
# -a Rekursiv alle Dateien holen
# -v Aktuell bearbeitete Datei anzeigen
# -h Für Menschen lesbare Ausgaben verwenden
# -e Zu benutzende Remote-Shell
rsync --progress --port=2200 --delete -avhe ssh USER@SERVER:/home/motion/videos ~/orwell
# Dateien abspielen, falls neuer als Zeitstempel-Referenzdatei
for FILE in ~/orwell/motion/*.swf; do
if [ "$FILE" -nt "$TIMEFILE" ]; then
$PLAYER $FILE
# Zeitstempel der aktuell gezeigten Datei speichern
touch -r $FILE $TIMEFILE
else
echo "$FILE bereits gesehen"
fi
done
;;
# alle (auch die alten) Filme abspielen
alle)
$PLAYER ~/orwell/motion/*.swf
;;
*)
printf "Falscher Aufruf:\n\"$0 neu\" um neue Filme zu holen und abzuspielen\n\"$0 alle\" um al[lt]e Filme abzuspielen\n\n"
;;
esac
exit 0
Vor allem in "bewegten Zeiten" fallen Unmengen von Daten an, sodass die Festplatte des Motion-Servers irgendwann unweigerlich
voll läuft. Ein kleiner Cronjob hilft, dem komfortabel
entgegenzuwirken. Die Anweisung aus Listing 3 sorgt beispielsweise dafür, dass der Server bei jedem Neustart die Videos ins Nirwana
schickt, die mehr als drei Tage auf dem Buckel haben.
Listing 3
@reboot /usr/bin/find /home/motion/videos -mtime +3 -exec rm {} \;