diff --git a/marquee/GeoNamesClient.cpp b/marquee/GeoNamesClient.cpp index c063659..9dae47f 100644 --- a/marquee/GeoNamesClient.cpp +++ b/marquee/GeoNamesClient.cpp @@ -23,14 +23,15 @@ SOFTWARE. #include "GeoNamesClient.h" -GeoNamesClient::GeoNamesClient(String UserName, String lat, String lon) { - updateClient(UserName, lat, lon); +GeoNamesClient::GeoNamesClient(String UserName, String lat, String lon, boolean useDst) { + updateClient(UserName, lat, lon, useDst); } -void GeoNamesClient::updateClient(String UserName, String lat, String lon) { +void GeoNamesClient::updateClient(String UserName, String lat, String lon, boolean useDst) { myLat = lat; myLon = lon; myUserName = UserName; + isDst = useDst; } float GeoNamesClient::getTimeOffset() { @@ -79,6 +80,9 @@ float GeoNamesClient::getTimeOffset() { DynamicJsonBuffer json_buf; JsonObject& root = json_buf.parseObject(jsonArray); String offset = (const char*)root["dstOffset"]; + if (!isDst) { + offset = (const char*)root["gmtOffset"]; + } // Sample time: "2018-03-19 21:22" datetime = (const char*)root["time"]; Serial.println("rawOffset for " + String((const char*)root["timezoneId"]) + " is: " + offset); @@ -193,4 +197,4 @@ String GeoNamesClient::getDay00() { - + diff --git a/marquee/GeoNamesClient.h b/marquee/GeoNamesClient.h index 6a99c36..82d0dbf 100644 --- a/marquee/GeoNamesClient.h +++ b/marquee/GeoNamesClient.h @@ -31,6 +31,7 @@ class GeoNamesClient { String myLat = ""; String myLon = ""; String myUserName = ""; + boolean isDst = true; // Daylight Savings Time int hours = 0; int minutes = 0; @@ -39,8 +40,8 @@ class GeoNamesClient { const char* servername = "api.geonames.org"; // remote server we will connect to public: - GeoNamesClient(String UserName, String lat, String lon); - void updateClient(String UserName, String lat, String lon); + GeoNamesClient(String UserName, String lat, String lon, boolean useDst); + void updateClient(String UserName, String lat, String lon, boolean useDst); float getTimeOffset(); String getHours(); String getMinutes(); diff --git a/marquee/NewsApiClient.cpp b/marquee/NewsApiClient.cpp index 5c091d7..d8f5ad1 100644 --- a/marquee/NewsApiClient.cpp +++ b/marquee/NewsApiClient.cpp @@ -173,11 +173,15 @@ String NewsApiClient::cleanText(String text) { text.replace("È", "E"); text.replace("Ë", "E"); text.replace("Ô", "O"); - text.replace("Ö", "O"); + text.replace("Ö", "Oe"); + text.replace("ö", "oe"); text.replace("œ", "oe"); text.replace("Œ", "OE"); text.replace("Ù", "U"); text.replace("Û", "U"); - text.replace("Ü", "U"); + text.replace("Ü", "Ue"); + text.replace("ü", "ue"); + text.replace("Ä", "Ae"); + text.replace("ä", "ae"); return text; } diff --git a/marquee/OpenWeatherMapClient.cpp b/marquee/OpenWeatherMapClient.cpp index bbd8074..a5ce8f3 100644 --- a/marquee/OpenWeatherMapClient.cpp +++ b/marquee/OpenWeatherMapClient.cpp @@ -228,6 +228,41 @@ String OpenWeatherMapClient::getError() { return weathers[0].error; } +String OpenWeatherMapClient::getWeekDay(int index, float offset) { + String rtnValue = ""; + long epoc = weathers[index].dt.toInt(); + long day = 0; + if (epoc != 0) { + day = (((epoc + (3600 * (int)offset)) / 86400) + 4) % 7; + switch (day) { + case 0: + rtnValue = "Sunday"; + break; + case 1: + rtnValue = "Monday"; + break; + case 2: + rtnValue = "Tuesday"; + break; + case 3: + rtnValue = "Wednesday"; + break; + case 4: + rtnValue = "Thursday"; + break; + case 5: + rtnValue = "Friday"; + break; + case 6: + rtnValue = "Saturday"; + break; + default: + break; + } + } + return rtnValue; +} + String OpenWeatherMapClient::getWeatherIcon(int index) { int id = getWeatherId(index).toInt(); diff --git a/marquee/OpenWeatherMapClient.h b/marquee/OpenWeatherMapClient.h index 20badbd..0f7b442 100644 --- a/marquee/OpenWeatherMapClient.h +++ b/marquee/OpenWeatherMapClient.h @@ -81,5 +81,6 @@ class OpenWeatherMapClient { String getMyCityIDs(); String getWeatherIcon(int index); String getError(); + String getWeekDay(int index, float offset); }; diff --git a/marquee/Settings.h b/marquee/Settings.h index 2945dea..43aa6fb 100644 --- a/marquee/Settings.h +++ b/marquee/Settings.h @@ -64,6 +64,7 @@ int CityIDs[] = { 5304391 }; //Only USE ONE for weather marquee String marqueeMessage = ""; boolean IS_METRIC = false; // false = Imperial and true = Metric boolean IS_24HOUR = false; // 23:00 millitary 24 hour clock +boolean IS_DST = true; // Does your TimeZone use Daylight Savings Time (DST)? const int WEBSERVER_PORT = 80; // The port you can access this device on over HTTP const boolean WEBSERVER_ENABLED = true; // Device will provide a web interface via http://[ip]:[port]/ boolean IS_BASIC_AUTH = true; // Use Basic Authorization for Configuration security on Web Interface diff --git a/marquee/TimeClient.cpp b/marquee/TimeClient.cpp index 84d7f1d..967e4f2 100644 --- a/marquee/TimeClient.cpp +++ b/marquee/TimeClient.cpp @@ -150,3 +150,5 @@ long TimeClient::getCurrentEpoch() { long TimeClient::getCurrentEpochWithUtcOffset() { return round(getCurrentEpoch() + 3600 * myUtcOffset + 86400L) % 86400L; } + + diff --git a/marquee/TimeClient.h b/marquee/TimeClient.h index ee36ba5..a75e52e 100644 --- a/marquee/TimeClient.h +++ b/marquee/TimeClient.h @@ -57,6 +57,5 @@ class TimeClient { String getAmPmFormattedTime(); long getCurrentEpoch(); long getCurrentEpochWithUtcOffset(); - }; diff --git a/marquee/marquee.ino b/marquee/marquee.ino index 3e28ee5..f66731d 100644 --- a/marquee/marquee.ino +++ b/marquee/marquee.ino @@ -27,7 +27,7 @@ SOFTWARE. #include "Settings.h" -#define VERSION "2.3" +#define VERSION "2.4" #define HOSTNAME "CLOCK-" #define CONFIG "/conf.txt" @@ -69,7 +69,7 @@ boolean displayOn = true; boolean timeOffsetFetched = false; // GeoNames -GeoNamesClient geoNames(GEONAMES_USER, "", ""); +GeoNamesClient geoNames(GEONAMES_USER, "", "", IS_DST); // News Client NewsApiClient newsClient(NEWS_API_KEY, NEWS_SOURCE); @@ -107,7 +107,8 @@ String CHANGE_FORM1 = "