AWS Iot Device Shadows

参考连接:AWS IoT Device Shadow 服务 - AWS IoT Core (amazon.com)

1、 Device shadow基本概念

设备的影子是用于存储和检索设备的当前状态信息的 JSON 文档。(存储在AWS IOT cloud内)

Device Shadow 服务可以为您连接到 AWS IoT 的每台设备保留一个影子。您可以使用该影子通过 MQTT 或 HTTP 获取和设置设备的状态,无论该设备是否连接到 Internet。每台设备的影子都由相应事物的名称唯一标识。

这里借用AWS 架构师两幅图说明如何使用shadow

1.1 Device shadow控制模型

1.2 AWS IOT设备影子工作原理

1.3 Device shadow一些关键属性

Device shadow在 AWS IOT中是JSON格式存储 有这个固定的格式这里进行说明:

desired:事物的预期状态。应用程序可以向本文档部分写入数据来更新事物的状态,且无需直接连接到该事物。

reported:事物的报告状态。事物可以向本文档部分写入数据,以报告其新状态。应用程序可以读取本文档部分,以确定事物的状态

Delta:增量状态是一种虚拟类型的状态,包含 desired 状态和 reported 状态之间的差异。

timestamp:指明 AWS IoT 传输消息的时间。通过在消息中使用时间戳并对 desired 或 reported:部分中的不同属性使用时间戳,事物可以确定已更新项目的存在时间,即使它不具有内部时钟特性。

version:文档版本,文档每次更新时,此版本号都会递增。用于确保正在更新的文档为最新版本。

所以图中内容即为当前状态engine为on,light color为GREEN,预期状态为engine为on,light color为RED。

关于状态具体内容可以自己定义相关属性。

1.4 DeviceShadow提供了三种API 操作

GetThingShadow 获取事物影子 返回内容即为1.3图中格式

UpdateThingShadow 更新指定事物影子 参数为包含state中json:{ state:{...} }

DeleteThingShadow 删除指定事物的影子

1.5 Deviceshadow底层实现

Device Shadow实质是一个系列约定的内部topic组成控制逻辑,并提供了持久化数据存储功能。

即为内部固定topic。

这里介绍几个会用到的topic类型:

复制代码
$aws/things/myLightBulb/shadow/update/accepted
当设备的影子更新成功时,Device Shadow 服务将向此主题发送消息。
$aws/things/myLightBulb/shadow/update/delta
当检测到设备的影子的"reported"部分与"desired"部分之间存在差异时,Device Shadow 服务将向此主题发送消息。有关更多信息,请参阅 /update/delta。
$aws/things/myLightBulb/shadow/update/documents
每次设备的影子更新成功执行时,Device Shadow 服务都会向此主题发布状态文档。

Mqtt client通过更新影子(UpdateThingShadow )将灯由红色改变成绿色的底层流程:

Mqtt client调用UpdateThingShadow API后IOT 网络行为

1 Mqtt client即会向server发布一个$aws/things/myLightBulb/shadow/update消息。消息中携带期望更新的状态{"state": {"desired": {"color": "green" }}}

2 IOT server收到这条消息,会发布aws/things/myLightBulb/shadow/accepted 响应 update请求消息表示更新已收到。同时又会发布一条aws/things/myLightBulb/shadow/delta通知设备进行更新。再发布一条 $aws/things/myLightBulb/shadow/update/documents 消息作为更新记录。

3 device 上线即订阅了delta消息,收到IOT server 发布的delta消息后,device执行相应更新操作,完成后设备发布一条$aws/things/myLightbulb/shadow/update {"state": {"reported": {"color": "green" }}} 向IOT server通知状态更新好了

4 IOT server 收到update消息reported),会发布aws/things/myLightBulb/shadow/accepted 响应 update请求消息表示更新已收到。再发布一条 aws/things/myLightBulb/shadow/update/documents 消息作为更新记录。

我们编写device端代码时需要自己编写delta处理函数,处理完成后需要调用update 去reported更新结果。

相关推荐
Zoey的笔记本18 分钟前
金融行业数据可视化平台:破解数据割裂与决策迟滞的系统性方案
大数据·信息可视化·数据分析
2501_9336707927 分钟前
大数据与财务管理专业就业岗位方向
大数据
小龙1 小时前
【Git 报错解决】本地分支与远程分支名称/提交历史不匹配
大数据·git·elasticsearch·github
Deepoch1 小时前
Deepoc具身模型:破解居家机器人“需求理解”难题
大数据·人工智能·机器人·具身模型·deepoc
代码方舟2 小时前
Java企业级实战:对接天远名下车辆数量查询API构建自动化风控中台
java·大数据·开发语言·自动化
roman_日积跬步-终至千里2 小时前
【大数据架构-数据中台(2)】数据中台建设与架构:从战略到落地的完整方法论
大数据·架构
zgl_200537792 小时前
ZGLanguage 解析SQL数据血缘 之 标识提取SQL语句中的目标表
java·大数据·数据库·数据仓库·hadoop·sql·源代码管理
尋有緣2 小时前
力扣1355-活动参与者
大数据·数据库·leetcode·oracle·数据库开发
roman_日积跬步-终至千里4 小时前
【大数据架构-数据中台(1)】解码数据中台:从概念到认知
大数据·架构·dubbo
追风的木木4 小时前
TDengine在NetCore中数据查询的使用
大数据·tdengine