We are planning to connect several thousands of LoRaWAN connected water meters. The expected battery life time is 8+ years. Our concern is that meter suppliers are releasing new firmware version including bug fixes quite often (~ in every 6 month) so we cannot afford not updating the firmware of our devices for a period of 8 years. Is there any way to update device's firmware over a LoRaWAN network? We are operating a ThingPark network server.
Yes, firmware updates are a big issue with LPWAN networks, because they do not have the downlink capacity to do device-per-device full firmware updates as you can do using e.g.: Bluetooth or WiFi.
However, there is a good solution for that leveraging the fact that (1) often new Fw updates are only patches and (2) many devices require the same update.
The ThingPark platform has a module that provides reliable multicast (RMC server), allowing you to broadcast a given file to multiple radio cells at once (the multicast group is created by flagging radio cells). you can combine it with another feature of this server to automatically compute a delta patch (ThigPark FUOTA, https://www.actility.com/iot-device-firmware-update-over-the-air/), i.e. compress the new FW by sending only updates. This is actually very complex because even small patches can change pointers all over in the code... but ThingPark FUOTA does a good job at this and will typically deflate your new Fw by ~85-90%. You can create upgrade campaigns and follow progress in terms of % of devices upgraded. It automatically stops when a given success rate (e.g. 95%) is reached, and then you can restart campaigns for only the failed devices, or use other methods (e.g. on site visits and BLE) for the devices that are unreachable.
The reliable multicast part is a LoRa Alliance standard (supported by ThingPark RMC), but the delta patch isn't, so you need support in your firmware for this, but the good news is that it is available for free if you use FUOTA and there is an optimized implementation for STM MCUs (for other ports you can ask Actility). You can find the documentation and pointer to the client side GIT here: https://www.actility.com/thingpark-documentation-portal/