Skip to content

设备接入(MQTT 协议) ​

这篇解决什么 ​

内置 MQTT Broker 听哪个端口、CONNECT 怎么认证。读完能对上 protocol: mqtt 和 IotMqttProtocol,不要和外接 EMQX 那条搞混。

产品 protocolType 填 mqtt。先看 设备接入(概述)。外接 Broker 见 设备接入(EMQX 协议)。

示意图:网关自己起 Broker。CONNECT 先认证,再收 /sys/... 上行。

从哪改 ​

名称说明仓库路径
协议IotMqttProtocolruoyi-office/yudao-module-iot/yudao-module-iot-gateway/.../mqtt/IotMqttProtocol.java
认证CONNECTIotMqttAuthHandler
注册clientId 带 |authType=register|IotMqttRegisterHandler
样例id: mqtt-json,默认关,端口 1883application.yaml

yaml:protocol: mqtt,serialize: json,mqtt.max-message-size 默认 8192,connect-timeout-seconds 默认 60。enabled 改 true 才会 listen。

CONNECT 要带 clientId / username / password。格式见概述:productKey.deviceName、deviceName&productKey、HMAC。通过后登记连接并报上线。

Topic 必须落在 /sys/{productKey}/{deviceName}/ 下。方法名点号转斜杠,例如 thing.property.post → /sys/{pk}/{dn}/thing/property/post。回复带 _reply,网关会剥后缀,靠 code 认回复。

订阅只允许该设备前缀,或 /sys/{pk}/{dn}/#。发布不允许 + / #。

动态注册:clientId 含 |authType=register|,走注册 Handler,不走一机一密。Topic 常见 /sys/{pk}/{dn}/thing/auth/register。

下行:IotMqttDownstreamSubscriber 从消息总线取指令,再 publish 回设备。

字段 ​

名称说明仓库路径
port默认样例 1883ProtocolProperties
mqtt.max-message-size单帧上限IotMqttConfig
clientId / username / passwordCONNECT 三件IotDeviceAuthUtils

不要和 EMQX 抢 1883

mqtt 是网关内嵌 Broker。emqx 是连外部 Broker。两套都开、都写 1883,端口必撞,或者设备连错家。

注册连接和业务连接分开

注册用特殊 clientId 标记。拿到 deviceSecret 后,再用正常三件套重连。混在一个 CONNECT 里会走错 Handler。

示意图:按本仓库实现画的时序。

配置与操作 ​

yaml 开 id: mqtt-json,protocol: mqtt,enabled: true,默认口 1883。这是网关内嵌 Vert.x Broker,不是 EMQX。CONNECT 三件套:clientId={productKey}.{deviceName}、username={deviceName}&{productKey}、HMAC password。Topic 必须在 /sys/{pk}/{dn}/ 下。

不要和 emqx 抢 1883。注册用 clientId 含 |authType=register|,拿到 deviceSecret 后再用正常三件套重连。开启见 IoT 功能设计。

IoT 首页

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

相关篇 ​

联系我们

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

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版