New file |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Threading.Tasks; |
| | | using Shared.Common; |
| | | using Shared.Phone.UserCenter.Device; |
| | | using ZigBee.Device; |
| | | using static ZigBee.Device.Panel; |
| | | |
| | | namespace Shared.Phone.UserCenter.DeviceBind |
| | | { |
| | | public class BindInfo |
| | | { |
| | | /// <summary> |
| | | /// 当前按键配置的功能 |
| | | /// </summary> |
| | | public static int clusterID = 0; |
| | | /// <summary> |
| | | /// 记录旧的目标列表 |
| | | /// </summary> |
| | | public static List<CommonDevice> oldTargetList = new List<CommonDevice>(); |
| | | |
| | | /// <summary> |
| | | /// 检测该设备能否显示 |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | /// <returns></returns> |
| | | public static bool CheckCanShowDevice(ZigBee.Device.CommonDevice device, string curDeviceBindType = "AddSwitch") |
| | | { |
| | | if (device == null) |
| | | { |
| | | return false; |
| | | } |
| | | //如果是传感器,或者是没有开关簇的话(这里判断的是输入簇) |
| | | if ((device.Type == ZigBee.Device.DeviceType.IASZone) || InMatchDevice(device, curDeviceBindType) == false) |
| | | { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 检测该房间能否显示 |
| | | /// </summary> |
| | | /// <param name="room"></param> |
| | | /// <returns></returns> |
| | | public static bool CheckCanShowRoom(Common.Room room, string curDeviceBindType = "AddSwitch") |
| | | { |
| | | if (room.ListDevice.Count == 0) |
| | | { |
| | | return false; |
| | | } |
| | | if (room.IsLove == true) |
| | | { |
| | | return false; |
| | | } |
| | | foreach (var deviceKeys in room.ListDevice) |
| | | { |
| | | var device = Common.LocalDevice.Current.GetDevice(deviceKeys); |
| | | //检测该设备能否显示 |
| | | if (CheckCanShowDevice(device, curDeviceBindType) == false) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | //存在设备的话,此房间可以显示 |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 检测设备是否拥有开关的功能(输入簇) |
| | | /// </summary> |
| | | /// <param name="device"></param> |
| | | /// <returns></returns> |
| | | public static bool InMatchDevice(CommonDevice device, string curDeviceBindType = "AddSwitch") |
| | | { |
| | | foreach (var data in device.InClusterList) |
| | | { |
| | | switch (curDeviceBindType) |
| | | { |
| | | case "AddSwitch": |
| | | //拥有on/off功能的,才支持测试 |
| | | if (data.InCluster == 6) |
| | | { |
| | | return true; |
| | | } |
| | | break; |
| | | case "AddDimmer": |
| | | if (data.InCluster == 8) |
| | | { |
| | | return true; |
| | | } |
| | | break; |
| | | case "AddCurtain": |
| | | if (data.InCluster == 258) |
| | | { |
| | | return true; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 底部完成按钮显示 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static void FinishDisplay(List<Room> roomTempList, Button btnFinish) |
| | | { |
| | | if (roomTempList.Count == 0) |
| | | { |
| | | btnFinish.Enable = false; |
| | | btnFinish.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; |
| | | } |
| | | else |
| | | { |
| | | btnFinish.Enable = true; |
| | | btnFinish.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取当前楼层名称 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static string GetCurrentKeyAllRoomList() |
| | | { |
| | | var dicFloor = HdlRoomLogic.Current.GetFloorSortList(); |
| | | foreach (var floorId in dicFloor.Keys) |
| | | { |
| | | //第一个楼层 |
| | | return dicFloor[floorId]; |
| | | break; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取当前楼层 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static string GetCurrentSelectFloorId() |
| | | { |
| | | var dicFloor = HdlRoomLogic.Current.GetFloorSortList();// |
| | | foreach (var floorId in dicFloor.Keys) |
| | | { |
| | | //第一个楼层 |
| | | return floorId; |
| | | break; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取当前楼层名称 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static string GetCurrentSelectFloorIdName() |
| | | { |
| | | var dicFloor = HdlRoomLogic.Current.GetFloorSortList(); |
| | | foreach (var floorId in dicFloor.Keys) |
| | | { |
| | | //第一个楼层 |
| | | return dicFloor[floorId]; |
| | | break; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取当前楼层名称 |
| | | /// fllodID:楼层ID |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static string GetBindTargetsFloorIdName(string curFllodID) |
| | | { |
| | | var dicFloor = HdlRoomLogic.Current.GetFloorSortList(); |
| | | foreach (var floorId in dicFloor.Keys) |
| | | { |
| | | //当前楼层 |
| | | if (curFllodID == floorId) |
| | | { |
| | | return dicFloor[floorId]; |
| | | break; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 检测控制面板(按键类)所拥有的功能,现支持的有以下几种(必定存在键值,出错会返回null) |
| | | /// </summary> |
| | | /// <returns>The panel key function level2.</returns> |
| | | /// <param name="key">Key.</param> |
| | | public static async System.Threading.Tasks.Task<Dictionary<string, bool>> CheckPanelKeyFunctionLevel3(Panel key) |
| | | { |
| | | Dictionary<string, bool> dicCheck = new Dictionary<string, bool>(); |
| | | dicCheck["场景:触发"] = false; |
| | | dicCheck["开关:开"] = false; |
| | | dicCheck["开关:关"] = false; |
| | | dicCheck["开关:切换"] = false; |
| | | dicCheck["亮度:按等级调大"] = false; |
| | | dicCheck["亮度:按等级调小"] = false; |
| | | dicCheck["亮度:按等级切换"] = false; |
| | | dicCheck["亮度:打开"] = false; |
| | | dicCheck["亮度:关闭"] = false; |
| | | dicCheck["亮度:切换"] = false; |
| | | dicCheck["窗帘:开"] = false; |
| | | dicCheck["窗帘:关"] = false; |
| | | dicCheck["窗帘:停"] = false; |
| | | dicCheck["窗帘:上升停"] = false; |
| | | dicCheck["窗帘:下降停"] = false; |
| | | |
| | | |
| | | List<int> result = null; |
| | | //获取第一级功能 |
| | | if (key.privateFuncFirstLevelList.Count == 0 || key.privateFuncFirstLevelList.Contains(256) == false) |
| | | { |
| | | result = await key.GetPanelDeviceFunctionLevel1(); |
| | | if (result == null) |
| | | { |
| | | return null; |
| | | } |
| | | key.privateFuncFirstLevelList = result; |
| | | //面板没有按键类 |
| | | if (result.Contains(256) == false) |
| | | { |
| | | return dicCheck; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result = key.privateFuncFirstLevelList; |
| | | } |
| | | |
| | | if (key.privateFuncSecondLevelList.Count == 0 || key.privateFuncSecondLevelList.Contains(1) == false || key.privateFuncSecondLevelList.Contains(100) == false || key.privateFuncSecondLevelList.Contains(200) == false || key.privateFuncSecondLevelList.Contains(300) == false) |
| | | { |
| | | //获取第二级功能 |
| | | result = await key.GetPanelDeviceFunctionLevel2(256); |
| | | if (result == null) |
| | | { |
| | | return null; |
| | | } |
| | | key.privateFuncSecondLevelList = result; |
| | | } |
| | | else |
| | | { |
| | | result = key.privateFuncSecondLevelList; |
| | | } |
| | | |
| | | //特殊功能 |
| | | if (result.Contains(1) == true) |
| | | { |
| | | List<int> result3 = null; |
| | | //获取第三级功能 |
| | | if (key.privateFuncThirdLevelList.Count == 0 || key.privateFuncThirdLevelList.Contains(1) == false) |
| | | { |
| | | result3 = await key.GetPanelDeviceFunctionLevel3(256, 1); |
| | | foreach (var l3 in result3) |
| | | { |
| | | key.privateFuncThirdLevelList.Add(l3); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result3 = key.privateFuncThirdLevelList; |
| | | } |
| | | if (result3 != null) |
| | | { |
| | | if (result3.Contains(1) == true) |
| | | { |
| | | dicCheck["场景:触发"] = true; |
| | | } |
| | | } |
| | | } |
| | | //按键开关类 |
| | | if (result.Contains(100) == true) |
| | | { |
| | | |
| | | List<int> result3 = null; |
| | | //获取第三级功能 |
| | | if (key.privateFuncThirdLevelList.Count == 0 || key.privateFuncThirdLevelList.Contains(100) == false || key.privateFuncThirdLevelList.Contains(101) == false || key.privateFuncThirdLevelList.Contains(102) == false) |
| | | { |
| | | result3 = await key.GetPanelDeviceFunctionLevel3(256, 100); |
| | | foreach (var l3 in result3) |
| | | { |
| | | key.privateFuncThirdLevelList.Add(l3); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result3 = key.privateFuncThirdLevelList; |
| | | } |
| | | if (result3 != null) |
| | | { |
| | | if (result3.Contains(100) == true) |
| | | { |
| | | dicCheck["开关:开"] = true; |
| | | } |
| | | if (result3.Contains(101) == true) |
| | | { |
| | | dicCheck["开关:关"] = true; |
| | | } |
| | | if (result3.Contains(102) == true) |
| | | { |
| | | dicCheck["开关:切换"] = true; |
| | | } |
| | | } |
| | | } |
| | | //按键调光类 |
| | | if (result.Contains(200) == true) |
| | | { |
| | | List<int> result3 = null; |
| | | //获取第三级功能 |
| | | if (key.privateFuncThirdLevelList.Count == 0 || key.privateFuncThirdLevelList.Contains(200) == false || key.privateFuncThirdLevelList.Contains(201) == false || key.privateFuncThirdLevelList.Contains(202) == false) |
| | | { |
| | | result3 = await key.GetPanelDeviceFunctionLevel3(256, 200); |
| | | foreach (var l3 in result3) |
| | | { |
| | | key.privateFuncThirdLevelList.Add(l3); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result3 = key.privateFuncThirdLevelList; |
| | | } |
| | | if (result3 != null) |
| | | { |
| | | if (result3.Contains(200) == true) |
| | | { |
| | | dicCheck["亮度:按等级调大"] = true; |
| | | } |
| | | if (result3.Contains(201) == true) |
| | | { |
| | | dicCheck["亮度:按等级调小"] = true; |
| | | } |
| | | if (result3.Contains(202) == true) |
| | | { |
| | | dicCheck["亮度:按等级切换"] = true; |
| | | } |
| | | if (result3.Contains(203) == true) |
| | | { |
| | | dicCheck["亮度:打开"] = true; |
| | | } |
| | | if (result3.Contains(204) == true) |
| | | { |
| | | dicCheck["亮度:关闭"] = true; |
| | | } |
| | | if (result3.Contains(205) == true) |
| | | { |
| | | dicCheck["亮度:切换"] = true; |
| | | } |
| | | } |
| | | } |
| | | //窗帘类 |
| | | if (result.Contains(300) == true) |
| | | { |
| | | List<int> result3 = null; |
| | | //获取第三级功能 |
| | | if (key.privateFuncThirdLevelList.Count == 0 || (key.privateFuncThirdLevelList.Contains(300) == false && key.privateFuncThirdLevelList.Contains(301) == false && key.privateFuncThirdLevelList.Contains(302) == false && key.privateFuncThirdLevelList.Contains(303) == false && key.privateFuncThirdLevelList.Contains(304) == false)) |
| | | { |
| | | result3 = await key.GetPanelDeviceFunctionLevel3(256, 300); |
| | | foreach (var l3 in result3) |
| | | { |
| | | key.privateFuncThirdLevelList.Add(l3); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result3 = key.privateFuncThirdLevelList; |
| | | } |
| | | |
| | | if (result3 != null) |
| | | { |
| | | if (result3.Contains(300) == true) |
| | | { |
| | | dicCheck["窗帘:开"] = true; |
| | | } |
| | | if (result3.Contains(301) == true) |
| | | { |
| | | dicCheck["窗帘:关"] = true; |
| | | } |
| | | if (result3.Contains(302) == true) |
| | | { |
| | | dicCheck["窗帘:停"] = true; |
| | | } |
| | | if (result3.Contains(303) == true) |
| | | { |
| | | dicCheck["窗帘:上升停"] = true; |
| | | } |
| | | if (result3.Contains(304) == true) |
| | | { |
| | | dicCheck["窗帘:下降停"] = true; |
| | | } |
| | | } |
| | | } |
| | | return dicCheck; |
| | | } |
| | | } |
| | | } |