MQTT
适用于标准的MQTT协议
1.MQTT基础连接配置
- 启用与否:是否启用MQTT端
- Client Id:mqtt网络的中的唯一ID
- IP地址:MQTT服务器的地址
- Port:MQTT服务器的端口,需区分是否是SSL/TLS的端口
- Keep Alive:MQTT客户端的保活周期,推荐值60,单位秒
- 协议版本:需要与MQTT网络中运行的协议版本一致
- Clean Session:会话是否保留设置,在客户端断线后,服务器是否会在连接列表中清除客户端的名称
- 轮询周期:实时数据推送的轮询时间
- 定时发送:多长时间发送一次全部数据,无论值是否发生变更
- 用户名:连接MQTT服务器的用户名
- 密码:连接MQTT服务器的密码
- 验证方式:是否启用SSL/TLS验证,请与MQTT服务器配置文件中一致
- TLS协议版本:请与MQTT服务器配置文件中一致
- CA File:CA文件,请选择并上传
- Cert File:Cert文件,请选择并上传
- Key File:Key文件,请选择并上传
秘钥生成步骤,仅供参考(pem格式):
1.直接生成适配 emqx 平台,pem证书的步骤
1.openssl genrsa -out ca.key 2048 -days 3650 #生成ca.key
2.openssl req -x509 -new -nodes -key ca.key -sha256 -out ca.pem -days 3650 #生成ca.pem
2.服务器端相关证书
1.openssl genrsa -out server.key 2048 -days 3650 #生成服务器端的私钥
2.openssl req -new -key ./server.key -out server.csr -days 3650 #生成服务器端的csr文件
3.openssl x509 -req -in ./server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem -sha256 -days 3650 #生成服务器端的pem
3.客户端的相关证书
1.openssl genrsa -out client.key 2048 -days 3650 #生成客户端的私钥
2.openssl req -new -key ./client.key -out client.csr -days 3650 #生成客户端的csr文件
3.openssl x509 -req -in ./client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client.pem -sha256 -days 3650 #生成客户端的pem
4.一些命名上的修改,需要与EMQ配置文件进行统一
将 server.pem key.pem
将 server.crt cert.pem
将 ca.pem cacert.pem
将 client.pem client-cert.pem
将 client.key client-key.pem
- 遗嘱主题:MQTT客户端断开时,接受遗嘱信息的主题
- Qos:遗嘱消息的消息级别
- Retained:是否在该主题中,保留最此消息
- 遗嘱内容:具体发送到主题中的消息,标识着网关已离线
2.MQTT实时数据主题
- 启用与否:是否启用该主题下的数据推送
主题:接受MQTT实时数据主题
- 请勿将同一个标签配置在多个主题中,可能会造成占用超过限制,影响网关的正常运行
变值更新:仅在数据值发生变化时,才进行上传操作
- 推荐此选项,降低网络传输开销
数据压缩:推荐开启此选项,一次性上传多条实时数据
- 压缩数量:一次性至多上传多少条实时数据
- 此主题的reatined:是否在主题中保留该主题下的最后一条数据
实时主题未开启压缩数据格式:
{
"cli_id": "gw1",
"id": "Group1_Tag4",
"vtype": "num",
"rval": "65523.000000",
"rstatus": "ok",
"rinfo": "读取成功",
"rtime": 1740720444
}
实时主题开启压缩数据格式:
[
{
"cli_id": "gw1",
"id": "Group1_Tag1",
"vtype": "num",
"rval": "4.000000",
"rstatus": "ok",
"rinfo": "读取成功",
"rtime": 1740720587
}
]
3.MQTT连接主题
如果启用连接主题,那么在网关首次连接到MQTT网络时,会向连接主题中,递送一次指定的信息内容
- 连接主题(上传):接收网关上线时,首次推送的"连续信息"
- Qos:消息级别
- retained:是否在主题中,保留最后一条接收的消息
- 连接推送信息:向连接主题中推送的具体信息内容,至多4096个英文字符,数据格式以用户设定的为准
4.MQTT离线主题
当网关与MQTT网络通讯断开30秒后,在此期间内需要上传的实时数据,会存储在本地,等待下次通讯恢复时再重新上传
- 离线数据的主题(上传):接收网关上传离线数据的主题
- 一次性发送消息的个数:推荐值500
- 不建议过小的设置值,离线数据如果无法在短期内上传完毕,期间网络连接又断开,重复上传离线数据
- Qos:消息级别
- retained:是否在主题中,保留最后一条接收的消息
- 发送消息的间隔:除非要做额外做处理,否则建议设置0
离线主题数据上传格式:
[
{
"timev": 1740721195,
"message": {
"cli_id": "gw1",
"id": "Group1_Tag1",
"vtype": "num",
"rval": "4.000000",
"rstatus": "ok",
"rinfo": "读取成功",
"rtime": 1740721195
}
}
]
5.MQTT控制主题
- 控制主题(接收):接收MQTT网络中发布的控制信息
- 控制主题(回复):接收网关执行返回信息的主题
执行记录:经过控制接口成功执行的操作,是否记录在本地
- 在控制频繁的场景下,不推荐开启此选项
Qos:消息级别
- retained:是否在主题中,保留最后一条接收的消息
下发数据格式:
[
{
"Cli_ID": "gw1",
"Id": "Group1_Tag1",
"Setv": "1234"
}
]
回复数据格式:
[
{
"cli_id": "gw1",
"id": "Group1_Tag1",
"status": "ok",
"w_time": 1740713859,
"err": ""
}
]
6.MQTT事件主题
- 事件上传的主题:用户需要预先在告警端配置告警点的检查,仅在有告警时,会将告警信息,以指定格式推送至此主题
- 周期:检测是否有告警数据的周期,单位秒,推荐值:30
- Qos:消息级别
- retained:是否在主题中,保留最后一条接收的消息
事件主题上传数据格式:(包含告警和恢复信息)
[
{
"client": "gw1",
"id": "Group1_Tag2",
"type": "alarm",
"state": "max_limit",
"level": "1",
"limitv": "11.000000",
"val": "41.000000",
"time_v": 1740720435,
"time_s": "2025/02/28 13:27:16",
"user_data": "",
"rinfo": ""
},{
"client": "gw1",
"id": "Group1_Tag3",
"type": "recovery",
"state": "max_limit",
"level": "1",
"limitv": "111.000000",
"val": "110.000000",
"time_v": 1740722000,
"time_s": "2025/02/28 13:53:21",
"user_data": "",
"rinfo": ""
}
]
7.MQTT日志主题
- 日志上传的主题:是否启用将其他端的"执行日志"推送此主题中
- Qos:消息级别
- retained:是否在主题中,保留最后一条接收的消息
日志主题上传数据格式
{
"cli_id": "gw1",
"log": {
"src": "general_mqtt",
"id": "Group1_Tag1",
"setv": "3",
"exe_status": "ok",
"reason": "",
"time": 1740720195,
"time_str": "2025/02/28 13:23:15"
}
}
8.MQTT重启主题
- 重启订阅:网关侦听MQTT网络中,重新信息的主题
- 重启响应:接收网关在重启之前,向MQTT网络回复的信息
- Qos:消息级别
- retained:是否在主题中,保留最后一条接收的消息
重启主题下发数据格式:
{
"cli_id": "gw1",
"type": "reboot"
}
重启主题回复数据格式:
{
"cli_id": "gw1",
"reply": "ok"
}