Files
PiCopy/README.md
Tobias Leuschner a15d27ce14 Release v1.0 – PiCopy vollständig dokumentiert und bereit zur Veröffentlichung
- README.md mit vollständiger Anleitung, Features, Tabellen und Schnellstart
- install.sh neu geschrieben: sauberer Installer mit Farbausgabe, apt-Check,
  Download-Fallback und abschließender Statusmeldung mit URL
- LICENSE (MIT) hinzugefügt
- .gitignore: config.json, state.json, rclone.conf, logs/ und deploy.sh excluded
- deploy.sh entfernt (enthielt Zugangsdaten)
- requirements.txt aktualisiert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 01:58:47 +02:00

7.9 KiB
Raw Blame History

PiCopy

Automatische USB-Backup-Station für den Raspberry Pi mit Web-Interface

PiCopy verwandelt deinen Raspberry Pi in ein eigenständiges Backup-Gerät. Stecke eine Quell-USB (Speicherkarte, USB-Stick) und ein Ziel-Laufwerk ein PiCopy kopiert die Daten automatisch, organisiert sie in Datumsordnern, prüft die Integrität und kann danach auf ein NAS hochladen.


Features

Feature Beschreibung
📋 Automatisches Kopieren Startet sofort wenn Quelle und Ziel eingesteckt werden
🌐 Web-Interface Konfiguration und Status von jedem Gerät im Netzwerk
📂 Datei-Explorer Inhalt verbundener Laufwerke direkt im Browser durchsuchen
🗂️ Smarte Organisation Erstellt automatisch Datumsordner (2024-01-15_143022/)
🔍 Dateifilter Nur Fotos, nur Videos oder beliebige Dateitypen kopieren
🔄 Duplikat-Behandlung Überspringen / Überschreiben / Umbenennen
MD5-Verifizierung Jede Datei nach dem Kopieren auf Integrität prüfen
🗑️ Quelle leeren Quelldateien nach erfolgreichem Kopieren löschen (Move-Modus)
🖧 NAS / SMB Upload Nach dem lokalen Backup auf ein Netzlaufwerk hochladen
📡 WiFi-Fallback Erstellt einen eigenen Hotspot wenn kein WLAN verfügbar ist
Headless-Betrieb Kein Monitor, keine Tastatur nötig
🔁 Autostart Startet automatisch beim Pi-Boot via systemd

Voraussetzungen

  • Raspberry Pi (2, 3, 4, 5 oder Zero 2W)
  • Raspberry Pi OS Bookworm (Debian 12) oder neuer
  • Mindestens 2 USB-Ports (Quelle + Ziel)
  • WLAN oder LAN für das Web-Interface

Installation

Option A Direkt vom Git-Repo (empfohlen)

git clone https://github.com/YOUR_USERNAME/picopy
cd picopy
sudo bash install.sh

Option B One-Liner

curl -sSL https://raw.githubusercontent.com/YOUR_USERNAME/picopy/main/install.sh | sudo bash

Nach der Installation ist das Web-Interface unter folgender Adresse erreichbar:

http://<raspberry-pi-ip>:8080

Die IP-Adresse wird am Ende der Installation angezeigt.


Schnellstart

  1. Web-Interface öffnenhttp://<pi-ip>:8080
  2. USB-Gerät einstecken das als Quelle dienen soll
  3. Port konfigurieren → Unter USB Port Konfiguration das Gerät in der Dropdown-Liste wählen → Als feste Quelle speichern
  4. Ziel konfigurieren → Ziel-Laufwerk einstecken, Port wählen → Als festes Ziel speichern
  5. Auto-Kopie aktivieren → Haken bei Automatisch kopieren wenn Quelle & Ziel verbunden
  6. Fertig → Jetzt beide Laufwerke einstecken → Kopie startet automatisch

Wichtig: PiCopy merkt sich den physischen Port (Anschluss), nicht das spezifische Gerät. Ein anderer USB-Stick im gleichen Anschluss wird automatisch als Quelle/Ziel erkannt.


Web-Interface

Kopierstatus

Zeigt den Live-Fortschritt mit:

  • Prozentualer Fortschritt + Fortschrittsbalken
  • Dateizähler (23 / 147 Dateien)
  • Übertragene Datenmenge (1.2 GB / 3.5 GB)
  • Geschwindigkeit (12.4 MB/s)
  • Verbleibende Zeit (⏱ noch ca. 4 Min.)
  • Aktuelle Datei
  • Phasen-Anzeige: Kopieren → Verifizieren → Quelle leeren

Nach dem Abschluss: Zusammenfassung mit ✕-Button (verschwindet nach 5 Minuten automatisch).

USB Port Konfiguration & Datei-Explorer

