- Python 75.8%
- Shell 24.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| docs/superpowers | ||
| .gitignore | ||
| dashcam-transfer-mount.sh | ||
| dashcam-transfer.py | ||
| README.md | ||
| restructure.py | ||
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
- Mount check — controleert of
/mnt/sdcarden/mnt/ultratouchgemount zijn - Scan — zoekt
.MP4bestanden inNovatek/Movie/ - Ruimte check — berekent totale benodigde ruimte en vergelijkt met vrije ruimte
- Ruimte maken — als er te weinig ruimte is, worden de oudste datum-mappen op de SSD verwijderd tot er genoeg ruimte is
- Transfer — voor elk bestand:
- Kopieer naar
dashcam/YYYYMMDD/{front,back}/ - Verifieer bestandsgrootte (bron vs doel)
- Verwijder bronbestand alleen bij succesvolle verificatie
- Kopieer naar
- 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/enweg/(oude dashcam) - Begin 2026: platte bestanden (direct in datum-map)
- Vanaf maart 2026: mappen
front/enrear/
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.