Mercedes Me Binding

Hi Bernard,

I set this up today. The MercedesMe website appears to no longer accept IP addresses as part of the callback URL, or perhaps it was trying to validate the address in some way; in either case, I had to manually update this to servername.local and use that in the MercedesMe project setup. When I did this, I also had to stop and start the Account Thing as the JSP server didn’t recognise the URL until I did this.

(edit: whoops, I knew there was something else to report) When I got the registration working successfully, it invoked the callback API and dumped a bunch of JSON on my screen. I couldn’t tell if this was success or failure without waiting for it to update the data.)

Cheers,
Waider.

Hi folks,

It seems BYOCAR will be discontinued end of August 2023. This will impact also the binding right?

Andrea

1 Like

I got my mercedes this week and just wanted to install the binding which I found some weeks ago… now I cant find it anymore on the binding installer page. Is this the reason?

During my vacation I saw the message from Mercedes will discontinue their “free” API access as @ariela stated. I’m very surprised especially the short notice of shutting this service down - blog post from Aug 8th - shutdown starts Aug 28th so only 3 weeks in between.

So this binding will not work anymore in a few days. From the post it doesn’t sound the replacement will be available soom :frowning:

So it is closed down now…
Anybody familar with Python, there is Homeassistant Plugin based on using the Rest APIs as Mercedes App. So you Need to have the App installed and Running.
Can be found here: GitHub - ReneNulschDE/mbapi2020: Custom Component to integrate MercedesME devices into Home-Assistant

I would ne interested to get at least the battery state(SOC) out of it…

Don’t worry - new MercedesMe binding is on its way!
There will be an adapted binding based on the Smartphone App API. Prototype is running on my side and as soon as its stable I’ll provide a Marketplace solution.

13 Likes

That would be great. Thanks!

Will it be also compatible with OpenHAB 3.X? :slight_smile:

Would also appreciate a version for OH 3.4.X :slightly_smiling_face:

@ariela @c0rtez @hab_pi @akashkumar @apfelklaus @dk8pn and all other Mercedes Drivers.Today I published today the alpha version of the MercedesMe binding.

Switching from BYOCAR to SDK API means breaking changes in all areas

  • different Bridge / Thing configuration
  • different authorization procedure
  • different data provided

This means your current setup will not work for this reworked binding. You need to adapt this.
The Marketplace page for MercedesMe binding is updated with new readme and jars for org.openhab.binding.mercedesme-3.4.0-SNAPSHOT.jar
org.openhab.binding.mercedesme-4.1.0-SNAPSHOT.jar

1 Like

Thanks a lot. Am going to test it out. Quick question: do I need the jar files for the new binding or can I simply add a new binding through add on? If I use the jar file, should I first remove the old Mercedes me binding, in case it conflicts with the name?

Both possibilities are valid. I checked Marketplace on my current running OH3.4 version. The new version is available here. Just ensure to uninstall official version distributed version.

So

  1. Unisntall current running version
  2. Go to Settings - Bindings and install MercedesMe from Community Marketplace

1 Like

Wow that was super fast. Great. Thanks a lot @weymann

But I get an error trying to do the authentifiacation.
Doing the second step (entering and sending the PIN i received via Mail) I get this error.

Caused by:

java.lang.NoSuchMethodError: ‘void org.openhab.core.auth.client.oauth2.AccessTokenResponse.setCreatedOn(java.time.Instant)’
at org.openhab.binding.mercedesme.internal.server.AuthService.saveTokenResponse(AuthService.java:246)
at org.openhab.binding.mercedesme.internal.server.AuthService.requestToken(AuthService.java:165)
at org.openhab.binding.mercedesme.internal.server.AuthServlet.doGet(AuthServlet.java:96)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:550)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:190)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.base/java.lang.Thread.run(Thread.java:829)

Thanks a lot for the fast reply. It works!! It was extremely fast to get the pin via email, and the moment I added it, it just worked. For me, the mileage and the Soc are the most important. Mileage comes now, and I suppose SoC will come when it starts charging tomorrow again. Thanks a lot once again!

