Videoüberwachung mit dem Raspberry Pi

© Bogdan Ionescu, 123RF

Seh dich!

Überwachungskameras aus dem Einzelhandel kosten oft viel Geld, bieten wenig Funktionen oder erweisen sich im Einsatz als unflexibel. Mithilfe des Raspberry Pi umgehen Sie alle diese Nachteile und erweitern bei Bedarf das System unkompliziert um weitere Features.

README

Mit einem oder mehreren RasPis stellen Sie für wenig Geld eine mächtige Videoüberwachungslösung zusammen. Die erste Hälfte des Artikels gibt denjenigen Lesern eine Anleitung an die Hand, die gerne einfach und mit wenig Aufwand ein solches Projekt umsetzen möchten. Der zweite Teil des Textes richtet sich an Tüftler: Er erklärt die Interna der vorgestellten Skripte, damit sie diese bei Bedarf leicht um eigene Ideen erweitern.

Die letzte Ausgabe von Raspberry Pi Geek enthielt mit dem Artikel "Auge des Pi" [1] bereits eine Einführung in die Grundlagen des für den Minirechner erhältlichen Kameramoduls. Hierauf aufbauend folgt nun eine Anleitung, wie Sie unkompliziert eine Videoüberwachungslösung erstellen. Auch wenn Sie diesen Artikel nicht gelesen haben, dürfte Sie die Standardinstallation nicht vor Probleme stellen.

Konzept

Die vorgestellte Lösung vernetzt beliebig viele Raspberry Pis mitsamt ihres Kameramoduls untereinander, sodass Sie bei Bedarf damit mehrere Orte gleichzeitig überwachen. Das Konstrukt gestattet aber auch den Einsatz einer einzigen Kamera, falls das für Ihre Zwecke ausreicht. Die Bilder der überwachten Plätze speichert der Mini-Rechner auf einer SD-Karte, alternativ stehen sie aber noch als Live-Ansicht über eine Weboberfläche (Abbildung 1) zur Verfügung.

Abbildung 1: Die Weboberfläche erlaubt Ihnen das gleichzeitige Überwachen mehrerer Orte.

Einer der RasPis fungiert im vorgestellten Szenario als zentraler Server, der die Konfigurationsdatei vorhält. In dieser stellen Sie die gewünschten Aufzeichnungsparameter ein, wie etwa Auflösung, Lichtstärke oder Kontrast, sowie den Sekundenabstand, in dem die Kameras jeweils neue Bilder aufnehmen. Alle angeschlossenen RasPis importieren in regelmäßigem Abstand die aktuelle Konfigurationsdatei von diesem Zentralrechner. Um den Aufbau so einfach wie möglich zu halten, kommunizieren die Minicomputer via HTTP-Requests untereinander.

Installation

Zuerst gilt es, festzulegen, welche statischen IP-Adressen die Überwachungsrechner innerhalb des LANs nutzen sollen. Das folgende Beispiel geht von einem Szenario aus, bei dem der zentrale RasPi, der gleichzeitig die erste Kamera bedient, die Adresse 192.168.2.50 verwendet. Zwei weitere verwenden die Adressen 192.168.2.51 und 192.168.2.52. Welche IPs Sie auch wählen: Verwenden Sie einen Teil Ihres privaten Adressbereichs (in der Regel 192.168.*.*/24), auf den nur vertrauenswürdige Clients zugreifen dürfen.

Nun konfigurieren Sie den ersten RasPi. Installieren Sie dafür zuerst die Pakete apache2, php5, php5-curl und php5-cli. Im Verzeichnis /var/www/ legen Sie danach die Unterverzeichnisse /var/www/cam/ und /var/www/cam/bilder/ an. Kopieren Sie nun die Skripte config_einlesen.php und steuere_kamera.php nach /var/www/cam/.

In der Datei steuere_kamera.php tragen Sie in Zeile 4 die IP-Adresse desjenigen Raspberry Pi ein, der später als zentraler Steuerungsserver agiert. Nun müssen Sie noch dafür sorgen, dass bei jedem Booten der Raspberry Pi das Skript steuere_kamera.php im Hintergrund startet. Dazu editieren Sie die Crontab (sudo crontab -e) und fügen dort folgende Zeile hinzu:

@reboot /usr/bin/php -f /var/www/cam/steuere_kamera.php

Die genannten Schritte müssen Sie bei jedem im Rahmen des Projekts eingesetzten Raspberry Pi vornehmen. Sollten Sie viele Kameras verwenden, sparen Sie etwas Arbeit, indem Sie eine SD-Karte mit den zuvor genannten Schritten präparieren und dann entsprechend oft klonen, indem Sie deren Inhalt auslesen und auf andere, leere Karten kopieren.

Eine noch fehlende Einstellung ist jedoch so individuell, dass Sie diese anschließend bei jeder einzelnen SD-Karte noch zusätzlich konfigurieren müssen: Tragen Sie jeweils in der Datei /etc/network/interfaces die beabsichtigte statische IP-Adresse des betreffenden RasPi ein – in unserem Beispiel also auf Karte 1 192.168.2.50, auf Nummer 2 192.168.2.51 und auf der dritten SD-Card 192.168.2.52.

