Raspberry Pi

CopyPii – Mit dem Raspberry Pi automatisch jede eingelegte SD Karte kopieren

4.7/5 - (8 votes)

Auf unseren Treffen ist es immer sehr mühsehlig die Speicherkarten von den ganzen FPV’lern zu kopieren. Vorallem wenn man dafür nur eine oder zwei Stunden Zeit hat. Also hab ich mir überlegt, was man machen kann. Die Lösung: Ein Raspberry Pi in einem schicken Pinken Gehäuse mit eingebauter SSD und der Cardreader wird als USB-Datenschleuder missbraucht!

copyPii – mit dem Raspberry automatisch jede eingelegte SD Karte kopieren!

Benötigte Bauteile

Das ganze soll dann am Schluss so aussehen

Akkuversorgung

Der CopyPii wird per XT-60 und einem 3-5S Akku versorgt (je nach verwendetem BEC) und wartet auf eine SD Karte die in den eingebauten USB-Hub eingeschoben wird. Intern arbeitet eine SSD mit 128 GB Speicher und wartet nur darauf befüllt zu werden. Den Raspberry versorge ich direkt per Kabel. Ich habe die Versorgungsleitung einfach am Input angelötet. Vor der Diode.

Linuxkenntnisse

  • Mount einer Festplatte und der USB-Sticks
  • Einrichtung von Samba
  • W-Lan einrichtung
  • Ansteuerung des TFT Displays

Das eigentliche Kopier-Script habe ich von hier: https://github.com/LarsMichelsen/sd-autocopy

Dort steht auch erklärt, wie das Script funktioniert und was man alles für Vorbereitungen treffen muss.

Geändert habe ich lediglich dass er von jeder Speicherkarte kopiert, die man in den Hub einsteckt. Es findet somit keine Seriennummernüberprüfung der Speicherkarte mehr statt. Ebenso erstellt das Script einen Unterordner mit einem Timestamp, damit man keine Bilder oder Videos überschreibt.

Die Änderung dass er von jedem Stick kopiert habe ich wieder rückgängig gemacht. Linux hat die Eigenheit, dass es “tote scripte” nach kurzer Zeit aus dem Speicher wirft. Was bei großen Dateien (Videos von der Gopro) echt zu problemen führt!

Fotodatum

Das Script ließt das Fotodatum aus und erstellt je nach Aufnahmedatum wieder einen Unterordner.

