From f23ad1b3f9f6193f35f72104d690b21dc67d5c1f Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期一, 06 七月 2020 12:35:25 +0800
Subject: [PATCH] 去掉了访问外网的异步

---
 ZigbeeApp/Shared/Common/Device.cs |  228 +++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 164 insertions(+), 64 deletions(-)

diff --git a/ZigbeeApp/Shared/Common/Device.cs b/ZigbeeApp/Shared/Common/Device.cs
index bada159..a436fb3 100755
--- a/ZigbeeApp/Shared/Common/Device.cs
+++ b/ZigbeeApp/Shared/Common/Device.cs
@@ -249,6 +249,7 @@
             }
 
             //娣诲姞璁惧鐨勭紦瀛�
+            var listDriveDevice = new List<CommonDevice>();
             for (int i = 0; i < listDevice.Count; i++)
             {
                 var device = listDevice[i];
@@ -267,24 +268,27 @@
                 }
                 //鑾峰彇璁惧鐨勫浐瀹氬睘鎬�
                 HdlDeviceFixedAttributeLogic.Current.SetAllFixedAttributeToDevice(device);
-            }
-
-            for (int i = 0; i < listDevice.Count; i++)
-            {
-                var device = listDevice[i];
                 //瀵规湭鍛藉悕鐨勮櫄鎷熻澶囬噸鏂板懡鍚�
                 if (device.DriveCode > 0 && this.GetSimpleEpointName(device) == string.Empty)
                 {
-                    //鏍规嵁璁惧绫诲瀷鑾峰彇鍚嶇О
-                    var dName = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false);
-                    //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍�
-                    dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
-
-                    HdlThreadLogic.Current.RunThread(() =>
-                    {
-                        this.ReName(device, dName, ShowErrorMode.NO);
-                    });
+                    listDriveDevice.Add(device);
                 }
+            }
+            if (listDriveDevice.Count > 0)
+            {
+                //濡傛灉铏氭嫙璁惧杩樻病鏈夊悕瀛楃殑璇�
+                HdlThreadLogic.Current.RunThread(() =>
+                {
+                    //濡傛灉涓嶈繖鏍锋斁鍦ㄤ竴涓嚎绋嬮噷,鏈夊彲鑳藉Dictionary浜х敓褰卞搷
+                    foreach (var myDevice in listDriveDevice)
+                    {
+                        //鏍规嵁璁惧绫诲瀷鑾峰彇鍚嶇О
+                        var dName = this.GetDeviceObjectText(new List<CommonDevice>() { myDevice }, false);
+                        //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍�
+                        dName += "(" + myDevice.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
+                        this.ReName(myDevice, dName, ShowErrorMode.NO);
+                    }
+                });
             }
 
             //鍙湁瀹屽叏鑾峰彇鐨勬椂鍊�,鎵嶄細鍘诲鐞嗗垹闄ょ殑闂
@@ -547,7 +551,7 @@
 
             //鑾峰彇缂栬緫璁惧Mac鍚嶅瓧鐨勫懡浠ゅ瓧绗�
             var sendData = this.GetReDeviceMacNameCommandText(device.DeviceAddr, device.DeviceEpoint, macName);
-            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "MacRename", sendData, "MacRename_Respon");
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "MacRename", sendData, "MacRename_Respon", 8);
             if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
             {
                 return null;
@@ -574,7 +578,7 @@
             }
             //鑾峰彇缂栬緫璁惧绔偣鍚嶅瓧鐨勫懡浠ゅ瓧绗�
             var sendData = this.GetReDeviceEpointNameCommandText(device.DeviceAddr, device.DeviceEpoint, deviceName);
