Home Assistant projects
All projects

Vehicle Card

Lovelace card · Car & fuel
v3.1.0 · Nov 12, 2026 HA 2024.8.0+ Marketplace

Vehicle and map cards for connected cars of any brand.

Range, fuel, battery, mileage, charging, lock, location and actions for Renault, Tesla, Volvo, Stellantis, the VW group, Kia and Hyundai, Toyota, Mercedes-Benz and more, with the brand's logo, the car's picture and an optional section for the Orange Internet On the move data plan.

Highlights

  • 18 car integrations found by themselves, entities matched by their translation keys
  • The maker's spelling of the model, and no model repeated when it is the device's name
  • Brand logo for 33 brands and the picture the integration gives (Renault Picture, Volvo, VW group, Stellantis, Toyota)
  • Range, fuel level or gauge, battery, mileage and outside temperature
  • Charging and time left, plug, lock, doors, air conditioning and tyre pressures
  • The car's action buttons, plus buttons of your choice (a wallbox, a script, a lock…), with a confirmation tap
  • Connected services subscription (VW group) and an offline chip (Teslemetry)
  • Map card with every vehicle and its picture, lease section, mini card
  • Orange Internet On the move section, with ha-orange-internet-on-the-move

Works with

Cards

vehicle-cardvehicle-mini-cardvehicle-map-card
type: custom:vehicle-card

Install

  1. 1Open the repository in the Marketplace with the Add to Marketplace button above, or addgithub.com/juju35/ha-vehicle-card as a custom repository (category Dashboard).
  2. 2Download it from the Marketplace.
  3. 3Reload the browser and add the card from the dashboard editor.

Documentation

From the README

Features

Features

  • Range, fuel level, battery level, mileage, outside temperature and tyre pressure (front left, front right, rear left, rear right): whatever your car exposes
  • Fuel gauge when you set the tank capacity, a low range warning (fuel plus battery range on a plug-in hybrid) and an optional low tyre pressure warning
  • Charging status and time left, plug, lock, door and air conditioning status
  • Location with the time of the last update; tap it to open the map
  • Action buttons for every button of the vehicle (horn, flash lights, air conditioning, start/stop charge, refresh…), pressed with a confirmation tap, and the charge mode picker for electric cars
  • Extra buttons of your choice (buttons): a switch, a script, a scene, a lock, a climate, your wallbox… toggled, run or locked from the card with the same confirmation tap
  • The brand's logo next to the name (33 brands), black on light themes and white on dark themes
  • The picture of your vehicle when the integration gives one (the official MyRenault photo with Renault Picture, the renders of Volkswagen group cars, Stellantis, Toyota, Volvo, Fiat / Jeep…) or your own picture, and a French licence plate drawn like the real one (EU band, department, and a traditional regional emblem for Brittany, Occitania, Île-de-France, Provence, Corsica and Burgundy)
  • Optional lease tracking (LOA): mileage driven against the allowance, theoretical mileage expected today and the gap to it, kilometres left this month and per month until the end, end-of-lease projection (average or last 30 / 90 days) and estimated cost of the excess, always shown as a status; pace, contract year figures and a mileage chart folded by default
  • Optional Orange Internet On the move section: data left, percentage, renewal or expiry date
  • Connected services subscription of the VW group cars (SEAT, CUPRA… with VW Group Connect): end date and days left, in orange when inactive or ending within 30 days; an Offline chip when a Tesla (Teslemetry) has neither mobile network nor Wi-Fi
  • Automatic entity discovery from the device, for 18 car integrations (whatever the entity IDs or the Home Assistant language)
  • Visual editor in the dashboard UI (no YAML needed)
  • English, French, German, Spanish, Serbian (Cyrillic and Latin), Italian, Dutch, European Portuguese, Polish, Romanian, Danish, Swedish, Bulgarian, Russian, Ukrainian, Hungarian, Slovak, Czech, Slovenian, Latvian and Greek, follows the Home Assistant language
  • Light and dark theme compatible
  • Ready for the Marketplace, no CDN: the map libraries ship with the card

Mini card (custom:vehicle-mini-card)

  • The picture, battery level, range (battery, or fuel without a battery) and charging or plug state in half a row
  • A button at the top right shows the full card; a click outside the card brings the compact view back
  • Same options and visual editor as the vehicle card

Map card (custom:vehicle-map-card)

  • All your vehicles on one map, whatever their brand (or the ones you pick), each with its picture, name and range
  • Popup with the picture, location, last update, range, fuel, battery and mileage, plus Directions (Google Maps) and Details buttons
  • Home marker
  • Base maps without API key: Home Assistant's own map (vector, light or dark), OpenStreetMap, OpenStreetMap France, IGN map and aerial photos, OpenTopoMap, CyclOSM, Esri satellite, or your own tile URL
  • Follows the light / dark theme

