本地和远程 MQTT 通信

物联网 MQTT 树莓派 传感器 ESP8266 无线的
2021-06-16 03:26:11

在我的项目中,我在本地网络中有一组传感器,它们应该与 Raspberry Pi 3 通信,然后与远程 MQTT 代理进行通信。

由于我将 ESP8266 用于传感器节点,我想我会让 esp 节点成为 MQTT 客户端,通过 pi 的互联网连接直接与代理进行通信。但是我需要 pi 来访问来自本地节点的传感器数据以及来自与其链接的传感器的数据。

所以我想要实现这种通信的最佳解决方案。我想向 Pi 添加一个代理,该代理将桥接到远程代理,并将 MQTT 消息发布到在 Raspberry 上运行的 Python 程序。

  1. 有没有办法避免在 Pi 上放置另一个经纪人?

  2. 有没有更好的解决方案来做到这一点?

  3. 代理会不会消耗太多内存?

知道我可能还需要流式传输相机帧数据。

2个回答

像 mosquitto 这样的代理将在 Pi 上愉快地运行并桥接到远程代理。

它将消耗多少资源完全取决于您通过它发送的流量以及您最终是否将大量保留的消息排队。在大多数情况下,它非常低(除非您计划通过 MQTT 流式传输视频)。

但是这个解决方案的好处是,如果到远程代理的链接出现故障,一切都将在本地继续工作。

像这样的分层代理是 MQTT 旨在处理的特定用例之一。

你可以设置像 Node-RED 这样的东西,它会从 ESP8266 传感器收集有效载荷,然后转身使用不同的主题发送相同的有效载荷。我在我的家庭自动化设置上自己做这个。我有一些关于一个主题的临时读数每三秒出现一次,但我需要将它们节流到每分钟一次,然后使用不同的主题发回。两组消息都使用相同的 Broker。

因此,在您的情况下,使用 Raspberry Pi 作为具有自己的一组主题的本地 MQTT 代理,让 Node-RED 捕获需要发送的数据包并使用一组不同的主题来发送它们。我有一个运行 Mosquitto 代理容器的 Docker 服务器、一个 Node-RED 容器以及其他两个使用 Node-RED 转换数据的容器。像冠军一样工作。