Skip to content
This repository has been archived by the owner on Apr 28, 2022. It is now read-only.

Commit

Permalink
Limit number of MQTT connection tries
Browse files Browse the repository at this point in the history
as proposed by @nimbl at #22
  • Loading branch information
toblum committed Aug 19, 2017
1 parent ab9253a commit 91571ea
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 7 deletions.
10 changes: 6 additions & 4 deletions Arduino/McLighting/McLighting.ino
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ void setup() {
String(String(HOSTNAME) + "/in").toCharArray(mqtt_intopic, strlen(HOSTNAME) + 4);
String(String(HOSTNAME) + "/out").toCharArray(mqtt_outtopic, strlen(HOSTNAME) + 5);

DBG_OUTPUT_PORT.printf("Connect %s %d\n", mqtt_host, String(mqtt_port).toInt());
DBG_OUTPUT_PORT.printf("MQTT active: %s:%d\n", mqtt_host, String(mqtt_port).toInt());

mqtt_client.setServer(mqtt_host, String(mqtt_port).toInt());
mqtt_client.setCallback(mqtt_callback);
Expand Down Expand Up @@ -532,16 +532,18 @@ void setup() {
void loop() {
server.handleClient();
webSocket.loop();

#ifdef ENABLE_OTA
ArduinoOTA.handle();
#endif

#ifdef ENABLE_MQTT
if (mqtt_host != "" && String(mqtt_port).toInt() > 0) {
if (mqtt_host != "" && String(mqtt_port).toInt() > 0 && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) {
if (!mqtt_client.connected()) {
mqtt_reconnect();
mqtt_reconnect();
} else {
mqtt_client.loop();
}
mqtt_client.loop();
}
#endif

Expand Down
4 changes: 4 additions & 0 deletions Arduino/McLighting/definitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ const char HOSTNAME[] = "ESP8266_01"; // Friedly hostname
#define ENABLE_MQTT // If defined, enable MQTT client code.
#ifdef ENABLE_MQTT
#define MQTT_MAX_PACKET_SIZE 256
#define MQTT_MAX_RECONNECT_TRIES 4

int mqtt_reconnect_retries = 0;

char mqtt_intopic[strlen(HOSTNAME) + 3]; // Topic in will be: <HOSTNAME>/in
char mqtt_outtopic[strlen(HOSTNAME) + 4]; // Topic out will be: <HOSTNAME>/out

Expand Down
10 changes: 7 additions & 3 deletions Arduino/McLighting/request_handlers.h
Original file line number Diff line number Diff line change
Expand Up @@ -390,11 +390,12 @@ void checkForRequests() {

void mqtt_reconnect() {
// Loop until we're reconnected
while (!mqtt_client.connected()) {
DBG_OUTPUT_PORT.print("Attempting MQTT connection... ");
while (!mqtt_client.connected() && mqtt_reconnect_retries < MQTT_MAX_RECONNECT_TRIES) {
mqtt_reconnect_retries++;
DBG_OUTPUT_PORT.printf("Attempting MQTT connection %d / %d ...\n", mqtt_reconnect_retries, MQTT_MAX_RECONNECT_TRIES);
// Attempt to connect
if (mqtt_client.connect(mqtt_clientid, mqtt_user, mqtt_pass)) {
DBG_OUTPUT_PORT.println("connected!");
DBG_OUTPUT_PORT.println("MQTT connected!");
// Once connected, publish an announcement...
char * message = new char[18 + strlen(HOSTNAME) + 1];
strcpy(message, "McLighting ready: ");
Expand All @@ -413,5 +414,8 @@ void checkForRequests() {
delay(5000);
}
}
if (mqtt_reconnect_retries >= MQTT_MAX_RECONNECT_TRIES) {
DBG_OUTPUT_PORT.printf("MQTT connection failed, giving up after %d tries ...\n", mqtt_reconnect_retries);
}
}
#endif

0 comments on commit 91571ea

Please sign in to comment.