Bring your BMW's live data into Home Assistant — straight from BMW CarData, no third-party cloud in between.
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, tyre 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, long-term statistics for the Energy dashboard, and CSV/PDF export — all from the stream, spending no API quota. A bundled Lovelace card and a cached vehicle image give you a usable dashboard out of the box.
Status — actively developed. A spare-time project, verified against a limited number of vehicles and Home Assistant versions, so expect the odd rough edge on a model it hasn't met yet. 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. Track
main; other branches may be broken at any time.
📖 Full documentation → the Wiki
The complete manual — every screen, card view, setting, service and feature — lives in the Wiki. This README is the quick overview.
- A BMW account with a vehicle that supports CarData.
- CarData API and CarData Streaming subscribed in the BMW portal, and a client ID generated for this integration.
- Home Assistant 2026.3 or newer, with HACS.
Four steps — the Wiki has the detail and screenshots for each.
- Set up BMW CarData in the portal —
generate a client ID and give it both scopes (
cardata:api:readandcardata:streaming:read). Don't touch Data Selection yet. - Install via HACS — add this repo as a custom repository (category Integration), install, and restart Home Assistant.
- 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.
- Choose which data to stream — pick your clusters. Guided setup then turns the fields on with a one-click Activate BMW data bookmarklet; manual setup hands you a browser-console snippet to paste into the portal's Data Selection instead. Either way, save and trigger a lock/unlock to prompt the first update.
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.
- Bugs in the integration → Issues.
- BMW-side registration trouble, setup help, or general questions → Discussions.
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.
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.
"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.



