|  | @ -22,9 +22,8 @@ void ahoywifi::setup(settings_t *config, uint32_t *utcTimestamp) { | 
			
		
	
		
		
			
				
					|  |  |     mConfig = config; |  |  |     mConfig = config; | 
			
		
	
		
		
			
				
					|  |  |     mUtcTimestamp = utcTimestamp; |  |  |     mUtcTimestamp = utcTimestamp; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     mStaConn    = DISCONNECTED; | 
			
		
	
		
		
			
				
					|  |  |     mCnt        = 0; |  |  |     mCnt        = 0; | 
			
		
	
		
		
			
				
					|  |  |     mConnected  = false; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     mReconnect  = false; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |     mScanActive = false; |  |  |     mScanActive = false; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     #if defined(ESP8266) |  |  |     #if defined(ESP8266) | 
			
		
	
	
		
		
			
				
					|  | @ -63,7 +62,7 @@ void ahoywifi::setupWifi(bool startAP = false) { | 
			
		
	
		
		
			
				
					|  |  | //-----------------------------------------------------------------------------
 |  |  | //-----------------------------------------------------------------------------
 | 
			
		
	
		
		
			
				
					|  |  | void ahoywifi::tickWifiLoop() { |  |  | void ahoywifi::tickWifiLoop() { | 
			
		
	
		
		
			
				
					|  |  |     #if !defined(AP_ONLY) |  |  |     #if !defined(AP_ONLY) | 
			
		
	
		
		
			
				
					
					|  |  |     if(mReconnect) { |  |  |     if(mStaConn != GOT_IP) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |         if (WiFi.softAPgetStationNum() > 0) { // do not reconnect if any AP connection exists
 |  |  |         if (WiFi.softAPgetStationNum() > 0) { // do not reconnect if any AP connection exists
 | 
			
		
	
		
		
			
				
					|  |  |             mDns.processNextRequest(); |  |  |             mDns.processNextRequest(); | 
			
		
	
		
		
			
				
					|  |  |             if((WIFI_AP_STA == WiFi.getMode()) && !mScanActive) { |  |  |             if((WIFI_AP_STA == WiFi.getMode()) && !mScanActive) { | 
			
		
	
	
		
		
			
				
					|  | @ -79,10 +78,17 @@ void ahoywifi::tickWifiLoop() { | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  |         mCnt++; |  |  |         mCnt++; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         uint8_t timeout = 10; // seconds
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         if (mStaConn == CONNECTED) // connected but no ip
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             timeout = 20; | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         DBGPRINT(F("reconnect in ")); |  |  |         DBGPRINT(F("reconnect in ")); | 
			
		
	
		
		
			
				
					
					|  |  |         DBGPRINT(String((100-mCnt)/10)); |  |  |         DBGPRINT(String(timeout-mCnt)); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |         DBGPRINTLN(F(" seconds")); |  |  |         DBGPRINTLN(F(" seconds")); | 
			
		
	
		
		
			
				
					
					|  |  |         if((mCnt % 10) == 0) { // try to reconnect after 10 sec without connection
 |  |  |         if((mCnt % timeout) == 0) { // try to reconnect after x sec without connection
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |             if(mStaConn != CONNECTED) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 mStaConn = CONNECTING; | 
			
		
	
		
		
			
				
					|  |  |             WiFi.reconnect(); |  |  |             WiFi.reconnect(); | 
			
		
	
		
		
			
				
					|  |  |             mCnt = 0; |  |  |             mCnt = 0; | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
	
		
		
			
				
					|  | @ -128,11 +134,12 @@ void ahoywifi::setupStation(void) { | 
			
		
	
		
		
			
				
					|  |  |         if(!WiFi.config(ip, gateway, mask, dns1, dns2)) |  |  |         if(!WiFi.config(ip, gateway, mask, dns1, dns2)) | 
			
		
	
		
		
			
				
					|  |  |             DPRINTLN(DBG_ERROR, F("failed to set static IP!")); |  |  |             DPRINTLN(DBG_ERROR, F("failed to set static IP!")); | 
			
		
	
		
		
			
				
					|  |  |     } |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |     mReconnect = (WiFi.begin(mConfig->sys.stationSsid, mConfig->sys.stationPwd) != WL_CONNECTED); |  |  |     mStaConn = (WiFi.begin(mConfig->sys.stationSsid, mConfig->sys.stationPwd) != WL_CONNECTED) ? DISCONNECTED : CONNECTED; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |     if(String(mConfig->sys.deviceName) != "") |  |  |     if(String(mConfig->sys.deviceName) != "") | 
			
		
	
		
		
			
				
					|  |  |         WiFi.hostname(mConfig->sys.deviceName); |  |  |         WiFi.hostname(mConfig->sys.deviceName); | 
			
		
	
		
		
			
				
					|  |  |     WiFi.mode(WIFI_AP_STA); |  |  |     WiFi.mode(WIFI_AP_STA); | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     DBGPRINT(F("connect to network '")); |  |  |     DBGPRINT(F("connect to network '")); | 
			
		
	
		
		
			
				
					|  |  |     DBGPRINT(mConfig->sys.stationSsid); |  |  |     DBGPRINT(mConfig->sys.stationSsid); | 
			
		
	
		
		
			
				
					|  |  |     DBGPRINTLN(F("' ...")); |  |  |     DBGPRINTLN(F("' ...")); | 
			
		
	
	
		
		
			
				
					|  | @ -141,7 +148,7 @@ void ahoywifi::setupStation(void) { | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | //-----------------------------------------------------------------------------
 |  |  | //-----------------------------------------------------------------------------
 | 
			
		
	
		
		
			
				
					|  |  | bool ahoywifi::getNtpTime(void) { |  |  | bool ahoywifi::getNtpTime(void) { | 
			
		
	
		
		
			
				
					
					|  |  |     if(!mConnected) |  |  |     if(CONNECTED != mStaConn) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |         return false; |  |  |         return false; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     IPAddress timeServer; |  |  |     IPAddress timeServer; | 
			
		
	
	
		
		
			
				
					|  | @ -234,24 +241,34 @@ void ahoywifi::getAvailNetworks(JsonObject obj) { | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | //-----------------------------------------------------------------------------
 |  |  | //-----------------------------------------------------------------------------
 | 
			
		
	
		
		
			
				
					
					|  |  | void ahoywifi::connectionEvent(bool connected) { |  |  | void ahoywifi::connectionEvent(WiFiStatus_t status) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |     if (connected) { |  |  |     switch(status) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |         if(!mConnected) { |  |  |         case CONNECTED: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             mConnected = true; |  |  |             if(mStaConn != CONNECTED) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             mReconnect = false; |  |  |                 mStaConn = CONNECTED; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |                 DBGPRINTLN(F("\n[WiFi] Connected")); |  |  |                 DBGPRINTLN(F("\n[WiFi] Connected")); | 
			
		
	
		
		
			
				
					|  |  |                 WiFi.mode(WIFI_STA); |  |  |                 WiFi.mode(WIFI_STA); | 
			
		
	
		
		
			
				
					|  |  |                 DBGPRINTLN(F("[WiFi] AP disabled")); |  |  |                 DBGPRINTLN(F("[WiFi] AP disabled")); | 
			
		
	
		
		
			
				
					|  |  |                 mDns.stop(); |  |  |                 mDns.stop(); | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |     } else { |  |  |             break; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |         if(mConnected) { |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             mConnected = false; |  |  |         case GOT_IP: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             mReconnect = true; |  |  |             mStaConn = GOT_IP; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |             mCnt       = 50;    // try to reconnect in 5 sec
 |  |  |             welcome(WiFi.localIP().toString() + F(" (Station)")); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |             break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         case DISCONNECTED: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             if(mStaConn != CONNECTING) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 mStaConn = DISCONNECTED; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 mCnt       = 5;     // try to reconnect in 5 sec
 | 
			
		
	
		
		
			
				
					|  |  |                 setupWifi();        // reconnect with AP / Station setup
 |  |  |                 setupWifi();        // reconnect with AP / Station setup
 | 
			
		
	
		
		
			
				
					|  |  |                 DPRINTLN(DBG_INFO, "[WiFi] Connection Lost"); |  |  |                 DPRINTLN(DBG_INFO, "[WiFi] Connection Lost"); | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             break; | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         default: | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             break; | 
			
		
	
		
		
			
				
					|  |  |     } |  |  |     } | 
			
		
	
		
		
			
				
					|  |  | } |  |  | } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  | @ -260,17 +277,17 @@ void ahoywifi::connectionEvent(bool connected) { | 
			
		
	
		
		
			
				
					|  |  | #if defined(ESP8266) |  |  | #if defined(ESP8266) | 
			
		
	
		
		
			
				
					|  |  |     //-------------------------------------------------------------------------
 |  |  |     //-------------------------------------------------------------------------
 | 
			
		
	
		
		
			
				
					|  |  |     void ahoywifi::onConnect(const WiFiEventStationModeConnected& event) { |  |  |     void ahoywifi::onConnect(const WiFiEventStationModeConnected& event) { | 
			
		
	
		
		
			
				
					
					|  |  |         connectionEvent(true); |  |  |         connectionEvent(CONNECTED); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |     } |  |  |     } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     //-------------------------------------------------------------------------
 |  |  |     //-------------------------------------------------------------------------
 | 
			
		
	
		
		
			
				
					|  |  |     void ahoywifi::onGotIP(const WiFiEventStationModeGotIP& event) { |  |  |     void ahoywifi::onGotIP(const WiFiEventStationModeGotIP& event) { | 
			
		
	
		
		
			
				
					
					|  |  |         welcome(WiFi.localIP().toString() + F(" (Station)")); |  |  |         connectionEvent(GOT_IP); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |     } |  |  |     } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     //-------------------------------------------------------------------------
 |  |  |     //-------------------------------------------------------------------------
 | 
			
		
	
		
		
			
				
					|  |  |     void ahoywifi::onDisconnect(const WiFiEventStationModeDisconnected& event) { |  |  |     void ahoywifi::onDisconnect(const WiFiEventStationModeDisconnected& event) { | 
			
		
	
		
		
			
				
					
					|  |  |         connectionEvent(false); |  |  |         connectionEvent(DISCONNECTED); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |     } |  |  |     } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  | #else |  |  | #else | 
			
		
	
	
		
		
			
				
					|  | @ -281,15 +298,15 @@ void ahoywifi::connectionEvent(bool connected) { | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         switch(event) { |  |  |         switch(event) { | 
			
		
	
		
		
			
				
					|  |  |             case SYSTEM_EVENT_STA_CONNECTED: |  |  |             case SYSTEM_EVENT_STA_CONNECTED: | 
			
		
	
		
		
			
				
					
					|  |  |                 connectionEvent(true); |  |  |                 connectionEvent(CONNECTED); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |                 break; |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             case SYSTEM_EVENT_STA_GOT_IP: |  |  |             case SYSTEM_EVENT_STA_GOT_IP: | 
			
		
	
		
		
			
				
					
					|  |  |                 welcome(WiFi.localIP().toString() + F(" (Station)")); |  |  |                 connectionEvent(GOT_IP); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |                 break; |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             case SYSTEM_EVENT_STA_DISCONNECTED: |  |  |             case SYSTEM_EVENT_STA_DISCONNECTED: | 
			
		
	
		
		
			
				
					
					|  |  |                 connectionEvent(false); |  |  |                 connectionEvent(DISCONNECTED); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |                 break; |  |  |                 break; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |             default: |  |  |             default: | 
			
		
	
	
		
		
			
				
					|  | 
 |