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

257 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
```bash
git clone https://github.com/YOUR_USERNAME/picopy
cd picopy
sudo bash install.sh
```
### Option B One-Liner
```bash
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 öffnen**`http://<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
```bash
cd picopy
git pull
sudo cp app.py /opt/picopy/app.py
sudo systemctl restart picopy
```
---
## Deinstallation
```bash
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
```bash
# 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](LICENSE)
---
## Autor
Tobias Leuschner [info@leuschner.dev](mailto:info@leuschner.dev)