xm
2021-12-01 6d73bf6e816570291865674bef8bce8972e4de3f
HDL_ON/Entity/Function/AC.cs
@@ -1,45 +1,58 @@
using System;
using System.Collections.Generic;
using Shared;
namespace HDL_ON.Entity
{
    public class AC : Function
    public class AC
    {
        /*
         * 空调:trait: [switch, mode, fan, set_temp, swing, lock]
         * 属性   描述
         * on_off   on/off
         * mode   mode: auto, cool, heat, dry, fan
         * fan   high, medium, low, auto
         * set_temp   up,down,value
         * swing   up/down/left/right
         * lock   boolean (Lock锁定控制)
         */
        public AC()
        {
        }
        /// <summary>
        /// 当前温度模式
        /// 0:摄氏度
        /// 1:华氏度
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public int curTempType = 0;
        /// <summary>
        /// 当前温度模式字符
        /// </summary>
        public string tempUnitString
        public string GetTempUnitString(Function function)
        {
            get
            var tt = function.GetAttrState(FunctionAttributeKey.TempType);
            if (tt == "0")
            {
                if (curTempType == 0)
                {
                    return "°C";
                }
                else
                {
                    return "°F";
                }
                return "°C";
            }
            else
            {
                return tt;
            }
        }
        /// <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>
        /// 根据bus标识设置温度单位
        /// </summary>
        /// <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");
            }
        }
