
# 下发设备命令
#### 功能介绍
设备的产品模型中定义了物联网平台可向设备下发的命令，应用服务器可调用此接口向指定设备下发命令，以实现对设备的同步控制。平台负责将命令以同步方式发送给设备，并将设备执行命令结果同步返回, 如果设备没有响应，平台会返回给应用服务器超时，平台超时时间是20秒。
注意：
- 此接口适用于MQTT设备同步命令下发，暂不支持NB-IoT设备命令下发。
  
- 此接口仅支持单个设备同步命令下发。
  
 
#### URI
POST /v1/iotfm/devices/{device_id}/commands
表1路径参数 
| 参数        | 是否必选 | 参数类型   | 描述                                                                                                                                     |
|:---|:---|:---|:---|
| device_id | 是    | String | **参数说明**：下发属性的设备ID，用于唯一标识一个设备，在注册设备时由设施云平台分配获得。 **取值范围**：长度不超过128，只允许字母、数字、下划线（_）、连接符（-）的组合。 |
   
#### 请求参数
表2请求Header参数 
| 参数             | 是否必选 | 参数类型   | 描述                                                                                                                                                              |
|:---|:---|:---|:---|
| X-Auth-Token   | 是    | String | **参数说明** ：用户Token。通过调用 [生成Token](https://support.huaweicloud.com/api-ocsmartcampus/ocsmartcampus_06_0008.html) 接口获取，接口返回的响应消息头中"X-Subject-Token"就是需要获取的用户Token。 |
| X-Instance-Id  | 是    | String | **参数说明**：实例ID。通过访问智能设施云平台界面后获取，智能设施云平台资源均为实例级隔离，所有业务接口必须填写正确的实例ID才能被成功调用。 **取值范围**：长度8-36，只允许大小写字母、数字和-字符的组合。           |
| X-Root-Zone-Id | 否    | String | **参数说明**：项目ID。 **取值范围**：长度不超过24，只允许字母、数字的组合。                                                                            |
   
表3请求Body参数 
| 参数           | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| service_id   | 是    | String | **参数说明**：设备命令所属的设备服务ID，在设备关联的产品模型中定义。 **取值范围**：长度不超过64的字符串。                                                                                                                  |
| command_code | 是    | String | **参数说明**：设备命令名称，在设备关联的产品模型中定义。 **取值范围**：长度不超过128的字符串。                                                                                                                      |
| paras        | 是    | Object | **参数说明**：设备执行的命令。 **取值范围**：Json格式，里面是一个个键值对，如果serviceId不为空，每个键都是profile中命令的参数名（paraName）;如果serviceId为空则由用户自定义命令格式。设备命令示例：{"value":"1"}，具体格式需要应用和设备约定。此参数仅支持Json格式，暂不支持字符串。 |
   
#### 响应参数
**状态码：200**
表4响应Body参数 
| 参数         | 参数类型   | 描述                                                                                                            |
|:---|:---|:---|
| command_id | String | **参数说明**：设备命令ID，用于唯一标识一条命令，在下发设备命令时由设施云平台分配获得。 **取值范围**：长度不超过36的字符串。 |
| response   | Object | **参数说明**：设备命令执行结果。 **取值范围**：JSON格式，具体格式需要应用和设备在物模型约定。                 |
   
**状态码：400**
表5响应Body参数 
| 参数         | 参数类型   | 描述                                                                       |
|:---|:---|:---|
| error_code | String | **参数说明**：错误码。 **取值范围**：长度8-36。    |
| error_msg  | String | **参数说明**：错误描述。 **取值范围**：长度2-512。 |
   
#### 请求示例
创建命令，命令名为ON_OFF，命令为ON。
```
POST https://{endpoint}/v1/iotfm/devices/16087212bc75410c9ad77163b4cf6aba/commands
{
  "service_id" : "System",
  "command_code" : "ON_OFF",
  "paras" : {
    "value" : "ON"
  }
}
```
#### 响应示例
**状态码：200**
OK
```
{
  "command_id" : "b1224afb-e9f0-4916-8220-b6bab568e888",
  "response" : {
    "result_code" : 0
  }
}
```
#### 状态码
| 状态码 | 描述                    |
|:---|:---|
| 200 | OK                    |
| 400 | Bad Request           |
| 403 | Forbidden             |
| 404 | Not Found             |
| 500 | Internal Server Error |
   
