diff --git a/src/main/java/org/jetlinks/protocol/official/JetLinksMqttDeviceMessageCodec.java b/src/main/java/org/jetlinks/protocol/official/JetLinksMqttDeviceMessageCodec.java index 7441d52..b6594f0 100644 --- a/src/main/java/org/jetlinks/protocol/official/JetLinksMqttDeviceMessageCodec.java +++ b/src/main/java/org/jetlinks/protocol/official/JetLinksMqttDeviceMessageCodec.java @@ -85,9 +85,12 @@ public class JetLinksMqttDeviceMessageCodec implements DeviceMessageCodec { if (convertResult == null) { return Mono.empty(); } - return context - .getDevice() - .getConfig(DeviceConfigKey.productId) + return Mono + .justOrEmpty(deviceMessage.getHeader("productId").map(String::valueOf)) + .switchIfEmpty(context.getDevice(deviceMessage.getDeviceId()) + .flatMap(device -> device + .getConfig(DeviceConfigKey.productId)) + ) .defaultIfEmpty("null") .map(productId -> SimpleMqttMessage .builder()