using System; using System.Collections.Generic; using System.Timers; using Shared.Common; using Shared.Phone.Device.AC; using Shared.Phone.Device.CommonForm; using Shared.Phone.Device.DeviceLogic; using Shared.Phone.UserCenter; using Shared.Phone.UserCenter.DoorLock; using ZigBee.Device; namespace Shared.Phone.UserView { /// /// 主页(此东西被舍弃,除了它里面的静态方法) /// public class UserHomeView : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 功能ScrolViewLayout /// private VerticalScrolViewLayout deviceVerticalScrolViewLayout; /// /// 功能和场景bodyView /// private FrameLayout functionSceneBodyView; /// /// 功能按键 /// private NormalViewControl btnFunction; /// /// 读取设备状态的线程列表 /// private static List threadList = new List { }; /// /// 网关 /// private ZbGateway zbGateway = null; /// /// 网关列表 /// private List zbGatewayList = new List { }; /// /// 设备列表 /// private List commonDeviceList = new List { }; /// /// 是否发送控制命令成功了 /// private bool sendedControlCommand = false; private FrameLayout itemView = new FrameLayout(); /// /// btnFloor /// private NormalViewControl btnFloor; /// /// sceneScrolView /// private VerticalScrolViewLayout sceneScrolView; #endregion #region ■ 初始化_____________________________ /// /// 界面显示 /// public void ShowForm() { this.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; //清除全部 this.RemoveAll(); //初始化头部控件 this.InitTopFrameLayoutControl(); //初始化中间控件 this.InitMidFrameLayoutControl(); //添加设备状态上报事件 this.AddDeviceReportEvent(); } /// /// 初始化头部控件 /// private void InitTopFrameLayoutControl() { //头部容器 base.topFrameLayout = new FrameLayout(); topFrameLayout.Y = Application.GetRealHeight(60); topFrameLayout.Height = Application.GetRealHeight(127); topFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; this.AddChidren(topFrameLayout); //拥有楼层 if (Config.Instance.Home.FloorDics.Count > 0) { //楼层图标 var btnFloorIcon = new IconViewControl(69); btnFloorIcon.X = ControlCommonResourse.XXLeft; btnFloorIcon.Gravity = Gravity.CenterVertical; btnFloorIcon.UnSelectedImagePath = "Item/Floor.png"; topFrameLayout.AddChidren(btnFloorIcon); btnFloorIcon.ButtonClickEvent += (sender, e) => { //显示选择楼层的界面 this.ShowSelectFloorForm(); }; //楼层名 this.btnFloor = new NormalViewControl(500, 100, true); btnFloor.X = btnFloorIcon.Right; btnFloor.Gravity = Gravity.CenterVertical; btnFloor.TextColor = ZigbeeColor.Current.GXCTextColor; btnFloor.Text = Config.Instance.Home.GetCurrentFloorName; btnFloor.IsBold = true; topFrameLayout.AddChidren(btnFloor); btnFloor.ButtonClickEvent += (sender, e) => { //显示选择楼层的界面 this.ShowSelectFloorForm(); }; } //安防快捷方式 if (UserCenterResourse.ResidenceOption.SafetyShortcut) { var btnSafety = new SafetyShortcutControl(); btnSafety.X = Application.GetRealWidth(860); btnSafety.Gravity = Gravity.CenterVertical; topFrameLayout.AddChidren(btnSafety); } //消息图标 var btnMessage = new MessageManagementControl(); btnMessage.X = Application.GetRealWidth(953); btnMessage.Gravity = Gravity.CenterVertical; btnMessage.UnSelectedImagePath = "Item/Message.png"; btnMessage.SelectedImagePath = "Item/MessageSelected.png"; topFrameLayout.AddChidren(btnMessage); //住宅名字 var btnHouseName = new NormalViewControl(700, 95, true); btnHouseName.X = ControlCommonResourse.XXLeft; btnHouseName.Y = Application.GetRealHeight(161); btnHouseName.TextSize = 24; btnHouseName.TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor; btnHouseName.IsBold = true; btnHouseName.Text = Config.Instance.Home.Name; this.AddChidren(btnHouseName); //切换住宅 btnHouseName.MouseLongEventHandler += (sender, e) => { if (Config.Instance.HomeFilePathList.Count == 0) { //当前住宅为空,请先建立住宅 this.ShowMassage(ShowMsgType.Remind, Language.StringByID(R.MyInternationalizationString.CurrentlyTheUserIshHouseIsEmptyPleaseBuildANewHouseFirst)); } else { var selectHouse = new Device.Category.SelectHouse(); selectHouse.Init(); selectHouse.HouseAction = (houseId) => { ChangeResidence(House.GetHouseByHouseId(houseId)); }; } }; } /// /// 初始化中间控件 /// private void InitMidFrameLayoutControl() { //检测是否绑定有网关 if (this.CheckHadBindGateway() == false) { //显示没有绑定过网关的界面 this.ShowNoGatewayTip(); } else { var roomPageView = new HorizontalPages(); roomPageView.Y = Application.GetRealHeight(302); roomPageView.Width = Application.GetRealWidth(CommonPage.AppRealWidth); roomPageView.Height = Application.GetRealHeight(478); this.AddChidren(roomPageView); //突出边距 roomPageView.TCBJ = Application.GetRealWidth(112); //两个page之间的间距 roomPageView.JMBJ = Application.GetRealWidth(69); //当前房间 var rList = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom(); foreach (var room in rList) { var roomView = new Device.CommonForm.RoomView(0, 0); roomPageView.AddChidren(roomView); roomView.Init(room); roomView.HideName(true); roomView.action += () => { this.ShowForm(); }; } //设置房间的初始选择 var curIndex = rList.FindIndex((obj) => obj.Id == HdlRoomLogic.Current.CurrentRoom.Id); roomPageView.PageIndex = curIndex; if (roomPageView.GetChildren(roomPageView.PageIndex) != null) { (roomPageView.GetChildren(roomPageView.PageIndex) as RoomView).HideName(false); } roomPageView.PageChange += (sender, e) => { if (roomPageView.GetChildren(roomPageView.PageIndex - 1) != null) { (roomPageView.GetChildren(roomPageView.PageIndex - 1) as RoomView).HideName(true); } if (roomPageView.GetChildren(roomPageView.PageIndex + 1) != null) { (roomPageView.GetChildren(roomPageView.PageIndex + 1) as RoomView).HideName(true); } if (roomPageView.GetChildren(roomPageView.PageIndex) != null) { (roomPageView.GetChildren(roomPageView.PageIndex) as RoomView).HideName(false); } //切换当前房间 HdlRoomLogic.Current.CurrentRoom = rList[roomPageView.PageIndex]; //刷新设备桌布控件 this.RefreshBodyView(); }; //功能和场景的背景图 var functionSceneView = new FrameLayout(); functionSceneView.Y = Application.GetRealHeight(861); functionSceneView.Width = Application.GetRealWidth(832); functionSceneView.Height = Application.GetRealHeight(167); functionSceneView.Gravity = Gravity.CenterHorizontal; functionSceneView.BackgroundImagePath = "Item/SceneFunctionBG.png"; this.AddChidren(functionSceneView); //场景 var btnScene = new NormalViewControl(350, 100, true); btnScene.X = Application.GetRealWidth(30); btnScene.Y = Application.GetRealHeight(12); btnScene.TextColor = ZigbeeColor.Current.GXCTextGrayColor3; btnScene.SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor; btnScene.TextID = R.MyInternationalizationString.Scence; btnScene.IsSelected = true; btnScene.TextSize = 16; btnScene.IsBold = true; btnScene.TextAlignment = TextAlignment.Center; functionSceneView.AddChidren(btnScene); //功能 btnFunction = new NormalViewControl(360, 100, true); btnFunction.X = Application.GetRealWidth(430); btnFunction.Y = Application.GetRealHeight(12); btnFunction.TextColor = ZigbeeColor.Current.GXCTextGrayColor3; btnFunction.SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor; btnFunction.TextID = R.MyInternationalizationString.Function; btnFunction.IsSelected = false; btnFunction.TextAlignment = TextAlignment.Center; functionSceneView.AddChidren(btnFunction); //功能和场景bodyView functionSceneBodyView = new FrameLayout() { Y = functionSceneView.Bottom, Height = Application.GetRealHeight(750), Gravity = Gravity.CenterHorizontal, BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor }; this.AddChidren(functionSceneBodyView); //选择功能分栏 btnFunction.ButtonClickEvent += (sender, e) => { btnScene.IsSelected = false; btnFunction.IsSelected = true; btnScene.TextSize = 14; btnScene.IsBold = false; btnFunction.TextSize = 16; btnFunction.IsBold = true; //刷新设备桌布控件 this.RefreshBodyView(); }; //选择场景分栏 btnScene.ButtonClickEvent += (sender, e) => { btnFunction.IsSelected = false; btnScene.IsSelected = true; btnScene.TextSize = 16; btnScene.IsBold = true; btnFunction.TextSize = 14; btnFunction.IsBold = false; this.RefreshBodyView(); }; //刷新设备桌布控件 this.RefreshBodyView(); } } /// /// 提示用户没有网关,并快速跳转到添加网关界面 /// private void ShowNoGatewayTip() { var bg = new PicViewControl(717, 478); bg.Y = Application.GetRealHeight(302); bg.Gravity = Gravity.CenterHorizontal; bg.UnSelectedImagePath = "Item/NoBindGW.png"; this.AddChidren(bg); var tip = new NormalViewControl(Application.GetMinRealAverage(717), Application.GetMinRealAverage(58), false); tip.Y = Application.GetRealHeight(815); tip.Gravity = Gravity.CenterHorizontal; tip.TextID = R.MyInternationalizationString.NewAccountNeedBingGW; tip.TextColor = ZigbeeColor.Current.GXCTextGrayColor; tip.TextAlignment = TextAlignment.Center; this.AddChidren(tip); var addBG = new PicViewControl(971, 366); addBG.Y = Application.GetRealHeight(1048); addBG.UnSelectedImagePath = "Item/VirtualFrame.png"; addBG.Gravity = Gravity.CenterHorizontal; this.AddChidren(addBG); var addGatewayBtn = new IconViewControl(89); addGatewayBtn.Y = Application.GetRealHeight(1143); addGatewayBtn.UnSelectedImagePath = "Item/Add_GW.png"; addGatewayBtn.Gravity = Gravity.CenterHorizontal; this.AddChidren(addGatewayBtn); addGatewayBtn.ButtonClickEvent += (sender, e) => { var form = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm(); form.AddForm(); }; var addTip = new PicViewControl(717, 58); addTip.Y = Application.GetRealHeight(1256); addTip.Gravity = Gravity.CenterHorizontal; addTip.TextID = R.MyInternationalizationString.AddSmartGW; addTip.TextColor = ZigbeeColor.Current.GXCTextBlackColor; addTip.TextAlignment = TextAlignment.Center; AddChidren(addTip); addTip.ButtonClickEvent += (sender, e) => { var form = new UserCenter.GatewayAdd.NewGateWayMenuSelectForm(); form.AddForm(); }; } #endregion #region ■ 功能分支___________________________ /// /// 显示没有功能 /// private void ShowNoFunctionTip() { var noFunction = new Button { Y = Application.GetRealHeight(69), Width = Application.GetMinRealAverage(683), Height = Application.GetMinRealAverage(392), Gravity = Gravity.CenterHorizontal, UnSelectedImagePath = "Item/NoFunction.png" }; functionSceneBodyView.AddChidren(noFunction); var noFunctionTip = new Button() { Y = noFunction.Bottom, Height = Application.GetRealHeight(200), Text = Language.StringByID(R.MyInternationalizationString.NoFunction_Tip).Replace("{\\r\\n}", "\r\n"), TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, IsMoreLines = true }; functionSceneBodyView.AddChidren(noFunctionTip); } /// /// 显示功能 /// private void ShowFunction() { functionSceneBodyView.RemoveAll(); //当前房间的设备数 if (HdlRoomLogic.Current.CurrentRoom.ListDevice.Count == 0) { ShowNoFunctionTip(); } else { var dList = new List(); foreach (var mainkeys in HdlRoomLogic.Current.CurrentRoom.ListDevice) { var device = LocalDevice.Current.GetDevice(mainkeys); if (device == null || device.Type == DeviceType.OnOffSwitch//干接点 || device.Type == DeviceType.Repeater)//中继器 { continue; } dList.Add(device); } deviceVerticalScrolViewLayout = new VerticalScrolViewLayout { }; functionSceneBodyView.AddChidren(deviceVerticalScrolViewLayout); for (int i = 0; i < dList.Count; i++) { var device = dList[i]; Application.RunOnMainThread(() => { try { int t = i % 2; int tt = i / 2; int xx = 43 + i % 2 * (20 + 487); int yy = 14; if (i % 2 == 0) { itemView = new FrameLayout() { Height = Application.GetRealHeight(14 + 348), }; deviceVerticalScrolViewLayout.AddChidren(itemView); } //收藏 EventHandler collectionEvent = (sender, e) => { if ((sender as Button).IsSelected) { //删除我的喜爱 HdlRoomLogic.Current.DeleteLoveDevice(device); (sender as Button).IsSelected = false; } else { //添加我的喜爱 HdlRoomLogic.Current.AddLoveDevice(device); (sender as Button).IsSelected = true; } if (HdlRoomLogic.Current.CurrentRoom.IsLove) { //刷新设备桌布控件 this.RefreshBodyView(); } }; if (device.Type == DeviceType.WindowCoveringDevice) { //窗帘 卷帘 var rollerShade = (ZigBee.Device.Rollershade)device; if (rollerShade.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (rollerShade.Gateway.IsVirtual) { ReadStatus(rollerShade, () => { ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device); }); } else { if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - rollerShade.LastDateTime).TotalSeconds) { ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(device); } } }) { IsBackground = true }.Start(); var functionView = new FunctionMainView(xx, yy); functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device); itemView.AddChidren(functionView); functionView.Init(); functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath); functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(rollerShade)); functionView.IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100; functionView.SetCollect(true); functionView.SwitchButton.MouseUpEventHandler += (sender, e) => { (sender as Button).IsSelected = !(sender as Button).IsSelected; if ((sender as Button).IsSelected) { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); (device as Rollershade).CurtainUpDownStopControl(0); ((sender as Button).Parent as FunctionMainView).SetStatuText(Language.StringByID(R.MyInternationalizationString.Open)); ((sender as Button).Parent as FunctionMainView).IsSelected = true; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } else { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); (device as Rollershade).CurtainUpDownStopControl(1); ((sender as Button).Parent as FunctionMainView).SetStatuText(Language.StringByID(R.MyInternationalizationString.Close)); ((sender as Button).Parent as FunctionMainView).IsSelected = false; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } }; functionView.CardBG.MouseUpEventHandler += (sender, e) => { CommonPage.Instance.IsDrawerLockMode = true; var rollerShadeControl = new Phone.Device.Curtain.RollerShadeControl(); UserView.HomePage.Instance.AddChidren(rollerShadeControl); UserView.HomePage.Instance.PageIndex += 1; UserView.HomePage.Instance.ScrollEnabled = false; rollerShadeControl.IsDrawerLockMode = true; rollerShadeControl.Show(device, HdlRoomLogic.Current.CurrentRoom); rollerShadeControl.action += (curDev, curRoom) => { ReFreshEditDeviceAction(device, curRoom, functionView); }; }; functionView.CollectButton.MouseUpEventHandler += collectionEvent; } } else if (device.Type == DeviceType.OnOffOutput) { //开关灯 var light = device as ToggleLight; if (light.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (light.Gateway.IsVirtual) { ReadStatus(light, () => { ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device); }); } else { if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds) { ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device); } } }) { IsBackground = true }.Start(); var functionView = new FunctionMainView(xx, yy); itemView.AddChidren(functionView); functionView.Init(); functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device); functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath); functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device)); functionView.IsSelected = light.OnOffStatus == 1; functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device)); if (HdlRoomLogic.Current.IsCollectInRoom(device) == false) { functionView.CollectButton.IsSelected = false; } else { functionView.CollectButton.IsSelected = true; } functionView.SwitchButton.MouseUpEventHandler += (sender, e) => { (sender as Button).IsSelected = !(sender as Button).IsSelected; if ((sender as Button).IsSelected) { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); light.SwitchControl(1); ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); ((sender as Button).Parent as FunctionMainView).IsSelected = true; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } else { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); light.SwitchControl(0); ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); ((sender as Button).Parent as FunctionMainView).IsSelected = false; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } }; functionView.CardBG.MouseUpEventHandler += (sender, e) => { CommonPage.Instance.IsDrawerLockMode = true; var lightControl = new Phone.Device.Light.OnOffControl(); UserView.HomePage.Instance.AddChidren(lightControl); UserView.HomePage.Instance.PageIndex += 1; lightControl.IsDrawerLockMode = true; lightControl.Show(device, HdlRoomLogic.Current.CurrentRoom); lightControl.action += (curDev, curRoom) => { ReFreshEditDeviceAction(device, curRoom, functionView); }; }; functionView.CollectButton.MouseUpEventHandler += collectionEvent; } } else if (device.Type == DeviceType.AirSwitch) { //空气开关 var airSwitch = device as AirSwitch; if (airSwitch.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (airSwitch.Gateway.IsVirtual) { ReadStatus(airSwitch, () => { ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device); }); } else { if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { ReadDeviceAttributeLogic.Instance.SendLightStatuComand(device); } } }) { IsBackground = true }.Start(); var functionView = new FunctionMainView(xx, yy); itemView.AddChidren(functionView); functionView.Init(); functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device); functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath); functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(airSwitch)); functionView.IsSelected = airSwitch.OnOffStatus == 1; functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device)); functionView.SwitchButton.MouseUpEventHandler += (sender, e) => { (sender as Button).IsSelected = !(sender as Button).IsSelected; if ((sender as Button).IsSelected) { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); airSwitch.SwitchControl(1); ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); ((sender as Button).Parent as FunctionMainView).IsSelected = true; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } else { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); airSwitch.SwitchControl(0); ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); ((sender as Button).Parent as FunctionMainView).IsSelected = false; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } }; functionView.CardBG.MouseUpEventHandler += (sender, e) => { CommonPage.Instance.IsDrawerLockMode = true; var lightControl = new Phone.Device.Light.AirSwitchControl(); UserView.HomePage.Instance.AddChidren(lightControl); UserView.HomePage.Instance.PageIndex += 1; lightControl.IsDrawerLockMode = true; lightControl.Show(device, HdlRoomLogic.Current.CurrentRoom); lightControl.action += (curDev, curRoom) => { ReFreshEditDeviceAction(device, curRoom, functionView); }; }; functionView.CollectButton.MouseUpEventHandler += collectionEvent; } } else if (device.Type == DeviceType.Thermostat) { //恒温器-AC-空调 var ac = device as AC; if (ac.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (ac.Gateway.IsVirtual) { ReadStatus(ac, () => { ReadDeviceAttributeLogic.Instance.SendACStatuComand(device); }); } else { if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { ReadDeviceAttributeLogic.Instance.SendACStatuComand(device); } } }) { IsBackground = true }.Start(); var functionView = new FunctionMainView(xx, yy); itemView.AddChidren(functionView); functionView.Init(); functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device); functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath); functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device)); functionView.IsSelected = ac.currentSystemMode != 0; functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device)); functionView.SwitchButton.MouseUpEventHandler += (sender, e) => { (sender as Button).IsSelected = !(sender as Button).IsSelected; if ((sender as Button).IsSelected) { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); ac.Open(); ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); ((sender as Button).Parent as FunctionMainView).IsSelected = true; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } else { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); ac.Close(); ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); ((sender as Button).Parent as FunctionMainView).IsSelected = false; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } }; functionView.CardBG.MouseUpEventHandler += (sender, e) => { CommonPage.Instance.IsDrawerLockMode = true; var lightControl = new Phone.Device.AC.ACControl(); UserView.HomePage.Instance.AddChidren(lightControl); UserView.HomePage.Instance.PageIndex += 1; lightControl.IsDrawerLockMode = true; lightControl.Show(device, HdlRoomLogic.Current.CurrentRoom); lightControl.action += (curDev, curRoom) => { ReFreshEditDeviceAction(device, curRoom, functionView); }; }; functionView.CollectButton.MouseUpEventHandler += collectionEvent; } } else if (device.Type == DeviceType.DimmableLight) { //调光灯 var dimmableLight = device as DimmableLight; if (dimmableLight.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (dimmableLight.Gateway.IsVirtual) { //发送读取状态命令 ReadStatus(dimmableLight, () => { ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device); }); } else { //防止短时间内多次读取设备状态 if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(device); } } }) { IsBackground = true }.Start(); var functionView = new FunctionMainView(xx, yy); itemView.AddChidren(functionView); functionView.Init(); functionView.Tag = LocalDevice.Current.GetDeviceMainKeys(device); functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath); functionView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device)); functionView.IsSelected = dimmableLight.OnOffStatus == 1; functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device)); if (HdlRoomLogic.Current.IsCollectInRoom(device) == false) { functionView.CollectButton.IsSelected = false; } else { functionView.CollectButton.IsSelected = true; } functionView.SwitchButton.MouseUpEventHandler += (sender, e) => { (sender as Button).IsSelected = !(sender as Button).IsSelected; if ((sender as Button).IsSelected) { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); dimmableLight.SwitchControl(1); ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); ((sender as Button).Parent as FunctionMainView).IsSelected = true; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } else { zbGateway = device.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device); dimmableLight.SwitchControl(0); ((sender as Button).Parent as FunctionMainView).SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); ((sender as Button).Parent as FunctionMainView).IsSelected = false; //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(device, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } }; functionView.CardBG.MouseUpEventHandler += (sender, e) => { CommonPage.Instance.IsDrawerLockMode = true; var dimmableLightControl = new Phone.Device.Light.DimmableLightControl(); UserView.HomePage.Instance.AddChidren(dimmableLightControl); UserView.HomePage.Instance.PageIndex += 1; dimmableLightControl.IsDrawerLockMode = true; dimmableLightControl.Show(device, HdlRoomLogic.Current.CurrentRoom); dimmableLightControl.action += (curDev, curRoom) => { ReFreshEditDeviceAction(device, curRoom, functionView); }; }; functionView.CollectButton.MouseUpEventHandler += collectionEvent; } } else if (device.Type == DeviceType.IASZone) { //各类传感器 var ias = device as IASZone; var lightView = new FunctionMainView(xx, yy); itemView.AddChidren(lightView); lightView.Init(); lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device); lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath); lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device)); lightView.IsSelected = ias.iASInfo?.Alarm1 == 1; lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device)); lightView.CanControl(false); if (HdlRoomLogic.Current.IsCollectInRoom(device) == false) { lightView.CollectButton.IsSelected = false; } else { lightView.CollectButton.IsSelected = true; } lightView.CollectButton.MouseUpEventHandler += collectionEvent; } else if (device.Type == DeviceType.TemperatureSensor) { var tempera = device as TemperatureSensor; if (tempera.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (tempera.Gateway.IsVirtual) { ReadStatus(tempera, () => { if (tempera.SensorDiv == 1) { ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(device); } else if (tempera.SensorDiv == 2) { ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device); } }); } else { if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - tempera.LastDateTime).TotalSeconds) { if (tempera.SensorDiv == 1) { ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(device); } else if (tempera.SensorDiv == 2) { ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(device); } } } }) { IsBackground = true }.Start(); var lightView = new FunctionMainView(xx, yy); itemView.AddChidren(lightView); lightView.Init(); lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device); lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath); lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device)); lightView.IsSelected = false; lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device)); lightView.CanControl(false); if (HdlRoomLogic.Current.IsCollectInRoom(device) == false) { lightView.CollectButton.IsSelected = false; } else { lightView.CollectButton.IsSelected = true; } lightView.CollectButton.MouseUpEventHandler += collectionEvent; } } else if (device.Type == DeviceType.DoorLock) { //门锁 var dimmableLight = device as DoorLock; var lightView = new FunctionMainView(xx, yy); itemView.AddChidren(lightView); lightView.Init(); lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device); lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath); lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device)); lightView.IsSelected = false; lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device)); lightView.CanControl(false); if (HdlRoomLogic.Current.IsCollectInRoom(device) == false) { lightView.CollectButton.IsSelected = false; } else { lightView.CollectButton.IsSelected = true; } lightView.CardBG.MouseUpEventHandler += (sender, e) => { CommonPage.Instance.IsDrawerLockMode = true; var userDoorLockPage = new UserDoorLockPage(HdlRoomLogic.Current.CurrentRoom, device); HomePage.Instance.AddChidren(userDoorLockPage); HomePage.Instance.PageIndex += 1; userDoorLockPage.Show(); }; lightView.CollectButton.MouseUpEventHandler += collectionEvent; } else { var lightView = new FunctionMainView(xx, yy); itemView.AddChidren(lightView); lightView.Init(); lightView.Tag = LocalDevice.Current.GetDeviceMainKeys(device); lightView.SetDeviceImage(device.IconPath, device.OnlineIconPath); lightView.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(device)); lightView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device)); lightView.CanControl(false); lightView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device)); if (HdlRoomLogic.Current.IsCollectInRoom(device) == false) { lightView.CollectButton.IsSelected = false; } else { lightView.CollectButton.IsSelected = true; } lightView.CollectButton.MouseUpEventHandler += collectionEvent; } } catch (Exception ex) { } }); //}) //{ IsBackground = true }.Start(); } } } /// /// ReFreshEditDeviceAction /// /// /// /// private void ReFreshEditDeviceAction(CommonDevice device, Common.Room curRoom, FunctionMainView functionView) { if (HdlRoomLogic.Current.CurrentRoom.IsLove) { functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath); functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device)); if (HdlRoomLogic.Current.IsCollectInRoom(device) == false) { ShowFunction(); } } else { if (curRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id) { ShowFunction(); } else { functionView.SetDeviceImage(device.IconPath, device.OnlineIconPath); functionView.SetDeviceName(Common.LocalDevice.Current.GetDeviceEpointName(device)); functionView.SetCollect(HdlRoomLogic.Current.IsCollectInRoom(device)); } } } #endregion #region ■ 场景分支___________________________ /// /// 显示没场景 /// private void ShowNoSceneTip() { var noScene = new Button { Y = Application.GetRealHeight(69), Width = Application.GetMinRealAverage(683), Height = Application.GetMinRealAverage(392), Gravity = Gravity.CenterHorizontal, UnSelectedImagePath = "Item/NoFunction.png" }; functionSceneBodyView.AddChidren(noScene); var noScenceTip = new Button() { Y = noScene.Bottom, Height = Application.GetRealHeight(200), Text = Language.StringByID(R.MyInternationalizationString.NoScene_Tip).Replace("{\\r\\n}", "\r\n"), TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, IsMoreLines = true }; functionSceneBodyView.AddChidren(noScenceTip); } /// /// 显示场景 /// private void ShowScene() { functionSceneBodyView.RemoveAll(); //选择场景 var sceneList = HdlSceneLogic.Current.GetRoomSceneList(HdlRoomLogic.Current.CurrentRoom); if (sceneList == null) { return; } if (sceneList.Count == 0) { ShowNoSceneTip(); } else { sceneScrolView = new VerticalScrolViewLayout { }; functionSceneBodyView.AddChidren(sceneScrolView); for (int i = 0; i < sceneList.Count; i++) { var scene = sceneList[i]; int xx = 33 + i % 2 * (40 + 487); int yy = 14; if (scene == null) { continue; } if (i % 2 == 0) { itemView = new FrameLayout() { Height = Application.GetRealHeight(14 + 348), Tag = scene.Id }; sceneScrolView.AddChidren(itemView); } var sceneView = new SceneMainView(xx, yy); sceneView.Init(scene); itemView.AddChidren(sceneView); sceneView.CollectionAction += ShowScene; } GetDelayScene(sceneScrolView); } } /// /// GetDelayScene /// /// private async void GetDelayScene(VerticalScrolViewLayout scrolViewLayout) { var catDelaySceneResponseAllData = await Scene.CatDelaySceneAsync(); if (catDelaySceneResponseAllData == null) { return; } var catDelaySceneResponseData = catDelaySceneResponseAllData.catDelaySceneResponseData; if (catDelaySceneResponseData == null || catDelaySceneResponseData.DelayScenesList.Count == 0) { return; } var delayList = catDelaySceneResponseData.DelayScenesList; for (int i = 0; scrolViewLayout != null && i < scrolViewLayout.ChildrenCount; i++) { var iView = scrolViewLayout.GetChildren(i) as FrameLayout; for (int j = 0; iView != null && j < iView.ChildrenCount; j++) { var sceneView = iView.GetChildren(j) as SceneMainView; foreach (var delayScenesListResponseInfo in delayList) { if (delayScenesListResponseInfo.ScenesId == sceneView.scene.Id) { var remainTime = delayScenesListResponseInfo.RemainTime; sceneView.scene.RemainTime = remainTime; if (remainTime > 0) { new System.Threading.Thread(() => { while (remainTime-- > 0) { System.Threading.Thread.Sleep(1000); Application.RunOnMainThread(() => { sceneView.SetTimeText(CommonFormResouce.GetTimeString(remainTime)); }); } Application.RunOnMainThread(() => { sceneView.scene.RemainTime = 0; sceneView.SetTimeImage(); }); }) { IsBackground = true }.Start(); } break; } } } } } #endregion #region ■ 刷新_______________________________ /// /// 刷新设备桌布控件 /// public void RefreshBodyView() { functionSceneBodyView.RemoveAll(); if (btnFunction.IsSelected) { ShowFunction(); } else { ShowScene(); } } #endregion #region ■ 切换住宅___________________________ /// /// 切换住宅 /// /// Home. private void ChangeResidence(House home) { try { CommonPage.Loading.Start(); new System.Threading.Thread(async () => { Config.Instance.HomeId = home.Id; Config.Instance.Home = House.GetHouseByFilePath(home.FileName); Global.CreateHomeDirectory(home.Id); Config.Instance.Save(); //刷新个人中心的内存及线程 await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread(); //初始化全部房间 HdlRoomLogic.Current.InitAllRoom(); Application.RunOnMainThread(() => { ShowForm(); CommonPage.Loading.Hide(); }); }) { IsBackground = true }.Start(); } catch (Exception ex) { Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); //new Alert(Language.StringByID(R.MyInternationalizationString.Tip), Language.StringByID(R.MyInternationalizationString.CheckInternet), Language.StringByID(R.MyInternationalizationString.Close)).Show(); Console.WriteLine(ex.Message); }); } } #endregion #region ■ 进行设备状态读取___________________ /// /// 判断是否可以进行设备状态读取。在回调中读取 /// /// Common device. /// 回调处理--发送读取命令 /// Span. 默认30秒 public static void ReadStatus(CommonDevice commonDevice, Action action, int span = 30) { var threadName = commonDevice.GetHashCode().ToString(); if (null == threadList.Find((obj) => obj.Name == threadName)) { var thread = new System.Threading.Thread(() => { var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalSeconds < 10) { System.Threading.Thread.Sleep(100); if (commonDevice.Gateway == null) { return; } if (!commonDevice.Gateway.IsVirtual) { break; } } lock (threadList) { threadList.RemoveAll((obj) => obj.Name == threadName); } //防止短时间内读取频繁 if (span < (DateTime.Now - commonDevice.LastDateTime).TotalSeconds) { action?.Invoke(); }; }) { IsBackground = true, Name = threadName }; lock (threadList) { threadList.Add(thread); } thread.Start(); } } #endregion #region ■ 控制状态___________________________ /// /// 显示设备控制状态 /// /// Command. /// Object value. private void UpdateDeviceControllStatu(string command, object objValue) { if (command != "DeviceDefaultAck" || objValue == null) { return; } var tempDevice = (CommonDevice)objValue; if (null == commonDeviceList.Find((obj) => obj.DeviceEpoint == tempDevice.DeviceEpoint && obj.DeviceAddr == tempDevice.DeviceAddr)) { return; } //标记已经发送控制命令到网关 sendedControlCommand = true; //HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.Success); } /// /// 移除全部更新控制设备的action /// private void RemoveAllUpdateControlDeviceStatuAction() { foreach (var gateway in zbGatewayList) { //移除action if (gateway != null) { gateway.ReportAction -= UpdateDeviceControllStatu; } } } /// /// 移除单个控制设备的更新状态action /// /// Gateway. private void RemoveUpdateControlDeviceStatuAction(ZbGateway gateway) { //移除action if (gateway != null) { gateway.ReportAction -= UpdateDeviceControllStatu; } } /// /// 添加需要监控回调状态的网关和设备 /// /// Gateway list. /// Gateway. /// Device list. /// Common. private void AddZbGateway(List gatewayList, ZbGateway gateway, List deviceList, CommonDevice common) { if (null == gatewayList.Find((obj) => obj.getGatewayBaseInfo.gwID == gateway.getGatewayBaseInfo.gwID)) { gatewayList.Add(gateway); } if (null == commonDeviceList.Find((obj) => obj.DeviceEpoint == common.DeviceEpoint && obj.DeviceAddr == common.DeviceAddr)) { commonDeviceList.Add(common); } } #endregion #region ■ 设备状态上报_______________________ /// /// 添加设备状态上报事件 /// private void AddDeviceReportEvent() { //设备属性上报 HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewDeviceStatus", ReceiveComandDiv.A设备属性上报, (report) => { HdlThreadLogic.Current.RunMain(() => { if (report.DeviceStatusReport.AttriBute == null || report.DeviceStatusReport.AttriBute.Count == 0) { return; } for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++) { var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout; if (rowFL.ChildrenCount == 0) { //设备为空或者控件为空 continue; } for (int j = 0; j < rowFL.ChildrenCount; j++) { var deviceUI = LocalDevice.Current.GetDevice((rowFL.GetChildren(j) as FunctionMainView).Tag.ToString()); if (deviceUI == null) { //设备为空或者控件为空 continue; } if (report.DeviceAddr != deviceUI.DeviceAddr || report.DeviceEpoint != deviceUI.DeviceEpoint) { //判断是否为当前设备 continue; } switch (deviceUI.Type) { case DeviceType.OnOffOutput: //开关功能 if (report.DeviceStatusReport.CluterID == 6) { var onOffOutputLight = deviceUI as ZigBee.Device.ToggleLight; onOffOutputLight.DeviceStatusReport = report.DeviceStatusReport; onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData; (rowFL.GetChildren(j) as FunctionMainView).IsSelected = onOffOutputLight.OnOffStatus == 1; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); onOffOutputLight.LastDateTime = DateTime.Now; } break; case DeviceType.AirSwitch: //开关功能 if (report.DeviceStatusReport.CluterID == 6) { var airSwitch = deviceUI as ZigBee.Device.AirSwitch; airSwitch.DeviceStatusReport = report.DeviceStatusReport; airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData; (rowFL.GetChildren(j) as FunctionMainView).IsSelected = airSwitch.OnOffStatus == 1; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); airSwitch.LastDateTime = DateTime.Now; } //当CluterID=3,就证明该设备在线,直接标记 if (report.DeviceStatusReport.CluterID == 3) { deviceUI.IsOnline = 1; deviceUI.LastDateTime = DateTime.Now; } break; case DeviceType.WindowCoveringDevice: if (report.DeviceStatusReport.CluterID == 258) { if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) { //窗帘类型 var rollerShade = deviceUI as Rollershade; rollerShade.DeviceStatusReport = report.DeviceStatusReport; rollerShade.WcdType = report.DeviceStatusReport.AttriBute[0].AttriButeData; rollerShade.LastDateTime = DateTime.Now; (rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); } if (report.DeviceStatusReport.AttriBute[0].AttributeId == 8) { //窗帘百分比 var rollerShade = deviceUI as Rollershade; rollerShade.DeviceStatusReport = report.DeviceStatusReport; rollerShade.WcdCurrentPositionLiftPercentage = report.DeviceStatusReport.AttriBute[0].AttriButeData; rollerShade.LastDateTime = DateTime.Now; (rowFL.GetChildren(j) as FunctionMainView).IsSelected = rollerShade.WcdCurrentPositionLiftPercentage == 100; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); } } if (report.DeviceStatusReport.CluterID == 3) { deviceUI.IsOnline = 1; deviceUI.LastDateTime = DateTime.Now; } break; case DeviceType.Thermostat: //AC功能 if (report.DeviceStatusReport.CluterID == 513) { var ac = deviceUI as ZigBee.Device.AC; ac.DeviceStatusReport = report.DeviceStatusReport; var attriButeList = ac.DeviceStatusReport.AttriBute; foreach (var attList in attriButeList) { var curTemp = attList.AttriButeData / 100; switch (attList.AttributeId) { case 0: //此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃ ac.currentLocalTemperature = curTemp; ac.LastDateTime = DateTime.Now; break; case 17: //此属性表明此设备当前的制冷温度,实际温度为“CoolingSetpoint / 100”,单位:℃。 ac.currentCoolingSetpoint = curTemp; ac.LastDateTime = DateTime.Now; break; case 18: //此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。 ac.currentHeatingSetpoint = curTemp; ac.LastDateTime = DateTime.Now; break; case 4096: //此属性表明此设备当前的自动温度,实际温度为“AutoSetpoint / 100”,单位:℃。 ac.currentAutoSetpoint = curTemp; ac.LastDateTime = DateTime.Now; break; case 28: //此属性描述恒温设备正处于哪种模式 ac.currentSystemMode = attList.AttriButeData; ac.LastDateTime = DateTime.Now; break; } } (rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); } if (report.DeviceStatusReport.CluterID == 514) { var ac = deviceUI as ZigBee.Device.AC; var attriButeList = report.DeviceStatusReport.AttriBute; ac.DeviceStatusReport = report.DeviceStatusReport; foreach (var attList in attriButeList) { switch (attList.AttributeId) { case 0: ac.currentFanMode = attList.AttriButeData; ac.LastDateTime = DateTime.Now; break; case 4096: ac.currentFanSwingMode = attList.AttriButeData; ac.LastDateTime = DateTime.Now; break; } } (rowFL.GetChildren(j) as FunctionMainView).IsSelected = ac.currentSystemMode != 0; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); } //当CluterID=3,就证明该设备在线,直接标记 if (report.DeviceStatusReport.CluterID == 3) { deviceUI.IsOnline = 1; deviceUI.LastDateTime = DateTime.Now; } break; case DeviceType.DimmableLight: //调光灯功能 if (report.DeviceStatusReport.CluterID == 6) { var dimmableLight = deviceUI as DimmableLight; dimmableLight.DeviceStatusReport = report.DeviceStatusReport; dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData; (rowFL.GetChildren(j) as FunctionMainView).IsSelected = dimmableLight.OnOffStatus == 1; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); dimmableLight.LastDateTime = DateTime.Now; } //亮度 if (report.DeviceStatusReport.CluterID == 8) { var dimmableLight = deviceUI as DimmableLight; dimmableLight.DeviceStatusReport = report.DeviceStatusReport; var attriButeList = dimmableLight.DeviceStatusReport.AttriBute; switch (attriButeList[0].AttributeId) { case 0: //此属性表明当前亮度程度 dimmableLight.Level = attriButeList[0].AttriButeData; dimmableLight.LastDateTime = DateTime.Now; //(rowFL.GetChildren(j) as FunctionMainView).IsSelected = true; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); break; } } break; case DeviceType.TemperatureSensor: //温度 if (report.DeviceStatusReport.CluterID == 1026) { var tempera = deviceUI as TemperatureSensor; foreach (var data in report.DeviceStatusReport.AttriBute) { if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) { if (data.AttriButeData == 0) { tempera.Temperatrue = 0; } else if (data.AttriButeData > 32767) { //负数(特殊处理) string strValue = (data.AttriButeData - 65536).ToString(); //小数点需要一位 strValue = strValue.Substring(0, strValue.Length - 1); tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); } else { //小数点需要一位 string strValue = data.AttriButeData.ToString(); strValue = strValue.Substring(0, strValue.Length - 1); tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); } tempera.LastDateTime = DateTime.Now; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); } } } //湿度 if (report.DeviceStatusReport.CluterID == 1029) { var tempera = deviceUI as TemperatureSensor; foreach (var data in report.DeviceStatusReport.AttriBute) { if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) { if (data.AttriButeData == 0) { tempera.Humidity = 0; } else { //小数点需要一位(湿度没有负数) string strValue = data.AttriButeData.ToString(); strValue = strValue.Substring(0, strValue.Length - 1); tempera.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); } tempera.LastDateTime = DateTime.Now; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); } } } break; } } } }, ShowErrorMode.NO); }); //传感器上报 HdlGatewayReceiveLogic.Current.AddAttributeEvent("UserHomeViewSensor", ReceiveComandDiv.A传感器上报, (report) => { HdlThreadLogic.Current.RunMain(() => { for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++) { var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout; if (rowFL.ChildrenCount == 0) { //设备为空或者控件为空 continue; } for (int j = 0; j < rowFL.ChildrenCount; j++) { var deviceUI = LocalDevice.Current.GetDevice((rowFL.GetChildren(j) as FunctionMainView).Tag.ToString()); if (deviceUI == null) { //设备为空或者控件为空 continue; } if (report.DeviceAddr != deviceUI.DeviceAddr || report.DeviceEpoint != deviceUI.DeviceEpoint) { //判断是否为当前设备 continue; } switch (deviceUI.Type) { case DeviceType.IASZone: //ias var ias = report as IASZone; var iAS = deviceUI as ZigBee.Device.IASZone; iAS.iASInfo = ias.iASInfo; (rowFL.GetChildren(j) as FunctionMainView).IsSelected = iAS.iASInfo?.Alarm1 == 1; (rowFL.GetChildren(j) as FunctionMainView).StatuButton.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI); iAS.LastDateTime = DateTime.Now; break; } } } }, ShowErrorMode.NO); }); } #endregion #region ■ 切换楼层___________________________ /// /// 显示选择楼层的界面 /// private void ShowSelectFloorForm() { var floorFL = new Device.Category.SelectFloor(); this.AddChidren(floorFL); floorFL.Init(35, 153); floorFL.changeFloor = true; floorFL.FloorAction = (floorId) => { this.btnFloor.Text = Config.Instance.Home.GetFloorNameById(floorId); HdlRoomLogic.Current.CurrentRoom = HdlRoomLogic.Current.GetLoveRoom(); this.ShowForm(); }; } #endregion #region ■ 界面关闭___________________________ /// /// 界面关闭 /// public override void CloseFormBefore() { HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewDeviceStatus"); HdlGatewayReceiveLogic.Current.RemoveEvent("UserHomeViewSensor"); base.CloseFormBefore(); } #endregion #region ■ 一般方法___________________________ /// /// 检测是否绑定有网关 /// private bool CheckHadBindGateway() { //获取本地已经绑定的网关 var gatewayList = HdlGatewayLogic.Current.GetAllLocalGateway(); if (gatewayList.Count == 0) { return false; } //主人或者管理员才行 if (UserCenterResourse.UserInfo.AuthorityNo == 1 || UserCenterResourse.UserInfo.AuthorityNo == 2) { return true; } return false; } #endregion } }