FUOTA API Overview
The MachineQ FUOTA (Firmware Update Over The Air) server sends firmware updates to one or many LoRaWAN devices. This page introduces the responsibilities split between the server and the target device, the LoRa Alliance packages the server implements, and the minimal command set a device must support to be updatable.
If you are new to the FUOTA process, we highly recommend starting with the Quick Start Guide, which walks through authenticating and running your first campaign end to end.
What the FUOTA Server Handles
The FUOTA server manages the full lifecycle of an over-the-air update:
- Update scheduling
- Multicast session setup
- Fragmentation setup
- Sending fragments
- Verifying that the device has applied the firmware update
What the Target Device Handles
The target device is responsible for the on-device portion of the update:
- Supporting the core FUOTA packages (listed below)
- Storing the fragments in flash memory
- Applying the firmware (with a bootloader)
Supported LoRa Alliance Packages
The FUOTA server follows the LoRa Alliance standards and currently implements version 1.0.0 of these packages:
| Package | Version |
|---|---|
| Fragmented Data Block Transport | v1.0.0 |
| Remote Multicast Session Setup | v1.0.0 |
| Firmware Management Protocol | v1.0.0 |
Minimal Required FUOTA Commands
Although we highly recommend full support of the FUOTA packages, the following commands are the minimum a device must support:
| Command | FPort | Specification Reference |
|---|---|---|
DevVersionReq |
203 | Firmware Management Protocol Specification, Section 3.2 |
McastGroupSetup |
200 | Remote Multicast Setup Specification, Section 4.3 |
McastClassCSession |
200 | Remote Multicast Setup Specification, Section 4.5 |
FragSessionSetup |
201 | Fragmented Data Block Transport Specification, Section 3.2 |
FragData |
201 | Fragmented Data Block Transport Specification, Section 3.4 |
Time Synchronization
The device must have a synchronized clock to perform the update. There are two ways to synchronize the clock:
- Using the
DeviceTimeReqMAC command (initiated by the device). The LoRaWAN 1.0.3 Specification adds this command, and the MachineQ Network Server supports it. - Using the Application Layer Clock Synchronization Specification package.
Note: Since most devices use MAC layer clock synchronization, the Application Layer Clock Synchronization Specification package is not currently supported. MQbridge and MQflex synchronize the clock automatically upon joining using
DeviceTimeReq.
What's Next?
- Quick Start Guide: Authenticate and run your first FUOTA campaign end to end.
- Gateway Selection: Learn how gateways are chosen automatically or manually for a campaign.
- Frequently Asked Questions: Answers to common questions about keys, classes, and campaign parameters.