列出订阅了 Mosquitto 服务器中某个主题的客户端

物联网 MQTT 蚊子 发布订阅者
2021-06-26 02:16:16

所以这是一般问题,但我会在这里提供场景。

我正在运行 Mosquitto 服务器以在 esp 中继模块(来自 Itead 的 Sonoff)和Home Assistant之间提供 mqtt 通信大多数时候,它工作得很好。每个模块都有自己的主题,并且 HASS 中的“轻量级”配置与模块一样多,因此可以通过单独的切换按钮从 Web 前端控制它们。

但是,我经历过不一致的状态情况,即灯实际上是亮着的,而 HASS 中的切换显示为关闭(以及相反的情况)。通过检查日志,我发现 Mosquitto 没有将某些消息发布到 HASS(应该订阅所有模块状态主题)。更具体地,给定的4个模块和其对应的状态的主题(state/sonoff_xx/POWER),HASS似乎仅订阅到模块2和4周的主题,而不是1和3以下是模块4的预期行为,同样可以被验证为其他工作模块,但其他两个模块缺少发布到 HASS。

Jun 15 19:22:46 nas mosquitto[9486]: Received PUBLISH from sonoff4 (d0, q0, r1, m0, 'stat/sonoff4/POWER', ... (2 bytes))
Jun 15 19:22:46 nas mosquitto[9486]: Sending PUBLISH to home-assistant (d0, q0, r0, m0, 'stat/sonoff4/POWER', ... (2 bytes))

这不是关于 HASS 和中继模块的问题,而是关于如何深入了解 MQTT 服务器的状态,该服务器应该有某些客户端订阅,但通过查看日志,它没有。

2个回答

不,您无法获得哪些客户订阅了 mosquitto 内容的列表。

这里最有可能的是 HASS 没有订阅,而不是 mosquitto 没有发布到订阅的客户端。

您可以让 mosquitto 记录每次订阅请求的产生,然后您可以使用它来构建列表。

log_type subscribe, unsubscribe

这将记录所有哪些客户端订阅/取消订阅哪些主题。

您可以为所有人启用 mosquitto 日志并订阅日志,您会发现可以为每个客户端操作(例如连接、断开连接、订阅和发布甚至错误)解码的消息。

你会设置

log_dest topic
log_type all

在 mosquitto.conf 然后你会订阅

$SYS/broker/log/#