There are several locations where we have Borons and Muon devices installed that are unable to connect to the local cellular network. We have tried antenna repositioning, etc but we consistently have about 10% of our fleet offline persistently.
Each of our devices is installed in a location where it communicates via BLE to an Android smart phone on-site. The Android smart phones at these sites all have no problem connecting (they have local SIM cards, better reception, etc).
We have a proof-of-concept working where we can get these android devices to relay webhooks from the particle devices directly to our server when cellular network in not available. That works fine.
My question is regarding how to manage firmware updates on these devices. If they cannot connect to the Particle Cloud, then they can’t download OTA updates to begin with. This means that we can only flash these devices using either a USB cable (not good - these devices are in remote African villages hundreds of kms away), or else implement a system where the Android device is able to cache a binary file (plus asset binaries for coprocessors) to send to the Particle Device over BLE.
My idea is that I could get my app to do this:
- Wait for Android phone to pair with Particle device
- Download new app from Android device into the OTA changeover section of Particle device flash memory via BLE
- Verify new app (check CRC against one reported by Android)
- Apply new app (I presume this is accomplished through some kind of Particle Device OS bootloader magic?)
- After new app launches, reconnect to the android device via BLE and download coprocessor assets to app changeover region
- Launch app (for real this time, with assets in place)
Basically duplicating the OTA cellular process used by Particle OS when downloading an OTA update, except using BLE instead…
@rickkas7 I think you have investigate similar ideas previously, can you provide an opinion or recommendation on a path forward here?