Supported integrations

Supported integrations

The card picks the vehicle's entities by their translation keys (and entity IDs), so it works with these integrations as they are. What each one shows depends on what the car and the integration expose.

Integration Brands Picture
Renault (built in) Renault, Dacia With Renault Picture
Tesla Fleet, Teslemetry, Tessie (built in) Tesla —
Volvo (built in) Volvo ✅ (volvo.get_image_url action)
Škoda (built in), MySkoda Škoda —
Subaru, Nissan Leaf (built in) Subaru, Nissan —
Stellantis Vehicles Peugeot, Citroën, DS, Opel, Vauxhall, Fiat, Jeep, Alfa Romeo… ✅
Kia / Hyundai (kia_uvo) Kia, Hyundai, Genesis —
Mercedes-Benz (mbapi2020) Mercedes-Benz, smart —
Toyota Toyota, Lexus ✅
VW Group Connect (vag_connect), Volkswagen We Connect Volkswagen, Audi, Seat, Cupra, Škoda ✅ (renders)
Uconnect Fiat, Jeep, Alfa Romeo, Ram, Chrysler, Dodge ✅
Polestar, FordPass Polestar, Ford —
Any other integration Any car with a device_tracker and sensors Your own image

Optional integrations:

Integration What the cards show
Renault Picture (Marketplace) The official MyRenault photo of the vehicle
Orange Internet On the move (Marketplace) Data left, percentage, renewal or expiry date of the car's data plan

Note: the original rexave/hass-orange-internet-on-the-move integration is no longer maintained (it triggers Home Assistant deprecation warnings due in 2027.5 and 2027.8). ha-orange-internet-on-the-move replaces it in place: same domain, devices and entities, so the card keeps working without any change. See its migration guide.

Prerequisites

Prerequisites

Configuration

Configuration

Visual editor#

Add the card from the dashboard (Add card → Vehicle Card). The first vehicle is picked automatically; change it with the Vehicle field, then set the name, picture, tank capacity and the sections to show. The Entities (advanced) panel lets you force an entity if auto-detection picks the wrong one. Options left at their default are not written to the YAML.

Vehicle picture#

The card shows the picture of your vehicle automatically, with nothing to set up, when its integration gives one:

  • Renault: the official MyRenault photo, with the renault_picture integration
  • Volvo: the picture the built-in integration returns (volvo.get_image_url action, Home Assistant 2025.9 or later)
  • Volkswagen group (vag_connect), Uconnect: the integration's image entity of the car (Kia / Hyundai's surround view cameras are skipped)
  • Stellantis Vehicles, Toyota: the picture of the vehicle's device_tracker

Without one, the card shows the brand's logo next to the name.

For another model, or to use your own photo, give the card any image, ideally a PNG or WebP with a transparent background. Put it in /config/www/renault/ and use /local/renault/<file>:

image: /local/renault/clio.png

Your image takes priority over the integration's picture. With no picture, or with show_image: false, the card shows only the brand's logo next to the name (or a car icon with show_logo: false, or for a brand without a logo).

Lease tracking (LOA)#

Set the lease start date, its duration in months and the yearly mileage allowance: the card adds a Lease section with the kilometres driven against the allowance, a marker for where you should be today, your yearly pace, the projected mileage at the end of the lease and a status:

  • green: within the allowance, with the margin left at the end of the lease
  • orange: at the current pace, you will go over the allowance (projected excess)
  • red: the allowance is already exceeded

Below the bar (ticks mark the contract years): the theoretical mileage expected today and how far above or below it you are, the kilometres left this month out of the monthly allowance, and the kilometres per month left until the end of the lease. With extra_km_cost, the status adds the estimated cost of the excess.

The projection starts after 30 days. It uses the average since the start of the lease, or with forecast: 90 (or 30) the pace of the last 90 (or 30) days, which reacts faster to a change of habits.

Tap the section to unfold the details (a click anywhere else folds it back): pace, end-of-lease projection, the current contract year (contract years run from the start date) with its allowance and year-end projection, and the chart of actual mileage, allowance and projection. The history comes from the long-term statistics of the mileage sensor, kept by Home Assistant's recorder; it is fetched once an hour. The details are folded by default; set expand_lease: true to show them unfolded.

lease:
  start_date: "2024-12-01"
  duration: 37        # months
  km_per_year: 20000
  start_mileage: 12   # optional, odometer at delivery
  forecast: 90        # optional: 90 or 30 days, average since the start by default
  extra_km_cost: 0.08 # optional, per km, shows the cost of the excess

Also in the visual editor, in the Lease tracking panel. Without lease, the section is not shown.

The lease section unfolding on tap — pace, end-of-lease projection, contract year and the mileage chart — then folding back:

Minimal#

