Skip to content

设备接入(自定义协议) ​

这篇解决什么 ​

设备报文不是现成 JSON / MQTT 时,该改哪一层,不要去找一个不存在的 protocol: custom。读完能对上 IotProtocol、序列化和 TCP 拆包三个扩展点。

IotProtocolTypeEnum 只有 tcp / udp / websocket / http / mqtt / emqx / coap / modbus_tcp_client / modbus_tcp_server。IotProtocolManager.createProtocol 的 switch 没有 custom 分支。先看 设备接入(概述)。

示意图:先选已有传输协议,再换序列化或拆包。没有独立 custom 类型。

从哪改 ​

名称说明仓库路径
协议接口getId / getType / start / stopruoyi-office/yudao-module-iot/yudao-module-iot-gateway/.../protocol/IotProtocol.java
工厂按 yaml protocol 建实例IotProtocolManager.java
序列化json / binaryIotSerializeTypeEnum、IotMessageSerializer
拆包仅 TCP:delimiter / length_field / fixed_lengthIotTcpCodecTypeEnum
产品字段protocolType 必须是枚举字符串IotProductSaveReqVO

多数私有设备先走现成传输,再换报文格式。

  • 换序列化:yaml serialize 填 json 或 binary。HTTP / CoAP 强制 JSON。EMQX 可按产品配置解析。二进制帧是魔术字 + 版本 + 类型 + 长度 + method + body,见 IotBinarySerializer。
  • 换 TCP 拆包:tcp.codec.type 选三种之一。分隔符支持 \n / \r\n。长度字段要配 offset / length。
  • 加一种传输:实现 IotProtocol,枚举加一项,再在 IotProtocolManager 加 case。只改进 yaml 不会凭空出现新协议。

Modbus Server 的认证帧用自定义功能码(样例 65),那是 Modbus 扩展,不是新的 protocolType。见 设备接入(Modbus Server)。

字段 ​

名称说明仓库路径
protocol实例类型,必须能 IotProtocolTypeEnum.ofProtocolProperties
serialize可选;json / binaryIotSerializeTypeEnum
tcp.codec.typeTCP 拆包IotTcpConfig.CodecConfig

产品不要填 custom

管理端产品 protocolType 用 @InEnum(IotProtocolTypeEnum)。填 custom 校验失败,网关 of() 也会得到 null,实例直接跳过。

先改报文,再改传输

只是 JSON 字段不同,写 IotMessageSerializer 即可。只有端口、会话、认证模型都对不上时,才新写 IotProtocol。

java
switch (protocolType) {
    case HTTP: return createHttpProtocol(config);
    case TCP: return createTcpProtocol(config);
    // 没有 custom
    default:
        throw new IllegalArgumentException("暂不支持");
}

摘自 IotProtocolManager.createProtocol。未知类型会打日志并返回 null。

配置与操作 ​

没有 protocol: custom。IotProtocolManager 的 switch 只有现成传输类型。私有报文先选 tcp / udp 等,再改 serialize(json / binary)或 TCP codec。要加新传输:实现 IotProtocol、枚举加项、工厂加 case,只改 yaml 不会出现新协议。

HTTP / CoAP 强制 JSON。Modbus Server 的 FC65 仍是 modbus_tcp_server。开启见 IoT 功能设计。

IoT 首页

本系统截图:IoT 首页。协议实例在网关 yaml,没有「MQTT / HTTP」独立菜单。

相关篇 ​

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版