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