thanks,
I could start that binding and got both my cars (1 BEV, 1PHEV) into the
binding as things.
However I permanently see warnings in the log: (the 192.168.x.x has been
manually anonymized by me)

2023-09-10 19:13:14.239 [WARN ] [rcedesme.internal.server.MBWebsocket] -
IOEXception Protocol message tag had invalid wire type.

2023-09-10 19:13:14.244 [WARN ] [et.common.message.MessageInputStream] -
MessageInputStream closed without fully consuming content
WebSocketSession[websocket=JettyAnnotatedEventDriver[org.openhab.binding.mercedesme.internal.server.MBWebsocket@14f3366],behavior=CLIENT,connection=WebSocketClientConnection@1b266c::DecryptedEndPoint@694270{l=/192.168.x.x:47020,r=websocket.emea-prod.mobilesdk.mercedes-benz.com/13.94.252.146:443,OPEN,fill=-,flush=-,to=23/840000},remote=WebSocketRemoteEndpoint@1413821[batching=true],incoming=JettyAnnotatedEventDriver[org.openhab.binding.mercedesme.internal.server.MBWebsocket@14f3366],outgoing=ExtensionStack[queueSize=0,extensions=[],incoming=org.eclipse.jetty.websocket.common.WebSocketSession,outgoing=org.eclipse.jetty.websocket.client.io.WebSocketClientConnection]]

2023-09-10 19:13:18.089 [INFO ] [rcedesme.internal.server.MBWebsocket] -
Message [proto.PushMessage.assigned_vehicles]

2023-09-10 19:13:18.101 [INFO ] [rcedesme.internal.server.MBWebsocket] -
Message [proto.PushMessage.apptwin_pending_command_request]

2023-09-10 19:13:18.245 [WARN ] [rcedesme.internal.server.MBWebsocket] -
IOEXception Protocol message had invalid UTF-8.

2023-09-10 19:13:18.257 [WARN ] [et.common.message.MessageInputStream] -
MessageInputStream closed without fully consuming content
WebSocketSession[websocket=JettyAnnotatedEventDriver[org.openhab.binding.mercedesme.internal.server.MBWebsocket@14f3366],behavior=CLIENT,connection=WebSocketClientConnection@1b266c::DecryptedEndPoint@694270{l=/192.168.x.x:47020,r=websocket.emea-prod.mobilesdk.mercedes-benz.com/13.94.252.146:443,OPEN,fill=-,flush=-,to=32/840000},remote=WebSocketRemoteEndpoint@1413821[batching=true],incoming=JettyAnnotatedEventDriver[org.openhab.binding.mercedesme.internal.server.MBWebsocket@14f3366],outgoing=ExtensionStack[queueSize=0,extensions=[],incoming=org.eclipse.jetty.websocket.common.WebSocketSession,outgoing=org.eclipse.jetty.websocket.client.io.WebSocketClientConnection]

@c0rtez
This is really a basic error. Which openHAB version do you use?

@akashkumar
All values shall be updated after initialization.
Any errors in the log? Is proto-update channel deliverung some data?

@connie
Besides these errors do you get the values for your vehicle?
I’ve such messages too due to the fact I didn’t reverse engineer all messages so far.

@weymann

I’m running openHAB 3.3.0 Release Build

Tried again, to send the complete Errortext that was shown:

HTTP ERROR 500 java.lang.NoSuchMethodError: ‘void org.openhab.core.auth.client.oauth2.AccessTokenResponse.setCreatedOn(java.time.Instant)’

URI: /mb-auth
STATUS: 500
MESSAGE: java.lang.NoSuchMethodError: ‘void org.openhab.core.auth.client.oauth2.AccessTokenResponse.setCreatedOn(java.time.Instant)’
SERVLET: org.openhab.binding.mercedesme.internal.server.AuthServlet-234480
CAUSED BY: java.lang.NoSuchMethodError: ‘void org.openhab.core.auth.client.oauth2.AccessTokenResponse.setCreatedOn(java.time.Instant)’

Caused by:

java.lang.NoSuchMethodError: ‘void org.openhab.core.auth.client.oauth2.AccessTokenResponse.setCreatedOn(java.time.Instant)’ at org.openhab.binding.mercedesme.internal.server.AuthService.saveTokenResponse(AuthService.java:246) at org.openhab.binding.mercedesme.internal.server.AuthService.requestToken(AuthService.java:165) at org.openhab.binding.mercedesme.internal.server.AuthServlet.doGet(AuthServlet.java:96) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:550) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:190) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) at java.base/java.lang.Thread.run(Thread.java:829)

