From 6fe1c5ebeb8312edc479a4576f05d80c5051a6c6 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期三, 19 七月 2023 19:47:00 +0800
Subject: [PATCH] 炫彩功能优化

---
 HDL_ON/Entity/Function/Scene.cs                                   |    7 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs |    6 
 HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/GroupControl.cs    |   28 +++
 HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs     |   38 ++++
 HDL-ON_Android/Assets/Language.ini                                |   12 +
 HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs    |  139 +++++++++++++++--
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs               |   17 +
 HDL_ON/Common/ApiUtlis.cs                                         |    1 
 HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs                 |   10 +
 HDL_ON/DAL/Mqtt/MqttClient.cs                                     |    3 
 HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs    |   97 +++++++++++
 HDL-ON_iOS/Resources/Language.ini                                 |   12 +
 HDL_ON/Entity/Function/Function.cs                                |   46 +++++
 HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs            |   18 ++
 HDL-ON_Android/Resources/Resource.designer.cs                     |    2 
 HDL_ON/Common/R.cs                                                |    9 +
 HDL_ON/UI/MainPage.cs                                             |    6 
 HDL_ON/UI/UI1-Login/LoginPage.cs                                  |    4 
 18 files changed, 413 insertions(+), 42 deletions(-)

diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index 3d19285..05d3ffb 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -663,7 +663,7 @@
 676=Moderate  
 677=High 
 678=Current user data has been cleared, about to return to the previous page.
-
+679=Group control
 
 
 
@@ -1203,6 +1203,7 @@
 7169=Time of duration
 7170=Human presence detection
 7171=continue
+7172=Rgb color plate
 
 8501=Video door lock
 8502=Electric quantity
@@ -2000,6 +2001,8 @@
 676=涓�
 677=楂�
 678=褰撳墠鐢ㄦ埛鏁版嵁宸叉竻绌猴紝鍗冲皢杩斿洖涓婁竴椤点��
+679=缇ゆ帶
+
 
 
 2532=璁垮閭�璇疯褰�
@@ -2539,6 +2542,7 @@
 7169=鎸佺画鏃堕棿
 7170=浜轰綋瀛樺湪妫�娴�
 7171=鎸佺画
+7172=RGB鑹茬洏
 
 
 
@@ -3334,6 +3338,7 @@
 676=Moderate  
 677=High 
 678=Current user data has been cleared, about to return to the previous page.
+679=Group control
 
 
 
@@ -3873,6 +3878,7 @@
 7169=Time of duration
 7170=Human presence detection
 7171=continue
+7172=Rgb color plate
 
 8501=Video door lock
 8502=Electric quantity
@@ -4665,6 +4671,7 @@
 676=Moderate  
 677=High 
 678=Current user data has been cleared, about to return to the previous page.
+679=Group control
 
 
 
@@ -5200,6 +5207,7 @@
 7169=Time of duration
 7170=Human presence detection
 7171=continue
+7172=Rgb color plate
 
 8501=Video door lock
 8502=Electric quantity
@@ -5985,6 +5993,7 @@
 676=Moderate  
 677=High 
 678=Current user data has been cleared, about to return to the previous page.
+679=Group control
 
 
 
@@ -6527,6 +6536,7 @@
 7169=Time of duration
 7170=Human presence detection
 7171=continue
+7172=Rgb color plate
 
 8501=Video door lock
 8502=Electric quantity
