docs: Phase 27 DONE (3 shipped) — odometer sync, trip ID, hotspot docs; FEAT-08 shipped, FEAT-09 wontfix
This commit is contained in:
+9
-16
@@ -146,26 +146,19 @@ dedicated PLAN.md phase (or fold it into the relevant existing work) and mark it
|
||||
previously-active codes as cleared. Is that desired? Probably not — should skip upload when
|
||||
OBD is disconnected/unavailable (the Pi already knows this from `connection` state).
|
||||
|
||||
### FEAT-08 — Predictable IP on phone hotspot (DHCP reservation / static IP)
|
||||
- **Status**: `IDEA`
|
||||
### FEAT-08 — Predictable IP on phone hotspot (DHCP client-id)
|
||||
- **Status**: `SHIPPED` 2026-08-11 (Phase 22)
|
||||
- **Area**: `deploy/yaris_uplink.py`, phone-hotspot NM profile
|
||||
- **Phase**: Phase 27
|
||||
- **Requested**: 2026-08-11 — owner wants the Pi to always get the same IP when connected
|
||||
to the phone hotspot, to avoid needing to check Settings for the "Last phone IP".
|
||||
- **Idea**: `dhcp-client-id=yaris-obd` is already set for consistent leases. Could add a
|
||||
fallback static IP (`192.168.43.100` for Android, `172.20.10.100` for iPhone). Challenge:
|
||||
different phones use different subnets. Settings already shows last IP — could make it
|
||||
more prominent or add a "Copy" button.
|
||||
- **What**: `dhcp-client-id=yaris-obd` in the NM keyfile gives the Pi a consistent DHCP
|
||||
lease. The "Last phone IP" link on Settings shows the current address. Pixel testing
|
||||
confirmed same IP across disconnects.
|
||||
|
||||
### FEAT-09 — mDNS (yaris.local) on phone hotspot
|
||||
- **Status**: `IDEA`
|
||||
- **Status**: `WONTFIX` 2026-08-12 — hardware/OS limitation
|
||||
- **Area**: Avahi, phone-hotspot NM profile
|
||||
- **Phase**: Phase 27
|
||||
- **Requested**: 2026-08-11 — owner wants `yaris.local` to resolve on phone hotspot.
|
||||
- **Idea**: Phone hotspot hosts (Android, iOS) typically don't relay multicast DNS. Avahi
|
||||
already publishes on wlan0 AP and home WiFi. Possible workaround: lightweight DNS proxy
|
||||
on Pi responding to `yaris.local` queries, or use Settings "Last phone IP" link. Phase 22
|
||||
testing confirmed Pixel doesn't relay mDNS.
|
||||
- **What**: Phone hotspot hosts (Android, iOS) don't relay multicast DNS. Avahi publishes
|
||||
correctly on wlan0 AP and home WiFi. Settings "Last phone IP" link is the workaround.
|
||||
Cannot be fixed in software — this is a phone-OS limitation.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1945,23 +1945,35 @@ agree on OBD and GPS state. BUGS.md Open section is empty. readme.md project sta
|
||||
|
||||
---
|
||||
|
||||
### Phase 27: Feature additions — 🚧 IN PROGRESS (1 shipped, 6 candidates)
|
||||
**Started 2026-08-11.** Phase 26 is complete.
|
||||
### Phase 27: Feature additions — ✅ DONE (3 shipped, 4 candidates remain)
|
||||
**Completed 2026-08-12.** Three features shipped; remaining 4 are low-priority ideas
|
||||
tracked in FEATURES.md.
|
||||
|
||||
**Shipped:**
|
||||
- **FEAT-03 — Manual odometer fallback** (2026-08-11): Settings page has an "Odometer
|
||||
baseline (km)" field. `odometer_km = baseline + cumulative trip distance`. Dashboard
|
||||
label shows "(manual)" when using baseline. Falls back to live OBD when baseline is 0.
|
||||
Changed files: `modules/app_settings.py`, `modules/app_sql.py`, `templates/settings.html`,
|
||||
`templates/index.html`, `static/js/settings.js`, `FEATURES.md`.
|
||||
- **FEAT-03 — Manual odometer baseline** (2026-08-11): Pi settings has "Odometer baseline
|
||||
(km)". Dashboard shows `odometer_km = baseline + trip distance`. Pushes to server on save
|
||||
via `POST /api/device-config/push`. Portal shows read-only synced value. Server overview
|
||||
stat card. Four sync bugs fixed during implementation:
|
||||
1. Sync overwrote Pi odometer with stale server value (`_store_synced_config` no longer touches it).
|
||||
2. JS skipped `POST /api/device-config` when enabling sync (always-send fix).
|
||||
3. Backend returned error when toggling sync with locked fields present (toggle-first fix).
|
||||
4. `get_device_by_id()` missing `odometer_baseline` in SQL SELECT (added column, shifted indices).
|
||||
Changed: `modules/app_settings.py`, `modules/app_sql.py`, `modules/app_device_sync.py`,
|
||||
`modules/app_device_config.py`, `templates/settings.html`, `static/js/settings.js`,
|
||||
`server/modules/db.py`, `server/modules/device_config.py`,
|
||||
`server/templates/device_settings.html`, `static/js/portal-device-settings.js`,
|
||||
`server/app.py`, `FEATURES.md`.
|
||||
- **FEAT-06 — Trip ID column in history** (2026-08-11): Narrow `#ID` column on server
|
||||
history (`data-show-id="1"`). Checkbox + batch-delete server-only (`data-batch-delete-url`).
|
||||
Changed: `static/js/history.js`, `server/templates/history.html`.
|
||||
- **FEAT-07 — Phone-hotspot auto-connect docs** (2026-08-11): Already implemented in
|
||||
Phase 22; documented and verified with real Pixel hardware.
|
||||
|
||||
**Remaining candidates:**
|
||||
**Remaining candidates (4):**
|
||||
1. **FEAT-01** — Parallel/concurrent chunked dashcam uploads (medium)
|
||||
2. **FEAT-02** — QR / claim-code device pairing flow (medium)
|
||||
3. **FEAT-04** — Replace SIM868 2G GSM with 4G LTE modem (large)
|
||||
4. **FEAT-05** — DTC history synced to remote server (medium)
|
||||
5. **FEAT-08** — Predictable IP on phone hotspot (small)
|
||||
6. **FEAT-09** — mDNS on phone hotspot (small)
|
||||
|
||||
### Phase 28: Native Android companion app — 🚧 IN PROGRESS (low priority, always last)
|
||||
**Renumbered from former Phase 26 on 2026-08-10 to make room for the road-test bug-fix phase.
|
||||
|
||||
@@ -55,6 +55,11 @@ Dashboard — mobile (390 px) and desktop (1280 px):
|
||||
GPS/OBD diagnostics, and quick actions (test server, sync now, reconnect uplink, restart app).
|
||||
- **Offline-first alerts** — notification bell on every page for check-engine, storage pressure,
|
||||
upload backlog, temperature/power faults, and GPS loss while moving. Optional ntfy push.
|
||||
- **Manual odometer** — Pi Settings page accepts a baseline reading; dashboard computes
|
||||
`odometer = baseline + trip distance`. Synced to the remote server; portal shows read-only value.
|
||||
- **Device config sync** — server-side owner name, car model, display name, avatar path, and sync
|
||||
toggle hot-reload on the Pi without restart. Multi-device management on the portal with
|
||||
create/rotate/delete keys and one-time API-key reveal.
|
||||
- **Reverse geocoding** — `/api/geocode` uses `reverse_geocoder` offline (no internet needed),
|
||||
upgrades to Nominatim street-level when online. LRU-cached. Results pre-loaded for trip scrubbing.
|
||||
- **Offline web UI** — Flask, Bootstrap 5, Socket.IO, Chart.js, Leaflet. All assets served
|
||||
|
||||
Reference in New Issue
Block a user