using System; using System.Collections.Generic; using Shared.Common; using Shared.Phone.UserCenter; using ZigBee.Device; namespace Shared.Phone.MainPage.ControlForm { /// /// 空气质量传感器类型的深度卡片界面 /// public class DeviceAirQualitySensorDetailCardForm : DeviceDetailCardCommonForm { #region ■ 变量声明___________________________ /// /// 界面上可以操作的控件 /// listControl【0】:btnHumidityStatus ///listControl【1】: btnTemperatureStatus ///listControl【2】: btnPmStatus ///listControl【3】: btnPmUnit ///listControl【4】: btnHumidityUnit ///listControl【5】: btnTemperatureUnit ///listControl【6】: btnCo2Status ///listControl【7】: btnCo2Unit /// private List listControl = new List(); /// /// 界面上可以操作的控件 /// listFrameLayout【0】:frameHumidityTextFrameLayout ////listFrameLayout【0】:frameTemperatureTextFrameLayout ///listFrameLayout【0】:framePmTextFrameLayout ///listFrameLayout【0】:frameCo2TextFrameLayout /// private List listFrameLayout = new List(); /// /// 控件 /// private TemperatureSensor aqSensor = null; /// /// 状态控件 /// private NormalViewControl btnStatu = null; /// /// 当前的文本 /// private string CurrentText = string.Empty; /// /// 灯 /// private Button btnLight = null; /// /// 设置灯 /// NormalViewControl btnSetLight = null; NormalViewControl btnSetLightLine = null; /// /// 查看历史记录 /// NormalViewControl btnHistoryText = null; /// /// 设备名称控件 /// private NormalViewControl btnDeviceName = null; #endregion #region ■ 初始化_____________________________ public override void InitMiddleFrameAfter(FrameLayout frameWhiteBack) { //左滑不能 this.ScrollEnabled = true; this.aqSensor = (TemperatureSensor)this.device; //每次进入这个界面,都读一下LED状态态。因为这个开关状态总是没收到,而其CO2,PM2.5,温湿度数据上报导致外面都检查状态标记为true aqSensor.SendSwitchStatuComand(); //先清空 this.listControl = new List(); InitAirQualitySensorControl(frameWhiteBack); UpdateStatus(); } /// /// 初始化空气质量传感器控件 /// /// private void InitAirQualitySensorControl(FrameLayout frameWhiteBack) { DeviceDataUI(frameWhiteBack); //灯 btnLight = new Button() { Width = Application.GetMinRealAverage(144), Height = Application.GetMinRealAverage(144), Y = Application.GetRealHeight(1031 - 5), Gravity = Gravity.CenterHorizontal, UnSelectedImagePath = "AirQualitySensor/light.png", SelectedImagePath = "AirQualitySensor/lightOn.png", }; frameWhiteBack.AddChidren(btnLight); //设置LED灯 btnSetLight = new NormalViewControl(175+94, 49, true); btnSetLight.Y = Application.GetRealHeight(1270 - 35); btnSetLight.TextID = R.MyInternationalizationString.SetAirQualitySensorLight; btnSetLight.TextSize = 12; btnSetLight.TextColor = ZigbeeColor.Current.XMGray3; btnSetLight.Enable = false; btnSetLight.TextAlignment = TextAlignment.Center; btnSetLight.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(btnSetLight); //线 btnSetLightLine = new NormalViewControl(175, true); btnSetLightLine.Y = Application.GetRealHeight(1270 + 5); btnSetLightLine.Height = 2; btnSetLightLine.BackgroundColor = ZigbeeColor.Current.XMGray3; btnSetLightLine.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(btnSetLightLine); //查看历史记录 btnHistoryText = new NormalViewControl(303, 49, true); btnHistoryText.Y = btnSetLightLine.Y + Application.GetRealHeight(50); btnHistoryText.TextID = R.MyInternationalizationString.CheckAirQualitySensorHistory; btnHistoryText.TextSize = 12; btnHistoryText.TextColor = ZigbeeColor.Current.XMOrange; btnHistoryText.TextAlignment = TextAlignment.Center; btnHistoryText.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(btnHistoryText); //线 var btnHistoryTextLine = new NormalViewControl(209, true); btnHistoryTextLine.Height = 2; btnHistoryTextLine.Y = btnHistoryText.Y + Application.GetRealHeight(41); btnHistoryTextLine.BackgroundColor = ZigbeeColor.Current.XMOrange; btnHistoryTextLine.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(btnHistoryTextLine); //设置初始状态 if (((TemperatureSensor)this.device).OnOffStatus == 1) { btnLight.IsSelected = true; btnSetLight.TextColor = ZigbeeColor.Current.XMOrange; btnSetLightLine.BackgroundColor = ZigbeeColor.Current.XMOrange; btnSetLight.Enable = true; } btnLight.MouseUpEventHandler += (sender, e) => { //发送开关命令 this.SetSwitchCommand(!btnLight.IsSelected); }; btnSetLight.MouseUpEventHandler += (sender, e) => { //设置灯事件 var AirQualitySensorLedBindTime = new Shared.Phone.UserCenter.DeviceBind.AirQualitySensorLedBindTime(aqSensor); Shared.Phone.UserView.HomePage.Instance.AddChidren(AirQualitySensorLedBindTime); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; AirQualitySensorLedBindTime.Show(); }; btnHistoryText.MouseUpEventHandler += (sender, e) => { //查看历史记录事件 var form = new DeviceTemperatureHistoryForm(); form.AddForm(this.device); }; } /// /// 空气质量传感器带有属性状态布局 /// /// private void DeviceDataUI(FrameLayout frameWhiteBack) { //湿度容器 var frameHumidityPic = new FrameLayout(); frameHumidityPic.X = Application.GetRealWidth(121); frameHumidityPic.Y = Application.GetRealHeight(213); frameHumidityPic.Width = Application.GetMinRealAverage(311); frameHumidityPic.Height = Application.GetMinRealAverage(351); frameHumidityPic.BackgroundImagePath = "PM2.5Sensor/HumidityPic.png"; frameWhiteBack.AddChidren(frameHumidityPic); //湿度文本 var btnHumidityText = new NormalViewControl(338, 49, true); btnHumidityText.Y = Application.GetRealHeight(45); btnHumidityText.TextID = R.MyInternationalizationString.Humidity; btnHumidityText.TextSize = 12; btnHumidityText.TextColor = ZigbeeColor.Current.XMWhite; btnHumidityText.TextAlignment = TextAlignment.Center; frameHumidityPic.AddChidren(btnHumidityText); //湿度文本容器 var frameHumidityTextFrameLayout = new FrameLayout(); frameHumidityTextFrameLayout.Gravity = Gravity.CenterHorizontal; frameHumidityTextFrameLayout.Y = Application.GetRealHeight(113); frameHumidityTextFrameLayout.Height = Application.GetRealHeight(160); frameHumidityPic.AddChidren(frameHumidityTextFrameLayout); //湿度数据 var btnHumidityStatus = new NormalViewControl(193, 160, true); btnHumidityStatus.Text = "20"; btnHumidityStatus.TextSize = 30; btnHumidityStatus.TextColor = ZigbeeColor.Current.XMWhite; btnHumidityStatus.TextAlignment = TextAlignment.BottomRight; frameHumidityTextFrameLayout.AddChidren(btnHumidityStatus); //湿度单位 var btnHumidityUnit = new NormalViewControl(50, 140, true); btnHumidityUnit.X = btnHumidityStatus.Right; btnHumidityUnit.Text = "%"; btnHumidityUnit.TextSize = 14; btnHumidityUnit.TextColor = ZigbeeColor.Current.XMWhite; btnHumidityUnit.TextAlignment = TextAlignment.BottomLeft; frameHumidityTextFrameLayout.AddChidren(btnHumidityUnit); //温度容器 var frameTemperaturePic = new FrameLayout(); frameTemperaturePic.X = Application.GetRealWidth(518); frameTemperaturePic.Y = frameHumidityPic.Y; frameTemperaturePic.Width = Application.GetMinRealAverage(321); frameTemperaturePic.Height = Application.GetMinRealAverage(351); frameTemperaturePic.BackgroundImagePath = "PM2.5Sensor/TemperaturePic.png"; frameWhiteBack.AddChidren(frameTemperaturePic); //温度文本 var btnTemperatureText = new NormalViewControl(338, 49, true); btnTemperatureText.Y = Application.GetRealHeight(45); btnTemperatureText.TextID = R.MyInternationalizationString.Temperature; btnTemperatureText.TextSize = 12; btnTemperatureText.TextColor = ZigbeeColor.Current.XMWhite; btnTemperatureText.TextAlignment = TextAlignment.Center; frameTemperaturePic.AddChidren(btnTemperatureText); // 温度文本容器 var frameTemperatureTextFrameLayout = new FrameLayout(); frameTemperatureTextFrameLayout.Gravity = Gravity.CenterHorizontal; frameTemperatureTextFrameLayout.Y = Application.GetRealHeight(113); frameTemperatureTextFrameLayout.Height = Application.GetRealHeight(160); frameTemperaturePic.AddChidren(frameTemperatureTextFrameLayout); //温度数据 var btnTemperatureStatus = new NormalViewControl(193, 160, true); btnTemperatureStatus.Text = "20"; btnTemperatureStatus.TextSize = 30; btnTemperatureStatus.TextColor = ZigbeeColor.Current.XMWhite; btnTemperatureStatus.TextAlignment = TextAlignment.BottomRight; frameTemperatureTextFrameLayout.AddChidren(btnTemperatureStatus); //温度单位 var btnTemperatureUnit = new NormalViewControl(50, 140, true); btnTemperatureUnit.X = btnTemperatureStatus.Right; btnTemperatureUnit.Text = "℃"; btnTemperatureUnit.TextSize = 14; btnTemperatureUnit.TextColor = ZigbeeColor.Current.XMWhite; btnTemperatureUnit.TextAlignment = TextAlignment.BottomLeft; frameTemperatureTextFrameLayout.AddChidren(btnTemperatureUnit); //PM2.5容器 var framePmPic = new FrameLayout(); framePmPic.X = Application.GetRealWidth(120); framePmPic.Y = Application.GetRealHeight(634); framePmPic.Width = Application.GetMinRealAverage(311); framePmPic.Height = Application.GetMinRealAverage(351); framePmPic.BackgroundImagePath = "PM2.5Sensor/PmPic.png"; frameWhiteBack.AddChidren(framePmPic); //PM2.5文本 var btnPmText = new NormalViewControl(338, 49, true); btnPmText.Y = Application.GetRealHeight(45); btnPmText.Text = "PM2.5"; btnPmText.TextSize = 12; btnPmText.TextColor = ZigbeeColor.Current.XMWhite; btnPmText.TextAlignment = TextAlignment.Center; framePmPic.AddChidren(btnPmText); // PM2.5文本容器 var framePmTextFrameLayout = new FrameLayout(); framePmTextFrameLayout.Y = Application.GetRealHeight(113); framePmTextFrameLayout.Gravity = Gravity.CenterHorizontal; framePmTextFrameLayout.Height = Application.GetRealHeight(160); framePmPic.AddChidren(framePmTextFrameLayout); //PM2.5数据 var btnPmStatus = new NormalViewControl(162, 160, true); btnPmStatus.Text = "155"; btnPmStatus.TextSize = 30; btnPmStatus.TextColor = ZigbeeColor.Current.XMWhite; btnPmStatus.TextAlignment = TextAlignment.BottomRight; framePmTextFrameLayout.AddChidren(btnPmStatus); //PM2.5单位 (第4个,listControl【3】) var btnPmUnit = new NormalViewControl(144, 148, true); btnPmUnit.X = btnPmStatus.Right; btnPmUnit.Text = "μg/m³"; btnPmUnit.TextSize = 14; btnPmUnit.TextColor = ZigbeeColor.Current.XMWhite; btnPmUnit.TextAlignment = TextAlignment.BottomLeft; framePmTextFrameLayout.AddChidren(btnPmUnit); //产品部要求,暂时去掉Co2 //Co2容器 /* var frameCo2Pic = new FrameLayout(); frameCo2Pic.X = Application.GetRealWidth(518); frameCo2Pic.Y = framePmPic.Y; frameCo2Pic.Width = Application.GetMinRealAverage(311); frameCo2Pic.Height = Application.GetMinRealAverage(351); frameCo2Pic.BackgroundImagePath = "AirQualitySensor/CO2Pic.png"; frameWhiteBack.AddChidren(frameCo2Pic);*/ //Co2文本 /*var btnCo2Text = new NormalViewControl(338, 49, true); btnCo2Text.Y = Application.GetRealHeight(45); btnCo2Text.Text = "CO₂"; btnCo2Text.TextSize = 12; btnCo2Text.TextColor = ZigbeeColor.Current.XMWhite; btnCo2Text.TextAlignment = TextAlignment.Center; frameCo2Pic.AddChidren(btnCo2Text);*/ // Co2文本容器 /* var frameCo2TextFrameLayout = new FrameLayout(); frameCo2TextFrameLayout.Y = Application.GetRealHeight(113); frameCo2TextFrameLayout.Gravity = Gravity.CenterHorizontal; frameCo2TextFrameLayout.Height = Application.GetRealHeight(160); frameCo2Pic.AddChidren(frameCo2TextFrameLayout);*/ //Co2数据 /*var btnCo2Status = new NormalViewControl(162, 160, true); btnCo2Status.Text = "155"; btnCo2Status.TextSize = 30; btnCo2Status.TextColor = ZigbeeColor.Current.XMWhite; btnCo2Status.TextAlignment = TextAlignment.BottomRight; frameCo2TextFrameLayout.AddChidren(btnCo2Status);*/ //Co2单位 (第4个,listControl【4】) /*var btnCo2Unit = new NormalViewControl(112, 148, true); btnCo2Unit.X = btnPmStatus.Right; btnCo2Unit.Text = "ppm³"; btnCo2Unit.TextSize = 14; btnCo2Unit.TextColor = ZigbeeColor.Current.XMWhite; btnCo2Unit.TextAlignment = TextAlignment.BottomLeft; frameCo2TextFrameLayout.AddChidren(btnCo2Unit);*/ this.listControl.Add(btnHumidityStatus);//(第1个,listControl【0】) this.listControl.Add(btnTemperatureStatus);//(第2个,listControl【1】) this.listControl.Add(btnPmStatus);//(第3个,listControl【2】) this.listControl.Add(btnPmUnit);//(第4个,listControl【3】) this.listControl.Add(btnHumidityUnit);//(第5个,listControl【4】) this.listControl.Add(btnTemperatureUnit);//(第6个,listControl【5】) //this.listControl.Add(btnCo2Status);//(第7个,listControl【6】) //this.listControl.Add(btnCo2Unit);//(第8个,listControl【7】) this.listFrameLayout.Add(frameHumidityTextFrameLayout);//(第1个,listFrameLayout【0】) this.listFrameLayout.Add(frameTemperatureTextFrameLayout);//(第2个,listFrameLayout【1】) this.listFrameLayout.Add(framePmTextFrameLayout);//(第3个,listFrameLayout【2】) //this.listFrameLayout.Add(frameCo2TextFrameLayout);//(第4个,listFrameLayout【3】) } #endregion #region ■ 发送开关命令_______________________ /// /// 发送开关命令 /// /// 发送状态 private void SetSwitchCommand(bool isOpen) { this.StartCheckResponeResult(listControl, (result) => { //接收到网关回复 if (result == true) { HdlThreadLogic.Current.RunMain(() => { bool statu = ((TemperatureSensor)this.device).OnOffStatus == 1; this.RefreshSwitchStatu(statu); }); } }); if (isOpen == true) { aqSensor.SwitchControl(1); } else { aqSensor.SwitchControl(0); } } #endregion #region ■ 刷新开关状态_______________________ /// /// 刷新开关状态 /// /// 打开状态 private void RefreshSwitchStatu(bool isOpen) { btnLight.IsSelected = isOpen; if (isOpen) { btnSetLight.TextColor = ZigbeeColor.Current.XMOrange; btnSetLightLine.BackgroundColor = ZigbeeColor.Current.XMOrange; btnSetLight.Enable = true; } else { btnSetLight.TextColor = ZigbeeColor.Current.XMGray3; btnSetLightLine.BackgroundColor = ZigbeeColor.Current.XMGray3; btnSetLight.Enable = false; } } #endregion #region ■ 是否获取网关反馈的结果_____________ /// /// 检测网关的反馈结果(属性上报的对象:device.DeviceStatusReport) /// /// 命令区分 /// 上报数据 /// public override bool CheckResponeResultStatu(ReceiveComandDiv comandDiv, CommonDevice report) { if (comandDiv == ReceiveComandDiv.A设备属性上报) { if (report.DeviceStatusReport.CluterID == 6) { HdlThreadLogic.Current.RunMain(() => { //变更卡片状态 this.RefreshSwitchStatu(((TemperatureSensor)this.device).OnOffStatus == 1); }); return true; } if (report.DeviceStatusReport.CluterID == 1026) { var attriButeList = report.DeviceStatusReport.AttriBute; foreach (var attList in attriButeList) { if (attList.AttributeId == 0) { HdlThreadLogic.Current.RunMain(() => { UpdateStatus(); }); //已经接收到网关的反馈 return true; } } } if (report.DeviceStatusReport.CluterID == 1029) { var attriButeList = report.DeviceStatusReport.AttriBute; foreach (var attList in attriButeList) { if (attList.AttributeId == 0) { HdlThreadLogic.Current.RunMain(() => { UpdateStatus(); }); //已经接收到网关的反馈 return true; } } } if (report.DeviceStatusReport.CluterID == 1037) { var attriButeList = report.DeviceStatusReport.AttriBute; foreach (var attList in attriButeList) { if (attList.AttributeId == 0) { HdlThreadLogic.Current.RunMain(() => { UpdateStatus(); }); //已经接收到网关的反馈 return true; } } } if (report.DeviceStatusReport.CluterID == 1066) { var attriButeList = report.DeviceStatusReport.AttriBute; foreach (var attList in attriButeList) { if (attList.AttributeId == 0) { HdlThreadLogic.Current.RunMain(() => { UpdateStatus(); }); //已经接收到网关的反馈 return true; } } } } return false; } #endregion #region ■ 刷新状态_____________ /// /// 刷新状态 /// private void UpdateStatus() { //设置状态文字 this.listControl[0].Text = aqSensor.currentHumidity.ToString(); this.listControl[1].Text = aqSensor.currentTemperature.ToString(); this.listControl[2].Text = aqSensor.currentPmData.ToString(); //this.listControl[6].Text = aqSensor.currentCO2.ToString(); //设置状态文字 var curText = Language.StringByID(R.MyInternationalizationString.AirQuality) + QuailityType(); this.SetStatuText(curText); this.listControl[0].Width = this.listControl[0].GetRealWidthByText(); this.listControl[4].X = this.listControl[0].Right; this.listControl[1].Width = this.listControl[1].GetRealWidthByText(); this.listControl[5].X = this.listControl[1].Right; this.listControl[2].Width = this.listControl[2].GetRealWidthByText(); this.listControl[3].X = this.listControl[2].Right; this.listControl[3].Width = this.listControl[3].GetRealWidthByText(); //this.listControl[6].Width = this.listControl[6].GetRealWidthByText(); //this.listControl[7].X = this.listControl[6].Right; this.listFrameLayout[0].Width = this.listControl[0].Width + this.listControl[4].Width; this.listFrameLayout[1].Width = this.listControl[1].Width + this.listControl[5].Width; this.listFrameLayout[2].Width = this.listControl[2].Width + this.listControl[3].Width; //this.listFrameLayout[3].Width = this.listControl[6].Width + this.listControl[7].Width; this.listFrameLayout[0].Gravity = Gravity.CenterHorizontal; this.listFrameLayout[1].Gravity = Gravity.CenterHorizontal; this.listFrameLayout[2].Gravity = Gravity.CenterHorizontal; //this.listFrameLayout[3].Gravity = Gravity.CenterHorizontal; } /// /// 质量等级 /// private string QuailityType() { var tempAirQuality = aqSensor.AirQuality(aqSensor); string curQuality = string.Empty; if (tempAirQuality == 1) { curQuality = Language.StringByID(R.MyInternationalizationString.ExcellentAirQuality); } else if (tempAirQuality == 2) { curQuality = Language.StringByID(R.MyInternationalizationString.GoodAirQuality); } else if (tempAirQuality == 3) { curQuality = Language.StringByID(R.MyInternationalizationString.Pollution); } else { curQuality = ""; } //设置状态文字 return curQuality; } #endregion } }