┌─────────────────┬─────────────────┬──────────────────────┐
│  ▲ QUELLE       │  ▼ ZIEL         │  ⬆ Quelle  ⬇ Ziel  ↻ │
│  ● Port 2-2     │  ○ Port 1-1     │  ──────────────────── │
│  Samsung USB    │  Nicht verbunden│  📁 DCIM              │
│                 │                 │  📁 MISC              │
│  [Als Quelle ▾] │  [Als Ziel   ▾] │  🖼 IMG_001.jpg  4 MB │
└─────────────────┴─────────────────┴──────────────────────┘
  • Grüner Punkt = Gerät verbunden und bereit
  • Grauer Punkt = Port konfiguriert, kein Gerät eingesteckt
  • Datei-Explorer zum Durchsuchen der verbundenen Laufwerke

Kopier-Einstellungen

Einstellung Standard Beschreibung
Datumsformat JJJJ-MM-TT Format des Zielordners
Uhrzeit Uhrzeit im Ordnernamen (_143022)
Unterordner Unterordner nach Gerätebezeichnung
Auto-Kopie Automatisch starten wenn beide verbunden
Dateifilter leer Nur bestimmte Dateitypen kopieren
Systemdateien .DS_Store, Thumbs.db, RECYCLER usw. ausschließen
Duplikate Überspringen Skip / Überschreiben / Umbenennen
MD5-Verify Jede Datei nach dem Kopieren prüfen
Quelle leeren Quelldateien nach Kopieren löschen

Dateifilter Schnell-Presets

Preset Dateitypen
📷 Fotos jpg, jpeg, heic, raw, cr2, nef, arw, dng, png
🎬 Videos mp4, mov, avi, mkv, mts, m2ts, wmv
📷+🎬 Beides Fotos + Videos kombiniert
✕ Alle Kein Filter alle Dateien kopieren

Fernkopie NAS / SMB

Nach dem lokalen Kopieren lädt PiCopy auf konfigurierte NAS-Freigaben hoch:

  1. NAS-Ziel hinzufügen klicken
  2. Name, Server-IP, Freigabename, Benutzer und Passwort eingeben
  3. Speichern & Verbindung testen PiCopy testet die Verbindung sofort
  4. Mehrere NAS-Ziele möglich, jedes einzeln aktivierbar

WiFi-Einstellungen

Modus Beschreibung
Heimnetz WLAN-Name und Passwort für die Router-Verbindung
Hotspot (AP) Eigenes WLAN wenn kein Heimnetz erreichbar

Hotspot-Standardwerte:

  • SSID: PiCopy
  • Passwort: PiCopy,
  • IP im Hotspot-Modus: http://10.42.0.1:8080

Der Hotspot startet automatisch beim Boot wenn das konfigurierte WLAN nicht verfügbar ist.


Ordnerstruktur auf dem Ziel

/ziel-laufwerk/
└── 2024-01-15_143022/         ← Datum + Uhrzeit (konfigurierbar)
    └── Samsung_USB/           ← Gerätebezeichnung (wenn Unterordner aktiv)
        ├── DCIM/
        │   └── 100CANON/
        │       ├── IMG_0001.JPG
        │       ├── IMG_0001.CR2
        │       └── IMG_0002.MP4
        └── MISC/
            └── notes.txt

Update

cd picopy
git pull
sudo cp app.py /opt/picopy/app.py
sudo systemctl restart picopy

Deinstallation

sudo systemctl stop picopy
sudo systemctl disable picopy
sudo rm /etc/systemd/system/picopy.service
sudo rm -rf /opt/picopy
sudo systemctl daemon-reload

Service-Verwaltung

# Status prüfen
sudo systemctl status picopy

# Live-Logs
journalctl -u picopy -f

# Neustart
sudo systemctl restart picopy

# Stoppen
sudo systemctl stop picopy

Technische Details

Komponente Technologie
Backend Python 3 + Flask
USB-Erkennung lsblk + udevadm
USB-Monitoring pyudev (udev-Events)
WiFi-Verwaltung NetworkManager (nmcli)
NAS-Sync rclone (SMB)
Service systemd (Autostart, Auto-Restart)

Dateipfade auf dem Pi:

Pfad Inhalt
/opt/picopy/app.py Hauptanwendung
/opt/picopy/config.json Konfiguration (Ports, WiFi, Einstellungen)
/opt/picopy/state.json Letzter Kopierstatus (persisted)
/opt/picopy/rclone.conf NAS-Zugangsdaten (rclone)
/opt/picopy/logs/picopy.log Log-Datei
/etc/systemd/system/picopy.service Systemd-Service

Getestete Hardware

Gerät Status
Raspberry Pi 4 Model B Vollständig getestet
Raspberry Pi 5 Kompatibel
Raspberry Pi 3 Model B+ Kompatibel
Raspberry Pi Zero 2W ⚠️ Langsamer, nur 1 USB-Port (Hub benötigt)

Lizenz

MIT License siehe LICENSE


Autor

Tobias Leuschner info@leuschner.dev