从华为云物联网平台 设备影子(Device Shadow) 抽取数据并用于系统开发,通常用于构建一个可以实时展示或对比设备状态的应用,如设备管理平台、大屏展示、运维系统等。
思考步骤及实施步骤如下:
一、思考步骤框架(开发前)
步骤 | 内容 | 说明 |
---|---|---|
1️⃣ 确认设备影子是否启用 | 是否在平台上配置设备影子模型(如属性、状态) | 华为云 IoTDA 中需要为设备设置产品模型(含属性),影子自动创建 |
2️⃣ 识别哪些属性需要展示 | 明确前端需要展示的字段,比如温度、电量、状态等 | 避免读取全部属性浪费带宽,可精确提取 |
3️⃣ 选择展示方式 | 实时 vs 定时 vs 异步更新 | 实时读取(用户查看时)、定时任务(周期拉取)、事件驱动(MQ推送) |
4️⃣ 规划数据获取方式 | 通过 API 拉取 or 订阅影子变化 | API 是常用方式,Topic 订阅适合实时系统 |
5️⃣ 权限认证管理 | 需要使用 Token/AK/SK 对接口调用鉴权 | 避免硬编码密钥,建议使用 Token 或 IAM 角色 |
二、开发实施步骤
第一步:获取项目 ID 与设备 ID
-
登录华为云 IoTDA 控制台 → 找到对应的设备和项目
-
获取设备 ID (
device_id
) 和项目 ID (project_id
)
第二步:调用设备影子查询 API
✅ API 示例:查询设备影子
html
GET https://iotda.cn-east-3.myhuaweicloud.com/v5/iot/{project_id}/devices/{device_id}/shadow
X-Auth-Token: your_token
返回结构示例(简化):
json
html
{
"shadow": [
{
"service_id": "TemperatureSensor",
"desired": { "value": 24 },
"reported": { "value": 22 },
"version": 3
}
]
}
-
说明:
-
desired
:平台预期设备状态 -
reported
:设备当前上报状态 -
version
:影子版本,判断是否变更
-
第三步:前端数据展示(例如使用 Vue / React)
-
解析
reported
中的状态值进行展示 -
可结合前端定时轮询、刷新机制或通过 WebSocket 接入消息推送
第四步:后端自动获取影子数据
-
使用 Python / Node.js / Java 后端定时调用 API(如每分钟)
-
建议设置缓存避免过于频繁请求
-
可以将设备状态保存在数据库中,用于历史展示或异常检测
三、可选进阶:订阅影子变更消息(MQTT方式)
-
设备影子变更后,会在特定 Topic 上发布消息
-
应用也可订阅此 Topic,实现被动推送机制
Topic 示例:
$oc/devices/{device_id}/shadow/update/delta
说明:设备影子被修改后,平台会发送"期望状态变更"通知
四、安全与认证注意事项
-
所有接口调用都需通过 Token 或 AK/SK 认证
-
建议使用临时 Token,通过 IAM 用户生成,安全性更高
-
若将影子状态展示到门户网站,需将接口请求封装在中间层(避免前端暴露密钥)
五、小结:完整实施流程图
设备上报状态
↓
平台更新影子 reported 状态
↓
应用通过 API 拉取影子数据
↓
展示在系统界面/管理大屏