设备管理

## 设备管理 ### 1. 接口列表 |接口功能|请求方式|API| |-|-|-| |[设备添加](#1)|HTTP|add_device| |[设备删除](#2)|HTTP|delete_device| |[设备同步](#3)|HTTP|sync_device| |[获取用户设备列表](#4)|Firebase Firestore|```db.collection('users').document('<user_id>').collection('houses').document('<house_id>').collection('devices').get()```| |[监听用户设备列表](#4)|Firebase Firestore|```db.collection('users').document('<user_id>').collection('houses').document('<house_id>').collection('devices').snapshots()```| |[执行设备指令](#5)|HTTP|execute_device| |[修改设备名称](#6)|HTTP|update_device_name| |[修改设备所在房间](#7)|HTTP|update_device_room| |[修改设备密码](#8)|HTTP|update_device_password| |[获取设备操作日志](#9)|HTTP|list_device_operations| |[获取设备告警列表](#10)|HTTP|list_device_alarms| |[获取设备历史状态列表](#11)|HTTP|list_device_datas, 用于环境检测类设备,保存设备历史状态数据,比如温度/湿度/亮度| |[获取所有支持的设备类型列表](#12)|HTTP|list_support_devices| <span id="1"></span> ### 2. 设备添加(绑定) - 请求方式: HTTP POST - URL ```{base_url}/add_device``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房间id| |device_serial|String|设备序列号| |device_code|String|设备密码(验证码),对于物联网关默认是序列号的后面六位数字,对于萤石摄像头,device_code直接印在设备上面| |device_vendor|String|设备归属的厂商,比如:devices.vendor.WULIAN| |device_type|String|(可选)设备类型,比如:devices.type.GATEWAY_01| >d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。 - 返回格式说明 code/message字段具体参考 《概述》章节,data字段的内容,为设备添加成功后的设备ID ``` { "code": 200, "data": { "device_id": ... }, "message": "success" } ``` <span id="2"></span> ### 3. 设备删除(解绑) - 请求方式: HTTP POST - URL ```{base_url}/delete_device``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房间id| |device_id|String|设备id| >d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。 - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": null, "message": "success" } ``` <span id="3"></span> ### 4. 设备同步 - 请求方式: HTTP POST - URL ```{base_url}/sync_device``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房间id| |device_id|String|设备id| >d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。 - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": null, "message": "success" } ``` >w 只有gw类型的设备才支持sync_device接口 <span id="4"></span> ### 5. 获取/监听用户设备列表 (Flutter例子): - 请求方式:Firestore接口 ``` FirebaseFirestore.instance.collection('<collection_name>').snapshots() ``` - 请求需要参数 用户所有设备的collection, 的访问路径如下: ``` FirebaseFirestore.instance .collection("users").document("<user_id>") .collection("houses").document("<house_id>") .collection("devices") ``` 需要的参数: (1)user_id: 用户的id, 这里是指房子的owner的user_id (2)house_id: 想要访问的用户的houses的id - 例子: ``` class UserInformation extends StatelessWidget { @override Widget build(BuildContext context) { CollectionReference devices = FirebaseFirestore.instance.collection('users').document('<user_id>').collection('houses').document('<house_id>').collection('devices'); return StreamBuilder<QuerySnapshot>( stream: devices.snapshots(), builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) { if (snapshot.hasError) { return Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return Text("Loading"); } return new ListView( children: snapshot.data.documents.map((DocumentSnapshot document) { return new ListTile( title: new Text(document.data()['name']['nicknames'][0]), subtitle: new Text(document.data()['type']), ); }).toList(), ); }, ); } } ``` <span id="5"></span> ### 6. 执行设备指令 - 请求方式: HTTP POST - URL ```{base_url}/execute_device``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房子的ID| |device_id|String|设备ID| |executions|list<execute_object>|设备ID| >d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。 <b>execution object字段</b> |参数名称|类型|描述| |-|-|-| |challenge|Object|{pin: xxx},认证信息| |command|String|执行的命令类型| |params|Object|执行命令的参数,根据不同的命令类型,有所不同| - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": null, "message": "success" } ``` <span id="6"></span> ### 7. 修改设备昵称 - 请求方式: HTTP POST - URL ```{base_url}/update_device_name``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房子的ID| |device_id|String|设备ID| |device_name|String|设备昵称| >d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。 - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": null, "message": "success" } ``` <span id="7"></span> ### 8. 修改设备归属房间 - 请求方式: HTTP POST - URL ```{base_url}/update_device_room``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房子的ID| |device_id|String|设备ID| |room_id|String|房间ID,如果提供了room_id,将归属设备到该房间,如果没有提供room_id, 将设备移出该房间| >d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。 >d 关于 room_id 参数,如果提供了room_id,将归属设备到该房间,如果没有提供room_id, 将设备移出该房间 - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": null, "message": "success" } ``` <span id="8"></span> ### 9. 修改设备密码 - 请求方式: HTTP POST - URL ```{base_url}/update_device_password``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房子的ID| |device_id|String|设备ID| |device_password|String|设备新的密码| |device_vendor|String|设备归属的厂商,比如:devices.vendor.WULIAN| - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": null, "message": "success" } ``` >d 目前只有物联的网关设备支持修改设备密码操作 <span id="9"></span> ### 10. 获取设备操作日志 - 请求方式: HTTP POST - URL ```{base_url}/list_device_operations``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房子的ID| |device_id|String|设备ID| >d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。 - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": [ { "time": <时间戳,13位,毫秒>, "operation": <操作描述> } ], "message": "success" } ``` <span id="10"></span> ### 11. 获取设备告警列表 - 请求方式: HTTP POST - URL ```{base_url}/list_device_alarms``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房子的ID| |device_id|String|设备ID| >d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。 - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": [ { "time": <时间戳,13位,毫秒>, "event": <告警描述> } ], "message": "success" } ``` <span id="11"></span> ### 12. 获取设备历史状态列表 - 请求方式: HTTP POST - URL ```{base_url}/list_device_datas``` - Body Para |参数名称|类型|描述| |-|-|-| |owner_id|String|房子的owner的user_id| |house_id|String|房子的ID| |device_id|String|设备ID| >d owner_id和house_id可以不提供,如果没有提供owner_id和house_id,后台将从用户当前所在的house字段,提取owner_id和house_id。建议直接提供这两个参数。 - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": [ { "time": <时间戳,13位,毫秒>, "states": <设备状态字段,根据不同设备类型,有所不同> } ], "message": "success" } ``` <span id="12"></span> ### 13. 获取所有支持的设备类型 - 请求方式: HTTP POST - URL ```{base_url}/list_support_devices``` - Body Para 不需要参数 - 返回格式说明 code/message字段具体参考 《概述》章节 ``` { "code": 200, "data": [ ], "message": "success" } ``` ### 相关字段说明 ### (1)设备厂商字段 device_vendor |字段值|类型|说明| |-|-|-| |devices.vendor.WULIAN|String|物联| |devices.vendor.EZVIZ|String|萤石| |devices.vendor.TUYA|String|涂鸦| ### (2)设备字段 |字段|类型|说明| |-|-|-| |id|String|设备ID编号| |category|String|设备类型,安防检测/环境检测/电器开关/摄像头| |type|String|设备具体产品类型(SKU)| |icons|Object|设备icon,分small, median, large, superLarge| |googleType|String|对应到google平台的产品类型| |name|Obj|设备名称,包括defaultName, name, nicknames| |deviceInfo|Obj|设备厂家信息,包括manufacturer, productPicture, model, hwVersion, swVersion| |error|String|设备出现错误,错误信息| |alarm|Object|设备当前的告警,如果当前没有告警,则为null。如果有,告警内容格式:id, event, time| |willReportState|boolean|是否上报设备状态变化,给APP端使用| |attributes|Obj|设备属性定义,不同设备内容也不同| |states|Obj|设备当前状态| |traits|Obj|设备支持的状态| |room|Obj|设备所属的房间{id:, name:, floor:, rank_id:}| |roomHint|String|设备所属的房间 <room_name>_<floor>F| |otherDeviceIds|List|其他设备ID编码,对应三方的设备ID| |gatewayDeviceId|String|设备归属的网关ID| |customData|String|其他设备信息,对应三方的其他字段,(可选)| ### (3)设备类别 category字段 说明 |Category值|说明| |-|-| |devices.category.SMART_GATEWAY|智能网关| |devices.category.SECURITY_DETECTOR|安防检测| |devices.category.ENVIRONMENT_SENSOR|环境检测| |devices.category.SMART_SWITCH|智能开关| |devices.category.SMART_CAMERA|智能摄像头| ### (4)设备型号 type字段 说明 |type值|说明| |-|-| |devices.types.GATEWAY_01|竖型智能网关| |devices.types.GATEWAY_02|盒型智能网关| |devices.types.GAS_DETECTOR|天然气检测器| |devices.types.PIR_DETECTOR|红外动作检测器| |devices.types.CONTACT_DETECTOR|门窗磁检测器| |devices.types.WATER_LEAK_DETECTOR|水浸检测器| |devices.types.SMOKE_DETECTOR|烟雾检测器| |devices.types.SOUND_WARNER|声光报警器| |devices.types.TEMP_HUMI_SENSOR|温湿度感应器| |devices.types.LIGHT_SENSOR|光强感应器| |devices.types.SCENE_SWITCH_6|六路场景开关| |devices.types.EMBEDDED_SWITCH_1|嵌入式零火一路开关| |devices.types.EMBEDDED_SWITCH_2|嵌入式零火两路开关| |devices.types.WALL_SWITCH_1|墙壁一路开关| |devices.types.WALL_SWITCH_2|墙壁两路开关| |devices.types.WALL_SWITCH_3|墙壁三路开关| |devices.types.GARAGE_DOOR_OPENER|车库门控制器| |devices.types.CAMERA_C3W|C3W摄像头| |devices.types.CAMERA_C3A|C3A摄像头| ### (5)设备状态 states字段 说明 |states值|说明| |-|-| |online|设备是否上线,True为上线,False为离线| |isArmed|设备的设防状态,True表示当前设备处于设防状态中,False表示当前设备处于撤防状态中<br>一般用于安防检测类设备| |currentSensorStateData|设备传感器当前状态数据| |currentToggleSettings|开关状态数据,当前开关的开/关 状态| |currentElectricalData|电压/电流/实时功率/累计电量数据|