JetLinks 物联网基础平台 MQTT Broker接入
本文介绍使用MQTT Broker代理方式将模拟设备接入物联网平台。MQTT Broker是MQTT消息代理,用于接收和转发来自客户端的消息。客户端需要连接到MQTT Broker才能与其他客户端进行通信。平台使用MQTT Broker接入时需要用户自行搭建或使用云上MQTT Broker服务。本文档使用EMQ X做示例说明。需要注意的是使用MQTT Broker接入的设备,很难对设备身份进行验证
本文介绍使用MQTT Broker代理方式将模拟设备接入物联网平台。MQTT Broker是MQTT消息代理,用于接收和转发来自客户端的消息。客户端需要连接到MQTT Broker才能与其他客户端进行通信。
🌍 说明
平台使用MQTT Broker接入时需要用户自行搭建或使用云上MQTT Broker服务。本文档使用EMQ X做示例说明。
需要注意的是使用MQTT Broker接入的设备,很难对设备身份进行验证。
应用场景
- 设备无法直接接入IOT平台的设备,如某些厂商生产的设备仅推送消息至厂商搭建MQTT Broker服务中心。
- 各设备之间需要订阅对方发送的topic(MQTT直连无法转发客户端发送的topic)。
前提条件
- 安装部署MQTT Broker,参考EMQX部署
- 下载MQTT X
- 下载JetLinks官方协议
操作步骤
创建产品
登录JetLinks平台,物联网->设备管理->产品->新增,填写产品基础信息。
配置设备接入方式
创建网络组件
登录JetLinks物联网平台,选择物联网->运维管理->网络组件,创建MQTT客户端网络组件。
本文网络组件公网地址使用本机IP地址,网络组件端口配置请根据自身实际情况修改,配置内容可参考网络组件的说明
MQTT客户端网络组件填写参数说明
参数 | 说明 |
远程地址 | emqx启动所在服务的IP地址,如果在本机启动则可填写127.0.0.1 |
远程端口 | emqx启动的服务端口 |
clientId | 连接到emqx的客户端Id,可任意配置 |
用户名 | 连接到emqx时需要的用户名 |
密码 | 连接到emqx时需要的密码 |
最大消息长度 | 单次收发消息的最大长度,单位:字节 |
💡 注意
集群模式下MQTT Broker接入应使用独立配置。更多说明参考网络组件集群模式的选择。
需要注意的是使用独立配置时,多个节点内的clientId参数仍不能相同,并且消息订阅时应配置订阅前缀,具体参考MQTT Broker共享订阅。
上传消息协议
选择物联网->运维管理->协议管理,跟随引导创建协议。当前文档使用官方协议,点击下载。
🌏 说明
上传协议失败请查看协议常见问题。
配置网关信息
物联网->运维管理->设备接入网关,创建MQTT Broker
类型的接入网关,并选择以上步骤创建的网络组件与协议。
🌏 说明
网关创建完成后,可在EMQ X
客户端中的Subscriptions
菜单中查看订阅列表是否存在网络组件配置的ClientID
的数据,若存在说明平台已创建客户端并成功连接至MQTT Broker。
物联网->设备管理->产品->设备接入,选择接入方式为MQTT Broker类型的设备接入网关,并启用产品。
配置物模型
- 点击上一步创建的产品查看详情,选择物模型Tab。
- 配置物模型属性
temperature
,如下图所示。
创建设备
- 物联网->设备管理->选择设备->新增,填写设备基础信息并确定保存。
- 启用设备。
使用MQTTX模拟设备接入
MQTT X 是一款开源的 MQTT 桌面测试客户端,支持Windows、Mac和Linux操作系统,可用于验证设备是否可与物联网平台正常连接,并通过Topic订阅和发布消息。本文以Windows系统下MQTTX为例,介绍设备使用MQTT协议模拟设备接入物联网平台。
配置MQTT X接入参数
- 下载并安装MQTT X软件。MQTT X软件安装和使用说明,请参见MQTT X。本文操作以MQTTX-Setup-1.9.1-x64.exe版本为例演示具体操作。由于第三方软件不定期更新,建议您以实际页面为准。
- 打开MQTT X选择新建连接。
- 配置连接参数,连接到EMQX服务。
💡 注意
MQTTX模拟器内的Client ID
不能与平台内MQTT Broker网络组件内clientId
设置一致,如果Broker发现已经存在一个相同Client ID的连接,它将终止当前的连接请求,使另一个连接上线(即两个客户端会互相顶替)。
连接参数说明
参数 | 说明 |
Name | 自定义名称 |
Client ID | 连接到EMQX的客户端Id。可自定义填写任意字符串 |
Host | 填写启动EMQX服务的IPv4地址 |
Port | EMQX启动的服务端口 |
设备上下线
🌍 说明
由于MQTT Broker接入是平台开启客户端订阅MQTT服务内的Topic处理消息来管理设备生命周期,以此方式接入时平台无法感知设备真实的连接状态。平台以收到DeviceMessage
(非DeviceOfflineMessage
)类型消息将设备状态修改为在线(默认永久在线),以收到DeviceOfflineMessage
消息将设备离线。
保持设备在线【推荐】
- 在自定义协议包解码出消息时,可通过在消息中添加头keepOnline来进行设置。
//设置让会话强制在线
message.addHeader(Headers.keepOnline, true);
//设置超时时间(可选,默认10分钟),如果超过这个时间没有收到任何消息则认为离线。
message.addHeader(Headers.keepOnlineTimeoutSeconds, 600);
💡 注意
如果服务重启,将不会保持在线状态!
- 上报任意报文时将保持在线消息头内容添加至正文内(该方案仅限于使用官方协议解析,其他结构报文体仍须自行封装消息头)
{
"timestamp":1601196762389, //毫秒时间戳
"messageId":"随机消息ID",
"deviceId":"设备ID",
"headers":{
"productId":"产品ID",
"deviceName":"子设备名称",
"keepOnlineTimeoutSeconds":600, //单位:秒
"keepOnline":true
}
}
订阅Broker服务系统Topic处理
🌍 说明
使用EMQ X搭建的MQTT Broker服务可以订阅其系统消息,参考EMQX客户端上下线文档,在协议包内订阅上下线相关的主题并将其封装为对应的DeviceOnlineMessage
/DeviceOfflineMessage
返回给平台。
非EMQX请查阅其官网是否提供设备上下线主题,自行在协议包内订阅即可。
需要注意的是EMQX默认拒绝所有连接订阅$SYS/
开头的主题。需要修改ACL(权限控制列表)文件,具体参考ACL文件
如下图:
设备属性上报
推送物模型属性消息到EMQ X
。实现平台设备上线与消息接收。
推送设备上报属性topic
格式和报文参考:JetLinks官方协议-上报设备属性。
Topic
:/{productId}/{deviceId}/properties/report
消息正文:
{
"deviceId":"设备ID",
"properties":{"temperature":36.8}
}
进入平台设备详情界面,查看属性列表,可以看到上报的温度属性值。
读取设备属性
- 在MQTTX中点击订阅添加按钮。
- 添加订阅设备读取属性topic:
/+/+/properties/read
。格式参考:JetLinks官方协议-读取设备属性
- 在设备详情页面点击获取最新属性值
- 在MQTTX中接收到平台下发的读取属性消息
读取设备属性回复
- 在MQTTX中回复读取设备最新属性的消息,注意回复的消息中messageId要与下发的messageId相同
Topic
: /{productId}/{deviceId}/properties/read/reply
{
"messageId":"与下行消息中的messageId相同",
"properties":{"temperature":40.0}, //key与设备模型中定义的属性id一致
"deviceId":"设备ID",
"success":true
}
- 在平台查看MQTTX模拟设备回复的温度属性
上一篇:HTTP协议设备接入 |
更多推荐
所有评论(0)