MQTT Keep Alive является частью протокола MQTT для поддержания связи между брокером и клиентами. Подробнее об этом вы можете прочитать в документации .
. MQTT использует TCP / IP-соединение, которое обычно остается открытым клиентом, что позволяет отправлять и получать данные в любое время. Чтобы обнаружить сбой соединения, MQTT использует систему проверки связи, где он отправляет сообщения брокеру с заранее определенным интервалом, если по истечении определенного периода не было отправлено сообщений (KeepAlive).
Спецификация c для реализации Adafruit_MQTT , если вы опубликуете sh данные и уверены, что вы опубликуете sh данные в течение периода времени, установленного MQTT_CONN_KEEPALIVE, тогда вам подойдет go.
Если сервер / брокер не получил данные или PINGREQ от клиента в MQTT_CONN_KEEPALIVE + дополнительно 50% от MQTT_CONN_KEEPALIVE, брокер отключится от сети (время ожидания), и клиенту придется повторно установить sh соединение.
Таким образом, если клиент MQTT подписывается только на топи c без публикации, клиент должен затем посылать ping (PINGREQ) брокеру хотя бы один раз в каждом наборе MQTT_CONN_KEEPALIVE c. Однако вы не хотите постоянно пинговать сервер. Один из способов сделать это - отправлять mutt.ping () каждый MQTT_CONN_KEEPALIVE se c.
#define MQTT_KEEP_ALIVE 60
unsigned long previousTime;
loop() {
unsigned long currentTime = millis();
if((currentTime - previousTime) > MQTT_KEEP_ALIVE * 1000) {
previousTime = currentTime;
if(! mqtt.ping()) {
mqtt.disconnect();
}
}
// delay(10) or do something else
}