From 611786df5108dca0bdcff03834cc285cba4b8e61 Mon Sep 17 00:00:00 2001
From: 陈嘉乐 <cjl@hdlchina.com.cn>
Date: 星期二, 13 十月 2020 16:48:43 +0800
Subject: [PATCH] 2020-10-13-1

---
 HDL_ON/Entity/Function/Light.cs |  164 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 137 insertions(+), 27 deletions(-)

diff --git a/HDL_ON/Entity/Function/Light.cs b/HDL_ON/Entity/Function/Light.cs
index e155396..b50e5fb 100644
--- a/HDL_ON/Entity/Function/Light.cs
+++ b/HDL_ON/Entity/Function/Light.cs
@@ -19,6 +19,9 @@
         public Light()
         {
         }
+
+        [Newtonsoft.Json.JsonIgnore]
+        public Trait trait_brightness;
         /// <summary>
         /// 浜害鍊�
         /// </summary>
@@ -27,15 +30,45 @@
         {
             get
             {
-                string b = "0";
-                dicPropert.TryGetValue("brightness", out b);
-                return Convert.ToInt32(b == "" ? "0" : b);
+                if (trait_brightness == null)
+                {
+                    trait_brightness = function.Find((obj) => obj.attri == "brightness");
+                    //鎵句笉鍒板睘鎬ч渶瑕佸0鏄庝竴涓紝闃叉鎶ラ敊闂��
+                    if (trait_brightness == null)
+                    {
+                        trait_brightness = new Trait()
+                        {
+                            attri = "brightness",
+                            value = new List<string> { "up", "down" },
+                            max = 100,
+                            min = 0,
+                        };
+                    }
+                    trait_brightness.curValues = trait_brightness.min;
+                }
+                return Convert.ToInt32(trait_brightness.curValues);
             }
             set
             {
                 try
                 {
-                    dicPropert["brightness"] = value.ToString();
+                    if (trait_brightness == null)
+                    {
+                        trait_brightness = function.Find((obj) => obj.attri == "brightness");
+                        //鎵句笉鍒板睘鎬ч渶瑕佸0鏄庝竴涓紝闃叉鎶ラ敊闂��
+                        if (trait_brightness == null)
+                        {
+                            trait_brightness = new Trait()
+                            {
+                                attri = "brightness",
+                                value = new List<string> { "up", "down" },
+                                max = 100,
+                                min = 0,
+                            };
+                        }
+                        trait_brightness.curValues = trait_brightness.min;
+                    }
+                    trait_brightness.curValues = value;
                     MainPage.Log($"brightness 鏁版嵁鍒锋柊{value}.");
                 }
                 catch
@@ -45,28 +78,40 @@
             }
         }
 
+        [Newtonsoft.Json.JsonIgnore]
+        public Trait trait_color;
         /// <summary>
         /// RGB棰滆壊
         /// 255255255
         /// </summary>
         [Newtonsoft.Json.JsonIgnore]
