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

文章目录

    基于 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式