Screenshots From the README of JustChr/BavarianData.
About
BavarianData: Connect Home Assistant to BMW CarData brings live BMW and MINI vehicle data into Home Assistant. It reads BMW's cloud through a live MQTT stream and a REST API using a personal client ID, and it is read-only, so it cannot command the car. Each descriptor BMW sends becomes an entity, shown as sensors, binary sensors, a location tracker, a service calendar and a vehicle image. On top of that it derives a charging history with costs, battery health, a trip journal, a measured real-range figure and long-term statistics for the Energy dashboard. It can publish the state of charge over MQTT for evcc or openWB, offers device triggers for charging, parking and trip events, and exports history as CSV or printable HTML. Setup runs through the Home Assistant interface after a client ID is created in the BMW portal.
Automatic summary of the README and code of JustChr/BavarianData. Something wrong, or are you the maintainer and want your own text here? Get in touch
Supports
Uses the vendor's cloud Needs an internet connection and an account with the vendor.
Device triggers Its devices can start automations directly.
From the Marketplace Installed through the Marketplace, formerly HACS.
Actively maintained Its author released or pushed a change in the last six months.
Provides
- Sensors
- Presence
- Calendars
Setting it up
Install it from the Marketplace and restart Home Assistant, then add it under Settings, Devices and services.
Connect BMW CarData
- Client IDThe CarData Client ID from the BMW portal — a long string that looks like a UUID.
Activate your data, then paste the result
- Setup resultThe BAVARIANDATA… text the Copy button put on your clipboard.
Choose streamed data
- Data clustersLeave the defaults for the recommended set, or tailor it to just the data you care about (e.g. only Electric vehicle and Vehicle status).
Activate your data, then paste the result
- Activation resultThe BAVARIANDATA… text the Copy button put on your clipboard. Leave it empty to finish without activating.
Change Client ID
- Client IDThe Client ID of a CarData Client in the BMW portal, subscribed to CarData API and CarData Streaming.
After setup
- Data clustersLeave the defaults for the recommended set, or tailor it to just the data you care about (e.g. only Electric vehicle and Vehicle status).
- Activation resultThe BAVARIANDATA… text the Copy button put on your clipboard.
- Picture sourceOfficial: one side view, 1 of your 50 daily BMW requests per car. Configurator: your exact car in 360° with its real paint, no requests, but an unofficial BMW service that may stop working.
- VehicleThe next screen starts with this vehicle's own settings.
- Price sourceNone records sessions without costs. Fixed price bills every kWh at one rate; Price entity follows a live tariff (Tibber, Nordpool, …) while the car charges.
- Fixed price per kWhOnly used when the price source is 'Fixed price'.
- Price entityOnly used when the price source is 'Price entity'. Its state must be a price per kWh.
- CurrencyISO code shown on the cost sensors, e.g. EUR, GBP, CHF.
- Wallbox energy sensorOptional. Your wallbox's lifetime energy total, one that only counts up. Read for charges in your Home zone only. A measured figure beats the battery-side estimate and also sharpens the charge estimate at home.
- Charging losses (%)Optional. Energy is measured at the battery, a little below what the grid delivered; this grosses it up. Leave it at 0 if you have a wallbox meter.
- Keep history for (months)0 keeps everything. Sessions older than this are discarded.
- Publish to long-term statisticsMirrors energy, cost and distance into statistics you can add to the Energy dashboard. Stays local; turning it off deletes them again.
- Remember charging locationsOptional. Saves where each charge happened, so the card can show your charging places on a map. Writes coordinates to disk; turning it off deletes them. From the next charge on.
- Price sourceNone records sessions without costs. Fixed price bills every kWh at one rate; Price entity follows a live tariff (Tibber, Nordpool, …) while the car charges.
- Fixed price per kWhOnly used when the price source is 'Fixed price'.
- Price entityOnly used when the price source is 'Price entity'. Its state must be a price per kWh.
- CurrencyISO code shown on the cost sensors, e.g. EUR, GBP, CHF.
- Keep history for (months)0 keeps everything. Sessions older than this are discarded.
- Publish to long-term statisticsMirrors energy, cost and distance into statistics you can add to the Energy dashboard. Stays local; turning it off deletes them again.
- PV powerTotal generation from your inverter(s).
- Grid power (+ import / − export)Signed power at the meter: positive while drawing from the grid, negative while exporting.
- House battery power (optional)Leave empty if you have no home storage. Expected positive while discharging — tick the box below if yours is the other way round.
- My battery sensor is positive when chargingMany integrations publish battery power positive while charging. There is no way to tell from the value itself, so say which yours is.
- Value of own solar per kWhLeave empty to cost solar at the import price. Set it to your feed-in tariff to see what a charge really cost you.
- VehicleThe next screen starts with this vehicle's own settings.
- Publish this car to MQTTOff by default: it puts the VIN and the car's state on a broker other things can read.
- Topic prefixTopics become PREFIX/VIN/soc and so on. Leave it as bavariandata unless it clashes with something.
- Publish retainedKeep this on: it lets evcc find the state of charge the moment it starts. Turn it off only if your broker refuses retained messages.
- Topic prefixTopics become PREFIX/VIN/soc and so on. Leave it as bavariandata unless it clashes with something.
- Publish retainedKeep this on: it lets evcc find the state of charge the moment it starts. Turn it off only if your broker refuses retained messages.
Texts from the code of JustChr/BavarianData.
Entities
- Binary sensorsCharging Port connection state, Charging Port plug (DC) state, Charging Port plug post-charge lock state, Charging Port session ID, Charging Port plug lock state, Charging Port plug event ID, Charging Port plug state, Charging Port state text, Charging Port flap lock, Charging Port flap permanent lock state, Hood state, Vehicle Lights state, and 284 more
- CalendarsService Calendar
- PresenceLocation
- ImagesVehicle Image
- SensorsCharging Port connection state, Charging Port plug (DC) state, Charging Port plug post-charge lock state, Charging Port session ID, Charging Port plug lock state, Charging Port plug event ID, Charging Port plug state, Charging Port state text, Charging Port flap lock, Charging Port flap permanent lock state, Hood state, Vehicle Lights state, and 306 more
Actions
- Fetch telematic dataFetch telematic data for every vehicle on the account using the stored containers and log the response. Two requests per vehicle.Fields: Vehicle, Config entry, VIN
- Fetch vehicle mappingsFetch mapping information for the configured account and log the response.Fields: Account, Config entry
- Fetch basic vehicle dataFetch static vehicle metadata (model name, series, etc.) for a VIN and log the response.Fields: Vehicle, Config entry, VIN
- Fetch charging historyFetch the charging session history for a VIN (paginated) from BMW and import it into the local history, so past charges appear on the card and in the monthly summaries. Overlapping live-recorded sessions are enriched in place with BMW's measured grid energy. Counts as one or more API calls against the 50/24h quota.Fields: Vehicle, Config entry, VIN, From, To
- Fetch smart maintenance tire diagnosisFetch the smart-maintenance tire diagnosis for a VIN and log the response.Fields: Vehicle, Config entry, VIN
- Fetch location-based charging settingsFetch the location-based charging settings for a VIN (paginated) and log the response.Fields: Vehicle, Config entry, VIN
- Fetch vehicle imageFetch the vehicle image for a VIN and log its size/content type.Fields: Vehicle, Config entry, VIN
- Get charging sessionsReturn recorded charging sessions, newest first. Reads the integration's own history, so unlike the fetch actions it costs no BMW API quota.Fields: Vehicle, Config entry, VIN, From, To, Limit
- Get charging placesReturn the places a car has charged at, most visited first, with the average power and typical stop at each. Reads the integration's own history, so it costs no BMW API quota.Fields: Vehicle, Config entry, VIN, From, To
- Get tripsReturn recorded trips, newest first. Reads the integration's own history, so like the charging sessions it costs no BMW API quota. Endpoints are stored as place names, never coordinates. A drive still under way is returned separately as open trips (it has no end, and its distance is provisional) unless a from/to window was given.Fields: Vehicle, Config entry, VIN, From, To, Limit
- Get driving summaryReturn the month-in-review aggregation for trips: distance, the business/private/commute split, consumption, recuperation, driving-style score, top destinations and (with a tariff) an estimated driving cost. Reads the local store, so it costs no BMW API quota.Fields: Vehicle, Config entry, VIN, Month
- Get mileage reportReturn how far the car is driven (this month, this year, the last 12 months, its pace) and, with a mileage allowance, where it stands against it. Reads the local store, so it costs no BMW API quota.Fields: Vehicle, Config entry, VIN
- Get efficiency and real rangeReturn measured consumption (kWh/100 km), the real range it implies at the current state of charge, the charging loss between the grid and the battery, and a month-by-month efficiency trend. Everything is derived from the charging ledger, so it costs no BMW API quota.Fields: Vehicle, Config entry, VIN
- Get fuel historyReturn a petrol, diesel or plug-in hybrid car's refuels, read off its tank level, with the fuel consumption between them, the average over the last year, and BMW's lifetime consumption figures where the car sends them. Costs no BMW API quota.Fields: Vehicle, Config entry, VIN
- Get evcc configurationReturn the evcc 'custom' vehicle configuration for this car, ready to paste into evcc.yaml, along with the MQTT topics the bridge publishes and which of them are currently live. Reads local state only, so it costs no BMW API quota.Fields: Vehicle, Config entry, VIN
- Set trip classificationOverride a trip's classification (business, private or commute). Use this to correct the automatic zone-pair guess. Writes the local store only.Fields: Vehicle, Config entry, VIN, Trip ID, Classification
- Mark trip startNote that a drive is starting now, for a car that reports only once parked: the trip its next report ends then starts at this time. Used only when Trip detection is set to End-of-trip reports. Writes the local store only.Fields: Vehicle, Config entry, VIN, Time
- Export historyReturn one month of recorded charging sessions and/or trips as files: CSV for spreadsheets, or a self-contained HTML report you can print to PDF from the browser. The file contents come back in the response; nothing is written to disk. Reads the local store, so it costs no BMW API quota.Fields: Vehicle, Config entry, VIN, Month, Type, Format, Language
- Get descriptor coverage reportRun the descriptor-coverage self-test: for each vehicle, compare the descriptors your selected stream clusters should deliver against those that have actually arrived, and list any that are missing. Answers "I enabled a cluster but no entities appeared -- is it my selection, my car, or a bug?". Reads the local store and live stream only, so it costs no BMW API quota.Fields: Vehicle, Config entry, VIN
- Activate stream fieldsReplace which CarData attributes BMW streams over MQTT for a vehicle, by sending the same request the BMW portal's stream-setup page sends when you save the data selection. Stream selection has no CarData API, so this needs a captured portal browser session (it cannot be refreshed automatically -- the session is short-lived). Costs no BMW API quota. Returns the requested/accepted attribute counts.Fields: Account, Config entry, Portal base URL, Locale, Mapped vehicle ID, Cookie header, Attributes, Sections
Troubleshooting
- DiagnosticsDownloads a diagnostics file to attach to a bug report.
- Repair noticesNotices it can show in Settings, Repairs:BMW motorcycles can't stream their data, A selected data cluster has never streamed, Is no longer on your BMW account
From the README
Bring your BMW's or MINI'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).
Shows in Vulpo
Calendar card, Chart card, Apple Watch.Information
- Installs
- 397 sharing analytics
- GitHub stars
- 22
- Connection
- Uses the vendor's cloud
- Upkeep
- Updated in the last 6 months
- Version
- v0.9.23,
- Category
- Vehicles and transport, Cars and EVs
- Kind
- Marketplace integration
- Needs
- Needs the Marketplace (HACS on 2026.10 and older)
- Domain
bavariandata- Issues
- Report an issue
You might also like
Kia Uvo / Hyundai Bluelink6.3k installs · A Home Assistant HACS integration that supports Kia Connect(Uvo…Open
Tesla Custom Integration4.4k installs · Tesla custom integration for Home Assistant. This requires a re…Open








