本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
这些教程介绍如何使用 AWS IoTDevice Shadow 服务来存储和更新设备的状态信息。影子文档是 JSON 文档,根据设备、本地应用程序或服务发布的消息显示设备状态的更改。在本教程中,影子文档将显示灯泡颜色的变化。这些教程还显示影子如何存储此信息,即使设备与互联网断开连接,并在设备重新联机并请求此信息时将最新状态信息传递回设备。
我们建议您按照这里显示的顺序尝试这些教程,从需要创建的 AWS IoT资源以及必要的硬件设置开始,这也有助于您逐步学习这些概念。这些教程展示了如何配置和连接 Raspberry Pi 设备,以便与 AWS IoT搭配使用。如果您没有所需的硬件,您可以按照这些教程将它们适配于您选择的设备或使用 Amazon EC2 创建虚拟设备。
教程场景概览
这些教程的场景是一个本地应用程序或服务,该应用程序或服务可更改灯泡的颜色,并将其数据发布到预留的影子主题。这些教程类似于交互式入门教程中描述的 Device Shadow 功能,并在Raspberry Pi设备上实现。本部分中的教程侧重于单个经典影子,同时将展示如何容纳已命名的影子或多个设备。
以下教程将帮助您了解如何使用 AWS IoTDevice Shadow 服务。
-
教程:准备 Raspberry Pi 运行影子应用程序
本教程介绍如何设置 Raspberry Pi 设备,用于连接 AWS IoT。您还将创建一个 AWS IoT策略文档和事物资源,下载证书,然后将策略附加到该事物资源。完成本教程需要大约 30 分钟。
-
教程:安装设备软件开发包并运行 Device Shadow 示例应用程序
本教程介绍如何安装所需的工具、软件和 AWS IoTDevice SDK for Python,然后运行示例影子应用程序。本教程基于 连接 Raspberry Pi 或其他设备中介绍的概念所打造,完成需要 20 分钟。
-
教程:示例应用程序及 MQTT 测试客户端与 Device Shadow 交互
本教程介绍了如何使用
shadow.py
示例应用程序和 AWS IoT控制台来观察 AWS IoTDevice Shadow 和灯泡状态变化之间的交互。本教程还介绍了如何将 MQTT 消息发送到 Device Shadow 的预留主题。完成本教程需要大约 45 分钟。
AWS IoT Device Shadow 概览
Device Shadow 是由您在 AWS IoT注册表中创建的事物资源所管理的设备的持续性虚拟化展示。设备的影子是用于存储和检索设备的当前状态信息的 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 IoTCLI
在前面的示例中,假设您希望将 desired
颜色改为 yellow
。要执行此操作,请将请求发送到 UpdateThingShadowAPI 或将消息发布到更新主题,$aws/things/THING_NAME/shadow/update
。
{
"state": {
"desired": {
"color": yellow
}
}
}
更新仅影响请求中指定的字段。成功更新 Device Shadow 后,AWS IoT 将发布新 desired
状态至 delta
主题。$aws/things/THING_NAME/shadow/delta
在这种情况下,影子文档如下所示:
{ "state": { "desired": { "color": yellow }, "reported": { "color": green }, "delta": { "color": yellow } } }
然后,新状态将使用 Update
主题 $aws/things/THING_NAME/shadow/update
报告给 AWS IoTDevice Shadow,其中包含以下 JSON 消息:
{ "state": { "reported": { "color": yellow } } }
如果要获取当前状态信息,请将请求发送至 GetThingShadowAPI 或将 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。