-            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "DeviceRename", sendData, "DeviceRenameRespon");
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "DeviceRename", sendData, "DeviceRenameRespon", 8);
             if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
             {
                 return null;
@@ -978,13 +982,20 @@
         public List<CommonDevice> GetMutilfunctionPanelByMac(List<CommonDevice> listDevice, bool sort = true)
         {
             //鍜屽姜鍝ャ�佽澶囧拰浜у搧閮ㄥ悓浜嬬‘璁わ細
-            //绠�绾﹀鍔熻兘闈㈡澘[涓嶆樉绀哄浣欑殑鍥炶矾锛屽彧鏄剧ず鎼哄甫鐨�2涓户鐢靛櫒鍜�1涓俯婀垮害浼犳劅鍣�
+            //绠�绾﹀鍔熻兘闈㈡澘[涓嶆樉绀哄浣欑殑鍥炶矾锛屽彧鏄剧ず鎼哄甫鐨�2涓户鐢靛櫒锛�1涓俯搴︿紶鎰熷櫒锛�1涓箍搴︿紶鎰熷櫒
             var list = new List<CommonDevice>();
             foreach (var dev in listDevice)
             {
                 if (dev.Type == DeviceType.TemperatureSensor)
                 {
                     if (dev.DeviceEpoint == 64)
+                    {
+                        list.Add(dev);
+                    }
+                }
+                else if (dev.Type == DeviceType.FreshAirHumiditySensor)
+                {
+                    if (dev.DeviceEpoint == 65)
                     {
                         list.Add(dev);
                     }
@@ -1008,6 +1019,40 @@
                 return -1;
             });
 
+            return list;
+        }
+
+        /// <summary>
+        /// 鏍规嵁MAC鍦板潃,鑾峰彇鏂伴銆佺畝绾︾幆澧冮潰鏉垮叏閮ㄥ洖璺殑璁惧瀵硅薄
+        /// </summary>
+        /// <param name="listDevice"></param>
+        /// <returns></returns>
+        public List<CommonDevice> GetPanelMatchEpointByMac(List<CommonDevice> listDevice, bool sort = true)
+        { 
+            var list = new List<CommonDevice>();
+            foreach (var dev in listDevice)
+            {
+                if (dev.Type == DeviceType.TemperatureSensor)
+                {
+                    list.Add(dev);
+                }
+                else if (dev.Type == DeviceType.FreshAirHumiditySensor)
+                {
+                    list.Add(dev);
+                }  
+            }
+            if (sort == false)
+            {
+                return list;
+            } 
+            list.Sort((obj1, obj2) => {
+
+                if (obj1.DeviceEpoint > obj2.DeviceEpoint)
+                {
+                    return 1;
+                }
+                return -1;
+            }); 
             return list;
         }
 
@@ -1126,6 +1171,56 @@
 
         #endregion
 
+        #region 鈻� 鑾峰彇璁惧淇℃伅_______________________
+
+        /// <summary>
+        /// 璇诲彇鍗曚釜绔偣鍥炶矾璁惧淇℃伅
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <returns></returns>
+        public CommonDevice.DeviceInfoData ReadDeviceEpointDeviceInfo(CommonDevice device)
+        {
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 80 } };
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "GetStatusRecord", jObject.ToString(), "GetStatusRecord_Respon");
+            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+            {
+                return null;
+            }
+            var info = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceInfoData>(result.ReceiptData);
+            return info;
+        }
+
+        #endregion
+
+        #region 鈻� 璁剧疆璁惧鍔熻兘绫诲瀷___________________
+
+        /// <summary>
+        /// 璁剧疆璁惧鍔熻兘绫诲瀷鍒扮綉鍏�
+        /// </summary>
+        /// <param name="device">璁惧鍥炶矾</param>
+        /// <param name="functionType">鍔熻兘绫诲瀷</param>
+        /// <returns></returns>
+        public bool SendDeviceFunctionTypeToGateway(CommonDevice device, DeviceFunctionType functionType)
+        {
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 110 } };
+            var data = new Newtonsoft.Json.Linq.JObject { { "FunctionType", (int)functionType } };
+            jObject.Add("Data", data);
+            var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "Device/SetEPDeviceFunctionType", jObject.ToString(), "Device/SetEPDeviceFunctionTypeRespon");
+            if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+            {
+                return false;
+            }
+            var resultData = Newtonsoft.Json.Linq.JObject.Parse(result.ReceiptData);
+            if (resultData.Property("Result") != null)
+            {
+                //0:淇敼鎴愬姛 1:淇敼澶辫触
+                return resultData["Result"].ToString() == "0";
+            }
+            return false;
+        }
+
+        #endregion
+
         #region 鈻� 鑾峰彇璁惧鍚嶇О_______________________
 
         /// <summary>
