yet another 18B20 Temperature sensor. variable number of sensors working in parasite mode, serial 16x2 display with diagnostic output and post to a rest web service
Dependencies: EthernetInterface HTTPClient NTPClient mbed-rtos mbed
local_time.cpp@1:9e88b2508768, 2013-01-03 (annotated)
- Committer:
- wkinkeldei
- Date:
- Thu Jan 03 18:50:43 2013 +0000
- Revision:
- 1:9e88b2508768
added switch sensor
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wkinkeldei | 1:9e88b2508768 | 1 | #include "local_time.h" |
wkinkeldei | 1:9e88b2508768 | 2 | |
wkinkeldei | 1:9e88b2508768 | 3 | LocalTime::LocalTime() {} |
wkinkeldei | 1:9e88b2508768 | 4 | |
wkinkeldei | 1:9e88b2508768 | 5 | struct tm *LocalTime::tm() { |
wkinkeldei | 1:9e88b2508768 | 6 | time_t seconds = time(NULL); |
wkinkeldei | 1:9e88b2508768 | 7 | |
wkinkeldei | 1:9e88b2508768 | 8 | struct tm *t = localtime(&seconds); |
wkinkeldei | 1:9e88b2508768 | 9 | if (seconds > last_sunday(t->tm_year, 3) && seconds < last_sunday(t->tm_year, 10)) { |
wkinkeldei | 1:9e88b2508768 | 10 | seconds += 7200; |
wkinkeldei | 1:9e88b2508768 | 11 | } else { |
wkinkeldei | 1:9e88b2508768 | 12 | seconds += 3600; |
wkinkeldei | 1:9e88b2508768 | 13 | } |
wkinkeldei | 1:9e88b2508768 | 14 | |
wkinkeldei | 1:9e88b2508768 | 15 | return localtime(&seconds); |
wkinkeldei | 1:9e88b2508768 | 16 | } |
wkinkeldei | 1:9e88b2508768 | 17 | |
wkinkeldei | 1:9e88b2508768 | 18 | time_t LocalTime::last_sunday(int year, int month) { |
wkinkeldei | 1:9e88b2508768 | 19 | struct tm t1; |
wkinkeldei | 1:9e88b2508768 | 20 | |
wkinkeldei | 1:9e88b2508768 | 21 | t1.tm_sec = 0; t1.tm_min = 0; t1.tm_hour = month == 10 ? 3 : 2; |
wkinkeldei | 1:9e88b2508768 | 22 | t1.tm_mday = 31; t1.tm_mon = month; t1.tm_year = year; |
wkinkeldei | 1:9e88b2508768 | 23 | |
wkinkeldei | 1:9e88b2508768 | 24 | // convert to seconds since epoch |
wkinkeldei | 1:9e88b2508768 | 25 | time_t seconds = mktime(&t1); |
wkinkeldei | 1:9e88b2508768 | 26 | |
wkinkeldei | 1:9e88b2508768 | 27 | // convert back to tm because we need to know the week day |
wkinkeldei | 1:9e88b2508768 | 28 | struct tm *t2 = localtime(&seconds); |
wkinkeldei | 1:9e88b2508768 | 29 | |
wkinkeldei | 1:9e88b2508768 | 30 | // subtract weekday to get back last sunday of month requested |
wkinkeldei | 1:9e88b2508768 | 31 | return seconds - 86400 * t2->tm_wday; |
wkinkeldei | 1:9e88b2508768 | 32 | } |