MachineQ Developer Documentation logo DOCS

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:

  1. Using the DeviceTimeReq MAC command (initiated by the device). The LoRaWAN 1.0.3 Specification adds this command, and the MachineQ Network Server supports it.
  2. 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?