业务接口

## 业务接口 面向前端业务接口 #### 1. 用户管理接口 |接口功能|请求方式|API| |-|-|-| |监听用户认证/登录状态|Firebase Auth|![image.png](https://cos.easydoc.net/21942958/files/kejvb2ni.png)| |用户注册/创建|Firebase Auth|```FirebaseAuth.instance.createUserWithEmailAndPassword(email, password)```| |用户邮箱是否已验证|Firebase Auth|```FirebaseAuth.instance.currentUser.emailVerified 属性```| |发送邮件验证码|Firebase Auth|```FirebaseAuth.instance.currentUser.sendEmailVerification()```| |检查并校验验证码|Firebase Auth|```FirebaseAuth.instance.currentUser.checkActionCode(code)```<br>```FirebaseAuth.instance.currentUser.applyActionCode(code)```<br>```FirebaseAuth.instance.currentUser.reload()```| |用户登录|Firebase Auth|先监听用户认证状态<br>```FirebaseAuth.instance.signInWithEmailAndPassword(email, password)```| |用户登出|Firebase Auth|```FirebaseAuth.instance.currentUser.signOut()```| |更新用户信息|Firebase Auth|```mAuth.getCurrentUser().updateProfile(profileUpdates)```| |更新用户邮箱|Firebase Auth|```mAuth.getCurrentUser().updateEmail("user@example.com")```| |更新用户密码|Firebase Auth|```mAuth.getCurrentUser().updatePassword(newPassword)```| |用户注销|Firebase Auth|```FirebaseAuth.instance.currentUser.delete()```| |用户登录状态|Firebase Auth|```user = FirebaseAuth.instance.currentUser```<br>```user is null表示没有登录```<br>| |对用户重新进行身份验证|Firebase Auth|```EmailAuthCredential credential = EmailAuthProvider.credential(email, password)```<br>```FirebaseAuth.instance.currentUser.reauthenticateWithCredential(credential)```| <b>Google 授权登录</b> |接口功能|请求方式|API| |-|-|-| |获取 经过Google授权登录 的 UserCredential|Firebase Auth|![image.png](https://cos.easydoc.net/21942958/files/kejwgeup.png)| <b>用户注册成功事件 云函数</b> - 生成物联子账号Id,随机生成 - 生成涂鸦子账号Id,随机生成,并调用三方创建子账号接口 schema/country_code/username/password/username_type=3 - 生成萤石子账号Id,并调用三方创建子账号接口 <b>APP侧SDK初始化接口</b> |接口功能|请求方式|API| |-|-|-| |萤石SDK-获取appkey和用户账号access_token|Firebase CF|萤石SDK初始化的时候,需要appkey和子用户access_token| |涂鸦SDK-获取appkey和appsecret|Firebase CF|涂鸦SDK初始化过程,需要appkey/appsecret,子用户的uid/passwword/country_code用于登录账号| >d 涂鸦和萤石的配网过程,均完全由SDK与三方云直接对接完成,SPS_Core只把控认证部分,SDK确认设备配网激活成功后,同步给SPS_Core。 #### 2. 设备管理接口 设备添加步骤,会根据不同的厂商,流程有所不同。 其他设备管理接口,都统一。 <b>(1)设备添加 相关接口</b> |接口功能|请求方式|API| |-|-|-| |添加物联网关设备|HTTP POST|/device/add| |监听物联网关下传感器设备状态变化|Firebase Firestore|- 传感器设备添加属于硬件对接,APP端显示添加向导</br>- APP侧使用 where().onSnapshot()监听网关下设备的添加| |同步物联网关下传感器设备列表|HTTP POST|- 触发让SPS_Core去同步指定物联网关下的设备列表</br>- [后台] 任务方式实现| |同步萤石摄像头设备|HTTP POST|- 触发让SPS_Core去同步指定萤石摄像头设备</br>- 用在APP端成功添加完萤石摄像头后</br>- [后台] 任务方式实现| |同步涂鸦设备|HTTP POST|- 触发让SPS_Core去同步指定涂鸦设备</br>- [后台] 任务方式实现| >d 备注:涂鸦在添加设备过程中,涉及的获取配网access_token和轮询配网结果,由SDK接口直接完成,不需要对接到SPS_Core,只需要在设备添加成功后,调用同步涂鸦设备接口,告诉SPS_Core去同步指定的涂鸦设备 <b>(2)获取设备信息</b> |接口功能|请求方式|API| |-|-|-| |根据设备ID获取设备信息|Firebase Firestore|```db.collection('user').doc('<user_id>').collection('devices').doc('<device_id>').get()```| |根据user_id获取设备列表信息|Firebase Firestore|```db.collection('user').doc('<user_id>').collection('devices').get()```| |监听具体某个设备的状态信息|Firebase Firestore|![image.png](https://cos.easydoc.net/21942958/files/kesd3dp8.png)| |监听网关下所有传感器设备状态信息|Firebase Firestore|![image.png](https://cos.easydoc.net/21942958/files/kesd2r2k.png)| |获取环境检测类设备历史状态数据|Firebase FireStore|```db.collection('user').doc('<user_id>').collection('device_data').where('device_id', ==: <device_id>).get().limit(20).then()```| <b>(3)更新设备状态信息</b> |接口功能|请求方式|API| |-|-|-| |安防检测设备 设防/撤防 状态切换|Firebase Cloud Function|| |电器开关设备 开关打开/关闭 操作|Firebase Cloud Function|| |电器开关设备 开关延迟打开/关闭 操作|Firebase Cloud Function|| |摄像头设备 设防/撤防 状态切换|Firebase Cloud Function|即动作检测功能的开启与关闭| >d 摄像头拍照/直播/对讲 均不通过SPS Core <b>对接三方的云函数</b> 监听由APP侧发起的对设备状态的更新,执行相应的动作到三方设备 基于物联传感器设备状态变化监控(Firestore collection where xx=物联)云函数 - 更新状态变化 到 相应的物联传感器设备 基于涂鸦车库门控制器设备状态变化监控(Firestore collection where xx=涂鸦)云函数 - 更新状态变化 到 相应的车库门控制器设备 基于萤石摄像头设备状态变化监控(Firestore collection where xx=萤石)云函数 - 更新状态变化 到 相应的萤石设备 事件总线 云函数 —— 同步设备列表事件 —— OnSync - 同步物联设备列表云函数,同步后转换成SPS的设备格式 - 同步涂鸦设备列表云函数,同步后转换成SPS的设备格式 - 同步萤石设备列表云函数,同步后转换成SPS的设备格式 #### 3. 场景管理接口 #### 4. 家庭管理接口 #### 5. 消息管理接口 #### 6. 问题管理接口 #### 7. 系统模块接口 #### 8. 后端任务函数 (1)同步指定设备信息 参数: - user_id: SPS 用户ID - device_id: SPS 设备ID - vendor: 设备厂商 过程: - 根据device_id,到相应的厂商云 获取设备信息,并绑定到SPS用户 (2)同步用户设备列表信息 参数: - user_id: SPS 用户ID - vendor: 设备厂商 (3)执行设备控制指令,并将执行结果反馈到firestore数据库 参数: - user_id: SPS 用户ID - device_id: 设备ID - vendor: 设备厂商 - execution_para: 执行指令参数 过程: - 根据设备厂商、设备执行参数,发起执行指令到相应的厂商云 - 更新 (4)添加设备操作日志到数据库 (5)物联MQTT客户端服务(python),涂鸦消息订阅客户端服务(java),萤石消息订阅客户端服务 (6)基于时间的任务函数,用于基于时间的自动化场景 (7)基于事件的任务函数 基于位置: - APP端上报位置,每个5秒,假设,触发云端更新用户位置数据,同时触发位置更新事件。 - 位置更新事件,订阅函数,计算位置是否满足场景条件,如果否,do nothing, 如果是执行操作 基于天气 - 每隔1分钟,获取天气数据,判断是否满足场景条件,如果否,do nothing, 如果是则执行操作 基于设备数据 - 设备状态数据被更新,触发函数review场景