Added backoff time in case weather updates fail
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Compile / Compile (push) Successful in 1m25s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Compile / Compile (push) Successful in 1m25s
				
			This commit is contained in:
		
							parent
							
								
									74695597cf
								
							
						
					
					
						commit
						8d6edca411
					
				
					 4 changed files with 21 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -121,8 +121,10 @@ void WatchFace::DrawWatchFace(bool partialRefresh)
 | 
			
		|||
 | 
			
		||||
  m_pages[m_watchFacePage]->DrawPage(partialRefresh);
 | 
			
		||||
 | 
			
		||||
  // Resync weather on matter what
 | 
			
		||||
  static_cast<WatchFacePages::Weather *>(m_pages[1].get())->Resync();
 | 
			
		||||
  // Resync weather in background
 | 
			
		||||
  if (m_watchFacePage != 1) {
 | 
			
		||||
    static_cast<WatchFacePages::Weather *>(m_pages[1].get())->Resync();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WatchFace::SetupVolatileMenuStuff()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@
 | 
			
		|||
#include <iomanip>
 | 
			
		||||
 | 
			
		||||
RTC_DATA_ATTR uint64_t WatchFacePages::Weather::m_lastSyncTime = 0;
 | 
			
		||||
RTC_DATA_ATTR uint64_t WatchFacePages::Weather::m_lastSyncAttemptTime = 0;
 | 
			
		||||
RTC_DATA_ATTR int WatchFacePages::Weather::m_lastCalculatedDay = 0XFFFFFFFF;
 | 
			
		||||
RTC_DATA_ATTR double WatchFacePages::Weather::m_locationLat = DEFAULT_LATITUDE;
 | 
			
		||||
RTC_DATA_ATTR double WatchFacePages::Weather::m_locationLon = DEFAULT_LONGITUDE;
 | 
			
		||||
| 
						 | 
				
			
			@ -46,9 +47,8 @@ void WatchFacePages::Weather::InitWake()
 | 
			
		|||
 | 
			
		||||
void WatchFacePages::Weather::DrawPage(bool partialRefresh)
 | 
			
		||||
{
 | 
			
		||||
  if (m_lastSyncTime == 0) {
 | 
			
		||||
    Resync();
 | 
			
		||||
  }
 | 
			
		||||
  Resync();
 | 
			
		||||
  Recalc();
 | 
			
		||||
 | 
			
		||||
  m_display.setFullWindow();
 | 
			
		||||
  m_display.fillScreen(GxEPD_WHITE);
 | 
			
		||||
| 
						 | 
				
			
			@ -219,7 +219,12 @@ void WatchFacePages::Weather::Resync()
 | 
			
		|||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (m_lastSyncTime > 0 && currentTime - m_lastSyncAttemptTime < WEATHER_UPDATE_BACKOFF) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(!m_features.wifi.Connect()) {
 | 
			
		||||
    m_lastSyncAttemptTime = currentTime;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -232,6 +237,7 @@ void WatchFacePages::Weather::Resync()
 | 
			
		|||
    int httpCode = client.GET();
 | 
			
		||||
    if (httpCode != 200) {
 | 
			
		||||
      m_features.wifi.Disconnect();
 | 
			
		||||
      m_lastSyncAttemptTime = currentTime;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -252,6 +258,7 @@ void WatchFacePages::Weather::Resync()
 | 
			
		|||
    // Check if we got enough lines
 | 
			
		||||
    if (lines.size() < 14) {
 | 
			
		||||
      m_features.wifi.Disconnect();
 | 
			
		||||
      m_lastSyncAttemptTime = currentTime;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -261,9 +268,11 @@ void WatchFacePages::Weather::Resync()
 | 
			
		|||
    memcpy(m_locationCity, location.c_str(), location.length());
 | 
			
		||||
    m_locationLat = std::stof(lines[7]);
 | 
			
		||||
    m_locationLon = std::stof(lines[8]);
 | 
			
		||||
 | 
			
		||||
    // Force recalculation next time
 | 
			
		||||
    m_lastCalculatedDay = 0xFFFFFFFF;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  // https://wttr.in/60.170833,24.9375?0Q&format=+%x:%t:%h
 | 
			
		||||
  std::ostringstream url;
 | 
			
		||||
  url << "http://wttr.in/" << m_locationLat << "," << m_locationLon << "?0Q&format=%x:%t:%h:%w";
 | 
			
		||||
  // Grr. wttr.in does a redirect to HTTPS if your agent isn't curl
 | 
			
		||||
| 
						 | 
				
			
			@ -273,6 +282,7 @@ void WatchFacePages::Weather::Resync()
 | 
			
		|||
  int httpCode = client.GET();
 | 
			
		||||
  m_features.wifi.Disconnect();
 | 
			
		||||
  if (httpCode != 200) {
 | 
			
		||||
    m_lastSyncAttemptTime = currentTime;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -292,6 +302,7 @@ void WatchFacePages::Weather::Resync()
 | 
			
		|||
  parts.push_back(reponse.substr(prev));
 | 
			
		||||
 | 
			
		||||
  if (parts.size() != 4) {
 | 
			
		||||
    m_lastSyncAttemptTime = currentTime;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -310,7 +321,6 @@ void WatchFacePages::Weather::Resync()
 | 
			
		|||
  m_currentWindSpeed = std::round(windSpeedKmh * 0.277778);
 | 
			
		||||
 | 
			
		||||
  m_features.wifi.Disconnect();
 | 
			
		||||
  Recalc();
 | 
			
		||||
 | 
			
		||||
  m_lastSyncTime = currentTime;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,6 +27,7 @@ private:
 | 
			
		|||
  WatchyDisplay & m_display;
 | 
			
		||||
  WatchFeatures::WatchFeatures & m_features;
 | 
			
		||||
  static RTC_DATA_ATTR uint64_t m_lastSyncTime;
 | 
			
		||||
  static RTC_DATA_ATTR uint64_t m_lastSyncAttemptTime;
 | 
			
		||||
  static RTC_DATA_ATTR int m_lastCalculatedDay;
 | 
			
		||||
  static RTC_DATA_ATTR char m_locationCity[128];
 | 
			
		||||
  static RTC_DATA_ATTR double m_locationLat, m_locationLon;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,6 +42,7 @@
 | 
			
		|||
#define WAKE_ON_ACCEL_EVENTS false // useful if saving battery by not updating every minute
 | 
			
		||||
 | 
			
		||||
#define WEATHER_UPDATE_INTERVAL 3600 // seconds
 | 
			
		||||
#define WEATHER_UPDATE_BACKOFF 900 // If weather update fails, how long to wait before trying again
 | 
			
		||||
#define DO_GEOLOCATION true // if false then use defaults below
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_LATITUDE 60.170833
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue