From bd46c57c77c276014db3192a4e2cc96e23c93202 Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期五, 21 二月 2020 13:08:47 +0800 Subject: [PATCH] 先上传个版本吧 --- ZigbeeApp/Shared/Common/Device.cs | 211 +++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 164 insertions(+), 47 deletions(-) diff --git a/ZigbeeApp/Shared/Common/Device.cs b/ZigbeeApp/Shared/Common/Device.cs index 4a805f6..35989ca 100755 --- a/ZigbeeApp/Shared/Common/Device.cs +++ b/ZigbeeApp/Shared/Common/Device.cs @@ -37,7 +37,7 @@ } } /// <summary> - /// 鏈湴鎵�鏈夎澶囩殑缂撳瓨(鎺掑簭) + /// 鏈湴鎵�鏈夎澶囩殑缂撳瓨 /// </summary> public List<CommonDevice> listAllDevice { @@ -241,7 +241,7 @@ //鑾峰彇杩欎釜缃戝叧鐨勬湰鍦版墍鏈夎澶� string gwID = HdlGatewayLogic.Current.GetGatewayId(zbGateway); - List<CommonDevice> listLocalDevices = this.GetDeviceByGatewayID(gwID); + List<CommonDevice> listLocalDevices = this.GetDeviceByGatewayID(gwID, true); Dictionary<string, CommonDevice> dicExist = new Dictionary<string, CommonDevice>(); foreach (var device in listLocalDevices) { @@ -273,25 +273,13 @@ for (int i = 0; i < listDevice.Count; i++) { var device = listDevice[i]; - //瀵规湭鍛藉悕鐨勮澶囬噸鏂板懡鍚� - if (this.GetSimpleEpointName(device) == string.Empty) + //瀵规湭鍛藉悕鐨勮櫄鎷熻澶囬噸鏂板懡鍚� + if (device.DriveCode > 0 && this.GetSimpleEpointName(device) == string.Empty) { //鏍规嵁璁惧绫诲瀷鑾峰彇鍚嶇О var dName = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false); - //铏氭嫙璁惧鐨勮瘽锛岄檮鍔犲洖璺彿 - if (device.DriveCode > 0) - { - //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍� - dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; - } - //澶氬洖璺澶囩殑璇濓紝闄勫姞鍥炶矾鍙� - else if (dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && dicDeviceEpoint[device.DeviceAddr].Count > 1) - { - var arry = dName.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries); - dName = arry[0].Trim(); - //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍� - dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; - } + //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍� + dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; HdlThreadLogic.Current.RunThread(async () => { @@ -301,10 +289,19 @@ } //鍙湁瀹屽叏鑾峰彇鐨勬椂鍊�,鎵嶄細鍘诲鐞嗗垹闄ょ殑闂 - if (statu == 1) + if (statu != 1) { - //濡傛灉鏈湴鍜岀綉鍏崇殑璁惧涓嶄竴鑷寸殑鏃跺�欙紝鍒犻櫎鏈湴鐨勮澶� - foreach (var device in dicExist.Values) + return statu; + } + + //濡傛灉鏈湴鍜岀綉鍏崇殑璁惧涓嶄竴鑷寸殑鏃跺�欙紝鍒犻櫎鏈湴鐨勮澶� + foreach (var device in dicExist.Values) + { + if (device is OTADevice) + { + this.DeleteMemmoryOtaDevice(device.DeviceAddr); + } + else { this.DeleteMemmoryDevice(device, true); } @@ -484,15 +481,25 @@ lock (dicAllDevice) { string mainKeys = this.GetDeviceMainKeys(device); - if (this.dicAllDevice.ContainsKey(mainKeys) == false) + if (this.dicAllDevice.ContainsKey(mainKeys) == true) { - return; - } - this.dicAllDevice[mainKeys] = device; - device.ReSave(); + //涓�鑸澶� + this.dicAllDevice[mainKeys] = device; + device.ReSave(); - //娣诲姞鑷姩澶囦唤 - HdlAutoBackupLogic.AddOrEditorFile(device.FilePath); + //娣诲姞鑷姩澶囦唤 + HdlAutoBackupLogic.AddOrEditorFile(device.FilePath); + } + else if (this.dicOTADevice.ContainsKey(mainKeys) == true) + { + //Ota璁惧 + this.dicOTADevice[mainKeys] = (OTADevice)device; + device.ReSave(); + + //娣诲姞鑷姩澶囦唤 + HdlAutoBackupLogic.AddOrEditorFile(device.FilePath); + + } } } @@ -524,11 +531,14 @@ return false; } - //鍒犻櫎鏂囦欢 + //鍒犻櫎缂撳瓨鐨凮ta璁惧 + this.DeleteMemmoryOtaDevice(listdevice[0].DeviceAddr); + //鍒犻櫎涓�鑸澶囨枃浠� foreach (CommonDevice device in listdevice) { this.DeleteMemmoryDevice(device); } + if (this.dicDeviceRoomId.ContainsKey(listdevice[0].DeviceAddr) == true) { //绉婚櫎鐪熷疄璁惧鐨勬埧闂寸储寮� @@ -539,7 +549,7 @@ } /// <summary> - /// 鍒犻櫎缂撳瓨鐨勮澶� + /// 鍒犻櫎缂撳瓨鐨勪竴鑸澶� /// </summary> /// <param name="device">璁惧瀵硅薄</param> /// <param name="deleteRoom">鏄惁浠庢埧闂村垹闄�</param> @@ -561,6 +571,11 @@ { this.dicAllDevice.Remove(mainKeys); } + if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true) + { + //鍙樻洿绔偣鏁� + this.dicDeviceEpoint[device.DeviceAddr].Remove(device.DeviceEpoint); + } } //鍒犻櫎璁惧鏂囦欢 @@ -580,9 +595,17 @@ HdlAutoBackupLogic.DeleteFile(device.FilePath); } } + } + /// <summary> + /// 鍒犻櫎缂撳瓨鐨凮ta璁惧 + /// </summary> + /// <param name="macAdrr"></param> + /// <param name="ePoint"></param> + public void DeleteMemmoryOtaDevice(string macAdrr, int ePoint = 200) + { //鍒犻櫎200绔彛鏂囦欢 - string otaKeys = this.GetDeviceMainKeys(device.DeviceAddr, 200); + string otaKeys = this.GetDeviceMainKeys(macAdrr, ePoint); if (this.dicOTADevice.ContainsKey(otaKeys) == true) { string otaFile = this.dicOTADevice[otaKeys].FilePath; @@ -591,12 +614,12 @@ if (UserCenterResourse.UserInfo.AuthorityNo == 3) { //鎴愬憳鐨勮瘽,鐩存帴鍒犻櫎,娌℃湁鍟嗛噺鐨勪綑鍦� - Global.DeleteFilebyHomeId(filePath); + Global.DeleteFilebyHomeId(otaFile); } else { //鍙樻洿锛氭悶鎺夊畠,涓嶇暀浜� - Global.DeleteFilebyHomeId(filePath); + Global.DeleteFilebyHomeId(otaFile); //鍒犻櫎鑷姩澶囦唤 HdlAutoBackupLogic.DeleteFile(otaFile); } @@ -680,8 +703,9 @@ /// 鏍规嵁缃戝叧ID鑾峰彇鎵�鏈夌殑璁惧 /// </summary> /// <param name="gwId">缃戝叧ID</param> + /// <param name="getOtaDevice">鏄惁鑾峰彇ota璁惧</param> /// <returns></returns> - public List<CommonDevice> GetDeviceByGatewayID(string gwId) + public List<CommonDevice> GetDeviceByGatewayID(string gwId, bool getOtaDevice = false) { List<CommonDevice> list = new List<CommonDevice>(); lock (dicAllDevice) @@ -692,6 +716,17 @@ if (gwId == device.CurrentGateWayId) { list.Add(device); + } + } + if (getOtaDevice == true) + { + //鑾峰彇ota璁惧 + foreach (var ota in this.dicOTADevice.Values) + { + if (ota.CurrentGateWayId == gwId) + { + list.Add(ota); + } } } } @@ -817,6 +852,35 @@ return this.dicOTADevice[mainkeys]; } + /// <summary> + /// 鑾峰彇鐗规畩鐨�,娌℃湁鍏朵粬鍥炶矾,鍗曠函鍙湁200绔偣鐨凮TA璁惧 + /// </summary> + /// <param name="gwId">缃戝叧ID</param> + /// <returns></returns> + public List<OTADevice> GetSpecialOtaDevice(string gwId) + { + var list = new List<OTADevice>(); + foreach (var ota in this.dicOTADevice.Values) + { + if (ota.CurrentGateWayId != gwId) + { + //涓嶆槸鍚屼竴涓綉鍏� + continue; + } + //娌℃湁鍏朵粬鍥炶矾 + if (dicDeviceEpoint.ContainsKey(ota.DeviceAddr) == false + || dicDeviceEpoint[ota.DeviceAddr].Count == 0) + { + //鐩墠鍙拡瀵逛腑澶┖璋� + if (ota.ModelIdentifier == "MAC/GW-ZB.10") + { + list.Add(ota); + } + } + } + return list; + } + #endregion #region 鈻� 鑾峰彇璁惧鍚嶇О_______________________ @@ -834,16 +898,39 @@ return dName; } //鏍规嵁璁惧绫诲瀷鑾峰彇鍚嶇О - dName = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false); + var tempValue = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false); + var arry = tempValue.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries); + dName = arry[0].Trim(); + //濡傛灉鏄櫄鎷熻澶� - if (device.DriveCode > 0 - || (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count > 1)) + if (device.DriveCode > 0) { - var arry = dName.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries); - dName = arry[0].Trim(); //鍦ㄧ鐐瑰悕瀛楃殑鍚庨潰闄勫姞銆愬洖璺�戝瓧鏍� dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; + return dName; } + + //鑾峰彇璁惧绫诲瀷 + var deviceInfoType = this.GetMyDeviceEnumInfo(new List<CommonDevice>() { device }); + if (deviceInfoType.BeloneType == Common.DeviceBeloneType.A鎸夐敭闈㈡澘 && device.Type == DeviceType.TemperatureSensor) + { + //闈㈡澘鐨勬渶鍚庝竴涓洖璺槸娓╁害浼犳劅鍣� + dName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId11); + } + else if (deviceInfoType.ConcreteType == Common.DeviceConcreteType.Sensor_Pir) + { + //pir浼犳劅鍣�,瀹冨張鎼炵壒娈婁笢瑗�,浼犳劅鍣ㄨ嚜韬敤鑷繁鐨勫悕瀛�,缁х數鍣ㄥ洖璺殑璇濃�︹�� + if (device.Type == DeviceType.OnOffOutput) + { + dName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId2300); + } + } + else if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count > 1) + { + //XXXXX(N鍥炶矾) + dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")"; + } + return dName; } @@ -1682,6 +1769,11 @@ //濡傛灉璁惧鍙湁涓�涓洖璺紝濡傛灉鏀瑰彉浜嗙湡瀹炶澶囧尯鍩燂紝鍒欏畠鐨勫洖璺殑鍖哄煙涔熶竴璧锋敼浜� if (saveRoadDevice == true && listDevice != null && listDevice.Count == 1) { + if (listDevice[0] is OTADevice) + { + //鍗曠函鍙槸Ota璁惧鍒欎笉澶勭悊 + return; + } Common.Room.CurrentRoom.ChangedRoom(listDevice[0], roomId, false); } } @@ -2163,7 +2255,7 @@ //鏂拌澶囨坊鍔犳柟娉曪細 //1銆佸湪杩欓噷濉啓涓婃ā鍧桰D锛岀劧鍚庢槸 DeviceConcreteType 锛岀劧鍚庢槸 DeviceBeloneType //2銆佺劧鍚庡湪鏈�涓嬮潰娣诲姞銆愯澶囩殑鍏蜂綋绫诲瀷銆戯紝銆愯澶囩殑鎵�灞炵被鍨嬨�� - //3銆佸凡璁惧鐨勫叿浣撶被鍨嬩负鍚嶅瓧(鍘绘帀銆�-銆�)娣诲姞璁惧鐨勩�愭墍灞炲浘鐗囥�戯紝銆愮湡瀹炵墿鐞嗗浘鐗囥�戙�傚洖璺浘鐗囬渶瑕佺壒娈婂鐞� + //3銆佷互璁惧鐨勫叿浣撶被鍨嬩负鍚嶅瓧(鍘绘帀銆�-銆�)娣诲姞璁惧鐨勩�愭墍灞炲浘鐗囥�戯紝銆愮湡瀹炵墿鐞嗗浘鐗囥�戙�傚洖璺浘鐗囬渶瑕佺壒娈婂鐞� //4銆佹坊鍔燫鏂囦欢,娣诲姞Language鏂囦欢 //********************************************************************* @@ -2180,6 +2272,11 @@ this.dicDeviceModelIdEnum["MPT4R4L/S-ZB.18"] = "220-200";//绠�绾�4鎸夐敭闈㈡澘 this.dicDeviceModelIdEnum["MPT3R3L/S-ZB.18"] = "221-200";//绠�绾�3鎸夐敭闈㈡澘 this.dicDeviceModelIdEnum["MPT2R2L/S-ZB.18"] = "222-200";//绠�绾�2鎸夐敭闈㈡澘 + this.dicDeviceModelIdEnum["MP2B/TILE-ZB.18"] = "240-200";//鏂规偊2鎸夐敭杞昏Е寮忛潰鏉� + this.dicDeviceModelIdEnum["MP4B/TILE-ZB.18"] = "241-200";//鏂规偊4鎸夐敭杞昏Е寮忛潰鏉� + this.dicDeviceModelIdEnum["MP8B/TILE-ZB.18"] = "242-200";//鏂规偊8鎸夐敭杞昏Е寮忛潰鏉� + this.dicDeviceModelIdEnum["MPFA/TILE-ZB.18"] = "250-200";//鏂规偊鏂伴闈㈡澘 + this.dicDeviceModelIdEnum["MPTE3/TILE-ZB.18"] = "253-200";//鏂规偊鐜闈㈡澘 //=========鈽呪槄PIR浼犳劅鍣ㄧ被(1200-1299)鈽呪槄========= this.dicDeviceModelIdEnum["MSPIR01-ZB.10"] = "1200-1200";//pir浼犳劅鍣�220 @@ -2241,12 +2338,12 @@ #region 鈻� 鑷畾涔夎澶囩被鍨媉________________________ /// <summary> - /// <para>浠呴檺搴曞眰浣跨敤锛氳澶囩殑鍏蜂綋銆愯澶囩被鍨嬨��,鑷畾涔変笌妯″潡id鍏宠仈鐨勬灇涓�(鍊间负LocalDevice閲岄潰dicDeviceModelIdEnum鎵�鎸囧畾鐨勫��)</para> + /// <para>浠呴檺搴曞眰浣跨敤锛氳澶囩殑鍏蜂綋銆愯澶囩被鍨嬨��,鑷畾涔変笌妯″潡id鍏宠仈鐨勬灇涓�(鍊间负LocalDevice閲岄潰dicDeviceModelIdEnum鎵�鎸囧畾鐨凞eviceConcreteType鍊�)</para> /// <para>鍙橀噺鍚嶅彲浠ヤ綔涓恒�愯澶囩被鍨嬨�戝浘鐗�,杩欎釜鍊兼槸鐬庡啓鐨�,娌′粈涔堢壒娈婃剰涔�</para> /// </summary> public enum DeviceConcreteType { - //瀹氫箟瑙勫垯锛氥�愯澶囩被鍨嬨�戝浘鐗囧悕瀛�=LocalDevice閲岄潰dicDeviceModelIdEnum鎵�鎸囧畾鐨勫�� + //瀹氫箟瑙勫垯锛氥�愯澶囩被鍨嬨�戝浘鐗囧悕瀛�=LocalDevice閲岄潰dicDeviceModelIdEnum鎵�鎸囧畾鐨凞eviceConcreteType鍊� /// <summary> /// 鏈煡璁惧 @@ -2304,6 +2401,26 @@ /// 绠�绾�2鎸夐敭闈㈡澘 闀滃儚id锛�222 /// </summary> ButtonPanel_SimpleTwo = 222, + /// <summary> + /// 鏂规偊2鎸夐敭杞昏Е寮忛潰鏉� 闀滃儚id锛�240 + /// </summary> + ButtonPanel_FangyueTwo = 240, + /// <summary> + /// 鏂规偊4鎸夐敭杞昏Е寮忛潰鏉� 闀滃儚id锛�241 + /// </summary> + ButtonPanel_FangyueFour = 241, + /// <summary> + /// 鏂规偊8鎸夐敭杞昏Е寮忛潰鏉� 闀滃儚id锛�242 + /// </summary> + ButtonPanel_FangyueEight = 242, + /// <summary> + /// 鏂规偊鏂伴闈㈡澘 闀滃儚id锛�250 + /// </summary> + ButtonPanel_FangyueNewWind = 250, + /// <summary> + /// 鏂规偊鐜闈㈡澘 闀滃儚id锛�253 + /// </summary> + ButtonPanel_FangyueEnvironment = 253, //=========鈽呪槄PIR浼犳劅鍣ㄧ被(1200-1299)鈽呪槄========= /// <summary> @@ -2443,25 +2560,25 @@ //=========鈽呪槄鍏朵粬绫�(????-????)鈽呪槄========= /// <summary> - /// 骞叉帴鐐� + /// 骞叉帴鐐�(娉ㄦ剰,瀹冨睘浜庡叾浠栫被,涓嶆槸璁惧绫诲瀷) /// </summary> DryContact = -10000, /// <summary> - /// 鐏厜(娉ㄦ剰,瀹冭緭鍏ュ叾浠栫被,涓嶆槸璁惧绫诲瀷) + /// 鐏厜(娉ㄦ剰,瀹冨睘浜庡叾浠栫被,涓嶆槸璁惧绫诲瀷) /// </summary> Light = -10001, /// <summary> - /// 鎻掑骇 + /// 鎻掑骇(娉ㄦ剰,瀹冨睘浜庡叾浠栫被,涓嶆槸璁惧绫诲瀷) /// </summary> Socket1 = -10002, /// <summary> - /// 寮�鍏� + /// 寮�鍏�(娉ㄦ剰,瀹冨睘浜庡叾浠栫被,涓嶆槸璁惧绫诲瀷) /// </summary> Switch = -10003, } /// <summary> - /// <para>浠呴檺搴曞眰浣跨敤锛氳澶囨墍灞炵殑銆愯澶囩绫汇��,鑷畾涔変笌妯″潡id鍏宠仈鐨勬灇涓�(鍊间负LocalDevice閲岄潰dicDeviceModelIdEnum鎵�鎸囧畾鐨勫��)</para> + /// <para>浠呴檺搴曞眰浣跨敤锛氳澶囨墍灞炵殑銆愯澶囩绫汇��,鑷畾涔変笌妯″潡id鍏宠仈鐨勬灇涓�(鍊间负LocalDevice閲岄潰dicDeviceModelIdEnum鎵�鎸囧畾鐨凞eviceBeloneType鍊�)</para> /// <para>杩欎釜鍊兼槸鐬庡啓鐨�,娌′粈涔堢壒娈婃剰涔�</para> /// </summary> public enum DeviceBeloneType -- Gitblit v1.8.0