From 592974441a4df95fffd9167c90192da1a390b1c2 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期二, 06 六月 2023 11:51:12 +0800
Subject: [PATCH] Merge branch 'Dev-Branch'

---
 HDL_ON/Entity/Function/Function.cs |  456 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 424 insertions(+), 32 deletions(-)

diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 6e3b439..171de78 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -88,7 +88,7 @@
         {
             var attrs = new List<string>();
 
-            foreach(var attr in  attributes)
+            foreach (var attr in attributes)
             {
                 attrs.Add(attr.key);
             }
@@ -109,14 +109,36 @@
         /// </summary>
         /// <param name="key"></param>
         /// <returns></returns>
-        public string GetAttrState(string key)
+        public string GetAttrState(string key , string defaultValue = "0")
         {
+            //涓�绾ф煡璇eyValue鍊�
             var attrState = attributes.Find((s) => s.key == key.ToString());
-            if (attrState == null || string.IsNullOrEmpty(attrState.state))
+            if (attrState == null)
+            {
+                return defaultValue;
+            }
+            if (string.IsNullOrEmpty(attrState.state))
+            {
+                //浜岀骇鏌ヨkeyValue鍊�
+                return GetOriginalState(key);
+            }
+            return attrState.state;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍒濆鐘舵��
+        /// 榛樿鍊硷細0
+        /// </summary>
+        /// <param name="key">璇泙瀹氫箟鐨勫睘鎬у��</param>
+        /// <returns></returns>
+        public string GetOriginalState(string key)
+        {
+            var originalState = status.Find((s) => s.key == key.ToString());
+            if (originalState == null || string.IsNullOrEmpty(originalState.value))
             {
                 return "0";
             }
-            return attrState.state;
+            return originalState.value;
         }
         /// <summary>
         /// 璁剧疆灞炴�х姸鎬�
@@ -221,12 +243,43 @@
         /// <summary>
         /// 澶囨敞
         /// </summary>
-        public string name;
+        public string name = "";
+        /// <summary>
+        /// 璁惧缁戝畾鐨刪omeId
+        /// </summary>
+        private string _homeId = "";
+        public string homeId
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_homeId))
+                {
+                    return DB_ResidenceData.Instance.CurrentRegion.id;
+                }
+                else
+                {
+                    return _homeId;
+                }
+            }
+            set
+            {
+                _homeId = value;
+            }
+        }
+
         /// <summary>
         /// 璁惧ID
         /// 浜戠璐熻矗鐢熸垚
         /// </summary>
         public string deviceId = "0";
+        /// <summary>
+        /// 绗笁鏂硅澶囨墿灞昳d
+        /// </summary>
+        public string extDevId = string.Empty;
+        /// <summary>
+        /// 鐗╃悊璁惧(妯″潡)鍨嬪彿
+        /// </summary>
+        public string omodel =string.Empty;
         /// <summary>
         /// 璁惧spk
         /// </summary>
@@ -327,6 +380,26 @@
         public List<string> roomIds = new List<string>();
 
         /// <summary>
+        /// 瀛樺偍灞炴�ч厤缃�
+        /// 鐜浼犳劅鍣ㄧ殑绛夌骇
+        /// </summary>
+        public List<AttrKeyConfig> attrKeyConfigs = new List<AttrKeyConfig>();
+
+        public List<AttrKeyConfig> GetAttrKeyConfigs(string key)
+        {
+            if (attrKeyConfigs.Count == 0)
+            {
+                switch (key)
+                {
+                    case "pm2.5":
+                        //
+                        break;
+                }
+            }
+            return attrKeyConfigs;
+        }
+
+        /// <summary>
         /// bus鍗忚鏁版嵁鏍煎紡
         /// 浣跨敤A鍗忚鎺у埗鏃讹紝鏀瑰睘鎬т负绌�
         /// </summary>
@@ -335,10 +408,27 @@
         /// 鏄惁鏀惰棌
         /// </summary>
         public bool collect = false;
+
+        private bool _online = false;
         /// <summary>
         /// 鏄惁鍦ㄧ嚎
         /// </summary>
