How to remotely reset Electron?

I can’t seem to flash new firmware OTA to my remotely installed Electron, think I goofed and locked it up with bad firmware a few moments prior. The Particle Console says (even after a couple hrs):

The cellular session was reported as active, but your device was unreachable by the Device Cloud. This discrepancy is likely due to latency in session data reported by cellular carriers, which causes these tests to temporarily become out-of-sync. This issue normally resolves itself within a few minutes.

Any way to address this without having to make a day trip out to the device (which has had great signal and device vitals for over a year)? I plan to put a few more of these out there too…

By the way device vitals moments prior were A-OK (95% battery, as I read initial cellular connectivity takes some serious juice in terms of uControllers, like up to ~2A right?).

If you have put user firmware on it that prevents it from properly accessing the device cloud, there is no way you can reset it remotely, and frankly, there is a good chance a reset alone might not fix it (might need to reflash over usb).

This could be due to a number of reasons, and we’d need more info about your code to address that. Blocking code in the application firmware in single threaded mode can definitely prevent proper operation.

That said, is the last handshake time on the Particle console from earlier, or is that somewhat recent? If it is connecting periodically but just not staying connected you may be able to update it by using a Particle Product and making a firmware “release” that is auto flashed on next connection. May be a long shot though.

So it’s a been a while and I’ve got some updates

First, I tried the Particle Product route - great idea, I wasn’t using this yet (for those that don’t know, basically control firmware deployments to specific device types and IDs; ex code to run on an Electron vs. Photon, then target specific devices by name).

-> Unfortunately that didn’t work since I really locked it up.

But I ended up going in person and put device in “safe mode” (hold “mode”, press “reset”, wait for blinking magenta then release) - and device upgraded to the firmware I assigned it weeks prior.

->In short, soon as I interrupted the frozen state it connected to the cloud it took off
-> Fun fact, sounds like this doesn’t always happen immediately (as in properly running devices may not upgrade firmware right away yet even if you assign/lock it to them in Particle Products)

Additional notes, I tried to use
SYSTEM_THREAD(ENABLED)
in my code but (as described) find that I miss out on some tx/rx action in my code (since device task switches between my application execution and system execution). Seems like I could use
SINGLE_THREADED_BLOCK()
for code that I want to run without a break but haven’t gone that far.

Let me know if I missed something, cheers!

Oh my God, seems like
ApplicationWatchdog
might solve everything. :slight_smile:

1 Like

It does offer a mixed bag - if your app is squeaky clean and behaves all the time - then it works really well. If you invoke something that causes DeviceOS to lock up then it does not reset the device …

3 Likes