beremiz

f83075f09e70
Parents bc39a871d356
Children
MQTT: added growing reconnect delay when connecting to broker fails.
--- a/mqtt/mqtt_template.c Thu Jun 26 16:48:59 2025 +0200
+++ b/mqtt/mqtt_template.c Thu Sep 25 14:26:24 2025 +0200
@@ -6,6 +6,7 @@
#include <string.h>
#include <stdio.h>
#include <errno.h>
+#include <math.h>
#include "frozen.h"
@@ -27,6 +28,8 @@
#define LogError(...) _Log(LOG_CRITICAL, __VA_ARGS__);
#define LogWarning(...) _Log(LOG_WARNING, __VA_ARGS__);
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+
// Selected debug level for paho stack
// can be:
// MQTTCLIENT_TRACE_PROTOCOL, MQTTCLIENT_TRACE_MAXIMUM, MQTTCLIENT_TRACE_ERROR
@@ -472,6 +475,12 @@
static void *__MQTT_thread_proc(void *_unused) {{
int rc = 0;
+ int attempt = 0;
+ /* TODO make parameters externally configurable */
+ int initialDelay = 5; /* seconds */
+ int maxDelay = 60;
+ int retry_delay = 0;
+ float factor = 1.5;
while((rc = pthread_mutex_lock(&MQTT_thread_wakeup_mutex)) == 0 && !MQTT_stop_thread){{
int do_publish;
@@ -480,14 +489,16 @@
if(MQTT_is_disconnected)
{{
- /* TODO growing retry delay */
- /* TODO max retry delay as config parameter */
- sleep(5);
+ /* Exponentially grow retry delay */
+ retry_delay = MIN(initialDelay * pow(factor, attempt), maxDelay);
+ sleep(retry_delay);
rc = _connect_mqtt();
if (rc == MQTTCLIENT_SUCCESS) {{
+ attempt = 0;
LogInfo("MQTT Reconnected\n");
}} else {{
- LogError("MQTT Reconnect Failed, return code %d\n", rc);
+ attempt++;
+ LogError("MQTT Reconnecting failed, retrying in %d seconds, return code %d\n", retry_delay, rc);
}}
}}
if(!MQTT_is_disconnected && MQTT_any_pub_var_changed)