Die nun folgenden Zusatzschritte nehmen Sie ausschließlich bei der SD-Karte für den Steuerungsrechner vor: Kopieren Sie dort die Dateien index.php, raspi-geek-logo.png und config.txt in das Verzeichnis /var/www/cam/. Passen Sie anschließend die Datei config.txt Ihren Zwecken gemäß an. Die Einstellungen ändern Sie bei Bedarf später im laufenden Betrieb auch wieder. Alle anderen Kamera-Pis importieren in regelmäßigen Abständen die aktuelle Konfigurationsdatei vom zentralen Server und setzen veränderte Optionen gegebenenfalls binnen Sekunden um. In Listing 1 zeigt die config.txt eine Beispielkonfiguration für einen Anwendungsfall, bei dem drei Kameras zum Einsatz kommen.

Listing 1

 

; Kamera-Konfigurationsdatei
[Global]
Schaerfe = 0
Kontrast = 0
Helligkeit = 50
Saettigung = 0
ISO = 100
Intervall = 5
[Haustür]
IP = "192.168.2.50"
[Garten]
IP = "192.168.2.51"
[1. Obergeschoss]
IP = "192.168.2.52"
Helligkeit = 60
ISO = "400"

In der Sektion [Global] (Zeile 3 bis 9) definieren Sie Standardwerte für die Aufnahmen. So weist Zeile 6 beispielsweise den RasPi an, immer dann, wenn in seiner Konfigurationsdatei die zu nutzende Helligkeit nicht festgelegt wurde, den Wert 50 zu verwenden. Die meisten Optionen legen Aufnahmeparameter für die Fotos fest, wogegen der Wert Intervall in Zeile 9 bestimmt, in welchen Zeitabständen die Kamera neue Bilder aufnimmt – hier alle 5 Sekunden.

Die anderen Sektionen der Konfigurationsdatei (erkennbar an den eckigen Klammern) beziehen sich auf den jeweiligen Kamerastandort. Für jeden davon müssen Sie zumindest einen Namen vergeben (Zeile 11, 14 und 17), den unter anderem die Weboberfläche während der Live-Betrachtung anzeigt. Eine zweite Grundangabe besteht darin, dem RasPi-Standort eine IP-Adresse zuzuordnen (Zeile 12, 15 und 18).

Im Beispiel machen die beiden Beobachtungsposten [Haustür] (Zeile 11 und 12) und [Garten] (Zeile 14 und 15) von dieser Minimalkonfiguration Gebrauch. Da das Skript zu diesen beiden Standorten keine zusätzlichen Angaben enthält, greifen bei diesen die Einstellungen der Sektion Global. Die dritte Kamera mit dem Namen [1. Obergeschoss] (Zeile 17 bis 20) weicht davon hingegen bei zwei Werten ab (Zeile 19 und 20), die an diesem dunklen Standort zu besseren Bildern führen.

Der Parser des Konfigurationsskripts config_einlesen.php (Listing 2) lässt vieles durchgehen. So besteht er beispielsweise nicht auf korrekter Groß- und Kleinschreibung. Fehlen in der globalen Sektion der Konfigurationsdatei Angaben, dann setzt das Skript diese auf hartkodierte Werte, die im Durchschnittsfall Sinn ergeben. So führt Zeile 16 in Listing 2 dazu, dass die Software JPG-Bilder mit einem Qualitätsgrad von 75 Prozent (ein guter Kompromiss zwischen Qualität und Größe des Bilds) komprimiert, obwohl die config.txt-Datei in unserem Beispiel keine Angabe hierzu enthält. Wollten Sie stattdessen Platz auf den SD-Karten sparen, könnten Sie die Konfigurationsdatei etwa um den Eintrag Qualität = 50 ergänzen.

Die Zeilen 17 bis 19 treffen ebenfalls Entscheidungen, für die in der config.txt des Beispielfalls Angaben fehlen: Die Kamera soll Fotos mit der maximal möglichen Auflösung erstellen, ohne dabei den speicherintensiven RAW-Modus zu verwenden.

Listing 2

 

<?php
// Config-Datei auslesen, Ergebnis speichern in in den Arrays
// $globale_einstellungen und $lokale_einstellungen
if (isset($config_daten)) $config_array = parse_ini_string($config_daten, TRUE);
  else $config_array = parse_ini_file('config.txt', TRUE);
