wxr
2023-07-20 c135877a65244706008b6215b2734bb37bbfb7f4
Merge branch 'Dev-1.9' into Dev-Branch
26个文件已修改
4 文件已重命名
823 ■■■■■ 已修改文件
HDL-ON_Android/Assets/Language.ini 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/HDL-ON_Android.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Resources/Resource.designer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/HDL-ON_iOS.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/ApiUtlis.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Mqtt/MqttClient.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Function.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Scene.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/MainPage.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI1-Login/LoginPage.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePage.cs 208 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/GroupControl.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/ColorfulSettingPage.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage_V2.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/Light/RGBPage.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png

HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png

HDL-ON_Android/HDL-ON_Android.csproj
@@ -400,7 +400,7 @@
    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\VideoDoorLockOpen1.png" />
    <AndroidAsset Include="Assets\Phone\LogicIcon\selectlocation.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Light\ColorfulBar.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\GroupControl_blue.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\groupControl_blue.png" />
    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\GroupControl_white.png" />
    <AndroidAsset Include="Assets\h5\index.html" />
    <AndroidAsset Include="Assets\h5\static\index.63b34199.css" />
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
    {
        
HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -1560,8 +1560,8 @@
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\VideoDoorlockClose1.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\VideoDoorLockOpen1.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Light\ColorfulBar.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\GroupControl_blue.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\GroupControl_white.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\groupControl_blue.png" />
      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\groupControl_white.png" />
      <BundleResource Include="Resources\h5\index.html" />
      <BundleResource Include="Resources\h5\static\index.63b34199.css" />
      <BundleResource Include="Resources\h5\static\images\coal-save-ic.png" />
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
HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_blue.png

HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/groupControl_white.png

HDL_ON/Common/ApiUtlis.cs
@@ -401,6 +401,7 @@
                                                }
                                                readSidList.Clear();
                                            }
                                            //FunctionList.List.Functions.AddRange(FunctionList.List.groupControls);
                                        }
                                        if (readSidList.Count > 0)
                                        {
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>
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;
        }
HDL_ON/Entity/Function/Function.cs
@@ -100,7 +100,7 @@
        /// <returns></returns>
        public FunctionAttributes GetAttribute(string key)
        {
            var attr = attributes.Find((a) => a.key == key);
            var attr = GetFunctionAttributes().Find((a) => a.key == key);
            return attr;
        }
@@ -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,7 +799,36 @@
        public SceneFunction ConvertSceneFunction()
        {
            var sFunc = new SceneFunction();
            foreach (var attr in attributes)
            var list = new List<FunctionAttributes>();
            if (spk == SPK.GroupControl)
            {
                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);
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                list.AddRange(attributes);
            }
            foreach (var attr in list)
            {
                //窗帘同时发送开关跟百分比会有问题,
                if(spk == SPK.CurtainRoller || spk == SPK.CurtainTrietex || spk == SPK.CurtainDream)
@@ -778,6 +840,9 @@
                            continue;
                        }
                    }
                }else if (spk == SPK.GroupControl)
                {
                    sFunc.type = "5";
                }
                string us = "";
@@ -1424,7 +1489,7 @@
        /// <summary>
        /// 群控(自定义)
        /// </summary>
        public const string GroupControl = "GroupControl";
        public const string GroupControl = "groupControl";
        /// <summary>
        /// 通用开关
        /// </summary>
HDL_ON/Entity/Function/Scene.cs
@@ -560,6 +560,10 @@
        private Function ConvertFunctionObject()
        {
            var localFunction = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.sid == sid);
            if(localFunction == null)
            {
                localFunction = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
            }
            return localFunction;
        }
@@ -629,7 +633,12 @@
            return sceneFunctionInfo;
        }
        /// <summary>
        /// 设备
        /// 场景 =scene
        /// 群控=5
        /// </summary>
        public string type = "0";
    }
    /// <summary>
HDL_ON/UI/MainPage.cs
@@ -121,6 +121,7 @@
            SPK.AirSwitch,
            SPK.PanelSocket,SPK.ElectricSocket,
            SPK.MechanicalArm,SPK.IpCam_Imou,
            SPK.GroupControl
        };
