BMW ConnectedDrive Binding

I’ll start adaptions this year. At the first glance their will be several changes

Not supported anymore

  • statistics for last trip and overall trips
  • last destinations

Additional

  • charge history

No solution available yet

  • send charging profile
3 Likes

Hi! Any news about the adoptions to the new API? In the BMW i3 Forum (Geniales iOS14 Homescreen Widget Script für SoC, Reichweite, usw. - Seite 12 - i3 - Allgemeine Themen • BMW i3 - Elektroauto Forum) I found a thread with a similar problem. They said only the url has been changed
" Die “alte” API funktioniert nach wie vor.
Lediglich die URL hat sich anscheinend von “www.bmw-connecteddrive.com” zu “b2vapi.bmwgroup.com” geändert.
Die “www.bmw-connecteddrive.com” wurde als Zugangspunkt zur API anscheinend abgeschaltet."
Is it really that simple?
Best regards

The problem metioned is different. Since te beginning b2vapi.bmwgroup.com / .us / .cn for US or China are used. Just to highlight: this binding is still working! Values regarding ddors, windows, charging, range, warnings, services, … are correctly delivered by the current API. But values for

  • Lifetime statistics
  • Last trip statistics
  • Charge profile get & set
  • Last destinations

are not working anymore. And this is not due to changing the server. The BMW ConnectedDrive App is deleted from Android App store and the replacement is the MyBMW App. With this App many things were changed

  • Login & Authorization flow
  • Server and APi signatures
  • returned data structure and values

First prototype is wprking but it’s too early to distribute.

5 Likes

First of all, great job with the binding. I appreciate the work you put into keeping the BMW binding operational!

To clarify your latest update; are you saying remote control through the binding should still be operational? Similar to a couple of other users in this thread the last couple of weeks I am only getting 500 errors whenever I try to send a remote control command (doesn’t matter which one). So if there’s no problem with the binding in this regard I assume there is something wrong with my setup?

You’re correct. Tried several times today execution of remote services but got every time Internal Server Error 500. This was still operational ~ 3 weeks ago. So it seems BMW cancelled also this functionality.
So to say: the functionality is reducing more and more. But I doubt this can be fixed using the API currently in use. Project bimmer_connected already switched to a new BMW API which I’m currently implementing.

2 Likes

Here we go => MyBMW Binding

3 Likes

Hi Bernd,
next to the new Binding - should the actual published binding support two accounts?
Mine is mixing up items between things.

Hi Bernd,

items with different values?

  1. .item File (with value, but old?)
  2. created by GUI (NULL)

Nol matter if binding switched to “My BMW” instead of “old” API

Two accounts means you need 2 different bridges. Each bridge with another username and password.
One bridge can handle multiple vehicles. After Bridge creation auto discovery will place the found vehicles into your inbox, but only if you didn’t defined them by hand in *.things files.

Your screenshot shows really a strange situation. Looks like you gave two different vehicles the exact same identifier which could explain this mixup. Did you define things and items files by hand or do you rely on GUI setup?

For your info my thing identifier & item example


