Volledig ontwerp dashcam-transfer: structuur, logica, automatisering
This commit is contained in:
parent
38f40a9499
commit
bc8139f2f1
1 changed files with 186 additions and 35 deletions
|
|
@ -1,24 +1,67 @@
|
||||||
# Dashcam Transfer — Ontwerp
|
# Dashcam Transfer — Ontwerp
|
||||||
|
|
||||||
## Huidige situatie (29 mei 2026)
|
## 1. Doel
|
||||||
|
|
||||||
### Hardware
|
Automatisch dashcam-opnames (MP4) verplaatsen van een SD-kaart naar een USB-SSD op een
|
||||||
- **Remote server**: Fedora Linux (`nextcloud`)
|
remote Fedora Linux server (`nextcloud`), met organisatie per datum en camera-positie.
|
||||||
- **SSD (USB)**: 4TB, automatisch gemount op `/mnt/ultratouch` via systemd automount (transient)
|
|
||||||
- Bestandssysteem: exfat
|
---
|
||||||
- 602 GB vrij (84% vol)
|
|
||||||
- Device: `/dev/sdc2`
|
## 2. Hardware & Mounts
|
||||||
- **SD-kaart (USB reader)**: Automatisch gemount op `/mnt/sdcard` via systemd automount (transient)
|
|
||||||
- Momenteel **niet ingeplugd** — automount faalt met "Dependency failed"
|
| Component | Mount point | Device | Bestandssysteem | Status |
|
||||||
- SD-kaart moet nog worden geïnspecteerd op mappenstructuur
|
|---|---|---|---|---|
|
||||||
|
| USB-SSD (4TB) | `/mnt/ultratouch` | `/dev/sdc2` | exfat | ✅ Gemount, 3,0T / 3,7T (82%) |
|
||||||
|
| SD-kaart (via USB reader) | `/mnt/sdcard` | `/dev/sdd1` | exfat | ✅ Gemount, 116G / 117G (100%) |
|
||||||
|
|
||||||
|
Beide mounts worden automatisch beheerd door systemd transient automount units.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. SD-kaart structuur (bron)
|
||||||
|
|
||||||
|
```
|
||||||
|
/mnt/sdcard/
|
||||||
|
├── Novatek/
|
||||||
|
│ ├── Movie/ ← MP4 opnames (338 bestanden, 116 GB)
|
||||||
|
│ ├── Photo/ ← leeg
|
||||||
|
│ └── EMR/ ← leeg
|
||||||
|
├── hitlittlev1.0.exe ← firmware-update tool
|
||||||
|
└── .Trash-1000/ ← macOS verborgen map
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bestandsnaam conventie
|
||||||
|
|
||||||
|
```
|
||||||
|
YYYYMMDDHHMMSS_XXXXXXXX<kamera>.MP4
|
||||||
|
```
|
||||||
|
|
||||||
|
- `YYYYMMDDHHMMSS` — datum + tijd van opname
|
||||||
|
- `XXXXXXXX` — sequentieel nummer
|
||||||
|
- `<kamera>`:
|
||||||
|
- `F` — **Front**camera
|
||||||
|
- `B` — **Back**camera (rear)
|
||||||
|
- Grootte: ~381 MB per bestand, ~5 minuten opname
|
||||||
|
|
||||||
|
### Voorbeelden
|
||||||
|
|
||||||
|
```
|
||||||
|
20260529085848_0003363F.MP4 → front camera, 29-05-2026 08:58:48
|
||||||
|
20260529085848_0003364B.MP4 → back camera, 29-05-2026 08:58:48
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. SSD structuur (doel)
|
||||||
|
|
||||||
|
### Bestaande data
|
||||||
|
|
||||||
### Bestaande mappenstructuur op SSD
|
|
||||||
```
|
```
|
||||||
/mnt/ultratouch/dashcam/
|
/mnt/ultratouch/dashcam/
|
||||||
├── 20250808/
|
├── 20250808/
|
||||||
│ ├── chauffeur/
|
│ ├── chauffeur/ ← 56 GB
|
||||||
│ └── weg/
|
│ └── weg/
|
||||||
├── 20250811/
|
├── 20250811/ ← 72 GB
|
||||||
│ ├── chauffeur/
|
│ ├── chauffeur/
|
||||||
│ └── weg/
|
│ └── weg/
|
||||||
├── ...
|
├── ...
|
||||||
|
|
@ -26,33 +69,141 @@
|
||||||
│ ├── front/
|
│ ├── front/
|
||||||
│ └── rear/
|
│ └── rear/
|
||||||
├── ...
|
├── ...
|
||||||
└── 20260425/
|
└── 20260425/ ← 59 GB
|
||||||
├── front/
|
├── front/
|
||||||
└── rear/
|
└── rear/
|
||||||
```
|
```
|
||||||
|
|
||||||
- **2025**: `chauffeur/` en `weg/` (vouwfiets dashcam?)
|
- 2025: mappen `chauffeur/` en `weg/` — oude dashcam
|
||||||
- **2026**: `front/` en `rear/` (auto dashcam met voor- en achtercamera)
|
- 2026: mappen `front/` en `rear/` — huidige dashcam
|
||||||
|
- Totale grootte: **3,0 TB**
|
||||||
|
- Oudste map: ~56 GB, nieuwste: ~59 GB
|
||||||
|
|
||||||
### Bestandseigenschappen
|
### Gewenste structuur (bij nieuwe transfers)
|
||||||
- Formaat: `.MP4`
|
|
||||||
- Grootte: ~381 MB per bestand
|
|
||||||
- Naamgevingsformaat: `YYYYMMDDHHMMSS_XXXXXXXXX.MP4` (bv. `20260425060958_0000001F.MP4`)
|
|
||||||
- Opname-interval: ~5 minuten per clip
|
|
||||||
|
|
||||||
### Transfer eisen (nog te verfijnen)
|
```
|
||||||
- **Detectie**: Automatisch bij inpluggen SD-kaart
|
/mnt/ultratouch/dashcam/
|
||||||
- **Modus**: Verplaatsen (move, niet copy)
|
└── YYYYMMDD/ ← datum uit bestandsnaam (bv. 20260529)
|
||||||
- **Organisatie**: `YYYYMMDD/front/` en `YYYYMMDD/rear/` op SSD
|
├── front/ ← bestanden met suffix F
|
||||||
- **Filter**: Alleen `.mp4` bestanden
|
│ └── YYYYMMDDHHMMSS_XXXXXXXXF.MP4
|
||||||
- **Opschonen**: Alleen overgezette bestanden verwijderen van SD-kaart
|
└── rear/ ← bestanden met suffix B
|
||||||
|
└── YYYYMMDDHHMMSS_XXXXXXXXB.MP4
|
||||||
|
```
|
||||||
|
|
||||||
### Automount configuratie
|
---
|
||||||
- Beide mount points via systemd transient units (geen statische unit-bestanden)
|
|
||||||
- Aanmaak via `systemd-mount` of udev-regels
|
|
||||||
|
|
||||||
## Volgende stappen
|
## 5. Transfer logica
|
||||||
1. SD-kaart inspecteren op mappenstructuur na inpluggen
|
|
||||||
2. Transfer-script schrijven (bash of Python)
|
### 5.1 Handmatige uitvoering
|
||||||
3. Service/trigger configureren (udev, systemd path unit, of systemd service)
|
|
||||||
4. Testen met echte data
|
Eerste implementatie: een bash-script dat handmatig gestart kan worden.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
/usr/local/bin/dashcam-transfer
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 Automatische trigger (later)
|
||||||
|
|
||||||
|
**Aanbevolen**: udev rule + systemd service.
|
||||||
|
|
||||||
|
- udev detecteert wanneer `/dev/sdd1` verschijnt (SD-kaart reader)
|
||||||
|
- Start een systemd oneshot service die het transfer-script uitvoert
|
||||||
|
- Eventueel: vertraging van 10-30 seconden zodat de automount klaar is
|
||||||
|
|
||||||
|
Alternatief: systemd path unit die `/mnt/sdcard/Novatek/Movie/` monitort.
|
||||||
|
|
||||||
|
### 5.3 Stappenplan
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Controleer of /mnt/sdcard gemount is
|
||||||
|
2. Scan /mnt/sdcard/Novatek/Movie/ op *.MP4 bestanden
|
||||||
|
2a. Als er geen MP4 bestanden zijn → stop
|
||||||
|
3. Bereken totale grootte van de te verplaatsen bestanden
|
||||||
|
4. Controleer vrije ruimte op /mnt/ultratouch
|
||||||
|
5. Als niet genoeg ruimte:
|
||||||
|
a. Bepaal benodigde ruimte (totale grootte MP4 + 5% marge)
|
||||||
|
b. Sorteer /mnt/ultratouch/dashcam/ mappen op naam (YYYYMMDD)
|
||||||
|
c. Verwijder oudste mappen één voor één tot vrije ruimte >= benodigd
|
||||||
|
d. Log welke mappen verwijderd zijn
|
||||||
|
6. Voor elk MP4 bestand:
|
||||||
|
a. Parse datum (YYYYMMDD) uit bestandsnaam (eerste 8 chars)
|
||||||
|
b. Parse camera-positie (F → front, B → rear) uit laatste char voor .MP4
|
||||||
|
c. Maak target map aan: /mnt/ultratouch/dashcam/YYYYMMDD/{front,rear}/
|
||||||
|
d. Verplaats bestand: mv "$bron" "$doel/"
|
||||||
|
e. Log de transfer
|
||||||
|
f. Bij fout: log error, ga verder met volgend bestand
|
||||||
|
7. Na alle transfers:
|
||||||
|
a. Verwijder lege submappen in /mnt/sdcard/Novatek/ (Movie, Photo, EMR)
|
||||||
|
b. Optioneel: unount /mnt/sdcard (alleen bij udev-trigger)
|
||||||
|
8. Log samenvatting: aantal files, totale grootte, eventuele fouten
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.4 Overwegingen
|
||||||
|
|
||||||
|
- **Alleen `.MP4`** (hoofdlettergevoelig: `*.MP4` en `*.mp4`)
|
||||||
|
- **Verplaatsen (mv)**, niet kopiëren — SD-kaart wordt niet gekloond
|
||||||
|
- Alleen **overgezette bestanden** worden verwijderd (via mv, niet aparte rm)
|
||||||
|
- Vreemde bestanden (`hitlittlev1.0.exe`, macOS `._` bestanden) worden **niet** aangeraakt
|
||||||
|
- Oude mappen (2025, `chauffeur/`/`weg/`) blijven intact — worden niet overschreven
|
||||||
|
- **Lockfile** voorkomt dubbele uitvoering (bijv. via flock)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Automatisering
|
||||||
|
|
||||||
|
### 6.1 Udev rule (gepland)
|
||||||
|
|
||||||
|
```udev
|
||||||
|
# /etc/udev/rules.d/99-dashcam-sdcard.rules
|
||||||
|
ACTION=="add", KERNEL=="sdd1", RUN+="/usr/local/bin/dashcam-transfer-trigger"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 Systemd service
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Unit]
|
||||||
|
Description=Dashcam SD card transfer
|
||||||
|
After=mnt-sdcard.mount
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/local/bin/dashcam-transfer
|
||||||
|
User=root
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Logging & Rapportage
|
||||||
|
|
||||||
|
- **Logbestand**: `/var/log/dashcam-transfer.log`
|
||||||
|
- **Formaat**: `[YYYY-MM-DD HH:MM:SS] <niveau> <bericht>`
|
||||||
|
- **Niveaus**: INFO, WARNING, ERROR
|
||||||
|
- **Inhoud per bestand**: `[2026-05-29 19:00:00] INFO Verplaatst: Novatek/Movie/20260529085848_0003363F.MP4 → dashcam/20260529/front/`
|
||||||
|
- **Samenvatting**: aantal bestanden, totale grootte, duur, eventuele fouten
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Foutafhandeling
|
||||||
|
|
||||||
|
| Scenario | Actie |
|
||||||
|
|---|---|
|
||||||
|
| SD-kaart niet gemount | Foutmelding + exit code 1 |
|
||||||
|
| Ultratouch niet gemount | Foutmelding + exit code 1 |
|
||||||
|
| Geen MP4 bestanden gevonden | INFO log + exit code 0 |
|
||||||
|
| Onvoldoende ruimte + geen mappen te verwijderen | ERROR + exit code 1 |
|
||||||
|
| Bestand kan niet gelezen worden | ERROR log + skip |
|
||||||
|
| Lockfile aanwezig (al bezig) | WARNING log + exit code 1 |
|
||||||
|
| Onbekende camera-letter (niet F/B) | FILE overslaan naar onbekend/ map |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Implementatie volgorde
|
||||||
|
|
||||||
|
| Stap | Wat | Status |
|
||||||
|
|---|---|---|
|
||||||
|
| 1 | Bash script: basale transfer (parsen + mv) | 📝 Te doen |
|
||||||
|
| 2 | Bash script: schijfruimte-check + cleanup | 📝 Te doen |
|
||||||
|
| 3 | Bash script: logging + lockfile | 📝 Te doen |
|
||||||
|
| 4 | Systemd service voor handmatig starten | 📝 Te doen |
|
||||||
|
| 5 | Udev rule voor automatische trigger | 📝 Te doen |
|
||||||
|
| 6 | Testen met huidige SD-kaart | 📝 Te doen |
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue