下发异步设备命令
接口说明
设备的产品模型中定义了物联网平台可向设备下发的命令,应用服务器可调用此接口向指定设备下发异步命令,以实现对设备的控制。平台负责将命令发送给设备,并将设备执行命令结果异步通知应用服务器。 命令执行结果支持灵活的数据流转,应用服务器通过调用物联网平台的创建规则触发条件(Resource:device.command.status,Event:update)、创建规则动作并激活规则后,当命令状态变更时,物联网平台会根据规则将结果发送到规则指定的服务器,如用户自定义的HTTP服务器,AMQP服务器,以及华为云的其他储存服务器等, 详情参考设备命令状态变更通知。注意:此接口适用于NB设备异步命令下发,暂不支持其他协议类型设备命令下发。
调试
您可以在API Explorer中直接运行调试该接口。
URI
|
请求方法 |
POST |
|---|---|
|
URI |
/v5/iot/{project_id}/devices/{device_id}/async-commands |
|
传输协议 |
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,用于唯一标识一个设备,在注册设备时由物联网平台分配获得。 取值范围:长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。 |
|
service_id |
可选 |
String |
Body |
参数说明:设备命令所属的设备服务ID,在设备关联的产品模型中定义。如设备需要编解码插件来解析命令,此参数为必填项。 取值范围:长度不超过64的字符串。 |
|
command_name |
可选 |
String |
Body |
参数说明:设备命令名称,在设备关联的产品模型中定义。如设备需要编解码插件来解析命令,此参数为必填项。 取值范围:长度不超过128的字符串。 |
|
paras |
必选 |
Object |
Body |
参数说明:设备执行的命令,Json格式,里面是一个个健值对,如果service_id不为空,每个健都是profile中命令的参数名(paraName);如果service_id为空则由用户自定义命令格式。设备命令示例:{"value":"1"},具体格式需要应用和设备约定, 最大32K。 |
|
expire_time |
可选 |
Integer |
Body |
参数说明:物联网平台缓存命令的时长, 单位秒, 平台最多缓存20条消息(即最多缓存20条PENDING状态的命令) 该参数在send_strategy字段为delay时有效,默认缓存24小时,最大缓存2天。 |
|
send_strategy |
必选 |
String |
Body |
参数说明:下发策略,默认缓存下发。 取值范围:
|
响应参数
|
名称 |
类型 |
说明 |
|---|---|---|
|
device_id |
String |
设备ID,用于唯一标识一个设备,在注册设备时由物联网平台分配获得。 |
|
command_id |
String |
设备命令ID,用于唯一标识一条命令,在下发设备命令时由物联网平台分配获得。 |
|
service_id |
String |
设备命令所属的设备服务ID,在设备关联的产品模型中定义。 |
|
command_name |
String |
设备命令名称,在设备关联的产品模型中定义。 |
|
paras |
Object |
设备执行的命令,Json格式,里面是一个个健值对,如果service_id不为空,每个健都是profile中命令的参数名(paraName);如果service_id为空则由用户自定义命令格式。设备命令示例:{"value":"1"},具体格式需要应用和设备约定。 |
|
expire_time |
Integer |
物联网平台缓存命令的时长, 单位秒。 |
|
status |
String |
设备命令状态,如果命令被缓存,返回PENDING, 如果命令下发给设备,返回SENT。 |
|
created_time |
String |
命令的创建时间,"yyyyMMdd'T'HHmmss'Z'"格式的UTC字符串。 |
|
send_strategy |
String |
下发策略, immediately表示立即下发,delay表示缓存起来,等数据上报或者设备上线之后下发。 |
请求示例
POST https://{Endpoint}/v5/iot/{project_id}/devices/{device_id}/async-commands
Content-Type: application/json
X-Auth-Token: ********
Instance-Id: ********
{
"service_id" : "Switch",
"command_name" : "ON_OFF",
"paras" : {
"value" : "ON"
},
"expire_time" : 0,
"send_strategy" : "immediately"
}
响应示例
Status Code: 200 OK
Content-Type: application/json
{
"device_id" : "c1224afb-e9f0-4916-8220-b6bab568e888",
"command_id" : "b1224afb-e9f0-4916-8220-b6bab568e888",
"service_id" : "Switch",
"command_name" : "ON_OFF",
"send_strategy" : "immediately",
"paras" : {
"value" : "ON"
},
"expire_time" : 0,
"status" : "SENT",
"created_time" : "20151212T121212Z"
}
错误码
|
HTTP状态码 |
错误码 |
错误码英文描述 |
错误码中文描述 |
处理建议 |
|---|---|---|---|---|
|
400 |
IOTDA.014028 |
Invalid input. The gateway is not online. |
网关不在线 |
请将网关设备接入后再重试。 |
|
IOTDA.014108 |
Invalid parameter 'commandName'. |
commandName参数不合法 |
请检查serviceId,commandName参数是否与profile中的相一致。 |
|
|
IOTDA.014110 |
Invalid input. The format of parameter 'commandBody' is not the type of json. |
commandBody参数格式不是json格式 |
请确认请求中对应参数的是json格式。 |
|
|
IOTDA.014113 |
Invalid input. The size of paras has exceeds max length. |
paras参数大小超过最大值 |
请减小请求中paras参数长度。 |
|
|
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.000022 |
Operation not allowed. The user does not have the permission |
该用户没有权限 |
请排查该用户是否有权限访问。 |
|
|
IOTDA.001006 |
Operation not allowed. Application not found by authorized user or the authorized user has no application. |
用户下没有应用或应用与用户不匹配 |
请排查用户下是否有应用或是否有指定的应用。 |
|
|
IOTDA.014018 |
Operation not allowed. The device has been frozen, can not be operated. |
设备已被冻结,不允许操作 |
请将设备解冻后再重试。 |
|
|
IOTDA.014101 |
Command counts reached upper limit. |
命令数量达到上限 |
请等待缓存命令下发后再下发新命令,或增大缓存命令数。 |
|
|
404 |
IOTDA.014000 |
The device does not exist. |
设备不存在 |
请排查请求参数是否有误并确认是否有在平台注册该设备。 |
|
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.