diff --git a/HDL-ON_Android/Resources/Resource.designer.cs b/HDL-ON_Android/Resources/Resource.designer.cs
index 24b9b9e..0bf2792 100644
--- a/HDL-ON_Android/Resources/Resource.designer.cs
+++ b/HDL-ON_Android/Resources/Resource.designer.cs
@@ -14,7 +14,7 @@
 {
 	
 	
-	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
+	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "12.2.8.165")]
 	public partial class Resource
 	{
 		
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 3d19285..05d3ffb 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -663,7 +663,7 @@
 676=Moderate  
 677=High 
 678=Current user data has been cleared, about to return to the previous page.
-
+679=Group control
 
 
 
@@ -1203,6 +1203,7 @@
 7169=Time of duration
 7170=Human presence detection
 7171=continue
+7172=Rgb color plate
 
 8501=Video door lock
 8502=Electric quantity
@@ -2000,6 +2001,8 @@
 676=涓�
 677=楂�
 678=褰撳墠鐢ㄦ埛鏁版嵁宸叉竻绌猴紝鍗冲皢杩斿洖涓婁竴椤点��
+679=缇ゆ帶
+
 
 
 2532=璁垮閭�璇疯褰�
@@ -2539,6 +2542,7 @@
 7169=鎸佺画鏃堕棿
 7170=浜轰綋瀛樺湪妫�娴�
 7171=鎸佺画
+7172=RGB鑹茬洏
 
 
 
@@ -3334,6 +3338,7 @@
 676=Moderate  
 677=High 
 678=Current user data has been cleared, about to return to the previous page.
+679=Group control
 
 
 
@@ -3873,6 +3878,7 @@
 7169=Time of duration
 7170=Human presence detection
 7171=continue
+7172=Rgb color plate
 
 8501=Video door lock
 8502=Electric quantity
@@ -4665,6 +4671,7 @@
 676=Moderate  
 677=High 
 678=Current user data has been cleared, about to return to the previous page.
+679=Group control
 
 
 
@@ -5200,6 +5207,7 @@
 7169=Time of duration
 7170=Human presence detection
 7171=continue
+7172=Rgb color plate
 
 8501=Video door lock
 8502=Electric quantity
@@ -5985,6 +5993,7 @@
 676=Moderate  
 677=High 
 678=Current user data has been cleared, about to return to the previous page.
+679=Group control
 
 
 
@@ -6527,6 +6536,7 @@
 7169=Time of duration
 7170=Human presence detection
 7171=continue
+7172=Rgb color plate
 
 8501=Video door lock
 8502=Electric quantity
diff --git a/HDL_ON/Common/ApiUtlis.cs b/HDL_ON/Common/ApiUtlis.cs
index 95903e1..e0a8a6a 100644
--- a/HDL_ON/Common/ApiUtlis.cs
+++ b/HDL_ON/Common/ApiUtlis.cs
@@ -401,6 +401,7 @@
                                                 }
                                                 readSidList.Clear();
                                             }