@@ -529,7 +530,10 @@
        public static int LoadEvent_BackAction()
        {
            int result = 0;
            Application.RunOnMainThread(() =>
            {
                try
            {
                if (Inverter.Ins.H5Page.Parent != null)
                {
@@ -553,6 +557,8 @@
                {
                    result = 2;//无法再后退,可以执行退到桌面
                }
                    else
                    {
                if (BasePageView.ChildrenCount > 1)
                {
                    int index = BasePageView.ChildrenCount - 1;
@@ -596,6 +602,11 @@
                {
                    result = 2;//无法再后退,可以执行退到桌面
                }
                    }
                }catch(Exception ex)
                {
                    MainPage.Log($"加载安卓后退异常:{ex.Message}");
                }
            });
            return result;
        }
@@ -607,7 +618,10 @@
        public static void Log(string msg)
        {
#if DEBUG
            if (msg.Contains("收到数据"))
            if (msg.Contains("收到数据")
                || msg.Contains("发送")
                )
                Console.WriteLine(msg);
#endif
        }
HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -931,6 +931,7 @@
                    {
                        name = "群控测试",
                        collect = true,
                        sid = "234567876545678765",
                        uids = new List<string>()
                        {
                            "1405771024583090178",
@@ -944,7 +945,7 @@
                        sids = new List<GroupControlFunction>()
                        {
                            new GroupControlFunction(){
                               sid = "light1",
                                sid = lightRgb1.sid,
                                spk = SPK.LightRGB,
                            },
                            new GroupControlFunction(){
HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -80,6 +80,10 @@
        /// </summary>
        Button btnChangeScene;
        /// <summary>
        /// 切换显示场组控按钮
        /// </summary>
        Button btnChangeGroupControl;
        /// <summary>
        /// 功能显示区域
        /// </summary>
        PageLayout contentView;
@@ -92,6 +96,10 @@
        /// </summary>
        VerticalScrolViewLayout sceneFunctionView;
        /// <summary>
        /// 组控控制区域
        /// </summary>
        VerticalScrolViewLayout gcFunctionView;
        /// <summary>
        /// 功能区域集合
        /// </summary>
        List<FrameLayout> functionViews;
@@ -100,8 +108,11 @@
#region 区域变量
        /// <summary>
        /// 当前显示对控制类型是否是设备功能控制
        /// 0 功能
        /// 1 场景
        /// 2 群控
        /// </summary>
        bool CurShowTypeIsFunction = true;
        int CurShowTypeContent = 0;
#endregion
#region 报警信息
@@ -149,10 +160,7 @@
                    bodyView.EndHeaderRefreshing();
                    Common.ApiUtlis.Ins.DownloadData();
                    LoadContentView();
                    if (!CurShowTypeIsFunction)
                    {
                        contentView.PageIndex = 1;
                    }
                    contentView.PageIndex = CurShowTypeContent;
                };
                topView = new FrameLayout()
                {
@@ -172,10 +180,7 @@
                    refreshLayout.EndHeaderRefreshing();
                    Common.ApiUtlis.Ins.DownloadData();
                    LoadContentView();
                    if(!CurShowTypeIsFunction)
                    {
                        contentView.PageIndex = 1;
                    }
                    contentView.PageIndex = CurShowTypeContent;
                };
                topView = new FrameLayout()
                {
@@ -565,6 +570,78 @@
                bodyView.AddChidren(new Button() { Height = Application.GetRealHeight(20), BackgroundColor = 0x00000000 });
                if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
                {
                    changeView = new FrameLayout()
                    {
                        //Y = Application.GetRealHeight(20) + topView.Bottom,
                        Gravity = Gravity.CenterHorizontal,
                        Width = Application.GetRealWidth(334),
                        Height = Application.GetRealHeight(62),
                        BackgroundImagePath = "Collection/ChangeViewbg.png",
                    };
                    bodyView.AddChidren(changeView);
                    btnChangeFunction = new Button()
                    {
                        X = Application.GetRealWidth(10),
                        Width = Application.GetRealWidth(114 - 10),
                        TextID = StringId.Functions,
                        SelectedTextColor = CSS_Color.MainColor,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.HeadlineFontSize,
                        TextAlignment = TextAlignment.Center,
                        IsSelected = true,
                        IsBold = true,
                    };
                    changeView.AddChidren(btnChangeFunction);
                    Button btnLine = new Button()
                    {
                        X = btnChangeFunction.Right,
                        Gravity = Gravity.CenterVertical,
                        Width = Application.GetRealWidth(1),
                        Height = Application.GetRealHeight(14),
                        BackgroundColor = CSS_Color.PromptingColor1,
                    };
                    changeView.AddChidren(btnLine);
                    btnChangeScene = new Button()
                    {
                        X = btnLine.Right,
                        Width = Application.GetRealWidth(114 - 10),
                        TextID = StringId.Scenes,
                        SelectedTextColor = CSS_Color.MainColor,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.TextFontSize,
                        TextAlignment = TextAlignment.Center,
                    };
                    changeView.AddChidren(btnChangeScene);
                    Button btnLine2 = new Button()
                    {
                        X = btnChangeScene.Right,
                        Gravity = Gravity.CenterVertical,
                        Width = Application.GetRealWidth(1),
                        Height = Application.GetRealHeight(14),
                        BackgroundColor = CSS_Color.PromptingColor1,
                    };
                    changeView.AddChidren(btnLine2);
                    btnChangeGroupControl = new Button()
                    {
                        X = btnLine2.Right,
                        Width = Application.GetRealWidth(114 - 10),
                        TextID = StringId.GroupControl,
                        SelectedTextColor = CSS_Color.MainColor,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.TextFontSize,
                        TextAlignment = TextAlignment.Center,
                    };
                    changeView.AddChidren(btnChangeGroupControl);
                }
                else
                {
                changeView = new FrameLayout()
                {
                    //Y = Application.GetRealHeight(20) + topView.Bottom,
@@ -610,6 +687,7 @@
                    TextAlignment = TextAlignment.Center,
                };
                changeView.AddChidren(btnChangeScene);
                }
                #endregion
                #region ContextView
@@ -667,12 +745,12 @@
                            sceneFunctionView = new VerticalScrolViewLayout();
                            contentView.AddChidren(sceneFunctionView);
                            LoadSceneFunctionControlZone();
                            if (CurShowTypeIsFunction)
                            contentView.PageIndex = CurShowTypeContent;
                            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
                            {
                                contentView.PageIndex = 0;
                            }else
                            {
                                contentView.PageIndex = 1;
                                gcFunctionView = new VerticalScrolViewLayout();
                                contentView.AddChidren(gcFunctionView);
                                LoadGroupControlFunctionControlZone();
                            }
                            LoadEvent_ChangeShowedFunctionType();
@@ -704,15 +782,13 @@
                sceneFunctionView = new VerticalScrolViewLayout();
                contentView.AddChidren(sceneFunctionView);
                LoadSceneFunctionControlZone();
                if (CurShowTypeIsFunction)
                if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
                {
                    contentView.PageIndex = 0;
                    gcFunctionView = new VerticalScrolViewLayout();
                    contentView.AddChidren(gcFunctionView);
                    LoadGroupControlFunctionControlZone();
                }
                else
                {
                    contentView.PageIndex = 1;
                }
                contentView.PageIndex = CurShowTypeContent;
                LoadEvent_ChangeShowedFunctionType();
@@ -739,7 +815,7 @@
                int index = 0;
                var list = new List<Function>();
                list.AddRange(FunctionList.List.GetDeviceFunctionList());
                list.AddRange(FunctionList.List.groupControls);//加入群控
                //list.AddRange(FunctionList.List.groupControls);//加入群控
                foreach (var function in list)
                {
                    //音乐模块有主从关系,需要特殊处理
@@ -833,8 +909,93 @@
            }
            deviceFunctionView.AddChidren(new Button { Height = Application.GetRealHeight(30) });
#endregion
        }
        /// <summary>
        /// 加载群控功能显示区域
        /// </summary>
        void LoadGroupControlFunctionControlZone()
        {
            #region ContextView
            gcFunctionView.RemoveAll();
            functionViews.Clear();
            var rowView = new FrameLayout();
            try
            {
                int index = 0;
                foreach (var function in FunctionList.List.groupControls)
                {
                    if (index % 2 == 0)
                    {
                        rowView = new FrameLayout()
                        {
                            Height = Application.GetRealWidth(140),
                        };
                        gcFunctionView.AddChidren(rowView);
                    }
                    var functionView_X = Application.GetRealWidth((182 + 7) * (index % 2));
                    if (index % 2 == 0)
                    {
                        functionView_X += Application.GetRealWidth(7);
                    }
                    var functionView = new FrameLayout()
                    {
                        X = functionView_X,
                        Width = Application.GetRealWidth(182),
                        Height = Application.GetRealWidth(140),
                        Radius = (uint)Application.GetRealWidth(12),
                        Tag = function.sid
                    };
                    rowView.AddChidren(functionView);
                    functionViews.Add(functionView);
                        var btnbg = new Button()
                        {
                            UnSelectedImagePath = "Collection/Functionbg.png",
                            SelectedImagePath = "Collection/FunctionOnbg.png",
                            Tag = function.sid
                        };
                        functionView.AddChidren(btnbg);
                        LoadDeviceFunctionDiv(functionView, function);
                    index++;
                }
                if (index == 0)
                {
                    var view = new FrameLayout();
                    deviceFunctionView.AddChidren(view);
                    var btnNoCollectionBg = new Button()
                    {
                        Y = Application.GetRealHeight(20),
                        Gravity = Gravity.CenterHorizontal,
                        Width = Application.GetRealWidth(180),
                        Height = Application.GetRealWidth(180),
                        UnSelectedImagePath = "Collection/NoCollectionBg.png",
                    };
                    view.AddChidren(btnNoCollectionBg);
                    var btnNoCollectionTip = new Button()
                    {
                        Height = Application.GetRealHeight(42),
                        Y = btnNoCollectionBg.Bottom,
                        TextAlignment = TextAlignment.Center,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                        //TextID = StringId.TipNoFunctionCollcetion,
                    };
                    view.AddChidren(btnNoCollectionTip);
                }
            }
            catch (Exception ex)
            {
                MainPage.Log("homepage error : " + ex.Message);
            }
            gcFunctionView.AddChidren(new Button { Height = Application.GetRealHeight(30) });
            #endregion
        }
        /// <summary>
        /// 加载场景功能显示区域
        /// </summary>
@@ -1060,6 +1221,7 @@
                    SelectedImagePath = "Collection/CollectionWhiteIcon.png",
                    UnSelectedImagePath = "Collection/CollectionIcon.png",
                };
                if (function.spk != SPK.GroupControl)//群控默认显示
                view.AddChidren(btnCollection);
                //2020-12-16 如果是成员隐藏收藏功能
                //if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -334,16 +334,9 @@
                btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                btnChangeScene.IsSelected = false;
                btnChangeScene.IsBold = false;
                CurShowTypeIsFunction = true;
                CurShowTypeContent = 0;
                contentView.PageIndex = 0;
            };
            //var client = new BlufiClient();
            //client.PostPackageLengthLimit = 128;
            //client.RequestDeviceScan();
            //client.RequestDeviceStatus();
            //client.BlufiDelegate.Blufi_DidReceiveDeviceScanResponse();
            btnChangeScene.MouseUpEventHandler = (sender, e) =>
            {
@@ -353,7 +346,7 @@
                btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                btnChangeFunction.IsSelected = false;
                btnChangeFunction.IsBold = false;
                CurShowTypeIsFunction = false;
                CurShowTypeContent = 1;
                contentView.PageIndex = 1;
            };
@@ -368,7 +361,7 @@
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                }
                else
                else if (contentView.PageIndex == 1)
                {
                    btnChangeScene.IsSelected = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
@@ -378,6 +371,93 @@
                    btnChangeFunction.IsBold = false;
                }
            };
            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
            {
                btnChangeGroupControl.MouseUpEventHandler = (sender, e) => {
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsBold = false;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    btnChangeGroupControl.IsSelected = true;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeGroupControl.IsBold = true;
                    CurShowTypeContent = 2;
                    contentView.PageIndex = 2;
                };
                btnChangeFunction.MouseUpEventHandler = (sender, e) => {
                    btnChangeFunction.IsSelected = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeFunction.IsBold = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    CurShowTypeContent = 0;
                    contentView.PageIndex = 0;
                    btnChangeGroupControl.IsSelected = false;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeGroupControl.IsBold = false;
                };
                btnChangeScene.MouseUpEventHandler = (sender, e) => {
                    btnChangeScene.IsSelected = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeScene.IsBold = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.IsBold = false;
                    CurShowTypeContent = 1;
                    contentView.PageIndex = 1;
                    btnChangeGroupControl.IsSelected = false;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeGroupControl.IsBold = false;
                };
                contentView.PageChange = (sender, e) =>
                {
                    if (contentView.PageIndex == 0)
                    {
                        btnChangeFunction.IsSelected = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeFunction.IsBold = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                        btnChangeGroupControl.IsSelected = false;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeGroupControl.IsBold = false;
                    }
                    else if (contentView.PageIndex == 1)
                    {
                        btnChangeScene.IsSelected = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeScene.IsBold = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.IsBold = false;
                        btnChangeGroupControl.IsSelected = false;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeGroupControl.IsBold = false;
                    }
                    else if (contentView.PageIndex == 2)
                    {
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsBold = false;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                        btnChangeGroupControl.IsSelected = true;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeGroupControl.IsBold = true;
                    }
                };
            }
        }
        /// <summary>
HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -446,6 +446,7 @@
            };
            if ( !SPK.ArmSensorSpkList().Contains(function.spk)
                && function.spk != SPK.DoorLock
                && function.spk != SPK.GroupControl
                && !SPK.EnvironDeviceSpkList().Contains( function.spk))//!DB_ResidenceData.Instance.CurrentRegion.isOtherShare &&
            {
                bodyDiv.AddChidren(btnCollectionIcon);
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -995,6 +995,7 @@
                switch (outputTarget.target_type)
                {
                    case "1":
                    case "5":
                        {
                            //用sid找到设备;
                            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 != "")
@@ -1116,6 +1103,60 @@
                                                targetView.btnStateColor.BackgroundColor = new LogicView.RGBColorView().GetBackgroundColor(rgb);
                                            }
                                        }
                                    }
                                    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;
@@ -1681,6 +1722,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)
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
@@ -500,6 +501,14 @@
            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);
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;
                //插座(有USB)
                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);
@@ -806,6 +886,11 @@
                                }
                            }
                            break;
                        case SPK.GroupControl:
                            {
                                outputDevice.target_type = "5";
                            }
                            break;
                    }
                    outputDevice.status.AddRange(dicSateteList);
@@ -920,6 +1005,11 @@
                            }
                        }
                        break;
                    case SPK.GroupControl:
                        {
                            keyVlaue = "colorful";
                        }
                        break;
                }
                //数据封装
                AddDictionary(keyVlaue, strValue);
