From 9ef48d7b2da7c408b53f73be0f6eef3cbac1c84a Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期四, 19 十一月 2020 10:23:45 +0800 Subject: [PATCH] Evoyo.Home1.1.0120111601_Release --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs | 184 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 177 insertions(+), 7 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs index a1d3219..76c3d28 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs @@ -33,6 +33,14 @@ } /// <summary> + /// 缃戝叧鎺ユ敹浜嬩欢(鍙傛暟1:涓婚 鍙傛暟2:鎺ㄩ�佹秷鎭�) + /// </summary> + private Action<string, string> GatewayReceiveEvent = null; + /// <summary> + /// 鎺ユ敹缃戝叧鐨刬d + /// </summary> + private string GatewayReceiveId = null; + /// <summary> /// 璁惧鎺ㄩ�佷簨浠堕泦鍚� /// </summary> private Dictionary<string, Action<CommonDevice>> dicDeviceEvent = new Dictionary<string, Action<CommonDevice>>(); @@ -54,6 +62,11 @@ /// <param name="msgData">鎺ユ敹鐨勬暟鎹�</param> public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, string msgData) { + //濡傛灉瀹冨湪鐧婚檰鐣岄潰,鍒欎笉鍋氫换浣曞鐞� + if (Common.Config.Instance.HomeId == string.Empty) + { + return; + } if (topic == "AppNoLogin") { HdlThreadLogic.Current.RunMain(() => @@ -141,7 +154,11 @@ { if (HdlGatewayLogic.Current.IsGatewayExist(gatewayId) == false) { - //涓嶆槸鑷繁缁戝畾鐨勭綉鍏筹紝鍒欎笉澶勭悊 + //涓嶆槸鑷繁缁戝畾鐨勭綉鍏筹紝鍒欎笉澶勭悊,浣嗘槸涓嬮潰杩欎釜涓滆タ鏈夌偣鐗规畩 + if (gatewayId == this.GatewayReceiveId) + { + this.GatewayReceiveEvent?.Invoke(topic, msgData); + } return; } //璁惧灞炴�т笂鎶� @@ -194,6 +211,11 @@ else if (topic == gatewayId + "/Scene/Exec_Respon") { this.SceneExecPush(null); + } + //缃戝叧鎺ユ敹浜嬩欢 + else if (gatewayId == this.GatewayReceiveId) + { + this.GatewayReceiveEvent?.Invoke(topic, msgData); } } catch (Exception ex) @@ -466,11 +488,11 @@ //宸茬粡鎺ユ敹鍒扮姸鎬� locadevice.HadReadDeviceStatu = true; - if (locadevice is LightBase) - { - //褰撴帴鏀跺埌浜害鍊兼椂,榛樿鎵撳紑 - ((LightBase)locadevice).OnOffStatus = 1; - } + //if (locadevice is LightBase) + //{ + // //褰撴帴鏀跺埌浜害鍊兼椂,榛樿鎵撳紑 + // ((LightBase)locadevice).OnOffStatus = 1; + //} } } #endregion @@ -635,8 +657,135 @@ } #endregion - } + #region 鈻� 璁惧鍩虹淇℃伅 + + else if (report.DeviceStatusReport.CluterID == 0) + { + var listLocalDevice = Common.LocalDevice.Current.GetDevicesByMac(deviceAddr, false); + //灞炴�ч兘鏄竴鏍风殑 + foreach (var myDevice in listLocalDevice) + { + //灞炴�ф槸鍚︽敼鍙� + bool attriButeChanged = false; + foreach (var data in report.DeviceStatusReport.AttriBute) + { + //鐢熶骇鍟嗗悕瀛� + if (data.AttributeId == 4 && data.AttriButeDataHex.Length > 2) + { + if (data.AttriButeDataHex.Length > 2) + { + var value = UserCenterLogic.TranslateHexadecimalIntoText(data.AttriButeDataHex.Substring(2)); + if (myDevice.ManufacturerName != value) + { + //灞炴�у彉鏇翠簡 + attriButeChanged = true; + } + myDevice.ManufacturerName = value; + } + } + //鍨嬪彿鐮�(涔熷彨妯″潡ID) + if (data.AttributeId == 5) + { + if (data.AttriButeDataHex.Length > 2) + { + var value = UserCenterLogic.TranslateHexadecimalIntoText(data.AttriButeDataHex.Substring(2)); + if (myDevice.ModelIdentifier != value) + { + //灞炴�у彉鏇翠簡 + attriButeChanged = true; + } + myDevice.ModelIdentifier = value; + } + } + //鐢熶骇鏃ユ湡 + if (data.AttributeId == 6) + { + if (data.AttriButeDataHex.Length > 2) + { + var value = UserCenterLogic.TranslateHexadecimalIntoText(data.AttriButeDataHex.Substring(2)); + if (myDevice.ProductionDate != value) + { + //灞炴�у彉鏇翠簡 + attriButeChanged = true; + } + myDevice.ProductionDate = value; + } + } + //鐢垫簮 + if (data.AttributeId == 7) + { + myDevice.PowerSource = data.AttriButeData; + } + //搴忓垪鍙� + if (data.AttributeId == 13) + { + if (data.AttriButeDataHex.Length > 2) + { + string value; + if (Common.LocalDevice.Current.IsHdlDevice(myDevice) == false) + { + //绗笁鏂硅澶� + value = data.AttriButeDataHex.Substring(2); + } + else + { + //娌充笢璁惧 + value = UserCenterLogic.TranslateHexadecimalIntoText(data.AttriButeDataHex.Substring(2)); + } + if (myDevice.SerialNumber != value) + { + //灞炴�у彉鏇翠簡 + attriButeChanged = true; + } + myDevice.SerialNumber = value; + } + } + } + //濡傛灉灞炴�у彉鏇翠簡 + if (attriButeChanged == true && myDevice.IsCustomizeImage == false) + { + //UI閲嶆柊鐢熸垚 + myDevice.IconPath = string.Empty; + myDevice.ReSave(); + } + } + } + + #endregion + } + else if (deviceEpoint == 200) + { + var localOta = Common.LocalDevice.Current.GetOTADevice(deviceAddr); + if (localOta != null) + { + #region 鈻� 鍥轰欢鐗堟湰 + //鍥轰欢鐗堟湰 + if (report.DeviceStatusReport.CluterID == (int)Cluster_ID.Ota) + { + foreach (var data in report.DeviceStatusReport.AttriBute) + { + //闀滃儚鐗堟湰 + if (data.AttributeId == (int)AttriButeId.ImgVersion) + { + localOta.ImgVersion = data.AttriButeData; + } + //纭欢鐗堟湰 + if (data.AttributeId == (int)AttriButeId.mgHWversion) + { + localOta.HwVersion = data.AttriButeData; + } + //闀滃儚ID + if (data.AttributeId == (int)AttriButeId.ImgTypeId) + { + localOta.ImgTypeId = data.AttriButeData; + } + } + localOta.ReSave(); + } + #endregion + } + } this.DeviceReportPush(report, ReceiveComandDiv.A璁惧灞炴�т笂鎶�); } @@ -988,6 +1137,18 @@ } } + /// <summary> + /// 娣诲姞缃戝叧鎺ユ敹浜嬩欢(action鍙兘瀛樺湪涓�涓�,涓嶢ddAttributeEvent涓嶅叡瀛�,AddAttributeEvent浼樺厛) + /// </summary> + /// <param name="i_gatewayId">缃戝叧id</param> + /// <param name="action">鍙兘瀛樺湪涓�涓猘ction (鍙傛暟1:涓婚 鍙傛暟2:鎺ㄩ�佹秷鎭�)</param> + public void AddGatewayReceiveEvent(string i_gatewayId, Action<string, string> action) + { + //娣诲姞浜嬩欢 + this.GatewayReceiveEvent = action; + this.GatewayReceiveId = i_gatewayId; + } + #endregion #region 鈻� 绉婚櫎璁惧鐩戝惉_______________________ @@ -1031,6 +1192,15 @@ } } + /// <summary> + /// 绉婚櫎缃戝叧鎺ユ敹浜嬩欢(鍙兘瀛樺湪涓�涓簨浠�) + /// </summary> + public void RemoveGatewayReceiveEvent() + { + this.GatewayReceiveEvent = null; + this.GatewayReceiveId = null; + } + #endregion #region 鈻� 涓�鑸柟娉昣__________________________ -- Gitblit v1.8.0