@@ -47,380 +60,341 @@
        /// 当前模式索引
        /// bus控制命令使用
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public byte curModeIndex
        public byte GetModeIndex(Function function)
        {
            get
            var value = function.GetAttrState(FunctionAttributeKey.Mode);
            byte index = 0;
            switch (value)
            {
                try
                {
                    byte index = 0;
                    switch (trait_mode.curValue.ToString())
                    {
                        case "auto":
                            index = 3;
                            break;
                        case "cool":
                            index = 0;
                            break;
                        case "heat":
                            index = 1;
                            break;
                        case "dry":
                            index = 4;
                            break;
                        case "fan":
                            index = 2;
                            break;
                        default:
                            index = 0;
                            break;
                    }
                    return index;
                }
                catch (Exception ex)
                {
                    MainPage.Log($"get curModeIndex error : {ex.Message}");
                    return 0;
                }
                case "auto":
                    index = 3;
                    break;
                case "cool":
                    index = 0;
                    break;
                case "heat":
                    index = 1;
                    break;
                case "dry":
                    index = 4;
                    break;
                case "fan":
                    index = 2;
                    break;
                default:
                    index = 0;
                    break;
            }
            set
            {
                switch (value)
                {
                    case 0:
                        trait_mode.curValue = "cool";
                        break;
                    case 1:
                        trait_mode.curValue = "heat";
                        break;
                    case 2:
                        trait_mode.curValue = "fan";
                        break;
                    case 3:
                        trait_mode.curValue = "auto";
                        break;
                    case 4:
                        trait_mode.curValue = "dry";
                        break;
                    default:
                        trait_mode.curValue = "cool";
                        break;
                }
            }
            return index;
        }
        /// <summary>
        /// 设置bus协议标记设置a协议数据
        /// </summary>
        public void SetMode(int index , Function function)
        {
            string value = "auto";
            switch (index)
            {
                case 3:
                    value = "auto";
                    break;
                case 0:
                    value = "cool";
                    break;
                case 1:
                    value = "heat";
                    break;
                case 4:
                    value = "dry";
                    break;
                case 2:
                    value = "fan";
                    break;
            }
            function.SetAttrState(FunctionAttributeKey.Mode, value);
        }
        /// <summary>
        /// 当前风速索引
        /// bus控制命令使用
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public byte curFanIndex
        public byte GetFanIndex(Function function)
        {
            get
            var value = function.GetAttrState(FunctionAttributeKey.FanSpeed);
            byte index = 0;
            switch (value)
            {
                try
                {
                    byte index = 0;
                    switch (trait_fan.curValue.ToString())
                    {
                        case "high":
                            index = 1;
                            break;
                        case "medium":
                            index = 2;
                            break;
                        case "low":
                            index = 3;
                            break;
                        case "auto":
                            index = 0;
                            break;
                        default:
                            index = 0;
                            break;
                    }
                    return index;
                }
                catch (Exception ex)
                {
                    MainPage.Log($"get curFanIndex error : {ex.Message}");
                    return 0;
                }
                case "high":
                    index = 1;
                    break;
                case "medium":
                    index = 2;
                    break;
                case "low":
                    index = 3;
                    break;
                case "auto":
                    index = 0;
                    break;
                default:
                    index = 0;
                    break;
            }
            set
            {
                switch (value)
                {
                    case 0:
                        trait_fan.curValue = "auto";
                        break;
                    case 1:
                        trait_fan.curValue = "high";
                        break;
                    case 2:
                        trait_fan.curValue = "medium";
                        break;
                    case 3:
                        trait_fan.curValue = "low";
                        break;
                    default:
                        trait_fan.curValue = "high";
                        break;
                }
            }
            return index;
        }
        FunctionAttributes _trait_mode;
        /// <summary>
        /// 模式属性
        /// 根据bus协议风速标记设置a协议标记
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public FunctionAttributes trait_mode
        public void SetFan(int index,Function function)
        {
            get
            string value = "high";
            switch (index)
            {
                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> { "auto", "cool", "heat", "dry", "fan" },
                            max = 4,
                            min = 0,
                        };
                    }
                    if (_trait_mode.curValue.ToString() == "{}")
                        _trait_mode.curValue = "cool";
                }
                return _trait_mode;
                case 1:
                    value = "high";
                    break;
                case 2:
                    value = "medium";
                    break;
                case 3:
                    value = "low";
                    break;
                case 0:
                    value = "auto";
                    break;
            }
        }
        FunctionAttributes _trait_fan;
        [Newtonsoft.Json.JsonIgnore]
        public FunctionAttributes trait_fan
        {
            get
            {
                if (_trait_fan == null)
                {
                    _trait_fan = attributes.Find((obj) => obj.key == "fan");
                    //找不到属性需要声明一个,防止报错闪退
                    if (_trait_fan == null)
                    {
                        _trait_fan = new FunctionAttributes()
                        {
                            key = "fan",
                            value = new List<string> { "high", "medium", "low", "auto" },
                            max = 3,
                            min = 0,
                            curValue = "high"
                        };
                    }
                    if (_trait_fan.curValue.ToString() == "{}")
                        _trait_fan.curValue = "high";
                }
                return _trait_fan;
            }
        }
        FunctionAttributes _trait_temp;
        /// <summary>
        /// 当前空调温度
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public FunctionAttributes trait_temp
        {
            get
            {
                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 = 32,
                            min = 16,
                        };
                    }
                    if (_trait_temp.curValue.ToString() == "{}")
                        _trait_temp.curValue = 16;
                }
                //if (_trait_temp.curValue.ToString().Length > 3)
                {
                    var vv = Convert.ToDouble(_trait_temp.curValue);
                    _trait_temp.curValue = Convert.ToInt32(vv);
                }
                return _trait_temp;
            }
        }
        FunctionAttributes _trait_swting;
        [Newtonsoft.Json.JsonIgnore]
        public FunctionAttributes trait_swting
        {
            get
            {
                if (_trait_swting == null)
                {
                    _trait_swting = attributes.Find((obj) => obj.key == "swting");
                    //找不到属性需要声明一个,防止报错闪退
                    if (_trait_swting == null)
                    {
                        _trait_swting = new FunctionAttributes()
                        {
                            key = "swting",
                            value = new List<string> { "up", "down", "left", "right" },
                            max = 3,
                            min = 0,
                        };
                    }
                    if (_trait_swting.curValue.ToString() == "{}")
                        _trait_swting.curValue = "up";
                }
                return _trait_swting;
            }
        }
        /// <summary>
        /// 空调扫风模式列表
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public List<string> swting
        {
            get
            {
                try
                {
                    return trait_swting.value;
                }
                catch (Exception ex)
                {
                    MainPage.Log($"ac get swting error : {ex.Message}");
                    return new List<string> { "up", "down", "left", "right" };
                }
            }
        }
        FunctionAttributes _trait_IndoorTemp;
        /// <summary>
        /// 室内温度
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public FunctionAttributes trait_IndoorTemp
        {
            get
            {
                if (_trait_IndoorTemp == null)
                {
                    _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;
                }
                //if (_trait_IndoorTemp.curValue.ToString().Length > 3)
                {
                    var vv = Convert.ToDouble(_trait_IndoorTemp.curValue);
                    _trait_IndoorTemp.curValue = Convert.ToInt32(vv);
                }
                return _trait_IndoorTemp;
            }
            function.SetAttrState(FunctionAttributeKey.FanSpeed, value);
        }
        /// <summary>
        /// 当前模式的icon路径
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string curModeImage
        /// <param name="lightingIcon">获取的图标类型,默认是点亮</param>
        /// <returns></returns>
        public string GetModeIconPath(string modeValue , bool lightingIcon = true)
        {
            get
            var imagePath = "FunctionIcon/AC/CoolIcon.png";
            if (lightingIcon)
            {
                try
                switch (modeValue)
                {
                    var imagePath = "FunctionIcon/AC/CoolIcon.png";
                    switch (trait_mode.curValue.ToString())
                    {
                        case "auto":
                            imagePath = "FunctionIcon/AC/AutoIcon.png";
                            break;
                        case "cool":
                            imagePath = "FunctionIcon/AC/CoolIcon.png";
                            break;
                        case "heat":
                            imagePath = "FunctionIcon/AC/HeatingIcon.png";
                            break;
                        case "dry":
                            imagePath = "FunctionIcon/AC/DehumidificationIcon.png";
                            break;
                        case "fan":
                            imagePath = "FunctionIcon/AC/AirSupplyIcon.png";
                            break;
                        default:
                            imagePath = "FunctionIcon/AC/CoolIcon.png";
                            break;
                    }
                    return imagePath;
                }
                catch (Exception ex)
                {
                    MainPage.Log($"ac ge curModeImage error : {ex.Message}");
                    return "FunctionIcon/AC/CoolIcon.png";
                    case "auto":
                        imagePath = "FunctionIcon/AC/AutoIcon.png";
                        break;
                    case "cool":
                        imagePath = "FunctionIcon/AC/CoolIcon.png";
                        break;
                    case "heat":
                        imagePath = "FunctionIcon/AC/HeatingIcon.png";
                        break;
                    case "dry":
                        imagePath = "FunctionIcon/AC/DehumidificationIcon.png";
                        break;
                    case "fan":
                        imagePath = "FunctionIcon/AC/AirSupplyIcon.png";
                        break;
                    default:
                        imagePath = "FunctionIcon/AC/CoolIcon.png";
                        break;
                }
            }
            else
            {
                imagePath = "FunctionIcon/AC/AutoIconGray.png";
                switch (modeValue)
                {
                    case "auto":
                        imagePath = "FunctionIcon/AC/AutoIconGray.png";
                        break;
                    case "cool":
                        imagePath = "FunctionIcon/AC/CoolIconGray.png";
                        break;
                    case "heat":
                        imagePath = "FunctionIcon/AC/HeatingIconGray.png";
                        break;
                    case "dry":
                        imagePath = "FunctionIcon/AC/DehumidificationIconGray.png";
                        break;
                    case "fan":
                        imagePath = "FunctionIcon/AC/AirSupplyIconGray.png";
                        break;
                }
            }
            return imagePath;
        }
        /// <summary>
        /// 当前模式的icon路径
        /// </summary>
        /// <param name="lightingIcon">获取的图标类型,默认是点亮</param>
        /// <returns></returns>
        public string GetSwingIconPath(string swingValue,bool lightingIcon = true)
        {
            var imagePath = "FunctionIcon/AC/SweepIconNullOn.png";
            if (lightingIcon)
            {
                switch (swingValue)
                {
                    case "up_down":
                        imagePath = "FunctionIcon/AC/SweepIconUDOn.png";
                        break;
                    case "left_right":
                        imagePath = "FunctionIcon/AC/SweepIconLROn.png";
                        break;
                    case "stop":
                        imagePath = "FunctionIcon/AC/SweepIconNullOn.png";
                        break;
                }
            }
            else
            {
                imagePath = "FunctionIcon/AC/SweepIconNull.png";
                switch (swingValue)
                {
                    case "up_down":
                        imagePath = "FunctionIcon/AC/SweepIconUD.png";
                        break;
                    case "left_right":
                        imagePath = "FunctionIcon/AC/SweepIconLR.png";
                        break;
                    case "stop":
                        imagePath = "FunctionIcon/AC/SweepIconNull.png";
                        break;
                }
            }
            return imagePath;
        }
        /// <summary>
        /// 当前风速的icon路径
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string curFanImage
        /// <param name="lightingIcon">获取的图标类型,默认是点亮</param>
        /// <returns></returns>
        public string GetFanIconPath(string modeValue, bool lightingIcon = true)
        {
            get
            var imagePath = "FunctionIcon/AC/WindHighIcon.png";
            if (lightingIcon)
            {
                try
                switch (modeValue)
                {
                    var imagePath = "FunctionIcon/AC/WindHighIcon.png";
                    switch (trait_fan.curValue.ToString())
                    {
                        case "high":
                            imagePath = "FunctionIcon/AC/WindHighIcon.png";
                            break;
                        case "medium":
                            imagePath = "FunctionIcon/AC/WindMediumIcon.png";
                            break;
                        case "low":
                            imagePath = "FunctionIcon/AC/WindLowIcon.png";
                            break;
                        case "auto":
                            imagePath = "FunctionIcon/AC/AutoIcon.png";
                            break;
                        default:
                            imagePath = "FunctionIcon/AC/WindHighIcon.png";
                            break;
                    }
                    return imagePath;
                }catch (Exception ex)
                {
                    MainPage.Log($"ac get curFanImage error : {ex.Message}");
                    return "FunctionIcon/AC/WindHighIcon.png";
                    case "high":
                        imagePath = "FunctionIcon/AC/WindHighIcon.png";
                        break;
                    case "medium":
                        imagePath = "FunctionIcon/AC/WindMediumIcon.png";
                        break;
                    case "low":
                        imagePath = "FunctionIcon/AC/WindLowIcon.png";
                        break;
                    case "auto":
                        imagePath = "FunctionIcon/AC/AutoIcon.png";
                        break;
                }
            }
            else
            {
                switch (modeValue)
                {
                    case "high":
                        imagePath = "FunctionIcon/AC/WindHighIconGray.png";
                        break;
                    case "medium":
                        imagePath = "FunctionIcon/AC/WindMediumIconGray.png";
                        break;
                    case "low":
                        imagePath = "FunctionIcon/AC/WindLowIconGray.png";
                        break;
                    case "auto":
                        imagePath = "FunctionIcon/AC/AutoIconGray.png";
                        break;
                }
            }
            return imagePath;
        }
        /// <summary>
        /// 获取模式属性文本
        /// </summary>
        /// <returns></returns>
        public string GetModeAttrText(string value)
        {
            string text = "";
            switch (value)
            {
                #region 模式
                case "auto":
                    text = Language.StringByID(StringId.Auto);
                    break;
                case "cool":
                    text = Language.StringByID(StringId.Cool);
                    break;
                case "heat":
                    text = Language.StringByID(StringId.Heat);
                    break;
                case "dry":
                    text = Language.StringByID(StringId.Dry);
                    break;
                case "fan":
                    text = Language.StringByID(StringId.AirSupply);
                    break;
                    #endregion
            }
            return text;
        }
        /// <summary>
        /// 获取扫风模式属性文本
        /// </summary>
        /// <returns></returns>
        public string GetSwingAttrText(string value)
        {
            string text = "";
            switch (value)
            {
                #region 模式
                case "up_down":
                    text = Language.StringByID(StringId.Swing_Up_Down);
                    break;
                case "left_right":
                    text = Language.StringByID(StringId.Swing_Left_Right);
                    break;
                case "stop":
                    text = Language.StringByID(StringId.tingzhi);
                    break;
                    #endregion
            }
            return text;
        }
        /// <summary>
        /// 获取风速属性文本
        /// </summary>
        /// <returns></returns>
        public string GetFanAttrText(string value)
        {
            string text = "";
            switch (value)
            {
                #region 风速
                case "high":
                    text = Language.StringByID(StringId.HighWindSpeed);
                    break;
                case "medium":
                    text = Language.StringByID(StringId.MiddleWindSpeed);
                    break;
                case "low":
                    text = Language.StringByID(StringId.LowWindSpeed);
                    break;
                case "auto":
                    text = Language.StringByID(StringId.Auto);
                    break;
                    #endregion
            }
            return text;
        }
    }