// Einige Standard-Werte vordefinieren für den Fall, dass
// die [Global]-Gruppe der Config-Datei keine Werte angibt
$globale_einstellungen['SCHAERFE'] = 0;
$globale_einstellungen['KONTRAST'] = 0;
$globale_einstellungen['HELLIGKEIT'] = 50;
$globale_einstellungen['SAETTIGUNG'] = 0;
$globale_einstellungen['ISO'] = 400;
$globale_einstellungen['INTERVALL'] = 5;
$globale_einstellungen['QUALITAET'] = 75;
$globale_einstellungen['RAW'] = 0;
$globale_einstellungen['BREITEFOTOS'] = 2592;
$globale_einstellungen['HOEHEFOTOS'] = 1944;
// Werte der Sektion [Global] der Config-Datei einem Array zuweisen
foreach ($config_array as $kategorie => $einstellungen) {
  if (strtoupper($kategorie)=='GLOBAL') {
    foreach($einstellungen as $schluessel=>$wert) {
      $globale_einstellungen[strtoupper($schluessel)] = $wert;
    }
    unset($config_array[$kategorie]);
  }
}
// Lokale Einstellungen für jede Kamera einlesen. Optionen,
// für die nichts definiert wurde, auf den globalen Wert setzen
foreach ($config_array as $kamera_name => $einstellungen) {
  $lokale_einstellungen[$kamera_name] = $globale_einstellungen;
  foreach($einstellungen as $schluessel=>$wert) {
    $lokale_einstellungen[$kamera_name][strtoupper($schluessel)] = $wert;
  }
}
?>

Nach dem Fertigstellen der Konfigurationsdatei booten Sie alle RasPis, die daraufhin sofort mit dem Aufnehmen und Abspeichern der Überwachungsbilder beginnen. Um das Geschehen live mitzuverfolgen, rufen Sie im Webbrowser eines PCs die Adresse http://IP_des_Steuer-RasPis/cam/ auf. Die Seite aktualisiert sich nach Ablauf des konfigurierten Sekundenintervalls selbstständig.

Nachtaufnahmen

Seit Kurzem steht das für Nachtaufnahmen geeignete Pi-NoIR-Modul für den Raspberry Pi zum Kauf bereit [2]. Möchten Sie ein solches in Ihre Videoüberwachungslösung einbeziehen, müssen Sie den zu filmenden Ort zusätzlich mit unsichtbarem Infrarotlicht ausleuchten. Tagsüber sorgt der fehlende Infrarotfilter der Pi-NoIR-Kameravariante jedoch dafür, dass das Bild leichte Falschfarben aufweist.

Das Pi-NoIR-Modul ergibt im Rahmen einer Videoüberwachung nur dann Sinn, wenn die Kamera unentdeckt bleiben soll. In allen anderen Fällen setzen Sie besser die Standard-Variante ein, deren Bilder bei Tageslicht keine Falschfarben aufweisen. Und das Problem der nächtlichen Dunkelheit lässt sich hier dadurch lösen, dass Sie an den Aufstellungsorten einfach eine herkömmliche Lampe montieren und an einen Bewegungsmelder koppeln.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

08/2018
Projekte & Hacks

Diese Ausgabe als PDF kaufen

Preis € 7,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Fernverkehr

    Zwar wurde I2C eigentlich für die interne Gerätekommunikation konzipiert, doch mithilfe geeigneter Extender-Bausteine überbrückt der Bus Distanzen bis zu 100 Metern.

  • Neues auf der Heft-DVD

    Nur mit dem optimalen System und der richtigen Software nutzen Sie das volle Potenzial eines Mini-PC. Mit der Heft-DVD erhalten Sie nicht nur die neusten Distributionen für den RasPi und Co., sondern gleichzeitig auch die passenden Programme zu den Artikeln.

  • Farbenspiele

    Der winzige Sensorbaustein APDS-9960 vereint vier unterschiedliche Anwendungsfälle in einem Chip.

  • Finger weg!

    Mit einem Read-only-Dateisystem schützen Sie die SD-Karte vor dem Altern durch Schreibvorgänge. Beim Aufsetzen gilt es, einige wichtige Punkte zu beachten.

  • Auf Zuruf

    Mit dem bereits Anfang 2017 angekündigten und jetzt endlich verfügbaren Voice offeriert Matrix Labs eine neue Erweiterung, die den Raspberry Pi fit für Sprachsteuerung machen soll.

  • Experimentell

    Wer elektronische Schaltungen entwirft, experimentiert oft erst einmal mit einem Breadboard. Genau für diese Bastler bietet sich der NanoPi-Duo als Steuerrechner an.

  • Aufgemöbelt

    Mit dem Desktop-Kit von Farnell gibt der RasPi auch auf dem Schreibtisch technisch und optisch eine gute Figur ab.

  • PiBot

    Aus einem Fischertechnik-Baukasten lässt sich schon mit wenigen Teilen ein Roboter aufbauen. Fehlt nur noch ein Gehirn: Das stellt der Raspberry Pi.

  • Heißkalt serviert

    Wie verwandelt sich ein Linux-System auf einem RasPi in einen Datenlogger? Indem es mit einem Bluetooth-fähigen Multimeter spricht.

  • Türwächter

    Der RasPi beteiligt sich am Internet der Dinge und wacht als smartes Schließsystem autonom über den Zugang zum Eigentum.