mirror of https://github.com/arendst/Tasmota.git
26 lines
794 B
C++
26 lines
794 B
C++
|
#include "Cosem.h"
|
||
|
#include "lwip/def.h"
|
||
|
#include "TimeLib.h"
|
||
|
|
||
|
|
||
|
time_t decodeCosemDateTime(CosemDateTime timestamp) {
|
||
|
tmElements_t tm;
|
||
|
uint16_t year = ntohs(timestamp.year);
|
||
|
if(year < 1970) return 0;
|
||
|
tm.Year = year - 1970;
|
||
|
tm.Month = timestamp.month;
|
||
|
tm.Day = timestamp.dayOfMonth;
|
||
|
tm.Hour = timestamp.hour;
|
||
|
tm.Minute = timestamp.minute;
|
||
|
tm.Second = timestamp.second;
|
||
|
|
||
|
//Serial.printf("\nY: %d, M: %d, D: %d, h: %d, m: %d, s: %d, deviation: 0x%2X, status: 0x%1X\n", tm.Year, tm.Month, tm.Day, tm.Hour, tm.Minute, tm.Second, timestamp.deviation, timestamp.status);
|
||
|
|
||
|
time_t time = makeTime(tm);
|
||
|
int16_t deviation = ntohs(timestamp.deviation);
|
||
|
if(deviation >= -720 && deviation <= 720) {
|
||
|
time -= deviation * 60;
|
||
|
}
|
||
|
return time;
|
||
|
}
|