feat:【IOT】新增 MQTT 协议支持及相关消息解析器,完善协议转换器功能

This commit is contained in:
haohao
2025-05-24 17:30:32 +08:00
parent fbb664026d
commit af37176d50
15 changed files with 558 additions and 109 deletions

View File

@@ -8,16 +8,15 @@ import lombok.Data;
import java.util.Map;
/**
* IoT Alink 消息模型
* IoT MQTT 消息模型
* <p>
* 基于阿里云 Alink 协议规范实现的标准消息格式
* @see <a href="https://help.aliyun.com/zh/iot/user-guide/alink-protocol-1">阿里云物联网 Alink 协议</a>
* 基于 MQTT 协议规范实现的标准消息格式兼容 Alink 协议
*
* @author haohao
*/
@Data
@Builder
public class IotAlinkMessage {
public class IotMqttMessage {
/**
* 消息 ID
@@ -69,11 +68,11 @@ public class IotAlinkMessage {
* @param requestId 请求 ID为空时自动生成
* @param serviceIdentifier 服务标识符
* @param params 服务参数
* @return Alink 消息对象
* @return MQTT 消息对象
*/
public static IotAlinkMessage createServiceInvokeMessage(String requestId, String serviceIdentifier,
public static IotMqttMessage createServiceInvokeMessage(String requestId, String serviceIdentifier,
Map<String, Object> params) {
return IotAlinkMessage.builder()
return IotMqttMessage.builder()
.id(requestId != null ? requestId : generateRequestId())
.method("thing.service." + serviceIdentifier)
.params(params)
@@ -85,10 +84,10 @@ public class IotAlinkMessage {
*
* @param requestId 请求 ID为空时自动生成
* @param properties 设备属性
* @return Alink 消息对象
* @return MQTT 消息对象
*/
public static IotAlinkMessage createPropertySetMessage(String requestId, Map<String, Object> properties) {
return IotAlinkMessage.builder()
public static IotMqttMessage createPropertySetMessage(String requestId, Map<String, Object> properties) {
return IotMqttMessage.builder()
.id(requestId != null ? requestId : generateRequestId())
.method("thing.service.property.set")
.params(properties)
@@ -100,13 +99,13 @@ public class IotAlinkMessage {
*
* @param requestId 请求 ID为空时自动生成
* @param identifiers 要获取的属性标识符列表
* @return Alink 消息对象
* @return MQTT 消息对象
*/
public static IotAlinkMessage createPropertyGetMessage(String requestId, String[] identifiers) {
public static IotMqttMessage createPropertyGetMessage(String requestId, String[] identifiers) {
JSONObject params = new JSONObject();
params.set("identifiers", identifiers);
return IotAlinkMessage.builder()
return IotMqttMessage.builder()
.id(requestId != null ? requestId : generateRequestId())
.method("thing.service.property.get")
.params(params)
@@ -118,10 +117,10 @@ public class IotAlinkMessage {
*
* @param requestId 请求 ID为空时自动生成
* @param configs 设备配置
* @return Alink 消息对象
* @return MQTT 消息对象
*/
public static IotAlinkMessage createConfigSetMessage(String requestId, Map<String, Object> configs) {
return IotAlinkMessage.builder()
public static IotMqttMessage createConfigSetMessage(String requestId, Map<String, Object> configs) {
return IotMqttMessage.builder()
.id(requestId != null ? requestId : generateRequestId())
.method("thing.service.config.set")
.params(configs)
@@ -133,10 +132,10 @@ public class IotAlinkMessage {
*
* @param requestId 请求 ID为空时自动生成
* @param otaInfo OTA 升级信息
* @return Alink 消息对象
* @return MQTT 消息对象
*/
public static IotAlinkMessage createOtaUpgradeMessage(String requestId, Map<String, Object> otaInfo) {
return IotAlinkMessage.builder()
public static IotMqttMessage createOtaUpgradeMessage(String requestId, Map<String, Object> otaInfo) {
return IotMqttMessage.builder()
.id(requestId != null ? requestId : generateRequestId())
.method("thing.service.ota.upgrade")
.params(otaInfo)

View File

@@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.iot.api.device.dto.control.downstream.*;
import cn.iocoder.yudao.module.iot.net.component.core.constants.IotDeviceTopicEnum;
import cn.iocoder.yudao.module.iot.net.component.core.downstream.IotDeviceDownstreamHandler;
import cn.iocoder.yudao.module.iot.net.component.core.message.IotAlinkMessage;
import cn.iocoder.yudao.module.iot.net.component.core.message.IotMqttMessage;
import cn.iocoder.yudao.module.iot.net.component.core.util.IotNetComponentCommonUtils;
import io.netty.handler.codec.mqtt.MqttQoS;
import io.vertx.core.buffer.Buffer;
@@ -56,7 +56,7 @@ public class IotDeviceDownstreamHandlerImpl implements IotDeviceDownstreamHandle
// 构建请求消息
String requestId = StrUtil.isNotEmpty(reqDTO.getRequestId()) ? reqDTO.getRequestId()
: IotNetComponentCommonUtils.generateRequestId();
IotAlinkMessage message = IotAlinkMessage.createServiceInvokeMessage(
IotMqttMessage message = IotMqttMessage.createServiceInvokeMessage(
requestId, reqDTO.getIdentifier(), reqDTO.getParams());
// 发送消息
@@ -93,7 +93,7 @@ public class IotDeviceDownstreamHandlerImpl implements IotDeviceDownstreamHandle
// 构建请求消息
String requestId = StrUtil.isNotEmpty(reqDTO.getRequestId()) ? reqDTO.getRequestId()
: IotNetComponentCommonUtils.generateRequestId();
IotAlinkMessage message = IotAlinkMessage.createPropertySetMessage(requestId, reqDTO.getProperties());
IotMqttMessage message = IotMqttMessage.createPropertySetMessage(requestId, reqDTO.getProperties());
// 发送消息
publishMessage(topic, message.toJsonObject());