using System; using System.Collections.Generic; using Shared.Common; using ZigBee.Device; namespace Shared.Phone.UserView { /// /// 主页 /// public class UserHomeView : FrameLayout, ZigBee.Common.IStatus { #region ◆ 变量____________________________ /// /// 设备是否在线标识--Online /// private readonly string deviceStatus_Online = "Online"; /// /// 设备状态开关标识--Switch /// private readonly string deviceStatus_OnOffStatus = "Switch"; /// /// 功能ScrolViewLayout /// private VerticalScrolViewLayout deviceVerticalScrolViewLayout; /// /// 功能和场景bodyView /// private FrameLayout functionSceneBodyView; /// /// The height of the top frame layout -- 500 /// private static readonly int topFrameLayout_Height = 500; /// /// The height of the middle view.-- 1920-500-160 /// private static readonly int midView_Height = CommonPage.AppRealHeight - topFrameLayout_Height - CommonPage.TabbarHeight; /// /// The height of the room page view. -- 550 /// private static readonly int roomPageView_Height = 550; /// /// 功能卡片高度 --250 /// private static readonly int deviceFL_Height = 250; /// /// 功能按键 /// private Button functionBtn; /// /// 读取设备状态的线程列表 /// private static List threadList = new List { }; /// /// 网关 /// private ZbGateway zbGateway = null; /// /// 网关列表 /// private List zbGatewayList = new List { }; /// /// 设备列表 /// private List commonDeviceList = new List { }; /// /// 是否发送控制命令成功了 /// private bool sendedControlCommand = false; /// /// 延时 300毫秒 /// private readonly int sleepSpan = 300; #endregion #region ◆ 接口____________________________ /// /// 该接口将弃用 !!!!!! /// 改用DeviceInfoChange() /// /// The changed. /// Common. public void Changed(CommonDevice common) { } /// /// 设备状态更新接口 /// type:如果为 DeviceInComingRespon:设备新上报 /// type:如果为 IASInfoReport:RemoveDeviceRespon /// type:如果为 DeviceStatusReport:设备上报 /// type:如果为 IASInfoReport:IAS安防信息上报 /// type:如果为 OnlineStatusChange: 设备在线状态更新 /// /// Common. /// Type tag. public void DeviceInfoChange(CommonDevice common, string typeTag) { //设备上报状态中 当CluterID=3,就证明该设备在线,直接标记 if (typeTag == "DeviceStatusReport") { Application.RunOnMainThread(() => { try { for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++) { var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout; var rowLayout = rowFL.GetChildren(0) as RowLayout; var deviceUI = rowLayout.Tag as DeviceUI; if (deviceUI.CommonDevice == null || rowLayout.ChildrenCount == 0) { //设备为空或者控件为空 continue; } if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint) { //判断是否为当前设备 continue; } var frameLayout = rowLayout.GetChildren(0) as FrameLayout; switch (deviceUI.CommonDevice.Type) { case DeviceType.OnOffOutput: //开关功能 if ((common as ZigBee.Device.ToggleLight).DeviceStatusReport.CluterID == 6) { var onOffOutputLight = deviceUI.CommonDevice as ZigBee.Device.ToggleLight; onOffOutputLight.DeviceStatusReport = (common as ZigBee.Device.ToggleLight).DeviceStatusReport; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_OnOffStatus) { //记录、更新状态 if (onOffOutputLight.DeviceStatusReport.AttriBute == null || onOffOutputLight.DeviceStatusReport.AttriBute.Count == 0) { continue; } onOffOutputLight.OnOffStatus = onOffOutputLight.DeviceStatusReport.AttriBute[0].AttriButeData; (tempView as Button).IsSelected = onOffOutputLight.OnOffStatus == 1; //记录回复时间 onOffOutputLight.LastDateTime = DateTime.Now; } } } //当CluterID=3,就证明该设备在线,直接标记 if ((common as ZigBee.Device.ToggleLight).DeviceStatusReport.CluterID == 3) { var onOffOutputLight = deviceUI.CommonDevice as ToggleLight; onOffOutputLight.IsOnline = 1; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = onOffOutputLight.IsOnline == 1; //记录回复时间 onOffOutputLight.LastDateTime = DateTime.Now; } } } break; case DeviceType.AirSwitch: //开关功能 if ((common as ZigBee.Device.AirSwitch).DeviceStatusReport.CluterID == 6) { var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch; airSwitch.DeviceStatusReport = (common as ZigBee.Device.AirSwitch).DeviceStatusReport; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_OnOffStatus) { //记录、更新状态 if (airSwitch.DeviceStatusReport.AttriBute == null || airSwitch.DeviceStatusReport.AttriBute.Count == 0) { return; } airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData; (tempView as Button).IsSelected = airSwitch.OnOffStatus == 1; //记录回复时间 airSwitch.LastDateTime = DateTime.Now; } } } //当CluterID=3,就证明该设备在线,直接标记 if ((common as ZigBee.Device.AirSwitch).DeviceStatusReport.CluterID == 3) { var airSwitch = deviceUI.CommonDevice as AirSwitch; airSwitch.IsOnline = 1; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = airSwitch.IsOnline == 1; //记录回复时间 airSwitch.LastDateTime = DateTime.Now; } } } break; case DeviceType.WindowCoveringDevice: if ((common as ZigBee.Device.Rollershade).DeviceStatusReport.CluterID == 3) { var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade; rollershade.IsOnline = 1; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = rollershade.IsOnline == 1; //记录回复时间 rollershade.LastDateTime = DateTime.Now; } } } break; case DeviceType.Thermostat: //AC功能 if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 513) { var ac = deviceUI.CommonDevice as ZigBee.Device.AC; ac.DeviceStatusReport = (common as ZigBee.Device.AC).DeviceStatusReport; var attriButeList = ac.DeviceStatusReport.AttriBute; if (attriButeList == null || attriButeList.Count == 0) { continue; } switch (attriButeList[0].AttributeId) { case 0: //此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃ ac.currentLocalTemperature = attriButeList[0].AttriButeData / 100; ac.LastDateTime = DateTime.Now; //indoorTemperatureBtn.Text = $"室温 {ac.currentLocalTemperature} ℃"; //currentTemperatureBtn.Text = $"{ac.currentLocalTemperature} ℃"; //Temparetrue for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == "Temparetrue") { (tempView as Button).Text = $"{ac.currentLocalTemperature} ℃"; } } break; case 17: //此属性表明此设备当前的制冷温度,实际温度为“CoolingSetpoint / 100”,单位:℃。 ac.currentCoolingSetpoint = attriButeList[0].AttriButeData / 100; ac.LastDateTime = DateTime.Now; break; case 18: //此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。 ac.currentHeatingSetpoint = attriButeList[0].AttriButeData / 100; ac.LastDateTime = DateTime.Now; break; case 28: //此属性描述恒温设备正处于哪种模式 //Off = 0 Auto = 1 Cool = 3 Heat = 4 FanOnly = 7 Dry = 8 ac.currentSystemMode = attriButeList[0].AttriButeData; ac.LastDateTime = DateTime.Now; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_OnOffStatus) { (tempView as Button).IsSelected = ac.currentSystemMode != 0; } } break; } } //当CluterID=3,就证明该设备在线,直接标记 if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 3) { var ac = deviceUI.CommonDevice as AC; ac.IsOnline = 1; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = ac.IsOnline == 1; //记录回复时间 ac.LastDateTime = DateTime.Now; } } } break; case DeviceType.DimmableLight: //调光灯功能 //开关功能 if ((common as ZigBee.Device.DimmableLight).DeviceStatusReport.CluterID == 6) { var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight; dimmableLight.DeviceStatusReport = (common as ZigBee.Device.DimmableLight).DeviceStatusReport; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_OnOffStatus) { //记录、更新状态 if (dimmableLight.DeviceStatusReport.AttriBute == null || dimmableLight.DeviceStatusReport.AttriBute.Count == 0) { return; } dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData; (tempView as Button).IsSelected = dimmableLight.OnOffStatus == 1; //记录回复时间 dimmableLight.LastDateTime = DateTime.Now; } } } //亮度 if ((common as ZigBee.Device.DimmableLight).DeviceStatusReport.CluterID == 8) { var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight; dimmableLight.DeviceStatusReport = (common as ZigBee.Device.DimmableLight).DeviceStatusReport; var attriButeList = dimmableLight.DeviceStatusReport.AttriBute; if (attriButeList == null || attriButeList.Count == 0) { continue; } switch (attriButeList[0].AttributeId) { case 0: //此属性表明当前亮度程度 dimmableLight.Level = attriButeList[0].AttriButeData ; dimmableLight.LastDateTime = DateTime.Now; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == "LevelSeekBar") { (tempView as HorizontalSeekBar).Progress = dimmableLight.Level; } } break; } } //当CluterID=3,就证明该设备在线,直接标记 if ((common as ZigBee.Device.DimmableLight).DeviceStatusReport.CluterID == 3) { var dimmableLight = deviceUI.CommonDevice as DimmableLight; dimmableLight.IsOnline = 1; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = dimmableLight.IsOnline == 1; //记录回复时间 dimmableLight.LastDateTime = DateTime.Now; } } } break; } } } catch (Exception ex) { System.Console.WriteLine($"Error:{ex.Message}"); } }); } //设备在线状态上报 else if (typeTag == "OnlineStatusChange") { Application.RunOnMainThread(() => { try { for (int i = 0; deviceVerticalScrolViewLayout != null && i < deviceVerticalScrolViewLayout.ChildrenCount; i++) { var rowFL = deviceVerticalScrolViewLayout.GetChildren(i) as FrameLayout; var rowLayout = rowFL.GetChildren(0) as RowLayout; var deviceUI = rowLayout.Tag as DeviceUI; if (deviceUI.CommonDevice == null || rowLayout.ChildrenCount == 0) { //设备为空或者控件为空 continue; } if (common.DeviceAddr != deviceUI.CommonDevice.DeviceAddr || common.DeviceEpoint != deviceUI.CommonDevice.DeviceEpoint) { //判断是否为当前设备 continue; } var frameLayout = rowLayout.GetChildren(0) as FrameLayout; switch (deviceUI.CommonDevice.Type) { case DeviceType.OnOffOutput: var onOffOutputLight = deviceUI.CommonDevice as ToggleLight; onOffOutputLight.IsOnline = (common as ToggleLight).IsOnline; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = onOffOutputLight.IsOnline == 1; } } //记录回复时间 onOffOutputLight.LastDateTime = DateTime.Now; break; case DeviceType.AirSwitch: var airSwitch = deviceUI.CommonDevice as AirSwitch; airSwitch.IsOnline = (common as AirSwitch).IsOnline; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = airSwitch.IsOnline == 1; } } //记录回复时间 airSwitch.LastDateTime = DateTime.Now; break; case DeviceType.WindowCoveringDevice: var rollershade = deviceUI.CommonDevice as ZigBee.Device.Rollershade; rollershade.IsOnline = (common as Rollershade).IsOnline; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = rollershade.IsOnline == 1; } } //记录回复时间 rollershade.LastDateTime = DateTime.Now; break; case DeviceType.Thermostat: var ac = deviceUI.CommonDevice as ZigBee.Device.AC; ac.IsOnline = (common as ZigBee.Device.AC).IsOnline; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = ac.IsOnline == 1; } } //记录回复时间 ac.LastDateTime = DateTime.Now; break; case DeviceType.DimmableLight: var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight; dimmableLight.IsOnline = (common as ZigBee.Device.DimmableLight).IsOnline; for (int j = 0; j < frameLayout.ChildrenCount; j++) { var tempView = frameLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = dimmableLight.IsOnline == 1; } } //记录回复时间 dimmableLight.LastDateTime = DateTime.Now; break; } } } catch (Exception ex) { System.Console.WriteLine($"主页功能刷新-Error:{ex.Message}"); } }); } } /// /// Changeds the IL ogic status. /// /// Logic. public void ChangedILogicStatus(ZigBee.Device.Logic logic) { //throw new NotImplementedException(); } /// /// Changeds the IS cene status. /// /// Scene. public void ChangedISceneStatus(Scene scene) { //throw new NotImplementedException(); } #endregion #region ◆ 初始化__________________________ /// /// Removes from parent. /// public override void RemoveFromParent() { RemoveStatuList(); base.RemoveFromParent(); } private void RemoveStatuList() { ZbGateway.StatusList.Remove(this); RemoveAllUpdateControlDeviceStatuAction(); } /// /// 主页 --我的家 /// public UserHomeView() { ZbGateway.StatusList.Add(this); BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor; } /// /// 显示界面 /// public void Show() { this.RemoveAll(); #region topview var topFrameLayout = new FrameLayout() { Height = Application.GetRealHeight(topFrameLayout_Height), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, }; this.AddChidren(topFrameLayout); var homeBtn = new Device.CommonForm.SelectedStatuButton() { Y = Application.GetRealHeight(100), X = Application.GetRealWidth(50), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = "Item/MyHome.png", }; topFrameLayout.AddChidren(homeBtn); var residecneName = new Button() { Y = Application.GetRealHeight(100), Width = Application.GetRealWidth(600), Height = Application.GetRealHeight(110), TextAlignment = TextAlignment.Center, Text = Config.Instance.Home.Name ?? Language.StringByID(R.MyInternationalizationString.TheResidenceNameNull), TextSize = 20, TextColor = ZigbeeColor.Current.GXCTextBlackColor, Gravity = Gravity.CenterHorizontal }; topFrameLayout.AddChidren(residecneName); var messageBtn = new Button() { X = Application.GetRealWidth(CommonPage.AppRealWidth - 150), Y = Application.GetRealHeight(100), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = "Item/Message.png" }; //暂时隐藏 //topFrameLayout.AddChidren(messageBtn); //切换住宅 homeBtn.MouseUpEventHandler += (send, e) => { if (Config.Instance.HomeFilePathList.Count == 0) { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.CurrentlyTheUserIshHouseIsEmptyPleaseBuildANewHouseFirst), Language.StringByID(R.MyInternationalizationString.Close), Language.StringByID(R.MyInternationalizationString.OK)); alert.Show(); alert.ResultEventHandler += (senderHouse, eHouse) => { if (eHouse) { return; } }; } else { var residenceListView = new Dialog(); residenceListView.Show(); var closeBGview = new FrameLayout(); residenceListView.AddChidren(closeBGview); closeBGview.MouseUpEventHandler += (send1, e1) => { residenceListView.Close(); }; var upperTriangleBtn = new Button() { X = Application.GetRealWidth(25) + homeBtn.X, Y = homeBtn.Bottom, Width = Application.GetMinRealAverage(30), Height = Application.GetMinRealAverage(15), UnSelectedImagePath = "Item/UpperTriangle.png" }; closeBGview.AddChidren(upperTriangleBtn); var changeHomeFL = new FrameLayout() { X = Application.GetRealWidth(25), Y = upperTriangleBtn.Bottom, Height = Application.GetRealHeight(340), Width = Application.GetRealWidth(500), Radius = CommonPage.BigFormRadius, BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor }; closeBGview.AddChidren(changeHomeFL); var changeHomeBtn = new Button() { X = Application.GetRealWidth(80), Width = Application.GetRealWidth(450), Height = Application.GetRealHeight(110), TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextID = R.MyInternationalizationString.ChangeHome, TextAlignment = TextAlignment.CenterLeft }; changeHomeFL.AddChidren(changeHomeBtn); var scrolView = new VerticalScrolViewLayout() { Y = changeHomeBtn.Bottom, Height = Application.GetRealHeight(220) }; changeHomeFL.AddChidren(scrolView); var clickCheckBtn = new Device.CommonForm.SelectedStatuButton(); var clickNameBtn = new Device.CommonForm.SelectedStatuButton(); foreach (var homeFilePath in Config.Instance.HomeFilePathList) { var home = House.GetHouseByFilePath(homeFilePath); if (home == null) { continue; } var rowView = new RowLayout() { Height = Application.GetRealHeight(110) }; scrolView.AddChidren(rowView); var pointBtn = new Device.CommonForm.SelectedStatuButton() { Width = Application.GetMinRealAverage(80), Height = Application.GetMinRealAverage(110), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Item/Point.png", SelectedImagePath = "Item/PointSelected.png", IsSelected = home.Id == Config.Instance.Home.Id }; rowView.AddChidren(pointBtn); var nameBtn = new Device.CommonForm.SelectedStatuButton() { X = Application.GetRealWidth(80), Width = Application.GetRealWidth(500 - 80 - 50), TextAlignment = TextAlignment.CenterLeft, Text = home.Name, TextColor = ZigbeeColor.Current.GXCTextBlackColor, SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor, IsSelected = home.Id == Config.Instance.Home.Id }; rowView.AddChidren(nameBtn); EventHandler selectedResidenceHandler = (send1, e1) => { if (Config.Instance.Home == home) { return; } clickCheckBtn.IsSelected = false; clickNameBtn.IsSelected = false; pointBtn.IsSelected = true; nameBtn.IsSelected = true; residecneName.Text = home.Name; clickCheckBtn = pointBtn; clickNameBtn = nameBtn; residenceListView.Close(); ChangeResidence(home); }; nameBtn.MouseUpEventHandler += selectedResidenceHandler; pointBtn.MouseUpEventHandler += selectedResidenceHandler; rowView.MouseUpEventHandler += selectedResidenceHandler; if (home.Id == Config.Instance.Home.Id) { pointBtn.IsSelected = true; nameBtn.IsSelected = true; clickCheckBtn = pointBtn; clickNameBtn = nameBtn; residecneName.Text = home.Name; } else { pointBtn.IsSelected = false; nameBtn.IsSelected = false; } }; } }; //消息 messageBtn.MouseUpEventHandler += (send, e) => { }; #endregion #region midView var midView = new FrameLayout() { Y = topFrameLayout.Bottom, Height = midView_Height, }; AddChidren(midView); #endregion #region --roomPage var roomPageView = new PageLayout() { Y = Application.GetRealHeight(50) + residecneName.Bottom, Width = Application.GetRealWidth(CommonPage.AppRealWidth - CommonPage.XLeft * 2), Height = Application.GetMinRealAverage(roomPageView_Height), Radius = CommonPage.BigFormRadius, Gravity = Gravity.CenterHorizontal, IsShowPoint = false }; AddChidren(roomPageView); //当前房间 if (Shared.Common.Room.canInitAllRoom == true) { //Room.CurrentRoom = Room.CurrentRoom == null ? Room.Lists[0] : Room.CurrentRoom; Room.CurrentRoom = Room.Lists[0]; foreach (var room in Room.Lists) { var roomBackView = new FrameLayout() { BackgroundImagePath = room.BackgroundImage }; roomPageView.AddChidren(roomBackView); var roomBG = new Button() { UnSelectedImagePath = "Room/HomeBG.png", }; roomBackView.AddChidren(roomBG); var roomName = new Button() { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(20), Width = Application.GetRealWidth(500), Height = Application.GetRealHeight(80), Text = room.Name, TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.GXCTextWhiteColor, TextSize = 18, }; roomBackView.AddChidren(roomName); var roomListBtn = new Device.CommonForm.SelectedStatuButton() { X = roomPageView.Width - Application.GetRealWidth(100 + 20), Y = Application.GetRealHeight(20), Width = Application.GetMinRealAverage(100), Height = Application.GetMinRealAverage(100), UnSelectedImagePath = "Item/List.png", SelectedImagePath = "Item/ListSelected.png" }; roomBackView.AddChidren(roomListBtn); roomListBtn.MouseUpEventHandler += (send, e) => { var roomList = new Device.Room.RoomManagement(); HomePage.Instance.AddChidren(roomList); HomePage.Instance.PageIndex += 1; roomList.Show(); roomList.action += () => { Show(); }; }; } } else { var roomBackView = new FrameLayout() { BackgroundImagePath = "Room/r0.png" }; roomPageView.AddChidren(roomBackView); var roomBG = new Button() { UnSelectedImagePath = "Room/HomeBG.png", }; roomBackView.AddChidren(roomBG); var roomName = new Button() { X = Application.GetRealWidth(20), Y = Application.GetRealHeight(20), Width = Application.GetRealWidth(500), Height = Application.GetRealHeight(80), Text = Language.StringByID(R.MyInternationalizationString.Favorite), TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.GXCTextWhiteColor, TextSize = 18, }; roomBackView.AddChidren(roomName); var roomListBtn = new Button() { X = roomPageView.Width - Application.GetRealWidth(100 + 20), Y = Application.GetRealHeight(20), Width = Application.GetMinRealAverage(100), Height = Application.GetMinRealAverage(100), UnSelectedImagePath = "Item/List.png" }; roomBackView.AddChidren(roomListBtn); } var functionSceneView = new FrameLayout() { Y = roomPageView.Bottom, Height = Application.GetRealHeight(CommonPage.AppRealHeight - CommonPage.TabbarHeight) - roomPageView.Bottom, }; AddChidren(functionSceneView); //功能 functionBtn = new Button() { X = Application.GetRealWidth(50), Width = Application.GetRealWidth(540 - 50) - 2, Height = Application.GetRealHeight(150), TextColor = ZigbeeColor.Current.GXCTextBlackColor, SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor, TextAlignment = TextAlignment.Center, TextSize = 16, TextID = R.MyInternationalizationString.Function, IsSelected = true }; functionSceneView.AddChidren(functionBtn); var functionSceneMidLine = new Button() { X = functionBtn.Right, Width = 2, Y = Application.GetRealHeight(60), Height = Application.GetRealHeight(60), BackgroundColor = ZigbeeColor.Current.GXCLineColor }; functionSceneView.AddChidren(functionSceneMidLine); //场景 var sceneBtn = new Button() { X = functionBtn.Right, Width = Application.GetRealWidth(540 - 50), Height = Application.GetRealHeight(150), TextColor = ZigbeeColor.Current.GXCTextBlackColor, SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor, TextAlignment = TextAlignment.Center, TextSize = 16, TextID = R.MyInternationalizationString.Scence, IsSelected = false }; functionSceneView.AddChidren(sceneBtn); var functionSceneBottomLine = new Button() { Y = functionBtn.Bottom, Height = CommonPage.LineHeight, X = functionBtn.X, Width = roomPageView.Width, BackgroundColor = ZigbeeColor.Current.GXCLineColor }; functionSceneView.AddChidren(functionSceneBottomLine); var line = new Button() { Y = functionBtn.Bottom, Height = CommonPage.LineHeight, X = functionBtn.X, Width = Application.GetRealWidth(540 - 50), BackgroundColor = ZigbeeColor.Current.GXCButtonBlueColor }; functionSceneView.AddChidren(line); //功能和场景bodyView functionSceneBodyView = new FrameLayout() { Y = line.Bottom, Height = functionSceneView.Height - functionBtn.Height, Width = roomPageView.Width, Gravity = Gravity.CenterHorizontal }; functionSceneView.AddChidren(functionSceneBodyView); //选择功能分栏 functionBtn.MouseUpEventHandler += (sender, e) => { sceneBtn.IsSelected = false; functionBtn.IsSelected = true; line.X = functionBtn.X; RefreshBodyView(); }; //选择场景分栏 sceneBtn.MouseUpEventHandler += (sender, e) => { functionBtn.IsSelected = false; sceneBtn.IsSelected = true; line.X = sceneBtn.X; RefreshBodyView(); }; RefreshBodyView(); #endregion roomPageView.PageChange += (sender, e) => { //切换当前房间 Room.CurrentRoom = Room.CurrentRoom == null ? Room.Lists[0] : Room.Lists[roomPageView.PageIndex]; RefreshBodyView(); }; //roomPageView.PageIndex = Room.Lists.IndexOf(Room.CurrentRoom); } #endregion #region ◆ 刷新____________________________ public void RefreshBodyView() { if (Room.canInitAllRoom == false) { return; } functionSceneBodyView.RemoveAll(); if (functionBtn.IsSelected) { ShowFunction(); } else { ShowScene(); } } #endregion #region ◆ 检测是否绑定了网关________________ /// /// 当没有绑定网关时,是否有权限添加网关 /// /// true, if bing gateway was caned, false otherwise. private bool CanBindGateway() { if (HadBindGateway() == false && UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 1) { return true; } return false; } /// /// 是否绑定了网关 /// /// true, if bind gateway was haded, false otherwise. private bool HadBindGateway() { var gatewayList = Common.LocalGateway.Current.GetAllLocalGateway(); if (gatewayList.Count == 0) { return false; } return true; } /// /// 提示用户没有网关,并快速跳转到添加网关界面 /// private void ShowNoGatewayTip() { var addGatewayBtn = new Button() { Height = Application.GetMinRealAverage(200), Width = Application.GetMinRealAverage(200), UnSelectedImagePath = "Room/AddScenceFunction.png", Gravity = Gravity.Center }; functionSceneBodyView.AddChidren(addGatewayBtn); addGatewayBtn.MouseUpEventHandler += GoToAddGateWay; var noGatewayTip = new Button() { Y = addGatewayBtn.Bottom, Height = Application.GetRealHeight(150), TextID = R.MyInternationalizationString.NoGateway, TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, Gravity = Gravity.CenterHorizontal }; functionSceneBodyView.AddChidren(noGatewayTip); } /// /// 前往添加网关界面 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void GoToAddGateWay(object sender, MouseEventArgs mouseEventArgs) { UserCenter.Gateway.SelectNewGateWayForm selectNewGateWayForm = new UserCenter.Gateway.SelectNewGateWayForm { }; selectNewGateWayForm.AddForm(selectNewGateWayForm); } #endregion #region ◆ 功能_____________________________ /// /// 显示没有功能 /// private void ShowNoFunctionTip() { var noFunctionTip = new Button() { Height = Application.GetRealHeight(200), TextID = R.MyInternationalizationString.NoFunction, TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, Gravity = Gravity.Center }; functionSceneBodyView.AddChidren(noFunctionTip); } /// /// 显示功能 /// private void ShowFunction() { if (CanBindGateway() == false) { //选择功能--直接从房间的devicelist中获取 var deviceList = Room.CurrentRoom.DeviceUIList; if (deviceList == null) { return; } if (deviceList.Count == 0) { ShowNoFunctionTip(); } else { deviceVerticalScrolViewLayout = new VerticalScrolViewLayout { }; functionSceneBodyView.AddChidren(deviceVerticalScrolViewLayout); foreach (var device in deviceList) { if (device == null || device.CommonDevice == null) { continue; } //删除设备 EventHandler delEvent = (sender, e) => { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.ConfirmDelete), Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim)); alert.Show(); alert.ResultEventHandler += (send1, e1) => { if (e1) { Room.CurrentRoom.DeleteDevice(device.FileName); //RefreshBodyView(); deviceVerticalScrolViewLayout.RemoveViewByTag((sender as Button).Tag); } }; }; //收藏 //EventHandler collectionEvent = (sender, e) => //{ // if ((sender as Button).IsSelected) // { // Room.Lists[0].DeleteDevice(device.FilePath); // (sender as Button).IsSelected = false; // if (Room.CurrentRoom == Room.Lists[0]) // { // DeviceVerticalScrolViewLayout.RemoveViewByTag((sender as Button).Tag); // } // } // else // { // Room.Lists[0].AddDevice(device.FilePath); // (sender as Button).IsSelected = true; // } // //RefreshBodyView(); //}; EventHandler collectionEvent = (sender, e) => { if (Room.CurrentRoom == Room.Lists[0]) { Room.Lists[0].DeleteDevice(device.FileName); deviceVerticalScrolViewLayout.RemoveViewByTag((sender as Button).Tag); } }; //////判断设备是否支持的属性 如开关等控制 if (device.CommonDevice.Type == ZigBee.Device.DeviceType.WindowCoveringDevice) { //窗帘 卷帘 var rollerShade = (ZigBee.Device.Rollershade)device.CommonDevice; //不上非远程 if (rollerShade.Gateway == null) { continue; } if (rollerShade.Gateway.IsVirtual) { //发送读取状态命令 ReadStatus(rollerShade, () => { rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); }); } else { if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - rollerShade.LastDateTime).TotalSeconds) { rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); } } var deviceFL = new FrameLayout { Height = Application.GetRealHeight(deviceFL_Height), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, Tag = device }; deviceVerticalScrolViewLayout.AddChidren(deviceFL); var deviceRowLayout = new RowLayout { Y = Application.GetRealHeight(25), Height = Application.GetRealHeight(deviceFL_Height - 25) - 1, LineColor = ZigbeeColor.Current.GXCBackgroundColor, BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius, Tag = device }; deviceFL.AddChidren(deviceRowLayout); var deviceItemFL = new FrameLayout() { BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius }; deviceRowLayout.AddChidren(deviceItemFL); var deviceIMG = new Button() { X = Application.GetRealWidth(50), Y = Application.GetRealHeight(30), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = device.IconPath, SelectedImagePath = device.OnlineIconPath, IsSelected = rollerShade.IsOnline == 1, Tag = deviceStatus_Online }; deviceItemFL.AddChidren(deviceIMG); var deviceName = new Button() { X = Application.GetRealWidth(10), Y = deviceIMG.Bottom, Width = Application.GetRealWidth(180), Height = Application.GetRealHeight(80), TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.Center, Text = device.CommonDevice.DeviceEpointName, TextSize = 10, IsMoreLines = true }; deviceItemFL.AddChidren(deviceName); var closeBtn = new Device.CommonForm.SelectedStatuButton() { X = Application.GetRealWidth(50) + deviceName.Right, Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "WindowCovering/RollerShadeClose.png", SelectedImagePath = "WindowCovering/RollerShadeCloseSelected.png", //Visible=false }; deviceItemFL.AddChidren(closeBtn); var stopBtn = new Device.CommonForm.SelectedStatuButton() { X = Application.GetRealWidth(120) + closeBtn.Right, Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "WindowCovering/RollerShadeStop.png", SelectedImagePath = "WindowCovering/RollerShadeStopSelected.png", //Visible=false }; deviceItemFL.AddChidren(stopBtn); var openBtn = new Device.CommonForm.SelectedStatuButton() { X = Application.GetRealWidth(120) + stopBtn.Right, Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "WindowCovering/RollerShadeOpen.png", SelectedImagePath = "WindowCovering/RollerShadeOpenSelected.png", //Visible=false }; deviceItemFL.AddChidren(openBtn); var collectionBtn = new Button() { X = deviceItemFL.Right - Application.GetRealWidth(150), Y = Application.GetRealHeight(20), Width = Application.GetMinRealAverage(80), Height = Application.GetMinRealAverage(80), UnSelectedImagePath = "Item/Collection.png", SelectedImagePath = "Item/CollectionSelected.png", Tag = device }; //*****先隐藏***** //deviceItemFL.AddChidren(collectionBtn); var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton { Tag = device, IsMoreLines = true }; if (Room.CurrentRoom.IsLove) { deleteBtn.TextID = R.MyInternationalizationString.CancelCollect; deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor; deleteBtn.MouseUpEventHandler += collectionEvent; deviceRowLayout.AddRightView(deleteBtn); } else if(Room.CurrentRoom.IsSharedRoom) { //不处理 } else { deleteBtn.MouseUpEventHandler += delEvent; deviceRowLayout.AddRightView(deleteBtn); } EventHandler curtainHandler = (sender, e) => { var curtain = new Phone.Device.Curtain.RollerShadeControl(); UserView.HomePage.Instance.ScrollEnabled = false; UserView.HomePage.Instance.AddChidren(curtain); UserView.HomePage.Instance.PageIndex += 1; curtain.action = RefreshBodyView; curtain.Show(device, Room.CurrentRoom); }; deviceItemFL.MouseUpEventHandler += curtainHandler; deviceItemFL.MouseLongEventHandler += curtainHandler; deviceIMG.MouseUpEventHandler += curtainHandler; deviceName.MouseUpEventHandler += curtainHandler; //窗帘关 closeBtn.MouseUpEventHandler += (sender, e) => { zbGateway = device.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); rollerShade.CurtainUpDownStopControl(1); //控制延时回调 DeviceUI.SendCommandDelayAction(device.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; //窗帘停 stopBtn.MouseUpEventHandler += (sender, e) => { zbGateway = device.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); rollerShade.CurtainUpDownStopControl(2); //控制延时回调 DeviceUI.SendCommandDelayAction(device.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; //窗帘开 openBtn.MouseUpEventHandler += (sender, e) => { zbGateway = device.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); rollerShade.CurtainUpDownStopControl(0); //控制延时回调 DeviceUI.SendCommandDelayAction(device.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; //collectionBtn.MouseUpEventHandler += (sender, e) => //{ // if (collectionBtn.IsSelected) // { // Room.Lists[0].DeleteDevice(device.FilePath); // collectionBtn.IsSelected = false; // } // else // { // Room.Lists[0].AddDevice(device.FilePath); // collectionBtn.IsSelected = true; // } // //RefreshBodyView(); //}; collectionBtn.MouseUpEventHandler += collectionEvent; //var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj==device.FilePath); //if(dev==null) //{ // collectionBtn.IsSelected = false; //} //else //{ // collectionBtn.IsSelected = true; //} ////开关停按钮是否显示 //foreach(var command in commandList) //{ // if (command == null) // { // continue; // } // if (command.commandId==0) // { // openBtn.Visible = true; // } // else if(command.commandId==1) // { // openBtn.Visible = true; // } // else if(command.commandId==2) // { // stopBtn.Visible = true; // } //} } else if (device.CommonDevice.Type == ZigBee.Device.DeviceType.OnOffOutput) { //开关灯 var light = device.CommonDevice as ToggleLight; //补上非远程 if (light.Gateway == null) { continue; } if (light.Gateway.IsVirtual) { //发送读取状态命令 ReadStatus(light, () => { light.ReadOnOffStatus(); light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); }); } else { if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds) { light.ReadOnOffStatus(); light.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); } } var deviceFL = new FrameLayout { Height = Application.GetRealHeight(deviceFL_Height), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, Tag = device }; deviceVerticalScrolViewLayout.AddChidren(deviceFL); var deviceRowLayout = new RowLayout { Y = Application.GetRealHeight(25), Height = Application.GetRealHeight(deviceFL_Height - 25) - 1, LineColor = ZigbeeColor.Current.GXCBackgroundColor, BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius, Tag = device }; deviceFL.AddChidren(deviceRowLayout); var deviceItemFL = new FrameLayout() { BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius }; deviceRowLayout.AddChidren(deviceItemFL); var deviceIMG = new Button() { X = Application.GetRealWidth(50), Y = Application.GetRealHeight(30), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = device.IconPath, SelectedImagePath = device.OnlineIconPath, IsSelected = light.IsOnline == 1, Tag = deviceStatus_Online }; deviceItemFL.AddChidren(deviceIMG); var deviceName = new Button() { X = Application.GetRealWidth(10), Y = deviceIMG.Bottom, Width = Application.GetRealWidth(180), Height = Application.GetRealHeight(80), TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.Center, Text = device.CommonDevice.DeviceEpointName, TextSize = 10, IsMoreLines = true }; deviceItemFL.AddChidren(deviceName); var collectionBtn = new Button() { X = deviceItemFL.Right - Application.GetRealWidth(150), Y = Application.GetRealHeight(20), Width = Application.GetMinRealAverage(80), Height = Application.GetMinRealAverage(80), UnSelectedImagePath = "Item/Collection.png", SelectedImagePath = "Item/CollectionSelected.png", Tag = device }; //***先隐藏****** //deviceItemFL.AddChidren(collectionBtn); var switchBtn = new Button { X = deviceItemFL.Right - Application.GetRealWidth(200), //Y = deviceItemFL.Bottom - Application.GetRealHeight(120), Width = Application.GetMinRealAverage(183), Height = Application.GetMinRealAverage(123), UnSelectedImagePath = "Item/Switch.png", SelectedImagePath = "Item/SwitchSelected.png", IsSelected = light.OnOffStatus == 1, Tag = deviceStatus_OnOffStatus, //Visible=false Gravity = Gravity.CenterVertical }; deviceItemFL.AddChidren(switchBtn); switchBtn.MouseUpEventHandler += (send2, e2) => { switchBtn.IsSelected = !switchBtn.IsSelected; if (switchBtn.IsSelected == true) { zbGateway = device.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); light.SwitchControl(1); //控制延时回调 DeviceUI.SendCommandDelayAction(device.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } else { zbGateway = device.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); light.SwitchControl(0); //控制延时回调 DeviceUI.SendCommandDelayAction(device.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } }; var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton { Tag = device, IsMoreLines = true }; if (Room.CurrentRoom.IsLove) { deleteBtn.TextID = R.MyInternationalizationString.CancelCollect; deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor; deleteBtn.MouseUpEventHandler += collectionEvent; deviceRowLayout.AddRightView(deleteBtn); } else if(Room.CurrentRoom.IsSharedRoom) { //不处理 } else { deleteBtn.MouseUpEventHandler += delEvent; deviceRowLayout.AddRightView(deleteBtn); } EventHandler lightHandler = (sender, e) => { var lightControl = new Phone.Device.Light.LightControl(); UserView.HomePage.Instance.AddChidren(lightControl); UserView.HomePage.Instance.PageIndex += 1; lightControl.action = RefreshBodyView; lightControl.Show(device, Room.CurrentRoom); }; deviceItemFL.MouseLongEventHandler += lightHandler; deviceItemFL.MouseUpEventHandler += lightHandler; deviceName.MouseUpEventHandler += lightHandler; deviceIMG.MouseUpEventHandler += lightHandler; //collectionBtn.MouseUpEventHandler += (sender, e) => //{ // if (collectionBtn.IsSelected) // { // Room.Lists[0].DeleteDevice(device.FilePath); // collectionBtn.IsSelected = false; // if(Room.CurrentRoom==Room.Lists[0]) // { // RefreshBodyView(); // } // } // else // { // Room.Lists[0].AddDevice(device.FilePath); // collectionBtn.IsSelected = true; // } // //RefreshBodyView(); //}; collectionBtn.MouseUpEventHandler += collectionEvent; //var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FilePath); //if (dev == null) //{ // collectionBtn.IsSelected = false; //} //else //{ // collectionBtn.IsSelected = true; //} } else if (device.CommonDevice.Type == ZigBee.Device.DeviceType.AirSwitch) { //空气开关 var airSwitch = device.CommonDevice as AirSwitch; //补上非远程 if (airSwitch.Gateway == null) { continue; } if (airSwitch.Gateway.IsVirtual) { //发送读取状态命令 ReadStatus(airSwitch, () => { airSwitch.ReadOnOffStatus(); airSwitch.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); }); } else { //防止短时间内多次读取设备状态 if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { airSwitch.ReadOnOffStatus(); airSwitch.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); } } var deviceFL = new FrameLayout { Height = Application.GetRealHeight(deviceFL_Height), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, Tag = device }; deviceVerticalScrolViewLayout.AddChidren(deviceFL); var deviceRowLayout = new RowLayout { Y = Application.GetRealHeight(25), Height = Application.GetRealHeight(deviceFL_Height - 25) - 1, LineColor = ZigbeeColor.Current.GXCBackgroundColor, BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius, Tag = device }; deviceFL.AddChidren(deviceRowLayout); var deviceItemFL = new FrameLayout() { BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius }; deviceRowLayout.AddChidren(deviceItemFL); var deviceIMG = new Button() { X = Application.GetRealWidth(50), Y = Application.GetRealHeight(30), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = device.IconPath, SelectedImagePath = device.OnlineIconPath, IsSelected = airSwitch.IsOnline == 1, Tag = deviceStatus_Online }; deviceItemFL.AddChidren(deviceIMG); var deviceName = new Button() { X = Application.GetRealWidth(10), Y = deviceIMG.Bottom, Width = Application.GetRealWidth(180), Height = Application.GetRealHeight(80), TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.Center, Text = device.CommonDevice.DeviceEpointName, TextSize = 10, IsMoreLines = true }; deviceItemFL.AddChidren(deviceName); var collectionBtn = new Button() { X = deviceItemFL.Right - Application.GetRealWidth(150), Y = Application.GetRealHeight(20), Width = Application.GetMinRealAverage(80), Height = Application.GetMinRealAverage(80), UnSelectedImagePath = "Item/Collection.png", SelectedImagePath = "Item/CollectionSelected.png", Tag = device }; //***先隐藏****** //deviceItemFL.AddChidren(collectionBtn); var switchBtn = new Button { X = deviceItemFL.Right - Application.GetRealWidth(200), //Y = deviceItemFL.Bottom - Application.GetRealHeight(120), Width = Application.GetMinRealAverage(183), Height = Application.GetMinRealAverage(123), UnSelectedImagePath = "Item/Switch.png", SelectedImagePath = "Item/SwitchSelected.png", IsSelected = airSwitch.OnOffStatus == 1, Tag = deviceStatus_OnOffStatus, //Visible=false Gravity = Gravity.CenterVertical }; deviceItemFL.AddChidren(switchBtn); switchBtn.MouseUpEventHandler += (send2, e2) => { switchBtn.IsSelected = !switchBtn.IsSelected; if (switchBtn.IsSelected == true) { zbGateway = device.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); airSwitch.SwitchControl(1); //控制延时回调 DeviceUI.SendCommandDelayAction(device.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } else { zbGateway = device.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); airSwitch.SwitchControl(0); //控制延时回调 DeviceUI.SendCommandDelayAction(device.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); } }; var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton { Tag = device, IsMoreLines = true }; if (Room.CurrentRoom.IsLove) { deleteBtn.TextID = R.MyInternationalizationString.CancelCollect; deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor; deleteBtn.MouseUpEventHandler += collectionEvent; deviceRowLayout.AddRightView(deleteBtn); } else if(Room.CurrentRoom.IsSharedRoom) { //不处理 } else { deleteBtn.MouseUpEventHandler += delEvent; deviceRowLayout.AddRightView(deleteBtn); } EventHandler airSwitchHandler = (sender, e) => { var airSwitchControl = new Phone.Device.AirSwitch.AirSwitchControl(); UserView.HomePage.Instance.AddChidren(airSwitchControl); UserView.HomePage.Instance.PageIndex += 1; airSwitchControl.action = RefreshBodyView; airSwitchControl.Show(device, Room.CurrentRoom); }; deviceItemFL.MouseLongEventHandler += airSwitchHandler; deviceItemFL.MouseUpEventHandler += airSwitchHandler; deviceName.MouseUpEventHandler += airSwitchHandler; deviceIMG.MouseUpEventHandler += airSwitchHandler; //collectionBtn.MouseUpEventHandler += (sender, e) => //{ // if (collectionBtn.IsSelected) // { // Room.Lists[0].DeleteDevice(device.FilePath); // collectionBtn.IsSelected = false; // if(Room.CurrentRoom==Room.Lists[0]) // { // RefreshBodyView(); // } // } // else // { // Room.Lists[0].AddDevice(device.FilePath); // collectionBtn.IsSelected = true; // } // //RefreshBodyView(); //}; collectionBtn.MouseUpEventHandler += collectionEvent; //var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FilePath); //if (dev == null) //{ // collectionBtn.IsSelected = false; //} //else //{ // collectionBtn.IsSelected = true; //} } else if (device.CommonDevice.Type == ZigBee.Device.DeviceType.Thermostat) { //恒温器-AC-空调 var ac = device.CommonDevice as AC; //补上非远程 if (ac.Gateway == null) { continue; } if (ac.Gateway.IsVirtual) { //发送读取状态命令 ReadStatus(ac, () => { ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); ac.ReadFanMode(); ac.ReadSystemMode(); ac.ReadLocalTemperature(); ac.ReadCoolingSetpoint(); ac.ReadHeatingSetpoint(); }); } else { //防止短时间内多次读取设备状态 if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { ac.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); ac.ReadFanMode(); ac.ReadSystemMode(); ac.ReadLocalTemperature(); ac.ReadCoolingSetpoint(); ac.ReadHeatingSetpoint(); } } var deviceFL = new FrameLayout { Height = Application.GetRealHeight(deviceFL_Height), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, Tag = device }; deviceVerticalScrolViewLayout.AddChidren(deviceFL); var deviceRowLayout = new RowLayout { Y = Application.GetRealHeight(25), Height = Application.GetRealHeight(deviceFL_Height - 25) - 1, LineColor = ZigbeeColor.Current.GXCBackgroundColor, BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius, Tag = device }; deviceFL.AddChidren(deviceRowLayout); var deviceItemFL = new FrameLayout() { BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius }; deviceRowLayout.AddChidren(deviceItemFL); var deviceIMG = new Button() { X = Application.GetRealWidth(50), Y = Application.GetRealHeight(30), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = device.IconPath, SelectedImagePath = device.OnlineIconPath, IsSelected = ac.IsOnline == 1, Tag = deviceStatus_Online }; deviceItemFL.AddChidren(deviceIMG); var deviceName = new Button() { X = Application.GetRealWidth(10), Y = deviceIMG.Bottom, Width = Application.GetRealWidth(180), Height = Application.GetRealHeight(80), TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.Center, Text = device.CommonDevice.DeviceEpointName, TextSize = 10, IsMoreLines = true }; deviceItemFL.AddChidren(deviceName); var collectionBtn = new Button() { X = deviceItemFL.Right - Application.GetRealWidth(150), Y = Application.GetRealHeight(20), Width = Application.GetMinRealAverage(80), Height = Application.GetMinRealAverage(80), UnSelectedImagePath = "Item/Collection.png", SelectedImagePath = "Item/CollectionSelected.png", Tag = device }; //***先隐藏****** //deviceItemFL.AddChidren(collectionBtn); //减 var reduceBtn = new Device.CommonForm.SelectedStatuButton() { X = Application.GetRealWidth(30) + deviceName.Right, Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Item/Reduce.png", SelectedImagePath = "Item/ReduceSelected.png", }; deviceItemFL.AddChidren(reduceBtn); //当前温度 var currentTemperatureBtn = new Button() { X = Application.GetRealWidth(50) + reduceBtn.Right, Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(110), Gravity = Gravity.CenterVertical, TextColor = ZigbeeColor.Current.TextBlack, TextSize = 16, Text = $"{Device.AC.ACControlBase.GetCurrentModeTemperature(ac)} °C", Tag = "Temparetrue" }; deviceItemFL.AddChidren(currentTemperatureBtn); reduceBtn.MouseUpEventHandler += (send2, e2) => { if (Device.AC.ACControlBase.IsOpen(ac) == false) { Device.AC.ACControlBase.ShowACIsCloseTip(); return; } //cool if (ac.currentSystemMode == 3) { ac.currentCoolingSetpoint -= 1; ac.SetCoolingTemperatureAsync(ac.currentCoolingSetpoint); currentTemperatureBtn.Text = $"{ac.currentCoolingSetpoint} °C"; } //heat else if (ac.currentSystemMode == 4) { ac.currentHeatingSetpoint -= 1; ac.SetHeatingTemperatureAsync(ac.currentHeatingSetpoint); currentTemperatureBtn.Text = $"{ac.currentHeatingSetpoint} °C"; } //auto //dry //currentTemperatureBtn.Text = $"{Device.AC.ACControlBase.GetCurrentModeTemperature(ac)} °C"; }; var addBtn = new Device.CommonForm.SelectedStatuButton() { X = Application.GetRealWidth(30) + currentTemperatureBtn.Right, Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Item/Add.png", SelectedImagePath = "Item/AddSelected.png", }; deviceItemFL.AddChidren(addBtn); addBtn.MouseUpEventHandler += (send2, e2) => { if (Device.AC.ACControlBase.IsOpen(ac) == false) { Device.AC.ACControlBase.ShowACIsCloseTip(); return; } //cool if (ac.currentSystemMode == 3) { ac.currentCoolingSetpoint += 1; ac.SetCoolingTemperatureAsync(ac.currentCoolingSetpoint); currentTemperatureBtn.Text = $"{ac.currentCoolingSetpoint} °C"; } //heat else if (ac.currentSystemMode == 4) { ac.currentHeatingSetpoint += 1; ac.SetHeatingTemperatureAsync(ac.currentHeatingSetpoint); currentTemperatureBtn.Text = $"{ac.currentHeatingSetpoint} °C"; } //auto //dry }; var switchBtn = new Button { X = deviceItemFL.Right - Application.GetRealWidth(200), //Y = deviceItemFL.Bottom - Application.GetRealHeight(120), Width = Application.GetMinRealAverage(183), Height = Application.GetMinRealAverage(123), UnSelectedImagePath = "Item/Switch.png", SelectedImagePath = "Item/SwitchSelected.png", IsSelected = ac.currentSystemMode != 0, Tag = deviceStatus_OnOffStatus, //Visible=false Gravity = Gravity.CenterVertical }; deviceItemFL.AddChidren(switchBtn); switchBtn.MouseUpEventHandler += (send2, e2) => { switchBtn.IsSelected = !switchBtn.IsSelected; if (switchBtn.IsSelected == true) { zbGateway = device.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); ac.Open(); //控制延时回调 //DeviceUI.SendCommandDelayAction(device.CommonDevice, () => //{ // if (Parent == null) // { // return; // } // RemoveUpdateControlDeviceStatuAction(zbGateway); // if (sendedControlCommand == false) // { // DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); // } //}); } else { zbGateway = device.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); ac.Close(); //控制延时回调 //DeviceUI.SendCommandDelayAction(device.CommonDevice, () => //{ // if (Parent == null) // { // return; // } // RemoveUpdateControlDeviceStatuAction(zbGateway); // if (sendedControlCommand == false) // { // DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); // } //}); } }; var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton { Tag = device, IsMoreLines = true }; if (Room.CurrentRoom.IsLove) { deleteBtn.TextID = R.MyInternationalizationString.CancelCollect; deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor; deleteBtn.MouseUpEventHandler += collectionEvent; deviceRowLayout.AddRightView(deleteBtn); } else if(Room.CurrentRoom.IsSharedRoom) { //不处理 } else { deleteBtn.MouseUpEventHandler += delEvent; deviceRowLayout.AddRightView(deleteBtn); } EventHandler acHandler = (sender, e) => { var acControl = new Phone.Device.AC.ACControl { }; UserView.HomePage.Instance.AddChidren(acControl); UserView.HomePage.Instance.PageIndex += 1; acControl.action = RefreshBodyView; acControl.Show(device, Room.CurrentRoom); }; deviceItemFL.MouseLongEventHandler += acHandler; deviceItemFL.MouseUpEventHandler += acHandler; deviceName.MouseUpEventHandler += acHandler; deviceIMG.MouseUpEventHandler += acHandler; } else if (device.CommonDevice.Type == ZigBee.Device.DeviceType.DimmableLight) { //调光灯 var dimmableLight = device.CommonDevice as DimmableLight; //补上非远程 if (dimmableLight.Gateway == null) { continue; } if (dimmableLight.Gateway.IsVirtual) { //发送读取状态命令 ReadStatus(dimmableLight, () => { dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); dimmableLight.ReadOnOffStatus(); dimmableLight.ReadLevel(); }); } else { //防止短时间内多次读取设备状态 if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { dimmableLight.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); dimmableLight.ReadOnOffStatus(); dimmableLight.ReadLevel(); } } var deviceFL = new FrameLayout { Height = Application.GetRealHeight(deviceFL_Height), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, Tag = device }; deviceVerticalScrolViewLayout.AddChidren(deviceFL); var deviceRowLayout = new RowLayout { Y = Application.GetRealHeight(25), Height = Application.GetRealHeight(deviceFL_Height - 25) - 1, LineColor = ZigbeeColor.Current.GXCBackgroundColor, BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius, Tag = device }; deviceFL.AddChidren(deviceRowLayout); var deviceItemFL = new FrameLayout() { BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, Radius = CommonPage.BigFormRadius }; deviceRowLayout.AddChidren(deviceItemFL); var deviceIMG = new Button() { X = Application.GetRealWidth(50), Y = Application.GetRealHeight(30), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = device.IconPath, SelectedImagePath = device.OnlineIconPath, IsSelected = dimmableLight.IsOnline == 1, Tag = deviceStatus_Online }; deviceItemFL.AddChidren(deviceIMG); var deviceName = new Button() { X = Application.GetRealWidth(10), Y = deviceIMG.Bottom, Width = Application.GetRealWidth(180), Height = Application.GetRealHeight(80), TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.Center, Text = device.CommonDevice.DeviceEpointName, TextSize = 10, IsMoreLines = true }; deviceItemFL.AddChidren(deviceName); var levelSeekBar = new HorizontalSeekBar() { X=deviceIMG.Right+Application.GetRealWidth(50), Width = Application.GetRealWidth(500), Height = Application.GetRealHeight(80), Gravity = Gravity.CenterVertical, BackgroundColor = ZigbeeColor.Current.GXCSliderUnSelectedColor, ThumbColor = ZigbeeColor.Current.GXCButtonBlueColor, BorderColor = ZigbeeColor.Current.GXCButtonBlueColor, ProgressColor = ZigbeeColor.Current.GXCButtonBlueColor, Max = 254, Tag = "LevelSeekBar", Progress = dimmableLight.Level, SleepTime=sleepSpan }; deviceItemFL.AddChidren(levelSeekBar); levelSeekBar.ProgressChanged += (send2, e2) => { dimmableLight.SetLevel(levelSeekBar.Progress); }; var collectionBtn = new Button() { X = deviceItemFL.Right - Application.GetRealWidth(150), Y = Application.GetRealHeight(20), Width = Application.GetMinRealAverage(80), Height = Application.GetMinRealAverage(80), UnSelectedImagePath = "Item/Collection.png", SelectedImagePath = "Item/CollectionSelected.png", Tag = device }; //***先隐藏****** //deviceItemFL.AddChidren(collectionBtn); var switchBtn = new Button { X = deviceItemFL.Right - Application.GetRealWidth(200), //Y = deviceItemFL.Bottom - Application.GetRealHeight(120), Width = Application.GetMinRealAverage(183), Height = Application.GetMinRealAverage(123), UnSelectedImagePath = "Item/Switch.png", SelectedImagePath = "Item/SwitchSelected.png", IsSelected = dimmableLight.OnOffStatus == 1, Tag = deviceStatus_OnOffStatus, //Visible=false Gravity = Gravity.CenterVertical }; deviceItemFL.AddChidren(switchBtn); switchBtn.MouseUpEventHandler += (send2, e2) => { switchBtn.IsSelected = !switchBtn.IsSelected; if (switchBtn.IsSelected == true) { //zbGateway = device.CommonDevice.Gateway; //sendedControlCommand = false; //zbGateway.ReportAction += UpdateDeviceControllStatu; //AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); dimmableLight.SwitchControl(1); //控制延时回调 //DeviceUI.SendCommandDelayAction(device.CommonDevice, () => //{ //if (Parent == null) //{ // return; //} //RemoveUpdateControlDeviceStatuAction(zbGateway); //if (sendedControlCommand == false) //{ // DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); //} //}); } else { //zbGateway = device.CommonDevice.Gateway; //sendedControlCommand = false; //zbGateway.ReportAction += UpdateDeviceControllStatu; //AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, device.CommonDevice); dimmableLight.SwitchControl(0); //控制延时回调 //DeviceUI.SendCommandDelayAction(device.CommonDevice, () => //{ // if (Parent == null) // { // return; // } // RemoveUpdateControlDeviceStatuAction(zbGateway); // if (sendedControlCommand == false) // { // DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); // } //}); } }; var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton { Tag = device, IsMoreLines = true }; if (Room.CurrentRoom.IsLove) { deleteBtn.TextID = R.MyInternationalizationString.CancelCollect; deleteBtn.BackgroundColor = ZigbeeColor.Current.GXCCancelCollectionBGColor; deleteBtn.MouseUpEventHandler += collectionEvent; deviceRowLayout.AddRightView(deleteBtn); } else if(Room.CurrentRoom.IsSharedRoom) { //不处理 } else { deleteBtn.MouseUpEventHandler += delEvent; deviceRowLayout.AddRightView(deleteBtn); } EventHandler dimmableLightHandler = (sender, e) => { var dimmableLightControl = new Phone.Device.Light.DimmableLightControl(); UserView.HomePage.Instance.AddChidren(dimmableLightControl); UserView.HomePage.Instance.PageIndex += 1; UserView.HomePage.Instance.ScrollEnabled = false; dimmableLightControl.action = RefreshBodyView; dimmableLightControl.Show(device, Room.CurrentRoom); }; deviceItemFL.MouseLongEventHandler += dimmableLightHandler; deviceItemFL.MouseUpEventHandler += dimmableLightHandler; deviceName.MouseUpEventHandler += dimmableLightHandler; deviceIMG.MouseUpEventHandler += dimmableLightHandler; //collectionBtn.MouseUpEventHandler += (sender, e) => //{ // if (collectionBtn.IsSelected) // { // Room.Lists[0].DeleteDevice(device.FilePath); // collectionBtn.IsSelected = false; // if(Room.CurrentRoom==Room.Lists[0]) // { // RefreshBodyView(); // } // } // else // { // Room.Lists[0].AddDevice(device.FilePath); // collectionBtn.IsSelected = true; // } // //RefreshBodyView(); //}; collectionBtn.MouseUpEventHandler += collectionEvent; //var dev = Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FilePath); //if (dev == null) //{ // collectionBtn.IsSelected = false; //} //else //{ // collectionBtn.IsSelected = true; //} } else if (device.CommonDevice.Type == DeviceType.OnOffSwitch) { //按键 var panel = (Panel)device.CommonDevice; } } } } else { ShowNoGatewayTip(); } } #endregion #region ◆ 场景_____________________________ /// /// 显示没场景 /// private void ShowNoSceneTip() { var noScenceTip = new Button() { Height = Application.GetRealHeight(200), TextID = R.MyInternationalizationString.NoScene, TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, Gravity = Gravity.Center, }; functionSceneBodyView.AddChidren(noScenceTip); } /// /// 显示场景 /// private void ShowScene() { if (CanBindGateway() == false) { //选择场景 var sceneList = Room.CurrentRoom.SceneUIList; if (sceneList == null) { return; } if (sceneList.Count == 0) { ShowNoSceneTip(); } else { var sceneScrolView = new VerticalScrolViewLayout { }; functionSceneBodyView.AddChidren(sceneScrolView); foreach (var scene in sceneList) { if (scene == null) { continue; } var sceneFL = new FrameLayout() { Height = Application.GetRealHeight(400), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, Tag = scene }; sceneScrolView.AddChidren(sceneFL); var sceneRowLayout = new RowLayout() { Y = Application.GetRealHeight(30), Height = Application.GetRealHeight(400 - 10 - 30), LineColor = ZigbeeColor.Current.GXCBackgroundColor, Radius = CommonPage.BigFormRadius }; sceneFL.AddChidren(sceneRowLayout); var sceneItemFL = new FrameLayout() { BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, Radius = CommonPage.BigFormRadius }; sceneRowLayout.AddChidren(sceneItemFL); var sceneImg = new Button() { UnSelectedImagePath = scene.IconPath, Radius = CommonPage.BigFormRadius }; sceneItemFL.AddChidren(sceneImg); var hardBlackBG = new Button() { BackgroundColor = ZigbeeColor.Current.GXCBlack70Color, SelectedBackgroundColor = ZigbeeColor.Current.GXCBlack80Color, Radius = CommonPage.BigFormRadius }; sceneItemFL.AddChidren(hardBlackBG); var sceneNameBtn = new Button() { Text = scene.Name, TextColor = ZigbeeColor.Current.GXCTextWhiteColor, TextSize = 20 }; sceneItemFL.AddChidren(sceneNameBtn); //编辑 var editBtn = new Device.CommonForm.RowLayoutEditButton { TextID = R.MyInternationalizationString.Edit, Tag = scene }; //删除 var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton { Tag = scene }; if (!Room.CurrentRoom.IsSharedRoom) { sceneRowLayout.AddRightView(editBtn); sceneRowLayout.AddRightView(deleteBtn); } EventHandler sceneDownHandler = (sender, e) => { hardBlackBG.IsSelected = true; }; sceneNameBtn.MouseDownEventHandler += sceneDownHandler; hardBlackBG.MouseDownEventHandler += sceneDownHandler; //调用场景 EventHandler sceneUpHandler = async (sender, e) => { hardBlackBG.IsSelected = false; //1成功 0失败 //后面补上相关提示 // Error参数含义 //1:网关无法解析命令数据。 //2:协调器正在升级或备份/恢复数据 //3:操作设备/组/场景不存在 //4:其他错误 //5:数据传输错误(在某次客户端向网关发送数据的过程中,网关在合理时间范围内接收客户端数据不完整导致该错误发生。如客户端向网关一次发送100个字节的数据,但网关等待接收了一秒只接收了80个字节。发生该错误,网关将主动关闭客户端连接) var sceneOpenAllData = await ZigBee.Device.Scene.ControlSceneAsync(scene.Id, 0); if (sceneOpenAllData == null || sceneOpenAllData.sceneOpenData == null) { return; } if (sceneOpenAllData.sceneOpenData.Result == 0) { if (sceneOpenAllData.errorResponData == null) { return; } CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.ControlSceneFail); } }; sceneNameBtn.MouseUpEventHandler += sceneUpHandler; hardBlackBG.MouseUpEventHandler += sceneUpHandler; //编辑场景 EventHandler editEvent = (sender, e) => { SceneRoomUI.EditScene(scene, Room.CurrentRoom); }; editBtn.MouseUpEventHandler += editEvent; //删除场景 EventHandler delEvent = (sender, e) => { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.ConfirmDelete), Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim)); alert.Show(); alert.ResultEventHandler += async (send1, e1) => { if (e1) { //0 移除失败 1 移除成功 2 没有该场景 var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id); if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null) { return; } if (removeSceneAllData.removeSceneData.Result == 1) { //1成功 Room.CurrentRoom.RemoveScene(scene); //RefreshBodyView(); sceneScrolView.RemoveViewByTag((sender as Button).Tag); } else if (removeSceneAllData.removeSceneData.Result == 0) { //0 移除失败 CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.DeleteSceneFail); } else if (removeSceneAllData.removeSceneData.Result == 2) { //2 没有该场景 Room.CurrentRoom.RemoveScene(scene); //RefreshBodyView(); sceneScrolView.RemoveViewByTag((sender as Button).Tag); } } }; }; deleteBtn.MouseUpEventHandler += delEvent; } } } else { ShowNoGatewayTip(); } } #endregion #region ◆ 切换住宅_________________________ /// /// 切换住宅 /// /// Home. private void ChangeResidence(House home) { try { CommonPage.Loading.Start(); new System.Threading.Thread(async () => { Config.Instance.HomeId = home.Id; Global.CreateHomeDirectory(home.Id); Config.Instance.Save(); //刷新个人中心的内存及线程 await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread(); Room.InitAllRoom(); Application.RunOnMainThread(() => { Show(); 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; //DeviceUI.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 } }