@@ -1181,17 +1276,7 @@
             {
                 //绌鸿皟閮藉彨瀹ゅ唴鏈�
                 return Language.StringByID(R.MyInternationalizationString.uIndoorUnit) + epointNo;
-            }
-            else if (device.Type == DeviceType.FreshAir)
-            {
-                //鏂伴闈㈡澘涓殑鎸夐敭鍙柊椋�
-                return Language.StringByID(R.MyInternationalizationString.FreshAir);
-            }
-            else if (device.Type == DeviceType.FreshAirHumiditySensor)
-            {
-                //鏂伴闈㈡澘婀垮害浼犳劅鍣�
-                return Language.StringByID(R.MyInternationalizationString.HumiditySensor);
-            }
+            }  
 
             //鑾峰彇璁惧绫诲瀷
             var deviceInfoType = this.GetMyDeviceEnumInfo(new List<CommonDevice>() { device });
@@ -1208,12 +1293,19 @@
                     return Language.StringByID(R.MyInternationalizationString.uDeviceBelongId16) + epointNo;
                 }
             }
+            else if (device.Type == DeviceType.FreshAirHumiditySensor)
+            {
+                //鏂伴闈㈡澘/绠�绾﹀鍔熻兘/绠�绾︾幆澧冮潰鏉挎箍搴︿紶鎰熷櫒
+                return Language.StringByID(deviceInfoType.DefultNameId) + Language.StringByID(R.MyInternationalizationString.HumiditySensor);
+            }
             else if (device.Type == DeviceType.TemperatureSensor)
             {
-                if (deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir)
+                if (deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir
+                    || deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleEnvironment
+                    || deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_SimpleMultifunction)
                 {
-                    //鏂伴闈㈡澘涓殑Thermostat涓烘俯搴︿紶鎰熷櫒
-                    return Language.StringByID(R.MyInternationalizationString.TemperatureSensor);
+                    //鏂伴闈㈡澘/绠�绾﹀鍔熻兘/绠�绾︾幆澧冮潰鏉� 娓╁害浼犳劅鍣�
+                    return Language.StringByID(deviceInfoType.DefultNameId) + Language.StringByID(R.MyInternationalizationString.TemperatureSensor);
                 }
                 else if (deviceInfoType.BeloneType == DeviceBeloneType.A鎸夐敭闈㈡澘)
                 {
@@ -2069,6 +2161,12 @@
                 info.ConcreteType = DeviceConcreteType.Sensor_DoorWindow;
                 info.ConcreteTextId = R.MyInternationalizationString.uDeviceModelId1301;
             }
+            else if (iasZone.IasDeviceType == 541)
+            {
+                //鐞冨瀷绉诲姩浼犳劅鍣�
+                info.ConcreteType = DeviceConcreteType.Sensor_SphericalMotion;
+                info.ConcreteTextId = R.MyInternationalizationString.uDeviceModelId1205;
+            }
         }
 
         #endregion
@@ -2308,39 +2406,6 @@
             list.Add(DeviceBeloneType.A鏈煡璁惧);
             
             return list;
