From e83e5eaa7c14c8a9d1eef7f0aeb1ea77c21bfb66 Mon Sep 17 00:00:00 2001 From: Mathieu Moran Date: Tue, 11 Aug 2026 03:00:35 -0400 Subject: [PATCH] docs: tighten features list in readme --- readme.md | 86 +++++++++++++++++++------------------------------------ 1 file changed, 29 insertions(+), 57 deletions(-) diff --git a/readme.md b/readme.md index 3e88fe8..81b9f08 100644 --- a/readme.md +++ b/readme.md @@ -32,63 +32,35 @@ Dashboard — mobile (390 px) and desktop (1280 px): ## Features -- **Live OBD-II data** over a cheap USB ELM327-compatible adapter: speed, RPM, coolant - temperature, fuel level, throttle position, MIL status, stored DTCs, and odometer when the ECU - supports it. Includes automatic background reconnects, serialized queries, and clear - adapter/ELM327/ECU diagnostics -- **Real GPS tracking** via a Waveshare SIM868 GNSS/GSM/Bluetooth HAT, plotted live on an - offline Leaflet map (pre-cached map tiles — no internet needed in the car). The module powers - itself on through the HAT's GPIO PWRKEY wiring after a Pi power cycle -- **Self-hosted WiFi hotspot** so you can load the web UI on your phone from inside the car, - with automatic switching back to home WiFi when it is available (`http://yaris.local` — no - port number) -- **Dashcam file retrieval** — detects a USB dashcam automatically (any brand/folder layout, - no hardcoded device path), mounts it read-only, and safely copies footage locally. Verified - against a real 28GB/87-file import. The web UI can also browse, sort, and delete individual or - all videos directly from the connected dashcam with confirmed, temporary read-write operations, - plus import one file or any checkbox selection instead of always importing the whole card -- **Local video library** — browse imported clips with cached thumbnails and upload status, - play H.264 footage inline with seeking, and delete only the local Pi copy. Optional retention - can automatically remove older local copies after their exact content is confirmed uploaded -- **Remote upload** — a self-hosted server (Flask + Postgres, `server/`) receives trip/GPS - logs and dashcam footage over the internet (via Cloudflare Tunnel or a plain port-forward). - Dashcam videos upload in resumable 40MB chunks (works around tunnel body-size limits and keeps - the Pi's memory footprint flat regardless of file size); a UI toggle can pause dashcam uploads - independently while trip logs keep syncing -- **Remote web portal** — a login-protected browser portal at the same server URL: - trip history with OSM/CARTO live map and route replay, dashcam archive browsing with inline - video player and Range-request seeking, overview stats dashboard, delete buttons for trips and - clips, and a device-settings page for editing the synced owner/car/avatar values that the Pi - pulls from the server. The portal can register/delete multiple devices, reveal a one-time API - key at creation/rotation time, and request a sync for a selected device. When the Pi has - Sync with server enabled, those identity changes hot-reload into the running local UI on the - next successful sync instead of waiting for a manual restart. Shared `history.js` code runs on - both the Pi and the server — tile source and zoom limits are configured per-deployment via HTML - data attributes -- **Optional cellular fallback** through the SIM868 for small trip-log uploads when normal - WiFi/Ethernet is unavailable (dashcam video stays off cellular) -- **Dedicated local status page** with live Pi health, service states, uplink/server/GPS/OBD - diagnostics, plus quick actions for server test, sync-now, uplink reconnect, and app restart -- **Motion-aware local-first** SQLite logging — five-second motion checks without five-second - parked writes, plus retry-safe remote sync and automatic backoff -- **Pi health + diagnostics** — a dedicated local Status page shows temperature, RAM, disk, - uptime, undervoltage/throttling warnings, service state, uplink/server reachability, GPS state, - OBD presence, and safe quick actions -- **Offline-first alerts** — a notification bell on every page reports check-engine state, - storage pressure, upload backlog, temperature/power faults, and GPS loss while moving. Optional - ntfy delivery is available but remains disabled until configured -- **Trip history and route replay** — detects motion from OBD wheel speed with sustained GPS - displacement as a fallback, summarizes distance and speed in metric units (km / km/h), and replays - each route as a line on the offline map with a timestamped play/pause timeline, moving marker, and - live reverse-geocoded location name during scrubbing. Tap any trip row on mobile to load the route -- **Offline reverse geocoding** — a `/api/geocode` route on the Pi uses the `reverse_geocoder` - library (20 MB world dataset, no internet needed) for city/region, and upgrades to Nominatim - street-level when an internet uplink is available. Results are LRU-cached in-process. The browser - never calls any external geocoding service -- **Offline web UI** built with Flask, Jinja, Bootstrap 5, Socket.IO, Chart.js, and Leaflet, - all served locally with a shared responsive page shell -- **Headless Pi deployment** as a self-restarting `systemd` service with a 10-second BCM2835 - hardware watchdog, verified across a real reboot +- **Live OBD-II data** — speed, RPM, coolant temp, fuel level, throttle, MIL/DTC via USB ELM327. + Automatic reconnects with clear adapter/ECU diagnostics. DTC codes persist across reboots. +- **Real GPS tracking** — Waveshare SIM868 GNSS HAT with GPIO PWRKEY auto-power-on. Live position + plotted on an offline Leaflet map (pre-cached tiles, no internet needed). +- **WiFi hotspot** — auto-switches between home WiFi and a self-hosted AP for in-car phone access + at `http://yaris.local` (no port number). Phone hotspot uplink supported for on-the-road sync. +- **Dashcam workflow** — auto-detects any USB dashcam, mounts read-only, browses files before + importing. Import one, selected, or all files. Delete individual or all files directly from the + dashcam. Verified against real 28GB/87-file hardware. +- **Local video library** — browse imported clips with cached thumbnails and upload status. Inline + H.264 playback with seeking. Local-only delete. Optional auto-retention after confirmed upload. +- **Remote sync** — trip logs and dashcam footage upload to a self-hosted Flask + Postgres server. + Dashcam videos stream in resumable 40MB chunks. Independent toggles for trip and dashcam uploads. +- **Remote web portal** — login-protected at the server URL. Trip history with CARTO live map and + route replay, dashcam archive with inline player, overview stats, device management + (create/delete/rotate keys), and server-side device identity sync that hot-reloads on the Pi. +- **Trip history and replay** — motion-aware detection (OBD wheel speed primary, GPS displacement + fallback). Metric summaries, offline route polyline, play/pause timeline with moving marker and + live reverse-geocoded location names. Tap-to-replay on mobile. +- **Status page** — Pi health (temp, RAM, disk, uptime, throttling), service states, uplink/server/ + 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. +- **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 + locally. Responsive with collapsible sidebar and mobile bottom nav. +- **Headless deployment** — systemd service with auto-restart, 10-second hardware watchdog, and + nftables port-80 redirect. Deploy scripts in `deploy/`. ## Hardware