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 存储库迁移指南

简介

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

注意

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

功能

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

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

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

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

对于使用任何其他 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

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

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

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

订阅 Amazon IoT Device Defender 主题

subscribeToDefenderTopics 函数订阅 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 报告

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

发布 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 相同。