场景管理
## 场景管理
### 1. 接口列表
|接口功能|请求方式|API|
|-|-|-|
|[获取手动场景列表](#1)|HTTP|list_manual_scenes|
|[获取自动场景列表](#2)|HTTP|list_auto_scenes|
|[场景添加](#3)|HTTP|add_scene|
|[场景删除](#4)|HTTP|delete_scene|
|[场景更新](#5)|HTTP|update_scene|
|[执行场景](#6)|HTTP|review_scene|
|[获取场景支持的条件类型]|HTTP|list_scene_condition_types|
|[获取设备支持的状态事件列表]|HTTP|list_device_state_event|
|[获取设备支持的执行指令列表]|HTTP|list_device_commands|
|[获取场景支持的天气状态事件列表]|HTTP|list_weather_state_event|
|[获取场景支持的位置状态事件列表]|HTTP|list_location_state_event|
|[获取场景支持的执行动作类型]|HTTP|list_scene_action_types|
### 2. 场景数据模型
|字段|类型|说明|
|-|-|-|
|name|String|场景的名称|
|icon|String|场景的图标地址|
|enable|boolean|是否启用场景,manual场景默认启动|
|effect_period|Object|场景生效时段 {begin: {hour:,minute:}, end:{hour:,minute:}}|
|type|int|场景类型,0 表示manualy,1 表示auto|
|conditions|Object|场景的条件,manualy场景,该字段为Null|
|actions|list|场景的执行任务|
<span id="1"></span>
### 3. 获取手动场景列表
- 请求方式: HTTP POST
- URL
```{base_url}/list_manual_scenes```
- Body Para
|参数名称|类型|描述|
|-|-|-|
|owner_id|String|房子的owner的user_id|
|house_id|String|房间id|
|time|Number|时间戳,获取在该时间之前创建的场景|
|limit|Number|最大返回条目,默认是20,不能超过20|
>d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。
- 返回格式说明
code/message字段具体参考 《概述》章节,data字段的内容,为设备添加成功后的设备ID
```
{
"code": 200,
"data": [{"name", "type": , ... }, {"name", "type": , ... }, ],
"message": "success"
}
```
<span id="2"></span>
### 4. 获取自动场景列表
- 请求方式: HTTP POST
- URL
```{base_url}/list_auto_scenes```
- Body Para
|参数名称|类型|描述|
|-|-|-|
|owner_id|String|房子的owner的user_id|
|house_id|String|房间id|
|time|Number|时间戳,获取在该时间之前创建的场景|
|limit|Number|最大返回条目,默认是20,不能超过20|
>d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。
- 返回格式说明
code/message字段具体参考 《概述》章节,data字段的内容,为设备添加成功后的设备ID
```
{
"code": 200,
"data": [{"name", "type": , ... }, {"name", "type": , ... }, ],
"message": "success"
}
```
<span id="3"></span>
### 5. 场景添加
- 请求方式: HTTP POST
- URL
```{base_url}/add_scene```
- Body Para
|参数名称|类型|描述|
|-|-|-|
|owner_id|String|房子的owner的user_id|
|house_id|String|房间id|
|scene_name|String|场景名称|
|scene_type|Number|场景类型,0 表示手动,1 表示自动|
|scene_icon|String|场景icon图标地址|
|scene_effect_period|object|场景有效时段,格式如下:{begin: {hour:, minute:}, end: {hour:, minute:}}|
|scene_conditions|object|场景条件|
|scene_actions|object|场景执行动作|
scene_conditions 格式:
|参数名称|类型|描述|
|-|-|-|
|rule_op|String|条件逻辑操作,AND表示所有条件必须满足,OR 表示任一条件满足|
|rules|Object<rule>|所有条件定义数据|
rule 格式:
|参数名称|类型|描述|
|-|-|-|
|type|String|条件类型,比如 设备状态事件/天气状态事件/位置状态事件/时间状态事件|
|data|Object|条件定义数据,根据type有所不同|
当type=scene.rules.types.DEVICE时, data格式如下:
|参数名称|类型|描述|
|-|-|-|
|device_id|String|设备id,基于哪个设备的状态事件|
|state_event|Object|设备状态事件定义,name/description/condition/parameters/subscribe_state/has_state_delay_update|
```
例子:
# 当 光线过强时,
conditions = {
"rule_op": "OR",
"rules": [
{
"type": "scene.rules.types.DEVICE",
"data": {
"device_id": "0001C991DE14004B1200",
"state_event": {
"name": "brightness too strong",
"condition": [
{
"field_name": "states.currentSensorStateData.brightness",
"logic_op": "$gt",
"op_value": 50
}
],
"parameters": None,
"description": "brightness too weak",
"subscribe_state": "states.currentSensorStateData.brightness",
"has_state_delay_update": False
}
}
}
]
}
# 当 光线 过弱时,
conditions = {
"rule_op": "OR",
"rules": [
{
"type": "scene.rules.types.DEVICE",
"data": {
"device_id": "0001C991DE14004B1200",
"state_event": {
"name": "brightness too strong",
"condition": [
{
"field_name": "states.currentSensorStateData.brightness",
"logic_op": "$lt",
"op_value": 50
}
],
"parameters": None,
"description": "brightness too weak",
"subscribe_state": "states.currentSensorStateData.brightness",
"has_state_delay_update": False
}
}
}
]
}
```
>d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。
- 返回格式说明
code/message字段具体参考 《概述》章节,data字段的内容,为设备添加成功后的设备ID
```
{
"code": 200,
"data": {"scene_id": <scene_id>},
"message": "success"
}
```
<span id="4"></span>
### 6. 场景删除
- 请求方式: HTTP POST
- URL
```{base_url}/delete_scene```
- Body Para
|参数名称|类型|描述|
|-|-|-|
|owner_id|String|房子的owner的user_id|
|house_id|String|房间id|
|scene_id|String|场景id|
>d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。
- 返回格式说明
code/message字段具体参考 《概述》章节,data字段的内容,为设备添加成功后的设备ID
```
{
"code": 200,
"data": None,
"message": "success"
}
```
<span id="5"></span>
### 7. 场景更新
- 请求方式: HTTP POST
- URL
```{base_url}/update_scene```
- Body Para
|参数名称|类型|描述|
|-|-|-|
|owner_id|String|房子的owner的user_id|
|house_id|String|房间id|
|scene_id|String|场景id|
|scene_name/type/icon/enable/conditions/actions/effect_period|String|场景具体参数|
>d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。
>w 必须提供至少一个场景参数
- 返回格式说明
code/message字段具体参考 《概述》章节,data字段的内容,为设备添加成功后的设备ID
```
{
"code": 200,
"data": None,
"message": "success"
}
```
<span id="6"></span>
### 8. 执行场景
- 请求方式: HTTP POST
- URL
```{base_url}/review_scene```
- Body Para
|参数名称|类型|描述|
|-|-|-|
|owner_id|String|房子的owner的user_id|
|house_id|String|房间id|
|scene_id|String|场景id|
>d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。
>w 手动场景的执行,即直接执行场景的所有actions
自动场景的执行,先review conditions,条件满足之后,再执行场景的所有actions
- 返回格式说明
code/message字段具体参考 《概述》章节,data字段的内容,为设备添加成功后的设备ID
```
{
"code": 200,
"data": None,
"message": "success"
}
```