type: custom:vehicle-card
device_id: 5a8c1932ddf3f29163a275f06789b1bf

Use either device_id (what the visual editor writes) or entity (any entity of the vehicle). With neither, the card uses the first vehicle it finds.

Full options#

type: custom:vehicle-card
device_id: 5a8c1932ddf3f29163a275f06789b1bf
name: Espace
show_title: true
show_subtitle: true
fuel_tank_capacity: 55
low_range: 100
low_tyre_pressure: 2.2
show_plate: true
plate_department: "35"
show_location: true
show_actions: true
show_data_plan: true
data_plan_device_id: 63dc3dbab368191d3a6944a848e2c8ce
lease:
  start_date: "2024-12-01"
  duration: 37
  km_per_year: 20000
  start_mileage: 12
language: en
entities:
  mileage: sensor.espace_mileage
  location: device_tracker.espace_location

Options reference#

Option Required Default Description
device_id ❌* Auto Vehicle device (*or entity; the first vehicle is used if both are missing)
entity ❌ — Any entity of the vehicle, used to find the device
name ❌ Device name Card title
show_title ❌ true Show the title (the name) in the header, e.g. false when the card sits under a section heading
show_subtitle ❌ true Show the subtitle (the model) under the title; a model that only repeats the name is never shown twice
image ❌ Auto Picture URL; overrides the integration's picture
show_logo ❌ true Show the brand's logo next to the name (follows the theme text colour)
show_image ❌ true Show the vehicle picture
fuel_tank_capacity ❌ — Tank capacity in litres; shows the fuel gauge
low_range ❌ 100 Range (km) below which the card shows a low range warning; 0 turns it off. Converted when the range sensor reads miles. On a plug-in hybrid it is compared with the fuel plus battery range, so an empty battery alone does not warn
low_tyre_pressure ❌ — Tyre pressure (bar, whatever unit the sensors use) below which the tyre tile and a chip show a warning; empty or 0 turns it off
show_plate ❌ true Show the licence plate (when the device name is a French plate)
plate_department ❌ — Department number on the right of the plate, e.g. 35; departments of Brittany, Occitania, Île-de-France, Provence, Corsica and Burgundy get their traditional regional emblem
show_location ❌ true Show the location row
show_actions ❌ true Show the action buttons and charge mode
buttons ❌ — Extra action buttons: a list of entity IDs (button, switch, input_boolean, script, scene, automation, lock, climate, light, fan, cover…), after the vehicle's own buttons. A tap presses, runs, locks / unlocks or toggles the entity, after the confirmation tap
show_data_plan ❌ true Show the Orange Internet On the move section when a data plan is found, and the connected services subscription of the car
data_plan_device_id ❌ Auto Orange Internet On the move device; found from the vehicle model when empty
expand_lease ❌ false Show the lease details and chart unfolded
lease ❌ — Lease tracking: start_date (YYYY-MM-DD), duration (months) and km_per_year are required to show it; start_mileage (km at delivery) defaults to 0; forecast: 90 or 30 to project from the last days (average since the start by default); extra_km_cost: cost per extra km
language ❌ Auto Force language: en, fr, de, es, sr, sr-Latn, it, nl, pt, pl, ro, da, sv, bg, ru, uk, hu, sk, cs, sl, lv or el (auto-detects from HA settings)
entities ❌ Auto Override detected entities: mileage, fuel_autonomy, fuel_quantity, fuel_level, battery_level, battery_autonomy, location

Mini card

Mini card

Add it from the dashboard (Add card → Vehicle Mini Card). It takes the same options as the vehicle card, which it shows in full when you press the button at the top right; a click outside the card folds it back.

type: custom:vehicle-mini-card
device_id: 5a8c1932ddf3f29163a275f06789b1bf

Map card

Map card

Add it from the dashboard (Add card → Vehicle Map Card). With no vehicle selected it shows all the vehicles that have a location, whatever their brand.