-        }
-
-        #endregion
-
-        #region 鈻� 鑾峰彇璁惧鍦ㄧ嚎鐘舵�佸垪琛╛______________
-
-        /// <summary>
-        /// 鑾峰彇璁惧鍦ㄧ嚎鐘舵�佸垪琛�(娉ㄦ剰,涓�涓澶囧彧杩斿洖涓�涓洖璺�)
-        /// </summary>
-        /// <param name="gwId">缃戝叧id</param>
-        /// <returns></returns>
-        public List<CommonDevice> GetDeviceOnlineList(string gwId)
-        {
-            var zbway = HdlGatewayLogic.Current.GetLocalGateway(gwId);
-            int statu = 0;
-            var listDevice = this.GetDeviceListFromGateway(zbway, ref statu, false, ShowErrorMode.NO);
-            if (statu == -1)
-            {
-                //褰撳嚭鐜板紓甯告椂,浣跨敤鍚庡鎿嶄綔,鐩存帴鑾峰彇鏈湴鐨勮澶囧垪琛�
-                listDevice = this.GetDeviceByGatewayID(gwId);
-            }
-
-            var listCheck = new HashSet<string>();
-            var listReturn = new List<CommonDevice>();
-            foreach (var device in listDevice)
-            {
-                if (listCheck.Contains(device.DeviceAddr) == false)
-                {
-                    listCheck.Add(device.DeviceAddr);
-                    listReturn.Add(device);
-                }
-            }
-            return listReturn;
         }
 
         #endregion
@@ -2770,6 +2835,8 @@
             mainDevice.ModelIdentifier = device.DeviceInfo.ModelIdentifier;
             //搴忓垪鍙�
             mainDevice.SerialNumber = device.DeviceInfo.ProductCode;
+            //璁惧鍔熻兘绫诲瀷
+            mainDevice.DfunctionType = (DeviceFunctionType)device.DeviceInfo.FunctionType;
 
             mainDevice.InClusterList.Clear();
             mainDevice.InClusterList.AddRange(device.DeviceInfo.InClusterList);