I’m pretty sure it’s the old value. last-trip isn`t working anymore in ConnectedDrive Binding.

Yes, there are no more last-trip statistics in the current BMW API. But I’m again curious how you created this in GUI. There’s simply no way to connect an item to a last-trip channel because it’s completly removed. Can you click on this new item with NULL value and check the connected channel?

Hi Bernd,

Sure: 2 bridges with two different accounts (Login/Password) => running.
Two cars as things are autodiscovered in the UI => running.
Test items attached to these channels show this odd behaviour.

Number:Length i3Mileage “I3_Odometer [%d %unit%]” (i3) {channel=“bmwconnecteddrive:bev:676c7c1ab8:WBY8P610707F83711:range#mileage” }
Number:Length x3Mileage “X3_Odometer [%d %unit%]” (i3) {channel=“bmwconnecteddrive:phev:3a49bb0b71:WBATS110209F13533:range#mileage” }

Anyway thats a minor issue I guess, thus the Item Data are read correct from the designated thing.

For API function degradation I agree - and found proof.
Since 9.11. no more update of “trip consumption”.
But my own calculation based on total mileage / %charging*40kWh works fine (blue area)…
I guess I will give your new binding “My BMW” a try next week. Are they compatible, or should I deactivate to old one beforehand?

Screenshots look similiar to my situation except that all of my items are missing the analyze function (no data shown in GUI Diagramms). Something odd with persistency I guess (MapDB, RRD4J, JDBC in parallel).

Maybe the log is helpful: There is a difference whether I choose the “Use My BMW” Button in the binding or not…


2022-01-04 19:28:06.395 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: 

java.lang.NullPointerException: null

	at org.eclipse.jetty.util.UrlEncoded.decodeTo(UrlEncoded.java:238) ~[?:?]

	at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.codeFromUrl(ConnectedDriveProxy.java:446) ~[?:?]

	at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.updateToken(ConnectedDriveProxy.java:303) ~[?:?]

	at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.getToken(ConnectedDriveProxy.java:252) ~[?:?]

	at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.call(ConnectedDriveProxy.java:144) ~[?:?]

	at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.get(ConnectedDriveProxy.java:177) ~[?:?]

	at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.requestVehcileStatus(ConnectedDriveProxy.java:189) ~[?:?]

	at org.openhab.binding.bmwconnecteddrive.internal.handler.VehicleHandler.lambda$24(VehicleHandler.java:279) ~[?:?]

	at java.util.Optional.ifPresentOrElse(Optional.java:201) ~[?:?]

	at org.openhab.binding.bmwconnecteddrive.internal.handler.VehicleHandler.lambda$22(VehicleHandler.java:275) ~[?:?]

	at java.util.Optional.ifPresentOrElse(Optional.java:201) ~[?:?]

	at org.openhab.binding.bmwconnecteddrive.internal.handler.VehicleHandler.getData(VehicleHandler.java:274) ~[?:?]

	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]

	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]

	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]

	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]

	at java.lang.Thread.run(Thread.java:829) [?:?]

2022-01-04 19:28:18.876 [INFO ] [internal.handler.ConnectedDriveProxy] - Token valid? true

Really curious. Setup looks find at the first glance. Still unknown why the Thing mixes up the items.

For me it looks good, have both bindings running in parallel.

This button was my first try to introduce the new API - that’s why I put it into Advanced Options. I recommend not to use it - it’s a dead end!

Hi,

until now i am using the BMWConnectedDrive Binding, but since some time the connection to bmw is broken.

I already noticed, that there is a “new” binding at the marketplace: “MyBMW binding add-on”

Can i replace the old binding by the new one or do i have to do major changes at things and items? Is there a recommended migration path?

Thanks, Alex

I’ve just tried this, and worked without any issue!

I’m using text files for my items, so I just had to update the channel ID’s…
2min work…

1 Like

I’ve done the following:
I installed MyBMW binding in parallel and created mybmw vehicle thing. I unlinked the mileage item from ConnectedDrive thing and linked it to MyBMW thing in order to keep the persisted history data. If you want to preserve some more history (soc, ranges, …) do the same for the desired items.

With this one time manual migration the previous collected data from BMW ConnectedDrive binding isn’t lost.

1 Like

Hi and thanks for that advice - mapped all the items from the old binding to the new one.

The following items i couldnt map or i am not sure about.

  • doors#win-rear i didnt fint at the new binding - is this correct?
  • check#mileage seems to be outdated or is it check#details now?
  • destination#name & gps dont appear at the new binding or is it location#address now and can it be used to send destinations to the car?

Thanks, Alex

Is anyone getting error messages lately with this binding? I keep getting this, fresh install OH3.2… Everything else works fine but this.

2022-03-28 22:40:09.043 [WARN ] [internal.handler.ConnectedDriveProxy] - Server returned HTTP response code: 401 for URL: https://customer.bmwgroup.com/gcdm/oauth/authenticate
2022-03-28 22:40:09.329 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception:
java.lang.NullPointerException: null
        at org.eclipse.jetty.util.UrlEncoded.decodeTo(UrlEncoded.java:238) ~[?:?]
        at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.codeFromUrl(ConnectedDriveProxy.java:446) ~[?:?]
        at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.updateToken(ConnectedDriveProxy.java:303) ~[?:?]
        at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.getToken(ConnectedDriveProxy.java:259) ~[?:?]
        at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.call(ConnectedDriveProxy.java:144) ~[?:?]
        at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.get(ConnectedDriveProxy.java:177) ~[?:?]
        at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveProxy.requestVehicles(ConnectedDriveProxy.java:185) ~[?:?]
        at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveBridgeHandler.lambda$3(ConnectedDriveBridgeHandler.java:116) ~[?:?]
        at java.util.Optional.ifPresent(Optional.java:183) ~[?:?]
        at org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveBridgeHandler.requestVehicles(ConnectedDriveBridgeHandler.java:116) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
        at java.lang.Thread.run(Thread.java:829) [?:?]

Binding ConnectedDrive isn’t working anymore since Feb. Please check MyBMW binding