# 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 (83%) | | 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.MP4 ``` - `YYYYMMDDHHMMSS` — datum + tijd van opname - `XXXXXXXX` — sequentieel nummer - ``: - `F` — **Front**camera - `B` — **Back**camera - 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) │ └── back/ ← hernoemd van weg/rear (2025/2026) ``` - Alle mappen nu uniform: `front/` en `back/` - 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 └── back/ ← bestanden met suffix B └── YYYYMMDDHHMMSS_XXXXXXXXB.MP4 ``` --- ## 5. Transfer logica ### 5.1 Handmatige uitvoering 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 → back) uit laatste char voor .MP4 c. Maak target map aan: /mnt/ultratouch/dashcam/YYYYMMDD/{front,back}/ 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] ` - **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 |