Es tut sich was im Hinterhof, und Sie wollen wissen was? Mit Motion und einem Linux-PC bauen Sie mit wenigen Handgriffen ein kleines Videoüberwachungssystem.
Brandenburg an der Havel: Die Selbstständige Beate B. musste in der Vergangenheit mehrfach feststellen, dass Fremde in ihrer Abwesenheit ihre Hof betreten hatten. Die Eindringlinge aßen Obst von den Sträuchern, stahlen Werkzeug von einer Baustelle, durchsuchten Schuppen und öffneten einen Hundekäfig, um den darin befindlichen überaus verspielten und verfressenen Beagle zu befreien.
Es fiel auf, dass die Eindringlinge immer dann kamen, wenn das Grundstück unbewacht war. Allerdings gab es keine regelmäßigen Zeiten, zu denen Frau B. ihr Anwesen verließ. Zudem befindet sich das Grundstück in einer ruhigen Gegend, in der Fremde auffallen würden.
Statt nun auf teure professionelle Überwachungstechniken, wie Bewegungsmelder, Meldeanlagen und Wachschutz zu setzen, nutzte Frau B. einen alten Rechner, einige Webcams und das kleine Werkzeug Motion [1], um sich für wenige Euro ein Überwachungssystem zusammenstellen, das einen Vergleich mit mancher professionellen Anlage nicht zu scheuen braucht.
Motion empfängt nonstop Bilder von beliebig vielen Webcams oder Netzwerkkameras. Ändert sich dabei von einem Bild zum anderen eine definierte Anzahl Pixel, liegt die Vermutung nahe, dass im zu überwachenden Bereich sich etwas oder jemand bewegt. In diesem Fall nimmt das Programm mit Hilfe von Ffmpeg einen Videostream oder eine Serie von Einzelbildern auf und speichert sie auf einem Server. Die Applikation ermöglicht darüber hinaus noch weitere Aktionen, wie etwa das Versenden einer SMS oder einer E-Mail.
Neben der Funktion als Bewegungsmelder eignet sich Motion auch, um innerhalb bestimmter Intervalle Schnappschüsse zu speichern oder fortlaufend Videos aufzunehmen. Das Werkzeug verfügt zudem über eine Möglichkeit, die aktuell empfangenen Bilder von überall mit einem Browser abzurufen und gestattet es, Bereiche in Bildern zu maskieren, um Bewegungen in ihnen zu ignorieren. Letzteres hilft vor allem dann, wenn sich beispielsweise Bäume, Sträucher oder Wäscheleinen im Erfassungsbereich befinden, die im Wind schaukeln.
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 640×480 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.
OSD-Informationen
| Parameter | Beschreibung |
|---|---|
%Y |
Jahr im Format YYYY |
%m |
Monat (01-12) |
%d |
Tag des Monats |
%T |
Uhrzeit hh:mm:ss |
%H |
Stunde (24-Stunden-Format) |
%M |
Minute |
%S |
Sekunde |
%q |
Frame-Nummer |
%v |
Ereignis |
%t |
Nummer des Threads (Kamera) |
%D |
Anzahl der veränderten Pixel |
Ü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.

Abbildung 1: Motion erlaubt es, das Erkennen von Bewegungen für fest definierte Bereiche separat ein- und abzuschalten.
Abbildung 1 zeigt die in Motion vorgegebenen Bereiche, die Sie auswählen dürfen. In der Konfigurationsdatei definieren Sie diese mittels area_detect: So würde die Software mit area_detect 124578 auf Bewegungen in den linken zwei Dritteln des von der Kamera erfassten Bilds reagieren.
Beim Maskieren (Abbildung 2) legen Sie dagegen eine Bilddatei im PGM-Format an, in der Sie die auszuschließenden Bereiche schwarz markieren. Alle zu überwachenden Bereiche bleiben im Gegenzug weiß (Abbildung 3). Den Pfad zur Maske, welche die selbe Auflösung aufweisen muss wie die Webcam, teilen Sie Motion über mask_file mit.

