The BMW CarData plugin retrieves vehicle data from the BMW CarData API and provides it as inputs in Loxone Config. Each vehicle is configured as a separate child device.
![]() | Requirements: an active BMW account with the vehicle assigned to it, a Loxone Miniserver Gen.2 with internet access, and a desktop browser for the one-time activation. The CarData API toggle is only available in the MyBMW web portal at bmw.com/mybmw — it is NOT present in the mobile MyBMW app. |
![]() | Compatible vehicles: typically BMW models from approx. 2017 onwards with ConnectedDrive equipment. The BMW CarData API allows a maximum of 50 data requests per day per vehicle. |
Table of Contents
Configuration↑
First-time Setup
Follow these steps in order:
1. In a desktop browser (the mobile MyBMW app does not offer this), open bmw.com/mybmw and sign in with your BMW account.
2. Select your vehicle, then navigate: BMW CarData → Technical Access to BMW CarData → CarData API. Activate 'Request access to CarData API' and accept BMW's CarData data sharing terms. The portal then shows an identifier in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx — copy it to the clipboard.
3. In Loxone Config, add the 'BMW CarData' plugin to the Network Periphery. Open the plugin settings via its gear icon and paste the identifier into the Client ID field. (One identifier is shared across all vehicles configured under this plugin.)
4. Right-click the plugin and add a 'BMW Vehicle' child. Enter the VIN — the 17-character vehicle identification number. The VIN is on the vehicle registration document, on the lower edge of the windscreen, and in MyBMW → Vehicle overview when you select the vehicle.
5. Connect the Poll Trigger input to a signal that should trigger a data refresh — for a quick test a push-button or a Weekly Timer entry is enough; in production typical sources are a wallbox-connected event, charging-state changes, or any other automation event. Without a connected Poll Trigger the plugin does not fetch any data.
6. Save the configuration to the Miniserver.
7. The first time the Poll Trigger fires, a system message appears in Loxone Config and in the Loxone App with an authorisation link. Open the link in a browser, sign in with your BMW account and confirm — the user code is already embedded in the link, so BMW only asks for confirmation.
8. The plugin now fetches vehicle data on every Poll Trigger pulse. The access token is stored on the Miniserver and refreshed automatically; you do not have to sign in again unless you revoke access in the MyBMW portal.
Client ID
The Client ID is created once per BMW account in the MyBMW web portal at bmw.com/mybmw (desktop browser required — the mobile MyBMW app does not have this menu) under Vehicle overview → BMW CarData → Technical Access to BMW CarData → CarData API. Accepting BMW's CarData data sharing terms is mandatory on first activation. One Client ID is shared across all vehicles configured under this plugin and remains valid until access is revoked in the same portal.
Home Coordinates
The Distance from Home output is computed as the great-circle distance between the Miniserver coordinates and the vehicle's current GPS position. Configure the Miniserver location in Loxone Config → Miniserver settings → Location.
Polling
The plugin does not poll automatically — it only fetches data when the Poll Trigger input receives a rising edge. Connect it to any signal that should refresh the vehicle data. For a quick test, use a push-button or a Weekly Timer entry; in production use events such as a wallbox connecting, a charging-state change, or a scene activation. Keep in mind the 50-requests-per-day limit per vehicle (see Rate Limit and Error Messages below).
Authorisation
On first use the plugin needs a one-time authorisation with your BMW account. When the Poll Trigger fires for the first time, the Authorisation Required output goes to 1 and a system message appears with an authorisation link. Open the link in a browser, sign in with your BMW account and confirm — the user code is already embedded in the link, so BMW only asks for confirmation. The same message also shows the user code in plain text as a fallback; enter it manually only if the login page does ask for it (rare). After successful sign-in the plugin fetches data and Authorisation Required returns to 0. The access token is then refreshed automatically; a new sign-in is only required if access is revoked in the MyBMW portal.

