using System;
using System.Collections.Generic;
namespace HDL_ON.Entity
{
public class Sensor
{
///
/// 获取名称文本ID
///
///
///
public int GetFunctionTypeNameId(string spk)
{
int nameId = 0;
switch (spk)
{
case SPK.SensorPm25:
nameId = StringId.PM25;
break;
case SPK.SensorCO2:
nameId = StringId.CO2;
break;
case SPK.SensorTemperature:
nameId = StringId.Temp;
break;
case SPK.SensorTVOC:
nameId = StringId.TVOC;
break;
case SPK.SensorHumidity:
nameId = StringId.Humidity;
break;
}
return nameId;
}
///
///
///
public double GetValues(Function function)
{
FunctionAttributes attr = function.GetAttribute(FunctionAttributeKey.Value);
if (attr == null)
{
switch (function.spk)
{
case SPK.SensorCO2:
attr = function.GetAttribute(FunctionAttributeKey.Co2);
break;
case SPK.SensorTemperature:
attr = function.GetAttribute(FunctionAttributeKey.Temperature);
break;
case SPK.SensorTVOC:
attr = function.GetAttribute(FunctionAttributeKey.Tvoc);
break;
case SPK.SensorPm25:
attr = function.GetAttribute(FunctionAttributeKey.Pm25);
break;
case SPK.SensorHcho:
attr = function.GetAttribute(FunctionAttributeKey.Hcho);
break;
case SPK.SensorHumidity:
attr = function.GetAttribute(FunctionAttributeKey.Humidity);
break;
}
}
double value = 0.0;
double.TryParse(attr.state, out value);
return Convert.ToDouble(value);
}
///
///
///
///
///
public void SetValues(int value, Function function)
{
function.SetAttrState(FunctionAttributeKey.Value, value);
}
List _intervalValue = new List();
public void SetIntervalValue(List intervalValue)
{
_intervalValue = intervalValue;
}
///
/// 每个等级对区间值
///
public List GetIntervalValue(string spk)
{
if(_intervalValue.Count != 0)
{
return _intervalValue;
}
_intervalValue = new List();
switch (spk)
{
case SPK.SensorPm25:
_intervalValue.Add("0 ~ 35");
_intervalValue.Add("36 ~ 75");
_intervalValue.Add("76 ~ 115");
_intervalValue.Add("115 ~");
break;
case SPK.SensorCO2:
_intervalValue.Add("0 ~ 1000");
_intervalValue.Add("1001 ~ 2000");
_intervalValue.Add("2001 ~ 5000");
_intervalValue.Add("5001 ~");
break;
case SPK.SensorTemperature:
_intervalValue.Add("~ 18°C");
_intervalValue.Add("18 ~ 20°C");
_intervalValue.Add("20 ~ 25°C");
_intervalValue.Add("25 ~ 27°C");
_intervalValue.Add("27 ~ 30°C");
_intervalValue.Add("30 ~ 33°C");
_intervalValue.Add("33°C ~");
break;
case SPK.SensorTVOC:
_intervalValue.Add("0 ~ 600");
_intervalValue.Add("601 ~ 2000");
_intervalValue.Add("2001 ~ 5000");
_intervalValue.Add("5001 ~");
break;
case SPK.SensorHumidity:
_intervalValue.Add("70 ~");
_intervalValue.Add("71 ~ 40");
_intervalValue.Add("0 ~ 39");
break;
case SPK.SensorHcho:
_intervalValue.Add("~ 0.08");
_intervalValue.Add("0.08 ~ 0.1");
_intervalValue.Add("0.1 ~ ");
break;
}
return _intervalValue;
}
public string Unit(Function function)
{
string unit = "";
if (function.attrKeyConfigs.Count > 0)
{
foreach (var attrKey in function.attrKeyConfigs)
{
if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
{
if (!string.IsNullOrEmpty(attrKey.unit))
return attrKey.unit;
}
}
}
switch (function.spk)
{
case SPK.SensorPm25:
unit = "ug/m³";
break;
case SPK.SensorTemperature:
unit = "°C";
break;
case SPK.SensorTVOC:
unit = "PPB";
break;
case SPK.SensorCO2:
unit = "PPM";
break;
case SPK.SensorHumidity:
unit = "%";
break;
case SPK.SensorHcho:
unit = "mg/m3";
break;
}
return unit;
}
///
/// 每个等级的颜色值
///
public List GetLevelColorList(string spk)
{
var _levelColorList = new List();
switch (spk)
{
case SPK.SensorPm25:
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFFD154);
_levelColorList.Add(0xFFFF9D54);
_levelColorList.Add(0xFFFF3D3D);
break;
case SPK.SensorCO2:
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFFD154);
_levelColorList.Add(0xFFFF9D54);
_levelColorList.Add(0xFFFF3D3D);
break;
case SPK.SensorTemperature:
_levelColorList.Add(0xFF2172FF);
_levelColorList.Add(0xCC4484F4);
_levelColorList.Add(0x7F4484F4);
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFFD154);
_levelColorList.Add(0xFFFF9D54);
_levelColorList.Add(0xFFFF3D3D);
break;
case SPK.SensorTVOC:
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFFD154);
_levelColorList.Add(0xFFFF9D54);
_levelColorList.Add(0xFFFF3D3D);
break;
case SPK.SensorHumidity:
_levelColorList.Add(0xFF2172FF);
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFF3D3D);
break;
case SPK.SensorHcho:
_levelColorList.Add(0xFF2172FF);
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFF3D3D);
break;
default:
_levelColorList.Add(0x00000000);
_levelColorList.Add(0x00000000);
_levelColorList.Add(0x00000000);
break;
}
return _levelColorList;
}
///
/// 每个等级的名称
///
public List GetLevelTextList(string spk)
{
var _levelTextList = new List();
switch (spk)
{
case SPK.SensorPm25:
_levelTextList.Add(StringId.Great);
_levelTextList.Add(StringId.Good);
_levelTextList.Add(StringId.MildPollution);
_levelTextList.Add(StringId.HeavyPollution);
break;
case SPK.SensorCO2:
_levelTextList.Add(StringId.SensorReferenceTipCO2Level1);
_levelTextList.Add(StringId.SensorReferenceTipCO2Level2);
_levelTextList.Add(StringId.SensorReferenceTipCO2Level3);
_levelTextList.Add(StringId.SensorReferenceTipCO2Level4);
break;
case SPK.SensorTemperature:
_levelTextList.Add(StringId.ExtremelyCold);
_levelTextList.Add(StringId.Cold);
_levelTextList.Add(StringId.SlightlyCold);
_levelTextList.Add(StringId.Comfortable);
_levelTextList.Add(StringId.TepidFever);
_levelTextList.Add(StringId.Heat_SensorTip);
_levelTextList.Add(StringId.ExtremeHeat);
break;
case SPK.SensorTVOC:
_levelTextList.Add(StringId.SensorReferenceTVOCTipLevel1);
_levelTextList.Add(StringId.SensorReferenceTVOCTipLevel2);
_levelTextList.Add(StringId.SensorReferenceTVOCTipLevel3);
_levelTextList.Add(StringId.SensorReferenceTVOCTipLevel4);
break;
case SPK.SensorHumidity:
_levelTextList.Add(StringId.SensorReferenceHumidityTipLevel1);
_levelTextList.Add(StringId.SensorReferenceHumidityTipLevel2);
_levelTextList.Add(StringId.SensorReferenceHumidityTipLevel3);
break;
case SPK.SensorHcho:
_levelTextList.Add(StringId.Class_I_BuildingStandard);
_levelTextList.Add(StringId.SecondaryBuildingStandard);
_levelTextList.Add(StringId.ExceedingTheStandard);
break;
default:
_levelTextList.Add(99999999);
_levelTextList.Add(99999999);
_levelTextList.Add(99999999);
break;
}
return _levelTextList;
}
///
/// 获取
///
///
///
public uint GetCurColor(Function function)
{
var spk = function.spk;
var values = GetValues(function);
uint level = 0x00000000;
if (function.attrKeyConfigs.Count > 0)
{
foreach (var attrKey in function.attrKeyConfigs)
{
if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
{
foreach (var info in attrKey.configs)
{
if ((Convert.ToInt32(info.start) >= values) && (Convert.ToInt32(info.end) < values))
{
return Convert.ToUInt32(info.color, 16);
}
}
}
}
}
return level;
}
///
/// 获取文本
///
///
///
public string GetCurText(Function function)
{
var spk = function.spk;
var values = GetValues(function);
var level = "";
if (function.attrKeyConfigs.Count > 0)
{
foreach (var attrKey in function.attrKeyConfigs)
{
if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
{
foreach (var info in attrKey.configs)
{
if ((Convert.ToInt32(info.start) >= values) && (Convert.ToInt32(info.end) < values))
{
return info.desc;
}
}
}
}
}
return level;
}
///
/// 当前等级
///
public int GetCurLevel(Function function)
{
var spk = function.spk;
var values = GetValues(function);
int level = 1;
if (function.attrKeyConfigs.Count > 0)
{
foreach (var attrKey in function.attrKeyConfigs)
{
if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
{
level = 1;
if(attrKey.configs.Count == 0)
{
break;
}
foreach (var info in attrKey.configs)
{
if ((Convert.ToDouble(info.start) < values) && (Convert.ToDouble(info.end) >= values))
{
return level;
}
level++;
}
}
}
return 1;
}
switch (spk)
{
case SPK.SensorPm25:
if (values < 35)
level = 1;
else if (values < 75)
level = 2;
else if (values < 115)
level = 3;
else if (values > 115)
level = 4;
break;
case SPK.SensorCO2:
if (values < 1000)
level = 1;
else if (values < 2000)
level = 2;
else if (values < 5000)
level = 3;
else if (values >= 5000)
level = 4;
break;
case SPK.SensorTemperature:
if (values < 18)
level = 1;
else if (values < 20)
level = 2;
else if (values < 25)
level = 3;
else if (values < 27)
level = 4;
else if (values < 30)
level = 5;
else if (values < 33)
level = 6;
else if (values > 33)
level = 7;
break;
case SPK.SensorTVOC:
if (values < 600)
level = 1;
else if (values < 2000)
level = 2;
else if (values < 5000)
level = 3;
else if (values >= 5000)
level = 4;
break;
case SPK.SensorHumidity:
if (values > 70)
level = 1;
else if (values > 40)
level = 2;
else if (values < 40)
level = 3;
break;
case SPK.SensorHcho:
if (values <= 0.08)
level = 1;
else if (values <= 0.1)
level = 2;
else
level = 3;
break;
}
return level;
}
///
/// 当前等级
///
public int GetCurLevel(string spk,double values)
{
int level = 1;
switch (spk)
{
case SPK.SensorPm25:
if (values < 35)
level = 1;
else if (values < 75)
level = 2;
else if (values < 115)
level = 3;
else if (values > 115)
level = 4;
break;
case SPK.SensorCO2:
if (values < 1000)
level = 1;
else if (values < 2000)
level = 2;
else if (values < 5000)
level = 3;
else if (values >= 5000)
level = 4;
break;
case SPK.SensorTemperature:
if (values < 18)
level = 1;
else if (values < 20)
level = 2;
else if (values < 25)
level = 3;
else if (values < 27)
level = 4;
else if (values < 30)
level = 5;
else if (values < 33)
level = 6;
else if (values > 33)
level = 7;
break;
case SPK.SensorTVOC:
if (values < 600)
level = 1;
else if (values < 2000)
level = 2;
else if (values < 5000)
level = 3;
else if (values >= 5000)
level = 4;
break;
case SPK.SensorHumidity:
if (values > 70)
level = 1;
else if (values > 40)
level = 2;
else if (values < 40)
level = 3;
break;
case SPK.SensorHcho:
if (values <= 0.08)
level = 1;
else if (values <= 0.1)
level = 2;
else
level = 3;
break;
}
return level;
}
}
}