using System;
using System.Collections.Generic;
namespace HDL_ON.Entity
{
public class Sensor :Function
{
public Sensor()
{
}
[Newtonsoft.Json.JsonIgnore]
public int functionTypeNameId
{
get
{
int nameId = 0;
switch (functionType)
{
case FunctionType.PM25:
nameId = StringId.PM25;
break;
case FunctionType.CO2:
nameId = StringId.CO2;
break;
case FunctionType.Temp:
nameId = StringId.Temp;
break;
case FunctionType.TVOC:
nameId = StringId.TVOC;
break;
case FunctionType.Humidity:
nameId = StringId.Humidity;
break;
}
return nameId;
}
}
[Newtonsoft.Json.JsonIgnore]
public Trait trait_values;
///
/// 值
///
[Newtonsoft.Json.JsonIgnore]
public double values
{
get
{
if (trait_values == null)
{
trait_values = function.Find((obj) => obj.name == "values");
//找不到属性需要声明一个,防止报错闪退
if (trait_values == null)
{
trait_values = new Trait()
{
name = "values",
value_key = new List { "29" },
max = 10000,
min = 0,
};
trait_values.value = trait_values.min;
}
#if DEBUG
if (Convert.ToInt32(trait_values.value) == 0)
{
double level = 1;
Random random = new Random();
switch (functionType)
{
case FunctionType.PM25:
level = Math.Round(random.NextDouble() * 130, 0);
break;
case FunctionType.CO2:
level = Math.Round(random.NextDouble() * 6000, 0);
break;
case FunctionType.Temp:
level = Math.Round(random.NextDouble() * 40, 0);
break;
case FunctionType.TVOC:
level = Math.Round(random.NextDouble() * 10, 1);
break;
case FunctionType.Humidity:
level = Math.Round(random.NextDouble() * 100, 0);
break;
}
trait_values.value = level;
}
#endif
}
return Convert.ToDouble(trait_values.value);
}
set
{
try
{
if (trait_values == null)
{
trait_values = function.Find((obj) => obj.name == "values");
//找不到属性需要声明一个,防止报错闪退
if (trait_values == null)
{
trait_values = new Trait()
{
name = "values",
value_key = new List { "up" },
max = 100,
min = 0,
};
}
trait_values.value = trait_values.min;
}
trait_values.value = value;
MainPage.Log($"values 数据刷新{value}.");
}
catch
{
MainPage.Log("values 数据刷新失败.");
}
}
}
List _intervalValue;
///
/// 每个等级对区间值
///
[Newtonsoft.Json.JsonIgnore]
public List intervalValue
{
get
{
if (_intervalValue == null)
{
_intervalValue = new List();
switch (functionType)
{
case FunctionType.PM25:
_intervalValue.Add("0 ~ 35");
_intervalValue.Add("36 ~ 75");
_intervalValue.Add("76 ~ 115");
_intervalValue.Add("115 ~");
break;
case FunctionType.CO2:
_intervalValue.Add("0 ~ 1000");
_intervalValue.Add("1001 ~ 2000");
_intervalValue.Add("2001 ~ 5000");
_intervalValue.Add("5001 ~");
break;
case FunctionType.Temp:
_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 FunctionType.TVOC:
_intervalValue.Add("0 ~ 0.6");
_intervalValue.Add("0.61 ~ 2");
_intervalValue.Add("2.01 ~ 5");
_intervalValue.Add("5 ~");
break;
case FunctionType.Humidity:
_intervalValue.Add("70 ~");
_intervalValue.Add("71 ~ 40");
_intervalValue.Add("0 ~ 39");
break;
}
}
return _intervalValue;
}
}
List _levelColorList;
///
/// 每个等级的颜色值
///
[Newtonsoft.Json.JsonIgnore]
public List levelColorList
{
get
{
try
{
if (_levelColorList == null)
{
_levelColorList = new List();
switch (functionType)
{
case FunctionType.PM25:
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFFD154);
_levelColorList.Add(0xFFFF9D54);
_levelColorList.Add(0xFFFF3D3D);
break;
case FunctionType.CO2:
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFFD154);
_levelColorList.Add(0xFFFF9D54);
_levelColorList.Add(0xFFFF3D3D);
break;
case FunctionType.Temp:
_levelColorList.Add(0xFF2172FF);
_levelColorList.Add(0xCC4484F4);
_levelColorList.Add(0x7F4484F4);
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFFD154);
_levelColorList.Add(0xFFFF9D54);
_levelColorList.Add(0xFFFF3D3D);
break;
case FunctionType.TVOC:
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFFD154);
_levelColorList.Add(0xFFFF9D54);
_levelColorList.Add(0xFFFF3D3D);
break;
case FunctionType.Humidity:
_levelColorList.Add(0xFF2172FF);
_levelColorList.Add(0xFFADE764);
_levelColorList.Add(0xFFFF3D3D);
break;
}
}
}catch(Exception ex)
{
MainPage.Log($"sensor error 1 : {ex.Message}");
}
return _levelColorList;
}
}
List _levelTextList;
///
/// 每个等级的名称
///
[Newtonsoft.Json.JsonIgnore]
public List levelTextList
{
get
{
if (_levelTextList == null)
{
_levelTextList = new List();
switch (functionType)
{
case FunctionType.PM25:
_levelTextList.Add(StringId.Great);
_levelTextList.Add(StringId.Good);
_levelTextList.Add(StringId.MildPollution);
_levelTextList.Add(StringId.HeavyPollution);
break;
case FunctionType.CO2:
_levelTextList.Add(StringId.SensorReferenceTipCO2Level1);
_levelTextList.Add(StringId.SensorReferenceTipCO2Level2);
_levelTextList.Add(StringId.SensorReferenceTipCO2Level3);
_levelTextList.Add(StringId.SensorReferenceTipCO2Level4);
break;
case FunctionType.Temp:
_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 FunctionType.TVOC:
_levelTextList.Add(StringId.SensorReferenceTVOCTipLevel1);
_levelTextList.Add(StringId.SensorReferenceTVOCTipLevel2);
_levelTextList.Add(StringId.SensorReferenceTVOCTipLevel3);
_levelTextList.Add(StringId.SensorReferenceTVOCTipLevel4);
break;
case FunctionType.Humidity:
_levelTextList.Add(StringId.SensorReferenceHumidityTipLevel1);
_levelTextList.Add(StringId.SensorReferenceHumidityTipLevel2);
_levelTextList.Add(StringId.SensorReferenceHumidityTipLevel3);
break;
}
}
return _levelTextList;
}
}
///
/// 当前等级
///
[Newtonsoft.Json.JsonIgnore]
public int curLevel
{
get
{
int level = 1;
switch (functionType)
{
case FunctionType.PM25:
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 FunctionType.CO2:
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 FunctionType.Temp:
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 FunctionType.TVOC:
if (values < 0.6)
level = 1;
else if (values < 2)
level = 2;
else if (values < 5)
level = 3;
else if (values > 5)
level = 4;
break;
case FunctionType.Humidity:
if (values > 70)
level = 1;
else if (values > 40)
level = 2;
else if (values < 40)
level = 3;
break;
}
return level;
}
}
}
}