@@ -2796,6 +2863,11 @@
             else if (mainDevice.Type == DeviceType.DimmableLight)
             {
                 mainDevice.DfunctionType = DeviceFunctionType.A鐏厜;
+                if (device.DeviceInfo.FunctionType != (int)DeviceFunctionType.A鐏厜)
+                {
+                    //璋冨厜鍣ㄥ浐瀹氱伅鍏�
+                    this.SendDeviceFunctionTypeToGateway(mainDevice, DeviceFunctionType.A鐏厜);
+                }
                 if (mainDevice.IsCustomizeImage == false)
                 {
                     mainDevice.IconPath = "Device/Light.png";
@@ -2805,6 +2877,11 @@
             else if (mainDevice.Type == DeviceType.ColorTemperatureLight)
             {
                 mainDevice.DfunctionType = DeviceFunctionType.A鐏厜;
+                if (device.DeviceInfo.FunctionType != (int)DeviceFunctionType.A鐏厜)
+                {
+                    //鑹叉俯鐏浐瀹氱伅鍏�
+                    this.SendDeviceFunctionTypeToGateway(mainDevice, DeviceFunctionType.A鐏厜);
+                }
                 if (mainDevice.IsCustomizeImage == false)
                 {
                     mainDevice.IconPath = "Device/ColorLightTemperature.png";
@@ -2820,6 +2897,11 @@
                     if (mainDevice.DfunctionType == DeviceFunctionType.A鏈畾涔�)
                     {
                         mainDevice.DfunctionType = DeviceFunctionType.A鐏厜;
+                        if (device.DeviceInfo.FunctionType != (int)DeviceFunctionType.A鐏厜)
+                        {
+                            //缁х數鍣ㄩ粯璁や负鐏厜
+                            this.SendDeviceFunctionTypeToGateway(mainDevice, DeviceFunctionType.A鐏厜);
+                        }
                     }
                     if (mainDevice.IsCustomizeImage == false)
                     {
@@ -2834,6 +2916,11 @@
                 if (mainDevice.DfunctionType == DeviceFunctionType.A鏈畾涔�)
                 {
                     mainDevice.DfunctionType = DeviceFunctionType.A寮�鍏�;
+                    if (device.DeviceInfo.FunctionType != (int)DeviceFunctionType.A寮�鍏�)
+                    {
+                        //绌烘皵寮�鍏抽粯璁や负寮�鍏�
+                        this.SendDeviceFunctionTypeToGateway(mainDevice, DeviceFunctionType.A寮�鍏�);
+                    }
                 }
                 if (mainDevice.IsCustomizeImage == false)
                 {
@@ -2844,6 +2931,11 @@
             else if (mainDevice.Type == DeviceType.ColorDimmableLight)
             {
                 mainDevice.DfunctionType = DeviceFunctionType.A鐏厜;
+                if (device.DeviceInfo.FunctionType != (int)DeviceFunctionType.A鐏厜)
+                {
+                    //褰╃伅榛樿涓哄紑鍏�
+                    this.SendDeviceFunctionTypeToGateway(mainDevice, DeviceFunctionType.A鐏厜);
+                }
                 if (mainDevice.IsCustomizeImage == false)
                 {
                     mainDevice.IconPath = "Device/ColorLight.png";
@@ -2863,10 +2955,13 @@
             //鏍规嵁璁惧绫诲瀷鍒涘缓璁惧瀵硅薄鐨勫疄渚�
             if (deviceType == DeviceType.ColorDimmableLight) { device = new ColorDimmableLight(); }
             else if (deviceType == DeviceType.DimmableLight) { device = new DimmableLight(); }
+            else if (deviceType == DeviceType.ColorDimmerSwitch) { device = new ColorDimmerSwitch(); }
+            else if (deviceType == DeviceType.LevelControlSwitch) { device = new LevelControlSwitch(); }
             else if (deviceType == DeviceType.OnOffSwitch) { device = new Panel(); }
             else if (deviceType == DeviceType.OnOffOutput) { device = new ToggleLight(); }
             else if (deviceType == DeviceType.AirSwitch) { device = new AirSwitch(); }
             else if (deviceType == DeviceType.WindowCoveringDevice) { device = new Rollershade(); }
+            else if (deviceType == DeviceType.WindowCoveringController) { device = new WindowCoveringController(); }
             else if (deviceType == DeviceType.IASZone) { device = new IASZone(); }
             else if (deviceType == DeviceType.Repeater) { device = new Repeater(); }
             else if (deviceType == DeviceType.Thermostat) { device = new AC(); }
@@ -2965,6 +3060,7 @@
 
             //=========鈽呪槄PIR浼犳劅鍣ㄧ被(1200-1299)鈽呪槄=========
             this.dicDeviceModelIdEnum["MSPIR01-ZB.10"] = "1200-1200-60000";//pir浼犳劅鍣�220
+            this.dicDeviceModelIdEnum["MSPIRB-ZB.10"] = "1205-1200-60000";//鐞冨瀷绉诲姩浼犳劅鍣�
 
             //=========鈽呪槄瀹夐槻绫讳紶鎰熷櫒绫�(1300-2299)鈽呪槄=========
             //杩欓噷鏄害涔愬厠鐨�
@@ -3154,6 +3250,10 @@
         /// pir浼犳劅鍣�220 闀滃儚id锛�1200
         /// </summary>
         Sensor_Pir = 1200,
+        /// <summary>
+        /// 鐞冨舰绉诲姩浼犳劅鍣� 闀滃儚id锛�1205
+        /// </summary>
+        Sensor_SphericalMotion = 1205,
 
         //=========鈽呪槄瀹夐槻绫讳紶鎰熷櫒绫�(1300-2299)鈽呪槄=========
         /// <summary>

--
Gitblit v1.8.0