-        public bool online = true;
+        public bool online
+        {
+            get
+            {
+                return true;
+            }
+            set
+            {
+                _online = value;
+            }
+        }
+
+        /// <summary>
+        /// 鐜闈㈡澘 缁戝畾鐨� 璁惧鐩爣sid鍒楄〃
+        /// </summary>
+        public List<string> targetSids = new List<string>();
         /// <summary>
         /// 浜戠鏁版嵁鍒涘缓鐨勬椂闂�
         /// </summary>
@@ -348,7 +438,17 @@
         /// </summary>
         public string modifyTime = "";
 
+        /// <summary>
+        /// 鎵╁睍淇℃伅
+        /// </summary>
+        public ExtSet extSet = new ExtSet();
+
         #endregion
+
+
+        //public void 
+
+
         /// <summary>
         /// 寤舵椂
         /// </summary>
@@ -358,6 +458,31 @@
         /// </summary>
         [Newtonsoft.Json.JsonIgnore]
         public string lastState = "";
+        /// <summary>
+        /// 鑾峰彇鐘舵�佹樉绀烘枃鏈�
+        /// </summary>
+        /// <returns></returns>
+        public string GetLastStateText()
+        {
+            var text = "";
+            switch (spk)
+            {
+                case SPK.HvacCac:
+                    switch (GetAttrState(FunctionAttributeKey.Mode))
+                    {
+                        case "cool":
+                            text = Language.StringByID(StringId.Cool);
+                            break;
+                        case "heat":
+                            text = Language.StringByID(StringId.Heat);
+                            break;
+                    }
+
+                    break;
+                    
+            }
+            return text;
+        }
 
         FunctionAttributes _trait_on_off;
         [Newtonsoft.Json.JsonIgnore]
@@ -381,7 +506,7 @@
                         _trait_on_off.curValue = "off";
                     }
                 }
-                if(_trait_on_off.curValue.ToString() != "on"&& _trait_on_off.curValue.ToString() != "off" && _trait_on_off.curValue.ToString() != "stop")
+                if (_trait_on_off.curValue.ToString() != "on" && _trait_on_off.curValue.ToString() != "off" && _trait_on_off.curValue.ToString() != "stop")
                 {
                     _trait_on_off.curValue = "off";
                 }
@@ -402,6 +527,14 @@
                 SetAttrState(sta.key, sta.value);
             }
         }
+        /// <summary>
+        /// 鍔熻兘鍒楄〃鎺掑簭
+        /// </summary>
+        public int FunctionOrderNumber = 9999;
+        /// <summary>
+        /// 鎴块棿鍒楄〃鎺掑簭
+        /// </summary>
+        public int RoomOrderNumber = 9999;
 
 
         /// <summary>
