wxr
2021-07-01 43b0d5870d528f23ecd6aeceb6cfd4325188b46f
HDL_ON/Entity/Function/FloorHeating.cs
@@ -1,157 +1,147 @@
using System;
using System.Collections.Generic;
using Shared;
namespace HDL_ON.Entity
{
    public class FloorHeating : Function
    public class FloorHeating
    {
        /*
        *地热:trait: [switch, mode, set_temp, lock]
        *属性 描述
        *switch   on/off
        *mode    day, night,away, vacation, timer
        *set_temp value
        *lock   boolean(Lock锁定控制)
        *set_ point   up,down,value
        */
        public FloorHeating()
        /// <summary>
        /// 获取温度单位bus标识
        /// </summary>
        /// <param name="function"></param>
        /// <returns></returns>
        public int GetTempUintIndex(Function function)
        {
            var tt = function.GetAttrState(FunctionAttributeKey.TempType);
            if (tt == "°F")
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
        /// <summary>
        /// 当前温度模式
        /// 0:摄氏度
        /// 1:华氏度
        /// 根据bus标识设置温度单位
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public int curTempType = 0;
        /// <param name="function"></param>
        /// <returns></returns>
        public void SetTempUint(Function function, int index)
        {
            if (index == 0)
            {
                function.SetAttrState(FunctionAttributeKey.TempType, "°C");
            }
            else
            {
                function.SetAttrState(FunctionAttributeKey.TempType, "°F");
            }
        }
        /// <summary>
        /// 工作模式
        /// 获取bus协议工作模式index
        /// 0:地热模式;1:地冷模式;
        /// 2:地热功率模式;3:地冷功率模式;
        /// </summary>
        public int workMode = 0;
        /// <summary>
        /// 当前温度模式字符
        /// </summary>
        public string tempUnitString
        public int GetWorkModeIndex(Function function)
        {
            get
            {
                if (curTempType == 0)
                {
                    return "°C";
                }
                else
                {
                    return "°F";
                }
            }
        }
        FunctionAttributes _trait_mode;
        /// <summary>
        /// 模式属性
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public FunctionAttributes trait_mode
        {
            get
            {
                if (_trait_mode == null)
                {
                    _trait_mode = attributes.Find((obj) => obj.key == "mode");
                    //找不到属性需要声明一个,防止报错闪退
                    if (_trait_mode == null)
                    {
                        _trait_mode = new FunctionAttributes()
                        {
                            key = "mode",
                            value = new List<string> { "day", "night", "away", "normal", "timer" },
                            max = 4,
                            min = 0,
                        };
                    }
                    if(_trait_mode.curValue.ToString() == "{}")
                    {
                        _trait_mode.curValue = "day";
                    }
                }
                return _trait_mode;
            }
            var attr = function.GetAttrState(FunctionAttributeKey.WorkMode);
            if (attr == "cool")
                return 1;
            return 0;
        }
        /// <summary>
        /// 工作模式对应的工作温度
        /// 设置bus协议工作模式index
        /// 0:地热模式;1:地冷模式;
        /// 2:地热功率模式;3:地冷功率模式;
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public Dictionary<string, byte> modeTemp = new Dictionary<string, byte>();
        public void SetWorkModeIndex(Function function, int index)
        {
            if (index == 1)
                function.SetAttrState(FunctionAttributeKey.WorkMode, "cool");
            else
                function.SetAttrState(FunctionAttributeKey.WorkMode, "heat");
        }
        /// <summary>
        /// 当前模式索引
        /// bus控制命令使用
        /// 获取温度模式字符
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public byte curModeIndex
        public string GetTempUnitString(Function function)
        {
            get
            var tt = function.GetAttrState(FunctionAttributeKey.TempType);
            if (tt == "0")
            {
                try
                {
                    byte index = 0;
                    switch (trait_mode.curValue.ToString())
                    {
                        case "day":
                            index = 2;
                            break;
                        case "night":
                            index = 3;
                            break;
                        case "away":
                            index = 4;
                            break;
                        case "normal":
                            index = 1;
                            break;
                        case "timer":
                            index = 5;
                            break;
                        default:
                            index = 0;
                            break;
                    }
                    return index;
                }
                catch (Exception ex)
                {
                    MainPage.Log($"get curModeIndex error : {ex.Message}");
                    return 0;
                }
                return "°C";
            }
            set
            else
            {
                switch (value)
                {
                    case 5:
                        trait_mode.curValue = "timer";
                        break;
                    case 1:
                        trait_mode.curValue = "normal";
                        break;
                    case 2:
                        trait_mode.curValue = "day";
                        break;
                    case 3:
                        trait_mode.curValue = "night";
                        break;
                    case 4:
                        trait_mode.curValue = "away";
                        break;
                    default:
                        trait_mode.curValue = "cool";
                        break;
                return tt;
            }
        }
                }
        /// <summary>
        /// 获取bus协议模式索引
        /// </summary>
        public byte GetModeIndex(Function function)
        {
            byte index = 0;
            var mode = function.GetAttrState(FunctionAttributeKey.Mode);
            switch (mode)
            {
                case "day":
                    index = 2;
                    break;
                case "night":
                    index = 3;
                    break;
                case "away":
                    index = 4;
                    break;
                case "normal":
                    index = 1;
                    break;
                case "timer":
                    index = 5;
                    break;
                default:
                    index = 0;
                    break;
            }
            return index;
        }
        /// <summary>
        /// 设置bus协议模式索引
        /// </summary>
        public void SetModeIndex(int value, Function function)
        {
            string mode = "timer";
            switch (value)
            {
                case 5:
                    mode = "timer";
                    break;
                case 1:
                    mode = "normal";
                    break;
                case 2:
                    mode = "day";
                    break;
                case 3:
                    mode = "night";
                    break;
                case 4:
                    mode = "away";
                    break;
                default:
                    mode = "cool";
                    break;
            }
            function.SetAttrState(FunctionAttributeKey.Mode, mode);
        }
        /// <summary>
@@ -160,120 +150,89 @@
        /// </summary>
        public byte timeFlag = 0;
        FunctionAttributes _trait_IndoorTemp;
        /// <summary>
        /// 室内温度
        /// 获取模式的icon路径
        /// <param name="lightingIcon">获取的图标类型,默认是点亮</param>
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public FunctionAttributes trait_IndoorTemp
        public string GetModeIconPath(string modeValue, bool lighting = true)
        {
            get
            var imagePath = "FunctionIcon/AC/HeatingIcon.png";
            //var key = function.GetAttrState(FunctionAttributeKey.Mode);
            if (lighting)
            {
                if (_trait_IndoorTemp == null)
                switch (modeValue)
                {
                    _trait_IndoorTemp = attributes.Find((obj) => obj.key == FunctionAttributeKey.IndoorTemp);
                    //找不到属性需要声明一个,防止报错闪退
                    if (_trait_IndoorTemp == null)
                    {
                        _trait_IndoorTemp = new FunctionAttributes()
                        {
                            key = FunctionAttributeKey.IndoorTemp,
                            value = new List<string> { },
                            max = 30,
                            min = 0,
                        };
                        if (_trait_IndoorTemp.curValue.ToString() == "{}")
                            _trait_IndoorTemp.curValue = 0;
                    }
                    case "day":
                        imagePath = "FunctionIcon/AC/HeatingIcon.png";
                        break;
                    case "night":
                        imagePath = "FunctionIcon/FloorHeating/NightIcon.png";
                        break;
                    case "away":
                        imagePath = "FunctionIcon/FloorHeating/AwayIcon.png";
                        break;
                    case "timer":
                        imagePath = "FunctionIcon/AC/AutoIcon.png";
                        break;
                    case "normal":
                        imagePath = "FunctionIcon/FloorHeating/OrdinaryIcon.png";
                        break;
                    default:
                        imagePath = "FunctionIcon/AC/HeatingIcon.png";
                        break;
                }
                //if (_trait_IndoorTemp.curValue.ToString().Length > 3)
                {
                    var vv = Convert.ToDouble(_trait_IndoorTemp.curValue);
                    _trait_IndoorTemp.curValue = Convert.ToInt32(vv);
                }
                return _trait_IndoorTemp;
            }
            else
            {
                switch (modeValue)
                {
                    case "day":
                        imagePath = "FunctionIcon/AC/HeatingIconGray.png";
                        break;
                    case "night":
                        imagePath = "FunctionIcon/FloorHeating/NightIconGray.png";
                        break;
                    case "away":
                        imagePath = "FunctionIcon/FloorHeating/AwayIconGray.png";
                        break;
                    case "timer":
                        imagePath = "FunctionIcon/AC/AutoIconGray.png";
                        break;
                    case "normal":
                        imagePath = "FunctionIcon/FloorHeating/OrdinaryIconGray.png";
                        break;
                }
            }
            return imagePath;
        }
        FunctionAttributes _trait_temp;
        /// <summary>
        /// 当前温度
        /// </summary>/// <summary>
        /// 当前空调温度
        /// 获取模式属性文本
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public FunctionAttributes trait_temp
        /// <returns></returns>
        public string GetModeAttrText(string value)
        {
            get
            string text = "";
            switch (value)
            {
                if (_trait_temp == null)
                {
                    _trait_temp = attributes.Find((obj) => obj.key == "set_temp");
                    //找不到属性需要声明一个,防止报错闪退
                    if (_trait_temp == null)
                    {
                        _trait_temp = new FunctionAttributes()
                        {
                            key = "set_temp",
                            value = new List<string> { },
                            max = 30,
                            min = 5,
                        };
                    }
                    if(_trait_temp.curValue.ToString() == "{}")
                        _trait_temp.curValue = 16;
                }
                //if (_trait_temp.curValue.ToString().Length > 3)
                {
                    double vv = 0;
                    Double.TryParse(_trait_temp.curValue.ToString(),out vv);
                    _trait_temp.curValue = Convert.ToInt32(vv);
                }
                return _trait_temp;
                case "day":
                    text = Language.StringByID(StringId.Day);
                    break;
                case "night":
                    text = Language.StringByID(StringId.Night);
                    break;
                case "away":
                    text = Language.StringByID(StringId.Away);
                    break;
                case "timer":
                    text = Language.StringByID(StringId.Auto);
                    break;
                case "normal":
                    text = Language.StringByID(StringId.Normal);
                    break;
            }
            return text;
        }
        /// <summary>
        /// 当前模式的icon路径
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string curModeImage
        {
            get
            {
                try
                {
                    var imagePath = "FunctionIcon/AC/HeatingIcon.png";
                    switch (trait_mode.curValue)
                    {
                        case "day":
                            imagePath = "FunctionIcon/AC/HeatingIcon.png";
                            break;
                        case "night":
                            imagePath = "FunctionIcon/FloorHeating/NightIcon.png";
                            break;
                        case "away":
                            imagePath = "FunctionIcon/FloorHeating/AwayIcon.png";
                            break;
                        case "timer":
                            imagePath = "FunctionIcon/AC/AutoIcon.png";
                            break;
                        case "normal":
                            imagePath = "FunctionIcon/FloorHeating/OrdinaryIcon.png";
                            break;
                        default:
                            imagePath = "FunctionIcon/AC/HeatingIcon.png";
                            break;
                    }
                    return imagePath;
                }
                catch (Exception ex)
                {
                    MainPage.Log($"ac ge curModeImage error : {ex.Message}");
                    return "FunctionIcon/AC/CoolIcon.png";
                }
            }
        }
    }
}