[mercedesme] Message dumps (#18812)

* temporary file dumps enabled

Signed-off-by: Bernd Weymann <bernd.weymann@gmail.com>

* remove file writing

Signed-off-by: Bernd Weymann <bernd.weymann@gmail.com>

---------

Signed-off-by: Bernd Weymann <bernd.weymann@gmail.com>
This commit is contained in:
Bernd Weymann
2025-07-04 19:49:21 +02:00
committed by GitHub
parent f01be66871
commit ac1e7d0b13
3 changed files with 28 additions and 15 deletions
@@ -92,7 +92,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
private String poiEndpoint = "/v1/vehicle/%s/route";
Optional<AuthService> authService = Optional.empty();
final MBWebsocket ws;
final MBWebsocket mbWebsocket;
AccountConfiguration config = new AccountConfiguration();
@Nullable
ClientMessage message;
@@ -102,7 +102,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
super(bridge);
discoveryService = mmds;
httpClient = hc;
ws = new MBWebsocket(this, hc);
mbWebsocket = new MBWebsocket(this, hc);
localeProvider = lp;
storage = store.getStorage(Constants.BINDING_ID);
}
@@ -128,7 +128,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
public void refresh() {
if (!Constants.NOT_SET.equals(authService.get().getToken())) {
ws.run();
mbWebsocket.run();
} else {
// all failed - start manual authorization
String textKey = Constants.STATUS_TEXT_PREFIX + thing.getThingTypeUID().getId()
@@ -160,7 +160,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
schedule.cancel(true);
}
});
ws.interrupt();
mbWebsocket.dispose();
eventQueue.clear();
}
@@ -281,7 +281,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
AcknowledgeVEPUpdatesByVIN ack = AcknowledgeVEPUpdatesByVIN.newBuilder()
.setSequenceNumber(pm.getVepUpdates().getSequenceNumber()).build();
ClientMessage cm = ClientMessage.newBuilder().setAcknowledgeVepUpdatesByVin(ack).build();
ws.sendAcknowledgeMessage(cm);
mbWebsocket.sendAcknowledgeMessage(cm);
}
} else if (pm.hasAssignedVehicles()) {
for (int i = 0; i < pm.getAssignedVehicles().getVinsCount(); i++) {
@@ -290,14 +290,14 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
}
AcknowledgeAssignedVehicles ack = AcknowledgeAssignedVehicles.newBuilder().build();
ClientMessage cm = ClientMessage.newBuilder().setAcknowledgeAssignedVehicles(ack).build();
ws.sendAcknowledgeMessage(cm);
mbWebsocket.sendAcknowledgeMessage(cm);
} else if (pm.hasApptwinCommandStatusUpdatesByVin()) {
AppTwinCommandStatusUpdatesByVIN csubv = pm.getApptwinCommandStatusUpdatesByVin();
commandStatusUpdate(csubv.getUpdatesByVinMap());
AcknowledgeAppTwinCommandStatusUpdatesByVIN ack = AcknowledgeAppTwinCommandStatusUpdatesByVIN.newBuilder()
.setSequenceNumber(csubv.getSequenceNumber()).build();
ClientMessage cm = ClientMessage.newBuilder().setAcknowledgeApptwinCommandStatusUpdateByVin(ack).build();
ws.sendAcknowledgeMessage(cm);
mbWebsocket.sendAcknowledgeMessage(cm);
} else if (pm.hasApptwinPendingCommandRequest()) {
AppTwinPendingCommandsRequest pending = pm.getApptwinPendingCommandRequest();
if (!pending.getAllFields().isEmpty()) {
@@ -459,13 +459,13 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
public void sendCommand(@Nullable ClientMessage cm) {
if (cm != null) {
ws.setCommand(cm);
mbWebsocket.setCommand(cm);
}
scheduler.schedule(this::refresh, 2, TimeUnit.SECONDS);
}
public void keepAlive(boolean b) {
ws.keepAlive(b);
mbWebsocket.keepAlive(b);
}
@Override
@@ -14,7 +14,6 @@ package org.openhab.binding.mercedesme.internal.server;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.ByteBuffer;
import java.time.Instant;
@@ -102,7 +101,7 @@ public class MBWebsocket {
// avoid unit test requesting real web socket - simply return
return;
}
logger.trace("Websocket start {} max message size{}", websocketURL, client.getMaxBinaryMessageSize());
logger.trace("Websocket start {} max message size {}", websocketURL, client.getMaxBinaryMessageSize());
client.start();
client.connect(this, new URI(websocketURL), request);
while (keepAlive || Instant.now().isBefore(runTill)) {
@@ -175,6 +174,13 @@ public class MBWebsocket {
}
}
/**
* If disposed temp debug files are deleted
*/
public void dispose() {
interrupt();
}
public void keepAlive(boolean b) {
if (!keepAlive) {
if (b) {
@@ -196,14 +202,21 @@ public class MBWebsocket {
*/
@OnWebSocketMessage
public void onByteStream(InputStream is) {
public void onByteArray(byte[] blob, int offset, int length) {
try {
PushMessage pm = VehicleEvents.PushMessage.parseFrom(is);
byte[] message = blob;
if (offset != 0) {
int offsetLength = length - offset;
message = new byte[offsetLength];
System.arraycopy(blob, offset, message, 0, offsetLength);
}
PushMessage pm = VehicleEvents.PushMessage.parseFrom(message);
logger.trace("WebSocket - Message {}", pm.getMsgCase());
accountHandler.enqueueMessage(pm);
/**
* https://community.openhab.org/t/mercedes-me/136866/12
* Release Websocket thread as early as possible to avoid execeptions
* Release Websocket thread as early as possible to avoid exceptions
*
* 1. Websocket thread responsible for reading stream into PushMessage and enqueue for
* AccountHandler.
@@ -90,7 +90,7 @@ public class AccountHandlerMock extends AccountHandler {
}
public void connect() {
super.ws.onConnect(mock(Session.class));
super.mbWebsocket.onConnect(mock(Session.class));
}
@Override