
# 创建调度计划
#### 功能介绍
用户通过北向接口在指定边缘节点上创建调度计划
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/IoTEdge/doc?api=CreateSchedule)中调试该接口，支持自动认证鉴权。API Explorer可以自动生成SDK代码示例，并提供SDK代码示例调试功能。
#### URI
POST /v2/{project_id}/edge-nodes/{edge_node_id}/schedules
表1路径参数 
| 参数           | 是否必选 | 参数类型   | 描述                                                                                        |
|:---|:---|:---|:---|
| project_id   | 是    | String | 项目ID。获取方法请参见 [获取项目ID](https://support.huaweicloud.com/api-iotedge/iotedge_api_0032.html)。 |
| edge_node_id | 是    | String | 边缘节点ID                                                                                    |
   
#### 请求参数
表2请求Header参数 
| 参数           | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                         |
|:---|:---|:---|:---|
| X-Auth-Token | 是    | String | 用户Token。通过调用IAM服务 [获取IAM用户Token](https://support.huaweicloud.com/api-iam/iam_30_0001.html)接口获取，接口返回的响应消息头中"X-Subject-Token"就是需要获取的用户Token。简要的获取方法样例请参见 [Token认证](https://support.huaweicloud.com/api-iothub/iot_06_v5_0091.html#section0)。 |
   
表3请求Body参数 
| 参数          | 是否必选 | 参数类型                                                                                                              | 描述                                                                         |
|:---|:---|:---|:---|
| schedule_id | 否    | String                                                                                                            | 调度计划id，租户下唯一，选填如不填则随机生成                                                    |
| name        | 是    | String                                                                                                            | 调度计划名称                                                                     |
| cycle_type  | 是    | String                                                                                                            | 调度计划的循环类型，once表示在start_time执行，end_time结束；daliy表示start_time-end_time之间每天都执行 |
| enabled     | 是    | Boolean                                                                                                           | 调度计划是否生效                                                                   |
| start_time  | 否    | Long                                                                                                              | 调度计划起始时间，毫秒级别的时间戳，可选值，不填表示立即执行                                             |
| end_time    | 是    | Long                                                                                                              | 调度计划结束时间，毫秒级别的时间戳                                                          |
| priority    | 是    | Integer                                                                                                           | 调度计划优先级。                                                                   |
| daily       | 否    | [DailyDto] object                   | 每天的时间描述结构体                                                                 |
| tasks       | 是    | Array of [ScheduleTask] objects | 调度任务信息                                                                     |
   
 表4DailyDto 
| 参数                | 是否必选 | 参数类型                                                                                                            | 描述                                                                                                                  |
|:---|:---|:---|:---|
| exceptional_dates | 否    | [ExceptionalDates] object | 例外的日期，valid_dates表示需要执行的日期，invalid_dates表示不执行的日期。其优先级最高，优先级：ExceptionalDates \> weekdays \> start_time-endtime      |
| time_spans        | 是    | Array of [TimeSpans] objects     | 时间段描述                                                                                                               |
| weekdays          | 否    | Object                                                                                                          | 描述此任务有效的星期几，为数组。如果为null，则表示start_time-endtime之间，每天都执行；如果为空数组，则表示start_time-endtime之间，每天都不执行；如果为\[1, 2\]，则表示每周一、二执行。 |
   
 表5ExceptionalDates 
| 参数            | 是否必选 | 参数类型             | 描述   |
|:---|:---|:---|:---|
| valid_dates   | 否    | Array of strings | 例外日期 |
| invalid_dates | 否    | Array of strings | 无效日期 |
   
 表6TimeSpans 
| 参数    | 是否必选 | 参数类型   | 描述                              |
|:---|:---|:---|:---|
| start | 是    | String | 开始时间；不包含日期，为本地时刻，根据网关侧的本地时间进行调度 |
| end   | 是    | String | 结束时间，不包含日期，为本地时刻，根据网关侧的本地时间进行调度 |
   
 表7ScheduleTask 
| 参数         | 是否必选 | 参数类型             | 描述                        |
|:---|:---|:---|:---|
| device_ids | 是    | Array of strings | 设备id数组                    |
| action     | 是    | String           | 任务执行的动作，当前支持SetProperties |
| paras      | 是    | Object           | 对应action的参数               |
   
#### 响应参数
**状态码：201**
表8响应Body参数 
| 参数                 | 参数类型                                                                                                               | 描述                |
|:---|:---|:---|
| schedule_id        | String                                                                                                             | 调度计划id，租户下唯一      |
| node_id            | String                                                                                                             | 节点id              |
| name               | String                                                                                                             | 调度计划名称            |
| cycle_type         | String                                                                                                             | 调度计划的循环类型         |
| enabled            | Boolean                                                                                                            | 调度计划是否生效          |
| reset_current_task | Boolean                                                                                                            | 是否立即执行            |
| start_time         | Long                                                                                                               | 调度计划起始时间，毫秒级别的时间戳 |
| end_time           | Long                                                                                                               | 调度计划结束时间，毫秒级别的时间戳 |
| priority           | Integer                                                                                                            | 调度计划优先级, 1-16     |
| daily              | [DailyDto] object                   | 每天的时间描述结构体        |
| tasks              | Array of [ScheduleTask] objects | 调度任务信息            |
   
 表9DailyDto 
| 参数                | 参数类型                                                                                                             | 描述                                                                                                                  |
|:---|:---|:---|
| exceptional_dates | [ExceptionalDates] object | 例外的日期，valid_dates表示需要执行的日期，invalid_dates表示不执行的日期。其优先级最高，优先级：ExceptionalDates \> weekdays \> start_time-endtime      |
| time_spans        | Array of [TimeSpans] objects     | 时间段描述                                                                                                               |
| weekdays          | Object                                                                                                           | 描述此任务有效的星期几，为数组。如果为null，则表示start_time-endtime之间，每天都执行；如果为空数组，则表示start_time-endtime之间，每天都不执行；如果为\[1, 2\]，则表示每周一、二执行。 |
   
 表10ExceptionalDates 
| 参数            | 参数类型             | 描述   |
|:---|:---|:---|
| valid_dates   | Array of strings | 例外日期 |
| invalid_dates | Array of strings | 无效日期 |
   
 表11TimeSpans 
| 参数    | 参数类型   | 描述                              |
|:---|:---|:---|
| start | String | 开始时间；不包含日期，为本地时刻，根据网关侧的本地时间进行调度 |
| end   | String | 结束时间，不包含日期，为本地时刻，根据网关侧的本地时间进行调度 |
   
 表12ScheduleTask 
| 参数         | 参数类型             | 描述                        |
|:---|:---|:---|
| device_ids | Array of strings | 设备id数组                    |
| action     | String           | 任务执行的动作，当前支持SetProperties |
| paras      | Object           | 对应action的参数               |
   
#### 请求示例
```
POST https://{endpoint}/v2/{project_id}/edge-nodes/{edge_node_id}/schedules
{
  "schedule_id" : "1A",
  "name" : "H1照明控制",
  "cycle_type" : "daily",
  "enabled" : true,
  "start_time" : 1691572410000,
  "end_time" : 1691572410000,
  "priority" : 8,
  "daily" : {
    "exceptional_dates" : {
      "valid_dates" : [ "2023-01-01" ],
      "invalid_dates" : [ "2023-01-02" ]
    },
    "time_spans" : [ {
      "start" : "11:40:00",
      "end" : "11:49:00"
    } ],
    "weekdays" : [ 1, 2, 3 ]
  },
  "tasks" : [ {
    "device_ids" : [ "device1" ],
    "action" : "SetProperties",
    "paras" : [ {
      "service_id" : "dataService",
      "properties" : {
        "Switch" : 1
      }
    } ]
  } ]
}
```
#### 响应示例
**状态码：201**
Created
```
{
  "schedule_id" : "1A",
  "node_id" : "node1",
  "name" : "H1照明控制",
  "cycle_type" : "daily",
  "enabled" : true,
  "reset_current_task" : false,
  "start_time" : 1691572410000,
  "end_time" : 1691572410000,
  "priority" : 8,
  "daily" : {
    "exceptional_dates" : {
      "valid_dates" : [ "2023-01-01" ],
      "invalid_dates" : [ "2023-01-02" ]
    },
    "time_spans" : [ {
      "start" : "11:40:00",
      "end" : "11:49:00"
    } ],
    "weekdays" : [ 1, 2, 3 ]
  },
  "tasks" : [ {
    "device_ids" : [ "device1" ],
    "action" : "SetProperties",
    "paras" : [ {
      "service_id" : "dataService",
      "properties" : {
        "Switch" : 1
      }
    } ]
  } ]
}
```
#### 状态码
| 状态码 | 描述          |
|:---|:---|
| 201 | Created     |
| 400 | Bad Request |
| 404 | Not Found   |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-iotedge/ErrorCode.html)。
