wxr
2021-07-01 43b0d5870d528f23ecd6aeceb6cfd4325188b46f
HDL_ON/Entity/Function/Light.cs
@@ -4,190 +4,71 @@
namespace HDL_ON.Entity
{
    public class Light : Function
    public class Light
    {
        /*
        灯光类:trait: [switch,brightness,color,cct,delay,fadeTime]
        属性   描述
        switch   on/off;
        brightness   0-100;
        color   int (red (0-255) green (0-255) blue (0-255))
        cct   int (warm light(0-255) cold light (0-255) )
        delay   0-3600s
        fadetime   0-3600s
        */
        public Light()
        #region RGB
        /// <summary>
        /// 获取rgb颜色
        /// </summary>
        /// <returns></returns>
        public int GetRGBcolor(Function function )
        {
            var color = function.GetAttrState(FunctionAttributeKey.RGB).Split(",");
            if(color.Length!= 3)
            {
                color = new string[] {"100", "100", "100" };
            }
            int redColor = 0;
            int greenColor = 0;
            int blueColor = 0;
            int.TryParse(color[0], out redColor);
            int.TryParse(color[1], out greenColor);
            int.TryParse(color[2], out blueColor);
            int recolor = redColor * 256 * 256 + greenColor * 256 + blueColor;
            return recolor;
        }
        /// <summary>
        /// 亮度值
        /// 获取rgb 控制字符串
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public int brightness
        /// <returns></returns>
        public string GetRGBcolorString(Function function)
        {
            get
            {
                string b = "0";
                dicPropert.TryGetValue("brightness", out b);
                return Convert.ToInt32(b == "" ? "0" : b);
            }
            set
            {
                try
                {
                    dicPropert["brightness"] = value.ToString();
                    MainPage.Log($"brightness 数据刷新{value}.");
                }
                catch
                {
                    MainPage.Log("brightness 数据刷新失败.");
                }
            }
            var color = function.GetAttrState(FunctionAttributeKey.RGB).Split(",");
            return color[0] + "," + color[1] + "," + color[2];
        }
        /// <summary>
        /// RGB颜色
        /// 255255255
        /// 获取rgb颜色
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string color
        /// <param name="index">0:red 1:green 2:blue</param>
        /// <returns></returns>
        public int GetColor( int index,Function function)
        {
            get
            {
                string c = "255255255";
                dicPropert.TryGetValue("color", out c);
                if (c.Length != 9)
                {
                    dicPropert["color"] = "255255255";
                }
                return c.Length == 9 ? c : "255255255";
            }
            set
            int color = 0;
            if (index <= 2)
            {
                try
                {
                    dicPropert["color"] = value.ToString();
                    int.TryParse(function.GetAttrState(FunctionAttributeKey.RGB).Split(",")[index], out color);
                }
                catch
                {
                    MainPage.Log("color 数据刷新失败.");
                }
                catch { }
            }
            return color;
        }
        [Newtonsoft.Json.JsonIgnore]
        public byte redColor
        {
            get {
                try
                {
                    return Convert.ToByte(color.Substring(0, 3));
                }
                catch (Exception ex)
                {
                    MainPage.Log($"Get red color error : {ex.Message}");
                    return 0;
                }
            }
            set
            {
                try
                {
                    dicPropert["color"] = dicPropert["color"].ToString().Remove(0, 3).Insert(0, value.ToString().PadLeft(3, '0'));
                }
                catch (Exception ex)
                {
                    MainPage.Log($"set red color error : {ex.Message}");
                }
            }
        }
        [Newtonsoft.Json.JsonIgnore]
        public byte greenColor
        {
            get
            {
                try
                {
                    return Convert.ToByte(color.Substring(3, 3));
                }
                catch (Exception ex)
                {
                    MainPage.Log($"Get green color error : {ex.Message}");
                    return 0;
                }
            }
            set
            {
                try
                {
                    dicPropert["color"] = dicPropert["color"].ToString().Remove(3, 3).Insert(3, value.ToString().PadLeft(3, '0'));
                }
                catch (Exception ex)
                {
                    MainPage.Log($"set green color error : {ex.Message}");
                }
            }
        }
        [Newtonsoft.Json.JsonIgnore]
        public byte blueColor
        {
            get
            {
                try
                {
                    return Convert.ToByte(color.Substring(6, 3));
                }
                catch (Exception ex)
                {
                    MainPage.Log($"Get blue color error : {ex.Message}");
                    return 0;
                }
            }
            set
            {
                try
                {
                    dicPropert["color"] = dicPropert["color"].ToString().Remove(6, 3).Insert(6, value.ToString().PadLeft(3, '0'));
                }
                catch (Exception ex)
                {
                    MainPage.Log($"set blue color error : {ex.Message}");
                }
            }
        }
        /// <summary>
        /// 拼接、获取A协议操作数据
        /// 设置rgb颜色
        /// </summary>
        public override JObject GetSendJObject(CommandType_A command )
        public void SetRGBcolor(byte[] color,Function function)
        {
            var sendJob = new JObject();
            if (command == CommandType_A.write)
            {
                sendJob = new JObject { { "vendor_code", vendor_code }, { "Command", command.ToString() }, { "Type", "device" } };
                JObject data = null;
                switch (functionType)
                {
                    case FunctionType.Relay:
                        data = new JObject { { "sid", sid }, { "switch", on_off } };
                        break;
                    case FunctionType.Dimmer:
                        data = new JObject { { "sid", sid }, { "brightness", brightness } };
                        break;
                    case FunctionType.RGB:
                        data = new JObject { { "sid", sid }, { "brightness", brightness }, { "color", color } };
                        break;
                }
                sendJob.Add("objects", data);
            }
            else if (command == CommandType_A.read)
            {
                sendJob = new JObject { { "vendor_code", vendor_code }, { "Command", command.ToString() }, { "Type", "device" } };
                var data = new JObject {{ "sid", sid } };
                sendJob.Add("objects", data);
            }
            return sendJob;
            function.SetAttrState(FunctionAttributeKey.RGB, color[0] + "," + color[1] + "," + color[2]);
        }
        #endregion
    }
}