diff --git a/Adafruit_MQTT.cpp b/Adafruit_MQTT.cpp index d7963dc..fc415c6 100644 --- a/Adafruit_MQTT.cpp +++ b/Adafruit_MQTT.cpp @@ -140,6 +140,19 @@ int8_t Adafruit_MQTT::connect() { return 0; } +const __FlashStringHelper* Adafruit_MQTT::connectErrorString(int8_t code) { + switch (code) { + case 1: return F("Wrong protocol"); + case 2: return F("ID rejected"); + case 3: return F("Server unavail"); + case 4: return F("Bad user/pass"); + case 5: return F("Not authed"); + case 6: return F("Failed to subscribe"); + case -1: return F("Connection failed"); + default: return F("Unknown error"); + } +} + bool Adafruit_MQTT::publish(const char *topic, const char *data, uint8_t qos) { // Construct and send publish packet. uint8_t len = publishPacket(buffer, topic, data, qos); diff --git a/Adafruit_MQTT.h b/Adafruit_MQTT.h index 7d89801..909ee58 100644 --- a/Adafruit_MQTT.h +++ b/Adafruit_MQTT.h @@ -105,8 +105,16 @@ class Adafruit_MQTT { // 4 = Bad username or password // 5 = Not authenticated // 6 = Failed to subscribe + // Use connectErrorString() to get a printable string version of the + // error. int8_t connect(); + // Return a printable string version of the error code returned by + // connect(). This returns a __FlashStringHelper*, which points to a + // string stored in flash, but can be directly passed to e.g. + // Serial.println without any further processing. + const __FlashStringHelper* connectErrorString(int8_t code); + // Disconnect from the MQTT server. Returns true if disconnected, false // otherwise. virtual bool disconnect() = 0; // Subclasses need to fill this in! diff --git a/examples/mqtt_cc3k/mqtt_cc3k.ino b/examples/mqtt_cc3k/mqtt_cc3k.ino index d2490f4..ab04d64 100644 --- a/examples/mqtt_cc3k/mqtt_cc3k.ino +++ b/examples/mqtt_cc3k/mqtt_cc3k.ino @@ -152,18 +152,9 @@ void MQTT_connect() { Serial.print("Connecting to MQTT... "); while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected - switch (ret) { - case 1: Serial.println("Wrong protocol"); break; - case 2: Serial.println("ID rejected"); break; - case 3: Serial.println("Server unavailable"); break; - case 4: Serial.println("Bad user/password"); break; - case 5: Serial.println("Not authenticated"); break; - case 6: Serial.println("Failed to subscribe"); break; - default: - Serial.println(F("Connection failed")); + Serial.println(mqtt.connectErrorString(ret)); + if (ret < 0) CC3000connect(WLAN_SSID, WLAN_PASS, WLAN_SECURITY); // y0w, lets connect to wifi again - break; - } Serial.println("Retrying MQTT connection in 5 seconds..."); mqtt.disconnect(); delay(5000); // wait 5 seconds diff --git a/examples/mqtt_esp8266/mqtt_esp8266.ino b/examples/mqtt_esp8266/mqtt_esp8266.ino index 5a7d217..5faccf0 100644 --- a/examples/mqtt_esp8266/mqtt_esp8266.ino +++ b/examples/mqtt_esp8266/mqtt_esp8266.ino @@ -137,17 +137,7 @@ void MQTT_connect() { Serial.print("Connecting to MQTT... "); while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected - switch (ret) { - case 1: Serial.println("Wrong protocol"); break; - case 2: Serial.println("ID rejected"); break; - case 3: Serial.println("Server unavailable"); break; - case 4: Serial.println("Bad user/password"); break; - case 5: Serial.println("Not authenticated"); break; - case 6: Serial.println("Failed to subscribe"); break; - default: Serial.print("Couldn't connect to server, code: "); - Serial.println(ret); - break; - } + Serial.println(mqtt.connectErrorString(ret)); Serial.println("Retrying MQTT connection in 5 seconds..."); mqtt.disconnect(); delay(5000); // wait 5 seconds diff --git a/examples/mqtt_fona/mqtt_fona.ino b/examples/mqtt_fona/mqtt_fona.ino index fd95690..1474fc4 100644 --- a/examples/mqtt_fona/mqtt_fona.ino +++ b/examples/mqtt_fona/mqtt_fona.ino @@ -122,18 +122,7 @@ void loop() { Serial.println(F("Connecting to MQTT...")); int8_t ret, retries = 5; while (retries && (ret = mqtt.connect()) != 0) { - switch (ret) { - case 1: Serial.println(F("Wrong protocol")); break; - case 2: Serial.println(F("ID rejected")); break; - case 3: Serial.println(F("Server unavail")); break; - case 4: Serial.println(F("Bad user/pass")); break; - case 5: Serial.println(F("Not authed")); break; - case 6: Serial.println(F("Failed to subscribe")); break; - default: { - Serial.println(F("Connection failed")); - break; - } - } + Serial.println(mqtt.connectErrorString(ret)); Serial.println(F("Retrying MQTT connection")); retries--; if (retries == 0) halt("Resetting system");