View a markdown version of this page

在设备处于离线状态时使用设备影子保持设备状态 - AWS IoT Core

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

在设备处于离线状态时使用设备影子保持设备状态

这些教程向您展示如何使用 AWS IoT 设备影子服务存储和更新设备的状态信息。影子文档是 JSON 文档,根据设备、本地应用程序或服务发布的消息显示设备状态的更改。在本教程中,影子文档将显示灯泡颜色的变化。这些教程还显示影子如何存储此信息,即使设备与互联网断开连接,并在设备重新联机并请求此信息时将最新状态信息传递回设备。

我们建议您按照这里显示的顺序尝试这些教程,从需要创建的 AWS IoT 资源以及必要的硬件设置开始,这也有助于您逐步学习这些概念。这些教程介绍如何配置和连接树莓派设备以供使用 AWS IoT。如果您没有所需的硬件,您可以按照这些教程将它们适配于您选择的设备或使用 Amazon EC2 创建虚拟设备。

教程场景概览

这些教程的场景是一个本地应用程序或服务,该应用程序或服务可更改灯泡的颜色,并将其数据发布到预留的影子主题。这些教程类似于交互式入门教程中描述的 Device Shadow 功能,并在Raspberry Pi设备上实现。本部分中的教程侧重于单个经典影子,同时将展示如何容纳已命名的影子或多个设备。

以下教程将帮助您学习如何使用 AWS IoT 设备影子服务。

AWS IoT 设备影子概述

设备影子是设备的永久虚拟表示形式,由您在 AWS IoT 注册表中创建的事物资源管理。Shadow 文档是一个 JSON 或 JavaScript 注释文档,用于存储和检索设备的当前状态信息。您可以使用该影子通过 MQTT 主题或 HTTP REST APIs 获取和设置设备的状态,无论该设备是否连接到互联网。

影子文档包含一个 state 属性,以描述设备状态的以下方面。

  • desired:应用程序更新 desired 对象以指定设备属性的所需状态。

  • reported:设备在 reported 对象中报告其当前状态。

  • delta: AWS IoT 报告delta对象中所需状态和报告状态之间的差异。

以下为示例影子状态文档:

{ "state": { "desired": { "color": "green" }, "reported": { "color": "blue" }, "delta": { "color": "green" } } }

要更新设备的影子文档,可以使用预留的 MQTT 主题,Device Shadow REST API支持 GET、UPDATE,和 DELETE 操作,以及 AWS IoT CLI。

在前面的示例中,假设您希望将 desired 颜色改为 yellow。要执行此操作,请将请求发送到 UpdateThingShadow API 或将消息发布到更新主题,$aws/things/THING_NAME/shadow/update。

{ "state": { "desired": { "color": yellow } } }

更新仅影响请求中指定的字段。成功更新设备影子后,将新desired状态 AWS IoT 发布到delta主题$aws/things/THING_NAME/shadow/delta。在这种情况下,影子文档如下所示:

{ "state": { "desired": { "color": yellow }, "reported": { "color": green }, "delta": { "color": yellow } } }

然后,使用$aws/things/THING_NAME/shadow/update带有以下 JSON 消息的Update主题将新状态报告给 AWS IoT 设备影子:

{ "state": { "reported": { "color": yellow } } }

如果要获取当前状态信息,请将请求发送至 GetThingShadow API 或将 MQTT 消息发布到 Get(获取)主题,$aws/things/THING_NAME/shadow/get。

有关使用 Device Shadow 服务的更多信息,请参阅 AWS IoT Device Shadow 服务。

有关在设备、应用程序和服务中使用 Device Shadow 的更多信息,请参阅 在设备中使用影子 和 在应用程序和服务中使用影子。

有关与 AWS IoT 阴影交互的信息,请参阅与影子交互。

有关 MQTT 预留主题和 HTTP REST API 的信息,请参阅 Device Shadow MQTT 主题 和 Device Shadow REST API。