using System; using System.Collections.Generic; using System.Text; using ZigBee.Device; namespace Shared.Phone.UserCenter.DeviceAirConditioner { /// /// 空调的室内机列表界面 /// public class IndoorUnitListForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 设备列表 /// private List listDevice = null; /// /// 控件信息 /// private Dictionary dicControl = new Dictionary(); /// /// 激活的设备地址 /// private string actionDeviceKeys = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 设备Mac地址 public void ShowForm(string i_diviceMac) { this.listDevice = Common.LocalDevice.Current.GetDevicesByMac(i_diviceMac); //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uIndoorUnitSettion)); //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); var listView = new VerticalFrameControl(14); listView.Height = bodyFrameLayout.Height; bodyFrameLayout.AddChidren(listView); var frameTemp = new FrameLayout(); frameTemp.Height = Application.GetRealHeight(69); listView.AddChidren(frameTemp); HdlThreadLogic.Current.RunMainInThread(() => { for (int i = 0; i < listDevice.Count; i++) { //添加空调行 this.AddAcControlRow(listView, (AC)listDevice[i]); } var frameTemp2 = new FrameLayout(); frameTemp2.Height = Application.GetRealHeight(29); listView.AddChidren(frameTemp2); //数据接收 this.StartReceiveDataEvent(); //发送读取属性的命令 this.SetReadAttributeComand(); }); } /// /// 添加空调行 /// /// /// private void AddAcControlRow(VerticalFrameControl listView, AC device) { var rowInfo = new RowControlInfo(); var frameTable = new FrameLayoutStatuControl(); frameTable.UseClickStatu = false; frameTable.Width = Application.GetRealWidth(994); frameTable.Height = Application.GetRealHeight(337); frameTable.BackgroundImagePath = "Item/IndoorUnitGround.png"; frameTable.Gravity = Gravity.CenterHorizontal; listView.AddChidren(frameTable); //设备图标 var btnIconBack = new FrameLayout(); btnIconBack.X = Application.GetRealWidth(46); btnIconBack.Y = Application.GetRealHeight(43); btnIconBack.Height = this.GetPictrueRealSize(112); btnIconBack.Width = this.GetPictrueRealSize(112); btnIconBack.Radius = (uint)this.GetPictrueRealSize(112) / 2; btnIconBack.BackgroundColor = 0xfff5f6fa; frameTable.AddChidren(btnIconBack, ChidrenBindMode.NotBind); rowInfo.btnIconBack = btnIconBack; var btnIcon = new IconViewControl(78); btnIcon.Gravity = Gravity.Center; Common.LocalDevice.Current.SetDeviceIconToControl(btnIcon, device); btnIconBack.AddChidren(btnIcon); frameTable.ChangedChidrenBindMode(btnIconBack, ChidrenBindMode.BindEvent); rowInfo.btnIcon = btnIcon; //设备名称 var btnDeviceName = new NormalViewControl(700, 60, true); btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(device); btnDeviceName.X = Application.GetRealWidth(193); btnDeviceName.Y = Application.GetRealHeight(45); frameTable.AddChidren(btnDeviceName, ChidrenBindMode.BindEvent); rowInfo.btnDeviceName = btnDeviceName; //房间 var btnRoom = new NormalViewControl(400, 50, true); btnRoom.X = btnDeviceName.X; btnRoom.Y = btnDeviceName.Bottom + Application.GetRealHeight(12); btnRoom.TextSize = 12; btnRoom.TextColor = UserCenterColor.Current.TextGrayColor1; btnRoom.Text = HdlRoomLogic.Current.GetRoomNameByDevice(device); frameTable.AddChidren(btnRoom, ChidrenBindMode.BindEvent); rowInfo.btnRoom = btnRoom; //摄氏度 var btnValue = new NormalViewControl(300, 60, true); btnValue.Y = Application.GetRealHeight(58); btnValue.X = frameTable.Width - Application.GetRealWidth(300 + 58); btnValue.TextAlignment = TextAlignment.CenterRight; btnValue.TextID = R.MyInternationalizationString.uGetting; frameTable.AddChidren(btnValue, ChidrenBindMode.BindEvent); rowInfo.btnValue = btnValue; //警告图标 var btnWarningIcon = new IconViewControl(69); btnWarningIcon.X = btnIconBack.X; btnWarningIcon.Y = btnRoom.Bottom + Application.GetRealHeight(43); btnWarningIcon.UnSelectedImagePath = "Item/WarningIcon1.png"; frameTable.AddChidren(btnWarningIcon, ChidrenBindMode.NotBind); btnWarningIcon.Visible = false; rowInfo.btnWarningIcon = btnWarningIcon; //警告信息 var btnWarningMsg = new NormalViewControl(500, 50, true); btnWarningMsg.X = btnWarningIcon.Right + Application.GetRealWidth(12); btnWarningMsg.Y = btnRoom.Bottom + Application.GetRealHeight(55); btnWarningMsg.TextSize = 12; btnWarningMsg.TextColor = UserCenterColor.Current.TextGrayColor1; frameTable.AddChidren(btnWarningMsg, ChidrenBindMode.NotBind); rowInfo.btnWarningMsg = btnWarningMsg; //开关 var btnSwitch = new IconViewControl(69); btnSwitch.X = frameTable.Width - Application.GetRealWidth(69 + 46); btnSwitch.Y = btnRoom.Bottom + Application.GetRealHeight(43); btnSwitch.UnSelectedImagePath = "Item/Switch.png"; btnSwitch.SelectedImagePath = "Item/SwitchSelected.png"; frameTable.AddChidren(btnSwitch, ChidrenBindMode.NotBind); rowInfo.btnSwitch = btnSwitch; btnSwitch.ButtonClickEvent += async (sender, e) => { if (btnSwitch.IsSelected == false) { //打开空调 var result = await HdlDeviceAirConditionerLogic.Current.OpenAirConditioner(device); if (result == false) { return; } btnIcon.IsSelected = true; btnIconBack.BackgroundColor = 0xfffef1ed; } else { //关闭空调 var result = await HdlDeviceAirConditionerLogic.Current.CloseAirConditioner(device); if (result == false) { return; } btnIcon.IsSelected = false; btnIconBack.BackgroundColor = 0xfff5f6fa; } btnSwitch.IsSelected = !btnSwitch.IsSelected; }; frameTable.ButtonClickEvent += (sender, e) => { this.actionDeviceKeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); var form = new IndoorUnitSettionForm(); form.AddForm(device); }; dicControl[Common.LocalDevice.Current.GetDeviceMainKeys(device)] = rowInfo; } #endregion #region ■ 发送命令___________________________ /// /// 发送读取属性的命令 /// private void SetReadAttributeComand() { HdlThreadLogic.Current.RunThread(() => { for (int i = 0; i < listDevice.Count; i++) { if (this.Parent == null) { return; } //读取状态 HdlDeviceAttributeLogic.Current.SendThermostatStatuComand(listDevice[i]); System.Threading.Thread.Sleep(200); } }); } #endregion #region ■ 数据接收___________________________ /// /// 数据接收 /// private void StartReceiveDataEvent() { HdlGatewayReceiveLogic.Current.AddAttributeEvent("IndoorUnitListFormEvent", ReceiveComandDiv.A设备属性上报, (device) => { string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device); if (dicControl.ContainsKey(mainkeys) == false || device.DeviceStatusReport.CluterID != 513) { return; } var rowInfo = dicControl[mainkeys]; for (int i = 0; i < device.DeviceStatusReport.AttriBute.Count; i++) { var data = device.DeviceStatusReport.AttriBute[i]; if (data.AttributeId == 0) { HdlThreadLogic.Current.RunMain(() => { //室内温度 if (data.AttriButeData == 0) { //0℃ rowInfo.btnValue.Text = "0.0℃"; } else if (data.AttriButeData > 32767) { //负数(特殊处理) string strValue = (data.AttriButeData - 65536).ToString(); //小数点需要一位 strValue = strValue.Substring(0, strValue.Length - 1); rowInfo.btnValue.Text = strValue.Insert(strValue.Length - 1, ".") + "℃"; } else { //小数点需要一位 string strValue = data.AttriButeData.ToString(); strValue = strValue.Substring(0, strValue.Length - 1); rowInfo.btnValue.Text = strValue.Insert(strValue.Length - 1, ".") + "℃"; } }); } else if (data.AttributeId == 28) { //此属性描述恒温设备正处于哪种模式 //Off = 0 Auto = 1 Cool = 3 Heat = 4 FanOnly = 7 Dry = 8 if (data.AttriButeData != 0) { HdlThreadLogic.Current.RunMain(() => { rowInfo.btnSwitch.IsSelected = true; rowInfo.btnIcon.IsSelected = true; rowInfo.btnIconBack.BackgroundColor = 0xfffef1ed; }); } } else if (data.AttributeId == 4097) { //42:需要清洗滤网 if (data.AttriButeData == 42) { HdlThreadLogic.Current.RunMain(() => { rowInfo.btnWarningIcon.Visible = true; //请注意清洗滤网哦 rowInfo.btnWarningMsg.TextID = R.MyInternationalizationString.uPleaseClreanACfilter; }); } } } }); } #endregion #region ■ 界面关闭___________________________ /// /// 界面关闭 /// public override void CloseFormBefore() { HdlGatewayReceiveLogic.Current.RemoveEvent("IndoorUnitListFormEvent"); base.CloseFormBefore(); } #endregion #region ■ 界面重新激活事件___________________ /// /// 自身的上层界面关闭后,它自身处于最上层时,触发的事件 /// public override int FormActionAgainEvent() { if (this.actionDeviceKeys != null && dicControl.ContainsKey(this.actionDeviceKeys) == true) { //刷新设备信息 var device = Common.LocalDevice.Current.GetDevice(this.actionDeviceKeys); if (device != null) { var contr = dicControl[this.actionDeviceKeys]; contr.btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(device); contr.btnRoom.Text = HdlRoomLogic.Current.GetRoomNameByDevice(device); } } this.actionDeviceKeys = null; return 1; } #endregion #region ■ 结构体_____________________________ /// /// 行数据 /// private class RowControlInfo { /// /// 设备名字 /// public NormalViewControl btnDeviceName = null; /// /// 设备房间 /// public NormalViewControl btnRoom = null; /// /// 设备图标背景 /// public FrameLayout btnIconBack = null; /// /// 设备图标 /// public IconViewControl btnIcon = null; /// /// 摄氏度 /// public NormalViewControl btnValue = null; /// /// 警告图标 /// public IconViewControl btnWarningIcon = null; /// /// 警告信息 /// public NormalViewControl btnWarningMsg = null; /// /// 开关 /// public IconViewControl btnSwitch = null; } #endregion } }