图片版
文字太长不看版,请看下面图片。
文字版
当前配网结果页关闭逻辑主要分为四块:
- 关联房间逻辑;
- 重置引导逻辑;
- 蓝牙自动绑定逻辑;
- 通用关闭逻辑;
1. 关联房间逻辑
- 首先会根据当前入口来源是否为zigbee扫码配网,
- 若是,如果没有操作绑定房间,则默认绑定到预设的房间;
- 若不是,则进入步骤2;
- 当前是否设置默认绑定房间id,
- 若设置了,则将当前流程中配网在
成功
状态的设备都绑定到该房间下; - 若未设置,则无操作;
- 若设置了,则将当前流程中配网在
- 是否是全屋模式,
- 若是,则判断是否自动绑定到全屋中,
- 若是,则直接将当前配网在
成功
状态的设备都添加卡片到主页; - 若否,则仅添加当前已经主动操作添加卡片操作的
成功
状态的设备到主页(如果没有主动操作,则默认都不添加);
- 若是,则直接将当前配网在
- 若否,则不触发此逻辑;
- 若是,则判断是否自动绑定到全屋中,
- 是否为全屋模式如何判断?
通过中间层全屋组件AbsWholeHouseService.isSupportWholeHouse()
接口返回。- 是否为自动绑定到全屋如何判断?
通过中间层全屋组件AbsWholeHouseService.isSupportAddDeviceToHome()
接口返回。
若接口方法返回为空,则根据本地静态配置字段diyHome_activator_auto_add_home
默认值判断。
2. 重置引导逻辑
- 获取当前家庭下所有配网成功的设备,将未变成
成功
状态的设备都重置为待配网状态; - 若当前为游客模式,则判断当前配网
失败
状态的设备中,是否有强绑定失败或者游客模式强绑定失败的设备,- 若有,则打开补全信息的h5页面,并关闭配网流程中的所有页面;
- 若否,则进入3;
- 不是所有配网成功的设备都会展示为
成功
状态吗?步骤一是什么意思?
先说结论,并不是。可以参考配网基座sdk-复合扫描。
若关闭配网结果页自动添加功能,则进入配网结果页后,所有设备为可添加
状态,未点击item后的添加按钮则会保持在可添加
状态,这时退出页面时,这类已真实配网成功但未点击添加按钮的设备就会调用重置接口变为待添加状态。
3. 蓝牙自动绑定逻辑
- 根据静态开关
is_gateway_binding_after_activate
判断是否开启此功能,- 若开启,则获取当前配网成功的所有设备id,若不为空,则判断当前所有成功的设备中的蓝牙子设备列表以及蓝牙网关设备是否为空,
- 若两者都为空,则跳过该流程;
- 若两者有一个不为空,获取当前家庭下所有的未绑定网关的蓝牙子设备,获取当前家庭下所有的蓝牙单点子设备,若两者有一个不为空,调用云端接口获取当前所有网关的高级能力,若高能力网关列表不为空且可绑定子设备数量不为空,
- 当前蓝牙单点子设备不为空且网关数量大于1,则调用接口获取当前小程序链接,并打开小程序,并关闭配网流程所有页面;
- 只有一个可绑定网关且本次配网没有蓝牙子设备且当前子设备数量<=网关可添加数量,则调用自动绑定接口自动绑定;
- 只有一个可绑定网关但当前子设备数量>网关可添加数量,获取小程序链接并打开小程序并关闭配网流程所有页面;
- 若开启,则获取当前配网成功的所有设备id,若不为空,则判断当前所有成功的设备中的蓝牙子设备列表以及蓝牙网关设备是否为空,
其他所有情况,都跳过该流程的剩余步骤,进入下一步。
- 如何判断是未绑定网关的蓝牙子设备?
DeviceBean实体中,isSigmesh
或者isBeacon
并且parentId
为空并且protocolAttribute
<=0。- 如何判断网关是我们所需要的可用蓝牙网关?
DeviceBean实体中,hasConfigSigMesh
或者hasConfigBeacon
并且isCloudOnline
为true
。
4. 通用关闭逻辑
- 停止当前所有扫描、配网操作;
- 若配网成功有且仅有一个设备,则通过方法
openDevicePanel
打开对应面板; - 若配网成功多个设备,则通过方法
onDevicesAdd
回调给打开配网流程方; - 通过
onRoomDataUpdate
方法通知首页刷新房间信息;
点击页面左上角返回按钮或者点击物理返回按键和点击完成按钮有什么区别呢?
有且仅有一个区别,当前是否有正在配网或者暂未配网的设备则弹出弹框提示是否要关闭,若点击确定,则其余流程与点击完成一致。