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
}
}