Where the authorization code comes from
You never create this code yourself — not in the MyBMW portal and not on the BMW API or Swagger pages. When the Poll Trigger fires, the plugin automatically requests a one-time code from BMW and shows it to you in two places: in the Loxone App system message (after 'enter the code:'), and in the Authorization URL output as the user_code parameter of the link (https://customer.bmwgroup.com/oneid/link?user_code=...). You normally never type it: the 'Open BMW login' button and the Authorization URL link already contain the code, so BMW only asks you to sign in and confirm. The plain-text code is only a fallback if a login page ever asks for it manually. The code is valid for a few minutes; if it expires before you finish, fire the Poll Trigger again to get a fresh one.

Rate Limit and Error Messages↑
The BMW CarData API allows a maximum of 50 data requests per day per vehicle. The counter resets at midnight UTC. A normal data refresh consumes 1 request. The very first refresh after setup consumes one or two additional requests once to detect the vehicle model and prepare the data channel — plan for ~3 requests on the initial setup day.
![]() | Do not trigger more than ~45 polls per day per vehicle to leave headroom for the first-poll requests and ad-hoc updates. |
System Messages
The plugin generates system messages in Loxone Config and the Loxone App for the following situations: Authorisation Required — see the Authorisation section above. Rate Limit Reached — the 50 requests/day quota was exceeded; the message shows the time until midnight UTC when the counter resets. Connection Error — the Miniserver cannot reach the BMW CarData API; check the internet connection. Client ID Missing — no Client ID has been configured in the plugin settings. Vehicle Not Found — the configured VIN is not assigned to the BMW account or does not exist; check the VIN and the vehicle permissions in the MyBMW portal.
Sensors and Actuators↑
This section explains what each signal is for. Units and value ranges are listed in the Sensors and Actuators tables above.
Sensors
VIN — the 17-character vehicle identification number; use it to tell several vehicles apart or for logging.
Model — the model name reported by BMW; for display and labeling.
Battery SOC (%) — high-voltage battery state of charge; charge control, low-battery notifications, visualization.
Electric Range (km) — remaining electric range; range warnings, trip planning.
Mileage (km) — odometer reading; service-interval tracking, logging.
Charging (0/1) — 1 while the vehicle is actively charging; PV-surplus logic, notifications, summer cabin ventilation.
Remaining Charge Time (min) — estimated time until full (only meaningful while charging); 'ready by' display, departure planning.
Cable Connected (0/1) — 1 while the charge cable is connected; remind the user to plug in, gate charging automations.
Charging Power (kW) — current charging power; energy monitoring, load management.
Authorization Required (0/1) — 1 while the plugin is waiting for authorization; trigger a reminder.
Authorization URL (Text) — the login link; display it in the Loxone App so the user can authorize.
Distance from Home (km) — air-line distance between the Miniserver location and the vehicle's GPS position. Use it as a coarse 'is the car at home?' indicator, e.g. together with Charging to confirm the car is charging at home. It is not suitable for real-time arrival automations (such as opening the garage), because that would require near-constant polling while the API is limited to 50 requests per day and the plugin only fetches on a Poll Trigger.
Actuators
Poll Trigger — a rising edge fetches fresh vehicle data once. The plugin never polls on its own; drive this from a scheduled time trigger (for example a few times a day), a 'wallbox connected' event, or a button.
Sensors↑
| Summary | Unit | Value Range |
|---|---|---|
| VIN | Text | - |
| Model | Text | - |
| Battery SOC | % | 0...100 |
| Electric Range | km | 0...1000 |
| Mileage | km | 0...1000000 |
| Charging | Digital | 0/1 |
| Remaining Charge Time | min | 0...3000 |
| Cable Connected | Digital | 0/1 |
| Charging Power | kW | 0...22 |
| Authorization Required | Digital | 0/1 |
| Authorization URL | Text | - |
| Distance from Home | km | 0...50000 |
Actuators↑
| Summary | Unit | Value Range |
|---|---|---|
| Poll Trigger | Digital | 0/1 |
Diagnostic Inputs↑
| Summary | Description | Unit | Value Range |
|---|---|---|---|
| Online | Indicates whether the device can be reached by the Miniserver. Diagnostics for Air devices Diagnostics for Tree devices Diagnostics for Extensions | Digital | 0/1 |
Properties↑
| Summary | Description | Default Value |
|---|---|---|
| BMW CarData Client ID | Client UUID created in MyBMW portal: Vehicle overview → BMW CarData → Technical Access to BMW CarData → CarData API → Request access. Shared across all configured vehicles. | - |
| Monitor service | If checked, you will be notified by the System Status or Cloud Mailer if this service is no longer available or offline. | - |

