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
|
||||
|
||||
## Huidige situatie (29 mei 2026)
|
||||
## 1. Doel
|
||||
|
||||
### Hardware
|
||||
- **Remote server**: Fedora Linux (`nextcloud`)
|
||||
- **SSD (USB)**: 4TB, automatisch gemount op `/mnt/ultratouch` via systemd automount (transient)
|
||||
- Bestandssysteem: exfat
|
||||
- 602 GB vrij (84% vol)
|
||||
- Device: `/dev/sdc2`
|
||||
- **SD-kaart (USB reader)**: Automatisch gemount op `/mnt/sdcard` via systemd automount (transient)
|
||||
- Momenteel **niet ingeplugd** — automount faalt met "Dependency failed"
|
||||
- SD-kaart moet nog worden geïnspecteerd op mappenstructuur
|
||||
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` — **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/
|
||||
├── 20250808/
|
||||
│ ├── chauffeur/
|
||||
│ ├── chauffeur/ ← 56 GB
|
||||
│ └── weg/
|
||||
├── 20250811/
|
||||
├── 20250811/ ← 72 GB
|
||||
│ ├── chauffeur/
|
||||
│ └── weg/
|
||||
├── ...
|
||||
|
|
@ -26,33 +69,141 @@
|
|||
│ ├── front/
|
||||
│ └── rear/
|
||||
├── ...
|
||||
└── 20260425/
|
||||
└── 20260425/ ← 59 GB
|
||||
├── front/
|
||||
└── rear/
|
||||
```
|
||||
|
||||
- **2025**: `chauffeur/` en `weg/` (vouwfiets dashcam?)
|
||||
- **2026**: `front/` en `rear/` (auto dashcam met voor- en achtercamera)
|
||||
- 2025: mappen `chauffeur/` en `weg/` — oude dashcam
|
||||
- 2026: mappen `front/` en `rear/` — huidige dashcam
|
||||
- Totale grootte: **3,0 TB**
|
||||
- Oudste map: ~56 GB, nieuwste: ~59 GB
|
||||
|
||||
### Bestandseigenschappen
|
||||
- Formaat: `.MP4`
|
||||
- Grootte: ~381 MB per bestand
|
||||
- Naamgevingsformaat: `YYYYMMDDHHMMSS_XXXXXXXXX.MP4` (bv. `20260425060958_0000001F.MP4`)
|
||||
- Opname-interval: ~5 minuten per clip
|
||||
### Gewenste structuur (bij nieuwe transfers)
|
||||
|
||||
### Transfer eisen (nog te verfijnen)
|
||||
- **Detectie**: Automatisch bij inpluggen SD-kaart
|
||||
- **Modus**: Verplaatsen (move, niet copy)
|
||||
- **Organisatie**: `YYYYMMDD/front/` en `YYYYMMDD/rear/` op SSD
|
||||
- **Filter**: Alleen `.mp4` bestanden
|
||||
- **Opschonen**: Alleen overgezette bestanden verwijderen van SD-kaart
|
||||
```
|
||||
/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
|
||||
```
|
||||
|
||||
### Automount configuratie
|
||||
- Beide mount points via systemd transient units (geen statische unit-bestanden)
|
||||
- Aanmaak via `systemd-mount` of udev-regels
|
||||
---
|
||||
|
||||
## Volgende stappen
|
||||
1. SD-kaart inspecteren op mappenstructuur na inpluggen
|
||||
2. Transfer-script schrijven (bash of Python)
|
||||
3. Service/trigger configureren (udev, systemd path unit, of systemd service)
|
||||
4. Testen met echte data
|
||||
## 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 → 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