-        public string color
+        public int color
         {
             get
             {
-                string c = "255255255";
-                dicPropert.TryGetValue("color", out c);
-                if (c.Length != 9)
+                if (trait_color == null)
                 {
-                    dicPropert["color"] = "255255255";
+                    trait_color = function.Find((obj) => obj.attri == "color");
+                    //鎵句笉鍒板睘鎬ч渶瑕佸0鏄庝竴涓紝闃叉鎶ラ敊闂��
+                    if (trait_color == null)
+                    {
+                        trait_color = new Trait()
+                        {
+                            attri = "color",
+                            value = new List<string> { "FFFFFF" },
+                            max = 0xFFFFFF,
+                            min = 0x000000,
+                        };
+                    }
+                    trait_color.curValues = trait_color.min;
                 }
-                return c.Length == 9 ? c : "255255255";
+                return Convert.ToInt32(trait_color.curValues);
             }
             set
             {
                 try
                 {
-                    dicPropert["color"] = value.ToString();
+                    trait_color.curValues = value;
                 }
                 catch
                 {
@@ -75,12 +120,12 @@
             }
         }
         [Newtonsoft.Json.JsonIgnore]
-        public byte redColor
+        public int redColor
         {
             get {
                 try
                 {
-                    return Convert.ToByte(color.Substring(0, 3));
+                    return color >> 16;
                 }
                 catch (Exception ex)
                 {
@@ -92,7 +137,8 @@
             {
                 try
                 {
-                    dicPropert["color"] = dicPropert["color"].ToString().Remove(0, 3).Insert(0, value.ToString().PadLeft(3, '0'));
+                    var rc = value << 16;
+                    color = rc + (color & 0xFFFF);
                 }
                 catch (Exception ex)
                 {
@@ -101,13 +147,13 @@
             }
         }
         [Newtonsoft.Json.JsonIgnore]
-        public byte greenColor
+        public int greenColor
         {
             get
             {
                 try
                 {
-                    return Convert.ToByte(color.Substring(3, 3));
+                    return (color & 0xFFFF) >> 8;
                 }
                 catch (Exception ex)
                 {
@@ -119,7 +165,8 @@
             {
                 try
                 {
-                    dicPropert["color"] = dicPropert["color"].ToString().Remove(3, 3).Insert(3, value.ToString().PadLeft(3, '0'));
+                    var gc = value << 8;
+                    color = gc + (color & 0xFF00FF);
                 }
                 catch (Exception ex)
                 {
@@ -128,13 +175,13 @@
             }
         }
         [Newtonsoft.Json.JsonIgnore]
-        public byte blueColor
+        public int blueColor
         {
             get
             {
                 try
                 {
-                    return Convert.ToByte(color.Substring(6, 3));
+                    return color & 0xFF;
                 }
                 catch (Exception ex)
                 {
@@ -146,7 +193,7 @@
             {
                 try
                 {
-                    dicPropert["color"] = dicPropert["color"].ToString().Remove(6, 3).Insert(6, value.ToString().PadLeft(3, '0'));
+                    color = value + (color & 0xFFFF00);
                 }
                 catch (Exception ex)
                 {
@@ -165,29 +212,92 @@
             if (command == CommandType_A.write)
             {
 
-                sendJob = new JObject { { "vendor_code", vendor_code }, { "Command", command.ToString() }, { "Type", "device" } };
-                JObject data = null;
+#if DEBUG
+                switch(sid)
+                {
+                    case "00010114051D0A300C92C902020200010001":
+                        sid = "00010114041710193123D402020200010001";
+                        break;
+                    case "00010114051D0A300C92C902020200020001":
+                        sid = "00010114041710193123D402020200020001";
+                        break;
+                    case "00010114051D0A300C92C902020200030001":
+                        sid = "00010114041710193123D402020200030001";
+                        break;
+                    case "00010114051D0A300C92C902020200040001":
+                        sid = "00010114041710193123D402020200040001";
+                        break;
+                }
+#endif
+
+                sendJob = new JObject { { "vendor_code", vendor_code }, { "command", command.ToString() }, { "type", "device" } };
+                JObject data = new JObject { { "sid", sid } };
+                sendJob.Add("objects", data);
+                List<ControlData> controlData = new List<ControlData>();
                 switch (functionType)
                 {
                     case FunctionType.Relay:
-                        data = new JObject { { "sid", sid }, { "switch", on_off } };
+                        controlData.Add(new ControlData()
+                        {
+                            name = "on_off",
+                            data_type = "Bool",
+                            value = on_off
+                        });
                         break;
                     case FunctionType.Dimmer:
-                        data = new JObject { { "sid", sid }, { "brightness", brightness } };
+                        controlData.Add(new ControlData()
+                        {
+                            name = "on_off",
+                            data_type = "Bool",
+                            value = on_off
+                        });
+                        controlData.Add(new ControlData()
+                        {
+                            name = "brightness",
+                            data_type = "int",
+                            value = brightness.ToString(),
+                        });
                         break;
                     case FunctionType.RGB:
-                        data = new JObject { { "sid", sid }, { "brightness", brightness }, { "color", color } };
+                        controlData.Add(new ControlData()
+                        {
+                            name = "on_off",
+                            data_type = "Bool",
+                            value = on_off
+                        });
+                        controlData.Add(new ControlData()
+                        {
+                            name = "brightness",
+                            data_type = "int",
+                            value = brightness.ToString(),
+                        });
+                        controlData.Add(new ControlData()
+                        {
+                            name = "color",
+                            data_type = "int",
+                            value = color.ToString(),
+                        });
                         break;
                 }
-                sendJob.Add("objects", data);
+
+                AProtocolEntity ape = new AProtocolEntity()
+                {
+                    command = command.ToString(),
+                    vendor_code = vendor_code,
+                    type = "device_sid",
+                };
+                ape.ControlFunction(sid, controlData);
+                sendJob = JObject.FromObject(ape);
+
             }
             else if (command == CommandType_A.read)
             {
-                sendJob = new JObject { { "vendor_code", vendor_code }, { "Command", command.ToString() }, { "Type", "device" } };
+                sendJob = new JObject { { "vendor_code", vendor_code }, { "command", command.ToString() }, { "type", "device" } };
                 var data = new JObject {{ "sid", sid } };
                 sendJob.Add("objects", data);
             }
             return sendJob;
         }
     }
+
 }

--
Gitblit v1.8.0