配置设备影子预期数据
接口说明
应用服务器可调用此接口配置设备影子的预期属性(desired区),当设备上线或者设备上报属性时把属性下发给设备。
设备影子介绍:
设备影子是一个用于存储和检索设备当前状态信息的JSON文档。
- 每个设备有且只有一个设备影子,由设备ID唯一标识
- 设备影子仅保存最近一次设备的上报数据和预期数据
- 无论该设备是否在线,都可以通过该影子获取和设置设备的属性
- 设备上线或者设备上报属性时,如果desired区和reported区存在差异,则将差异部分下发给设备,配置的预期属性需在产品模型中定义且method具有可写属性“W”才可下发
调试
您可以在API Explorer中直接运行调试该接口。
URI
|
请求方法 |
PUT |
|---|---|
|
URI |
/v5/iot/{project_id}/devices/{device_id}/shadow |
|
传输协议 |
HTTPS |
请求参数
|
名称 |
必选/可选 |
类型 |
位置 |
说明 |
|---|---|---|---|---|
|
X-Auth-Token |
必选 |
String |
Header |
参数说明:用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证。 |
|
Instance-Id |
可选 |
String |
Header |
参数说明:实例ID。物理多租下各实例的唯一标识,一般华为云租户无需携带该参数,仅在物理多租场景下从管理面访问API时需要携带该参数。 |
|
project_id |
必选 |
String |
Path |
参数说明:项目ID。获取方法请参见 获取项目ID。 |
|
device_id |
必选 |
String |
Path |
参数说明:设备ID,用于唯一标识一个设备。在注册设备时直接指定,或者由物联网平台分配获得。由物联网平台分配时,生成规则为"product_id" + "_" + "node_id"拼接而成。 取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
|
shadow |
可选 |
List<UpdateDesired> |
Body |
参数说明:设备影子期望值构体。 |
|
名称 |
必选/可选 |
类型 |
说明 |
|---|---|---|---|
|
service_id |
必选 |
String |
参数说明:设备的服务ID,在设备关联的产品模型中定义。 |
|
desired |
必选 |
Object |
参数说明:设备影子期望属性数据,Json格式,里面是一个个键值对,每个键都是产品模型中属性的参数名(property_name),目前如样例所示只支持一层结构;如果想要删除整个desired可以填写空Object(例如"desired":{}),如果想要删除某一个属性期望值可以将属性置位null(例如{"temperature":null}) |
|
version |
可选 |
Long |
参数说明:设备影子的版本,携带该参数时平台会校验值必须等于当前影子版本,初始从0开始。 |
响应参数
|
名称 |
类型 |
说明 |
|---|---|---|
|
device_id |
String |
设备ID,用于唯一标识一个设备。在注册设备时直接指定,或者由物联网平台分配获得。由物联网平台分配时,生成规则为"product_id" + "_" + "node_id"拼接而成。 |
|
shadow |
List<DeviceShadowData> |
设备影子数据结构体。 |
|
名称 |
类型 |
说明 |
|---|---|---|
|
service_id |
String |
设备的服务ID,在设备关联的产品模型中定义。 |
|
desired |
DeviceShadowProperties Object |
用户最近一次对设备下发的预期数据,Json格式,里面是一个个键值对,每个键都是产品模型中属性的参数名(property_name)。 |
|
reported |
DeviceShadowProperties Object |
设备最近一次上报的属性数据,Json格式,里面是一个个键值对,每个键都是产品模型中属性的参数名(property_name)。 |
|
version |
Long |
设备影子的版本,携带该参数时平台会校验值必须等于当前影子版本,初始从0开始。 |
请求示例
PUT https://{Endpoint}/v5/iot/{project_id}/devices/{device_id}/shadow
Content-Type: application/json
X-Auth-Token: ********
Instance-Id: ********
{
"shadow" : [ {
"desired" : {
"temperature" : "60"
},
"service_id" : "WaterMeter",
"version" : 1
} ]
}
响应示例
Status Code: 200 OK
Content-Type: application/json
{
"device_id" : "40fe3542-f4cc-4b6a-98c3-61a49ba1acd4",
"shadow" : [ {
"service_id" : "WaterMeter",
"desired" : {
"properties" : {
"temperature" : "60"
},
"event_time" : "20151212T121212Z"
},
"reported" : {
"properties" : {
"temperature" : "60"
},
"event_time" : "20151212T121212Z"
},
"version" : 1
} ]
}
错误码
|
HTTP状态码 |
错误码 |
错误码英文描述 |
错误码中文描述 |
处理建议 |
|---|---|---|---|---|
|
400 |
IOTDA.000006 |
Invalid input data. |
请求参数不合法 |
请排查请求参数是否符合华为云文档要求。 |
|
IOTDA.000008 |
Invalid input. Bad request, for more detail, refer to the error message. |
请求的格式不正确,如json非法,mediaType不正确等。 |
请排查该请求的请求格式是否正确。 |
|
|
IOTDA.013002 |
The properties of deviceServiceCapability do not exist. |
产品的属性不存在 |
请排查该产品是否有属性信息,若没有,可调用修改产品接口添加属性。 |
|
|
IOTDA.013003 |
Operation not allowed. The product is unavailable. |
未知的产品类型 |
请排查设备是否有产品ID, 若没有,可调用修改设备信息接口添加产品ID。 |
|
|
403 |
IOTDA.000021 |
Operation not allowed. User not found by IAM token or the authorized user has not subscribed IOTDA service. |
没有找到IAM Token所对应的用户信息或该用户没有订阅设备接入服务(IOTDA) |
请排查IAM Token所在用户是否订阅了设备接入服务(IOTDA)。 |
|
IOTDA.001006 |
Operation not allowed. Application not found by authorized user or the authorized user has no application. |
用户下没有应用或应用与用户不匹配 |
请排查用户下是否有应用或是否有指定的应用。 |
|
|
IOTDA.013004 |
Operation not allowed. You have no Write permission. |
您没有可写的权限 |
请排查您的产品属性是否是可写的,若不是,可调用修改产品的接口将属性改成可写。 |
|
|
404 |
IOTDA.013000 |
The product does not exist. |
产品不存在 |
请排查请求参数是否正确或产品是否已经在平台注册。 |
|
IOTDA.014000 |
The device does not exist. |
设备不存在 |
请排查请求参数是否有误并确认是否有在平台注册该设备。 |
|
|
409 |
IOTDA.014030 |
The version of serviceId %s conflicts |
该serviceId的版本号冲突 |
请使用正确的版本号进行配置 |
|
500 |
IOTDA.000001 |
Internal server error. |
服务器内部错误 |
请联系华为工程师分析解决。 |
|
IOTDA.000020 |
Decrypt IAM token failed. |
IAM Token解析失败 |
请联系华为工程师分析解决。 |
Did this article solve your problem?
Thank you for your score!Your feedback would help us improve the website.