@@ -951,6 +1041,7 @@
                    case SPK.LightRGB:
                    case SPK.LightRGBW:
                    case SPK.LightCCT:
                    case SPK.GroupControl:
                        {
                            keyVlaue = "brightness";
                        }
@@ -995,6 +1086,7 @@
                switch (device.spk)
                {
                    case SPK.LightCCT:
                    case SPK.GroupControl:
                        {
                            keyVlaue = "cct";
                        }
@@ -1028,6 +1120,7 @@
                switch (device.spk)
                {
                    case SPK.LightRGB:
                    case SPK.GroupControl:
                        {
                            keyVlaue = "rgb";
                        }
HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
@@ -433,6 +433,8 @@
                    var pack = pm.GetSceneInfo(scene.userSceneId);
                    if (pack.Code == StateCode.SUCCESS)
                    {
                        if (pack.Data != null)
                        {
                        var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(pack.Data.ToString());
                        var tempScene = sceneList.Find((obj) => obj.userSceneId == scene.userSceneId);
                        if (tempScene != null)
@@ -441,6 +443,7 @@
                            scene.delay = tempScene.delay;
                            scene.roomIds = tempScene.roomIds;
                            scene.functions = tempScene.functions;
                            }
                        }
                        Application.RunOnMainThread(() =>
                        {
@@ -482,12 +485,19 @@
                    scene.functions.Remove(scenefunction);
                    continue;
                }
                try
                {
                //将spk实体里面的min max值放入场景功能实体里,要不然数据会丢失 2022-06-21 16:06:45
                foreach (var tt in scenefunction.status) {
                    foreach (var tt in scenefunction.status)
                    {
                    tt.min = scenefunction.localFunction.GetAttribute(tt.key).min;
                    tt.max = scenefunction.localFunction.GetAttribute(tt.key).max;
                    tt.valueList = scenefunction.localFunction.GetAttribute(tt.key).value;
                }
                }catch(Exception ex)
                {
                    MainPage.Log($"场景加载功能列表异常:{ex.Message}");
                }
                i++;
                var row = new RowLayout()
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))
                {
HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs
@@ -1903,7 +1903,7 @@
            }
            LoadFunctionRow(onOffStatus);
            if (sceneFunction.localFunction.spk == SPK.LightRGB)
            if (sceneFunction.localFunction.spk == SPK.LightRGB || sceneFunction.localFunction.spk == SPK.GroupControl)
            {
                var colorfulStatus = sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Colorful);
                if (colorfulStatus != null)
@@ -1982,6 +1982,9 @@
            btnConfrim.MouseUpEventHandler = (sender, e) =>
            {
                if (sceneFunction.localFunction.spk == SPK.GroupControl) { }
                else
                {
                if (isOnStatus)
                {
                    if (isColorful)
@@ -2001,11 +2004,10 @@
                }
                else
                {
                    if (isColorful) { } else { }
                    sceneFunction.status.Clear();
                    sceneFunction.status.Add(new SceneFunctionStatus() { key = FunctionAttributeKey.OnOff, value = "off" });
                }
                }
                var temp = scene.functions.Find((obj) => obj.sid == sceneFunction.sid);
                
                if (temp != null)
@@ -2066,7 +2068,7 @@
                                {
                                    if (view.Tag.ToString() != FunctionAttributeKey.OnOff)
                                    {
                                        if (isColorful)
                                        if (isColorful && sceneFunction.localFunction.spk == SPK.LightRGB)
                                        {
                                            if(view.Tag.ToString() != FunctionAttributeKey.Colorful)
                                            {
HDL_ON/UI/UI2/4-PersonalCenter/CombinedDimming/AddGroupControlPage.cs
@@ -549,6 +549,12 @@
                                var groupControlTypes = Newtonsoft.Json.JsonConvert.DeserializeObject<List<GroupControlType>>(pack.Data.ToString());
                                if (groupControlTypes != null && groupControlTypes.Count > 0)
                                {
                                    //groupControlType = new GroupControlType {
                                    //      type = "LIGHT",
                                    //        typeName ="灯光控制",
                                    //        spks = new List<string> { "light.switch" },
                                    //         spkAttrs = new List<string> { "on_off" }
                                    //};
                                    groupControlType = groupControlTypes[0];
                                    Application.RunOnMainThread(() => {
                                        LoadLightRow(lightList);
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
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;
            };
        }
HDL_ON/UI/UI2/FuntionControlView/Light/GroupControlPage_V2.cs
@@ -84,11 +84,11 @@
                UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                IsSelected = function.collect
            };
            controlView.AddChidren(btnCollection);
            btnCollection.MouseUpEventHandler += (sender, e) => {
                btnCollection.IsSelected = function.collect = btnCollection_Out.IsSelected = !btnCollection.IsSelected;
                function.CollectFunction();
            };
            //controlView.AddChidren(btnCollection);
            //btnCollection.MouseUpEventHandler += (sender, e) => {
            //    btnCollection.IsSelected = function.collect = btnCollection_Out.IsSelected = !btnCollection.IsSelected;
            //    function.CollectFunction();
            //};
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)
                        {