Thanks. Yes, the data came soon after, at least it was there when I checked in the morning, even before the charging had started.

What is the ‘proto-update’ channel?

I did try to ‘disable’ and ‘enable’ the thing and I got this warning in the log:

2023-09-11 13:24:14.791 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing ‘mercedesme:bev:eqv:eqv-300’: {thing/channel=Type description mercedesme:last-range-update-channel for mercedesme:bev:eqv:eqv-300:range#last-update not found, although we checked the presence before.}

I couldn’t see the proto-update channel, though. I only see the following channels. I am running Openhab 4.0.3. Is this what you expect?

yes, I can confirm that I get data from both vehicles

@weymann Thanks for this really fast update!

I have installed your binding in a newly installed OH 4.0.3 instant and it works. I have added some values (not all) and I get updates. But I found also some errors/warnings in my openhab logfile:

  1. There seams to be an error/warning retrieving data:
2023-09-12 14:10:44.597 [INFO ] [esme.internal.handler.VehicleHandler] - Received command 100 for mercedesme:hybrid:MercedesMe:A250e:range#soc
2023-09-12 14:10:56.420 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.assigned_vehicles]
2023-09-12 14:10:56.428 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.apptwin_pending_command_request]
2023-09-12 14:10:56.533 [WARN ] [rcedesme.internal.server.MBWebsocket] - IOEXception Protocol message had invalid UTF-8.
  1. It looks like the binding loses the connection after a certain time. It then takes 15 minutes before data comes again.
2023-09-12 13:54:44.607 [INFO ] [esme.internal.handler.VehicleHandler] - Received command 100 for mercedesme:hybrid:MercedesMe:A250e:range#soc
2023-09-12 13:54:56.485 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.assigned_vehicles]
2023-09-12 13:54:56.487 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.apptwin_pending_command_request]
2023-09-12 13:54:56.545 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.vepUpdates]
2023-09-12 13:54:56.546 [INFO ] [esme.internal.handler.VehicleHandler] - CHARGEPROGRM found 0 entries
2023-09-12 13:54:56.554 [INFO ] [esme.internal.handler.VehicleHandler] - Received command 100 for mercedesme:hybrid:MercedesMe:A250e:range#soc
2023-09-12 13:55:04.599 [INFO ] [rcedesme.internal.server.MBWebsocket] - Websocket stop
2023-09-12 13:55:04.600 [INFO ] [rcedesme.internal.server.MBWebsocket] - Disonnected from server. Status 1006 Reason Disconnected
2023-09-12 14:10:04.604 [INFO ] [rcedesme.internal.server.MBWebsocket] - Websocket start
2023-09-12 14:10:04.726 [INFO ] [rcedesme.internal.server.MBWebsocket] - Connected to server
2023-09-12 14:10:04.727 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.debugMessage]
2023-09-12 14:10:04.729 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.debugMessage]
2023-09-12 14:10:04.751 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.assigned_vehicles]
2023-09-12 14:10:04.756 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.apptwin_pending_command_request]
2023-09-12 14:10:04.855 [INFO ] [rcedesme.internal.server.MBWebsocket] - Message [proto.PushMessage.vepUpdates]
2023-09-12 14:10:04.857 [INFO ] [esme.internal.handler.VehicleHandler] - CHARGEPROGRM found 0 entries
2023-09-12 14:10:04.877 [INFO ] [esme.internal.handler.VehicleHandler] - Received command 100 for mercedesme:hybrid:MercedesMe:A250e:range#soc