docs: bold feature names, clean up readme
This commit is contained in:
@@ -32,30 +32,30 @@ Dashboard — mobile (390 px) and desktop (1280 px):
|
||||
|
||||
## Features
|
||||
|
||||
- Live OBD-II data over a cheap USB ELM327-compatible adapter: speed, RPM, coolant
|
||||
- **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
|
||||
- **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,
|
||||
- **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,
|
||||
- **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,
|
||||
- **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
|
||||
- **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:
|
||||
- **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
|
||||
@@ -65,29 +65,29 @@ Dashboard — mobile (390 px) and desktop (1280 px):
|
||||
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
|
||||
- **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
|
||||
- **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
|
||||
- **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,
|
||||
- **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,
|
||||
- **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
|
||||
- **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`
|
||||
- **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,
|
||||
- **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
|
||||
- **Headless Pi deployment** as a self-restarting `systemd` service with a 10-second BCM2835
|
||||
hardware watchdog, verified across a real reboot
|
||||
|
||||
## Hardware
|
||||
|
||||
Reference in New Issue
Block a user