@@ -432,13 +565,27 @@
 
             new System.Threading.Thread(() =>
             {
-                if (collect)
-                {
-                    result = ApiUtlis.Ins.HttpRequest.CollectDevice(deviceId).Code;
+                if (spk == SPK.GroupControl) {
+                    var groupControl = FunctionList.List.groupControls.Find((obj) => obj.sid == sid);
+                    if (collect)
+                    {
+                        result = ApiUtlis.Ins.HttpRequest.CollectGroupControl(groupControl.userDeviceGroupControlId).Code;
+                    }
+                    else
+                    {
+                        result = ApiUtlis.Ins.HttpRequest.CancelCollectGroupControl(groupControl.userDeviceGroupControlId).Code;
+                    }
                 }
                 else
                 {
-                    result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(deviceId).Code;
+                    if (collect)
+                    {
+                        result = ApiUtlis.Ins.HttpRequest.CollectDevice(deviceId).Code;
+                    }
+                    else
+                    {
+                        result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(deviceId).Code;
+                    }
                 }
                 //鎻愮ず閿欒
                 if (result != StateCode.SUCCESS)
@@ -448,7 +595,7 @@
                         collect = !collect;
                         IMessageCommon.Current.ShowErrorInfoAlter(result);
                     });
-                }else
+                } else
                 {
                     Application.RunOnMainThread(() =>
                     {
@@ -473,7 +620,7 @@
                 }
                 else
                 {
-                    result = ApiUtlis.Ins.HttpRequest.UnbindDeviceToRoom(deviceId,roomId);
+                    result = ApiUtlis.Ins.HttpRequest.UnbindDeviceToRoom(deviceId, roomId);
                 }
                 //鎻愮ず閿欒
                 if (result != StateCode.SUCCESS)
@@ -516,9 +663,9 @@
                 {
                     roomNameList += ",";
                 }
-                roomNameList += findRoom.floorName +"-"+ findRoom.roomName;
+                roomNameList += findRoom.floorName + "-" + findRoom.roomName;
             }
-            if (roomNameList == "" )
+            if (roomNameList == "")
             {
                 roomNameList = Language.StringByID(StringId.WholeZone);
             }
@@ -621,6 +768,18 @@
             var sFunc = new SceneFunction();
             foreach (var attr in attributes)
             {
+                //绐楀笜鍚屾椂鍙戦�佸紑鍏宠窡鐧惧垎姣斾細鏈夐棶棰橈紝
+                if(spk == SPK.CurtainRoller || spk == SPK.CurtainTrietex || spk == SPK.CurtainDream)
+                {
+                    if (attr.key == FunctionAttributeKey.OnOff)
+                    {
+                        if (attributes.Find((obj) => obj.key == FunctionAttributeKey.Percent) != null)
+                        {
+                            continue;
+                        }
+                    }
+                }
+
                 switch (attr.key)
                 {
                     case FunctionAttributeKey.OnOff:
@@ -631,14 +790,16 @@
                     case FunctionAttributeKey.Percent:
                     case FunctionAttributeKey.CCT:
                     case FunctionAttributeKey.RGB:
-                    //case FunctionAttributeKey.FadeTime:
+                    case FunctionAttributeKey.Angle:
+                    case "security":
+                        //case FunctionAttributeKey.FadeTime:
                         if (attr.curValue.ToString() == "{}")
                         {
                             if (attr.key == FunctionAttributeKey.OnOff)
                             {
                                 attr.curValue = "off";
                             }
-                            else if (attr.key == FunctionAttributeKey.Mode )
+                            else if (attr.key == FunctionAttributeKey.Mode)
                             {
                                 if (DB_ResidenceData.Instance.GatewayType == 0)
                                 {
@@ -656,7 +817,11 @@
                                     }
                                 }
                             }
-                            else 
+                            else if(attr.key == "security")
+                            {
+                                attr.curValue = "false";
+                            }
+                            else
                             {
                                 attr.curValue = "0";
                             }
@@ -709,7 +874,7 @@
             return sendDataObj;
         }
 
-        public AlinkDoorlockObj GetGatewayAlinkDoorlockData(string userId,string extStr)
+        public AlinkDoorlockObj GetGatewayAlinkDoorlockData(string userId, string extStr)
         {
             var sendDataObj = new AlinkDoorlockObj();
             sendDataObj.id = Control.Ins.msg_id.ToString();
@@ -856,6 +1021,11 @@
         /// </summary>
         public List<string> value = new List<string>();
         /// <summary>
+        /// 姝ヨ繘
+        /// 绌鸿皟娓╁害鎺у埗 0.5 1
+        /// </summary>
+        public string step = "1";
+        /// <summary>
         /// 鏈�澶у��
         /// </summary>
         public int max = 100;
@@ -884,6 +1054,10 @@
     {
         public const string _null = "";
         /// <summary>
+        /// 瀹夐槻甯冮槻鐘舵��
+        /// </summary>
+        public const string Security = "security";
+        /// <summary>
         /// 寮�鍏�
         /// </summary>
         public const string OnOff = "on_off";
@@ -895,6 +1069,7 @@
         /// 棰滆壊
         /// </summary>
         public const string RGB = "rgb";
+        public const string RGBW = "rgbw";
         /// <summary>
         /// 娓愬彉鏃堕棿
         /// </summary>
@@ -957,9 +1132,42 @@
         /// </summary>
         public const string Percent = "percent";
         /// <summary>
+        /// 瑙掑害
+        /// </summary>
+        public const string Angle = "angle";
+        /// <summary>
         /// 瀹ゅ唴娓╁害
         /// </summary>
         public const string RoomTemp = "room_temp";
+        /// <summary>
+        /// 瀹ゅ唴婀垮害
+        /// </summary>
+        public const string RoomHumidity = "room_humidity";
+        /// <summary>
+        /// 闇茬偣娓╁害
+        /// </summary>
+        public const string dew_point_temp = "dew_point_temp";
+        /// <summary>
+        /// 琛ㄩ潰娓╁害
+        /// </summary>
+        public const string surface_temp = "surface_temp";
+        /// <summary>
+        /// 瀹ゅ唴婀垮害琛ュ伩鍊�
+        /// </summary>
+        public const string room_humidity_cc = "room_humidity_cc";
+        /// <summary>
+        /// 瀹ゅ唴娓╁害琛ュ伩鍊�
+        /// </summary>
+        public const string room_temp_cc = "room_temp_cc";
+        /// <summary>
+        /// 姣涚粏闃�闂�
+        /// </summary>
+        public const string cac_valve = "cac_valve";
+        /// <summary>
+        /// 鍦版殩闃�闂�
+        /// </summary>
+        public const string fh_valve = "fh_valve";
+
         /// <summary>
         /// value
         /// </summary>
@@ -991,6 +1199,16 @@
         /// 姣背娉紶鎰熷櫒锛屽姩浣滅姸鎬�
         /// </summary>
         public const string ActionStatus = "action_state";
+        /// <summary>
+        /// 
+        /// </summary>
+        public const string PeopleNum = "people_num";
+        public const string PeopleId = "people_id";
+        /// <summary>
+        /// 姣背娉紶鎰熷櫒 浜虹墿鍔ㄤ綔
+        /// </summary>
+        public const string TargetStatus = "target_status";//0绌猴紝1璧帮紝2璺戯紝3鍧愶紝4璺屽�掞紝5绔�
+
         /// <summary>
         /// 鐢甸噺鐘舵��
         /// </summary>
@@ -1055,6 +1273,7 @@
         /// 鎵撳紑绛夌骇(椋庢墖)
         /// </summary>
         public const string OpenLevel = "openLevel";
+        public const string fan_speed_percent = "fan_speed_percent";
         /// <summary>
         /// 绾㈠鎸夐敭
         /// </summary>
@@ -1140,7 +1359,7 @@
                 try
                 {
                     return Convert.ToByte(loopId, 16);
-                }catch
+                } catch
                 {
                     return 0;
                 }
@@ -1149,21 +1368,88 @@
 
         public string loopId;
     }
-
+    /// <summary>
+    /// Tag 鍔熻兘SPK
+    /// </summary>
     public static class SPK
     {
+        /// <summary>
+        /// 缇ゆ帶锛堣嚜瀹氫箟锛�
+        /// </summary>
+        public const string GroupControl = "GroupControl";
+        /// <summary>
+        /// 閫氱敤寮�鍏�
+        /// </summary>
+        public const string OtherCommon = "other.common";
+        /// <summary>
+        /// 澶у崕鎽勫儚澶�
+        /// </summary>
+        public const string IpCam_Imou = "security.ipcam.imou";
+        /// <summary>
+        /// 鏈烘鎵�
+        /// </summary>
+        public const string MechanicalArm = "electrical.mechanical_arm";
+        /// <summary>
+        /// 绌鸿皟绉戞妧绯荤粺锛堢豢寤猴級
+        /// 鎬绘帶
+        /// </summary>
+        public const string AcstParent = "acst.parent";
+        /// <summary>
+        /// 绌鸿皟绉戞妧绯荤粺锛堢豢寤猴級
+        /// 瀛愭帶
+        /// </summary>
+        public const string AcstSub = "acst.sub";
+
         /// <summary>
         /// 闂ㄩ攣
         /// </summary>
         public const string DoorLock = "security.door";
-
+        
+        /// <summary>
+        /// 闂ㄩ攣spk鍒楄〃
+        /// </summary>
+        /// <returns></returns>
         public static List<string> GetDoorLockSPKList()
         {
             var list = new List<string>();
             list.Add(DoorLock);
             return list;
         }
+        
 
+        /// <summary>
+        /// 鐚溂
+        /// </summary>
+        public const string Peephole = "peephole";
+        /// <summary>
+        /// 钀ょ煶瑙嗛闂ㄩ攣
+        /// </summary>
+        public const string VideoDoorLock="security.door.ezviz";
+        /// <summary>
+        /// 钀ょ煶鎽勫儚澶�
+        /// </summary>
+        public const string Ev_Ipcam = "security.ipcam.ez";
+        /// <summary>
+        /// 钀ょ煶瑙嗛闂ㄩ攣spk鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public static List<string> GetVideoDoorLockSPKList()
+        {
+            var list = new List<string>();
+            list.Add(VideoDoorLock);
+            return list;
+        }
+
+        /// <summary>
+        /// 钀ょ煶鎽勫儚澶磗pk鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public static List<string> GetEvIpcamSPKList()
+        {
+            var list = new List<string>();
+            list.Add(Ev_Ipcam);
+            return list;
+        }
 
         #region 鐏厜
         /// <summary>
@@ -1220,6 +1506,10 @@
         /// 锛堝嵎甯橈級
         /// </summary>
         public const string CurtainRoller = "curtain.roller";
+        /// <summary>
+        /// 姊﹀够甯�
+        /// </summary>
+        public const string CurtainDream = "curtain.dream";
 
         /// <summary>
         /// 绐楀笜spk鍒楄〃
@@ -1232,6 +1522,7 @@
             spkList.Add(CurtainSwitch);
             spkList.Add(CurtainShades);
             spkList.Add(CurtainTrietex);
+            spkList.Add(CurtainDream);
             return spkList;
         }
         #endregion
@@ -1244,14 +1535,14 @@
         /// <summary>
         /// 锛堢孩澶栫┖璋冿級
         /// </summary>
-        public const string AcIr= "ir.ac";
+        public const string AcIr = "ir.ac";
         /// <summary>
         /// 绌鸿皟
         /// </summary>
         public const string HvacAC = "hvac.ac";
         /// <summary>
         /// 姣涚粏绠$┖璋�
-        /// </summary>
+        /// </summaryc
         public const string HvacCac = "hvac.cac";
 
         /// <summary>
@@ -1327,6 +1618,14 @@
 
         #region 鑳芥簮
         /// <summary>
+        /// 閫嗗彉鍣�
+        /// </summary>
+        public const string Inverter = "energy.inverter";
+        /// <summary>
+        /// 涓夌浉閫嗗彉鍣�
+        /// </summary>
+        public const string InverterRst = "energy.inverter_rst";
+        /// <summary>
         /// 鑳芥簮妯″潡
         /// </summary>
         public const string EnergyStandard = "energy.standard";
@@ -1382,6 +1681,10 @@
         /// </summary>
         public const string SensorPir = "sensor.pir";
         /// <summary>
+        /// 浜轰綋瀛樺湪浼犳劅鍣�
+        /// </summary>
+        public const string SensorPirHold = "sensor.pir_hold";
+        /// <summary>
         /// 锛堥棬绐椾紶鎰熷櫒锛�
         /// </summary>
         public const string SensorDoorWindow = "sensor.doorwindow";
@@ -1420,6 +1723,14 @@
         public const string SenesorMegahealth = "sensor.megahealth";
         public const string SenesorMegahealth2 = "sensor.megahealth.zg";
         /// <summary>
+        /// 姣背娉紶鎰熷櫒锛堝Э鎬佺増锛�
+        /// </summary>
+        public const string SensorMmvPose = "sensor.mmv_pose";
+        /// <summary>
+        /// 绱ф�ュ懠鍙�
+        /// </summary>
+        public const string SensorHelp = "sensor.help";
+        /// <summary>
         /// 瀹夐槻浼犳劅鍣╯pk鍒楄〃
         /// </summary>
         /// <returns></returns>
@@ -1428,6 +1739,8 @@
             var spkList = new List<string>();
             //spkList.Add(SensorLight);
             spkList.Add(SensorPir);
+            spkList.Add(SensorPirHold);
+            spkList.Add(SensorHelp);
             spkList.Add(SensorDoorWindow);
             spkList.Add(SensorSmoke);
             spkList.Add(SensorWater);
@@ -1439,11 +1752,29 @@
             spkList.Add(SensorDryContact2);
             spkList.Add(SenesorMegahealth);
             spkList.Add(SenesorMegahealth2);
+            spkList.Add(SensorMmvPose);
             return spkList;
         }
         #endregion
 
+        public const string PanelEnvironment = "screen.panel";
+        /// <summary>
+        /// 闈㈡澘spk鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public static List<string> PanelSpkList()
+        {
+            var spkList = new List<string>();
+            spkList.Add(SensorHelp);
+            spkList.Add(PanelEnvironment);
+            return spkList;
+        }
+
         #region 鐜浼犳劅鍣�
+        /// <summary>
+        /// 锛圥M10浼犳劅鍣級
+        /// </summary>
+        public const string SensorPm10 = "sensor.pm10";
         /// <summary>
         /// 锛堟俯搴︿紶鎰熷櫒锛�
         /// </summary>
@@ -1493,11 +1824,12 @@
         {
             var spkList = new List<string>();
             spkList.Add(SensorTemperature);
+            spkList.Add(SensorPm10);
             spkList.Add(SensorPm25);
             spkList.Add(SensorCO2);
             spkList.Add(SensorTVOC);
             spkList.Add(SensorHumidity);
-            spkList.Add(SensorEnvironment);
+            spkList.Add(SensorEnvironment); spkList.Add(SensorEnvironmentHailin);
             spkList.Add(SensorEnvironment2);
             spkList.Add(SensorEnvironment3);
             spkList.Add(SensorHcho);
@@ -1511,6 +1843,7 @@
         {
             var spkList = new List<string>();
             spkList.Add(SensorTemperature);
+            spkList.Add(SensorPm10);
             spkList.Add(SensorPm25);
             spkList.Add(SensorCO2);
             spkList.Add(SensorTVOC);
@@ -1526,7 +1859,7 @@
         public static List<string> EvironmentSensorList()
         {
             var spkList = new List<string>();
-            spkList.Add(SensorEnvironment);
+            spkList.Add(SensorEnvironment); spkList.Add(SensorEnvironmentHailin);
             spkList.Add(SensorEnvironment2);
             spkList.Add(SensorEnvironment3);
             return spkList;
@@ -1674,6 +2007,13 @@
         }
         #endregion
 
+        #region 鍙瀵硅
+        /// <summary>
+        /// HDL鍙瀵硅
+        /// </summary>
+        public const string doorgate="door.gate";
+        #endregion
+
         #region 绗笁鏂箂pk鍒楄〃
         /// <summary>
         /// 鑾峰彇鎵�鏈夌涓夋柟鍝佺墝鍔熻兘鐨剆pk
@@ -1690,6 +2030,7 @@
             spkList.Add(ElectricTuyaWaterValve2);
             spkList.Add(ElectricTuyaWeepRobot);
             spkList.Add(ElectricTuyaWeepRobot2);
+            spkList.Add(SensorMmvPose);
             spkList.Add(SenesorMegahealth);
             spkList.Add(SenesorMegahealth2);
             return spkList;
@@ -1715,7 +2056,7 @@
                     list.Add(ElectricTuyaWeepRobot2);
                     break;
                 case BrandType.All3tyBrand:
-                    list.Add(SenesorMegahealth);//鍏嗚
+                    list.Add(SenesorMegahealth2);//鍏嗚
                     break;
             }
             return list;
@@ -1802,9 +2143,60 @@
     //}
 
 
-public class VersionInfo
-{
-    public string module = "";
-    public string version = "";
-}
+    public class VersionInfo
+    {
+        public string module = "";
+        public string version = "";
+    }
+
+    /// <summary>
+    /// 鍔熻兘灞炴�х浉鍏抽厤缃俊鎭�
+    /// 鐜浼犳劅鍣ㄧ瓑绾т娇鐢�
+    /// </summary>
+    public class AttrKeyConfig
+    {
+        public string key = string.Empty;
+        /// <summary>
+        /// 閰嶇疆绫诲瀷
+        /// interval 鍖洪棿
+        /// 鐩墠鍙敮鎸侊細interval
+        /// </summary>
+        public string type = string.Empty;
+
+        public string unit = string.Empty;
+
+        public List<AttrKeyInfo> configs = new List<AttrKeyInfo>();
+
+    }
+
+    public class AttrKeyInfo
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string start = string.Empty;
+        /// <summary>
+        /// 
+        /// </summary>
+        public string end = string.Empty;
+        /// <summary>
+        /// 
+        /// </summary>
+        public string color = string.Empty;
+        /// <summary>
+        /// 鎻忚堪
+        /// </summary>
+        public string desc = string.Empty;
+    }
+
+    /// <summary>
+    /// 鎵╁睍淇℃伅璁剧疆
+    /// </summary>
+    public class ExtSet
+    {
+        /// <summary>
+        /// 鏄惁寮�鍚疄楠屽妯″紡
+        /// </summary>
+        public bool labModel = false;
+    }
 }

--
Gitblit v1.8.0