@All,
With the release of deviceOS@2.2.0, I am making an effort to bring all of my devices onto the same firmware and deviceOS releases. Previously, I had allowed devices deemed "low bandwidth" to stay on deviceOS@2.0.1 as I did not see the benefit in 2.1.0 but there are some indications (such as resetting DTLS sessions) that that 2.2.0 will be worth the effort.
So, here is the issue: Too many of the Intelligent OTA updates fail for low-bandwidth devices and I am wondering if there are some steps I could take to address this. This issue is impacting about 15% of my deployed devices (mainly rural state parks). Importantly, these devices function acceptably in daily operation, they just don't seem to have the bandwidth to update.
Here is what a typical failure looks like:
These devices use the AB1805 Watchdog timer as outlined in this application note:
https://docs.particle.io/datasheets/app-notes/an023-watchdog-timers/
and I am wondering if this issue could be related to the watchdog timer resetting the device during the update process. I have struggled to come up with a concrete method to prove this given the remote and intermittent nature of the update process.
I use a finite state machine approach in my code, should I add an "FIRMWARE_UPDATE" state to my state machine? In this state, we would:
- Disable the watchdog timer
- Set an application timer to set an upper limit on the update
- Keep track of failed attempts and stop trying at some point and sending an alert to my back-end. This is important for folks like me that are still on the old data plan as failed updates consume data. My understanding is that in the new data operations plans, failed updates don't have a financial repercussion but they do consume battery. Does this make sense?
@rickkas7 has such a state in this application note but it does not account for the watchdog or the "stop trying after x failed attempts" counter.
https://docs.particle.io/datasheets/app-notes/an029-wake-publish-sleep-cellular/
If anyone has thoughts or experience on this, I would love to hear from you. If not, here is my plan:
- develop a new release for my low bandwidth devices with a "FIRMWARE_UPDATE" state
- deploy this update to the low-bandwidth devices on deviceOS@2.0.1 so they will only have to update my sketch.
- Bring them into the main line production release including deviceOS@2.2.0 and the latest firmware
Make sense? Thoughts?
Thanks, Chip