AWS IoT 影子文件所需字段和报告字段之间的差异

Dav*_*rks 1 amazon-web-services aws-iot

我正在查看有关影子状态的 AWS IoT 文档,并尝试更好地了解影子文件中desired和 的使用。reported

文档指出:

当影子的状态发生变化时,AWS IoT 会向所有 MQTT 订阅者发送 /delta 消息,其中包含所需状态和报告状态之间的差异。

浏览完文档的其余部分后,我觉得我并没有清楚地掌握desiredvs的用例reported。有人可以解释一下用例吗?我们什么时候使用其中一种而不是另一种?

mrk*_*sgn 8

让我们从头开始,设备影子是AWS IoT 注册表中定义的事物的持久虚拟影子。基本上,it\xe2\x80\x99 是一个 JSON 状态文档,用于存储和检索事物的当前状态信息。您可以使用 MQTT 主题或 REST API 调用与设备影子交互。Shadows 的主要优点是您可以与它交互,无论该物体是否连接到互联网。

\n

Shadow\xe2\x80\x99s 文档包含一个状态属性,用于描述设备\xe2\x80\x99s 状态的各个方面:

\n
{\n  "state": {\n    "desired": {\n      "color": "RED"\n    },\n    "reported": {\n      "color": "GREEN"\n    },\n    "delta": {\n      "color": "RED"\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是每个状态的描述:

\n
    \n
  • 应用程序通过更新对象来指定设备属性的所需状态desired
  • \n
  • 设备报告其在对象中的当前状态reported
  • \n
  • AWS IoT 报告对象中所需状态和报告状态之间的差异delta
  • \n
\n

每个影子都有一个保留的 MQTT 主题和 HTTP URL,支持影子上的getupdate、 和操作。delete让我们来看看:

\n
    \n
  • $aws/things/THING_NAME/shadow/update:发布到此主题以更新/创建物体影子;
  • \n
  • $aws/things/THING_NAME/shadow/update/accepted:AWS IoT在接受更新请求后发布该主题的状态文档reported或部分内容;desired
  • \n
  • $aws/things/THING_NAME/shadow/update/rejected:AWS IoT 在拒绝更新请求时向此主题发布错误消息;
  • \n
  • $aws/things/THING_NAME/shadow/update/documents:只要成功执行影子更新,AWS IoT 就会向此主题发布包含先前当前状态信息的状态文档;
  • \n
  • $aws/things/THING_NAME/shadow/update/delta:当 AWS IoT 接受事物影子的更改并且请求状态文档包含所需状态和报告状态的不同值时,AWS IoT 会发布对此主题的响应增量状态文档。
  • \n
\n

这是一个例子。假设我们有一个空气净化器,我们想要改变风扇速度。流程如下:

\n
    \n
  1. 用户通过空气净化器移动应用程序更改风扇速度
  2. \n
  3. 移动应用程序将以下 JSON 消息发布到此 MQTT 主题:$aws/things/THING_NAME/shadow/update以使用新的所需状态更新设备影子:"fanSpeed": 50。它看起来像这样:
  4. \n
\n
{\n  "state": {\n    "desired": {\n      "fanSpeed": 50\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 影子更新成功后,如果之前的reported状态与 不同"fanSpeed": 50,AWS IoT 会将desired状态发布到 delta topic $aws/things/THING_NAME/shadow/update/delta
  2. \n
  3. 影子状态文档可能如下所示:
  4. \n
\n
{\n  "state": {\n    "desired": {\n      "fanSpeed": 50\n    },\n    "reported": {\n      "fanSpeed": 100\n    },\n    "delta": {\n      "fanSpeed": 50\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. $aws/things/THING_NAME/shadow/update订阅 delta 主题的设备(我们的空气净化器)将执行请求的操作(在本例中将风扇速度设置为 50),并使用带有以下 JSON 消息的更新主题向 AWS IoT Device Shadow 报告新状态:
  2. \n
\n
{\n  "state": {\n    "reported": {\n      "fanSpeed": 50\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

现在我们的空气净化器的风扇速度为 50...这就是它的工作原理;)

\n