我正在查看AWS IoT文档中的阴影状态,并试图更好地理解阴影文件中desired
和reported
的使用。
文件说明:
当影子的状态发生变化时,AWS IoT会向所有MQTT订阅者发送/delta消息,其中包含所需状态和报告状态之间的差异。
看完其余的文档后,我觉得我对desired
与reported
的用例没有清晰的了解。有人能解释一下这个用例吗?我们什么时候使用一种与另一种?
让我们从头开始,设备阴影是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,支持卷影上的get
、update
和delete
操作。让我们看看:
$aws/things/THING_NAME/shadow/update
:发布到此主题,更新/创建Thing Shadow$aws/things/THING_NAME/shadow/update/accepted
:AWS IoT在接受更新请求时将状态文件的reported
或desired
部分发布到此主题$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在接受事物阴影的更改时发布对此主题的响应增量状态文档,并且请求状态文档包含所需状态和报告状态的不同值
下面是一个例子。假设我们有一个空气净化器,我们想改变风扇的速度。流程如下:
- 用户通过空气净化器移动应用程序更改风扇速度
- 移动应用程序将以下JSON消息发布到此MQTT主题:
$aws/things/THING_NAME/shadow/update
以使用新的所需状态更新设备阴影:"fanSpeed": 50
。它看起来是这样的:
{
"state": {
"desired": {
"fanSpeed": 50
}
}
}
- 阴影更新成功后,如果先前的
reported
状态与"fanSpeed": 50
不同,AWS IoT将发布desired
状态到增量主题$aws/things/THING_NAME/shadow/update/delta
- 影子状态文档可能如下所示:
{
"state": {
"desired": {
"fanSpeed": 50
},
"reported": {
"fanSpeed": 100
},
"delta": {
"fanSpeed": 50
}
}
}
- 订阅delta主题的设备(我们的空气净化器(将执行请求的操作(在这种情况下将风扇速度设置为50(,并使用更新主题
$aws/things/THING_NAME/shadow/update
和以下JSON消息向AWS IoT设备阴影报告新状态:
{
"state": {
"reported": {
"fanSpeed": 50
}
}
}
现在我们的空气净化器的风扇转速为50……这就是它的工作原理;(