Mercedes Me Binding

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

@c0rtez
Sorry, but OH3 is too old. The code from 3.4 binding doesn’t match witht this OH version and also compiler version changed.

@akashkumar
proto-update is an advanced channel. It’s not necessary for this binding functionality but necessary to debug faults. Switch in your vehicle thing to channels and mark the Checkbos Show
advanced
(see picture below)

@MuellersBuero

  1. Yes, there’s still some reverse engineering to to do. In this stage the bidning logs far too much but I still need it for debugging
  2. Yes, polling interval is set to 15 minutes. I’ll add a config value in order to configure it

Ok, thanks. Anyway planned to startet a new installation based on OH4. Have the Pi on my desk for 2 month now I guess… Now I have a reason to finally do it.

Thanks @weymann. Somehow, my thing wasn’t showing it at all. I deleted it and added a new thing which indeed shows a lot of channels now, including the ‘Advanced’ option, with the proto channel.

I checked the proto channel. It seems the proto-channel data is there, but it doesn’t immediately get transferred to the other channels like odometer. Any reason? Would it help to paste the proto-channel output - it is a lot though.