using System; using System.Collections.Generic; using System.Linq.Expressions; using Shared.Common; using Shared.Phone.UserCenter.Safety; using ZigBee.Device; using static ZigBee.Device.BindObj; using static ZigBee.Device.Panel; namespace Shared.Phone.UserCenter.DeviceBind { public class PanelFangyueFreshAirTargetsForm : BindCommonLayout { #region 构造函数 /// /// 构造函数 /// /// /// 1:新风;2:温度传感器;3:湿度传感器 public PanelFangyueFreshAirTargetsForm(CommonDevice device, int deviceBindType) { this.curControlDev = device as FreshAir; this.curDeviceBindType = deviceBindType; } #endregion #region 变量申明 /// /// 当前控制设备 /// //CommonDevice currentControlDevice; /// /// 当前新风面板【控制设备】 /// FreshAir curControlDev; /// /// 显示被绑定设备或场景的view /// VerticalFrameRefreshControl midVerticalScrolViewLayout; /// /// 显示房间的view /// HorizontalScrolViewLayout btnHorizontalScrolViewLayout; /// /// 按键配置的目标列表 /// List targetList = new List(); /// /// 面板中已经存在的目标列表 /// List oldTargetList = new List(); /// /// 当前设备绑定类型 /// 1:新风 /// 2:温度传感器 /// 3:湿度传感器 /// 4:PM2.5传感器 /// int curDeviceBindType = 0; /// /// 本地房间列表 /// List supportRoomList = new List(); /// /// 保存完成按钮 /// Button btnFinifh; /// /// 楼层文本 /// Button btnFloorText; /// /// 楼层列表 /// Dictionary dicFloorList; /// /// 所有房间中支持被绑定的设备列表 /// List currentPanelSupportBindDeviceList = new List(); /// /// 当前房间中支持被绑定的设备列表 /// List currentRoomSupportBindDeviceList = new List(); /// /// 面板中存在的键值 /// List panelBindListKey = null; /// /// 新风绑定目标回调 /// public Action actionFreshAirTarget = null; /// /// 温度绑定目标回调 /// public Action actionTemperatureTarget = null; /// /// 湿度绑定目标回调 /// public Action actionHumidityTarget = null; /// /// PM绑定目标回调 /// public Action actionPMTarget = null; #endregion #region UI设计 /// /// 目标页显示 /// public void Show() { #region 标题栏 string titleText = ""; switch (curDeviceBindType) { case 1: titleText = Language.StringByID(R.MyInternationalizationString.BindFreshAirTarget); break; case 2: titleText = Language.StringByID(R.MyInternationalizationString.TemperatureSource); break; case 3: titleText = Language.StringByID(R.MyInternationalizationString.HumiditySource); break; case 4: titleText = Language.StringByID(R.MyInternationalizationString.PM25Source); break; } this.TopFrameLayout(this, titleText); EventHandler eHandlerBack = (sender, e) => { RemoveFromParent(); }; this.btnTitle.Width = Application.GetRealWidth(1080 - 161 - 300); this.btnBack.MouseUpEventHandler += eHandlerBack; this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack; this.MidFrameLayout(this); #endregion //添加楼层UI BindDownFrameLayout(); //标题栏下的UI MidFrameLayoutContent(); //初始化设备数据 InitData(); } /// /// 添加楼层UI /// void BindDownFrameLayout() { var btnAddFrameLayout = new FrameLayout { X = Application.GetRealWidth(619), }; this.titleFrameLayout.AddChidren(btnAddFrameLayout); btnFloorText = new Button { Width = Application.GetRealWidth(300 - 69 - 58), Text = Language.StringByID(R.MyInternationalizationString.FirstFloor), TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextSize = 14, IsBold = true, TextAlignment = TextAlignment.CenterRight, }; btnAddFrameLayout.AddChidren(btnFloorText); var btnBindDownFrameLayout = new FrameLayout { Width = Application.GetMinReal(69 + 58), X = Application.GetRealWidth(300 - 69 - 58), }; btnAddFrameLayout.AddChidren(btnBindDownFrameLayout); var btnBindDown = new Button { Height = Application.GetMinReal(69), Width = Application.GetMinReal(69), UnSelectedImagePath = "BindPic/BindDown.png", Gravity = Gravity.CenterVertical, }; btnBindDownFrameLayout.AddChidren(btnBindDown); EventHandler eHandlerBindDown = (sender, e) => { SideslipFramelayout(); }; btnBindDown.MouseDownEventHandler += eHandlerBindDown; btnBindDownFrameLayout.MouseDownEventHandler += eHandlerBindDown; if (Common.Config.Instance.Home.FloorDics.Count == 0) { btnAddFrameLayout.Width = 0; } else { btnAddFrameLayout.Width = Application.GetRealWidth(300); } } /// /// 中部UI【标题栏下的UI】 /// async void MidFrameLayoutContent() { var btnMidTopLayout = new FrameLayout { Height = Application.GetRealHeight(389 - 184), }; this.midFrameLayout.AddChidren(btnMidTopLayout); //房间栏 btnHorizontalScrolViewLayout = new HorizontalScrolViewLayout { X = Application.GetRealWidth(58), }; btnMidTopLayout.AddChidren(btnHorizontalScrolViewLayout); //设备栏 midVerticalScrolViewLayout = new VerticalFrameRefreshControl() { Y = btnMidTopLayout.Bottom, Height = Application.GetRealHeight(1145), }; this.midFrameLayout.AddChidren(midVerticalScrolViewLayout); midVerticalScrolViewLayout.BeginHeaderRefreshingAction += () => { midVerticalScrolViewLayout.BeginHeaderRefreshing(); InitData(); }; //底部保存栏 var bottomFrameLayout = new FrameLayout() { Width = LayoutParams.MatchParent, Height = Application.GetRealHeight(127), Y = Application.GetRealHeight(1472), }; this.midFrameLayout.AddChidren(bottomFrameLayout); btnFinifh = new Button() { Width = Application.GetRealWidth(907), Gravity = Gravity.CenterHorizontal, Radius = (uint)Application.GetRealHeight(127) / 2, TextID = R.MyInternationalizationString.Save, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextColor = Shared.Common.ZigbeeColor.Current.XMWhite, IsBold = true, TextSize = 16, }; bottomFrameLayout.AddChidren(btnFinifh); btnFinifh.MouseUpEventHandler += async (sender, e) => { SaveTarget(); }; } /// /// 面板绑定目标表显示 /// /// Gateway. /// Key. void RefreshRoomList() { Room curRoom = null; if (supportRoomList.Count == 0) { return; } btnHorizontalScrolViewLayout.RemoveAll(); Button curentOldRoom = null; FrameLayout curentOldRoomFrameLayout = null; int index = 0; var roomTempList = GetSupportRoomList(); for (int i = 0; i < roomTempList.Count; i++) { var room = roomTempList[i]; //房间 var btnRoomFrameLayout = new FrameLayout { Height = Application.GetMinReal(159), Width = Application.GetMinReal(255), Y = Application.GetRealHeight(23), X = Application.GetRealWidth(5), BackgroundImagePath = "Item/RoomIconBackground.png", BorderWidth = 1, }; btnHorizontalScrolViewLayout.AddChidren(btnRoomFrameLayout); var btnRoom = new Button { Height = Application.GetRealHeight(58), Width = Application.GetRealWidth(127), Y = Application.GetRealHeight(58), X = Application.GetRealWidth(14), Text = room.Name, TextSize = 12, TextColor = Shared.Common.ZigbeeColor.Current.XMGray3, Gravity = Gravity.Center, }; btnRoomFrameLayout.AddChidren(btnRoom); btnRoom.IsSelected = false; if (index == 0) { btnRoomFrameLayout.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png"; btnRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite; curentOldRoom = btnRoom; curentOldRoomFrameLayout = btnRoomFrameLayout; } EventHandler eHandlerRoom = (sender, e) => { if (!btnRoom.IsSelected) { if (curentOldRoom != null) { curentOldRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3; } curentOldRoom = btnRoom; curentOldRoom.TextColor = Shared.Common.ZigbeeColor.Current.XMWhite; } if (btnRoomFrameLayout.BorderWidth == 1) { if (curentOldRoomFrameLayout != null) { curentOldRoomFrameLayout.BorderWidth = 1; curentOldRoomFrameLayout.BorderColor = Shared.Common.ZigbeeColor.Current.XMOrange; curentOldRoomFrameLayout.BackgroundImagePath = "Item/RoomIconBackground.png"; } curentOldRoomFrameLayout = btnRoomFrameLayout; curentOldRoomFrameLayout.BorderWidth = 0; curentOldRoomFrameLayout.BackgroundImagePath = "Item/RoomIconBackgroundSelected.png"; } curRoom = room; curControlDev.RoomId = room.Id; //新风面板保存使能 btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; RefreshDeviceList(curRoom); }; btnRoom.MouseUpEventHandler += eHandlerRoom; btnRoomFrameLayout.MouseUpEventHandler += eHandlerRoom; index++; } BindInfo.FinishDisplay(roomTempList, btnFinifh); if (roomTempList.Count != 0) { curRoom = roomTempList[0]; } else { curRoom = new Shared.Common.Room(); } RefreshDeviceList(curRoom); } /// /// 按键绑目标表显示 /// /// void RefreshDeviceList(Room curRoom) { midVerticalScrolViewLayout.RemoveAll(); Button oldDevice = null; int curIndex = 0; currentRoomSupportBindDeviceList = GetCurRoomSupportDeviceList(curRoom); if (currentRoomSupportBindDeviceList.Count == 0) { btnFinifh.Enable = false; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; return; } foreach (var device in currentRoomSupportBindDeviceList) { #region 绑定表UI显(无数据处理) var rowLayout = new FrameLayout() { Height = Application.GetRealHeight(23 + 127), BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite, }; midVerticalScrolViewLayout.AddChidren(rowLayout); var devicePic = new Button() { X = Application.GetMinRealAverage(58), Y = Application.GetMinRealAverage(46), Width = Application.GetMinRealAverage(81), Height = Application.GetMinRealAverage(81), UnSelectedImagePath = device.IconPath, }; rowLayout.AddChidren(devicePic); var btnBindName = new Button() { Width = Application.GetRealWidth(790), X = devicePic.Right + Application.GetRealWidth(20), TextColor = Shared.Common.ZigbeeColor.Current.TextBlack, TextAlignment = TextAlignment.CenterLeft, TextSize = 15, Text = Common.LocalDevice.Current.GetDeviceEpointName(device), }; rowLayout.AddChidren(btnBindName); var btnChoose = new Button() { Width = Application.GetMinReal(60), Height = Application.GetMinReal(60), X = Application.GetRealWidth(861 + 81), Y = Application.GetRealHeight(35), SelectedImagePath = "DoorLock/SelectedIcon.png", Visible = false, }; rowLayout.AddChidren(btnChoose); var line2 = new Button() { Y = rowLayout.Height - 1, X = devicePic.Right + Application.GetRealWidth(20), Width = Application.GetRealWidth(965 - 116), Height = 1, BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine, }; rowLayout.AddChidren(line2); if (curIndex == currentRoomSupportBindDeviceList.Count - 1) { line2.Visible = false; } #endregion string mianKey = device.DeviceAddr + device.DeviceEpoint; if (targetList.Count != 0) { foreach (var bindedDev in targetList) { if (bindedDev.DeviceAddr + bindedDev.DeviceEpoint == mianKey) { btnChoose.IsSelected = true; btnChoose.Visible = true; oldDevice = btnChoose; } } } EventHandler hander = (sender, e) => { btnChoose.IsSelected = !btnChoose.IsSelected; if (!btnChoose.IsSelected) { if (oldDevice != null) { oldDevice.IsSelected = false; oldDevice.Visible = false; } oldDevice = btnChoose; oldDevice.IsSelected = false; oldDevice.Visible = false; targetList.Clear(); } else { if (oldDevice != null) { oldDevice.IsSelected = false; oldDevice.Visible = false; } oldDevice = btnChoose; oldDevice.IsSelected = true; oldDevice.Visible = true; targetList.Clear(); targetList.Add(device); } //新风面板:由于目标没有提供删除接口,所以可以取消选中能保存 btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; }; rowLayout.MouseUpEventHandler += hander; devicePic.MouseUpEventHandler += hander; btnBindName.MouseUpEventHandler += hander; btnChoose.MouseUpEventHandler += hander; curIndex++; } } /// /// 楼层选择的侧边栏 /// void SideslipFramelayout() { var dialog = new Dialog { }; dialog.Show(); var flMain = new FrameLayout { BackgroundColor = 0x00000000 }; dialog.AddChidren(flMain); flMain.MouseUpEventHandler += (sender11, e11) => { dialog.Close(); }; var sidelipFrameLayout = new FrameLayout() { Width = Application.GetMinReal(449), Y = Application.GetRealHeight(161), X = Application.GetRealWidth(596), BackgroundImagePath = "DoorLock/SideslipPic.png", }; flMain.AddChidren(sidelipFrameLayout); var btnSelectFloor = new Button() { Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(58), X = Application.GetRealWidth(81), Y = Application.GetRealHeight(81), TextColor = Shared.Common.ZigbeeColor.Current.XMBlack, TextSize = 14, IsBold = true, TextAlignment = TextAlignment.CenterLeft, TextID = R.MyInternationalizationString.SelectFloor, }; sidelipFrameLayout.AddChidren(btnSelectFloor); var sidelipVerticalScrolViewLayout = new VerticalScrolViewLayout() { Y = btnSelectFloor.Bottom + Application.GetRealHeight(45), Height = Application.GetRealHeight(600), }; sidelipFrameLayout.AddChidren(sidelipVerticalScrolViewLayout); Button oldbutton = null; Button oldbuttonText = null; int count = 0; foreach (var floorId in dicFloorList.Keys) { var rowFrameLayout = new RowLayout() { Height = Application.GetRealHeight(152), LineColor = Shared.Common.ZigbeeColor.Current.XMRowLine, X = Application.GetRealWidth(81), }; sidelipVerticalScrolViewLayout.AddChidren(rowFrameLayout); var btnAllMethod = new Button() { Width = Application.GetMinReal(81), Height = Application.GetMinReal(81), UnSelectedImagePath = "Floor/Floor.png", SelectedImagePath = "Floor/FloorSelected.png", Gravity = Gravity.CenterVertical, }; rowFrameLayout.AddChidren(btnAllMethod); var btnMethodText = new Button() { Width = Application.GetRealWidth(311), Height = Application.GetRealHeight(58), X = Application.GetRealWidth(92), Gravity = Gravity.CenterVertical, TextColor = Shared.Common.ZigbeeColor.Current.XMGray3, TextSize = 14, TextAlignment = TextAlignment.CenterLeft, Text = dicFloorList[floorId], }; rowFrameLayout.AddChidren(btnMethodText); if (curControlDev.currentSelectFloorId == floorId) { btnAllMethod.IsSelected = true; btnAllMethod.IsBold = true; btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack; } string curFloorId = floorId; EventHandler hander = (sender, e) => { if (curControlDev.currentSelectFloorId == curFloorId) { return; } curControlDev.currentSelectFloorId = curFloorId; btnFloorText.Text = dicFloorList[floorId]; //获取楼层中房间列表 supportRoomList = GetFloorRoomList(); if (!btnMethodText.IsSelected) { if (oldbutton != null) { oldbutton.IsSelected = false; } if (oldbuttonText != null) { oldbuttonText.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3; } oldbutton = btnMethodText; oldbuttonText = btnMethodText; btnMethodText.IsSelected = true; oldbuttonText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack; oldbuttonText.IsBold = true; } int index = 0; RefreshRoomList(); dialog.Close(); }; btnAllMethod.MouseUpEventHandler += hander; rowFrameLayout.MouseUpEventHandler += hander; btnMethodText.MouseUpEventHandler += hander; count++; } if (count == 0) { sidelipFrameLayout.Height = 0; } else if (count <= 4 && count > 0) { sidelipFrameLayout.Height = Application.GetRealHeight(180) + count * Application.GetRealHeight(150); } else { sidelipFrameLayout.Height = Application.GetMinReal(780); } } #endregion #region 数据处理 /// /// 初始化设备数据 /// void InitData() { System.Threading.Tasks.Task.Run(async () => { try { Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); }); //获取楼层 dicFloorList = HdlRoomLogic.Current.GetFloorSortList(); curControlDev.currentSelectFloorId = BindInfo.GetCurrentSelectFloorId(); if (BindInfo.GetCurrentSelectFloorIdName() != null) { Application.RunOnMainThread(() => { btnFloorText.Text = BindInfo.GetCurrentSelectFloorIdName(); }); } //获取楼层中房间列表 supportRoomList = GetFloorRoomList(); if (supportRoomList.Count == 0) { return; } //获取所有房间中匹配的能绑的目标 currentPanelSupportBindDeviceList = GetAllRoomSupportDeviceList(); //获取面板中存在的绑定目标 var panelBindListRes = await this.curControlDev.GetDeviceBindAsync(); if (panelBindListRes != null && panelBindListRes.getAllBindResponseData != null) { curControlDev.bindList.Clear(); foreach (var bDev in panelBindListRes.getAllBindResponseData.BindList) { curControlDev.bindList.Add(bDev); } } else { Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); midVerticalScrolViewLayout.EndHeaderRefreshing(); new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); }); } targetList.Clear(); //选中目标列表 targetList if (currentPanelSupportBindDeviceList.Count != 0 && curControlDev.bindList.Count != 0) { foreach (var bindDev in currentPanelSupportBindDeviceList) { var mainKey = bindDev.DeviceAddr + bindDev.DeviceEpoint; var dev = curControlDev.bindList.Find(obj => (obj != null) && (obj.BindMacAddr + obj.BindEpoint == mainKey)); if (dev != null) { var device = LocalDevice.Current.GetDevice(bindDev.DeviceAddr, bindDev.DeviceEpoint); if (device != null) { switch (curDeviceBindType) { case 1: //获取设备类型的 var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List() { device }); //新风面板的新风设备,则不显示 if (deviceEnumInfo.ConcreteType == Common.DeviceConcreteType.ButtonPanel_FangyueFreshAir) { continue; } if (device.Type == DeviceType.FreshAir) { targetList.Add(device); oldTargetList.Add(device); } break; case 2: if (device.Type == DeviceType.TemperatureSensor) { targetList.Add(device); oldTargetList.Add(device); } break; case 3: if (device.Type == DeviceType.FreshAirHumiditySensor) { targetList.Add(device); oldTargetList.Add(device); } break; case 4: //PM2.5 break; } } } } } } catch (Exception ex) { var mess = ex.Message; } finally { Application.RunOnMainThread(() => { if (supportRoomList.Count != 0) { RefreshRoomList(); } //首次是否能点击保存 if (targetList.Count == 0) { btnFinifh.Enable = false; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMUnSelect; } else { btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; } CommonPage.Loading.Hide(); midVerticalScrolViewLayout.EndHeaderRefreshing(); }); } }); } /// /// 保存目标 /// /// void SaveTarget() { if (targetList.Count == 0) { //空目标 System.Threading.Tasks.Task.Run(async () => { try { Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); }); if (oldTargetList.Count != 0) { //删除取消的目标 foreach (var bd in oldTargetList) { var delDevice = new DelDeviceBindData(); delDevice.DeviceAddr = curControlDev.DeviceAddr; delDevice.Epoint = curControlDev.DeviceEpoint; var removeDevice = new RemoveBindListObj(); removeDevice.BindType = 0; switch (curDeviceBindType) { case 1: removeDevice.BindCluster = 514; break; case 2: removeDevice.BindCluster = 1026; break; case 3: removeDevice.BindCluster = 1029; break; case 4: //PM2.5 break; } removeDevice.BindMacAddr = bd.DeviceAddr; removeDevice.BindEpoint = bd.DeviceEpoint; delDevice.RemoveBindList.Add(removeDevice); var delResult = new DelDeviceBindResponseAllData(); delResult = await curControlDev.DelDeviceBindAsync(delDevice); if (delResult != null && delResult.removeBindResultResponseData != null) { if (delResult.removeBindResultResponseData.Result == 0) { switch (curDeviceBindType) { case 1: if (actionFreshAirTarget != null) { actionFreshAirTarget(""); } break; case 2: if (actionTemperatureTarget != null) { actionTemperatureTarget(""); } break; case 3: if (actionHumidityTarget != null) { actionHumidityTarget(""); } break; case 4: if (actionPMTarget != null) { actionPMTarget(""); } break; } Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; this.RemoveFromParent(); }); } else { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; CommonPage.Loading.Hide(); }); return; } } } } else { //没有目标提示 Application.RunOnMainThread(() => { var myTip = new Tip(); myTip.Direction = AMPopTipDirection.None; myTip.CloseTime = 2; myTip.Text = Language.StringByID(R.MyInternationalizationString.BindDeviceTargetIsEmpty); myTip.Show(Common.CommonPage.Instance); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; CommonPage.Loading.Hide(); }); return; } } catch (Exception ex) { var mess = ex.Message; } }); } else { //选中目标 //1、已经绑定过的目标 if (checkExistDevice()) { Application.RunOnMainThread(() => { var myTip = new Tip(); myTip.Direction = AMPopTipDirection.None; myTip.CloseTime = 2; myTip.Text = Language.StringByID(R.MyInternationalizationString.BindExist); myTip.Show(Common.CommonPage.Instance); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; }); return; } System.Threading.Tasks.Task.Run(async () => { try { Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); }); //删除已经存在的目标 if (oldTargetList.Count != 0) { foreach (var bd in oldTargetList) { var delDevice = new DelDeviceBindData(); delDevice.DeviceAddr = curControlDev.DeviceAddr; delDevice.Epoint = curControlDev.DeviceEpoint; var removeDevice = new RemoveBindListObj(); removeDevice.BindType = 0; switch (curDeviceBindType) { case 1: removeDevice.BindCluster = 514; break; case 2: removeDevice.BindCluster = 1026; break; case 3: removeDevice.BindCluster = 1029; break; case 4: //PM2.5 break; } removeDevice.BindMacAddr = bd.DeviceAddr; removeDevice.BindEpoint = bd.DeviceEpoint; delDevice.RemoveBindList.Add(removeDevice); var delResult = new DelDeviceBindResponseAllData(); delResult = await curControlDev.DelDeviceBindAsync(delDevice); if (delResult != null && delResult.removeBindResultResponseData != null) { if (delResult.removeBindResultResponseData.Result != 0) { Application.RunOnMainThread(() => { new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; CommonPage.Loading.Hide(); }); return; } } } } //2、添加新的目标 string bindName = ""; var addBindeDev = new AddBindData(); addBindeDev.DeviceAddr = curControlDev.DeviceAddr; addBindeDev.Epoint = curControlDev.DeviceEpoint; foreach (var de in targetList) { var addBindInfo = new AddBindListObj(); switch (curDeviceBindType) { case 1: addBindInfo.BindCluster = 514; break; case 2: addBindInfo.BindCluster = 1026; break; case 3: addBindInfo.BindCluster = 1029; break; case 4: //PM2.5 break; } addBindInfo.BindType = 0; addBindInfo.BindMacAddr = de.DeviceAddr; addBindInfo.BindEpoint = de.DeviceEpoint; addBindeDev.BindList.Add(addBindInfo); bindName = de.DeviceEpointName; } var dev = new AddedDeviceBindResponseAllData(); dev = await curControlDev.AddDeviceBindAsync(addBindeDev); if (dev == null || dev.addedDeviceBindResponseData == null) { Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; return; }); } else { if (dev.addedDeviceBindResponseData.Result == 0) { curControlDev.bindList = dev.addedDeviceBindResponseData.BindList; targetList.Clear(); switch (curDeviceBindType) { case 1: if (actionFreshAirTarget != null) { actionFreshAirTarget(bindName); } break; case 2: if (actionTemperatureTarget != null) { actionTemperatureTarget(bindName); } break; case 3: if (actionHumidityTarget != null) { actionHumidityTarget(bindName); } break; case 4: if (actionPMTarget != null) { actionPMTarget(bindName); } break; } Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; this.RemoveFromParent(); }); } else if (dev.addedDeviceBindResponseData.Result == 1) { Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFailed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); }); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; return; } else { Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindUnknownError), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(CommonPage.Instance); }); btnFinifh.Enable = true; btnFinifh.BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack; return; } } } catch (Exception ex) { var mess = ex.Message; } }); } } /// /// 检测目标是否被绑定过 /// /// private bool checkExistDevice() { bool exist = false; foreach (var oldDev in oldTargetList) { var key = oldDev.DeviceAddr + oldDev.DeviceEpoint; var result = targetList.Find(obj => (obj != null) && (obj.DeviceAddr + obj.DeviceEpoint == key)); if (result != null) { exist = true; } else { exist = false; } } return exist; } /// /// 能显示的房间列表 /// private List GetSupportRoomList() { var roomTempList = new List(); for (int i = 0; i < supportRoomList.Count; i++) { var room = supportRoomList[i]; //如果房间为喜爱[后来改名为常用房间],则不显示 if (room.IsLove == true) { continue; } //如果房间中没有设备,则不显示 if (room.ListDevice.Count == 0) { continue; } else { List roomIncludeMatchDevice = new List(); //房间中没有对应的支持绑定的目标 switch (curDeviceBindType) { case 1: foreach (var de in room.ListDevice) { var device = LocalDevice.Current.GetDevice(de); if (device != null) { //获取设备类型的 var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List() { device }); //新风面板的新风设备,则不显示 if (deviceEnumInfo.ConcreteType == Common.DeviceConcreteType.ButtonPanel_FangyueFreshAir) { continue; } if (device.Type == DeviceType.FreshAir) { roomIncludeMatchDevice.Add(device); } } } break; case 2: foreach (var de in room.ListDevice) { var device = LocalDevice.Current.GetDevice(de); if (device != null) { if (device.Type == DeviceType.TemperatureSensor) { roomIncludeMatchDevice.Add(device); } } } break; case 3: foreach (var de in room.ListDevice) { var device = LocalDevice.Current.GetDevice(de); if (device != null) { if (device.Type == DeviceType.FreshAirHumiditySensor) { roomIncludeMatchDevice.Add(device); } } } break; case 4: break; } if (roomIncludeMatchDevice.Count == 0) { continue; } } if (!string.IsNullOrEmpty(room.FloorId)) { //有楼层 if (room.FloorId == curControlDev.currentSelectFloorId) { roomTempList.Add(room); } } else { //没有楼层 roomTempList.Add(room); } } return roomTempList; } /// /// 获取楼层对应的房间列表 /// /// private List GetFloorRoomList() { supportRoomList.Clear(); var supportRoomListTemp = new List(); var listAllRoom = HdlRoomLogic.Current.GetAllListRooms(); if (Common.Config.Instance.Home.FloorDics.Count == 0) { // 获取没有楼层房间 foreach (var room in listAllRoom) { if (string.IsNullOrEmpty(room.FloorId)) { if (room.IsLove) { continue; } supportRoomListTemp.Add(room); } } } else { // 获取支持的房间 foreach (var room in listAllRoom) { if (room.IsLove) { continue; } supportRoomListTemp.Add(room); } } return supportRoomListTemp; } /// /// 所有房间中匹配的支持绑定的所有目标列表 /// /// List GetAllRoomSupportDeviceList() { currentPanelSupportBindDeviceList.Clear(); List currentPanelBindSupportDeviceListTemp = new List(); switch (curDeviceBindType) { case 1: foreach (var r in supportRoomList) { if (r.ListDevice.Count == 0) { continue; } foreach (var deviceKeys in r.ListDevice) { var device = LocalDevice.Current.GetDevice(deviceKeys); if (device != null) { //获取设备类型的 var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List() { device }); //新风面板的新风设备,则不显示 if (deviceEnumInfo.ConcreteType == Common.DeviceConcreteType.ButtonPanel_FangyueFreshAir) { continue; } if (device.Type == DeviceType.FreshAir) { currentPanelBindSupportDeviceListTemp.Add(device); } } } } break; case 2: foreach (var r in supportRoomList) { if (r.ListDevice.Count == 0) { continue; } foreach (var deviceKeys in r.ListDevice) { var device = LocalDevice.Current.GetDevice(deviceKeys); if (device != null) { if (device.Type == DeviceType.TemperatureSensor) { currentPanelBindSupportDeviceListTemp.Add(device); } } } } break; case 3: foreach (var r in supportRoomList) { if (r.ListDevice.Count == 0) { continue; } foreach (var deviceKeys in r.ListDevice) { var device = LocalDevice.Current.GetDevice(deviceKeys); if (device != null) { if (device.Type == DeviceType.FreshAirHumiditySensor) { currentPanelBindSupportDeviceListTemp.Add(device); } } } } break; case 4: break; } return currentPanelBindSupportDeviceListTemp; } /// /// 获取当前房间中匹配的支持绑定的设备列表 /// /// List GetCurRoomSupportDeviceList(Room curRoom) { currentRoomSupportBindDeviceList.Clear(); List curRoomDeviceListTemp = new List(); switch (curDeviceBindType) { case 1: foreach (var deviceKeys in curRoom.ListDevice) { var device = LocalDevice.Current.GetDevice(deviceKeys); if (device != null) { //获取设备类型的 var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List() { device }); //新风面板的新风设备,则不显示 if (deviceEnumInfo.ConcreteType == Common.DeviceConcreteType.ButtonPanel_FangyueFreshAir) { continue; } if (device.Type == DeviceType.FreshAir) { curRoomDeviceListTemp.Add(device); } } } break; case 2: foreach (var deviceKeys in curRoom.ListDevice) { var device = LocalDevice.Current.GetDevice(deviceKeys); if (device != null) { if (device.Type == DeviceType.TemperatureSensor) { curRoomDeviceListTemp.Add(device); } } } break; case 3: foreach (var deviceKeys in curRoom.ListDevice) { var device = LocalDevice.Current.GetDevice(deviceKeys); if (device != null) { if (device.Type == DeviceType.FreshAirHumiditySensor) { curRoomDeviceListTemp.Add(device); } } } break; case 4: break; } return curRoomDeviceListTemp; } #endregion #region 移除方法 /// /// 重写移除方法 /// public override void RemoveFromParent() { actionFreshAirTarget = null; actionTemperatureTarget = null; actionHumidityTarget = null; actionPMTarget = null; base.RemoveFromParent(); } #endregion } }