Aus Raspberry Pi Geek 08/2017

Aufnahmen von IP-Kameras bei Bewegung per E-Mail melden (Seite 2)

Listing 1

 

$ Debug/passwordCrypto.exe
passwordCrypto: Convert passwords to encrypted strings and backwards.
  -e <password>      Encrypt a password
  -d <encrypted password> Decrypt a password
  -t <password>      Perform round-trip encryption/decryption
              (for test purposes).
If the password contains spaces, then it should be enclosed in '"'s
$ Debug/passwordCrypto.exe -e dfghjk
CODE_BEGIN_GWoR8OW1Nshn7JnUMFpaUw==_END_CODE

TIPP

Je nach Konfiguration und Geschehen vor der Kamera versendet das Überwachungssystem eine große Menge an E-Mails. Allerdings begrenzen viele E-Mail-Provider die Anzahl der E-Mails, die man pro Tag senden darf, um Spammern das Handwerk zu erschweren. So beschränkt Googles E-Mail-Dienst Gmail den Versand von E-Mails beispielsweise auf 500 Mails pro Tag.

Entwicklungsumgebung

Theoretisch könnte man Anwendungen wie die vorliegende direkt auf dem Raspberry Pi entwickeln. Mit einer Headless-Konfiguration mit nur einer Kommandozeilenschnittstelle kommt jedoch schnell das Verlangen nach einer komfortablen Entwicklungsumgebung auf. Der Autor erstellte das Programm daher mit Eclipse C++ [4] unter Ubuntu sowie Windows (mit Cygwin) und kopierte den Quellcode nach Bedarf zum RasPi. Da ein Teil des Codes automatisch durch ein Perl-Skript generiert wird, muss unter Eclipse eine Datei makefile.defs im Verzeichnis VipsTest2 vorliegen (Listing 2).

Listing 2

 

# makefile.defs - Extension to eclipse makefile to
# better set the dependencies for code generation
SRC_DIR = ../src
$(SRC_DIR)/settings_gen.h : $(SRC_DIR)/settings.csv $(SRC_DIR)/GenSettings.pl
  @echo Generating settings files
  perl ../src/GenSettings.pl ../src/settings.csv
  @echo Code generation complete

Benutzte Bibliotheken

Das Programm nutzt eine Reihe freier Bibliotheken. So liefert die Libcurl [1] Client-Unterstützung für mehrere Kommunikationsprotokolle inklusive FTP, SFTP, SMTP und SMTPS. Da die Standardinstallation für den Raspberry Pi eine veraltete Libcurl-Version enthält, müssen Sie eine neuere Version gesondert installieren.

Bei Libquickmail [2] handelt es sich um einen Client für den Versand von E-Mails. Die Bibliothek nutzt Libcurl, besitzt aber eine einfache Programmierschnittstelle. Der Programmcode auf der Heft-DVD umfasst eine aktuelle Version von Libquickmail.

Die leistungsfähige Bildverarbeitungsbibliothek Libvips [3] stellt eine Vielzahl von Funktionen zur digitalen Bildbearbeitung bereit und bietet eine C- und eine C++-Schnittstelle.

Vorbereitungen

Als Betriebssystem für den RasPi verwenden Sie idealerweise Raspbian “Jessie” Lite in einer Headless-Konfiguration. Beachten Sie, dass Raspbian den SSH-Server nicht von Haus aus aktiviert. Legen Sie daher nach dem Schreiben des Images eine leere Datei namens ssh in der Boot-Partition an. Das veranlasst das System, den SSH-Server gleich beim Booten zu laden.

Melden Sie sich nun per SSH auf dem RasPi an und installieren in einem ersten Schritt einen FTP-Server. Auf dem Projekt-RasPi kommt dazu Proftpd [5] zum Einsatz. Die Installationsroutine unterscheidet zwischen dem Standalone-Betrieb und dem bedarfsabhängigen Start des Diensts über Inetd. Für das Projekt sollten Sie sich für die Installation als eigenständigen Dienst (also “Standalone”) entscheiden [6].

Die Standardkonfiguration in der Datei /etc/proftpd/conf.d/proftp-custom.conf passen Sie so an, dass es zwei FTP-Nutzer gibt: ftpuser und pi (Listing 3). Für Verwaltungsaufgaben hat pi Zugriff auf das gesamte Dateisystem. Die Kameras und das Programm nutzen aus Sicherheitsgründen jedoch nur den ftpuser. Als Windows-Anwender installieren Sie Filezilla [7] oder WinSCP [8] für den Zugriff auf den FTP-Server. Unter Linux können Sie sich das sparen, da Dateimanager wie Nautilus oder Dolphin von Haus aus netzwerkfähig sind.

Listing 3

 

# proftp-custom.conf (angepasst)
# Ftp user does not need a valid shell
<Global>
    RequireValidShell off
</Global>
# Default directory is ftpusers home
DefaultRoot ~ ftpuser
# Limit login to ftpuser and pi
<Limit LOGIN>
    AllowUser ftpuser,pi
    DenyUser !ftpuser,!pi
</Limit>

Bei entsprechender Konfiguration dient der Ordner /var/www/upload/ als Home-Verzeichnis für ftpuser. In diesem Verzeichnis erstellen Sie nun pro Kamera einen Unterordner. Die Namen der Verzeichnisse dürfen Sie dabei frei wählen, Sie müssen die Namen jedoch in den Kameras und in der Ini-Datei entsprechend anpassen.

Aktuelle Bibliotheken

Das im Quellcode enthaltene Skript checkforcurl.sh prüft, ob eine ausreichend aktuelle Version (mindestens 7.47.0) von Curl vorliegt, und weist auf ein eventuell nötiges Update hin. Zur Aktualisierung deinstallieren Sie die alte Curl-Version über die Paketverwaltung und bauen die aktuellste Version von Hand [9].

Nun installieren Sie die für Libvips notwendigen Pakete und Programme (Listing 4, Zeile 1) und laden dann den Tarball der Bibliothek herunter. Erhalten Sie die Meldung ... libcurl.so.4: cannot open ..., dann führen Sie wie in Listing 5 gezeigt das Skript checkforcurl.sh aus, um die notwendige Umgebungsvariable LD_LIBRARY_PATH zu setzen. Dabei sorgt das source Präfix dafür, dass das Skript in derselben Shell läuft und nicht in einer Sub-Shell. Danach müsste der curl-Befehl bei einem erneuten Aufruf funktionieren.

Listing 4

 

$ sudo apt-get install gtk-doc-tools libjpeg-dev libexif-dev build-essential pkg-config glib2.0-dev libxml2-dev gobject-introspection libexpat1-dev
$ curl -O http://www.vips.ecs.soton.ac.uk/supported/current/vips-8.4.5.tar.gz
$ tar -zxvf vips-8.4.5.tar.gz
$ cd vips-8.4.5
$ ./configure
$ make
$ sudo make install

Listing 5

 

$ Pfad zum Skript source checkforcurl.sh

Nun entpacken und bauen Sie Libvips (Listing 4 ab Zeile 3). Kontrollieren Sie dabei die Ausgabe des Kommandos ./configure: Dort sollten Sie am Ende die Zeilen file import/export with libjpeg: yes und use libexif to load/save JPEG metadata: yes finden. Falls nicht, ziehen Sie über die Paketverwaltung die Pakete libjpeg-dev sowie libexif-dev nach.

Alternativ laden Sie die jüngste Version von Libvips aus dem Github des Projekts [11]. Folgen Sie dazu den Hinweisen im Abschnitt Building libvips from git der Seite.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben