> For the complete documentation index, see [llms.txt](https://docs.eseye.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.eseye.com/modules/quectel/updating-the-modem-firmware-using-aws-iot-jobs-quectel-module.md).

# Updating the modem firmware using AWS IoT jobs – Quectel module

At any time the AWS IoT Core Device Management service may instruct the module to install an OTA update by publishing a job document to the jobs/next topic.

When the module receives a valid JSON job document, it retrieves the firmware package from the Amazon S3 instance using a pre-signed URL within the job document.

Throughout the update process, the module publishes status information to AWS IoT Core. After the update completes, a SUCCEEDED status is published, and the AWS IoT Core Device Management service marks the job as complete.

For information about jobs, see the [AWS IoT jobs documentation](https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html).

### Before you begin

Obtain the firmware image file from Eseye. Contact Support for more information: <support@eseye.com>.

## Creating a JSON job description file

1. Create a UTF-8 encoded JSON job description file for the firmware update.

   The job description must contain operation and location parameters that specify which update to apply, and where to find it.

   For more information, see Example job document.
2. Upload the JSON job description file and firmware image file to the S3 bucket in the same root account as the IoT things.

   For more information, see [Uploading objects to Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html).

   The Job process does not permit cross-region operation. You must upload the S3 bucket in the same region as the things you are updating. If you are operating across multiple regions, upload the .zip file into an S3 bucket for each region.

### Example job document

Possible operations include:

| Operation        | Description                                                                                                                                                                                                                                                                       |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| firmware\_update | Updates AnyNet SMARTconnect™ application on the module. The location parameter contains the image file URL. The image file must exist in Eseye bin.ota format. This operation can optionally include fota\_location to update the firmware and application in a single operation. |
| fota             | Updates the module firmware. The location parameter contains the image file URL.                                                                                                                                                                                                  |
| config\_update   | Updates the AnyNet SMARTconnect™ configuration file. The location parameter contains the new configuration file URL.                                                                                                                                                              |
| host\_firmware   | Downloads a software image for the host MCU. When the download completes, the host is not notified by URC. To see details of the downloaded image, send: `AT+HFWREAD=?`                                                                                                           |

For example:

```json
{
  "operation": "firmware_update",
  "location": "${aws:iot:s3-presigned-url:https://s3.amazonaws.com/BucketName/ImagefileName.ota}"
}
```

## Creating an AWS IoT custom job

The AWS IoT Console is regularly updated. The procedure below may differ from the Console version you are using. Refer to the AWS documentation for more information.

1. In the left-hand AWS IoT menu, select Manage > Jobs.
2. On the Start a job for your devices page, select Create a job.

   The Select a job page appears.
3. Select Create custom job.

   The Create a job page appears.
4. Type in a Job ID and optional Description.
5. Under Select devices to Update, click or tap Select to view a list of Thingsthat exist in the selected region.
6. Select one or more checkboxes alongside the things that require the firmware update.
7. Under Add a job file, select the JSON job description you created from the S3 bucket.
8. Under Pre-sign resource URLs select I want to pre-sign my URLs and have configured my job file.
9. Select the pre-signing role from the drop down list.

   Alternatively, create a pre-signing role if required.
10. Under URL will expire at this time, select the URL expiry time from the drop-down list.
11. Leave all other settings as the default settings.
12. Select Next.
13. On the Advanced configurations page, leave all settings as the default settings.
14. Select Create to create the job and start the update process.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.eseye.com/modules/quectel/updating-the-modem-firmware-using-aws-iot-jobs-quectel-module.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
