Amazon IoT Device Defender 演示 - FreeRTOS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon IoT Device Defender 演示

重要

该演示托管在已弃用的 Amazon-FreeRTOS 存储库中。当您创建新项目时,我们建议从此处开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目,请参阅 Amazon-FreeRTOS Github 存储库迁移指南

简介

此演示向您展示了如何使用 Devic Amazon IoT e Defender 库进行连接Amazon IoT Device Defender。该演示使用 CoreMQTT 库通过 TLS(相互身份验证)建立与 MQTT 代理和 CoreJson 库的 Amazon IoT MQTT 连接,以验证和解析从该服务收到的响应。 Amazon IoT Device Defender 该演示向您展示了如何使用从设备收集的指标构建 JSON 格式的报告,以及如何将构造的报告提交给 Amazon IoT Device Defender 服务。该演示还展示了如何在 CoreMQTT 库中注册回调函数,以处理来自 Amazon IoT Device Defender 服务的响应,以确认已发送的报告是被接受还是被拒绝。

注意

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

功能

此演示创建了一个应用程序任务,演示如何收集指标、构建 JSON 格式的设备防御者报告,以及如何通过与 MQTT 代理的安全 MQTT 连接将其提交给 Amazon IoT Device Defender 服务。 Amazon IoT 此演示包括标准网络指标和自定义指标。对于自定义指标,此演示包括:

  • 一个名为“task_numbers”的指标,它是 FreeRTOS 任务 ID 的列表。该指标的类型是“数字列表”。

  • 一个名为“stack_high_water_mark”的指标,它是演示应用程序任务的堆栈高级别水印。该指标的类型是“数字”。

我们如何收集网络指标取决于所使用的 TCP/IP 堆栈。对于 Freertos+TCP 和支持的 LWIP 配置,我们提供了指标收集实现,用于从设备收集真实指标并在报告中提交。 Amazon IoT Device Defender 你可以在 freertos+TCP 和 lwIP 上找到。 GitHub

对于使用任何其他 TCP/IP 堆栈的主板,我们提供了指标收集函数的存根定义,这些函数会为所有网络指标返回零。在 freertos/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c 中为网络实现函数以发送真实指标。该文件也可在 GitHub网站上找到。

对于 ESP32,默认 lwIP 配置不使用核心锁定,因此演示将使用存根指标。如果要使用参考 lwIP 指标收集实现,请在 lwiopts.h 中定义以下宏:

#define LINK_SPEED_OF_YOUR_NETIF_IN_BPS 0 #define LWIP_TCPIP_CORE_LOCKING 1 #define LWIP_STATS 1 #define MIB2_STATS 1

下面是运行演示时的一个输出示例。

控制台日志输出显示了 DemoThing 应用程序的 MQTT 连接、发布和内存使用事件。

如果您的主板未使用 FreeRTOS+TCP 或支持的 lwIP 配置,则输出将如下所示。

显示演示应用程序的 MQTT 连接建立、主题订阅尝试、发布有效负载和数据包处理的日志消息。

该演示的源代码位于您下载的freertos/demos/device_defender_for_aws/目录中或GitHub网站上。

订阅主题 Amazon IoT Device Defender

subscribeToDefender主题功能订阅 MQTT 主题,将收到对已发布的 Device Defender 报告的回复。它使用宏 DEFENDER_API_JSON_ACCEPTED 来构造主题字符串,根据该字符串接收接受的 Device Defender 报告的响应。它使用宏 DEFENDER_API_JSON_REJECTED 来构造主题字符串,根据该字符串接收拒绝的 Device Defender 报告的响应。

收集设备指标

collectDeviceMetrics函数使用中metrics_collector.h定义的函数收集网络指标。收集的指标包括发送和接收的字节数和数据包数、开放的 TCP 端口数、开放的 UDP 端口数以及建立的 TCP 连接数。

生成 Amazon IoT Device Defender 报告

generateDeviceMetrics报告功能使用中定义的函数生成设备防御者报告report_builder.h。该函数获取网络指标和缓冲区,按照预期的格式创建一个 JSON 文档, Amazon IoT Device Defender 然后将其写入提供的缓冲区。所期望的 JSON 文档的格式在《Amazon IoT 开发者指南》的设备端指标中指定。 Amazon IoT Device Defender

发布 Amazon IoT Device Defender 报告

该 Amazon IoT Device Defender 报告以 MQTT 主题发布,用于发布 JSON Amazon IoT Device Defender 报告。该报告是使用宏构造的DEFENDER_API_JSON_PUBLISH,如 GitHub 网站上的此代码片段所示。

处理回复的回调

publishCallback 函数处理传入的 MQTT 发布消息。它使用 Amazon IoT Device Defender 库中的 Defender_MatchTopic API 来检查传入的 MQTT 消息是否来自 Amazon IoT Device Defender 服务。如果消息来自 Amazon IoT Device Defender 服务,则它会解析收到的 JSON 响应并在响应中提取报告 ID。然后验证报告 ID 是否与报告中发送的 ID 相同。