Electron on 0.5.4 enters safe mode autonomously (trying to account for behavior)

Hello,

I am trying to get an understanding of when the Electron can enter safe mode without user input (i.e. there are no buttons being pressed like holding MODE nor is anyone trying to OTA or DFU the board).

We have units deployed in the field, electrons on 0.5.4 release. The system has an external microcontroller acting as a watchdog and the Electron has it’s own power source in the form of a 2,500mAh LIPO cell plugged into the JST port.

We have 10 units deployed, and every few weeks we have a unit or two enter into SAFE-MODE according to the cloud platform. I travel the 1-2 hours out to these units press RESET and boom, we’re back in Business (flashes white, flashes green, flashes cyan, back to sleep). I am wondering why our units might be doing this? They are meant to wake up every 12 hours, we use HIGH signal on the WK pin to wakeup the Electron. We know the timer works but we also sometimes get a day or two where a unit will check in with the cloud but Particle REST service will not fire anything to our POST API.

My summary questions:

  1. Why might an Electron stop waking up even though it has plenty of battery and the external timer is working perfectly.

  2. Why might the Particle External API service not get triggered despite the fact that a device posts to a topic where the Rule Engine has been told to fire a POST if there is a new message in that topic.

// -----------------------------------------
// Publish and Dashboard with Depth
// -----------------------------------------
int depth = A0; 
char publishString[40];

void setup() {
    pinMode(depth,INPUT);  // Our depth pin is input (reading the sensor)
}

void loop() {
    FuelGauge fuel;
    float batt;
    batt = fuel.getVCell();
    String batt_string = String(batt);
    Particle.publish("battery", batt_string);
    int value = analogRead(depth);
    sprintf(publishString, "%d", value );
    Particle.publish("depth",publishString);
    Particle.publish("binary","blucloud-logger-battery")
    System.sleep(SLEEP_MODE_DEEP); //wk pin on Electron :: D8 on Boron
}

Thanks.