diff --git a/FEATURES.md b/FEATURES.md index 268d144..fa4719c 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -63,13 +63,21 @@ dedicated PLAN.md phase (or fold it into the relevant existing work) and mark it first, add pairing only if provisioning still feels annoying. ### FEAT-03 — Manual start odometer fallback when OBD odometer is unavailable -- **Status**: `SHIPPED` 2026-08-11 -- **Area**: Settings page, Dashboard, `modules/app_settings.py`, `modules/app_sql.py` +- **Status**: `SHIPPED` 2026-08-11 (extended 2026-08-12) +- **Area**: Settings page, Dashboard, trip history, `modules/app_settings.py`, `modules/app_sql.py`, + `modules/app_trip.py`, `server/modules/db.py`, `static/js/history.js` - **Phase**: Phase 27 - **What**: Settings page now has an "Odometer baseline (km)" field. The app stores this value and computes `odometer_km = baseline + cumulative trip distance`. Dashboard shows "(manual)" label when using baseline. When baseline is 0, falls back to live OBD reading (the original behavior). Also appears in `/api/stats` response. +- **2026-08-12 — simulated odometer in trip history**: the trip replay scrubber now + shows an "Odometer" line below speed. Per-point odometer is the raw OBD value when + the vehicle reports one (PID 0xA6), otherwise a **continuous simulation**: + `baseline + Σ(prior trips' distance) + within-trip distance`. The trip-list + "Odometer" column uses the same continuous formula on both Pi and server (previously + the server hardcoded `None` and the Pi ignored the baseline). The 2013 Yaris doesn't + report PID 0xA6, so every point uses the simulated value. ### FEAT-04 — Replace SIM868 2G GSM hat with 4G LTE modem (Huawei E3372h-153) - **Status**: `IDEA` diff --git a/PLAN.md b/PLAN.md index 5a0f787..84cba58 100644 --- a/PLAN.md +++ b/PLAN.md @@ -1971,7 +1971,15 @@ Unraid now uses SSH deploy key for git operations. BUGS.md Open section is empty tracked in FEATURES.md. **Shipped:** -- **FEAT-03 — Manual odometer baseline** (2026-08-11) +- **FEAT-03 — Manual odometer baseline** (2026-08-11, extended 2026-08-12): Settings + "Odometer baseline (km)" field; dashboard shows baseline + trip distance. Extended + 2026-08-12 with a **simulated odometer in trip history**: replay scrubber shows an + "Odometer" line below speed, and the trip-list column uses a continuous formula + `baseline + Σ(prior trips) + within-trip distance` (raw OBD value when PID 0xA6 is + reported). Fixed a latent bug where the Pi's list_trips fallback ignored the baseline + and the server hardcoded `odo_start_km/end_km = None`. Changed: `modules/app_trip.py`, + `modules/app_sql.py`, `server/modules/db.py`, `static/js/history.js`, + `templates/history.html`, `server/templates/history.html`. - **FEAT-06 — Trip ID column in history** (2026-08-11) - **FEAT-07 — Phone-hotspot auto-connect docs** (2026-08-11) - **FEAT-05 — DTC history sync to server** (2026-08-12): Pi pushes DTC snapshots