Track vehicle maintenance with progress sensors: service inspections by time and/or driven distance, periodic vehicle inspection, highway vignette, oil, brakes, tires and any custom counter.
- One integration entry per vehicle, any number of counters per vehicle.
- Counters track a time interval, a distance interval, or both; progress is driven by whichever is more exhausted.
- Optional odometer entity; without it counters work by time only.
- Kilometers or miles, selectable per vehicle.
- Progress direction 0 -> 100 (default) or 100 -> 0, selectable per vehicle.
- A "done" button per counter resets it to today at the current odometer reading.
- Warning binary sensor per counter for automations (default threshold 90 %).
- Localized in en, cs, de, es, fr, it, nl, pl and pt-BR; entity names and counter templates follow the Home Assistant UI language.
- Bundled integration icon (shown by Home Assistant 2026.3 or newer).
Requires Home Assistant 2025.3 or newer.
Car Maintenance is available in the HACS default store.
- Open HACS in Home Assistant and search for "Car Maintenance".
- Install it and restart Home Assistant.
- Settings -> Devices and services -> Add integration -> Car Maintenance.
Or use this direct link:
Create a vehicle (name, optional odometer entity, unit, progress direction), then add counters to it from the integration page. Templates prefill common intervals (service 1 year / 15000 km, vehicle inspection 2 years, vignette 1 year, ...); everything can be adjusted.
Each counter provides:
| Entity | Meaning |
|---|---|
sensor.<vehicle>_<counter>_progress |
progress in %, capped 0-100 |
sensor.<vehicle>_<counter>_remaining_days |
days until due (negative = overdue) |
sensor.<vehicle>_<counter>_remaining_distance |
distance until due |
sensor.<vehicle>_<counter>_due_date |
next due date |
binary_sensor.<vehicle>_<counter>_warning |
on at the warning threshold, overdue attribute |
button.<vehicle>_<counter>_done |
mark as done today |
The progress sensor exposes exhausted_percent, remaining_percent,
time_percent, km_percent, limiting_factor, last_service_date,
last_service_odometer and due_odometer attributes (distances in km).
Horizontal progress bars work great with entity-progress-card (install via HACS):
type: custom:entity-progress-card
entity: sensor.toyota_service_inspection_progress
name: Service inspection
icon: mdi:car-wrench
bar_color: var(--state-icon-color)Overview of all counters of a vehicle:
type: vertical-stack
cards:
- type: custom:entity-progress-card
entity: sensor.toyota_service_inspection_progress
name: Service
- type: custom:entity-progress-card
entity: sensor.toyota_vehicle_inspection_progress
name: Inspection
- type: custom:entity-progress-card
entity: sensor.toyota_highway_vignette_progress
name: VignetteNotification automation example:
triggers:
- trigger: state
entity_id: binary_sensor.toyota_service_inspection_warning
to: "on"
actions:
- action: notify.mobile_app_phone
data:
message: >-
Service inspection due soon:
{{ states('sensor.toyota_service_inspection_remaining_days') }} days
or {{ states('sensor.toyota_service_inspection_remaining_distance') }} km left.MIT

