开源版 EMQX 接口查询 MQTT 设备在线状态

更新日期: 2025-03-19 阅读次数: 175 字数: 437 分类: 物联网

基于 EMQX MQTT 开发了一个设备管理,及日志存储的后台系统。

在设备管理页,想看到设备是否在线的状态显示。然后发现原来 MQTT 协议是不支持这个查询的,而是需要通过 EMQX 开放的接口中进行查询。

这里记录一下

显示效果

接口认证

参考 EMQX 官方文档,里面有多种开发语言的实现,例如这个是 go 的。

https://docs.emqx.com/zh/emqx/latest/admin/api.html#go

  • 调用接口时,只需要把 url 替换为对应的接口即可。
  • api key 和 secret 需要登录 EMQX 服务自带的 web 后台,系统设置-API 密钥,去生成一个就行了。还能设置有效期。

认证方式支持 basic auth 和 jwt token,为了省事,我直接用了 basic auth。

批量查询在线状态

https://docs.emqx.com/en/emqx/v5.8/admin/api-docs.html#tag/Clients/paths/~1clients/get

通过 /api/v5/clients 接口可以一次查询多个设备的在线状态。很适合在列表页批量查询。否则逐个查询太浪费时间。多个设备 id 的查询参数

clientid=c1&clientid=c2

信息字段中,还能查询到 ip_address IP 地址, connected_at 建立连接的时间。

查询单个设备的在线状态

https://docs.emqx.com/en/emqx/v5.8/admin/api-docs.html#tag/Clients/paths/~1clients~1%7Bclientid%7D/get

即通过 /api/v5/clients/{clientid} 进行查询。

相对于批量查询,这个接口还能查询到断开连接的时间 disconnected_at (connected 是 false 时才有)。

前端显示

在线状态在列表中固定在线状态这列,更直观一些。

后续

下面就是测试一下对于 QoS 为 0 的设备,在离线状态下是否可以远程下发 QoS 为 1 的锁机指令。如果不支持,就只能自己通过队列缓存实现了 😅

微信关注我哦 👍

大象工具微信公众号

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式