场景管理

## 场景管理 ### 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" } ```