MCPcopy Create free account
hub / github.com/UtilitechAS/amsreader-firmware / update

Method update

lib/AmsDataStorage/src/AmsDataStorage.cpp:29–314  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

27}
28
29bool AmsDataStorage::update(AmsData* data, time_t now) {
30 if(isHappy(now)) {
31 #if defined(AMS_REMOTE_DEBUG)
32 if (debugger->isActive(RemoteDebug::DEBUG))
33 #endif
34 debugger->printf_P(PSTR("Happy, not updating\n"));
35 return false;
36 }
37
38 if(tz == NULL) {
39 #if defined(AMS_REMOTE_DEBUG)
40 if (debugger->isActive(RemoteDebug::DEBUG))
41 #endif
42 debugger->printf_P(PSTR("No timezone, not updating\n"));
43 return false;
44 }
45 if(now < FirmwareVersion::BuildEpoch) {
46 if(data->getMeterTimestamp() > FirmwareVersion::BuildEpoch) {
47 now = data->getMeterTimestamp();
48 } else if(data->getPackageTimestamp() > FirmwareVersion::BuildEpoch) {
49 now = data->getPackageTimestamp();
50 }
51 }
52 if(now < FirmwareVersion::BuildEpoch) {
53 #if defined(AMS_REMOTE_DEBUG)
54 if (debugger->isActive(RemoteDebug::DEBUG))
55 #endif
56 debugger->printf_P(PSTR("Before build time, not updating\n"));
57 return false;
58 }
59
60 tmElements_t utc, ltz, utcYesterday, ltzYesterDay;
61 breakTime(now, utc);
62 breakTime(tz->toLocal(now), ltz);
63 breakTime(now-3600, utcYesterday);
64 breakTime(tz->toLocal(now-3600), ltzYesterDay);
65
66 uint64_t importCounter = data->getActiveImportCounter() * 1000;
67 uint64_t exportCounter = data->getActiveExportCounter() * 1000;
68
69 // Clear hours between last update and now
70 if(!isDayHappy(now) && day.lastMeterReadTime > now) {
71 #if defined(AMS_REMOTE_DEBUG)
72 if (debugger->isActive(RemoteDebug::DEBUG))
73 #endif
74 debugger->printf_P(PSTR("Day was updated in the future, resetting\n"));
75 day.activeImport = importCounter;
76 day.activeExport = exportCounter;
77 day.lastMeterReadTime = now;
78 } else if(importCounter > 0 && day.activeImport == 0) {
79 #if defined(AMS_REMOTE_DEBUG)
80 if (debugger->isActive(RemoteDebug::DEBUG))
81 #endif
82 debugger->printf_P(PSTR("Initializing day data\n"));
83 day.activeImport = importCounter;
84 day.activeExport = exportCounter;
85 day.lastMeterReadTime = now;
86 for(int i = 0; i<24; i++) {

Callers

nothing calls this directly

Calls 5

getMeterTimestampMethod · 0.80
getPackageTimestampMethod · 0.80
getListTypeMethod · 0.80

Tested by

no test coverage detected