+                                            //FunctionList.List.Functions.AddRange(FunctionList.List.groupControls);
                                         }
                                         if (readSidList.Count > 0)
                                         {
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index 34d0c0b..4b3807e 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -6,6 +6,10 @@
     {
 
         /// <summary>
+        /// 缇ゆ帶
+        /// </summary>
+        public const int GroupControl = 679;
+        /// <summary>
         /// 褰撳墠鐢ㄦ埛鏁版嵁鏄竻绌猴紝鍗冲皢杩斿洖涓婁竴椤点��
         /// </summary>
         public const int VideoDoorlockDelDataTip = 678;
@@ -3447,6 +3451,11 @@
         /// 鎸佺画
         /// </summary>
         public const int chixu = 7171;
+        /// <summary>
+        /// RGB鑹茬洏
+        /// </summary>
+        public const int rgbsepan = 7172;
+        
 
 
         /// <summary>
diff --git a/HDL_ON/DAL/Mqtt/MqttClient.cs b/HDL_ON/DAL/Mqtt/MqttClient.cs
index bf5dd53..0358a57 100644
--- a/HDL_ON/DAL/Mqtt/MqttClient.cs
+++ b/HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -12,6 +12,7 @@
 using HDL_ON.Entity;
 using HDL_ON.UI;
 using HDL_ON.DAL.Server;
+using HDL_ON;
 
 namespace HDL_ON.DAL.Mqtt
 {
@@ -1187,7 +1188,7 @@
             }
             catch (Exception ex)
             {
-                Console.WriteLine(ex.Message);
+                MainPage.Log(ex.Message);
             }
             return reData;
         }
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 0960b7e..8b52231 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -109,7 +109,7 @@
         /// </summary>
         /// <param name="key"></param>
         /// <returns></returns>
-        public string GetAttrState(string key , string defaultValue = "0")
+        public string GetAttrState(string key, string defaultValue = "0")
         {
             //涓�绾ф煡璇eyValue鍊�
             var attrState = attributes.Find((s) => s.key == key.ToString());
@@ -279,7 +279,7 @@
         /// <summary>
         /// 鐗╃悊璁惧(妯″潡)鍨嬪彿
         /// </summary>
-        public string omodel =string.Empty;
+        public string omodel = string.Empty;
         /// <summary>
         /// 璁惧spk
         /// </summary>
@@ -372,6 +372,39 @@
         /// attri
         /// </summary>
         public List<FunctionAttributes> attributes = new List<FunctionAttributes>();
+
+        public List<FunctionAttributes> GetFunctionAttributes()
+        {
+            if (spk == SPK.GroupControl)
+            {
+                var list = new List<FunctionAttributes>();
+                var gc = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
+                if (gc != null)
+                {
+                    foreach (var temp in gc.sids)
+                    {
+                        var light = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
+                        if (light != null)
+                        {
+                            foreach (var attr in light.attributes)
+                            {
+                                if (list.Find((obj) => obj.key == attr.key) == null)
+                                {
+                                    list.Add(attr);
+                                }
+                            }
+                        }
+                    }
+                }
+
+                return list;
+            }
+            else
+            {
+                return attributes;
+            }
+        }
+
 
         /// <summary>
         /// 鎴块棿ID鍒楄〃
@@ -766,6 +799,10 @@
         public SceneFunction ConvertSceneFunction()
         {
             var sFunc = new SceneFunction();
+            if(spk == SPK.GroupControl)
+            {
+
+            }
             foreach (var attr in attributes)
             {
                 //绐楀笜鍚屾椂鍙戦�佸紑鍏宠窡鐧惧垎姣斾細鏈夐棶棰橈紝
@@ -778,6 +815,9 @@
                             continue;
                         }
                     }
+                }else if (spk == SPK.GroupControl)
+                {
+                    sFunc.type = "5";
                 }
 
                 string us = "";
@@ -1424,7 +1464,7 @@
         /// <summary>
         /// 缇ゆ帶锛堣嚜瀹氫箟锛�
         /// </summary>
-        public const string GroupControl = "GroupControl";
+        public const string GroupControl = "groupControl";
         /// <summary>
         /// 閫氱敤寮�鍏�
         /// </summary>
diff --git a/HDL_ON/Entity/Function/Scene.cs b/HDL_ON/Entity/Function/Scene.cs
index 3b00095..1e6d11d 100644
--- a/HDL_ON/Entity/Function/Scene.cs
+++ b/HDL_ON/Entity/Function/Scene.cs
@@ -629,7 +629,12 @@
             return sceneFunctionInfo;
         }
 
-
+        /// <summary>
+        /// 璁惧
+        /// 鍦烘櫙 =scene
+        /// 缇ゆ帶=5
+        /// </summary>
+        public string type = "0";
     }
 
     /// <summary>
diff --git a/HDL_ON/UI/MainPage.cs b/HDL_ON/UI/MainPage.cs
index cf5614a..e71ce0f 100644
--- a/HDL_ON/UI/MainPage.cs
+++ b/HDL_ON/UI/MainPage.cs
@@ -121,6 +121,7 @@
             SPK.AirSwitch,
             SPK.PanelSocket,SPK.ElectricSocket,
             SPK.MechanicalArm,SPK.IpCam_Imou,
+            SPK.GroupControl
         };
 
 
@@ -607,7 +608,10 @@
         public static void Log(string msg)
         {
 #if DEBUG
-            if (msg.Contains("鏀跺埌鏁版嵁"))
+            if (msg.Contains("鏀跺埌鏁版嵁")
+                || msg.Contains("鍙戦��")
+
+                )
                 Console.WriteLine(msg);
 #endif
         }
