v1.6.0 — POIs, maintenance reminders & heatmap
A larger feature release with three substantive additions:
📍 POIs along the route
A new toggle next to the 📚 Wikipedia button overlays points of interest along the ridden route, sourced live from OpenStreetMap (Overpass API):
- 🔌 Charging stations
- 🛠️ Bike shops & repair stations
- 💧 Drinking water
- 🚻 Toilets
Markers are colour-coded per category. Click opens a popup with name, opening hours, address, website (when tagged) and a link to the OSM node. Results are cached per activity. Up to 100 markers per ride, capped at 500 m from the actual route.
🔧 Service & maintenance reminders
Beyond the Bosch service info, you can add arbitrary maintenance items per bike — chain swap every 3000 km, inspection every 365 days, etc.
New sensors per bike:
- `service_due_in_days` (negative when overdue)
- `service_due_in_km`
- `maintenance_items_due` — count of items needing attention; full list as attributes
New services:
- `bosch_ebike.add_maintenance` (bike_id, name, interval_km, interval_days)
- `bosch_ebike.complete_maintenance`
- `bosch_ebike.remove_maintenance`
New events for automations:
- `ha_bosch_ebike_service_due_soon` / `_service_overdue` (default thresholds: 30 d / 200 km)
- `ha_bosch_ebike_maintenance_due_soon` / `_maintenance_overdue`
Items survive HA restarts; the coordinator remembers which warnings have already fired so events don't spam.
🗺️ Heatmap card
A second custom card overlays all rides in a selection as semi-transparent lines:
```yaml
type: custom:bosch-ebike-heatmap-card
height: 600
```
Filter dropdowns for time range (30 d / 3 m / 12 m / all), account, bike. Status line shows ride count and total distance for the selection.
Backed by a new websocket command `bosch_ebike/get_all_tracks` that fetches each activity's GPS track on demand (concurrency limit 3) and caches the result in coordinator memory. First render can take a moment with many rides; subsequent renders are instant.
Installation
Update via HACS, restart Home Assistant, hard-refresh the browser (Ctrl+Shift+R / ⌘⇧R) to load the new card JS.