Prior to the Gen3 Outage yesterday, I’ve been testing (2) Boron LTE’s with similar user firmware on 0.9.0 for Solar Powered River (Water Level) Monitors.
Both use SYSTEM_MODE(MANUAL); & SYSTEM_THREAD(ENABLED);
, perform a NO_ACK Publish, and sleep for 1 hour with System.sleep( {}, {}, sleepTime);
.
I call System.reset();
after the Sleep Event in the hopes that the Boron can handle future problems without a physical reset, since these will be installed on the sides of bridges at remote locations.
Boron1 uses internal Particle SIM
Boron2 uses 3’rd Party SIM
I’m still testing these in my office with good results until the Outage yesterday.
However, 8 Hours after the Outage was reported “resolved”, neither Boron has successfully Published.
Both Boron’s still connect to Cellular and the Particle Cloud quickly (every hour), breathing Cyan, and go back to sleep like normal, but neither Boron’s Publish makes it to the Cloud since the Outage.
I pressed RESET button on both Borons, and still no sign of them in each Device’s Console & no publish in the Event Stream, even though they both breath cyan and go back to sleep as normal.
The Strange Part:
I briefly unplugged the Li-Po on Boron2, and it can now successfully publish again.
I haven’t unplugged Boron1 yet, in an effort to determine if it will ever Recover on it’s on without physical intervention.
What happens when removing power that doesn’t happen with a call to System.reset() after the Boron wakes up? Note: I “believe” the Modem is successfully powered-off prior to Sleeping as the Sleep Current is 1.2 mA.
Does anyone have thoughts or suggestions on how I can mitigate this problem in the future after a similar Cloud Outage ?
The two primary goals are:
- not stay awake and blow through the battery if something goes wrong (working fine so far)
- not require physical intervention at a remote site (didn’t recover after yesterday’s outage).
.
Basic Code, reduced
SYSTEM_MODE(MANUAL);
SYSTEM_THREAD(ENABLED);
int sleepTime = 60 * 60 ;
int connectionFail = 3 * 60000 ;
inline void softDelay(uint32_t t) {
for (uint32_t ms = millis(); millis() - ms < t; Particle.process());
}
void setup() {}
void loop() {
read_sensor();
Cellular.on();
softDelay(2000);
Particle.connect();
softDelay(2000);
if (waitFor(Particle.connected, connectionFail)) { // Limit the Connection attempt
Particle.publish(eventName, msg, PRIVATE, NO_ACK);
softDelay(2000);
}
Particle.disconnect();
softDelay(2000);
Cellular.off();
softDelay(3000);
System.sleep( {}, {}, sleepTime);
System.reset(); // Boron Wakes up here.... force a reset after wake.
}
Thanks in Advance.