Electorn Breathing Blue

I have data loggers I built a 6 months ago. They were all working but I had to put them on the shelf to work on other projects. I needed to put them into service and one of them will no longer work. When I power it up a get the white breathing and then it goes to a dark blue breathing, then evetualley to a blinking dark blue.

I was told it was an issue wit the sim card holder. Is this true.

I put the sim card of the bad unit into a working electron, it exhibeted the same behaviour ( breathing blue)
I then put the good sim car in to the non working election. Same issue, breathing blue.

So I put the working sim back into the working electron and it works as expected.

I tried re-flashig the firmware and also used the keys doctor but I can not get it to work. All my code is working, just no cell access. The Network On event fires and then nothing,

Do I have yet another busted Electron?

Can you try placing the electron in safe mode?

did you find a solution to this? I am having the exact same problem breathing white to breathing blue to blinking blue (listening mode) some times the electron will work but usually it does not. If I powercycle (remove battery and connect again) that seems to get it working but often that will only work once, next time that it is supposed to publish data it will go to the white-blue-blinking blue.

This is the code I am running… so basically the electron wakes up from deep sleep every 20 seconds (will be extended to longer time later) reads an analog input (water pressure sensor for water level measuring) and then depending on if the water level has changed more than the set value and if so then publish the data… It may sometimes work for the first time but usually the second time the electron will just breath white to breathing blue to blinking blue (listening mode) and the only chance to get it back is disconnect battery and connect again, but only to work for one time or so before going back to the forever blinking blue.

SYSTEM_MODE(SEMI_AUTOMATIC);
    SYSTEM_THREAD(ENABLED);
//SYSTEM_MODE(AUTOMATIC);
    char publishStr[20];
    int sleepInterval = 1;
    int maxChange = 10;  //the ammount in centimeters that the waterlevel has to change so it will be published
    int pressureSensor = A0;

    uint16_t waterlevel;
    uint16_t oldWaterlevel;
    uint32_t start;

    int led1 = D0;

    void publishData()
{
      sprintf(publishStr, "%i", waterlevel);
  //        Serial.println(publishStr);
      //    Particle.publish( publishStr, PRIVATE, NO_ACK);

  if (!Particle.connected())
  { // this is only required once on first start due to SLEEP_NETWORK_STANDBY
    // in SYSTEM_MODE(AUTOMATIC) you can get rid of that whole block too
    Cellular.on();      // just in case
    Particle.connect(); // implicitly performs a Cellular.connect()
    waitUntil(Particle.connected);
  }

  sprintf(publishStr, "%i mm", waterlevel);
  Particle.publish("Water", publishStr, PRIVATE, NO_ACK);
  // don't switch the modem off!
  // but since you are going to sleep after a publish, hang in there to let the publish finish
  for(uint32_t ms = millis(); millis() - ms < 2000; Particle.process);

    }//void publishData()

    void getWaterlevel(){
      //has not been implemented yet
      //read waterlevel sensor and put the outcome in the waterlevel integer
      digitalWrite(led1, HIGH);
      delay(10);
      waterlevel=0;
        for (int i = 0; i<10; i++) {
          waterlevel += 0.66*(analogRead(pressureSensor)-645);
        }
      waterlevel /= 10;
      digitalWrite(led1, LOW);
    //  oldWaterlevel=94; //for test purposes so that the differnce between new and old waterlevel is more than maxChange, resulting in particle.publish
    }

    void setup() {
      //nothing to setup
//      Serial.begin(9600);
        EEPROM.get(0, oldWaterlevel);               //get the last published waterlevel to be able to compare
          pinMode(led1, OUTPUT);
    }//setup()

    void loop() {


  //    EEPROM.get(0, oldWaterlevel);               //get the last published waterlevel to be able to compare
      getWaterlevel();                                        //get new waterlevel
      if (abs(waterlevel-oldWaterlevel)>maxChange){           //publish data if waterlevel has changed by more than maxChange
        publishData();
        oldWaterlevel=waterlevel;
        EEPROM.put(0, waterlevel);                            //safe Waterlevel in EEProm because deep sleep will reset the MCU
        }
  //    System.sleep(SLEEP_MODE_DEEP,20 * sleepInterval);       //go to Deep sleep for "sleepInterval" minutes
    System.sleep(SLEEP_MODE_SOFTPOWEROFF,20 * sleepInterval);

    }//loop