39 static bool enableAttemptedThisOpenWindow =
false;
43 enableAttemptedThisOpenWindow =
false;
45 enableAttemptedThisOpenWindow =
true;
56 Log.info(
"CONNECTED mode: park CLOSED - transitioning to SLEEPING_STATE for overnight sleep");
69 static time_t lastScheduledSample = 0;
70 uint16_t intervalSec =
sysStatus.get_reportingInterval();
71 if (intervalSec == 0) {
75 time_t now = Time.now();
76 if (lastScheduledSample == 0 || (now - lastScheduledSample) >= intervalSec) {
78 Log.info(
"Scheduled trigger sample - battery SoC: %4.2f%%", (
double)
current.get_stateOfCharge());
79 lastScheduledSample = now;
90 if (PublishQueuePosix::instance().getCanSleep() &&
91 PublishQueuePosix::instance().getNumEvents() == 0) {
92 Log.info(
"First connection queue drained - all pending events flushed");
101 uint16_t intervalSec =
sysStatus.get_reportingInterval();
102 if (intervalSec == 0) {
106 time_t now = Time.now();
107 time_t lastReport =
sysStatus.get_lastReport();
108 if (lastReport == 0 || (now - lastReport) >= intervalSec) {
109 int secondsOverdue = (lastReport == 0) ? 0 : (int)(now - lastReport - intervalSec);
110 if (secondsOverdue > 0) {
111 Log.info(
"IDLE: Report overdue by %d seconds - transitioning to REPORTING_STATE", secondsOverdue);
113 Log.info(
"IDLE: Scheduled report interval reached - transitioning to REPORTING_STATE");
126 uint16_t budgetSec =
sysStatus.get_connectAttemptBudgetSec();
127 if (budgetSec >= 30 && budgetSec <= 900) {
129 unsigned long budgetMs = (
unsigned long)budgetSec * 1000UL;
130 if (connectedMs > budgetMs) {
131 Log.info(
"Connection timeout (%lu ms > %lu ms) - returning to sleep",
132 (
unsigned long)connectedMs, (
unsigned long)budgetMs);
145 bool updatesPending = System.updatesPending();
153 bool canSleepGate =
true;
154 if (Particle.connected()) {
155 canSleepGate = PublishQueuePosix::instance().getCanSleep();
158 if (!updatesPending && canSleepGate) {
168 size_t pending = PublishQueuePosix::instance().getNumEvents();
169 if (!Particle.connected() && pending > 0) {
170 Log.info(
"Low-power idle: offline with %u queued event(s) - sleeping and will flush on next connect",
173 Log.info(
"Low-power idle: queue drained and no updates pending - entering SLEEPING_STATE");