dashcam-transfer/docs/superpowers/specs/2026-05-29-dashcam-transfer-design.md

6 KiB

Dashcam Transfer — Ontwerp

1. Doel

Automatisch dashcam-opnames (MP4) verplaatsen van een SD-kaart naar een USB-SSD op een remote Fedora Linux server (nextcloud), met organisatie per datum en camera-positie.


2. Hardware & Mounts

Component Mount point Device Bestandssysteem Status
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 — Frontcamera
    • B — Backcamera (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)

Huidige data (na herstructurering)

/mnt/ultratouch/dashcam/
├── YYYYMMDD/                ← 55 datum-mappen (20250808 t/m 20260425)
│   ├── front/                ← hernoemd van chauffeur (2025) of bestond al (2026)
│   └── rear/                 ← hernoemd van weg (2025) of bestond al (2026)
  • Alle mappen nu uniform: front/ en rear/
  • Platte mappen (20260301-20260311) gesorteerd op F/B suffix
  • Totale grootte: 3,0 TB
  • Oudste map: ~56 GB, nieuwste: ~59 GB
/mnt/ultratouch/dashcam/
└── YYYYMMDD/                ← datum uit bestandsnaam (bv. 20260529)
    ├── front/                ← bestanden met suffix F
    │   └── YYYYMMDDHHMMSS_XXXXXXXXF.MP4
    └── rear/                 ← bestanden met suffix B
        └── YYYYMMDDHHMMSS_XXXXXXXXB.MP4

5. Transfer logica

5.1 Handmatige uitvoering

Eerste implementatie: een bash-script dat handmatig gestart kan worden.

/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)

# /etc/udev/rules.d/99-dashcam-sdcard.rules
ACTION=="add", KERNEL=="sdd1", RUN+="/usr/local/bin/dashcam-transfer-trigger"

6.2 Systemd service

[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