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).
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.
Infos
- PiMenu:http://github.com/splitbrain/pimenu
- Paper Backup: http://www.splitbrain.org/blog/2014-08/25-paper_backup_3_user_interface
- Adafruit PiTFT: http://www.adafruit.com/product/1601
- PiTFT-Pibow-Gehäuse:http://www.exp-tech.de/pitft-pibow
- PiTFT-Pibow-Dokumentation: http://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/overview
- RPi-Display: http://www.watterott.com/en/RPi-Display
- Tek-Berry-Gehäuse für RPi-Display: http://www.watterott.com/index.php?page=product&info=3614
- GitHub-Repo für das RPi-Display: http://github.com/watterott/RPi-Display






