wxr
2021-07-01 43b0d5870d528f23ecd6aeceb6cfd4325188b46f
HDL_ON/Entity/Function/Sensor.cs
@@ -3,337 +3,253 @@
namespace HDL_ON.Entity
{
    public class Sensor :Function
    public class Sensor
    {
        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 FunctionAttributes trait_values;
        /// <summary>
        /// 值
        /// 获取名称文本ID
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public double values
        /// <param name="spk"></param>
        /// <returns></returns>
        public int GetFunctionTypeNameId(string spk)
        {
            get
            int nameId = 0;
            switch (spk)
            {
                if (trait_values == null)
                {
                    trait_values = attributes.Find((obj) => obj.key == FunctionAttributeKey.Value);
                    //找不到属性需要声明一个,防止报错闪退
                    if (trait_values == null)
                    {
                        trait_values = new FunctionAttributes()
                        {
                            key = FunctionAttributeKey.Value,
                            value = new List<string> { "29" },
                            max = 10000,
                            min = 0,
                        };
                        trait_values.curValue = trait_values.min;
                    }
                }
                if (trait_values.curValue.ToString() == "{}")
                    trait_values.curValue = 0;
                if(spk == SPK.SensorTVOC)
                {
                    return Convert.ToDouble(trait_values.curValue.ToString()) / 100000;
                }
                return Convert.ToDouble(trait_values.curValue);
                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;
            }
            set
            {
                try
                 {
                    if (trait_values == null)
                    {
                        trait_values = attributes.Find((obj) => obj.key == FunctionAttributeKey.Value);
                        //找不到属性需要声明一个,防止报错闪退
                        if (trait_values == null)
                        {
                            trait_values = new FunctionAttributes()
                            {
                                key = FunctionAttributeKey.Value,
                                value = new List<string> { "up" },
                                max = 100,
                                min = 0,
                            };
                        }
                        trait_values.curValue = trait_values.min;
                    }
                    trait_values.curValue = value;
                    MainPage.Log($"values 数据刷新{value}.");
                }
                catch
                {
                    MainPage.Log("values 数据刷新失败.");
                }
            }
            return nameId;
        }
        /// <summary>
        ///
        /// </summary>
        public double GetValues(Function function)
        {
            var value = function.GetAttrState(FunctionAttributeKey.Value);
            return Convert.ToDouble(value);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="value"></param>
        /// <param name="function"></param>
        public void SetValues(int value, Function function)
        {
            function.SetAttrState(FunctionAttributeKey.Value, value);
        }
        List<string> _intervalValue;
        /// <summary>
        /// 每个等级对区间值
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public List<string> intervalValue
        public List<string> GetIntervalValue(string spk)
        {
            get
            var _intervalValue = new List<string>();
            switch (spk)
            {
                if (_intervalValue == null)
                {
                    _intervalValue = new List<string>();
                    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;
                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 ~ 0.6");
                    _intervalValue.Add("0.61 ~ 2");
                    _intervalValue.Add("2.01 ~ 5");
                    _intervalValue.Add("5 ~");
                    break;
                case SPK.SensorHumidity:
                    _intervalValue.Add("70 ~");
                    _intervalValue.Add("71 ~ 40");
                    _intervalValue.Add("0 ~ 39");
                    break;
            }
            return _intervalValue;
        }
        List<uint> _levelColorList;
        /// <summary>
        /// 每个等级的颜色值
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public List<uint> levelColorList
        public List<uint> GetLevelColorList(string spk)
        {
            get
            var _levelColorList = new List<uint>();
            switch (spk)
            {
                try
                {
                if (_levelColorList == null)
                {
                    _levelColorList = new List<uint>();
                    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);
                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 FunctionType.Humidity:
                            _levelColorList.Add(0xFF2172FF);
                            _levelColorList.Add(0xFFADE764);
                            _levelColorList.Add(0xFFFF3D3D);
                            break;
                    }
                }
                }catch(Exception ex)
                {
                    MainPage.Log($"sensor error 1 : {ex.Message}");
                }
                return _levelColorList;
                    break;
                case SPK.SensorHumidity:
                    _levelColorList.Add(0xFF2172FF);
                    _levelColorList.Add(0xFFADE764);
                    _levelColorList.Add(0xFFFF3D3D);
                    break;
            }
            return _levelColorList;
        }
        List<int> _levelTextList;
        /// <summary>
        /// 每个等级的名称
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public List<int> levelTextList
        public List<int> GetLevelTextList(string spk)
        {
            get
            var _levelTextList = new List<int>();
            switch (spk)
            {
                if (_levelTextList == null)
                {
                    _levelTextList = new List<int>();
                    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;
                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;
            }
            return _levelTextList;
        }
        /// <summary>
        /// 当前等级
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public int curLevel
        public int GetCurLevel(Function function)
        {
            get
            var spk = function.spk;
            var values = GetValues(function);
            int level = 1;
            switch (spk)
            {
                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;
                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 < 0.6)
                        level = 1;
                    else if (values < 2)
                        level = 2;
                    else if (values < 5)
                        level = 3;
                    else if (values > 5)
                        level = 4;
                    break;
                case SPK.SensorHumidity:
                    if (values > 70)
                        level = 1;
                    else if (values > 40)
                        level = 2;
                    else if (values < 40)
                        level = 3;
                    break;
            }
            return level;
        }
    }
}