feat: odometer in trips/overview, trips upload toggle, fix video count
- OBD odometer now logged to tracking rows on every GPS snapshot - trips table: START_ODOMETER/END_ODOMETER columns (migration) - build_trip_summaries: picks odometer from first/last tracking row - list_trips: uses real OBD odo, falls back to cumulative distance - overview stats: odometer_km (max seen from OBD), video_count fixed - history page: Odometer column shows start→end km per trip - app_upload: TRIPS_UPLOAD_SETTING_KEY, is_trips_upload_enabled() - _upload_tracking_batch: skips when trips upload is off - settings: separate 'Upload trips & GPS' toggle from dashcam toggle Co-authored-by: Copilot <[email protected]>
This commit is contained in:
@@ -31,6 +31,7 @@
|
||||
{"key": "distance", "label": "km", "sortable": true},
|
||||
{"key": "duration", "label": "Time", "sortable": true},
|
||||
{"key": "maxSpeed", "label": "Max", "sortable": true},
|
||||
{"key": "odometer", "label": "Odometer", "sortable": false},
|
||||
{"key": "action", "label": "", "sortable": false}
|
||||
],
|
||||
"No trips detected",
|
||||
|
||||
@@ -136,6 +136,10 @@
|
||||
<div class="text-xs text-muted fw-bold text-uppercase mb-1">Top speed ever</div>
|
||||
<div class="fw-bold fs-5 text-dark" id="stat-topspeed">—</div>
|
||||
</div>
|
||||
<div class="col-6 col-lg-12">
|
||||
<div class="text-xs text-muted fw-bold text-uppercase mb-1">Odometer</div>
|
||||
<div class="fw-bold fs-5 text-dark" id="stat-odometer">—</div>
|
||||
</div>
|
||||
<div class="col-6 col-lg-12">
|
||||
<div class="text-xs text-muted fw-bold text-uppercase mb-1">Videos on Pi</div>
|
||||
<div class="fw-bold fs-5 text-dark" id="stat-videos">—</div>
|
||||
@@ -218,6 +222,7 @@
|
||||
document.getElementById('stat-km').textContent = d.total_km.toFixed(1) + ' km';
|
||||
document.getElementById('stat-time').textContent = d.total_duration_s > 0 ? fmtDuration(d.total_duration_s) : '—';
|
||||
document.getElementById('stat-topspeed').textContent = d.all_time_max_speed > 0 ? d.all_time_max_speed + ' km/h' : '—';
|
||||
document.getElementById('stat-odometer').textContent = d.odometer_km != null ? Math.round(d.odometer_km).toLocaleString() + ' km' : '—';
|
||||
document.getElementById('stat-videos').textContent = d.video_count;
|
||||
const dtcEl = document.getElementById('stat-dtc');
|
||||
dtcEl.textContent = d.active_dtc;
|
||||
|
||||
@@ -25,10 +25,13 @@
|
||||
</div>
|
||||
<div class="card-body py-3">
|
||||
<div class="form-check form-switch mb-2">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="trips-upload-enabled">
|
||||
<label class="form-check-label" for="trips-upload-enabled">Upload trips & GPS logs to server</label>
|
||||
</div>
|
||||
<div class="form-check form-switch mb-2">
|
||||
<input class="form-check-input" type="checkbox" role="switch" id="dashcam-upload-enabled">
|
||||
<label class="form-check-label" for="dashcam-upload-enabled">Upload dashcam videos to server</label>
|
||||
<label class="form-check-label" for="dashcam-upload-enabled">Upload dashcam videos to server (WiFi only)</label>
|
||||
</div>
|
||||
<p class="text-muted small mb-2">Trip/GPS always uploads. Dashcam video only over WiFi/Ethernet.</p>
|
||||
<p id="upload-health" class="small text-muted mb-3">Checking…</p>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<label class="form-label mb-0 text-nowrap" for="retention-days">Delete after</label>
|
||||
|
||||
Reference in New Issue
Block a user