我正在为我的 IOT 设备使用 MQTT 代理,主要是 ESP8266(有些是 NodeMCU,有些是 Wemos mini,有些是 Sonoff),运行 Arduino 代码,一段时间(大约一年)。MQTT 代理在 RasppberryPi 零 W 上完美运行。
所有设备都使用我自己创建的库,包括 wifi 连接和 MQTT 以及为我的 IOT 设计的功能。
某些设备(20 个中的 2 个或 3 个) -在定义 30 秒后继续offline
使用keepAlive
MQTT 中的功能(PubSub
库是正确的)进入状态。第二个Availabiliy
状态转到offline
它更新回online
.
现在我试图找出它的原因有一段时间了,这就是我决定分享的原因:
- 如前所述,代码大多是通用的,我的 wifi+mqtt 对所有人都是一样的。
- 如果是由于 wifi 信号不好导致 MQTT 失去与服务器的连接,它应该
reset
在这种情况下使用看门狗计时器启动命令(重置 20 秒)。 - 我试图为那个特定的 IOT 更改 MQTT 代理,以确保它与代理无关……但问题仍然存在。
我的问题是:
- 如果
#define MQTT_KEEPALIVE 30
按照定义PubSub.h
- 每 30 秒只检查一次,或者在该时间间隔内检查超过 1 次? - 是否有另一种方法可以检查物联网设备与代理失去连接、进入
keepAlive
阶段并在发送 lastwill 后立即返回的原因或可能是什么原因?