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



我正在查看AWS IoT文档中的阴影状态,并试图更好地理解阴影文件中desiredreported的使用。

文件说明:

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

看完其余的文档后,我觉得我对desiredreported的用例没有清晰的了解。有人能解释一下这个用例吗?我们什么时候使用一种与另一种?

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

影子的文档包含描述设备状态各方面的状态属性:

{
"state": {
"desired": {
"color": "RED"
},
"reported": {
"color": "GREEN"
},
"delta": {
"color": "RED"
}
}
}

以下是每个状态的描述:

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

每个卷影都有一个保留的MQTT主题和HTTP URL,支持卷影上的getupdatedelete操作。让我们看看:

  • $aws/things/THING_NAME/shadow/update:发布到此主题,更新/创建Thing Shadow
  • $aws/things/THING_NAME/shadow/update/accepted:AWS IoT在接受更新请求时将状态文件的reporteddesired部分发布到此主题
  • $aws/things/THING_NAME/shadow/update/rejected:AWS IoT在拒绝更新请求时向该主题发布错误消息
  • $aws/things/THING_NAME/shadow/update/documents:每当成功执行阴影更新时,AWS IoT都会将包含以前当前状态信息的状态文档发布到此主题
  • $aws/things/THING_NAME/shadow/update/delta:AWS IoT在接受事物阴影的更改时发布对此主题的响应增量状态文档,并且请求状态文档包含所需状态和报告状态的不同值

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

  1. 用户通过空气净化器移动应用程序更改风扇速度
  2. 移动应用程序将以下JSON消息发布到此MQTT主题:$aws/things/THING_NAME/shadow/update以使用新的所需状态更新设备阴影:"fanSpeed": 50。它看起来是这样的:
{
"state": {
"desired": {
"fanSpeed": 50
}
}
}
  1. 阴影更新成功后,如果先前的reported状态与"fanSpeed": 50不同,AWS IoT将发布desired状态到增量主题$aws/things/THING_NAME/shadow/update/delta
  2. 影子状态文档可能如下所示:
{
"state": {
"desired": {
"fanSpeed": 50
},
"reported": {
"fanSpeed": 100
},
"delta": {
"fanSpeed": 50
}
}
}
  1. 订阅delta主题的设备(我们的空气净化器(将执行请求的操作(在这种情况下将风扇速度设置为50(,并使用更新主题$aws/things/THING_NAME/shadow/update和以下JSON消息向AWS IoT设备阴影报告新状态:
{
"state": {
"reported": {
"fanSpeed": 50
}
}
}

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

最新更新