From 600e4be7d838fbc8342673016ea21dcdd488abc7 Mon Sep 17 00:00:00 2001 From: etwasmitbaum <47484288+etwasmitbaum@users.noreply.github.com> Date: Fri, 25 Jun 2021 22:35:22 +0200 Subject: [PATCH] changes for ntp time syncing moved all related constants to config.h syncing time only when weather is checked and the time sync interval matches. also to note: NTP_TIME_SYNC_INTERVAL is now in minutes. --- src/Watchy.cpp | 62 ++++++++++++++++++++++++-------------------------- src/config.h | 6 ++++- 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/src/Watchy.cpp b/src/Watchy.cpp index 362d975..40bdc00 100644 --- a/src/Watchy.cpp +++ b/src/Watchy.cpp @@ -10,7 +10,7 @@ RTC_DATA_ATTR bool WIFI_CONFIGURED; RTC_DATA_ATTR bool BLE_CONFIGURED; RTC_DATA_ATTR weatherData currentWeather; RTC_DATA_ATTR int weatherIntervalCounter = WEATHER_UPDATE_INTERVAL; -RTC_DATA_ATTR int ntpTimeSyncInterval = NTP_TIME_SYNC_INTERVAL; +RTC_DARA_ATTR int ntpSyncTimeCounter = NTP_TIME_SYNC_INTERVAL; String getValue(String data, char separator, int index) { @@ -75,47 +75,41 @@ void Watchy::init(String datetime){ showWatchFace(false); //full update on reset break; } - syncNtpTime(); deepSleep(); } void Watchy::syncNtpTime(){ - const char* ntpServer = "pool.ntp.org"; - const long gmtOffset_sec = -21600; // set time zone to central standard time - // ie UTC -6 * 60 * 60 = -21600 - const int daylightOffset_sec = 3600;// if observing Daylight saving time 3600 otherwise 0 - struct tm timeinfo; - // Watchy updates every minute but we really only need to sync a few times a day - if(currentTime.Hour % ntpTimeSyncInterval == 0 && currentTime.Minute == 0 && ntpTimeSyncInterval != 0){ - //only run this at midnight,8am and 4pm - // three times a day to correct time drift. + if(ntpSyncTimeCounter >= NTP_TIME_SYNC_INTERVAL && NTP_TIME_SYNC_INTERVAL != 0){ + //only run this at midnight,8am and 4pm + // three times a day to correct time drift. - //make sure WiFi is connected - if(connectWiFi()){ - // wifi connected so proceed to get NTP time + struct tm timeinfo; - //get NTP Time - configTime(gmtOffset_sec, daylightOffset_sec, ntpServer); - getLocalTime(&timeinfo); + //get NTP Time + configTime(GMT_OFFSET_SEC, DAYLIGHT_OFFSET_SEC, NTP_SERVER); + getLocalTime(&timeinfo); - // convert NTP time into proper format - tmElements_t tm; - tm.Month = timeinfo.tm_mon + 1;// 0-11 based month so we have to add 1 - tm.Day = timeinfo.tm_mday; - tm.Year = timeinfo.tm_year + 1900 - YEAR_OFFSET;//offset from 1970, since year is stored in uint8_t - tm.Hour = timeinfo.tm_hour; - tm.Minute = timeinfo.tm_min; - tm.Second = timeinfo.tm_sec; - time_t t = makeTime(tm); + // convert NTP time into proper format + tmElements_t tm; + tm.Month = timeinfo.tm_mon + 1;// 0-11 based month so we have to add 1 + tm.Day = timeinfo.tm_mday; + tm.Year = timeinfo.tm_year + 1900 - YEAR_OFFSET;//offset from 1970, since year is stored in uint8_t + tm.Hour = timeinfo.tm_hour; + tm.Minute = timeinfo.tm_min; + tm.Second = timeinfo.tm_sec; + time_t t = makeTime(tm); - //set the RTC time to the NTP time - RTC.set(t); + ntpSyncTimeCounter = 0; - // shut down the radio to save power - WiFi.mode(WIFI_OFF); - btStop(); - } + //set the RTC time to the NTP time + RTC.set(t); + + // shut down the radio to save power + WiFi.mode(WIFI_OFF); + btStop(); + } else { + ntpSyncTimeCounter = ntpSyncTimeCounter + WEATHER_UPDATE_INTERVAL; } } @@ -672,6 +666,10 @@ weatherData Watchy::getWeatherData(){ //http error } http.end(); + + // syncing time when checking for weatcher and connected to wifi + syncNtpTime(); + //turn off radios WiFi.mode(WIFI_OFF); btStop(); diff --git a/src/config.h b/src/config.h index 4e90f3d..62429f6 100644 --- a/src/config.h +++ b/src/config.h @@ -48,7 +48,11 @@ #define SET_MONTH 3 #define SET_DAY 4 #define YEAR_OFFSET 1970 -#define NTP_TIME_SYNC_INTERVAL 8 //hours 0 = update never +#define NTP_TIME_SYNC_INTERVAL 480 // minutes, will have no effect if it's lower than WEATHER_UPDATE_INTERVAL 0 = update never +#define GMT_OFFSET_SEC -21600 // set time zone to central standard time + // ie UTC -6 * 60 * 60 = -21600 +#define DAYLIGHT_OFFSET_SEC 3600 // if observing Daylight saving time 3600 otherwise 0 +#define NTP_SERVER "pool.ntp.org" //BLE OTA #define BLE_DEVICE_NAME "Watchy BLE OTA" #define WATCHFACE_NAME "Watchy 7 Segment"