AWS IoT 作业库演示 - FreeRTOS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS IoT 作业库演示

Introduction

Jobs 库演示说明了如何通过 MQTT 连接来连接到 AWS IoT Jobs 服务AWS IoT、从 检索作业并在设备上处理它。AWS IoTJobs 演示项目使用 AWS IoT Windows 端口FreeRTOS,因此,可以使用 Windows 上的 Visual Studio Community 版本进行构建和评估。无需微控制器硬件。该演示使用 TLS 建立与 AWS IoT MQTT 双向身份验证演示相同的方式与 MQTT 代理的安全连接。

注意

要设置和运行 FreeRTOS 演示,请按照开始使用 FreeRTOS中的步骤操作。

源代码组织

演示代码位于 jobs_demo.c 文件中,可以在 GitHub 网站或 freertos/demos/jobs_for_aws/ 目录中找到。

配置 AWS IoT MQTT 代理连接

在本演示中,您将使用与 AWS IoT MQTT 代理的 MQTT 连接。此连接的配置方式与 MQTT 双向身份验证演示中的配置方式相同。

Functionality

该演示演示演示用于从 AWS IoT 接收任务并在设备上处理它们的工作流程。此演示是交互式的,需要您使用 AWS IoT 控制台或 AWS Command Line Interface (AWS CLI) 创建任务。有关创建作业的更多信息,请参阅 https://docs.amazonaws.cn/cli/latest/reference/iot/create-job.html 中的 create-jobAWS CLI Command Reference。该演示需要作业文档将 action 键设置为 print 以将消息输出到控制台。

请参阅此作业文档的以下格式。

{ "action": "print", "message": "ADD_MESSAGE_HERE" }

您可以使用 AWS CLI 创建作业,如以下示例命令所示。

aws iot create-job \ --job-id t12 \ --targets arn:aws:iot:us-east-1:123456789012:thing/device1 \ --document '{"action":"print","message":"hello world!"}'

该演示还使用 action 键设置为 publish 的作业文档将消息重新发布到主题。请参阅此作业文档的以下格式。

{ "action": "publish", "message": "ADD_MESSAGE_HERE", "topic": "topic/name/here" }

演示将循环运行,直到它收到 action 键设置为 exit 的作业文档退出演示。作业文档的格式如下所示。

{ "action: "exit" }

作业演示的入口点

GitHub 上可以找到 Jobs 演示入口点函数的源代码。 此函数执行以下操作:

  1. 使用 mqtt_demo_helpers.c 中的帮助程序函数建立 MQTT 连接。

  2. NextJobExecutionChanged 中使用帮助程序函数订阅 mqtt_demo_helpers.c API 的 MQTT 主题。 主题字符串会更早地使用由 AWS IoT Jobs 库定义的宏进行组合。

  3. StartNextPendingJobExecution 中使用帮助程序函数发布到 mqtt_demo_helpers.c API 的 MQTT 主题。 该主题字符串会更早地使用由 AWS IoT Jobs 库定义的宏进行组合。

  4. 反复调用 MQTT_ProcessLoop 以接收提交到 prvEventCallback 以进行处理的传入消息。

  5. 在演示收到退出操作后,请使用 mqtt_demo_helpers.c 文件中的帮助程序函数取消订阅 MQTT 主题并断开连接。

收到的 MQTT 消息的回调

此函数从 Jobs_MatchTopic Jobs 库调用 AWS IoT 以对传入 MQTT 消息进行分类。如果消息类型对应于新作业,则调用 prvNextJobHandler()

函数及其调用的函数,解析 JSON 格式消息中的作业文档,并运行作业指定的操作。prvNextJobHandler特别感兴趣的是 prvSendUpdateForJob 函数。

GitHub 上可以找到传入消息的此回调函数的源代码。

发送正在运行的作业的更新

函数 prvSendUpdateForJob() 从 Jobs 库调用 Jobs_Update() 以填充紧跟在 MQTT 发布操作中使用的主题字符串。

可以在 prvSendUpdateForJob() GitHub 上找到 函数的源代码。