diff --git a/HDL_ON/UI/UI1-Login/LoginPage.cs b/HDL_ON/UI/UI1-Login/LoginPage.cs
index 246f9f4..a2afca1 100644
--- a/HDL_ON/UI/UI1-Login/LoginPage.cs
+++ b/HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -944,11 +944,11 @@
                         sids = new List<GroupControlFunction>()
                         {
                             new GroupControlFunction(){
-                               sid = "light1",
+                                sid = lightRgb1.sid,
                                 spk = SPK.LightRGB,
                             },
                             new GroupControlFunction(){
-                            sid = "light2",
+                                sid = "light2",
                                 spk = SPK.LightRGB,
                             },
                         }
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
index 805c245..6da1d29 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -995,6 +995,7 @@
                 switch (outputTarget.target_type)
                 {
                     case "1":
+                    case "5":
                         {
                             //鐢╯id鎵惧埌璁惧锛�
                             var device = LogicMethod.Current.GetDevice(outputTarget.sid);
@@ -1008,6 +1009,7 @@
                             //鍖哄埆涓嶅悓璁惧锛屾樉绀轰笉鍚岃澶囩姸鎬�
                             switch (device.spk)
                             {
+                               
                                 case SPK.CommonSeries:
                                     targetView.btnIcon.UnSelectedImagePath = "FunctionIcon/Icon/groupControl.png";
                                     stateStr = GetKeyValue("on_off", dicList) == "on" ? Language.StringByID(StringId.onLogic) : Language.StringByID(StringId.offLogic);
@@ -1049,29 +1051,14 @@
                                         }
                                     }
                                     break;
+                               
+                              
                                 case SPK.LightRGB:
                                 case SPK.LightRGBW:
                                 case SPK.LightCCT:
                                 case SPK.LightDimming:
                                     {
-                                        if(device.spk == SPK.LightRGB)
-                                        {
-                                            string colorful = GetKeyValue(FunctionAttributeKey.Colorful, dicList);
-                                            if (!string.IsNullOrEmpty(colorful))
-                                            {
-                                                targetView.btnIcon.UnSelectedImagePath = "FunctionIcon/Icon/groupControl.png";
-                                                if (colorful == "on")
-                                                {
-                                                    stateStr = Language.StringByID(StringId.onLogic);
-                                                }
-                                                else if (colorful == "off")
-                                                {
-                                                    stateStr = Language.StringByID(StringId.offLogic);
-                                                }
-
-                                                break;
-                                            }
-                                        }
+                                        
                                         string on_off = GetKeyValue("on_off", dicList);
                                         string brightness = GetKeyValue("brightness", dicList);
                                         if (on_off == "on" && brightness != "")
@@ -1119,7 +1106,61 @@
 
                                     }
                                     break;
-                               
+                                case SPK.GroupControl: //缇ゆ帶
+                                    {
+                                        targetView.btnIcon.UnSelectedImagePath = "FunctionIcon/Icon/groupControl.png";
+                                        string on_off = GetKeyValue("on_off", dicList);
+                                        string brightness = GetKeyValue("brightness", dicList);
+                                        string cct = GetKeyValue(FunctionAttributeKey.CCT, dicList);
+                                        string colorful = GetKeyValue(FunctionAttributeKey.Colorful, dicList);
+                                        if (on_off == "on" && brightness != "")
+                                        {
+                                            stateStr = Language.StringByID(StringId.onLogic) + brightness + "%";
+                                        }
+                                        else if (on_off == "on")
+                                        {
+                                            stateStr = Language.StringByID(StringId.onLogic);
+                                        }
+                                        else if (on_off == "off")
+                                        {
+                                            stateStr = Language.StringByID(StringId.offLogic);
+                                        }
+                                        else if (brightness != "")
+                                        {
+                                            stateStr = brightness + "%";
+                                        }
+                                        //鑹叉俯杩欎釜灞炴�ф墠鏈夋晥
+                                        if (!string.IsNullOrEmpty(cct))
+                                        {
+                                            stateStr += "," + Language.StringByID(StringId.ColorTemperature) + cct + "k";
+                                        }
+
+                                        if (!string.IsNullOrEmpty(colorful))
+                                        {
+                                            stateStr += "," + Language.StringByID(StringId.ColorfulFunction);
+                                            if (colorful == "on")
+                                            {
+                                                stateStr += Language.StringByID(StringId.onLogic);
+                                            }
+                                            else if (colorful == "off")
+                                            {
+                                                stateStr += Language.StringByID(StringId.offLogic);
+                                            }
+
+                                            break;
+                                        }
+
+                                        string rgb = GetKeyValue("rgb", dicList);
+                                        if (!string.IsNullOrEmpty(rgb) && rgb.Length > 6)
+                                        {
+                                            targetView.btnStateColor.Visible = true;
+                                            targetView.btnStateColor.BackgroundColor = new LogicView.RGBColorView().GetBackgroundColor(rgb);
+                                        }
+
+
+                                    }
+                                    break;
+
                                 case SPK.CurtainSwitch:
                                     {
                                         foreach (var dic in dicList)
@@ -1689,6 +1730,66 @@
                         }
                     }
                     break;
