dashcam-transfer/README.md

5 KiB

Dashcam Transfer

Automatisch dashcam-opnames (MP4) overzetten van een SD-kaart naar een USB-SSD, met organisatie per datum en camera-positie (front/back).

Werking

Hardware setup

Component Mount Doel
USB-SSD (4TB) /mnt/ultratouch Opslag
SD-kaart (USB reader) /mnt/sdcard Bron

Beide worden automatisch gemount via systemd automount units.

SD-kaart structuur (bron)

De Novatek dashcam slaat opnames op in de volgende structuur:

/mnt/sdcard/Novatek/Movie/
├── 20260529085848_0003363F.MP4    ← front camera
├── 20260529085848_0003364B.MP4    ← back camera
├── 20260529090348_0003365F.MP4
├── 20260529090348_0003366B.MP4
└── ...

Bestandsnaam conventie:

YYYYMMDDHHMMSS_<sequentie><kamera>.MP4
  • YYYYMMDDHHMMSS — datum + tijd van opname
  • <sequentie> — oplopend nummer
  • <kamera>: F = front, B = back
  • Bestandsgrootte: ~381 MB per clip (~5 minuten)

SSD structuur (doel)

Na transfer worden de bestanden georganiseerd in een uniforme structuur:

/mnt/ultratouch/dashcam/
└── YYYYMMDD/              ← datum uit bestandsnaam
    ├── front/              ← bestanden met suffix F
    │   ├── YYYYMMDDHHMMSS_1234567F.MP4
    │   └── ...
    └── back/               ← bestanden met suffix B
        ├── YYYYMMDDHHMMSS_1234567B.MP4
        └── ...

Het script

dashcam-transfer.py — Python 3 script (stdlib only, geen externe dependencies).

Stappenplan

  1. Mount check — controleert of /mnt/sdcard en /mnt/ultratouch gemount zijn
  2. Scan — zoekt .MP4 bestanden in Novatek/Movie/
  3. Ruimte check — berekent totale benodigde ruimte en vergelijkt met vrije ruimte
  4. Ruimte maken — als er te weinig ruimte is, worden de oudste datum-mappen op de SSD verwijderd tot er genoeg ruimte is
  5. Transfer — voor elk bestand:
    • Kopieer naar dashcam/YYYYMMDD/{front,back}/
    • Verifieer bestandsgrootte (bron vs doel)
    • Verwijder bronbestand alleen bij succesvolle verificatie
  6. Logging — elk bestand wordt gelogd met datum, tijd en status

Gebruik

# Alle bestanden overzetten
/usr/local/bin/dashcam-transfer

# Beperkt tot eerste N bestanden (handig voor testen)
/usr/local/bin/dashcam-transfer --limit 10

Logbestand

/tmp/dashcam-transfer.log

Voorbeeld:

[2026-05-29 19:54:29] INFO Transfer voltooid: 303 ok, 0 fouten
[2026-05-29 19:54:29] INFO Overgezet: 20260529112143_0003403F.MP4 → 20260529/front/ (381203172 bytes)

Herstructurering

Bestaande data op /mnt/ultratouch/dashcam/ was oorspronkelijk inconsistent:

  • 2025: mappen chauffeur/ en weg/ (oude dashcam)
  • Begin 2026: platte bestanden (direct in datum-map)
  • Vanaf maart 2026: mappen front/ en rear/

Het restructure.py script heeft alle historische data omgezet naar de uniforme front//back/ structuur. Hierbij zijn bestanden gesorteerd op basis van de camera-suffix in de bestandsnaam.

Automatisering

Architectuur

USB insert → udev detecteert vendor:product 14cd:1212
  → systemd-run start mount script (niet direct vanuit udev i.v.m. rechten)
    → wacht tot /dev/disk/by-uuid/00D3-7715 verschijnt
    → umount eventuele stale mounts
    → mount UUID op /mnt/sdcard
    → start dashcam-transfer service
      → Python script kopieert MP4's naar SSD

SD kaart wordt altijd op UUID gemount — ongeacht USB poort.

Configuratiebestanden op de server

/etc/udev/rules.d/99-dashcam-trigger.rules

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*[0-9]", ENV{ID_VENDOR_ID}=="14cd", ENV{ID_MODEL_ID}=="1212", RUN+="/usr/bin/systemd-run --no-block --collect /usr/local/bin/dashcam-transfer-mount"

systemd-run draait het script in systemd context (niet udev) — essentieel voor correcte mount/umount rechten.

/usr/local/bin/dashcam-transfer-mount

#!/bin/bash
UUID=/dev/disk/by-uuid/00D3-7715
logger -t dashcam-transfer Trigger: SD card detected
# Wacht tot UUID symlink beschikbaar is
for ((i=0; i<60; i++)); do
    if [ -e "$UUID" ]; then break; fi
    sleep 1
done
# Verwijder stale mounts van eerdere USB-poort
while mountpoint -q /mnt/sdcard; do
    umount /mnt/sdcard || break
done
# Mount via UUID (werkt ongeacht /dev/sdb1/sdd1/sde1)
mount "$UUID" /mnt/sdcard -o uid=1000,gid=1000,fmask=0000,dmask=0000
systemctl start dashcam-transfer

/etc/systemd/system/dashcam-transfer.service

[Unit]
Description=Dashcam SD card transfer
After=mnt-sdcard.mount

[Service]
Type=oneshot
ExecStart=/usr/local/bin/dashcam-transfer
User=root

/etc/fstab (SD card niet in fstab — wordt gemount door trigger)

UUID=3027-8ECA  /mnt/ultratouch  exfat  noauto,x-systemd.automount,uid=1000,gid=1000,dmask=0000,fmask=0000  0 0

SSD wordt gemount via systemd automount (permanent aangesloten).

SD kaart UUID

Bij format verandert de UUID. Om de juiste UUID te vinden:

sudo blkid /dev/sdX1

Update vervolgens de UUID=... variabele in /usr/local/bin/dashcam-transfer-mount.