设备上下线的信息无法解析

版本emqx5.3,也已经在acl.conf文件中添加了{allow, all, subscribe, [“$SYS/brokers/+/clients/#”]}.但是在客户端(编写js代码模拟):// 当客户端连接到MQTT服务器时触发该回调函数
client.on(‘connect’, function () {
console.log(“connected”)
// 订阅特定的MQTT主题
client.subscribe(“$SYS/brokers/+/clients/+/connected”)
client.subscribe(“$SYS/brokers/+/clients/+/disconnected”)
});

// 当接收到MQTT消息时触发该回调函数
client.on(“message”, function (_, message) {
console.log(message.toString())
});运行后输出的只有connected,然后没有任何的信息,该怎么解决

这个现象看起来是没有订阅成功。你可以

  1. 直接用 MQTTx 工具订阅 # 看看主题对不对。
  2. 借助dashboard 的日志跟踪看看日志。

如图原因已查明,
但是如何在dashboard修改这些参数的配置

  1. ​ACL权限不足​
  • 错误码 ​​135​​ 明确表示当前客户端没有订阅 $SYS/ 系统主题的权限
  • EMQX 默认禁止普通客户端订阅系统主题(安全考虑)
  1. ​配置关键点​
  • 图片中客户端尝试订阅 $SYS/brokers/+/clients/+/connected
  • QoS 设置为 0(非持久化订阅)

​解决方案​

1. ​​修改EMQX ACL配置​

etc/plugins/emqx_auth_jwt.conf 中添加以下规则(或修改现有ACL):

auth.jwt.acl.rule.1 = {“permission”:“allow”,“username”:“jwt_user”,“topic”:“$SYS/#”}

auth.jwt.acl.rule.2 = {“permission”:“allow”,“clientid”:“IP1onic”,“topic”:“$SYS/#”}