From d0bdf7bdaa82b52f522b03c11c65deb8c5b2b038 Mon Sep 17 00:00:00 2001 From: ricardollreis Date: Thu, 6 Jan 2022 17:04:13 +0000 Subject: [PATCH 1/3] Enable Portal Timeout in not Blocking Portal (#1331) Enable the use of setConfigPortalTimeout( ) & setConfigPortalBlocking(false) at same time, by calling process() --- WiFiManager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index f53e389..2149067 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -756,6 +756,10 @@ boolean WiFiManager::process(){ #if defined(WM_MDNS) && defined(ESP8266) MDNS.update(); #endif + + if(configPortalActive && !_configPortalIsBlocking){ + if(configPortalHasTimeout()) shutdownConfigPortal(); + } if(webPortalActive || (configPortalActive && !_configPortalIsBlocking)){ uint8_t state = processConfigPortal(); From 553ae00bac1cf6deef0ccd6e3dce9de01fa21857 Mon Sep 17 00:00:00 2001 From: tablatronix Date: Fri, 21 Jan 2022 14:02:59 -0600 Subject: [PATCH 2/3] #1327 --- WiFiManager.cpp | 15 +++++++++++---- .../AutoConnectNonBlocking.ino | 5 ++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 2149067..379d548 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -705,15 +705,16 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo DEBUG_WM(DEBUG_VERBOSE,F("Config Portal Running, non blocking/processing")); if(_configPortalTimeout > 0) DEBUG_WM(DEBUG_VERBOSE,F("Portal Timeout In"),(String)(_configPortalTimeout/1000) + (String)F(" seconds")); #endif - return result; + return result; // skip blocking loop } + // enter blocking loop, waiting for config + #ifdef WM_DEBUG_LEVEL DEBUG_WM(DEBUG_VERBOSE,F("Config Portal Running, blocking, waiting for clients...")); if(_configPortalTimeout > 0) DEBUG_WM(DEBUG_VERBOSE,F("Portal Timeout In"),(String)(_configPortalTimeout/1000) + (String)F(" seconds")); #endif - // blocking loop waiting for config while(1){ // if timed out or abort, break @@ -729,6 +730,7 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo state = processConfigPortal(); // status change, break + // @todo what is this for, should be moved inside the processor if(state != WL_IDLE_STATUS){ result = (state == WL_CONNECTED); // true if connected DEBUG_WM(DEBUG_DEV,F("configportal loop break")); @@ -832,7 +834,7 @@ uint8_t WiFiManager::processConfigPortal(){ shutdownConfigPortal(); return WL_CONNECT_FAILED; // CONNECT FAIL } - else{ + else if(_configPortalIsBlocking){ // clear save strings _ssid = ""; _pass = ""; @@ -840,9 +842,14 @@ uint8_t WiFiManager::processConfigPortal(){ WiFi_Disconnect(); WiFi_enableSTA(false); #ifdef WM_DEBUG_LEVEL - DEBUG_WM(DEBUG_VERBOSE,F("Disabling STA")); + DEBUG_WM(DEBUG_VERBOSE,F("Processing - Disabling STA")); #endif } + else{ + #ifdef WM_DEBUG_LEVEL + DEBUG_WM(DEBUG_VERBOSE,F("Portal is non blocking - remaining open")); + #endif + } } return WL_IDLE_STATUS; diff --git a/examples/NonBlocking/AutoConnectNonBlocking/AutoConnectNonBlocking.ino b/examples/NonBlocking/AutoConnectNonBlocking/AutoConnectNonBlocking.ino index fa04d91..28c5024 100644 --- a/examples/NonBlocking/AutoConnectNonBlocking/AutoConnectNonBlocking.ino +++ b/examples/NonBlocking/AutoConnectNonBlocking/AutoConnectNonBlocking.ino @@ -10,7 +10,7 @@ void setup() { //wm.resetSettings(); wm.setConfigPortalBlocking(false); - + wm.setConfigPortalTimeout(60); //automatically connect using saved credentials if they exist //If connection fails it starts an access point with the specified name if(wm.autoConnect("AutoConnectAP")){ @@ -19,6 +19,9 @@ void setup() { else { Serial.println("Configportal running"); } + + wm.startConfigPortal(); + // wm.startWebPortal(); } void loop() { From 810f144cffcc095e9778976e8aa030cb1ee89824 Mon Sep 17 00:00:00 2001 From: tablatronix Date: Fri, 21 Jan 2022 16:14:11 -0600 Subject: [PATCH 3/3] keep portal open if connectonsave is false Not sure if this is a good idea or bad one.. probably better than closing it automatically. --- WiFiManager.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 379d548..0055424 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -811,8 +811,8 @@ uint8_t WiFiManager::processConfigPortal(){ if ( _savewificallback != NULL) { _savewificallback(); } - shutdownConfigPortal(); if(!_connectonsave) return WL_IDLE_STATUS; + shutdownConfigPortal(); return WL_CONNECTED; // CONNECT SUCCESS } #ifdef WM_DEBUG_LEVEL @@ -944,12 +944,16 @@ uint8_t WiFiManager::connectWifi(String ssid, String pass, bool connect) { // if ssid argument provided connect to that if (ssid != "") { wifiConnectNew(ssid,pass,connect); - if(_saveTimeout > 0){ - connRes = waitForConnectResult(_saveTimeout); // use default save timeout for saves to prevent bugs in esp->waitforconnectresult loop - } - else { - connRes = waitForConnectResult(0); - } + // @todo connect=false seems to disconnect sta in begin() so not sure if _connectonsave is useful at all + // skip wait if not connecting + // if(connect){ + if(_saveTimeout > 0){ + connRes = waitForConnectResult(_saveTimeout); // use default save timeout for saves to prevent bugs in esp->waitforconnectresult loop + } + else { + connRes = waitForConnectResult(0); + } + // } } else { // connect using saved ssid if there is one @@ -2053,13 +2057,13 @@ String WiFiManager::getInfoData(String id){ p.replace(FPSTR(T_1),WiFi.softAPgetHostname()); } #endif - #ifdef ESP8266 + // #ifdef ESP8266 #ifndef WM_NOSOFTAPSSID else if(id==F("apssid")){ p = FPSTR(HTTP_INFO_apssid); p.replace(FPSTR(T_1),htmlEntities(WiFi.softAPSSID())); } - #endif + // #endif #endif else if(id==F("apbssid")){ p = FPSTR(HTTP_INFO_apbssid);