type: custom:vehicle-map-card
title: Vehicles
map_style: ha
height: 400
Option Required Default Description
devices ❌ All vehicles List of vehicle device IDs to show
title ❌ Vehicles Card title; empty for none
map_style ❌ ha ha (Home Assistant vector map), osm, osm_fr, ign, ign_photo, topo, cyclosm, satellite or custom
theme ❌ auto Base map theme: auto (follows Home Assistant), light or dark
tile_url ❌ — Tile URL with {z}, {x}, {y}, for map_style: custom
tile_attribution ❌ — Attribution shown for custom tiles; rendered as HTML by Leaflet (as in Home Assistant's map card), so links are allowed
height ❌ 400 Map height in pixels
zoom ❌ Auto Fixed zoom level; by default the map fits the vehicles and home
show_icon ❌ true Brand logo in the header (when all the vehicles are of the same brand; a car icon otherwise)
show_home ❌ true Home marker
show_name ❌ true Vehicle name on the markers
show_picture ❌ true Vehicle picture on the markers and in the popup: the one the integration gives, else the entity_picture of its device tracker (which you can set with customize)
show_fullscreen ❌ true Full screen button under the zoom buttons (on iPhone the card fills the screen)
language ❌ Auto Force language: en, fr, de, es, sr, sr-Latn, it, nl, pt, pl, ro, da, sv, bg, ru, uk, hu, sk, cs, sl, lv or el (auto-detects from HA settings)

The ha base map is the one Home Assistant's own map card uses (Home Assistant 2026.9 or later, WebGL2): OpenStreetMap vector tiles through your instance, in light or dark. On older versions or without WebGL2, the card falls back to OpenStreetMap raster tiles, also through Home Assistant when it can. Leaflet and MapLibre GL ship with the card (see licenses): only the map tiles come from the network.

Migrating from ha-renault-card

Migrating from ha-renault-card

The repository was renamed and the Marketplace follows it: update the card as usual.

  • custom:renault-card, custom:renault-mini-card and custom:renault-map-card still work and take the same options; new cards are added as custom:vehicle-card, custom:vehicle-mini-card and custom:vehicle-map-card
  • The file is now vehicle-card.js (renault-card.js is no longer shipped since 3.0.1). The Marketplace registers the new file; if you added the dashboard resource by hand (/local/renault-card.js…), point it to vehicle-card.js, and check in Settings → Dashboards → Resources that no resource still loads renault-card.js

To tidy up, replace renault- with vehicle- in your card types.

How it works

How it works

The card reads the entity registry to list the entities of the chosen device, then matches each one by its translation key, then by its entity ID (English and French slugs), then by its attributes. Everything else the device exposes as a button becomes an action button, followed by the entities of the buttons option.

The brand comes from the device's manufacturer (else from the integration). Renault's logo is bundled; the 32 other logos (also in images/logos, as the tiles at the top of this README) (Simple Icons, CC0, and the CUPRA emblem from Wikimedia Commons) are in vehicle-card-brands.js, loaded only when a card shows another brand.

Action buttons need a second tap within 3 seconds, so a horn doesn't go off by accident.

Orange Internet On the move: the data plan device of ha-orange-internet-on-the-move is named after the car's tag on the portal (for example RENAULT Espace), so the card links it to the vehicle whose model matches. Set data_plan_device_id to pick one by hand. The card shows the data in GB above 1 GB, whatever the unit of the sensors (MiB, GiB, or the Mbit label of the unmaintained rexave integration). The date is shown as a renewal date for recurring plans, as an expiry date otherwise. Click the Orange logo to open the Orange Internet On the move customer area; click anywhere else in the section for the entity details.

Support

Support

If you find this project useful, you can support its development:

Buy Me a Coffee

3.1.0Nov 12, 2026Latest

Features

  • show_title and show_subtitle options (also in the visual editor) hide the title (the name) and the subtitle (the model) of the header, separately, for a card placed under a section heading of its own (#72).

Improvements

  • A model that only repeats the name (a device named after its model) is no longer shown twice in the header.

3.0.6Nov 12, 2026

Documentation

  • The Orange Internet On the move section now points to ha-orange-internet-on-the-move, which replaces rexave's integration, no longer maintained (same domain, devices and entities: no change needed in the card).

3.0.5Nov 12, 2026

Documentation

  • Screenshots: Tesla's render of the Model 3 (card, mini card and map).

3.0.4Nov 12, 2026

Documentation

  • show_picture of the map card: the vehicle picture is the one the integration gives, else the entity_picture of its device tracker, which can be set with customize (the Tesla Model 3 of the map screenshots).

3.0.3Nov 12, 2026

Features

  • CUPRA logo next to the name of a CUPRA (the emblem, from Wikimedia Commons), instead of the car icon.

Documentation

  • The logos of the 33 brands at the top of the README.

3.0.2Nov 12, 2026

Fixes

  • The model keeps the maker's spelling ("Peugeot e-208", "Mercedes-Benz GLC 300 e"): only Renault's models, which its API gives in lower case, are recased.
  • A CUPRA no longer shows the SEAT logo, but the car icon.
  • Action buttons get a matching icon for more integrations: engine start and stop, preheating and climatization, locking, unlocking, refresh and wake up, hazard lights, charge stop (Stellantis), buzzer (Toyota).

Documentation

  • Screenshots per brand: a card and a mini card, light and dark, for Renault, Tesla, Volvo, Škoda, Subaru, Peugeot (Stellantis), Kia, Toyota, Volkswagen, CUPRA and Mercedes-Benz, each set up with its integration's own entities, to show what the card displays for each brand, with the makers' renders of the models.