pull/264/head^2
Elías A. Angulo Klein 2024-07-22 03:54:03 +02:00
commit c7b67f31b5
4 changed files with 56 additions and 53 deletions

View File

@ -1,6 +1,7 @@
#ifndef TIMEZONES_GMT_H #ifndef TIMEZONES_GMT_H
#define TIMEZONES_GMT_H #define TIMEZONES_GMT_H
// This file is used to set up GMT based timezones.
// You don't need to change anything here to be able to set up GMT based time. // You don't need to change anything here to be able to set up GMT based time.
// If you set TIMEZONES_NON_GMT_OVERRIDE to 1 (as for get summer time and leaps), // If you set TIMEZONES_NON_GMT_OVERRIDE to 1 (as for get summer time and leaps),
@ -10,11 +11,14 @@
// Visit the link below. // Visit the link below.
#ifndef TIMEZONES_NON_GMT_OVERRIDE #ifndef TIMEZONES_NON_GMT_OVERRIDE
#define TIMEZONES_NON_GMT_OVERRIDE 0 #define TIMEZONES_NON_GMT_OVERRIDE 0 // 0: GMT, 1: Location timezone.
#endif #endif
#ifndef TIMEZONES_SELECTED
#define TIMEZONES_SELECTED 0 // If above is 0, value is index of array below.
#endif // Etc/GMT0
#define TIMEZONES_LENGTH 28 #define TIMEZONES_LENGTH 28
#define TIMEZONES_SELECTED 0
typedef struct TZ { typedef struct TZ {
const char* location; const char* location;
@ -22,44 +26,47 @@ typedef struct TZ {
} TZ; } TZ;
#ifdef TIMEZONES_NON_GMT_OVERRIDE
// https://raw.githubusercontent.com/nayarsystems/posix_tz_db/master/zones.csv // https://raw.githubusercontent.com/nayarsystems/posix_tz_db/master/zones.csv
static TZ tz_override = { static TZ tz_override = {
"Europe/Madrid", "Europe/Madrid",
"CET-1CEST,M3.5.0,M10.5.0/3" "CET-1CEST,M3.5.0,M10.5.0/3"
}; };
#endif
static TZ timeZones[] = { static TZ timeZones[] = {
{"Etc/GMT+0","GMT0"}, // 0 {"Etc/GMT+0","GMT0"}, // 0
{"Etc/GMT+1","<-01>1"}, // 1 {"Etc/GMT+1","<-01>1"}, // 1
{"Etc/GMT+2","<-02>2"}, // 2 {"Etc/GMT+2","<-02>2"}, // 2
{"Etc/GMT+3","<-03>3"}, // 3 {"Etc/GMT+3","<-03>3"}, // 3
{"Etc/GMT+4","<-04>4"}, // 4 {"Etc/GMT+4","<-04>4"}, // 4
{"Etc/GMT+5","<-05>5"}, // 5 {"Etc/GMT+5","<-05>5"}, // 5
{"Etc/GMT+6","<-06>6"}, // 6 {"Etc/GMT+6","<-06>6"}, // 6
{"Etc/GMT+7","<-07>7"}, // 7 {"Etc/GMT+7","<-07>7"}, // 7
{"Etc/GMT+8","<-08>8"}, // 8 {"Etc/GMT+8","<-08>8"}, // 8
{"Etc/GMT+9","<-09>9"}, // 9 {"Etc/GMT+9","<-09>9"}, // 9
{"Etc/GMT+10","<-10>10"}, // 10 {"Etc/GMT+10","<-10>10"}, // 10
{"Etc/GMT+11","<-11>11"}, // 11 {"Etc/GMT+11","<-11>11"}, // 11
{"Etc/GMT+12","<-12>12"}, // 12 {"Etc/GMT+12","<-12>12"}, // 12
{"Etc/GMT-0","GMT0"}, // 13 {"Etc/GMT-0","GMT0"}, // 13
{"Etc/GMT-1","<+01>-1"}, // 14 {"Etc/GMT-1","<+01>-1"}, // 14
{"Etc/GMT-2","<+02>-2"}, // 15 {"Etc/GMT-2","<+02>-2"}, // 15
{"Etc/GMT-3","<+03>-3"}, // 16 {"Etc/GMT-3","<+03>-3"}, // 16
{"Etc/GMT-4","<+04>-4"}, // 17 {"Etc/GMT-4","<+04>-4"}, // 17
{"Etc/GMT-5","<+05>-5"}, // 18 {"Etc/GMT-5","<+05>-5"}, // 18
{"Etc/GMT-6","<+06>-6"}, // 19 {"Etc/GMT-6","<+06>-6"}, // 19
{"Etc/GMT-7","<+07>-7"}, // 20 {"Etc/GMT-7","<+07>-7"}, // 20
{"Etc/GMT-8","<+08>-8"}, // 21 {"Etc/GMT-8","<+08>-8"}, // 21
{"Etc/GMT-9","<+09>-9"}, // 22 {"Etc/GMT-9","<+09>-9"}, // 22
{"Etc/GMT-10","<+10>-10"}, // 23 {"Etc/GMT-10","<+10>-10"}, // 23
{"Etc/GMT-11","<+11>-11"}, // 24 {"Etc/GMT-11","<+11>-11"}, // 24
{"Etc/GMT-12","<+12>-12"}, // 25 {"Etc/GMT-12","<+12>-12"}, // 25
{"Etc/GMT-13","<+13>-13"}, // 26 {"Etc/GMT-13","<+13>-13"}, // 26
{"Etc/GMT-14","<+14>-14"}, // 27 {"Etc/GMT-14","<+14>-14"}, // 27
}; };
static long OFFSETS_SEC[] = {
0, 3600, 7200, 10800, 14400, 18000, 21600, 25200, 28800, 32400, 36000, 39600, 43200, 0, -3600, -7200, -10800, -14400, -18000, -21600, -25200, -28800, -32400, -36000, -39600, -43200, -46800, -50400
};
static int8_t tzIndex = TIMEZONES_SELECTED;
#endif //TIMEZONES_GMT_H #endif //TIMEZONES_GMT_H

View File

@ -12,7 +12,7 @@ GxEPD2_BW<WatchyDisplay, WatchyDisplay::HEIGHT> Watchy::display(
RTC_DATA_ATTR int guiState; RTC_DATA_ATTR int guiState;
RTC_DATA_ATTR int menuIndex; RTC_DATA_ATTR int menuIndex;
RTC_DATA_ATTR BMA423 sensor; RTC_DATA_ATTR BMA423 sensor;
RTC_DATA_ATTR bool WIFI_CONFIGURED; RTC_DATA_ATTR bool WIFI_CONFIGURED;
RTC_DATA_ATTR bool BLE_CONFIGURED; RTC_DATA_ATTR bool BLE_CONFIGURED;
RTC_DATA_ATTR weatherData currentWeather; RTC_DATA_ATTR weatherData currentWeather;
@ -37,6 +37,7 @@ void Watchy::init(String datetime) {
#else #else
Wire.begin(SDA, SCL); // init i2c Wire.begin(SDA, SCL); // init i2c
#endif #endif
RTC.init(); RTC.init();
// Init the display since is almost sure we will use it // Init the display since is almost sure we will use it
display.epd2.initWatchy(); display.epd2.initWatchy();
@ -88,8 +89,8 @@ void Watchy::init(String datetime) {
#ifdef ARDUINO_ESP32S3_DEV #ifdef ARDUINO_ESP32S3_DEV
pinMode(USB_DET_PIN, INPUT); pinMode(USB_DET_PIN, INPUT);
USB_PLUGGED_IN = (digitalRead(USB_DET_PIN) == 1); USB_PLUGGED_IN = (digitalRead(USB_DET_PIN) == 1);
#endif #endif
gmtOffset = settings.gmtOffset; gmtOffset = settings.gmtOffset;
RTC.read(currentTime); RTC.read(currentTime);
RTC.read(bootTime); RTC.read(bootTime);
showWatchFace(false); // full update on reset showWatchFace(false); // full update on reset
@ -504,9 +505,10 @@ void Watchy::setTime() {
int8_t month = currentTime.Month; int8_t month = currentTime.Month;
int8_t year = tmYearToY2k(currentTime.Year); int8_t year = tmYearToY2k(currentTime.Year);
#endif #endif
int8_t gmt = gmtOffset / 3600; // gmt variable defaults to TIMEZONES_SELECTED if defined
int8_t gmt = OFFSETS_SEC[tzIndex] / 3600;
int8_t tzIndex = TIMEZONES_SELECTED;
int8_t setIndex = SET_HOUR; int8_t setIndex = SET_HOUR;
@ -588,13 +590,8 @@ void Watchy::setTime() {
} }
if(tzIndex < 13){ gmt = OFFSETS_SEC[tzIndex] / 3600;
gmt = (tzIndex); gmtOffset = gmt * 3600;
}else if(tzIndex == 13){
gmt = 0;
}else{
gmt = - (tzIndex - 13);
}
display.fillScreen(GxEPD_BLACK); display.fillScreen(GxEPD_BLACK);
display.setTextColor(GxEPD_WHITE); display.setTextColor(GxEPD_WHITE);
@ -677,15 +674,15 @@ void Watchy::setTime() {
tm.Hour = hour; tm.Hour = hour;
tm.Minute = minute; tm.Minute = minute;
tm.Second = 0; tm.Second = 0;
gmtOffset = gmt * 3600;
if(TIMEZONES_NON_GMT_OVERRIDE == 0){ if(TIMEZONES_NON_GMT_OVERRIDE == 0){
setenv("TZ", timeZones[tzIndex].timezone, 1); setenv("TZ", timeZones[tzIndex].timezone, 1);
} else if (TIMEZONES_NON_GMT_OVERRIDE == 1) { } else{
#if TIMEZONES_NON_GMT_OVERRIDE == 1
setenv("TZ", tz_override.timezone, 1); setenv("TZ", tz_override.timezone, 1);
} else { #else
setenv("TZ", timeZones[TIMEZONES_SELECTED].timezone, 1); setenv("TZ", timeZones[TIMEZONES_SELECTED].timezone, 1);
#endif
} }
tzset(); tzset();
@ -834,7 +831,7 @@ weatherData Watchy::_getWeatherData(String cityID, String lat, String lon, Strin
breakTime((time_t)(int)responseObject["sys"]["sunset"], currentWeather.sunset); breakTime((time_t)(int)responseObject["sys"]["sunset"], currentWeather.sunset);
// sync NTP during weather API call and use timezone of lat & lon // sync NTP during weather API call and use timezone of lat & lon
gmtOffset = int(responseObject["timezone"]); gmtOffset = int(responseObject["timezone"]);
syncNTP(); syncNTP(gmtOffset);
} else { } else {
// http error // http error
} }
@ -1203,7 +1200,7 @@ void Watchy::showSyncNTP() {
display.println(gmtOffset); display.println(gmtOffset);
display.display(true); // full refresh display.display(true); // full refresh
if (connectWiFi()) { if (connectWiFi()) {
if (syncNTP()) { if (syncNTP(gmtOffset)) {
display.println("NTP Sync Success\n"); display.println("NTP Sync Success\n");
display.println("Current Time Is:"); display.println("Current Time Is:");

View File

@ -59,7 +59,7 @@ typedef struct watchySettings {
int8_t weatherUpdateInterval; int8_t weatherUpdateInterval;
// NTP Settings // NTP Settings
String ntpServer; String ntpServer;
int gmtOffset; long gmtOffset;
// //
bool vibrateOClock; bool vibrateOClock;
} watchySettings; } watchySettings;

View File

@ -64,7 +64,6 @@ void Watchy32KRTC::set(tmElements_t tm) {
timeInfo.tm_hour = tm.Hour; timeInfo.tm_hour = tm.Hour;
timeInfo.tm_min = tm.Minute; timeInfo.tm_min = tm.Minute;
timeInfo.tm_sec = tm.Second; timeInfo.tm_sec = tm.Second;
// Convert tm to timeval // Convert tm to timeval
struct timeval tv; struct timeval tv;
tv.tv_sec = mktime(&timeInfo); tv.tv_sec = mktime(&timeInfo);