diff --git a/src/mesh/http/WiFiAPClient.cpp b/src/mesh/http/WiFiAPClient.cpp index ec34f9927..0a6a1b8df 100644 --- a/src/mesh/http/WiFiAPClient.cpp +++ b/src/mesh/http/WiFiAPClient.cpp @@ -5,7 +5,7 @@ #include "configuration.h" #include "main.h" #include "mesh/http/WebServer.h" -#include "mesh/wifi/WiFiServerAPI.h" +#include "mesh/api/WiFiServerAPI.h" #include "mqtt/MQTT.h" #include "target_specific.h" #include @@ -55,11 +55,13 @@ static int32_t reconnectWiFi() // Make sure we clear old connection credentials WiFi.disconnect(false, true); - LOG_INFO("Reconnecting to WiFi access point %s\n",wifiName); - WiFi.mode(WIFI_MODE_STA); - WiFi.begin(wifiName, wifiPsw); + delay(5000); + + if (!WiFi.isConnected()) { + WiFi.begin(wifiName, wifiPsw); + } } #ifndef DISABLE_NTP @@ -167,7 +169,7 @@ bool initWifi() WiFi.mode(WIFI_MODE_STA); WiFi.setHostname(ourHost); WiFi.onEvent(WiFiEvent); - WiFi.setAutoReconnect(false); + WiFi.setAutoReconnect(true); WiFi.setSleep(false); if (config.network.address_mode == Config_NetworkConfig_AddressMode_STATIC && config.network.ipv4_config.ip != 0) { WiFi.config(config.network.ipv4_config.ip, @@ -182,7 +184,7 @@ bool initWifi() WiFi.onEvent( [](WiFiEvent_t event, WiFiEventInfo_t info) { - LOG_WARN("WiFi lost connection. Reason: %s", info.wifi_sta_disconnected.reason); + LOG_WARN("WiFi lost connection. Reason: %d\n", info.wifi_sta_disconnected.reason); /* If we are disconnected from the AP for some reason, diff --git a/src/mqtt/MQTT.cpp b/src/mqtt/MQTT.cpp index e66b942e9..cc091bcff 100644 --- a/src/mqtt/MQTT.cpp +++ b/src/mqtt/MQTT.cpp @@ -207,14 +207,17 @@ void MQTT::reconnect() sendSubscriptions(); } else { - LOG_ERROR("Failed to contact MQTT server (%d/10)...\n",reconnectCount); #if HAS_WIFI && !defined(ARCH_PORTDUINO) - if (reconnectCount > 9) { + LOG_ERROR("Failed to contact MQTT server (%d/5)...\n",reconnectCount + 1); + if (reconnectCount >= 4) { needReconnect = true; - wifiReconnect->setIntervalFromNow(1000); + wifiReconnect->setIntervalFromNow(0); + reconnectCount = 0; + } else { + reconnectCount++; } + #endif - reconnectCount++; } } } @@ -284,7 +287,6 @@ int32_t MQTT::runOnce() String topic = cryptTopic + env->channel_id + "/" + owner.id; LOG_INFO("publish %s, %u bytes from queue\n", topic.c_str(), numBytes); - pubSub.publish(topic.c_str(), bytes, numBytes, false); @@ -299,7 +301,7 @@ int32_t MQTT::runOnce() } mqttPool.release(env); } - return 20; + return 200; } else { return 30000; } diff --git a/src/mqtt/MQTT.h b/src/mqtt/MQTT.h index ddbacbcc4..16ce4c37a 100644 --- a/src/mqtt/MQTT.h +++ b/src/mqtt/MQTT.h @@ -13,7 +13,7 @@ #include #endif -#define MAX_MQTT_QUEUE 32 +#define MAX_MQTT_QUEUE 16 /** * Our wrapper/singleton for sending/receiving MQTT "udp" packets. This object isolates the MQTT protocol implementation from