I have problem with offline mode because when I read date from RTC after a "manual update" this is wrong, the time is correct but date is wrong about 52 years.
This is an extract of my code:
// convert string to time_t (input as "07/08/2019 06:00")
time_t createTimeFromString(const char *str) {
TimeElements te;
te.Year = CalendarYrToTm((str[6] - '0') * 1000 + (str[7] - '0') * 100 + (str[8] - '0') * 10 + (str[9] - '0'));
te.Month = (str[3] - '0') * 10 + (str[2] - '0');
te.Day = (str[0] - '0') * 10 + (str[1] - '0');
te.Hour = (str[11] - '0') * 10 + (str[12] - '0');
te.Minute = (str[14] - '0') * 10 + (str[15] - '0');
te.Second = 0;
return makeTime(te);
}
// convert string to char
char* string2char(String command) {
if (command.length() != 0) {
char *p = const_cast<char*>(command.c_str());
return p;
}
}
void setup() {
tmElements_t tm;
if (RTC.read(tm)) {
setSyncProvider(RTC.get);
Log(LOG_LEVEL_VERBOSE, "Datetime from RTC: " + digits2string(day()) + "/" + digits2string(month()) + "/" + year() + " " + digits2string(hour()) + ":" + digits2string(minute()) + ":" + digits2string(second()));
} else {
Log(LOG_LEVEL_ERROR, "RTC not found");
}
}
This code update manually the datetime:
// example NEW_date = "07/08/2019" and NEW_time = "06:00" from HTML form
RTC.set(createTimeFromString(string2char(NEW_date + " " + NEW_time)));
setSyncProvider(RTC.get);
After this if I try to print the datetime I get right time but wrong date (days, months and years are wrong of about +52 years):
Log(LOG_LEVEL_VERBOSE, "Datetime from RTC: " + digits2string(day()) + "/" + digits2string(month()) + "/" + year() + " " + digits2string(hour()) + ":" + digits2string(minute()) + ":" + digits2string(second()));
I have control data sent from HTML form, and result of createTimeFromString function.
RTC have a new battery.
I used these libraries:
https://github.com/PaulStoffregen/DS1307RTC
https://github.com/PaulStoffregen/Time
Some idea?