【问题标题】:Is possible to publish to MQTT clients during their sleep?可以在睡眠期间向 MQTT 客户端发布吗?
【发布时间】:2021-04-15 13:13:53
【问题描述】:

我将实施某种家庭自动化系统(作为我的学士论文)。我看过 MQTT 协议,我有两个问题。

我看过这个教程:
https://www.youtube.com/watch?v=X04yaaydjFo&list=PLeJ_Vi9u6KisKTSNeRRfqsASNZdHSbo8E&index=13
这里有材料(代码等):
https://randomnerdtutorials.com/raspberry-pi-publishing-mqtt-messages-to-esp8266/

我的第一个问题是:
逻辑是如何在代理或客户端中管理获取的数据/消息(由于某些主题订阅)?从上面的教程看来,如何处理消息的逻辑在客户端中。它应该一直在那里吗?或者是否有可能在经纪人中拥有它?对不起,如果这个问题太“抽象”,我刚开始编程,所以我没有具体的例子。基本上我想要的是尽可能在客户端中拥有“轻量级”程序(因为代理将拥有大量内存和计算能力,而客户端在两者中都非常有限)。

我的第二个问题是:
是否可以让 ESP8266(或任何客户端)进入睡眠状态并唤醒它,比如说每 5 分钟?当然,如果该客户端只发布(并且从不订阅)主题,这应该不是问题。但是当我有客户端时,它可以读取一些传感器,它将在那 5 分钟的周期内发送给代理,并且还可以控制它的一些输出?有没有办法做到这一点?或者如果客户端不可用(如果有一些数据要发布到它并且它当前正在休眠),那么消息就会被抛出?我的想法是,是否有办法在客户醒来后询问经纪人在客户睡眠期间是否有任何已发布的消息?

感谢您提供的所有信息! :)

【问题讨论】:

  • Google MQTT 如何处理 QOS,这应该可以解释您的大部分问题
  • 我明白了,当我将 QOS 设置为“至少一次”或“恰好一次”时,代理会尝试发送它,直到客户确认它已收到,对吧?您是否知道(或可能获得有关信息)经纪人尝试重新发送消息的频率?它会立即重新发送全职吗?还是在某些常规周期中(例如 1 秒)?

标签: raspberry-pi mqtt publish-subscribe esp8266 mosquitto


【解决方案1】:

1.回答

消息处理逻辑完全由客户端实现。使用 MQTT,没有“流”处理,例如,阿帕奇卡夫卡。但是,您当然可以让中间(非物联网)客户端订阅原始主题,准备修改消息并将其发布到新主题 - 物联网设备随后将订阅的主题.

2。回答

您可以告诉经纪人retain a message。但是,每个主题最多会保留 1 条消息。

附:对于未来,请在 SO 上坚持 1-question-1-post。

【讨论】:

  • 我用我的雪莉灯泡测试了我在评论中的建议以及马塞尔在他的回答中所说的内容。使用 MQTT 我将它们设置为 50% 的亮度。然后我把它们关掉,当它们断电时,我使用我的 Node Red 实例设置 100% 亮度,QOS=1 并且保留=true。当我打开它们时,它们从之前的 60% 亮度值开始,几秒钟后变为 100%。
猜你喜欢
  • 1970-01-01
  • 2016-01-17
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2017-03-17
相关资源
最近更新 更多