using System; using System.Collections.Generic; using Shared.Common; using Shared.Phone.UserView; using Shared.R; using ZigBee.Device; namespace Shared.Phone.Device.Category { /// /// Category. /// public class Category : FrameLayout, ZigBee.Common.IStatus { #region ◆ 变量____________________________ /// /// The instance. /// public static Category instance; /// /// 功能 /// public Button functionBtn; /// /// 场景 /// public Button sceneBtn; /// /// 自动化 /// public Button automationBtn; /// /// 中部背景bodyView /// public FrameLayout functionSceneBodyView; /// /// 相同的设备列表 /// public VerticalScrolViewLayout deviceListScrolView; /// /// 设备是否在线标识--Online /// private readonly string deviceStatus_Online = "Online"; /// /// 设备状态开关标识--Switch /// private readonly string deviceStatus_OnOffStatus = "Switch"; /// /// 右上角添加按钮 /// private Device.CommonForm.SelectedStatuButton addBtn; /// /// 分栏底部线条. /// private Button line; /// /// 网关 /// private ZbGateway zbGateway = null; /// /// 网关列表 /// private List zbGatewayList = new List { }; /// /// 设备列表 /// private List commonDeviceList = new List { }; /// /// 是否发送控制命令成功了 /// private bool sendedControlCommand = false; /// /// 当前功能类型按钮 /// private Button tempFunctionTypeBtn; /// /// 功能类型按钮 /// private Button functionTypeIMG; /// /// 功能类型 /// private HorizontalScrolViewLayout functionTypeScrowView; /// /// 设备类型RowLayout /// private RowLayout typeRowLayout; #endregion #region ◆ 接口____________________________ /// /// 该接口将弃用 改用DeviceInfoChange() /// /// Common. public void Changed(CommonDevice common) { } /// /// Changeds the IL ogic status. /// /// Logic. public void ChangedILogicStatus(ZigBee.Device.Logic logic) { } /// /// Changeds the IS cene status. /// /// Scene. public void ChangedISceneStatus(Scene scene) { } /// /// 设备状态更新接口 /// 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; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++) { var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout; var deviceUI = rowLayout.Tag as DeviceUI; if (deviceUI == null || deviceUI.CommonDevice == null) { continue; } if (deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr || deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint) { continue; } switch (deviceUI.CommonDevice.Type) { case DeviceType.OnOffOutput: //开关功能 if ((common as ToggleLight).DeviceStatusReport.CluterID == 6) { var light = deviceUI.CommonDevice as ToggleLight; light.DeviceStatusReport = (common as ToggleLight).DeviceStatusReport; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_OnOffStatus) { //记录、更新状态 if (light.DeviceStatusReport.AttriBute == null || light.DeviceStatusReport.AttriBute.Count == 0) { continue; } light.OnOffStatus = light.DeviceStatusReport.AttriBute[0].AttriButeData; (tempView as Button).IsSelected = light.OnOffStatus == 1; //记录回复时间 light.LastDateTime = DateTime.Now; } } } if ((common as ToggleLight).DeviceStatusReport.CluterID == 3) { var light = deviceUI.CommonDevice as ToggleLight; light.IsOnline = 1; //记录回复时间 light.LastDateTime = DateTime.Now; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = light.IsOnline == 1; } } } 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 < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.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; } } } if ((common as ZigBee.Device.AirSwitch).DeviceStatusReport.CluterID == 3) { var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch; airSwitch.IsOnline = 1; //记录回复时间 airSwitch.LastDateTime = DateTime.Now; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = airSwitch.IsOnline == 1; } } } break; case DeviceType.WindowCoveringDevice: if ((common as Rollershade).DeviceStatusReport.CluterID == 3) { var rollerShape = deviceUI.CommonDevice as Rollershade; //记录回复时间 rollerShape.LastDateTime = DateTime.Now; rollerShape.IsOnline = 1; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = rollerShape.IsOnline == 1; } } } break; case DeviceType.Thermostat: //AC功能 if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 513) { var attriButeList = (common as ZigBee.Device.AC).DeviceStatusReport.AttriBute; if (attriButeList == null || attriButeList.Count == 0) { return; } var ac = deviceUI.CommonDevice as ZigBee.Device.AC; ac.DeviceStatusReport = (common as ZigBee.Device.AC).DeviceStatusReport; switch (attriButeList[0].AttributeId) { case 0: //此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃ ac.currentLocalTemperature = attriButeList[0].AttriButeData / 100; ac.LastDateTime = DateTime.Now; 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 < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_OnOffStatus) { if (ac.currentSystemMode == 0) { (tempView as Button).IsSelected = false; } else { (tempView as Button).IsSelected = true; } } } break; } } if ((common as ZigBee.Device.AC).DeviceStatusReport.CluterID == 3) { var ac = deviceUI.CommonDevice as ZigBee.Device.AC; ac.IsOnline = 1; //记录回复时间 ac.LastDateTime = DateTime.Now; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = ac.IsOnline == 1; } } } 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 < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.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 == 3) { var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight; dimmableLight.IsOnline = 1; //记录回复时间 dimmableLight.LastDateTime = DateTime.Now; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = dimmableLight.IsOnline == 1; } } } break; } } } catch (Exception ex) { System.Console.WriteLine($"分类设备状态-Error:{ex.Message}"); } }); } else if (typeTag == "OnlineStatusChange") { Application.RunOnMainThread(() => { try { for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++) { var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout; var deviceUI = rowLayout.Tag as DeviceUI; if (deviceUI == null || deviceUI.CommonDevice == null) { continue; } if (deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr || deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint) { continue; } switch (deviceUI.CommonDevice.Type) { case DeviceType.OnOffOutput: var light = deviceUI.CommonDevice as ToggleLight; light.IsOnline = (common as ToggleLight).IsOnline; //记录回复时间 light.LastDateTime = DateTime.Now; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = light.IsOnline == 1; } } break; case DeviceType.AirSwitch: var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch; airSwitch.IsOnline = (common as ZigBee.Device.AirSwitch).IsOnline; //记录回复时间 airSwitch.LastDateTime = DateTime.Now; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = airSwitch.IsOnline == 1; } } break; case DeviceType.WindowCoveringDevice: var rollerShape = deviceUI.CommonDevice as Rollershade; //记录回复时间 rollerShape.LastDateTime = DateTime.Now; rollerShape.IsOnline = (common as Rollershade).IsOnline; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = rollerShape.IsOnline == 1; } } break; case DeviceType.Thermostat: var ac = deviceUI.CommonDevice as ZigBee.Device.AC; //记录回复时间 ac.LastDateTime = DateTime.Now; ac.IsOnline = (common as ZigBee.Device.AC).IsOnline; for (int j = 0; j < rowLayout.ChildrenCount; j++) { var tempView = rowLayout.GetChildren(j); if (tempView.Tag == null) { continue; } if (tempView.Tag.ToString() == deviceStatus_Online) { (tempView as Button).IsSelected = ac.IsOnline == 1; } } break; } } } catch (Exception ex) { System.Console.WriteLine($"分类设备状态-Error:{ex.Message}"); } }); } } #endregion #region ◆ 初始化__________________________ /// /// Removes from parent. /// public override void RemoveFromParent() { ZbGateway.StatusList.Remove(this); RemoveAllUpdateControlDeviceStatuAction(); base.RemoveFromParent(); } /// /// 构造方法 /// public Category() { BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor; instance = this; } /// /// 显示界面--默认场景界面 /// /// 选中那个界面 0--功能 1--场景 2--自动化 public void Show(int selectedBtn = 1) { ZbGateway.StatusList.Add(this); RemoveAll(); #region topview var topView = new FrameLayout() { Height = Application.GetRealHeight(CommonPage.Navigation_Height), BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor, }; this.AddChidren(topView); var title = new Button() { Y = Application.GetRealHeight(CommonPage.NavigationTitle_Y), Height = Application.GetRealHeight(CommonPage.Navigation_Height - CommonPage.NavigationTitle_Y), TextAlignment = TextAlignment.Center, TextID = R.MyInternationalizationString.Category, TextSize = 20, TextColor = ZigbeeColor.Current.GXCTextBlackColor, Width = Application.GetRealWidth(CommonPage.AppRealWidth - 500), Gravity = Gravity.CenterHorizontal }; topView.AddChidren(title); addBtn = new Device.CommonForm.SelectedStatuButton() { Y = Application.GetRealHeight(CommonPage.NavigationTitle_Y), Width = Application.GetMinRealAverage(100), Height = Application.GetMinRealAverage(100), UnSelectedImagePath = "Item/Add.png", SelectedImagePath = "Item/AddSelected.png", X = Application.GetRealWidth(CommonPage.AppRealWidth - 150), }; topView.AddChidren(addBtn); #endregion #region midFL int functionSceneAuto_width; //成员没有权限展示自动化界面 if (UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 3) { functionSceneAuto_width = 1080 / 2; } else { functionSceneAuto_width = 1080 / 3; } var functionSceneAuto_height = 120; var midFL = new FrameLayout { Y = topView.Bottom, Height = Application.GetRealHeight(CommonPage.AppRealHeight - CommonPage.TabbarHeight) - topView.Bottom }; AddChidren(midFL); var functionSceneAutoBG = new FrameLayout() { Height = Application.GetRealHeight(functionSceneAuto_height), BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor }; midFL.AddChidren(functionSceneAutoBG); //功能 functionBtn = new Button() { Width = Application.GetRealWidth(functionSceneAuto_width), Height = Application.GetRealHeight(functionSceneAuto_height), TextColor = ZigbeeColor.Current.GXCTextBlackColor, SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor, TextAlignment = TextAlignment.Center, TextSize = 16, TextID = R.MyInternationalizationString.Function, IsSelected = false }; midFL.AddChidren(functionBtn); //场景 sceneBtn = new Button() { X = functionBtn.Right, Width = Application.GetRealWidth(functionSceneAuto_width), Height = Application.GetRealHeight(functionSceneAuto_height), TextColor = ZigbeeColor.Current.GXCTextBlackColor, SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor, TextAlignment = TextAlignment.Center, TextSize = 16, TextID = R.MyInternationalizationString.Scence, IsSelected = false }; midFL.AddChidren(sceneBtn); //自动化 automationBtn = new Button() { X = sceneBtn.Right, Width = Application.GetRealWidth(functionSceneAuto_width), Height = Application.GetRealHeight(functionSceneAuto_height), TextColor = ZigbeeColor.Current.GXCTextBlackColor, SelectedTextColor = ZigbeeColor.Current.GXCTextBlueColor, TextAlignment = TextAlignment.Center, TextSize = 16, TextID = R.MyInternationalizationString.Automation, IsSelected = false }; //隐藏自动化 if (UserCenter.UserCenterResourse.UserInfo.AuthorityNo != 3) { midFL.AddChidren(automationBtn); } var functionSceneBottomLine = new Button() { Y = functionBtn.Bottom, Height = CommonPage.LineHeight, X = functionBtn.X, BackgroundColor = ZigbeeColor.Current.GXCLineColor }; midFL.AddChidren(functionSceneBottomLine); line = new Button() { Y = functionBtn.Bottom, Height = CommonPage.LineHeight, X = sceneBtn.X, Width = Application.GetRealWidth(functionSceneAuto_width), BackgroundColor = ZigbeeColor.Current.GXCButtonBlueColor }; midFL.AddChidren(line); //功能和场景bodyView functionSceneBodyView = new FrameLayout() { Y = line.Bottom, Height = Application.GetRealHeight(CommonPage.AppRealHeight - CommonPage.TabbarHeight) - functionBtn.Height - topView.Height - CommonPage.LineHeight, }; midFL.AddChidren(functionSceneBodyView); if (selectedBtn == 0) { addBtn.Visible = false; functionBtn.IsSelected = true; line.X = functionBtn.X; } else if (selectedBtn == 1) { addBtn.Visible = true; sceneBtn.IsSelected = true; line.X = sceneBtn.X; } else if (selectedBtn == 2) { addBtn.Visible = true; automationBtn.IsSelected = true; line.X = automationBtn.X; } RefreshBodyView(); #endregion //绑定按钮事件 BindEvent(); } #endregion #region ◆ 切换/添加 功能、场景、自动化________ /// /// 绑定按钮的事件 /// private void BindEvent() { //选择功能分栏 functionBtn.MouseUpEventHandler += FunctionBtn_MouseUpEventHandler; //选择场景分栏 sceneBtn.MouseUpEventHandler += SceneBtn_MouseUpEventHandler; //选中自动化 automationBtn.MouseUpEventHandler += AutomationBtn_MouseUpEventHandler; //右上角添加按钮 addBtn.MouseUpEventHandler += AddBtn_MouseUpEventHandler; } /// /// 选择功能分栏 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void FunctionBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs) { functionBtn.IsSelected = true; sceneBtn.IsSelected = false; automationBtn.IsSelected = false; line.X = functionBtn.X; addBtn.Visible = false; RefreshBodyView(); } /// /// 选择场景分栏 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void SceneBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs) { functionBtn.IsSelected = false; sceneBtn.IsSelected = true; automationBtn.IsSelected = false; line.X = sceneBtn.X; addBtn.Visible = true; RefreshBodyView(); } /// /// 选中自动化 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void AutomationBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs) { functionBtn.IsSelected = false; sceneBtn.IsSelected = false; automationBtn.IsSelected = true; line.X = automationBtn.X; addBtn.Visible = true; RefreshBodyView(); } /// /// 右上角添加按钮事件 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void AddBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs) { if (functionBtn.IsSelected) { //功能 } else if (sceneBtn.IsSelected) { //添加场景 Add_Scene(); } else if (automationBtn.IsSelected) { //添加自动化 Add_Automation(); } } /// /// 添加场景 /// private void Add_Scene() { var scene = new CategoryAddScene(); UserView.HomePage.Instance.AddChidren(scene); UserView.HomePage.Instance.PageIndex += 1; CategoryAddScene.sceneTargetDevicesList?.Clear(); CategoryAddScene.SceneText = ""; CategoryAddScene.CurrentRoom = Shared.Common.Room.CurrentRoom; CategoryAddScene.ModifySceneUI = null; CategoryAddScene.Modify = false; CategoryAddScene.ImagePath = "Scene/Scene0.png"; scene.Show(); } /// /// 添加自动化 /// private void Add_Automation() { //new一个新逻辑对象; Common.Logic.CurrentLogic = new Common.Logic(); Common.Logic.CurrentLogic.IsEnable = 1;//默认为开 Common.Logic.CurrentLogic.LogicName = Language.StringByID(MyInternationalizationString.automation1); var addLogicPage = new Shared.Phone.Device.Logic.AddLogicPage(); UserView.HomePage.Instance.AddChidren(addLogicPage); UserView.HomePage.Instance.PageIndex += 1; addLogicPage.Show(); } #endregion #region ◆ 刷新____________________________ /// /// 刷新bodyView /// public void RefreshBodyView() { functionSceneBodyView.RemoveAll(); if (functionBtn.IsSelected) { ShowFunction(); } else if (sceneBtn.IsSelected) { ShowScene(); } else if (automationBtn.IsSelected) { ShowAutotion(); } } #endregion #region ◆ 功能____________________________ /// /// 功能 /// public void ShowFunction() { //移除监听 RemoveAllUpdateControlDeviceStatuAction(); //选择功能--直接从房间的devicelist中获取 Shared.Common.Room.GetAllRoomDeviceUIList(); Shared.Common.Room.GetAllRoomDeviceTypeList(); if (Common.Room.AllRoomDeviceUIList == null) { return; } if (Common.Room.AllRoomDeviceUIList.Count == 0) { ShowNoFunctionTip(); } else { functionTypeScrowView = new HorizontalScrolViewLayout { Height = Application.GetRealHeight(CommonPage.RowHeight) - 1, Width = Application.GetRealWidth(CommonPage.AppRealWidth) }; functionSceneBodyView.AddChidren(functionTypeScrowView); var typeLine = new Button() { Y = functionTypeScrowView.Bottom, Width = Application.GetRealWidth(CommonPage.AppRealWidth), Height = 1, BackgroundColor = ZigbeeColor.Current.GXCLineColor }; functionSceneBodyView.AddChidren(typeLine); deviceListScrolView = new VerticalScrolViewLayout { Y = typeLine.Bottom, Height = functionSceneBodyView.Height - Application.GetRealHeight(CommonPage.RowHeight) - 1 }; functionSceneBodyView.AddChidren(deviceListScrolView); tempFunctionTypeBtn = new Button(); foreach (var deviceType in Common.Room.AllRoomDeviceTypeList) { typeRowLayout = new RowLayout() { Width = Application.GetRealWidth(CommonPage.AppRealWidth / 5), LineColor = ZigbeeColor.Current.GXCBackgroundColor, Tag = deviceType }; functionTypeScrowView.AddChidren(typeRowLayout); functionTypeIMG = new Button() { Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), Gravity = Gravity.Center, UnSelectedImagePath = DeviceUI.GetDeviceTypeUnSelectedImagePath(deviceType), SelectedImagePath = DeviceUI.GetDeviceTypeSelectedImagePath(deviceType), Tag = deviceType }; typeRowLayout.AddChidren(functionTypeIMG); functionTypeIMG.MouseUpEventHandler += ShowSameTypeFunction; if (deviceType == Shared.Common.Room.AllRoomDeviceUIList[0].CommonDevice.Type) { ShowSameTypeFunction(functionTypeIMG, null); } } } } /// /// 显示相同类型的功能 /// /// typeSender. /// The ${ParameterType} instance containing the event data. private void ShowSameTypeFunction(object typeSender, MouseEventArgs mouseEventArgs) { //选择功能--直接从房间的devicelist中获取 Shared.Common.Room.GetAllRoomDeviceUIList(); tempFunctionTypeBtn.IsSelected = false; (typeSender as Button).IsSelected = true; tempFunctionTypeBtn = (typeSender as Button); deviceListScrolView.RemoveAll(); var sameTypeList = new List { }; foreach (var devieceUI in Common.Room.AllRoomDeviceUIList) { if (devieceUI == null || devieceUI.CommonDevice == null) { continue; } if (devieceUI.CommonDevice.Type.ToString() == (typeSender as Button).Tag.ToString()) { if (!sameTypeList.Contains(devieceUI)) { sameTypeList.Add(devieceUI); } } } foreach (var deviceUI in sameTypeList) { //删除设备 EventHandler delEvent = (delSender, delE) => { 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, e2) => { if (e2) { Shared.Common.Room.CurrentRoom.DeleteDevice(deviceUI.CommonDevice, false); deviceListScrolView.RemoveViewByTag((delSender as Button).Tag); sameTypeList.Remove(deviceUI); if (sameTypeList.Count == 0) { RefreshBodyView(); } } }; }; EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, Shared.Common.Room.CurrentRoom); detailInfo.action = RefreshBodyView; }; if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.OnOffOutput) { //灯 var light = deviceUI.CommonDevice as ZigBee.Device.ToggleLight; //补上非远程 if (light.Gateway == null) { continue; } if (light.Gateway.IsVirtual) { UserHomeView.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 deviceTypeRowLayout = new RowLayout() { Height = Application.GetRealHeight(CommonPage.RowHeight), LineColor = ZigbeeColor.Current.GXCLineColor, Tag = deviceUI }; deviceListScrolView.AddChidren(deviceTypeRowLayout); var deviceIMG = new Button() { X = Application.GetRealWidth(CommonPage.XLeft), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = deviceUI.IconPath, SelectedImagePath = deviceUI.OnlineIconPath, Gravity = Gravity.CenterVertical, IsSelected = light.IsOnline == 1, Tag = deviceStatus_Online }; deviceTypeRowLayout.AddChidren(deviceIMG); var deviceNameBtn = new Button() { X = Application.GetRealWidth(50) + deviceIMG.Right, Width = Application.GetRealWidth(500), Text = deviceUI.CommonDevice.DeviceEpointName, TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.CenterLeft }; deviceTypeRowLayout.AddChidren(deviceNameBtn); var switchBtn = new Button { X = deviceTypeRowLayout.Right - Application.GetRealWidth(200), Width = Application.GetMinRealAverage(183), Height = Application.GetMinRealAverage(123), UnSelectedImagePath = "Item/Switch.png", SelectedImagePath = "Item/SwitchSelected.png", IsSelected = light.OnOffStatus == 1, Tag = deviceStatus_OnOffStatus, Gravity = Gravity.CenterVertical }; deviceTypeRowLayout.AddChidren(switchBtn); switchBtn.MouseUpEventHandler += (send2, e2) => { zbGateway = deviceUI.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice); switchBtn.IsSelected = !switchBtn.IsSelected; if (switchBtn.IsSelected == true) { light.SwitchControl(1); } else { light.SwitchControl(0); } //控制延时回调 DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; var delBtn = new Device.CommonForm.RowLayoutDeleteButton() { Tag = deviceUI, Radius = 0 }; deviceTypeRowLayout.AddRightView(delBtn); delBtn.MouseUpEventHandler += delEvent; deviceTypeRowLayout.MouseUpEventHandler += deviceDetailHandler; deviceIMG.MouseUpEventHandler += deviceDetailHandler; deviceNameBtn.MouseUpEventHandler += deviceDetailHandler; } else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.AirSwitch) { //空气开关 var airSwitch = deviceUI.CommonDevice as ZigBee.Device.AirSwitch; //补上非远程 if (airSwitch.Gateway == null) { continue; } if (airSwitch.Gateway.IsVirtual) { UserHomeView.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 deviceTypeRowLayout = new RowLayout() { Height = Application.GetRealHeight(CommonPage.RowHeight), LineColor = ZigbeeColor.Current.GXCLineColor, Tag = deviceUI }; deviceListScrolView.AddChidren(deviceTypeRowLayout); var deviceIMG = new Button() { X = Application.GetRealWidth(CommonPage.XLeft), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = deviceUI.IconPath, SelectedImagePath = deviceUI.OnlineIconPath, Gravity = Gravity.CenterVertical, IsSelected = airSwitch.IsOnline == 1, Tag = deviceStatus_Online }; deviceTypeRowLayout.AddChidren(deviceIMG); var deviceNameBtn = new Button() { X = Application.GetRealWidth(50) + deviceIMG.Right, Width = Application.GetRealWidth(500), Text = deviceUI.CommonDevice.DeviceEpointName, TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.CenterLeft }; deviceTypeRowLayout.AddChidren(deviceNameBtn); var switchBtn = new Button { X = deviceTypeRowLayout.Right - Application.GetRealWidth(200), Width = Application.GetMinRealAverage(183), Height = Application.GetMinRealAverage(123), UnSelectedImagePath = "Item/Switch.png", SelectedImagePath = "Item/SwitchSelected.png", IsSelected = airSwitch.OnOffStatus == 1, Tag = deviceStatus_OnOffStatus, Gravity = Gravity.CenterVertical }; deviceTypeRowLayout.AddChidren(switchBtn); switchBtn.MouseUpEventHandler += (send2, e2) => { zbGateway = deviceUI.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice); switchBtn.IsSelected = !switchBtn.IsSelected; if (switchBtn.IsSelected == true) { airSwitch.SwitchControl(1); } else { airSwitch.SwitchControl(0); } //控制延时回调 DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; var delBtn = new Device.CommonForm.RowLayoutDeleteButton() { Tag = deviceUI, Radius = 0 }; deviceTypeRowLayout.AddRightView(delBtn); delBtn.MouseUpEventHandler += delEvent; deviceTypeRowLayout.MouseUpEventHandler += deviceDetailHandler; deviceIMG.MouseUpEventHandler += deviceDetailHandler; deviceNameBtn.MouseUpEventHandler += deviceDetailHandler; } else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.DimmableLight) { //调光灯 var dimmableLight = deviceUI.CommonDevice as ZigBee.Device.DimmableLight; //补上非远程 if (dimmableLight.Gateway == null) { continue; } if (dimmableLight.Gateway.IsVirtual) { UserHomeView.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 deviceTypeRowLayout = new RowLayout() { Height = Application.GetRealHeight(CommonPage.RowHeight), LineColor = ZigbeeColor.Current.GXCLineColor, Tag = deviceUI }; deviceListScrolView.AddChidren(deviceTypeRowLayout); var deviceIMG = new Button() { X = Application.GetRealWidth(CommonPage.XLeft), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = deviceUI.IconPath, SelectedImagePath = deviceUI.OnlineIconPath, Gravity = Gravity.CenterVertical, IsSelected = dimmableLight.IsOnline == 1, Tag = deviceStatus_Online }; deviceTypeRowLayout.AddChidren(deviceIMG); var deviceNameBtn = new Button() { X = Application.GetRealWidth(50) + deviceIMG.Right, Width = Application.GetRealWidth(500), Text = deviceUI.CommonDevice.DeviceEpointName, TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.CenterLeft }; deviceTypeRowLayout.AddChidren(deviceNameBtn); var switchBtn = new Button { X = deviceTypeRowLayout.Right - Application.GetRealWidth(200), Width = Application.GetMinRealAverage(183), Height = Application.GetMinRealAverage(123), UnSelectedImagePath = "Item/Switch.png", SelectedImagePath = "Item/SwitchSelected.png", IsSelected = dimmableLight.OnOffStatus == 1, Tag = deviceStatus_OnOffStatus, Gravity = Gravity.CenterVertical }; deviceTypeRowLayout.AddChidren(switchBtn); switchBtn.MouseUpEventHandler += (send2, e2) => { zbGateway = deviceUI.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice); switchBtn.IsSelected = !switchBtn.IsSelected; if (switchBtn.IsSelected == true) { dimmableLight.SwitchControl(1); } else { dimmableLight.SwitchControl(0); } //控制延时回调 DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; var delBtn = new Device.CommonForm.RowLayoutDeleteButton() { Tag = deviceUI, Radius = 0 }; deviceTypeRowLayout.AddRightView(delBtn); delBtn.MouseUpEventHandler += delEvent; deviceTypeRowLayout.MouseUpEventHandler += deviceDetailHandler; deviceIMG.MouseUpEventHandler += deviceDetailHandler; deviceNameBtn.MouseUpEventHandler += deviceDetailHandler; } else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.Thermostat) { //空调 var ac = deviceUI.CommonDevice as ZigBee.Device.AC; //补上非远程 if (ac.Gateway == null) { continue; } if (ac.Gateway.IsVirtual) { //发送读取状态命令 UserView.UserHomeView.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 deviceTypeRowLayout = new RowLayout() { Height = Application.GetRealHeight(CommonPage.RowHeight), LineColor = ZigbeeColor.Current.GXCLineColor, Tag = deviceUI }; deviceListScrolView.AddChidren(deviceTypeRowLayout); var deviceIMG = new Button() { X = Application.GetRealWidth(CommonPage.XLeft), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = deviceUI.IconPath, SelectedImagePath = deviceUI.OnlineIconPath, Gravity = Gravity.CenterVertical, IsSelected = ac.IsOnline == 1, Tag = deviceStatus_Online }; deviceTypeRowLayout.AddChidren(deviceIMG); var deviceNameBtn = new Button() { X = Application.GetRealWidth(50) + deviceIMG.Right, Width = Application.GetRealWidth(500), Text = deviceUI.CommonDevice.DeviceEpointName, TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.CenterLeft }; deviceTypeRowLayout.AddChidren(deviceNameBtn); var switchBtn = new Button { X = deviceTypeRowLayout.Right - Application.GetRealWidth(200), Width = Application.GetMinRealAverage(183), Height = Application.GetMinRealAverage(123), UnSelectedImagePath = "Item/Switch.png", SelectedImagePath = "Item/SwitchSelected.png", IsSelected = Device.AC.ACControlBase.IsOpen(ac), Tag = deviceStatus_OnOffStatus, Gravity = Gravity.CenterVertical }; deviceTypeRowLayout.AddChidren(switchBtn); switchBtn.MouseUpEventHandler += (send2, e2) => { zbGateway = deviceUI.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice); switchBtn.IsSelected = !switchBtn.IsSelected; if (switchBtn.IsSelected == true) { ac.Open(); } else { ac.Close(); } //控制延时回调 DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; var delBtn = new Device.CommonForm.RowLayoutDeleteButton() { Tag = deviceUI, Radius = 0 }; deviceTypeRowLayout.AddRightView(delBtn); delBtn.MouseUpEventHandler += delEvent; deviceTypeRowLayout.MouseUpEventHandler += deviceDetailHandler; deviceIMG.MouseUpEventHandler += deviceDetailHandler; deviceNameBtn.MouseUpEventHandler += deviceDetailHandler; } else if (deviceUI.CommonDevice.Type == ZigBee.Device.DeviceType.WindowCoveringDevice) { //卷帘 var rollerShade = deviceUI.CommonDevice as ZigBee.Device.Rollershade; //不上非远程 if (rollerShade.Gateway == null) { continue; } if (rollerShade.Gateway.IsVirtual) { UserHomeView.ReadStatus(rollerShade, () => { rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); }); } else { //防止短时间内多次读取 if ((DateTime.Now - rollerShade.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { rollerShade.ReadAttri(Cluster_ID.Identify, AttriButeId.Switch); } } var deviceTypeRowLayout = new RowLayout() { Height = Application.GetRealHeight(CommonPage.RowHeight), LineColor = ZigbeeColor.Current.GXCLineColor, Tag = deviceUI }; deviceListScrolView.AddChidren(deviceTypeRowLayout); var deviceIMG = new Button() { X = Application.GetRealWidth(CommonPage.XLeft), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = deviceUI.IconPath, SelectedImagePath = deviceUI.OnlineIconPath, Gravity = Gravity.CenterVertical, IsSelected = rollerShade.IsOnline == 1, Tag = deviceStatus_Online }; deviceTypeRowLayout.AddChidren(deviceIMG); var deviceNameBtn = new Button() { X = Application.GetRealWidth(50) + deviceIMG.Right, Width = Application.GetRealWidth(350), Text = deviceUI.CommonDevice.DeviceEpointName, TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.CenterLeft }; deviceTypeRowLayout.AddChidren(deviceNameBtn); var closeBtn = new Device.CommonForm.SelectedStatuButton() { X = Application.GetRealWidth(50) + deviceNameBtn.Right, Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "WindowCovering/RollerShadeClose.png", SelectedImagePath = "WindowCovering/RollerShadeCloseSelected.png", }; deviceTypeRowLayout.AddChidren(closeBtn); var stopBtn = new Device.CommonForm.SelectedStatuButton() { X = Application.GetRealWidth(50) + closeBtn.Right, Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "WindowCovering/RollerShadeStop.png", SelectedImagePath = "WindowCovering/RollerShadeStopSelected.png", }; deviceTypeRowLayout.AddChidren(stopBtn); var openBtn = new Device.CommonForm.SelectedStatuButton() { X = Application.GetRealWidth(50) + stopBtn.Right, Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "WindowCovering/RollerShadeOpen.png", SelectedImagePath = "WindowCovering/RollerShadeOpenSelected.png", }; deviceTypeRowLayout.AddChidren(openBtn); var delBtn = new Device.CommonForm.RowLayoutDeleteButton() { Tag = deviceUI, Radius = 0 }; deviceTypeRowLayout.AddRightView(delBtn); delBtn.MouseUpEventHandler += delEvent; //窗帘关 closeBtn.MouseUpEventHandler += (sender, e) => { zbGateway = deviceUI.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice); rollerShade.CurtainUpDownStopControl(1); //控制延时回调 DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; //窗帘停 stopBtn.MouseUpEventHandler += (sender, e) => { zbGateway = deviceUI.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice); rollerShade.CurtainUpDownStopControl(2); //控制延时回调 DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; //窗帘开 openBtn.MouseUpEventHandler += (sender, e) => { zbGateway = deviceUI.CommonDevice.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI.CommonDevice); rollerShade.CurtainUpDownStopControl(0); //控制延时回调 DeviceUI.SendCommandDelayAction(deviceUI.CommonDevice, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { DeviceUI.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; deviceTypeRowLayout.MouseUpEventHandler += deviceDetailHandler; deviceIMG.MouseUpEventHandler += deviceDetailHandler; deviceNameBtn.MouseUpEventHandler += deviceDetailHandler; } else { var deviceTypeRowLayout = new RowLayout() { Height = Application.GetRealHeight(CommonPage.RowHeight), LineColor = ZigbeeColor.Current.GXCLineColor, Tag = deviceUI }; deviceListScrolView.AddChidren(deviceTypeRowLayout); var deviceIMG = new Button() { X = Application.GetRealWidth(CommonPage.XLeft), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = deviceUI.IconPath, SelectedImagePath = deviceUI.OnlineIconPath, Gravity = Gravity.CenterVertical, Tag = deviceStatus_Online }; deviceTypeRowLayout.AddChidren(deviceIMG); var deviceNameBtn = new Button() { X = Application.GetRealWidth(50) + deviceIMG.Right, Width = Application.GetRealWidth(500), Text = deviceUI.CommonDevice.DeviceEpointName, TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextAlignment = TextAlignment.CenterLeft }; deviceTypeRowLayout.AddChidren(deviceNameBtn); var delBtn = new Device.CommonForm.RowLayoutDeleteButton() { Tag = deviceUI, Radius = 0 }; deviceTypeRowLayout.AddRightView(delBtn); delBtn.MouseUpEventHandler += delEvent; deviceTypeRowLayout.MouseUpEventHandler += deviceDetailHandler; deviceIMG.MouseUpEventHandler += deviceDetailHandler; deviceNameBtn.MouseUpEventHandler += deviceDetailHandler; } } } /// /// 提示没有功能 /// private void ShowNoFunctionTip() { var noFunctionTip = new Button() { Height = Application.GetMinRealAverage(200), TextID = R.MyInternationalizationString.NoFunction, TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, Gravity = Gravity.CenterVertical }; functionSceneBodyView.AddChidren(noFunctionTip); } #endregion #region ◆ 场景____________________________ /// /// 选择场景--所有房间的所有场景 /// public void ShowScene() { //刷新场景 //var reFreshResult=await Shared.Common.Room.RefreshSceneUIList(); Shared.Common.SceneRoomUI.GetAllSceneRoomUIList(); if (SceneRoomUI.AllSceneRoomUIList == null) { return; } var sceneList = SceneRoomUI.AllSceneRoomUIList; Shared.Common.Room.GetAllRoomDeviceUIList(); if (sceneList.Count == 0) { ShowNoSceneTip(); } else { var sceneScrolView = new VerticalScrolViewLayout { }; functionSceneBodyView.AddChidren(sceneScrolView); foreach (var sceneRoomUI in sceneList) { var sceneFL = new FrameLayout() { Width = Application.GetRealWidth(CommonPage.AppRealWidth - 100), Height = Application.GetRealHeight(400), Gravity = Gravity.CenterHorizontal, BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, Tag = sceneRoomUI }; sceneScrolView.AddChidren(sceneFL); var sceneRowLayout = new RowLayout() { Y = Application.GetRealHeight(30), Height = Application.GetRealHeight(400 - 30 - 10), Gravity = Gravity.CenterHorizontal, 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 = sceneRoomUI.sceneUI.IconPath, Radius = CommonPage.BigFormRadius }; sceneRowLayout.AddChidren(sceneImg); var sceneBGBtn = new Button() { BackgroundColor = ZigbeeColor.Current.GXCBlack70Color, SelectedBackgroundColor = ZigbeeColor.Current.GXCBlack80Color, Radius = CommonPage.BigFormRadius }; sceneRowLayout.AddChidren(sceneBGBtn); var roomNameBtn = new Button() { X = Application.GetRealWidth(30), Y = Application.GetRealHeight(1), Width = Application.GetRealWidth(600), Height = Application.GetRealHeight(110), Text = $"{sceneRoomUI.room.Name}", TextColor = ZigbeeColor.Current.GXCTextWhiteColor, TextSize = 12, TextAlignment = TextAlignment.CenterLeft }; sceneRowLayout.AddChidren(roomNameBtn); var sceneNameBtn = new Button() { Width = Application.GetRealWidth(700), Height = Application.GetRealHeight(200), TextColor = ZigbeeColor.Current.GXCTextWhiteColor, TextSize = 20, Text = sceneRoomUI.sceneUI.Name, Gravity = Gravity.Center }; sceneRowLayout.AddChidren(sceneNameBtn); var moreBtn = new Device.CommonForm.SelectedStatuButton() { Y = Application.GetRealHeight(1), X = sceneRowLayout.Width - Application.GetRealWidth(150), Width = Application.GetMinRealAverage(110), Height = Application.GetMinRealAverage(110), UnSelectedImagePath = "Item/MoreWhite.png", SelectedImagePath = "Item/MoreSelected.png" }; sceneRowLayout.AddChidren(moreBtn); //编辑延时 var leftDelayTimeBtn = new Device.CommonForm.RowLayoutEditButton() { Tag = sceneRoomUI.sceneUI.SceneDelayTime }; //删除 var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton { Tag = sceneRoomUI }; if(!sceneRoomUI.room.IsSharedRoom) { sceneRowLayout.AddRightView(leftDelayTimeBtn); sceneRowLayout.AddRightView(deleteBtn); } //调用场景 EventHandler sceneDownHandler = (sender, e) => { sceneBGBtn.IsSelected = true; }; sceneBGBtn.MouseDownEventHandler += sceneDownHandler; sceneImg.MouseDownEventHandler += sceneDownHandler; sceneRowLayout.MouseDownEventHandler += sceneDownHandler; sceneNameBtn.MouseDownEventHandler += sceneDownHandler; sceneFL.MouseDownEventHandler += sceneDownHandler; EventHandler sceneUpHandler = async (sender, e) => { sceneBGBtn.IsSelected = false; //1成功 0失败 //后面补上相关提示 //要先从网关读取延时是否正在执行,如果是进行倒计时,不允许在点击 var sceneOpenAllData = await ZigBee.Device.Scene.ControlSceneAsync(sceneRoomUI.sceneUI.Id, sceneRoomUI.sceneUI.SceneDelayTime); //主网关不在线 if (sceneOpenAllData == null) { //CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheMainGatewayIsNotOnLine); CommonPage.Instance.FailureToServer(); return; } if (sceneOpenAllData.sceneOpenData == null) { CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain); return; } //成功 if (sceneOpenAllData.sceneOpenData.Result == 1) { } //失败 else { CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain); return; } }; sceneBGBtn.MouseUpEventHandler += sceneUpHandler; sceneImg.MouseUpEventHandler += sceneUpHandler; sceneRowLayout.MouseUpEventHandler += sceneUpHandler; sceneFL.MouseUpEventHandler += sceneUpHandler; sceneNameBtn.MouseUpEventHandler += sceneUpHandler; //删除场景 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(sceneRoomUI.sceneUI.Id); if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null) { //CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheMainGatewayIsNotOnLine); CommonPage.Instance.FailureToServer(); return; } //1成功 if (removeSceneAllData.removeSceneData.Result == 1) { sceneRoomUI.room.RemoveScene(sceneRoomUI.sceneUI); //RefreshBodyView(); sceneScrolView.RemoveViewByTag((sender as Button).Tag); } //0 移除失败 else if (removeSceneAllData.removeSceneData.Result == 0) { CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain); return; } //2 没有该场景 else if (removeSceneAllData.removeSceneData.Result == 2) { sceneRoomUI.room.RemoveScene(sceneRoomUI.sceneUI); //RefreshBodyView(); sceneScrolView.RemoveViewByTag((sender as Button).Tag); CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheSceneIsNull); return; } } }; }; deleteBtn.MouseUpEventHandler += delEvent; //编辑场景 moreBtn.MouseUpEventHandler += (sender, e) => { SceneRoomUI.EditScene(sceneRoomUI.sceneUI, sceneRoomUI.room); }; //编辑延时 leftDelayTimeBtn.MouseUpEventHandler += (sender, e) => { var tList = new List() { }; for (int i = 0; i < 60; i++) { tList.Add($"{i} {Language.StringByID(R.MyInternationalizationString.Second)}"); } //int beforeIndex = (int)(sender as CommonForm.RowLayoutEditButton).Tag; PickerView.Show(tList, (obj) => { var tempRoom = Shared.Common.Room.GetRoomByFilePath(sceneRoomUI.room.FileName); if (tempRoom == null) { return; } foreach (var ss in tempRoom.SceneUIList) { if (ss.Id == sceneRoomUI.sceneUI.Id) { ss.SceneDelayTime = int.Parse(obj.Split(' ')[0]); sceneRoomUI.room.Save(); RefreshBodyView(); return; } } }, Language.StringByID(R.MyInternationalizationString.Confrim), tList[(int)(sender as CommonForm.RowLayoutEditButton).Tag]); }; } } } /// /// 显示没有场景 /// private void ShowNoSceneTip() { var noScenceTip = new Button() { Height = Application.GetMinRealAverage(200), TextID = R.MyInternationalizationString.NoScene, TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, Gravity = Gravity.CenterVertical }; functionSceneBodyView.AddChidren(noScenceTip); } #endregion #region ◆ 自动化__________________________ /// /// 自动化 /// public async void ShowAutotion() { var logicScrolView = new VerticalScrolViewLayout { }; functionSceneBodyView.AddChidren(logicScrolView); //Shared.Common.ResponseEntity.Logic.LogicDviceList = await gateway.GetGwDeviceList(); // gateway.DeviceList.Clear(); ////// Shared.Common.ResponseEntity.Logic.LogicDviceList = LocalDevice.Current.GetDeviceByGatewayID(gateway.getGatewayBaseInfo.gwID); //if (gateway.DeviceList.Count != 0) //{ // Shared.IO.FileUtils.WriteFileByBytes("ZigbeeDeviceListFilePath", System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(gateway.DeviceList))); //} //else //{//临时保存设备列表数据给逻辑开发 // var devicestring = System.Text.Encoding.UTF8.GetString(Shared.IO.FileUtils.ReadFile("ZigbeeDeviceListFilePath")); // gateway.DeviceList = Newtonsoft.Json.JsonConvert.DeserializeObject>(devicestring); //} CommonPage.Loading.Start(); //if (Common.Logic.LogicDviceList.Count != 0) //{ // foreach (var gateway in ZbGateway.GateWayList) // { // if (gateway.IsMainGateWay) // { // Common.Logic.LogicDviceList = LocalDevice.Current.GetDeviceByGatewayID(gateway.getGatewayBaseInfo.gwID); // } // } //} //CommonPage.Loading.Start(); if (Common.Logic.LogicList.Count == 0) { var Idlist = await Logic.Send.GetLogicId(); if (Idlist.Count != 0) { foreach (var LogicId in Idlist) { var logic = await Logic.Send.GetLogic(LogicId); if (logic != null) { Common.Logic.LogicList.Add(logic); } } } } //自动化 Automationview(logicScrolView); CommonPage.Loading.Hide(); } /// /// 自动化列表界面 /// /// Refresview. public async void Automationview(VerticalScrolViewLayout refresview) { refresview.RemoveAll(); foreach (var logic in Common.Logic.LogicList) { var logicrowlayout = new RowLayout { Height = Application.GetRealHeight(180), LineColor = ZigbeeColor.Current.LogicLineColor, }; refresview.AddChidren(logicrowlayout); var btnname = new Button { //Text = "逻辑一", Text = logic.LogicName, X = Application.GetRealWidth(50), TextAlignment = TextAlignment.CenterLeft, Gravity = Gravity.CenterVertical, TextColor = ZigbeeColor.Current.LogicTextBlackColor, }; logicrowlayout.AddChidren(btnname); var btnswitch = new Button { Width = Application.GetMinRealAverage(183), Height = Application.GetMinRealAverage(123), UnSelectedImagePath = "ZigeeLogic/Switch.png", SelectedImagePath = "ZigeeLogic/SwitchSelected.png", X = Application.GetRealWidth(1080 - 200), Gravity = Gravity.CenterVertical, }; logicrowlayout.AddChidren(btnswitch); btnswitch.MouseUpEventHandler += (sender1, e1) => { btnswitch.IsSelected = !btnswitch.IsSelected; if (btnswitch.IsSelected) { //逻辑开 logic.IsEnable = 1; } else { //逻辑关 logic.IsEnable = 0; } Logic.Send.AddModifyLogic(logic); }; if (logic.IsEnable == 1) { btnswitch.IsSelected = true; } else if (logic.IsEnable == 0) { btnswitch.IsSelected = false; } ///编辑 var edit = new Button { //TextID = MyInternationalizationString.Musicdel BackgroundColor = 0xFF00aaf0, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicTextBlackColor, }; logicrowlayout.AddRightView(edit); edit.MouseUpEventHandler += (sender, e) => { Common.Logic.LogicDviceList.Clear(); if (Common.Logic.LogicDviceList.Count == 0) { Common.Logic.LogicDviceList.AddRange(LocalDevice.Current.listAllDevice.ToArray()); } Common.Logic.CurrentLogic = logic; var logicCommunalPage = new Logic.LogicCommunalPage(); UserView.HomePage.Instance.AddChidren(logicCommunalPage); UserView.HomePage.Instance.PageIndex += 1; logicCommunalPage.Show(() => { btnname.Text = logic.LogicName; Automationview(refresview); }); }; var btndelay = new Button { Width = Application.GetRealWidth(150), Height = Application.GetRealHeight(50), X = Application.GetRealWidth(300), Y = Application.GetRealHeight(25), TextAlignment = TextAlignment.Center, TextColor = 0xffcccccc, }; logicrowlayout.AddChidren(btndelay); ///延时控件 var btndelaytext = new Button { BackgroundColor = 0xff676767, Text = Language.StringByID(R.MyInternationalizationString.delayed), }; //logicrowlayout.AddRightView(btndelaytext); //if (logic.param.ContainsKey ("delay")) { // var delayvalue = logic.param ["delay"]?.ToString (); // if (delayvalue != "" && delayvalue != "0") { // var l = int.Parse (delayvalue) / 10; // btndelay.Text = l.ToString () + "s"; // } //} btndelaytext.MouseUpEventHandler += (sender, e) => { Dialog window = new Dialog(); window.Show(); var frameLayout = new FrameLayout { Width = Application.GetRealWidth(580), Height = Application.GetRealHeight(300), X = Application.GetRealWidth(30), Y = Application.GetRealHeight(330), BackgroundColor = 0xffffffff, }; window.AddChidren(frameLayout); var Modifyname = new Button { Width = Application.GetRealWidth(580), Height = Application.GetRealHeight(80), TextID = R.MyInternationalizationString.devicedelaytime, //Text = "请输入设备延时的时间(单位/s)", Y = Application.GetRealHeight(10), TextSize = 16, TextColor = ZigbeeColor.Current.MusicTipTextColor, }; frameLayout.AddChidren(Modifyname); var delaytext = new EditText { Width = Application.GetRealWidth(540), Height = Application.GetRealHeight(80), Y = Application.GetRealHeight(80), X = Application.GetRealWidth(20), Gravity = Gravity.CenterVertical, // BackgroundColor = SkinStyle.Current.MusicTipBackgroundColor, //TextColor = 0xff000000, Radius = 1, BorderWidth = 1, //BorderColor = SkinStyle.Current.MusicEditBorderColor, //TextColor = SkinStyle.Current.MusicTextColor, }; frameLayout.AddChidren(delaytext); var line = new Button { Height = Application.GetRealHeight(2), Y = Application.GetRealHeight(218), BackgroundColor = 0xff666666, }; frameLayout.AddChidren(line); var cancelrow = new RowLayout { Y = Application.GetRealHeight(220), Height = Application.GetRealHeight(80), Width = Application.GetRealWidth(289), BackgroundColor = 0xffcccccc, }; frameLayout.AddChidren(cancelrow); var cancel = new Button { TextID = R.MyInternationalizationString.cancel, //TextColor = 0xff000000, TextSize = 18, //TextColor = SkinStyle.Current.MusicTextColor, }; cancelrow.AddChidren(cancel); cancel.MouseUpEventHandler += (sender1, e1) => { window.Close(); }; var ther = new Button { Y = Application.GetRealHeight(220), Height = Application.GetRealHeight(80), Width = Application.GetRealWidth(2), X = Application.GetRealHeight(289), BackgroundColor = 0xff666666, }; frameLayout.AddChidren(ther); var confirmrow = new RowLayout { Y = Application.GetRealHeight(220), X = Application.GetRealWidth(291), Height = Application.GetRealHeight(80), Width = Application.GetRealWidth(289), BackgroundColor = 0xffcccccc, }; frameLayout.AddChidren(confirmrow); var confirm = new Button { TextID = R.MyInternationalizationString.confrim, //TextColor = 0xff000000, TextSize = 18, // TextColor = SkinStyle.Current.MusicTextColor, }; confirmrow.AddChidren(confirm); //if (logic.param.ContainsKey ("delay")) { // var delayvalue = logic.param ["delay"]?.ToString (); // if (delayvalue != "" && delayvalue != "0") { // var l = int.Parse (delayvalue) / 10; // delaytext.Text = l.ToString () + "s"; // } //} confirm.MouseUpEventHandler += (sender1, e1) => { var isNumber = delaytext.Text.Trim(); if (!int.TryParse(isNumber, out int number) || isNumber == "") { new Alert(Language.StringByID(R.MyInternationalizationString.Tip), Language.StringByID(R.MyInternationalizationString.inputnumber), Language.StringByID(R.MyInternationalizationString.Close)).Show(); return; } var vel = int.Parse(isNumber); //if (logic.param.ContainsKey ("delay")) { // logic.param.Remove ("delay"); // logic.param.Add ("delay", vel * 10); //} else { // logic.param.Add ("delay", vel * 10); //} //btndelay.Text = isNumber + "s"; window.Close(); Automationview(refresview); }; }; ///删除 var del = new Button { //TextID = MyInternationalizationString.Musicdel, BackgroundColor = 0xFFFF0000, Text = Language.StringByID(MyInternationalizationString.del), }; logicrowlayout.AddRightView(del); del.MouseUpEventHandler += (sender, e) => { Common.Logic.LogicList.Remove(logic); Automationview(refresview); Logic.Send.DelLogic(logic.LogicId); }; } } #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 } }