#!/bin/bash
#
# sd-autocopy - Copies/Moves images automatically from inserted media
# 
# Copyright (c) 2011 Lars Michelsen <lm@larsmichelsen.com;
# 
# License:
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
# But this in curly braces and detach the whole block to background
# for not blocking udev during copying.
{
 
USER=root #unter welchen Rechten die Dateien gespeichert werden -- SMB USER!
TARGET=/media/ssd/_upload #Zielverzeichnis eintragen
HANDLED_SERIALS=Multiple_Card_Reader_058F63666438-0:0
MOUNT=/media/cardreader #Ordner vorher erstellen
FILE_MATCH=".*.(jpg|cr2|jpeg|pdf|mkv|avi|mp4|3gp|mpg|mov|mpeg|wma|wmv|vob|mts)$" #hier die Dateiformate eintragen
TRANSFER=cp #cp für kopieren, mv für verschieben
TIMESTAMP=$(date +%Y%m%d%H%M%S) #timestamp für Unterordner
 
# END OF CONFIGURATION ########################################################
 
# DEBUG:
# To enable debugging without udev events uncomment the lines below
#ID_SERIAL=0x000006d4
#DEVNAME=/dev/mmcblk0p1
 
# Catch unset but needed vars - terminate script
if [ -z "$ID_SERIAL" ] || [ -z "$DEVNAME" ]; then
    exit 1
fi
 
if ! echo "$HANDLED_SERIALS" | grep $ID_SERIAL >/dev/null 2>&1; then
    logger -t sd-autocopy "Card not accepted!"
    exit 1
fi
 
logger -t sd-autocopy "Karte akzeptiert. Starte Kopiervorgang..."
 
if [ ! -d "$MOUNT" ]; then
    mkdir -p "$MOUNT"
fi
 
mount $DEVNAME "$MOUNT"
 
LINES=$(find "$MOUNT" -regextype posix-egrep -iregex "$FILE_MATCH" -printf "%TY-%Tm-%Td_%pn")
DATES=$(echo "$LINES" | cut -d_ -f1 | uniq)
 
# First create the directories when missing
for DATE in $DATES; do
    echo $DATE
    mkdir -p "$TARGET/$TIMESTAMP/$DATE"
done
 
# Move the images
NUM=0
for LINE in $LINES; do
    DATE=${LINE%%_*}
    FILE=${LINE#*_}
    logger -t sd-autocopy "Kopiere $FILE"
    $TRANSFER "$FILE" "$TARGET/$TIMESTAMP/$DATE"
    NUM=$(($NUM+1))
done
 
umount $DEVNAME
 
# Fix the permissions for all directories recursive where
# files have been copied/moved to
for DATE in $DATES; do
    chown -R $USER.$USER "$TARGET/$TIMESTAMP"
chmod -R 775 /media/ssd
done
logger -t sd-autocopy "Fertig! $NUM Dateien kopiert."
 
} &
exit 0

TFT mit Syslog

Ich habe zusätzlich noch einen TFT eingebaut, der mir den Syslog anzeigt, da mir die Kenntnisse in Python fehlen um das ganze grafisch etwas schöner gestalten zu können. Ein “system halt” Button hab ich auf einen Button vom TFT hinterlegt, damit ein sauberes Herunterfahren immer gewährt wird. Momentan stelle ich fest, wenn eine Karte fertig ist, dass die USB-Reader nicht mehr blinken.

Weitere ToDo’s

  • grafische Oberfläche mit python auf dem TFT ohne startx
  • Evtl. Namen generieren für Ordner je nach eingelegter Speicherkarte

Also, wen Du das ganze noch ein bisschen mit einer grafischen Python Oberfläche aufpeppeln kannst, melde Dich! Im endeffekt würde es schon reichen, wenn man den syslog ausließt und auf Nachrichten filtert. Dies dann auf dem TFT ausgibt.

Das Gehäuse habe ich oben als STL mal mit drangehängt. Bitte beachtet, das der RaspberryPi mount von hier stammt.

Viel Spaß beim Nachbauen! Bei Fragen, bitte einfach in die Kommentare und ich versuche zu helfen!

Christoph

Leidenschaftlicher FPV Modellflieger und versucht sich hi und da in der Welt der Elektronik einzufinden. Wenn sein 3D Drucker mal nicht will, hat er direkt nebendran einen großen Hammer zur Drohung liegen!

View Comments

  • Ich hoffe, das hier lebt noch... Ich habe da eine Frage:
    Ich wollte gerne das Script nutzen. Wenn ich es aber nun mit "sudo bash sd-autocopy" starte, bekomme ich folgende Fehlermeldungen:

    sd-autocopy: Zeile 21: $'\r': Kommando nicht gefunden.
    sd-autocopy: Zeile 24: $'{\r': Kommando nicht gefunden.
    sd-autocopy: Zeile 25: $'\r': Kommando nicht gefunden.
    sd-autocopy: Zeile 33: $'\r': Kommando nicht gefunden.
    sd-autocopy: Zeile 35: $'\r': Kommando nicht gefunden.
    sd-autocopy: Zeile 40: $'\r': Kommando nicht gefunden.
    sd-autocopy: Zeile 63: Syntaxfehler beim unerwarteten Wort `$'do\r''
    'd-autocopy: Zeile 63: `for DATE in $DATES; do

    Kannst du du mit da bitte weiterhelfen?

    Ich versuche das ganze auf einem Raspberry Pi 3 mit Raspbian.

    • Hi Sascha, das sieht mir ganz nach einem versteckten Zeilenumbruch in deinem Script aus. Hast Du das mit einen kompatiblem Editor (z.B. Notepad++) bearbeitet?

      Versuchs mal mit dem Befehl:
      sed -i 's/\r$//' sd-autocopy und anschließend nochmal ausführen.

  • Danke. Nach dem Befehl kommt keine Fehlermeldung mehr.
    Nun scheint aber nichts zu geschehen. Ist das normal, dass das Script nichts macht, wenn keine SD-Karte angeschlossen wird?
    Auch wenn nun eine SD-Karte angeschlossen wird, passiert nichts nach Ausführen des Scripts. Es kommt auch keine Meldung.

    • Das sollte schon funktionieren. Steck mal die SD Karte samt Kartenleser an. Nicht nacheinander.

  • Danke für die schnelle Antwort. Ich habe es genauso gemacht. SD-Karte samt Kartenleser. Es passiert trotzdem nichts.

    • Was sagt denn DMESG? Nutze das script schon eine ganze Weile nicht mehr.

  • Hallo,
    ich wollte die coole Idee auch umsetzen doch leider habe ich kaum einen Plan von Linux und stehe deshalb etwas vor Problemen. Könnte mir einer kurz sagen wie man das auf dem Raspberry Pi einrichten muss damit es läuft? .... Ich komme kein Stück vorwärts 
    Gruß Ben

Recent Posts

DJI HD FPV Brille und Airunit sowie Vista rooten

Seit einer Weile bin ich nun auch unter den HD Piloten. Und vor kurzem hat…

2 Jahren ago

Teksumo FPV / Entschleunige….

Du suchst was gemütliches, einfaches, etwas zum runter kommen? Dann entschleunige! Mit dem Teksumo FPV…

5 Jahren ago

Rund um Wingracing / Specwing / Nanowing

Das neue Jahr starten wir mal mit einem kleinen Regelwerk für die kommenden Wingraces. Egal…

5 Jahren ago

FrSky Taranis QX7 Startup Screen ändern

Wenn Du Deine QX7 startest, so erscheint bei der Standard-Firmware das originale „Open-TX“-Logo. Dieses Logo…

6 Jahren ago

My Twin Dream, der FPV Geheimtipp…

Viele FPV-Flächen-Piloten haben bereits über Sie gelesen aber wenige fliegen Sie. Meine Meinung: Ein echter…

6 Jahren ago

Racecopter unter 250 Gramm – Der sub 250 in 3, 4 und 5 Zoll inkl. DXF!

Racecopter unter 250 Gramm sind eigentlich keine große Herausforderung. Man muss nur bestimmte Komponenten verwenden.…

6 Jahren ago