Skip to content

Commit 43909ec

Browse files
authored
Merge pull request #55 from Qrome/2.4
2.4
2 parents d8c2e8a + 4e6dcb3 commit 43909ec

File tree

9 files changed

+76
-16
lines changed

9 files changed

+76
-16
lines changed

marquee/GeoNamesClient.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ SOFTWARE.
2323

2424
#include "GeoNamesClient.h"
2525

26-
GeoNamesClient::GeoNamesClient(String UserName, String lat, String lon) {
27-
updateClient(UserName, lat, lon);
26+
GeoNamesClient::GeoNamesClient(String UserName, String lat, String lon, boolean useDst) {
27+
updateClient(UserName, lat, lon, useDst);
2828
}
2929

30-
void GeoNamesClient::updateClient(String UserName, String lat, String lon) {
30+
void GeoNamesClient::updateClient(String UserName, String lat, String lon, boolean useDst) {
3131
myLat = lat;
3232
myLon = lon;
3333
myUserName = UserName;
34+
isDst = useDst;
3435
}
3536

3637
float GeoNamesClient::getTimeOffset() {
@@ -79,6 +80,9 @@ float GeoNamesClient::getTimeOffset() {
7980
DynamicJsonBuffer json_buf;
8081
JsonObject& root = json_buf.parseObject(jsonArray);
8182
String offset = (const char*)root["dstOffset"];
83+
if (!isDst) {
84+
offset = (const char*)root["gmtOffset"];
85+
}
8286
// Sample time: "2018-03-19 21:22"
8387
datetime = (const char*)root["time"];
8488
Serial.println("rawOffset for " + String((const char*)root["timezoneId"]) + " is: " + offset);
@@ -193,4 +197,4 @@ String GeoNamesClient::getDay00() {
193197

194198

195199

196-
200+

marquee/GeoNamesClient.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class GeoNamesClient {
3131
String myLat = "";
3232
String myLon = "";
3333
String myUserName = "";
34+
boolean isDst = true; // Daylight Savings Time
3435

3536
int hours = 0;
3637
int minutes = 0;
@@ -39,8 +40,8 @@ class GeoNamesClient {
3940
const char* servername = "api.geonames.org"; // remote server we will connect to
4041

4142
public:
42-
GeoNamesClient(String UserName, String lat, String lon);
43-
void updateClient(String UserName, String lat, String lon);
43+
GeoNamesClient(String UserName, String lat, String lon, boolean useDst);
44+
void updateClient(String UserName, String lat, String lon, boolean useDst);
4445
float getTimeOffset();
4546
String getHours();
4647
String getMinutes();

marquee/NewsApiClient.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,15 @@ String NewsApiClient::cleanText(String text) {
173173
text.replace("È", "E");
174174
text.replace("Ë", "E");
175175
text.replace("Ô", "O");
176-
text.replace("Ö", "O");
176+
text.replace("Ö", "Oe");
177+
text.replace("ö", "oe");
177178
text.replace("œ", "oe");
178179
text.replace("Œ", "OE");
179180
text.replace("Ù", "U");
180181
text.replace("Û", "U");
181-
text.replace("Ü", "U");
182+
text.replace("Ü", "Ue");
183+
text.replace("ü", "ue");
184+
text.replace("Ä", "Ae");
185+
text.replace("ä", "ae");
182186
return text;
183187
}

marquee/OpenWeatherMapClient.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,41 @@ String OpenWeatherMapClient::getError() {
228228
return weathers[0].error;
229229
}
230230

231+
String OpenWeatherMapClient::getWeekDay(int index, float offset) {
232+
String rtnValue = "";
233+
long epoc = weathers[index].dt.toInt();
234+
long day = 0;
235+
if (epoc != 0) {
236+
day = (((epoc + (3600 * (int)offset)) / 86400) + 4) % 7;
237+
switch (day) {
238+
case 0:
239+
rtnValue = "Sunday";
240+
break;
241+
case 1:
242+
rtnValue = "Monday";
243+
break;
244+
case 2:
245+
rtnValue = "Tuesday";
246+
break;
247+
case 3:
248+
rtnValue = "Wednesday";
249+
break;
250+
case 4:
251+
rtnValue = "Thursday";
252+
break;
253+
case 5:
254+
rtnValue = "Friday";
255+
break;
256+
case 6:
257+
rtnValue = "Saturday";
258+
break;
259+
default:
260+
break;
261+
}
262+
}
263+
return rtnValue;
264+
}
265+
231266
String OpenWeatherMapClient::getWeatherIcon(int index)
232267
{
233268
int id = getWeatherId(index).toInt();

marquee/OpenWeatherMapClient.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,6 @@ class OpenWeatherMapClient {
8181
String getMyCityIDs();
8282
String getWeatherIcon(int index);
8383
String getError();
84+
String getWeekDay(int index, float offset);
8485
};
8586

marquee/Settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ int CityIDs[] = { 5304391 }; //Only USE ONE for weather marquee
6464
String marqueeMessage = "";
6565
boolean IS_METRIC = false; // false = Imperial and true = Metric
6666
boolean IS_24HOUR = false; // 23:00 millitary 24 hour clock
67+
boolean IS_DST = true; // Does your TimeZone use Daylight Savings Time (DST)?
6768
const int WEBSERVER_PORT = 80; // The port you can access this device on over HTTP
6869
const boolean WEBSERVER_ENABLED = true; // Device will provide a web interface via http://[ip]:[port]/
6970
boolean IS_BASIC_AUTH = true; // Use Basic Authorization for Configuration security on Web Interface

marquee/TimeClient.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,5 @@ long TimeClient::getCurrentEpoch() {
150150
long TimeClient::getCurrentEpochWithUtcOffset() {
151151
return round(getCurrentEpoch() + 3600 * myUtcOffset + 86400L) % 86400L;
152152
}
153+
154+

marquee/TimeClient.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,5 @@ class TimeClient {
5757
String getAmPmFormattedTime();
5858
long getCurrentEpoch();
5959
long getCurrentEpochWithUtcOffset();
60-
6160
};
6261

marquee/marquee.ino

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ SOFTWARE.
2727

2828
#include "Settings.h"
2929

30-
#define VERSION "2.3"
30+
#define VERSION "2.4"
3131

3232
#define HOSTNAME "CLOCK-"
3333
#define CONFIG "/conf.txt"
@@ -69,7 +69,7 @@ boolean displayOn = true;
6969
boolean timeOffsetFetched = false;
7070

7171
// GeoNames
72-
GeoNamesClient geoNames(GEONAMES_USER, "", "");
72+
GeoNamesClient geoNames(GEONAMES_USER, "", "", IS_DST);
7373

7474
// News Client
7575
NewsApiClient newsClient(NEWS_API_KEY, NEWS_SOURCE);
@@ -107,7 +107,8 @@ String CHANGE_FORM1 = "<form class='w3-container' action='/locations' method='ge
107107
"<p><input name='showcondition' class='w3-check w3-margin-top' type='checkbox' %CONDITION_CHECKED%> Display Weather Condition</p>"
108108
"<p><input name='showhumidity' class='w3-check w3-margin-top' type='checkbox' %HUMIDITY_CHECKED%> Display Humidity</p>"
109109
"<p><input name='showwind' class='w3-check w3-margin-top' type='checkbox' %WIND_CHECKED%> Display Wind</p>"
110-
"<p><input name='is24hour' class='w3-check w3-margin-top' type='checkbox' %IS_24HOUR_CHECKED%> Use 24 Hour Clock (military time)</p>";
110+
"<p><input name='is24hour' class='w3-check w3-margin-top' type='checkbox' %IS_24HOUR_CHECKED%> Use 24 Hour Clock (military time)</p>"
111+
"<p><input name='isDST' class='w3-check w3-margin-top' type='checkbox' %IS_DST_CHECKED%> Use DST (Daylight Savings Time)</p>";
111112

112113
String CHANGE_FORM2 = "<p><input name='displayadvice' class='w3-check w3-margin-top' type='checkbox' %ADVICECHECKED%> Display Advice</p>"
113114
"<p><label>Marquee Message (up to 60 chars)</label><input class='w3-input w3-border w3-margin-bottom' type='text' name='marqueeMsg' value='%MSG%' maxlength='60'></p>"
@@ -308,7 +309,7 @@ void loop() {
308309

309310
if (timeClient.getHours() == "00" && timeClient.getMinutes() == "00" && timeClient.getSeconds() == "00") {
310311
// Exactly Midnight -- fetch a new geoNames for updating the Date and time offset
311-
geoNames.updateClient(GEONAMES_USER, weatherClient.getLat(0), weatherClient.getLon(0));
312+
geoNames.updateClient(GEONAMES_USER, weatherClient.getLat(0), weatherClient.getLon(0), IS_DST);
312313
UtcOffset = geoNames.getTimeOffset();
313314
}
314315

@@ -343,6 +344,7 @@ void loop() {
343344
msg += " ";
344345

345346
if (SHOW_DATE) {
347+
msg += weatherClient.getWeekDay(0, UtcOffset) + ", ";
346348
msg += geoNames.getMonthName() + " " + geoNames.getDay(false) + " ";
347349
}
348350
if (SHOW_CITY) {
@@ -489,6 +491,7 @@ void handleLocations() {
489491
CityIDs[0] = server.arg("city1").toInt();
490492
ADVICE_ENABLED = server.hasArg("displayadvice");
491493
IS_24HOUR = server.hasArg("is24hour");
494+
IS_DST = server.hasArg("isDST");
492495
SHOW_DATE = server.hasArg("showdate");
493496
SHOW_CITY = server.hasArg("showcity");
494497
SHOW_CONDITION = server.hasArg("showcondition");
@@ -744,6 +747,11 @@ void handleConfigure() {
744747
is24hourChecked = "checked='checked'";
745748
}
746749
form.replace("%IS_24HOUR_CHECKED%", is24hourChecked);
750+
String isDstChecked = "";
751+
if (IS_DST) {
752+
isDstChecked = "checked='checked'";
753+
}
754+
form.replace("%IS_DST_CHECKED%", isDstChecked);
747755
String checked = "";
748756
if (IS_METRIC) {
749757
checked = "checked='checked'";
@@ -849,7 +857,7 @@ void getWeatherData() //client function to send/receive GET request data.
849857
// we need to get offsets
850858
centerPrint("....");
851859
timeOffsetFetched = true;
852-
geoNames.updateClient(GEONAMES_USER, weatherClient.getLat(0), weatherClient.getLon(0));
860+
geoNames.updateClient(GEONAMES_USER, weatherClient.getLat(0), weatherClient.getLon(0), IS_DST);
853861
UtcOffset = geoNames.getTimeOffset();
854862
timeClient.setUtcOffset(UtcOffset);
855863
}
@@ -979,7 +987,7 @@ void displayWeatherData() {
979987
}
980988

981989
timeClient.setUtcOffset(getTimeOffset());
982-
String time = geoNames.getMonthName() + " " + geoNames.getDay(false) + ", " + timeClient.getAmPmFormattedTime();
990+
String time = weatherClient.getWeekDay(0, UtcOffset) + ", " + geoNames.getMonthName() + " " + geoNames.getDay(false) + ", " + timeClient.getAmPmFormattedTime();
983991

984992
Serial.println(weatherClient.getCity(0));
985993
Serial.println(weatherClient.getCondition(0));
@@ -1071,7 +1079,7 @@ float getTimeOffset() {
10711079
// we need to get offsets
10721080
timeOffsetFetched = true;
10731081

1074-
geoNames.updateClient(GEONAMES_USER, weatherClient.getLat(0), weatherClient.getLon(0));
1082+
geoNames.updateClient(GEONAMES_USER, weatherClient.getLat(0), weatherClient.getLon(0), IS_DST);
10751083
UtcOffset = geoNames.getTimeOffset();
10761084

10771085
return UtcOffset;
@@ -1218,6 +1226,7 @@ String writeCityIds() {
12181226
f.println("newsApiKey=" + NEWS_API_KEY);
12191227
f.println("isAdvice=" + String(ADVICE_ENABLED));
12201228
f.println("is24hour=" + String(IS_24HOUR));
1229+
f.println("isDST=" + String(IS_DST));
12211230
f.println("wideclockformat=" + Wide_Clock_Style);
12221231
f.println("isMetric=" + String(IS_METRIC));
12231232
f.println("refreshRate=" + String(minutesBetweenDataRefresh));
@@ -1283,6 +1292,10 @@ void readCityIds() {
12831292
IS_24HOUR = line.substring(line.lastIndexOf("is24hour=") + 9).toInt();
12841293
Serial.println("IS_24HOUR=" + String(IS_24HOUR));
12851294
}
1295+
if (line.indexOf("isDST=") >= 0) {
1296+
IS_DST = line.substring(line.lastIndexOf("isDST=") + 6).toInt();
1297+
Serial.println("IS_DST=" + String(IS_DST));
1298+
}
12861299
if (line.indexOf("wideclockformat=") >= 0) {
12871300
Wide_Clock_Style = line.substring(line.lastIndexOf("wideclockformat=") + 16);
12881301
Wide_Clock_Style.trim();

0 commit comments

Comments
 (0)