Startseite>PiMenu: Bedienoberfläche für LCD-Touchscreens
Aus Raspberry Pi Geek 02/2015

PiMenu: Bedienoberfläche für LCD-Touchscreens (Seite 2)

Listing 3

 

#!/bin/bash
key=$(echo "$*" | awk 'NF>1{print $NF}')
case $key in
  Camera)
    ps aux | grep -ie gphoto2 | awk '{print $2}' | xargs kill -9
    cd
    if [ ! -d "FOTOS" ]; then
      mkdir FOTOS
    fi
    cd FOTOS
    gphoto2 --get-all-files --new --filename "%Y%m%d-%H%M%S.%C"
    ;;
  USB)
    cd
    if [ ! -d "FOTOS" ]; then
      mkdir FOTOS
    fi
    USB_MOUNT_POINT=$(find /media/ -mindepth 1 -maxdepth 1 -not -empty -type d | sed 's/ /\\ /g')
    exiftool -r -d /home/pi/FOTOS/%Y%m%d-%H%M%S.%%e '-FileName<DateTimeOriginal' $USB_MOUNT_POINT >> /home/pi/transfer.log
    ;;
  Backup)
    cd
    if [ ! -d "FOTOS" ]; then
      exit 1
    fi
    USB_MOUNT_POINT=$(find /media/ -mindepth 1 -maxdepth 1 -type d | sed 's/ /\\ /g')
    eval rsync -avhz /home/pi/FOTOS/ $USB_MOUNT_POINT/ --log-file=/home/pi/backup.log
    ;;
  '')
    ps aux | grep -ie pimenu | awk '{print $2}' | xargs kill -9
    ;;
esac
sleep 3

Backup-Box im Detail

Im Folgenden sehen wir uns nun einmal genauer an, was in den einzelnen Abschnitten der Case-Anweisung eigentlich genau passiert. Sobald Sie die Kachel Camera antippen, beendet das Skript zunächst einmal alle noch laufenden Prozesse von Gphoto2:

ps aux | grep -ie gphoto2 | awk '{print $2}' | xargs kill -9

Dies stellt sicher, dass keine noch laufenden Gphoto2-Prozesse die Kamera blockieren und dadurch möglicherweise den Transfer der Fotos verhindern (Listing 3, Zeile 5). Der Ordnung halber speichert das Skript alle von der Kamera heruntergeladenen Bilder im Ordner FOTOS im Home-Verzeichnis ab. Falls dieses noch nicht existiert, legt das Skript es dazu an (Zeilen 7 bis 9). Schließlich lädt es mit dem folgenden Befehl die Bilder von der Kamera herunter, wobei es sie gemäß Datum und Uhrzeit umbenennt:

gphoto2 --get-all-files --new --filename "%Y%m%d-%H%M%S.%C"

Der Abschnitt, der Bilder vom angeschlossenen USB-Gerät zurück auf den RasPi holt (Zeilen 13 bis 20), geht davon aus, dass lediglich ein solches Gerät oder ein einzelner Card-Reader am Mini-Rechner hängt. Zunächst ermittelt folgendes Kommando den Einhängepunkt des USB-Massenspeichers:

USB_MOUNT_POINT=$(find /media/ -mindepth 1 -maxdepth 1 -not-empty -type d | sed 's/ /\\ /g')

Dazu durchsucht find das Verzeichnis /media nach Ordnern, die nicht leer sind. Mittels des Stream-Editors Sed sorgt der zweite Teil des Kommandos für ein sauberes Escaping von eventuellen Leerzeichen im Verzeichnisnamen. So wird aus /media/NIKON D90/DCIM/100NCD90/ beispielsweise /media/NIKON\ D90/DCIM/100NCD90/.

Auch für das Sichern der von der Kamera übertragenen Fotos (Zeilen 21 bis 28) ermittelt das Skript zunächst einmal den Einhängepunkt des fraglichen Massenspeichers. Anschließend kopiert es die Dateien mithilfe des Befehls rsync auf den USB-Datenträger.

Tippen Sie eine Kachel an, für die es keine Untermenüpunkte gibt, wie in unserem Beispiel Exit, bleiben der an pimenu.sh zurückgelieferte String und damit auch $key leer. Daher schließt die entsprechende Case-Verzweigung in diesem Fall alle noch laufenden PiMenu-Prozesse (Zeilen 29 bis 31).

Letzte Handgriffe

Nachdem Sie PiMenu fertig konfiguriert haben und es zum Einsatz bereitsteht, gibt es nur noch zwei Dinge zu erledigen: Zum einen müssen Sie die benötigten Pakete gphoto2, libimage-exiftool-perl und rsync einrichten, sofern diese nicht bereits auf dem RasPi installiert sind (Listing 4).

Zum anderen legen Sie in Ihrem Home-Verzeichnis einen Desktop-Shortcut für PiMenu an, damit Sie es nicht per Tastatur aufrufen müssen. Die dazu notwendige Datei erzeugen Sie mit dem Befehl touch pimenu.desktop und öffnen sie dann in einem beliebigen Editor – Nano steht in jedem Fall dazu parat. Tippen Sie die Zeilen aus Listing 5 ein und speichern Sie die Datei dann wieder.

Tippen Sie anschließend den frischen Desktop-Shortcut doppelt an, dann erscheint Ihr hausgemachtes PiMenu in all seiner Pracht (Abbildung 1).

Abbildung 1: Das Kachel-Interface von PiMenu aus unserem Beispiel. Hier hat der Autor den Punkt Exit aus den Code-Beispielen kurz entschlossen noch nach Back… umbenannt.

Abbildung 1: Das Kachel-Interface von PiMenu aus unserem Beispiel. Hier hat der Autor den Punkt Exit aus den Code-Beispielen kurz entschlossen noch nach Back… umbenannt.

Listing 4

 

$ sudo apt-get update
$ sudo apt-get install gphoto2 libimage-exiftool-perl rsync

Listing 5

 

[Desktop Entry]
Name=PiMenu
Comment=PiMenu
Exec=/home/pi/pimenu/pimenu.py
Icon=lxterminal
Terminal=false
MultipleArgs=false
Type=Application
StartupNotify=true

Ausblick

Dank der hohen Flexibilität von PiMenu passen Sie das vorgestellte Projekt schnell für weitere Einsatzzwecke an. So lässt es sich beispielsweise problemlos für ein Cloud-Backup (per Rsync via SSH) erweitern, für eine Vorschau der von der Kamera heruntergeladenen Fotos anpassen und anderes mehr. Im Bedarfsfall modifizieren Sie die Pi-Backup-Box auch für die Sicherung von Dateien und Dokumenten statt für das Backup von Fotos.

Daneben eröffnet PiMenu aber auch ganz andere Einsatzbereiche: So könnten Sie den Raspberry Pi etwa als Internetradio einsetzen, bei dem Sie über die Kacheln den gewünschten Sender auswählen. Auch als einfacher Anwendungsstarter ließe sich das clevere Skriptsystem verwenden. Wie auch immer: Wenn Sie einen RasPi mit Touchscreen ihr Eigen nennen, kann Ihnen PiMenu in vieler Hinsicht das Leben leichter machen. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland