Skip to content

About

BMW CarData for Home Assistant, in the Home Assistant Marketplace: live MQTT stream + REST API for your BMW or MINI, with charging history & cost, trip journal and battery health. The replacement for the Connected Drive / MyBMW integration.

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Latest commit

 

History

672 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BavarianData logo

BavarianData: the BMW & MINI integration for Home Assistant

Bring your BMW's or MINI's live data into Home Assistant — straight from BMW CarData, no third-party cloud in between.

Tests hassfest and HACS validation Home Assistant Quality Scale: Platinum, self-assessed Test coverage of at least 95 % in every module Type-checked with mypy --strict

In the Home Assistant Marketplace Latest release Home Assistant 2026.3 or newer Ten languages Downloads GitHub stars MIT license Sponsor on GitHub Support on Ko-fi

Open your Home Assistant instance and open BavarianData in the Marketplace.


BMW CarData is BMW's own telematics service: an MQTT stream that pushes vehicle data in real time and a REST API for on-demand snapshots. This integration talks to both directly, using your personal BMW client ID. There is no intermediate server and no MyBMW screen-scraping — Home Assistant is the only client, and it's read-only (CarData cannot command the car).

Every descriptor BMW sends becomes a native entity — charge level, doors, tire pressures, the 12 V battery — each with a proper device class, unit and translated states. On top of that the integration derives a charging history & cost ledger, battery-health learning, a trip journal, a real-range figure measured from your own driving rather than predicted, long-term statistics for the Energy dashboard, and CSV and printable-HTML export (the report prints to PDF from any browser) — all from the stream, spending no API quota. A bundled Lovelace card and a cached vehicle image put a good-looking dashboard one card away — the card registers itself, you just place it.

It can also hand that live charge level to your charge controller: the evcc / wallbox bridge publishes the car's state of charge over MQTT, so evcc or openWB can charge on a figure that arrives as the car reports it instead of polling a rate-limited vendor API — and it reads your wallbox's own meter back, to record what each charge really drew from the grid. The same figure goes to ABRP if you like, so A Better Routeplanner plans from your real battery.

That charge level keeps counting while the car charges, too: BMW often stops streaming it mid-charge, for hours, and the integration estimates it from the charging power or your wallbox meter until BMW reports again.

And you can simply ask: with an AI conversation agent behind Assist, "Do I need to charge before driving to Munich and back?" or "Is the car locked?" get an answer, by voice, in the chat or from a desktop AI app over MCP (Ask Assist & AI).

Bundled Lovelace card showing a BMW i5 eDrive40: Ready to go at its 80 % target, the charge bar, range and the real range, tiles for lock, plug, tires and location, and rows for Charging, Trips, Efficiency and Car

Security & closures card with a top-down car diagram, anti-theft alarm armed and all closures closed    Tire card with the pressure and wear summary above a top-down car, every tire OK

Trips card: the month's distance and average consumption, the private split, top destinations and the trips grouped by day    Efficiency and range card: real range now set against the car's own estimate, measured consumption, usable capacity, cost per 100 km and consumption by month

The overview, trips and efficiency are from the website's live demo: a real i5's data, made-up places.

Status — actively developed. Runs on electric, plug-in hybrid, petrol and diesel BMWs and MINIs (which cars). It is read-only by design — CarData cannot command the car — so treat what it reports as informational rather than as the trigger for a safety-critical automation.

📖 Full documentation → justchr.github.io/BavarianData

The complete manual — every screen, card view, setting, service and feature — lives on the website (also in the Wiki; German: Handbuch). The website also runs the real card on a demo car and lists every descriptor BMW CarData can send. This README is the quick overview.

Requirements

  • A BMW account with a car that supports CarData (BMW streams no data for BMW Motorrad motorcycles). See which cars work.
  • CarData API and CarData Streaming subscribed in the BMW portal, and a client ID generated for this integration.
  • Home Assistant 2026.3 or newer. From 2026.11 it installs from the built-in Marketplace; on older versions, from HACS.

Quick start

Five steps — the Wiki has the detail and screenshots for each.

  1. Set up BMW CarData in the portal — generate a client ID and give it both scopes (cardata:api:read and cardata:streaming:read). Don't touch Data Selection yet.
  2. Install from the Marketplace — open Settings → Marketplace, search for BavarianData, install, and restart Home Assistant (before 2026.11: the same in HACS).
  3. Add & authorize — Settings → Devices & Services → Add Integration → BavarianData, paste the client ID, and approve the device on BMW's site. If BMW says access denied even though your login worked, that's a known BMW-side quirk with a workaround.
  4. Choose which data to stream — turn the fields on with the one-click Activate BMW data bookmarklet — guided and manual setup use the same one, manual after you pick the clusters. Then trigger a lock/unlock to prompt the first update.
  5. Add the card to a dashboard — the integration doesn't create a dashboard of its own. Open any dashboard, Add card → BavarianData Card, and it finds your vehicle by itself.

Activating stream fields in one call (advanced)

Stream selection ("Datenauswahl") has no CarData API. Guided setup and Configure → Choose streamed data hide this behind the one-click Activate BMW data bookmarklet, which flips the fields on for you in the browser. If you instead want to drive it yourself, the bavariandata.activate_stream_fields service replays the exact request the portal sends when you save, replacing the whole selection in one call. Because that endpoint authenticates with your browser session (not the integration's token, and behind BMW's bot-defense), you supply a captured portal session — a manual, occasional tool that spends no API quota. See Services → activate_stream_fields.

Contributing & support

  • Bugs in the integration → Issues.
  • BMW-side registration trouble, setup help, or general questions → Discussions.
  • Enjoying it? BavarianData is a spare-time project: a ⭐ star here, a GitHub Sponsors contribution or a coffee on Ko-fi keeps it going.

The descriptor catalogue, metadata, translations and reference docs are all generated from BMW's exports by the pipeline in tools/ — see tools/README.md before hand-editing any generated file.

Credits & license

Released under the MIT License. This integration began as a continuation of the public-domain bmw-cardata-ha by JjyKsi; that project carried no licensing restrictions, and the original author is credited in NOTICE out of respect for their work.

The MIT License covers the code, not the name "BavarianData" or its logo. A modified copy published as its own project needs its own name, domain and logo; see NOTICE.

"BMW", "Mini", "Rolls-Royce", and "CarData" are trademarks of their respective owners. This is an independent, community-built integration and is not affiliated with, endorsed by, or sponsored by BMW Group. Use at your own risk; see the warranty disclaimer in the LICENSE.

About

BMW CarData for Home Assistant, in the Home Assistant Marketplace: live MQTT stream + REST API for your BMW or MINI, with charging history & cost, trip journal and battery health. The replacement for the Connected Drive / MyBMW integration.

Topics

Resources

Stars

36 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages