21 time_t now = Time.now();
25 time_t lastReport =
sysStatus.get_lastReport();
26 if (lastReport != 0) {
27 LocalTimeConvert convNow;
28 convNow.withConfig(LocalTime::instance().getConfig()).withTime(now).convert();
29 LocalTimeConvert convLast;
30 convLast.withConfig(LocalTime::instance().getConfig()).withTime(lastReport).convert();
32 LocalTimeYMD ymdNow = convNow.getLocalTimeYMD();
33 LocalTimeYMD ymdLast = convLast.getLocalTimeYMD();
35 if (ymdNow.getYear() != ymdLast.getYear() ||
36 ymdNow.getMonth() != ymdLast.getMonth() ||
37 ymdNow.getDay() != ymdLast.getDay()) {
38 Log.info(
"New local day detected (last=%04d-%02d-%02d, current=%04d-%02d-%02d) - running dailyCleanup",
39 ymdLast.getYear(), ymdLast.getMonth(), ymdLast.getDay(),
40 ymdNow.getYear(), ymdNow.getMonth(), ymdNow.getDay());
55 Log.info(
"Enclosure temperature at report: %4.2f C", (
double)
current.get_internalTempC());
61 Log.info(
"Resetting hourlyCount after report (was %d)",
current.get_hourlyCount());
73 time_t lastHook =
sysStatus.get_lastHookResponse();
74 if (lastHook != 0 && (now - lastHook) > (6 * 3600L)) {
75 Log.info(
"No successful webhook response for >6 hours (last=%ld, now=%ld) - raising alert 40",
76 (
long)lastHook, (
long)now);
80 time_t lastHook =
sysStatus.get_lastHookResponse();
81 if (lastHook != 0 && (now - lastHook) > (6 * 3600L)) {
82 Log.info(
"Webhook timeout detected after power mgmt wake - suppressing alert 40 (expected behavior)");
89 if (!Particle.connected()) {
90 Log.info(
"REPORTING: Not connected - reason=SCHEDULED_REPORT transitioning to CONNECTING_STATE");
101 if (
current.get_alertCode() == 40) {
102 Log.info(
"Alert 40 active after report - continuing normal state flow (no immediate ERROR_STATE)");