| | |
| | | /// 当前按键配置的功能 |
| | | /// </summary> |
| | | public static int clusterID = 0; |
| | | /// <summary> |
| | | /// 记录旧的目标列表 |
| | | /// </summary> |
| | | public static List<CommonDevice> oldTargetList = new List<CommonDevice>(); |
| | | |
| | | public static async System.Threading.Tasks.Task<int> RemoveTargets(BindObj.BindListResponseObj bindDevice, Panel currentKey) |
| | | { |
| | | var delDevice = new BindObj.DelDeviceBindData(); |
| | | delDevice.DeviceAddr = currentKey.DeviceAddr; |
| | | delDevice.Epoint = currentKey.DeviceEpoint; |
| | | |
| | | if (bindDevice.BindType == 0 || bindDevice.BindType == 1) |
| | | { |
| | | var removeDevice = new BindObj.RemoveBindListObj(); |
| | | removeDevice.BindCluster = bindDevice.BindCluster; |
| | | removeDevice.BindType = 0; |
| | | removeDevice.BindMacAddr = bindDevice.BindMacAddr; |
| | | removeDevice.BindEpoint = bindDevice.BindEpoint; |
| | | delDevice.RemoveBindList.Add(removeDevice); |
| | | } |
| | | else if (bindDevice.BindType == 2) |
| | | { |
| | | var removeDevice = new BindObj.RemoveBindListObj(); |
| | | removeDevice.BindCluster = bindDevice.BindCluster; |
| | | removeDevice.BindType = 1; |
| | | removeDevice.BindScenesId = bindDevice.BindScenesId; |
| | | delDevice.RemoveBindList.Add(removeDevice); |
| | | } |
| | | var delResult = await currentKey.DelDeviceBindAsync(delDevice); |
| | | foreach (var re in delResult.delDeviceBindResponseData.RemoveBindList) |
| | | { |
| | | switch (re.Result) |
| | | { |
| | | case 0: |
| | | return 0; |
| | | break; |
| | | case 4: |
| | | |
| | | if (delResult.removeBindResultResponseData != null) |
| | | { |
| | | if (delResult.removeBindResultResponseData.Result == 0) |
| | | { |
| | | return 0; |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | return -1; |
| | | } |
| | | |
| | | /// <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.DeviceUIList.Count == 0) |
| | | { |
| | | return false; |
| | | } |
| | | if (room.IsLove == true) |
| | | { |
| | | return false; |
| | | } |
| | | foreach (var deviceUi in room.DeviceUIList) |
| | | { |
| | | //检测该设备能否显示 |
| | | if (CheckCanShowDevice(deviceUi.CommonDevice, 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 = Common.Room.CurrentRoom.GetFloorSortList(); |
| | | foreach (var floorId in dicFloor.Keys) |
| | | { |
| | | //第一个楼层 |
| | | return dicFloor[floorId]; |
| | | break; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取当前楼层 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static string GetCurrentSelectFloorId() |
| | | { |
| | | var dicFloor = Common.Room.CurrentRoom.GetFloorSortList(); |
| | | foreach (var floorId in dicFloor.Keys) |
| | | { |
| | | //第一个楼层 |
| | | return floorId; |
| | | break; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取当前楼层名称 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static string GetCurrentSelectFloorIdName() |
| | | { |
| | | var dicFloor = Common.Room.CurrentRoom.GetFloorSortList(); |
| | | foreach (var floorId in dicFloor.Keys) |
| | | { |
| | | //第一个楼层 |
| | | return dicFloor[floorId]; |
| | | break; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 检测控制面板(按键类)所拥有的功能,现支持的有以下几种(必定存在键值,出错会返回null) |
| | |
| | | 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; |
| | | //获取第一级功能 |
| | | var result = await key.GetPanelDeviceFunctionLevel1(); |
| | | if (result == null) |
| | | if (key.privateFuncFirstLevelList.Count == 0 || key.privateFuncFirstLevelList.Contains(256) == false) |
| | | { |
| | | return null; |
| | | result = await key.GetPanelDeviceFunctionLevel1(); |
| | | if (result == null) |
| | | { |
| | | return null; |
| | | } |
| | | key.privateFuncFirstLevelList = result; |
| | | //面板没有按键类 |
| | | if (result.Contains(256) == false) |
| | | { |
| | | return dicCheck; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | result = key.privateFuncFirstLevelList; |
| | | } |
| | | |
| | | //面板没有按键类 |
| | | if (result.Contains(256) == false) |
| | | 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) |
| | | { |
| | | return dicCheck; |
| | | //获取第二级功能 |
| | | result = await key.GetPanelDeviceFunctionLevel2(256); |
| | | if (result == null) |
| | | { |
| | | return null; |
| | | } |
| | | key.privateFuncSecondLevelList = result; |
| | | } |
| | | else |
| | | { |
| | | result = key.privateFuncSecondLevelList; |
| | | } |
| | | |
| | | //获取第二级功能 |
| | | result = await key.GetPanelDeviceFunctionLevel2(256); |
| | | if (result == null) |
| | | { |
| | | return null; |
| | | } |
| | | //特殊功能 |
| | | if (result.Contains(1) == true) |
| | | { |
| | | List<int> result3 = null; |
| | | //获取第三级功能 |
| | | var result3 = await key.GetPanelDeviceFunctionLevel3(256, 1); |
| | | 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) |
| | |
| | | //按键开关类 |
| | | if (result.Contains(100) == true) |
| | | { |
| | | |
| | | List<int> result3 = null; |
| | | //获取第三级功能 |
| | | var result3 = await key.GetPanelDeviceFunctionLevel3(256, 100); |
| | | 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) |
| | |
| | | //按键调光类 |
| | | if (result.Contains(200) == true) |
| | | { |
| | | List<int> result3 = null; |
| | | //获取第三级功能 |
| | | var result3 = await key.GetPanelDeviceFunctionLevel3(256, 200); |
| | | 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; |
| | | dicCheck["亮度:按等级调大"] = true; |
| | | } |
| | | if (result3.Contains(201) == true) |
| | | { |
| | | dicCheck["亮度:调小"] = 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; |
| | | //获取第三级功能 |
| | | var result3 = await key.GetPanelDeviceFunctionLevel3(256, 300); |
| | | 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) |
| | |
| | | // }; |
| | | //} |
| | | |
| | | |
| | | } |
| | | } |