+                case SPK.GroupControl://缇ゆ帶
+                    {
+                        foreach (var dic in dicList)
+                        {
+                            string value = dic["value"];
+                            switch (dic["key"])
+                            {
+                                case "on_off":
+                                case "colorful":
+                                    {
+                                        if (value == "on")
+                                        {
+                                            button1.Text = Language.StringByID(StringId.onLogic);
+                                        }
+                                        else
+                                        {
+                                            button1.Text = Language.StringByID(StringId.offLogic);
+                                        }
+                                    }
+                                    break;
+                                case "brightness":
+                                    {
+                                        if (button1 == null)
+                                        {
+                                            //鎬曡皟璇曡蒋浠朵贡涓婁笢瑗垮鑷存姏寮傚父
+                                            break;
+                                        }
+                                        button1.Text = value + "%";
+                                    }
+                                    break;
+                                case "cct":
+                                    {
+                                        if (button1 == null)
+                                        {
+                                            //鎬曡皟璇曡蒋浠朵贡涓婁笢瑗垮鑷存姏寮傚父
+                                            break;
+                                        }
+                                        button1.Text = value + "k";
+                                    }
+                                    break;
+                                case "rgb":
+                                    {
+                                        if (button1 == null)
+                                        {
+                                            //鎬曡皟璇曡蒋浠朵贡涓婁笢瑗垮鑷存姏寮傚父
+                                            break;
+                                        }
+                                        if (!string.IsNullOrEmpty(value) && value.Length > 6)
+                                        {
+                                            button1.BackgroundColor = new LogicView.RGBColorView().GetBackgroundColor(value);
+                                            button1.Tag = value;
+                                        }
+                                    }
+                                    break;
+
+                            }
+
+                        }
+                    }
+                    break;
                 case SPK.CurtainSwitch:
                     {
                         foreach (var dic in dicList)
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
index 812dfa5..7472d73 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -187,6 +187,7 @@
             var list2 = this.GetVideoDeviceList();
             list.AddRange(list1);
             list.AddRange(list2);
+            list.AddRange(FunctionList.List.groupControls);
 #if DEBUG
             GetTestDevice(ref list, true);
 #endif
@@ -499,7 +500,15 @@
         {
             List<string> deviceStrTypeList = new List<string>();
             deviceStrTypeList.Clear();
-           
+
+            //缇ゆ帶
+            var gp = deviceList.Find((device) =>
+                device.spk == SPK.GroupControl);
+            if (gp != null)
+            {
+                deviceStrTypeList.Add(Language.StringByID(StringId.GroupControl));
+            }
+
             ///鐏厜绫�
             var lightjosn = deviceList.Find((device) =>
             device.spk == SPK.LightSwitch
@@ -639,6 +648,11 @@
                 functionTypeList.Add(SPK.PanelSocket);
                 functionTypeList.Add(SPK.ElectricSocket);
             }
+            //缇ゆ帶
+            else if (deviceType == Language.StringByID(StringId.GroupControl))
+            {
+                functionTypeList.Add(SPK.GroupControl);
+            }
             ///绐楀笜绫�
             else if (deviceType == Language.StringByID(StringId.Curtain))
             {
@@ -734,6 +748,7 @@
             else
             {
                 //鍏ㄩ儴鍖哄煙
+                functionTypeList.Add(SPK.GroupControl);
                 functionTypeList.Add(SPK.Peephole);
                 functionTypeList.Add(SPK.Ev_Ipcam);
                 functionTypeList.Add(SPK.LightSwitch);
@@ -861,6 +876,7 @@
                     break;
                 case target_if:
                     {
+                        deviceTypeList.Add(SPK.GroupControl);
                         deviceTypeList.Add(SPK.LightSwitch);
                         deviceTypeList.Add(SPK.LightRGB);
                         deviceTypeList.Add(SPK.LightRGBW);
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
index e828e1a..8b698be 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
@@ -56,6 +56,87 @@
             #region  缂栬緫璁惧鐘舵��
             switch (device.spk)
             {
+                //缇ゆ帶
+                case SPK.GroupControl:
+                    int bottom = 50;
+                    int attributesNameId=0;
+                    int count = 0;
+                    foreach (var attr in (device as GroupControl).attributes)
+                    {
+                        if (attr.key == FunctionAttributeKey.OnOff ||
+                            attr.key == FunctionAttributeKey.Brightness ||
+                            attr.key == FunctionAttributeKey.CCT ||
+                            attr.key == FunctionAttributeKey.RGB ||
+                            attr.key == FunctionAttributeKey.Colorful)
+                        {
+                            LogicView.FunTypeView view = new LogicView.FunTypeView();
+                            view.btnState.Name = "缇ゆ帶";
+                            view.frameLayout.Y = count * Application.GetRealHeight(50);
+                            fLayout.AddChidren(view.FLayoutView());
+                            count++;
+                            switch (attr.key)
+                            {
+                                case FunctionAttributeKey.OnOff:
+                                    attributesNameId = StringId.switchLogic;
+                                    ///寮�鍏崇偣鍑讳簨浠�
+                                    view.btnClick.MouseUpEventHandler += (sender, e) =>
+                                    {
+                                        SwitchViewMethod(device, view.btnState, 2);
+                                    };
+                                    break;
+                                case FunctionAttributeKey.Brightness:
+                                    attributesNameId = StringId.brightnesLogic;
+                                    view.btnState.Text = "5%";//浜у搧缁忕悊鏅撹緣瑕佹眰鏀圭殑 2021-11-06
+                                    ///浜害鐐瑰嚮浜嬩欢
+                                    view.btnClick.MouseUpEventHandler += (sender, e) =>
+                                    {
+                                        BrightnessMethod(device, view.btnState, view.btnText.Text);
+
+                                    };
+                                    break;
+                                case FunctionAttributeKey.CCT:
+                                    attributesNameId = StringId.ColorTemperature;
+                                    ///鑹叉俯鐐瑰嚮浜嬩欢
+                                    view.btnClick.MouseUpEventHandler += (sender, e) =>
+                                    {
+                                        ColorTemperatureMethod(device, view.btnState, view.btnText.Text);
+
+                                    };
+                                    break;
+                                case FunctionAttributeKey.RGB:
+                                    attributesNameId = StringId.rgbsepan;
+                                    view.btnState.Tag = "";
+                                    view.btnState.Width = Application.GetRealWidth(16);
+                                    view.btnState.Height = Application.GetRealWidth(16);
+                                    view.btnState.Radius = (uint)Application.GetRealWidth(8);
+                                    view.btnState.X = Application.GetRealWidth(375 - 48 - 16);
+                                    ///RGB鑹茬洏鐐瑰嚮浜嬩欢
+                                    view.btnClick.MouseUpEventHandler += (sender, e) =>
+                                    {
+                                        RgbColorDiskMethod(device, view.btnState, view.btnText.Text);
+                                    };
+                                    break;
+                                case FunctionAttributeKey.Colorful:
+                                    attributesNameId = StringId.ColorfulFunction;
+                                    ///寮�鍏崇偣鍑讳簨浠�
+                                    view.btnClick.MouseUpEventHandler += (sender, e) =>
+                                    {
+                                        SwitchViewMethod(device, view.btnState, 2);
+                                    };
+                                    break;
+                            }
+                            view.btnText.TextID = attributesNameId;
+                            if (edit)
+                            {
+                                //鏄剧ず缂栬緫涔嬪墠鐨勮澶囩姸鎬�
+                                GetEditDeviceState(device, index, view.btnState, null, null, null);
+                            }
+                        }
+                    }
+
+                    //璁惧寤舵椂iewv
+                    DelayView(fLayout, Application.GetRealHeight(50)* count);
+                    break;
                 //鎻掑骇(鏈塙SB)
                 case SPK.PanelSocket:
                     {
@@ -168,8 +249,7 @@
                         ///RGB鑹茬洏
                         LogicView.FunTypeView rgbView = new LogicView.FunTypeView();
                         rgbView.frameLayout.Y = brightnessView.frameLayout.Bottom;
-                        //rgbView.btnText.TextID = StringId.brightnesLogic;
-                        rgbView.btnText.Text= "RGB鑹茬洏";
+                        rgbView.btnText.TextID = StringId.rgbsepan;
                         rgbView.btnState.Tag = "";
                         rgbView.btnState.Width = Application.GetRealWidth(16);
                         rgbView.btnState.Height = Application.GetRealWidth(16);
@@ -815,6 +895,11 @@
                                 }
                             }
                             break;
+                        case SPK.GroupControl:
+                            {
+                                outputDevice.target_type = "5";
+                            }
+                            break;
 
                     }
                     outputDevice.status.AddRange(dicSateteList);
@@ -929,6 +1014,11 @@
                             }
                         }
                         break;
+                    case SPK.GroupControl:
+                        {
+                            keyVlaue = "colorful";
+                        }
+                        break;
                 }
                 //鏁版嵁灏佽
                 AddDictionary(keyVlaue, strValue);
@@ -960,6 +1050,7 @@
                     case SPK.LightRGB:
                     case SPK.LightRGBW:
                     case SPK.LightCCT:
+                    case SPK.GroupControl:
                         {
                             keyVlaue = "brightness";
                         }
@@ -1004,6 +1095,7 @@
                 switch (device.spk)
                 {
                     case SPK.LightCCT:
+                    case SPK.GroupControl:
                         {
                             keyVlaue = "cct";
                         }
@@ -1037,6 +1129,7 @@
                 switch (device.spk)
                 {
                     case SPK.LightRGB:
+                    case SPK.GroupControl:
                         {
                             keyVlaue = "rgb";
                         }
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
index 1a39122..a85c1ea 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
@@ -433,14 +433,17 @@
                     var pack = pm.GetSceneInfo(scene.userSceneId);
                     if (pack.Code == StateCode.SUCCESS)
                     {
-                        var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(pack.Data.ToString());
-                        var tempScene = sceneList.Find((obj) => obj.userSceneId == scene.userSceneId);
-                        if (tempScene != null)
+                        if (pack.Data != null)
                         {
-                            scene.name = tempScene.name;
-                            scene.delay = tempScene.delay;
-                            scene.roomIds = tempScene.roomIds;
-                            scene.functions = tempScene.functions;
+                            var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(pack.Data.ToString());
+                            var tempScene = sceneList.Find((obj) => obj.userSceneId == scene.userSceneId);
+                            if (tempScene != null)
+                            {
+                                scene.name = tempScene.name;
+                                scene.delay = tempScene.delay;
+                                scene.roomIds = tempScene.roomIds;
+                                scene.functions = tempScene.functions;
+                            }
                         }
                         Application.RunOnMainThread(() =>
                         {
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs
index cc40903..dc80600 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs
@@ -128,7 +128,11 @@
             };
             bodyView.AddChidren(functionListView);
 
-            foreach (var function in FunctionList.List.Functions)
+            List<Function> showList = new List<Function>();
+            showList.AddRange(FunctionList.List.Functions);
+            showList.AddRange(FunctionList.List.groupControls);
+
+            foreach (var function in showList)
             {
                 if (!MainPage.SceneSupportFunctionList.Contains(function.spk))
                 {
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/GroupControl.cs b/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/GroupControl.cs
index 81ce887..6a36845 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/GroupControl.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/GroupControl.cs
@@ -11,7 +11,7 @@
     {
         public GroupControl()
         {
-            spk = "GroupControl";
+            spk = "groupControl";
         }
         /// <summary>
         /// 缇ゆ帶ID
@@ -161,6 +161,32 @@
                 MainPage.Log($"缇ゆ帶鎺у埗澶辫触: {ex.Message}");
             }
         }
+
+
+        public new List<FunctionAttributes> attributes {
+            get
+            {
+                var list = new List<FunctionAttributes>();
+
+                foreach (var temp in sids)
+                {
+                    var light = FunctionList.List.GetLightList().Find((obj) => obj.sid == temp.sid);
+                    if (light != null)
+                    {
+                        foreach(var attr in light.attributes)
+                        {
+                            if(list.Find((obj)=>obj.key == attr.key) == null)
+                            {
+                                list.Add(attr);
+                            }
+                        }
+                    }
+
+                }
+
+                return list;
+            }
+        }
     }
 
     public class GroupControlFunction
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs
index 60ce741..8bb2a15 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs
@@ -335,10 +335,26 @@
                 backAction?.Invoke(curColor) ;
                 System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                 if (isSatrtColor)
+                {
                     d.Add(FunctionAttributeKey.ColorfulBegin, redColor + "," + greenColor + "," + blueColor);
+                    function.SetAttrState(FunctionAttributeKey.ColorfulBegin, redColor + "," + greenColor + "," + blueColor);
+                    var color = function.GetAttrState(FunctionAttributeKey.ColorfulEnd).Split(",");
+                    var sendColorString = color[0] + "," + color[1] + "," + color[2];
+                    d.Add(FunctionAttributeKey.ColorfulEnd, sendColorString);
+                    d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
+
+                }
                 else
+                {
+                    var color = function.GetAttrState(FunctionAttributeKey.ColorfulBegin).Split(",");
+                    var sendColorString = color[0] + "," + color[1] + "," + color[2];
+                    d.Add(FunctionAttributeKey.ColorfulBegin, sendColorString);
+                    d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
                     d.Add(FunctionAttributeKey.ColorfulEnd, redColor + "," + greenColor + "," + blueColor);
+                    function.SetAttrState(FunctionAttributeKey.ColorfulEnd, redColor + "," + greenColor + "," + blueColor);
+                }
                 Control.Ins.SendWriteCommand(function, d);
+                this.RemoveFromParent();
             };
 
 
@@ -357,30 +373,52 @@
             btnRecommenColor1.MouseUpEventHandler = (sender, e) => {
                 curColor = btnCurColor.BackgroundColor = btnRecommenColor1.BackgroundColor;
                 etCurColorHexInfo.Text = "FC4645";
+                redColor = 252;
+                greenColor = 70;
+                blueColor = 69;
+
             };
             btnRecommenColor2.MouseUpEventHandler = (sender, e) => {
                 curColor = btnCurColor.BackgroundColor = btnRecommenColor2.BackgroundColor;
                 etCurColorHexInfo.Text = "FD834D";
+                redColor = 253;
+                greenColor = 131;
+                blueColor = 77;
             };
             btnRecommenColor3.MouseUpEventHandler = (sender, e) => {
                 curColor = btnCurColor.BackgroundColor = btnRecommenColor3.BackgroundColor;
                 etCurColorHexInfo.Text = "00AB11";
+                redColor = 0;
+                greenColor = 171;
+                blueColor = 17;
             };
             btnRecommenColor4.MouseUpEventHandler = (sender, e) => {
                 curColor = btnCurColor.BackgroundColor = btnRecommenColor4.BackgroundColor;
                 etCurColorHexInfo.Text = "28952E";
+                redColor = 40;
+                greenColor = 149;
+                blueColor = 46;
             };
             btnRecommenColor5.MouseUpEventHandler = (sender, e) => {
                 curColor = btnCurColor.BackgroundColor = btnRecommenColor5.BackgroundColor;
                 etCurColorHexInfo.Text = "45B7FD";
+                redColor = 69;
+                greenColor = 183;
+                blueColor = 253;
             };
             btnRecommenColor6.MouseUpEventHandler = (sender, e) => {
                 curColor = btnCurColor.BackgroundColor = btnRecommenColor6.BackgroundColor;
                 etCurColorHexInfo.Text = "794EFC";
+                redColor = 121;
+                greenColor = 78;
+                blueColor = 252;
             };
             btnRecommenColor7.MouseUpEventHandler = (sender, e) => {
                 curColor = btnCurColor.BackgroundColor = btnRecommenColor7.BackgroundColor;
                 etCurColorHexInfo.Text = "FFFFFF";
+                redColor = 255;
+                greenColor = 255;
+                blueColor = 255;
             };
         }
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs
index efa0d57..bb83402 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs
@@ -404,6 +404,16 @@
                             function.SetAttrState(FunctionAttributeKey.Colorful, controlColorfulState);
                             System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                             d.Add(FunctionAttributeKey.Colorful, controlColorfulState);
+                            if (controlColorfulState == "on")
+                            {
+                                var color = function.GetAttrState(FunctionAttributeKey.ColorfulBegin).Split(",");
+                                var sendColorString = color[0] + "," + color[1] + "," + color[2];
+                                d.Add(FunctionAttributeKey.ColorfulBegin, sendColorString);
+                                color = function.GetAttrState(FunctionAttributeKey.ColorfulEnd).Split(",");
+                                sendColorString = color[0] + "," + color[1] + "," + color[2];
+                                d.Add(FunctionAttributeKey.ColorfulEnd, sendColorString);
+                                d.Add(FunctionAttributeKey.ColorfulTime, function.GetAttrState(FunctionAttributeKey.ColorfulTime));
+                            }
                             Control.Ins.SendWriteCommand(function, d);
                         }catch(Exception ex)
                         {

--
Gitblit v1.8.0