在我的项目中,我在局域网中有一组传感器,应该与Raspberry Pi 3,然后与远处的MQTT代理进行通信。

因为我将ESP8266用于传感器节点,所以我认为我将使esp节点MQTT客户端直接通过pi的Internet连接与代理进行通信。但是我需要pi才能访问来自本地节点的传感器数据以及来自与其链接的传感器的数据。

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


有办法避免在Pi上放置另一个代理吗?
有更好的解决方案吗?
代理会消耗太多内存吗?

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

#1 楼

像mosquitto这样的代理将在树莓派上快乐地运行并桥接到远程代理。

它将完全消耗多少资源取决于您通过它发送的流量以及是否最终对大量代理进行排队。保留的消息。在大多数情况下,它的成本很低(除非您计划通过MQTT进行流视频处理)。

但是此解决方案的好处是,如果到远程代理的链接断开,一切将继续在本地运行。

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

#2 楼

您可以设置诸如Node-RED之类的东西,以收集来自ESP8266传感器的有效负载,并使用不同的主题转过来并发送相同的有效负载。我自己在家庭自动化设置中执行此操作。我每隔三秒钟就会收到有关某个主题的临时阅读,但我需要将其每分钟降低一次,然后使用其他主题发送出去。两组消息都使用相同的代理。

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