Abbildung 3: … mittels einer speziellen Maske im PGM-Format vom Monitoring aus. Bewegungen führen nur noch in den weißen Bereichen zu einer Aktion.
Kameras 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.
Ereignisse
| 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 am 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
Ebenso einfach ließe sich via Mail2sms-Gateway eine SMS verschicken oder ein beliebiges Skript ausführen. Sie sollten aber im Vorfeld gut überlegen, für welche Ereignisse eine Nachricht sinnvoll erscheint. Beispielsweise wäre es nicht nötig, sich über jede Katze zu informieren, die über den Hof schleicht (Abbildung 4). Eine Katze in einem eigentlich unzugänglichen Raum wäre dagegen schon wieder eine Meldung wert.

Abbildung 4: Katzen und andere tierische Geschöpfe, die sich vor der Kamera tummeln, führen mitunter zu Fehlalarmen.
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.
HTTP-Aktionen
| 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 {} \;
Fazit
Motion leistet noch viel mehr als hier beschrieben. Es ermöglicht beispielsweise, Ereignisse in Datenbanken festzuhalten, Boxen um sich bewegende Objekte zu zeichnen oder in Bildern und Videos nur die veränderten Pixel aufzuführen. Die Software dreht auf Wunsch Bilder automatisch, erkennt schnell wechselnde Lichtverhältnisse und interpretiert diese. Mit sogenannten Smart Masks markiert Motion automatisch Gebiete mit häufigen Bewegungen.
TIPP
Es kommt vor, dass sich Objekte sehr schnell durchs Bild bewegen und daher Filme mit einer Laufzeit von weniger als einer Sekunde erzeugen. Fast alle Mediaplayer bieten die Möglichkeit, Videos langsamer abzuspielen – Mplayer etwa mit der Option -speed 0.1.
Die Software ermöglicht es, eine preiswerte und komfortable Videoüberwachungsanlage zu konzipieren, die je nach technischer Affinität die Grundlage für viele Szenarien bildet. Neben dem generellen Überwachen wäre es beispielsweise möglich, Motion im Zusammenspiel mit einer Video-Türstation einzusetzen, die beim Betätigen des Klingelknopfes einen Schnappschuss des Besuchs festhält. Für einen dauerhaften Einsatz erscheint ein Desktop-Rechner als Server etwas zuviel des Guten. Hier käme ein stromsparender Plug-Computer wohl eher in Betracht.
Wer Motion einsetzt, sollte unbedingt den Paragrafen 6b des Bundesdatenschutzgesetzes (“Beobachtung öffentlich zugänglicher Räume mit optisch-elektronischen Einrichtungen”, [5]) und eventuell die Landesdatenschutzgesetze im Hinterkopf haben: Viele Menschen reagieren zurecht auf Verstöße gegen den Datenschutz empfindlich.
Die Vorfälle, die zum Entwurf der beschriebenen Anlage geführt haben, ließen sich im Übrigen restlos aufklären: Im konkreten Fall handelte es sich bei den Eindringlingen vorwiegend um Kunden, die sich weder von Öffnungszeiten noch von Zäunen abschrecken ließen. Den zweiten Platz in der Häufigkeit der ausgelösten Alarme konnten die Nachbarskatzen für sich verbuchen, als Obstdiebe ließen sich Amseln und anderes fliegendes Getier identifizieren.
Infos
[1] Motion: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome
[2] Ubuntu-Server http://www.ubuntu.com/server
[3] MSMTP: http://msmtp.sourceforge.net/
[4] Rsync: http://rsync.samba.org/
[5] “Beobachtung öffentlich zugänglicher Räume mit optisch-elektronischen Einrichtungen”: http://www.gesetze-im-internet.de/bdsg_1990/__6b.html








hallo und danke für deinen Artikel.
Wie kann ich denn PGM´s erzeugen. Meine normalen Grafikprogramme kennen das Dateiformat nicht.
Muss ich den ganzen Pfad zur pgm später angeben in der Motionconf?
Danke!
z.B. mit GIMP Graustufen s/w als PGM-Rohdaten exportieren
Hi,
danke für den artikel. was muss ich eingeben, damit Motion nach jeder Aufnahme aus einem bestimmten Verzeichnis (/home/pi/GoogleDrive/) das Programm grive ausführt?