From 3aa397ab145382935492b11c1f18c9634e69910b Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期四, 10 十二月 2020 16:45:00 +0800 Subject: [PATCH] 请合并,门锁和晾衣架第一版代码 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs | 2632 +++++++++++++++++++++++++++++++---------------------------- 1 files changed, 1,379 insertions(+), 1,253 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs old mode 100755 new mode 100644 index b912a16..6a6bde1 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs @@ -5,1262 +5,1388 @@ using ZigBee.Device; namespace Shared.Phone.UserCenter -{ +{ + /// <summary> + /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�) + /// </summary> + public class HdlGatewayReceiveLogic + { + #region 鈻� 鍙橀噺澹版槑___________________________ + + /// <summary> + /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫 + /// </summary> + private static HdlGatewayReceiveLogic m_Current = null; + /// <summary> + /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫 + /// </summary> + public static HdlGatewayReceiveLogic Current + { + get + { + if (m_Current == null) + { + m_Current = new HdlGatewayReceiveLogic(); + } + return m_Current; + } + } + + /// <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>>(); + /// <summary> + /// 鍛戒护鍖哄垎 + /// </summary> + private Dictionary<string, ReceiveComandDiv> dicCommandDiv = new Dictionary<string, ReceiveComandDiv>(); + + #endregion + + #region 鈻� 鍏ㄥ眬鎺ユ敹___________________________ + /// <summary> /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�) /// </summary> - public class HdlGatewayReceiveLogic - { - #region 鈻� 鍙橀噺澹版槑___________________________ - - /// <summary> - /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫 - /// </summary> - private static HdlGatewayReceiveLogic m_Current = null; - /// <summary> - /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫 - /// </summary> - public static HdlGatewayReceiveLogic Current - { - get - { - if (m_Current == null) - { - m_Current = new HdlGatewayReceiveLogic(); - } - return m_Current; - } - } - - /// <summary> - /// 璁惧鎺ㄩ�佷簨浠堕泦鍚� - /// </summary> - private Dictionary<string, Action<CommonDevice>> dicDeviceEvent = new Dictionary<string, Action<CommonDevice>>(); - /// <summary> - /// 鍛戒护鍖哄垎 - /// </summary> - private Dictionary<string, ReceiveComandDiv> dicCommandDiv = new Dictionary<string, ReceiveComandDiv>(); - - #endregion - - #region 鈻� 鍏ㄥ眬鎺ユ敹___________________________ - - /// <summary> - /// 鍏ㄥ眬鎺ユ敹缃戝叧鎺ㄩ�佺殑鐨勯�昏緫(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�) - /// </summary> - /// <param name="gatewayId">缃戝叧ID</param> - /// <param name="topic">鏁翠釜涓婚</param> - /// <param name="reportTopic">涓婃姤鏁版嵁鐨勪富棰�</param> - /// <param name="msgData">鎺ユ敹鐨勬暟鎹�</param> - public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, string msgData) - { - if (topic == "AppNoLogin") - { - HdlThreadLogic.Current.RunMain(() => - { - //鐧诲綍瀵嗗寵宸茬粡杩囨湡,璇烽噸鏂扮櫥褰� - string msg = Language.StringByID(R.MyInternationalizationString.uTokenIsOldAndLoginAgain); - var contr = new ShowMsgControl(ShowMsgType.Tip, msg); - contr.Show(); - - UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); - }); - return; - } - else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.ConnEmqClientId + "/Push/NotifySqueeze") - { - HdlThreadLogic.Current.RunMain(() => - { - //姝ゅ笎鍙峰凡鍦ㄥ埆澶勭櫥褰�,鎮ㄨ杩笅绾� - string msg = Language.StringByID(R.MyInternationalizationString.uHadBeenLoginAndOffLine); - var contr = new ShowMsgControl(ShowMsgType.Tip, msg); - contr.Show(); - - UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); - }); - return; - } - else if (topic == "YouIpAndPortNoRecord") - { - HdlThreadLogic.Current.RunMain(() => - { - //鎮ㄥ綋鍓嶇殑IP鍙婄鍙e湪浜戠涓嶅瓨鍦�,璇烽噸鏂扮櫥褰�! - string msg = Language.StringByID(R.MyInternationalizationString.uYouIpAndPortNoRecord); - var contr = new ShowMsgControl(ShowMsgType.Tip, msg); - contr.Show(); - - UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); - }); - return; - } - else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Home.Id + "_" + Common.Config.Instance.Guid + "/PrimaryUserDelYou") - { - HdlThreadLogic.Current.RunMain(() => - { - //鍒嗕韩浣忓畢宸叉洿鏀癸紝璇疯仈绯荤鐞嗗憳锛� - string msg = Language.StringByID(R.MyInternationalizationString.uShardResidenceHadDeletePleaseTakeToAdmin); - var contr = new ShowMsgControl(ShowMsgType.Tip, msg); - contr.Show(); - - UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); - }); - return; - } - else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/Update") - { - HdlThreadLogic.Current.RunMain(() => - { - //鎮ㄧ殑鏉冮檺宸茬粡鍙樻洿,璇烽噸鏂扮櫥闄� - string msg = Language.StringByID(R.MyInternationalizationString.uYouAccessHadChangedPleaseTakeToAdmin); - var contr = new ShowMsgControl(ShowMsgType.Tip, msg); - contr.Show(); - - UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); - }); - return; - } - else if (UserCenterResourse.UserInfo.AuthorityNo == 3) - { - if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/Deleted" - || topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/DeletedShareData") - { - HdlThreadLogic.Current.RunMain(() => - { - //鍒嗕韩鏁版嵁宸茬粡鍙樻洿,璇烽噸鏂扮櫥闄� - string msg = Language.StringByID(R.MyInternationalizationString.uShardDataIsChangedPleaseLoginAgain); - var contr = new ShowMsgControl(ShowMsgType.Tip, msg); - contr.Show(); - - UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); - }); - return; - } - } - - try - { - if (HdlGatewayLogic.Current.IsGatewayExist(gatewayId) == false) - { - //涓嶆槸鑷繁缁戝畾鐨勭綉鍏筹紝鍒欎笉澶勭悊 - return; - } - //璁惧灞炴�т笂鎶� - if (reportTopic == "DeviceStatusReport") - { - //璁惧灞炴�т笂鎶� - this.DeviceAttributeReportPush(JObject.Parse(msgData)); - } - //浼犳劅鍣ㄤ笂鎶� - else if (reportTopic == "IASInfoReport") - { - this.SensorDeviceReportPush(JObject.Parse(msgData)); - } - //闂ㄩ攣涓婃姤 - else if (topic == gatewayId + "/Alarms/SendAlarmInform") - { - this.DoorLockDeviceReportPush(JObject.Parse(msgData)); - } - //閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻鎴愬姛鏃舵姤鍛� - else if (topic == gatewayId + "/Security/EnOrWithdrawSucceedReport") - { - this.SecurityEnOrWithdrawSucceedReport(JObject.Parse(msgData)); - } - //璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣� - else if (reportTopic == "OnlineStatusChange_Respon") - { - this.DeviceOnlineChangePush(JObject.Parse(msgData)); - } - //璁惧鎺у埗鐘舵�佸弽棣� - else if (reportTopic == "DeviceDefaultAck") - { - this.DeviceControlResponePush(JObject.Parse(msgData)); - } - //鎾ら槻 - else if (topic == gatewayId + "/Security/WithdrawMode_Respon") - { - this.RemoveSafetyGarrisonPush(JObject.Parse(msgData)); - } - //甯冮槻 - else if (topic == gatewayId + "/Security/EnableMode_Respon") - { - this.SetSafetyGarrisonPush(JObject.Parse(msgData)); - } - //閫昏緫瑙﹀彂涓婃姤 - else if (topic == gatewayId + "/Logic/Execute_Respon") - { - this.LogicExecutePush(JObject.Parse(msgData)); - } - //鍦烘櫙瑙﹀彂涓婃姤 - else if (topic == gatewayId + "/Scene/Exec_Respon") - { - this.SceneExecPush(null); - } - } - catch (Exception ex) - { - //Log鍑哄姏 - HdlLogLogic.Current.WriteLog(ex); - } - } - - #endregion - - #region 鈻� 璁惧灞炴�т笂鎶______________________ - - /// <summary> - /// 璁惧灞炴�т笂鎶� - /// </summary> - /// <param name="receiveData"></param> - private void DeviceAttributeReportPush(JObject receiveData) - { - if (this.dicDeviceEvent.Count == 0) - { - //娌℃湁娣诲姞鐩戝惉 - return; - } - var deviceAddr = receiveData.Value<string>("DeviceAddr"); - var deviceEpoint = receiveData.Value<int>("Epoint"); - - var report = new CommonDevice { DeviceAddr = deviceAddr, DeviceEpoint = deviceEpoint }; - report.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(receiveData["Data"].ToString()); - if (report.DeviceStatusReport.AttriBute.Count == 0) - { - //缃戝叧鏈変簺濂囪懇锛屾病鏈夊睘鎬у畠涔熶細鍙戣繃鏉� - return; - } - - //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 - var locadevice = Common.LocalDevice.Current.GetDevice(deviceAddr, deviceEpoint); - if (locadevice != null) - { - //鏈夊弽棣�,杩欎釜璁惧鑲畾鏄湪绾跨殑 - locadevice.IsOnline = 1; - locadevice.LastDateTime = DateTime.Now; - - #region 鈻� 寮�鍏冲姛鑳� - //寮�鍏冲姛鑳� - if (report.DeviceStatusReport.CluterID == 6) - { - if (locadevice is LightBase) - { - locadevice.DeviceStatusReport = report.DeviceStatusReport; - ((LightBase)locadevice).OnOffStatus = report.DeviceStatusReport.AttriBute[0].AttriButeData; - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - } - #endregion - - #region 鈻� 鐢甸噺鎺ㄩ�� - //鐢甸噺鎺ㄩ�� - if (report.DeviceStatusReport.CluterID == 1) - { - foreach (var attData in report.DeviceStatusReport.AttriBute) - { - //鐢甸噺 - if (attData.AttributeId == 33) - { - string receiptData = string.Empty; - //涓や釜涓や釜浣嶇疆鏇挎崲 - for (int i = attData.AttriButeDataHex.Length - 1; i >= 0; i = i - 2) - { - receiptData += attData.AttriButeDataHex[i - 1].ToString() + attData.AttriButeDataHex[i].ToString(); - } - int batteryValue = Convert.ToInt32(receiptData, 16); - //浣庝簬20%,鍒欎唬琛ㄧ數閲忎綆 - locadevice.IsBatteryDown = batteryValue < 20; - } - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - } - - #endregion - - #region 鈻� 铚傞福鍣ㄦ帹閫� - //铚傞福鍣ㄦ暟鎹� - else if (report.DeviceStatusReport.CluterID == 1282) - { - //mini澶滅伅 - if (Common.LocalDevice.Current.IsMiniLight(locadevice) == true) - { - foreach (var attData in report.DeviceStatusReport.AttriBute) - { - if (attData.AttributeId == 0) - { - //杩欎釜鏄姤璀︽寔缁椂闂�(澶т簬2绉掓椂,鏍囪涓鸿繕鍦ㄥ搷鐫�) - ((ColorTemperatureLight)locadevice).IsBuzzerRing = attData.AttriButeData > 2 ? true : false; - } - } - } - } - #endregion - - #region 鈻� 绐楀笜鏁版嵁 - //绐楀笜鏁版嵁 - else if (report.DeviceStatusReport.CluterID == 258) - { - //绐楀笜绫诲瀷 - if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) - { - locadevice.DeviceStatusReport = report.DeviceStatusReport; - ((Rollershade)locadevice).WcdType = report.DeviceStatusReport.AttriBute[0].AttriButeData; - //杩欎釜涓滆タ瑕佷繚瀛� - locadevice.ReSave(); - } - //绐楀笜鐧惧垎姣� - else if (report.DeviceStatusReport.AttriBute[0].AttributeId == 8) - { - locadevice.DeviceStatusReport = report.DeviceStatusReport; - ((Rollershade)locadevice).WcdCurrentPositionLiftPercentage = report.DeviceStatusReport.AttriBute[0].AttriButeData; - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - } - #endregion - - #region 鈻� 绌鸿皟鍜屾柊椋庢暟鎹� - //绌鸿皟鏁版嵁 - else if (report.DeviceStatusReport.CluterID == 513) - { - locadevice.DeviceStatusReport = report.DeviceStatusReport; - foreach (var attData in report.DeviceStatusReport.AttriBute) - { - var curTemp = attData.AttriButeData / 100; - if (attData.AttributeId == 0) - { - //姝ゅ睘鎬ц〃鏄庡鍐呭綋鍓嶇殑娓╁害 * 100锛屽疄闄呮俯搴︿负鈥淟ocalTemperature / 100鈥濓紝鍗曚綅锛氣剝 - ((AC)locadevice).currentLocalTemperature = curTemp; - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - else if (attData.AttributeId == 17) - { - //姝ゅ睘鎬ц〃鏄庡鍐呭綋鍓嶇殑娓╁害 * 100锛屽疄闄呮俯搴︿负鈥淟ocalTemperature / 100鈥濓紝鍗曚綅锛氣剝 - ((AC)locadevice).currentCoolingSetpoint = curTemp; - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - else if (attData.AttributeId == 18) - { - //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勫埗鐑俯搴︼紝瀹為檯娓╁害涓衡�淗eatingSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆� - ((AC)locadevice).currentHeatingSetpoint = curTemp; - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - else if (attData.AttributeId == 28) - { - //姝ゅ睘鎬ф弿杩版亽娓╄澶囨澶勪簬鍝妯″紡 - ((AC)locadevice).currentSystemMode = attData.AttriButeData; - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - else if (attData.AttributeId == 4096) - { - //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勮嚜鍔ㄦ俯搴︼紝瀹為檯娓╁害涓衡�淎utoSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆� - ((AC)locadevice).currentAutoSetpoint = curTemp; - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - else if (attData.AttributeId == 4097) - { - //杩囪檻缃戞竻娲楁爣蹇�:42 - ((AC)locadevice).CleanStatu = attData.AttriButeData == 42; - } - else if (attData.AttributeId == 4099) - { - //杞崲涓轰簩杩涘埗 - var value = Convert.ToString(attData.AttriButeData, 2).PadLeft(16, '0'); - //杩欎簲涓缃槸鏀惧湪鍚庨潰鐨� - value = value.Substring(value.Length - 5, 5); - for (int i = 0; i < value.Length; i++) - { - //鑷畾涔夌殑绌鸿皟妯″紡 - ((AC)locadevice).listSupportMode[i] = Convert.ToInt32(value[i].ToString()); - } - locadevice.ReSave(); - } - } - } - //绌鸿皟鏁版嵁 - else if (report.DeviceStatusReport.CluterID == 514) - { - locadevice.DeviceStatusReport = report.DeviceStatusReport; - foreach (var attData in report.DeviceStatusReport.AttriBute) - { - //鍖哄垎鏄┖璋冭繕鏄柊椋� - var device = Shared.Common.LocalDevice.Current.GetDevice(report.DeviceAddr, report.DeviceEpoint); - - if (device.Type == DeviceType.FreshAir) - { - if (attData.AttributeId == 0) - { - switch (attData.AttriButeData) - { - case 0: - case 4: - ((FreshAir)locadevice).currentFanStatus = attData.AttriButeData; - break; - case 1: - case 2: - case 3: - ((FreshAir)locadevice).currentFanSpeed = attData.AttriButeData; - break; - case 5: - case 15: - ((FreshAir)locadevice).currentFanMode = attData.AttriButeData; - break; - } - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - } - else - { - if (attData.AttributeId == 0) - { - //椋庢墖妯″紡 - ((AC)locadevice).currentFanMode = attData.AttriButeData; - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - else if (attData.AttributeId == 4096) - { - //椋庢墖鎵 - ((AC)locadevice).currentFanSwingMode = attData.AttriButeData; - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - else if (attData.AttributeId == 4097) - { - //杞崲涓轰簩杩涘埗 - var value = Convert.ToString(attData.AttriButeData, 2).PadLeft(16, '0'); - //杩欎釜璁剧疆鏄斁鍦ㄥ悗闈㈢殑 - value = value.Substring(value.Length - 1, 1); - //鍚敤鎽嗛鍔熻兘 - ((AC)locadevice).UseSwingFunction = value == "1"; - locadevice.ReSave(); - } - } - } - } - #endregion - - #region 鈻� 浜害鏁版嵁 - //浜害鏁版嵁 - else if (report.DeviceStatusReport.CluterID == 8) - { - locadevice.DeviceStatusReport = report.DeviceStatusReport; - if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) - { - if (locadevice.Type == DeviceType.DimmableLight) - { - //姝ゅ睘鎬ц〃鏄庡綋鍓嶄寒搴︾▼搴� - ((DimmableLight)locadevice).Level = report.DeviceStatusReport.AttriBute[0].AttriButeData; - } - else if (locadevice.Type == DeviceType.ColorTemperatureLight) - { - //姝ゅ睘鎬ц〃鏄庡綋鍓嶄寒搴︾▼搴� - ((ColorTemperatureLight)locadevice).Level = report.DeviceStatusReport.AttriBute[0].AttriButeData; - } - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - - //if (locadevice is LightBase) - //{ - // //褰撴帴鏀跺埌浜害鍊兼椂,榛樿鎵撳紑 - // ((LightBase)locadevice).OnOffStatus = 1; - //} - } - } - #endregion - - #region 鈻� 鑹叉俯鏁版嵁 - //鑹叉俯鏁版嵁 - else if (report.DeviceStatusReport.CluterID == 768) - { - locadevice.DeviceStatusReport = report.DeviceStatusReport; - if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) - { - if (locadevice.Type == DeviceType.ColorTemperatureLight) - { - //姝ゅ睘鎬ц〃鏄庡綋鍓嶈壊娓� - int value = report.DeviceStatusReport.AttriBute[0].AttriButeData != 0 ? 1000000 / report.DeviceStatusReport.AttriBute[0].AttriButeData : 0; - ((ColorTemperatureLight)locadevice).ColorTemperature = value; - } - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - } - #endregion - - #region 鈻� 娓╁害鏁版嵁 - //娓╁害鏁版嵁 - else if (report.DeviceStatusReport.CluterID == 1026) - { - foreach (var attData in report.DeviceStatusReport.AttriBute) - { - //娓╁害 - if (attData.AttributeId == (int)AttriButeId.MeasuredValue) - { - decimal temperatrue = 0; - string receiptData = string.Empty; - //涓や釜涓や釜浣嶇疆鏇挎崲 - for (int i = attData.AttriButeDataHex.Length - 1; i >= 0; i = i - 2) - { - receiptData += attData.AttriButeDataHex[i - 1].ToString() + attData.AttriButeDataHex[i].ToString(); - } - //鏈夌鍙�(浼氬嚭鐜拌礋鏁�) - if (attData.AttriButeDataType == 40 || attData.AttriButeDataType == 41) - { - //灏忔暟鐐归渶瑕佷竴浣� - string strValue = Convert.ToInt16(receiptData, 16).ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); - } - //鏃犵鍙�(涓嶄細鍑虹幇璐熸暟) - else if (attData.AttriButeDataType == 32 || attData.AttriButeDataType == 33) - { - ushort shortData = Convert.ToUInt16(receiptData, 16); - if (shortData > 32767) - { - //璐熸暟(鐗规畩澶勭悊) - string strValue = (shortData - 65536).ToString(); - //灏忔暟鐐归渶瑕佷竴浣� - strValue = strValue.Substring(0, strValue.Length - 1); - temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); - } - else - { - //灏忔暟鐐归渶瑕佷竴浣� - string strValue = shortData.ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); - } - } - - //娓╁害浼犳劅鍣� - if (locadevice is TemperatureSensor) - { - ((TemperatureSensor)locadevice).currentTemperature = temperatrue; - } - //PM2.5浼犳劅鍣� - else if (locadevice is PMSensor) - { - ((PMSensor)locadevice).currentTemperature = (int)temperatrue; - } - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - //娓╁害鍊奸渶瑕佷繚瀛� - locadevice.ReSave(); - } - } - } - #endregion - - #region 鈻� 婀垮害鏁版嵁 - //婀垮害鏁版嵁 - else if (report.DeviceStatusReport.CluterID == 1029) - { - foreach (var attData in report.DeviceStatusReport.AttriBute) - { - //婀垮害 - if (attData.AttributeId == (int)AttriButeId.MeasuredValue) - { - decimal humidity = 0; - string receiptData = string.Empty; - //涓や釜涓や釜浣嶇疆鏇挎崲 - for (int i = attData.AttriButeDataHex.Length - 1; i >= 0; i = i - 2) - { - receiptData += attData.AttriButeDataHex[i - 1].ToString() + attData.AttriButeDataHex[i].ToString(); - } - //鏈夌鍙�(浼氬嚭鐜拌礋鏁�) - if (attData.AttriButeDataType == 40 || attData.AttriButeDataType == 41) - { - //灏忔暟鐐归渶瑕佷竴浣� - string strValue = Convert.ToInt16(receiptData, 16).ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); - } - //鏃犵鍙�(涓嶄細鍑虹幇璐熸暟) - else if (attData.AttriButeDataType == 32 || attData.AttriButeDataType == 33) - { - //灏忔暟鐐归渶瑕佷竴浣� 婀垮害涓嶄細鍑虹幇璐熸暟 - string strValue = Convert.ToUInt16(receiptData, 16).ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); - } - //婀垮害浼犳劅鍣� - if (locadevice is TemperatureSensor) - { - ((TemperatureSensor)locadevice).currentHumidity = humidity; - } - //鏂伴鐨勬箍搴︿紶鎰熷櫒 - else if (locadevice is HumiditySensor) - { - ((HumiditySensor)locadevice).currentHumidity = humidity; - } - //PM2.5浼犳劅鍣� - else if (locadevice is PMSensor) - { - ((PMSensor)locadevice).currentHumidity = (int)humidity; - } - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - //婀垮害鍊奸渶瑕佷繚瀛� - locadevice.ReSave(); - } - } - } - #endregion - - #region 鈻� PM2.5鏁版嵁 - //PM2.5鏁版嵁 - else if (report.DeviceStatusReport.CluterID == 1066) - { - foreach (var attData in report.DeviceStatusReport.AttriBute) - { - //PM2.5 - if (attData.AttributeId == (int)AttriButeId.MeasuredValue) - { - - if (attData.AttriButeDataType == 57) - { - ((PMSensor)locadevice).currentPmData = attData.AttriButeData; - } - } - //宸茬粡鎺ユ敹鍒扮姸鎬� - locadevice.HadReadDeviceStatu = true; - } - } - - #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璁惧灞炴�т笂鎶�); - } - - #endregion - - #region 鈻� 浼犳劅鍣ㄤ笂鎶________________________ - - /// <summary> - /// 浼犳劅鍣ㄨ澶囦笂鎶� - /// </summary> - /// <param name="receiveData"></param> - private void SensorDeviceReportPush(JObject receiveData) - { - var ias = new IASZone() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; - ias.iASInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<IASZone.IASInfoData>(receiveData["Data"].ToString()); - - //濡傛灉娌℃湁娣诲姞鍏ュ畨闃� - if (HdlSafeguardLogic.Current.GetZoneIdByIASZone(ias) != -1) - { - //淇濆瓨瀹夐槻鎶ヨ淇℃伅鍒版湰鍦� - HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(ias); - } - - //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 - var locadevice = Common.LocalDevice.Current.GetDevice(ias.DeviceAddr, ias.DeviceEpoint); - if (locadevice != null) - { - ((IASZone)locadevice).iASInfo = ias.iASInfo; - //濡傛灉鎺ユ敹鍒颁笂鎶�,鍗宠鏄庤繖涓紶鎰熷櫒鏄湪绾跨殑 - locadevice.IsOnline = 1; - //璁板綍鍥炲鏃堕棿 - locadevice.LastDateTime = DateTime.Now; - } - - this.DeviceReportPush(ias, ReceiveComandDiv.A浼犳劅鍣ㄤ笂鎶�); - - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); - } - - #endregion - - #region 鈻� 闂ㄩ攣涓婃姤___________________________ - - /// <summary> - /// 闂ㄩ攣涓婃姤 - /// </summary> - /// <param name="receiveData"></param> - private void DoorLockDeviceReportPush(JObject receiveData) - { - if (UserCenterResourse.UserInfo.AuthorityNo == 1) - { - var device = Common.LocalDevice.Current.GetDevice(receiveData.Value<string>("DeviceAddr"), receiveData.Value<int>("Epoint")); - if (device.Type != DeviceType.DoorLock) - { - //瀹冧笉鏄棬閿� - return; - } - - var info = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockAlarmsResult>(receiveData["Data"].ToString()); - if (info.Clusterid == 257) - { - //216锛氶攣涓婅缃殑甯稿紑 - if (info.AlarmCode == 216) - { - HdlThreadLogic.Current.RunMain(() => - { - //鏇存柊闂ㄩ攣娑夊強鐨勫父寮�/甯稿叧鐨勭晫闈� - if (UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction != null) - { - UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction(device.DeviceAddr, true); - } - }); - } - } - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); - } - } - #endregion - - #region 鈻� 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣坃______________ - - /// <summary> - /// 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣� - /// </summary> - /// <param name="receiveData"></param> - private void DeviceOnlineChangePush(JObject receiveData) - { - if (this.dicDeviceEvent.Count == 0) - { - //娌℃湁娣诲姞鐩戝惉 - return; - } - var tempDevice = new CommonDevice() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; - tempDevice.IsOnline = Convert.ToInt32(receiveData["Data"]["IsOnline"].ToString()); - - //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 - var locadevice = Common.LocalDevice.Current.GetDevicesByMac(tempDevice.DeviceAddr); - for (int i = 0; i < locadevice.Count; i++) - { - bool onlineChanged = locadevice[i].IsOnline != tempDevice.IsOnline; - locadevice[i].IsOnline = tempDevice.IsOnline; - //璁板綍鍥炲鏃堕棿 - locadevice[i].LastDateTime = DateTime.Now; - if (onlineChanged == true) - { - //鍦ㄧ嚎鐘舵�佸彉鏇翠簡,鎵嶄繚瀛� - locadevice[i].ReSave(); - } - } - - this.DeviceReportPush(tempDevice, ReceiveComandDiv.A璁惧鍦ㄧ嚎涓婃姤); - } - - #endregion - - #region 鈻� 璁惧鎺у埗鐘舵�佸弽棣坃__________________ - - /// <summary> - /// 璁惧鎺у埗鐘舵�佸弽棣� - /// </summary> - /// <param name="receiveData"></param> - private void DeviceControlResponePush(JObject receiveData) - { - if (this.dicDeviceEvent.Count == 0) - { - //娌℃湁娣诲姞鐩戝惉 - return; - } - var tempDevice = new CommonDevice() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; - - this.DeviceReportPush(tempDevice, ReceiveComandDiv.A鑺傜偣鎺у埗鍙嶉); - } - - #endregion - - #region 鈻� 甯冮槻_______________________________ - - /// <summary> - /// 甯冮槻鎺ㄩ�� - /// </summary> - /// <param name="receiveData"></param> - private void SetSafetyGarrisonPush(JObject receiveData) - { - var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Safeguard.EnableModeResponseData>(receiveData["Data"].ToString()); - if (data.Result == 0) - { - var garrison = GarrisonMode.None; - //鍦ㄥ甯冮槻 - if (data.ModeId == 1) { garrison = GarrisonMode.AtHome; } - //绂诲甯冮槻 - else if (data.ModeId == 2) { garrison = GarrisonMode.RemoveHome; } - else { return; } - - //淇濆瓨鎶ヨ淇℃伅鐒跺悗鎺ㄩ�佸埌鐣岄潰涓� - HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison); - if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true) - { - //鎺ㄩ�� - var form = (Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"]; - form?.GarrisonModePush(garrison); - } - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); - } - } - - #endregion - - #region 鈻� 鎾ら槻_______________________________ - - /// <summary> - /// 鎾ら槻鎺ㄩ�� - /// </summary> - /// <param name="receiveData"></param> - private void RemoveSafetyGarrisonPush(JObject receiveData) - { - var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Safeguard.WithdrawModeResponseData>(receiveData["Data"].ToString()); - if (data.Result == 0) - { - //淇濆瓨鎶ヨ淇℃伅鐒跺悗鎺ㄩ�佸埌鐣岄潰涓� - HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(GarrisonMode.RemoveGarrison); - if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true) - { - //鎺ㄩ�� - var form = (Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"]; - form?.GarrisonModePush(GarrisonMode.RemoveGarrison); - } - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); - } - } - - #endregion - - #region 鈻� 閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻_______________ - - /// <summary> - /// 閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻 - /// </summary> - /// <param name="receiveData">鎺ユ敹鐨勬暟鎹�</param> - private void SecurityEnOrWithdrawSucceedReport(JObject receiveData) - { - var data = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityEnOrWithdrawResult>(receiveData["Data"].ToString()); - if (data.EnOrWithdraw == -1 || data.ModeId == -1 || data.OperationWay == -1) - { - return; - } - var garrison = GarrisonMode.None; - if (data.EnOrWithdraw == 0) - { - //鍦ㄥ甯冮槻 - if (data.ModeId == 1) { garrison = GarrisonMode.AtHome; } - //绂诲甯冮槻 - else if (data.ModeId == 2) { garrison = GarrisonMode.RemoveHome; } - } - else if (data.EnOrWithdraw == 1) - { - //鎾ら槻 - garrison = GarrisonMode.RemoveGarrison; - } - string appendText = string.Empty; - //鑷姩鍖� - if (data.OperationWay == 0) { appendText = "(" + Language.StringByID(R.MyInternationalizationString.uLogicOperation) + ")"; } - //鎸夐敭鎿嶄綔 - else if (data.OperationWay == 1) { appendText = "(" + Language.StringByID(R.MyInternationalizationString.uPanelOperation) + ")"; } - - //淇濆瓨鎶ヨ淇℃伅鐒跺悗鎺ㄩ�佸埌鐣岄潰涓� - HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison, appendText); - if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true) - { - //鎺ㄩ�� - var form = (Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"]; - form?.GarrisonModePush(garrison); - } - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); - } - - /// <summary> - /// 閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻鐨勬帴鏀剁粨鏋� - /// </summary> - private class SecurityEnOrWithdrawResult - { - /// <summary> - /// 0锛氬竷闃叉垚鍔� 1锛氭挙闃叉垚鍔� - /// </summary> - public int EnOrWithdraw = -1; - /// <summary> - /// 瀹夐槻妯″紡id - /// </summary> - public int ModeId = -1; - /// <summary> - /// 澶栭儴甯冩挙闃叉柟寮�-> 0:鎵ц閫昏緫鍔ㄤ綔 1:鎸夐敭鎿嶄綔 - /// </summary> - public int OperationWay = -1; - } - - #endregion - - #region 鈻� 閫昏緫瑙﹀彂涓婃姤_______________________ - - /// <summary> - /// 閫昏緫瑙﹀彂涓婃姤 - /// </summary> - /// <param name="receiveData"></param> - private void LogicExecutePush(JObject receiveData) - { - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); - - // 閫昏緫鎵ц甯稿紑妯″紡澶辨晥鐨勬儏鍐� - if (UserCenterResourse.UserInfo.AuthorityNo == 1) - { - //鑷姩鍖栨墽琛� 甯稿紑鍏抽棴 - var data = Newtonsoft.Json.JsonConvert.DeserializeObject<LogicPushResult>(receiveData["Data"].ToString()); - if (data != null && data.ActionData != null) - { - if (data.ActionData.Actiontype == 8 && data.ActionData.PassDataString == "055704010113") - { - var deviceAddr = data.ActionData.MacStr; - var device = Common.LocalDevice.Current.GetDevicesByMac(deviceAddr, false); - if (device.Count > 0 && device[0].Type != DeviceType.DoorLock) - { - return; - } - - HdlThreadLogic.Current.RunThread(async () => - { - HdlThreadLogic.Current.RunMain(() => - { - //鎻愮ず闂ㄩ攣宸茬粡澶辨晥 - new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.NormallyClosed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); - - //鏇存柊闂ㄩ攣娑夊強鐨勫父寮�/甯稿叧鐨勭晫闈� - if (UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction != null) - { - UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction(deviceAddr, false); - } - }); - }); - } - } - } - } - #endregion - - #region 鈻� 鍦烘櫙瑙﹀彂涓婃姤_______________________ - - /// <summary> - /// 鍦烘櫙瑙﹀彂涓婃姤 - /// </summary> - /// <param name="receiveData"></param> - private void SceneExecPush(JObject receiveData) - { - //鐩墠涓嶅鐞嗗満鏅笂鎶ュ唴瀹� - - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); - } - - #endregion - - - - #region 鈻� 娣诲姞璁惧浜嬩欢_______________________ - - /// <summary> - /// 娣诲姞鑾峰彇璁惧灞炴�х殑浜嬩欢(灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport) - /// </summary> - /// <param name="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param> - /// <param name="comand">鍛戒护鍖哄垎</param> - /// <param name="action"> - /// <para>褰撴帴鏀跺埌缃戝叧鍥炲涔嬪悗鐨勫洖璋冨嚱鏁�</para> - /// <para>璁惧灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport</para> - /// <para>浼犳劅鍣ㄤ笂鎶ョ殑瀵硅薄锛歩as.iASInfo</para> - /// <para>璁惧鍦ㄧ嚎涓婃姤鐨勫璞★細device.IsOnline</para></param> - public void AddAttributeEvent(string mainKeys, ReceiveComandDiv comand, Action<CommonDevice> action) - { - lock (this.dicDeviceEvent) - { - if (this.dicDeviceEvent.ContainsKey(mainKeys) == true) - { - this.RemoveEvent(mainKeys); - } - this.dicDeviceEvent[mainKeys] = action; - this.dicCommandDiv[mainKeys] = comand; - } - } - - #endregion - - #region 鈻� 绉婚櫎璁惧鐩戝惉_______________________ - - /// <summary> - /// 绉婚櫎浜嬩欢 - /// </summary> - /// <param name="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param> - public void RemoveEvent(string mainKeys) - { - lock (this.dicDeviceEvent) - { - if (this.dicDeviceEvent.ContainsKey(mainKeys) == true) - { - var action = this.dicDeviceEvent[mainKeys]; - this.dicDeviceEvent.Remove(mainKeys); - this.dicCommandDiv.Remove(mainKeys); - - action = null; - } - } - } - - /// <summary> - /// 绉婚櫎鍏ㄩ儴鐨勪簨浠� - /// </summary> - public void RemoveAllEvent() - { - lock (this.dicDeviceEvent) - { - var list = new HashSet<string>(); - foreach (var keys in this.dicDeviceEvent.Keys) - { - list.Add(keys); - } - foreach (var keys in list) - { - //闇�瑕佹參鎱竴涓竴涓殑閲婃斁Action,鍚 - this.RemoveEvent(keys); - } - } - } - - #endregion - - #region 鈻� 涓�鑸柟娉昣__________________________ - - /// <summary> - /// 璁惧涓婃姤鎺ㄩ��(璋冪敤姝ゆ柟娉�,浠栦細鎺ㄩ�佸埌鍚勮嚜鐨勭晫闈�) - /// </summary> - /// <param name="common"></param> - /// <param name="comand"></param> - public void DeviceReportPush(CommonDevice common, ReceiveComandDiv comand) - { - if (this.dicDeviceEvent.Count == 0) - { - //娌℃湁娣诲姞鐩戝惉 - return; - } - //lock (this.dicDeviceEvent) - { - var list = new List<Action<CommonDevice>>(); - try - { - foreach (string keys in this.dicDeviceEvent.Keys) - { - if (this.dicCommandDiv[keys] != comand) - { - //鍛戒护鍖哄垎涓嶄竴鑷达紝鍒欎笉璋冪敤鍥炶皟鍑芥暟 - continue; - } - //鍛戒护鍖哄垎涓�鑷存椂锛屽垯璋冪敤鍥炶皟鍑芥暟 - list.Add(this.dicDeviceEvent[keys]); - } - } - catch { return; } - //鏈夊彲鑳藉湪鍥炶皟鍑芥暟涓Щ闄や簡浜嬩欢锛屽鑷存姤閿欙紝鎵�浠ュ厛鏀堕泦锛屽啀璋冪敤 - foreach (var action in list) - { - try - { - action?.Invoke(common); - } - catch (Exception ex) - { - //Log鍑哄姏 - string msg = "鎺ㄩ�侀敊璇�! 褰撳墠婵�娲荤殑鐣岄潰[" + UserCenterResourse.NowActionFormID + "]"; - HdlLogLogic.Current.WriteLog(ex, msg); - } - } - } - } - - /// <summary> - /// 鏄惁瀛樺湪鎸囧畾鐨勪簨浠� - /// </summary> - /// <param name="mainkeys"></param> - /// <returns></returns> - public bool IsEsixt(string mainkeys) - { - return this.dicCommandDiv.ContainsKey(mainkeys); - } - - /// <summary> - /// 鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - /// </summary> - private void ShowHadNewMessageAppeal() - { - //鏈夋柊娑堟伅(鐗规晥杩樺湪鏃�,涓嶉渶瑕佸啀澶勭悊) - if (ControlCommonResourse.HadNewMessage == false) - { - HdlThreadLogic.Current.RunMain(() => - { - for (int i = 0; i < ControlCommonResourse.listMessageManaContr.Count; i++) - { - //鏄剧ず瑙掓爣鐗规晥 - ControlCommonResourse.listMessageManaContr[i].IsSelected = true; - } - ControlCommonResourse.HadNewMessage = true; - }); - } - } - - #endregion - } - + /// <param name="gatewayId">缃戝叧ID</param> + /// <param name="topic">鏁翠釜涓婚</param> + /// <param name="reportTopic">涓婃姤鏁版嵁鐨勪富棰�</param> + /// <param name="msgData">鎺ユ敹鐨勬暟鎹�</param> + public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, string msgData) + { + if (topic == "AppNoLogin") + { + HdlThreadLogic.Current.RunMain(() => + { + //鐧诲綍瀵嗗寵宸茬粡杩囨湡,璇烽噸鏂扮櫥褰� + string msg = Language.StringByID(R.MyInternationalizationString.uTokenIsOldAndLoginAgain); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + return; + } + else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.ConnEmqClientId + "/Push/NotifySqueeze") + { + HdlThreadLogic.Current.RunMain(() => + { + //姝ゅ笎鍙峰凡鍦ㄥ埆澶勭櫥褰�,鎮ㄨ杩笅绾� + string msg = Language.StringByID(R.MyInternationalizationString.uHadBeenLoginAndOffLine); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + return; + } + else if (topic == "YouIpAndPortNoRecord") + { + HdlThreadLogic.Current.RunMain(() => + { + //鎮ㄥ綋鍓嶇殑IP鍙婄鍙e湪浜戠涓嶅瓨鍦�,璇烽噸鏂扮櫥褰�! + string msg = Language.StringByID(R.MyInternationalizationString.uYouIpAndPortNoRecord); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + return; + } + else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Home.Id + "_" + Common.Config.Instance.Guid + "/PrimaryUserDelYou") + { + HdlThreadLogic.Current.RunMain(() => + { + //鍒嗕韩浣忓畢宸叉洿鏀癸紝璇疯仈绯荤鐞嗗憳锛� + string msg = Language.StringByID(R.MyInternationalizationString.uShardResidenceHadDeletePleaseTakeToAdmin); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + return; + } + else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/Update") + { + HdlThreadLogic.Current.RunMain(() => + { + //鎮ㄧ殑鏉冮檺宸茬粡鍙樻洿,璇烽噸鏂扮櫥闄� + string msg = Language.StringByID(R.MyInternationalizationString.uYouAccessHadChangedPleaseTakeToAdmin); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + return; + } + else if (UserCenterResourse.UserInfo.AuthorityNo == 3) + { + if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/Deleted" + || topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/DeletedShareData") + { + HdlThreadLogic.Current.RunMain(() => + { + //鍒嗕韩鏁版嵁宸茬粡鍙樻洿,璇烽噸鏂扮櫥闄� + string msg = Language.StringByID(R.MyInternationalizationString.uShardDataIsChangedPleaseLoginAgain); + var contr = new ShowMsgControl(ShowMsgType.Tip, msg); + contr.Show(); + + UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account, false); + }); + return; + } + } + + try + { + if (HdlGatewayLogic.Current.IsGatewayExist(gatewayId) == false) + { + //涓嶆槸鑷繁缁戝畾鐨勭綉鍏筹紝鍒欎笉澶勭悊 + return; + } + //璁惧灞炴�т笂鎶� + if (reportTopic == "DeviceStatusReport") + { + //璁惧灞炴�т笂鎶� + this.DeviceAttributeReportPush(JObject.Parse(msgData)); + } + //浼犳劅鍣ㄤ笂鎶� + else if (reportTopic == "IASInfoReport") + { + this.SensorDeviceReportPush(JObject.Parse(msgData)); + } + //闂ㄩ攣涓婃姤 + else if (topic == gatewayId + "/Alarms/SendAlarmInform") + { + this.DoorLockDeviceReportPush(JObject.Parse(msgData)); + } + //閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻鎴愬姛鏃舵姤鍛� + else if (topic == gatewayId + "/Security/EnOrWithdrawSucceedReport") + { + this.SecurityEnOrWithdrawSucceedReport(JObject.Parse(msgData)); + } + //璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣� + else if (reportTopic == "OnlineStatusChange_Respon") + { + this.DeviceOnlineChangePush(JObject.Parse(msgData)); + } + //璁惧鎺у埗鐘舵�佸弽棣� + else if (reportTopic == "DeviceDefaultAck") + { + this.DeviceControlResponePush(JObject.Parse(msgData)); + } + //鎾ら槻 + else if (topic == gatewayId + "/Security/WithdrawMode_Respon") + { + this.RemoveSafetyGarrisonPush(JObject.Parse(msgData)); + } + //甯冮槻 + else if (topic == gatewayId + "/Security/EnableMode_Respon") + { + this.SetSafetyGarrisonPush(JObject.Parse(msgData)); + } + //閫昏緫瑙﹀彂涓婃姤 + else if (topic == gatewayId + "/Logic/Execute_Respon") + { + this.LogicExecutePush(JObject.Parse(msgData)); + } + //鍦烘櫙瑙﹀彂涓婃姤 + else if (topic == gatewayId + "/Scene/Exec_Respon") + { + this.SceneExecPush(null); + } + //缃戝叧鎺ユ敹浜嬩欢 + else if (gatewayId == this.GatewayReceiveId) + { + this.GatewayReceiveEvent?.Invoke(topic, msgData); + } + } + catch (Exception ex) + { + //Log鍑哄姏 + HdlLogLogic.Current.WriteLog(ex); + } + } + + #endregion + + #region 鈻� 璁惧灞炴�т笂鎶______________________ + /// <summary> - /// 鎺ユ敹鍛戒护鍖哄垎 + /// 璁惧灞炴�т笂鎶� /// </summary> - public enum ReceiveComandDiv - { - /// <summary> - /// 璁惧灞炴�т笂鎶� - /// </summary> - A璁惧灞炴�т笂鎶� = 1, - /// <summary> - /// 浼犳劅鍣ㄤ笂鎶� - /// </summary> - A浼犳劅鍣ㄤ笂鎶� = 2, - /// <summary> - /// 璁惧鍦ㄧ嚎涓婃姤 - /// </summary> - A璁惧鍦ㄧ嚎涓婃姤 = 3, - /// <summary> - /// 褰撳鎴风鍙戦�佹帶鍒惰澶囨寚浠わ紝濡傛墦寮�鎴栧叧闂澶囥�佽皟鑺備寒搴︺�侀鑹层�傚鏋滆鎺у埗鐨勮妭鐐硅澶囧湪绾匡紝鑺傜偣璁惧灏嗗弽棣� - /// </summary> - A鑺傜偣鎺у埗鍙嶉 = 4 - } + /// <param name="receiveData"></param> + private void DeviceAttributeReportPush(JObject receiveData) + { + if (this.dicDeviceEvent.Count == 0) + { + //娌℃湁娣诲姞鐩戝惉 + return; + } + var deviceAddr = receiveData.Value<string>("DeviceAddr"); + var deviceEpoint = receiveData.Value<int>("Epoint"); + + var report = new CommonDevice { DeviceAddr = deviceAddr, DeviceEpoint = deviceEpoint }; + report.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(receiveData["Data"].ToString()); + if (report.DeviceStatusReport.AttriBute.Count == 0) + { + //缃戝叧鏈変簺濂囪懇锛屾病鏈夊睘鎬у畠涔熶細鍙戣繃鏉� + return; + } + + var tempList = Common.LocalDevice.Current.GetDevicesByMac(report.DeviceAddr, false); + var res = Common.LocalDevice.Current.GetMyDeviceEnumInfo(tempList); + if (res.ConcreteType == Common.DeviceConcreteType.Airer) + { + //鏅捐。鏋剁壒娈婂鐞嗭紝鏈湴鍙瓨浜嗙鐐�1锛屽叾浣�2锝�5绔偣閮戒笉瀛� + deviceEpoint = 1; + } + //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 + var locadevice = Common.LocalDevice.Current.GetDevice(deviceAddr, deviceEpoint); + if (locadevice != null) + { + //鏈夊弽棣�,杩欎釜璁惧鑲畾鏄湪绾跨殑 + locadevice.IsOnline = 1; + locadevice.LastDateTime = DateTime.Now; + + #region 鈻� 寮�鍏冲姛鑳� + //鏅捐。鏋跺洖璺�2锛�3锛�4锛�5閮芥槸CluterID鏄�6 ,浣嗘槸鍔熻兘涓嶆槸寮�鍏� + if (locadevice.Type == DeviceType.Airer) + { + if (report.DeviceStatusReport.CluterID == 6) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + if (attData.AttributeId == 0) + { + //娉ㄦ剰鏅捐。鏋跺洖璺笂鎶ラ兘绔偣閮芥槸琚浛鎹负鍥炶矾1锛屾墍浠ヨ繖閲岀敤涓婃姤閮藉洖璺� + switch (report.DeviceEpoint) + { + //鐓ф槑 + case 2: + ((Airer)locadevice).OnOffStatus = report.DeviceStatusReport.AttriBute[0].AttriButeData; + break; + //椋庡共 + case 3: + ((Airer)locadevice).WindOnOffStatus = report.DeviceStatusReport.AttriBute[0].AttriButeData; + break; + //鐑樺共 + case 4: + ((Airer)locadevice).DryOnOffStatus = report.DeviceStatusReport.AttriBute[0].AttriButeData; + break; + //娑堟瘨 + case 5: + ((Airer)locadevice).DisinfectOnOffStatus = report.DeviceStatusReport.AttriBute[0].AttriButeData; + break; + } + } + //鏅捐。鏋讹紙椋庡共/鐑樺共/娑堟瘨锛夎缃殑鍓╀綑澶氬皯鏃堕棿瑙﹀彂 + else if (attData.AttributeId == 16386) + { + if (report.DeviceStatusReport.AttriBute.Count > 2) + { + //娉ㄦ剰鏅捐。鏋跺洖璺笂鎶ラ兘绔偣閮芥槸琚浛鎹负鍥炶矾1锛屾墍浠ヨ繖閲岀敤涓婃姤閮藉洖璺� + switch (report.DeviceEpoint) + { + //椋庡共 + case 3: + ((Airer)locadevice).WindRemainTime = report.DeviceStatusReport.AttriBute[1].AttriButeData; + break; + //鐑樺共 + case 4: + ((Airer)locadevice).DryRemainTime = report.DeviceStatusReport.AttriBute[1].AttriButeData; + break; + //娑堟瘨 + case 5: + ((Airer)locadevice).DisinfectRemainTime = report.DeviceStatusReport.AttriBute[1].AttriButeData; + break; + } + } + } + //鏅捐。鏋讹紙椋庡共/鐑樺共/娑堟瘨锛夎缃殑榛樿鏃堕棿 + else if (attData.AttributeId == 16385) + { + if (report.DeviceStatusReport.AttriBute.Count > 3) + { + //娉ㄦ剰鏅捐。鏋跺洖璺笂鎶ラ兘绔偣閮芥槸琚浛鎹负鍥炶矾1锛屾墍浠ヨ繖閲岀敤涓婃姤閮藉洖璺� + switch (report.DeviceEpoint) + { + //椋庡共 + case 3: + ((Airer)locadevice).WindTime = report.DeviceStatusReport.AttriBute[2].AttriButeData; + break; + //鐑樺共 + case 4: + ((Airer)locadevice).DryTime = report.DeviceStatusReport.AttriBute[2].AttriButeData; + break; + //娑堟瘨 + case 5: + ((Airer)locadevice).DisinfectTime = report.DeviceStatusReport.AttriBute[2].AttriButeData; + break; + } + } + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + } + else + { + //寮�鍏冲姛鑳� + if (report.DeviceStatusReport.CluterID == 6) + { + if (locadevice is LightBase) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + ((LightBase)locadevice).OnOffStatus = report.DeviceStatusReport.AttriBute[0].AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + } + #endregion + + #region 鈻� 鐢甸噺鎺ㄩ�� + //鐢甸噺鎺ㄩ�� + if (report.DeviceStatusReport.CluterID == 1) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //鐢甸噺 + if (attData.AttributeId == 33) + { + string receiptData = string.Empty; + //涓や釜涓や釜浣嶇疆鏇挎崲 + for (int i = attData.AttriButeDataHex.Length - 1; i >= 0; i = i - 2) + { + receiptData += attData.AttriButeDataHex[i - 1].ToString() + attData.AttriButeDataHex[i].ToString(); + } + int batteryValue = Convert.ToInt32(receiptData, 16); + //浣庝簬20%,鍒欎唬琛ㄧ數閲忎綆 + locadevice.IsBatteryDown = batteryValue < 20; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + + #endregion + + #region 鈻� 铚傞福鍣ㄦ帹閫� + //铚傞福鍣ㄦ暟鎹� + else if (report.DeviceStatusReport.CluterID == 1282) + { + //mini澶滅伅 + if (Common.LocalDevice.Current.IsMiniLight(locadevice) == true) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + if (attData.AttributeId == 0) + { + //杩欎釜鏄姤璀︽寔缁椂闂�(澶т簬2绉掓椂,鏍囪涓鸿繕鍦ㄥ搷鐫�) + ((ColorTemperatureLight)locadevice).IsBuzzerRing = attData.AttriButeData > 2 ? true : false; + } + } + } + } + #endregion + + #region 鈻� 绐楀笜鏁版嵁 + //绐楀笜鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 258) + { + //绐楀笜绫诲瀷 + if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + ((Rollershade)locadevice).WcdType = report.DeviceStatusReport.AttriBute[0].AttriButeData; + //杩欎釜涓滆タ瑕佷繚瀛� + locadevice.ReSave(); + } + //绐楀笜鐧惧垎姣� + else if (report.DeviceStatusReport.AttriBute[0].AttributeId == 8) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + ((Rollershade)locadevice).WcdCurrentPositionLiftPercentage = report.DeviceStatusReport.AttriBute[0].AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + #endregion + + #region 鈻� 绌鸿皟鍜屾柊椋庢暟鎹� + //绌鸿皟鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 513) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + var curTemp = attData.AttriButeData / 100; + if (attData.AttributeId == 0) + { + //姝ゅ睘鎬ц〃鏄庡鍐呭綋鍓嶇殑娓╁害 * 100锛屽疄闄呮俯搴︿负鈥淟ocalTemperature / 100鈥濓紝鍗曚綅锛氣剝 + ((AC)locadevice).currentLocalTemperature = curTemp; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 17) + { + //姝ゅ睘鎬ц〃鏄庡鍐呭綋鍓嶇殑娓╁害 * 100锛屽疄闄呮俯搴︿负鈥淟ocalTemperature / 100鈥濓紝鍗曚綅锛氣剝 + ((AC)locadevice).currentCoolingSetpoint = curTemp; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 18) + { + //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勫埗鐑俯搴︼紝瀹為檯娓╁害涓衡�淗eatingSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆� + ((AC)locadevice).currentHeatingSetpoint = curTemp; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 28) + { + //姝ゅ睘鎬ф弿杩版亽娓╄澶囨澶勪簬鍝妯″紡 + ((AC)locadevice).currentSystemMode = attData.AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 4096) + { + //姝ゅ睘鎬ц〃鏄庢璁惧褰撳墠鐨勮嚜鍔ㄦ俯搴︼紝瀹為檯娓╁害涓衡�淎utoSetpoint / 100鈥濓紝鍗曚綅锛氣剝銆� + ((AC)locadevice).currentAutoSetpoint = curTemp; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 4097) + { + //杩囪檻缃戞竻娲楁爣蹇�:42 + ((AC)locadevice).CleanStatu = attData.AttriButeData == 42; + } + else if (attData.AttributeId == 4099) + { + //杞崲涓轰簩杩涘埗 + var value = Convert.ToString(attData.AttriButeData, 2).PadLeft(16, '0'); + //杩欎簲涓缃槸鏀惧湪鍚庨潰鐨� + value = value.Substring(value.Length - 5, 5); + for (int i = 0; i < value.Length; i++) + { + //鑷畾涔夌殑绌鸿皟妯″紡 + ((AC)locadevice).listSupportMode[i] = Convert.ToInt32(value[i].ToString()); + } + locadevice.ReSave(); + } + } + } + //绌鸿皟鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 514) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //鍖哄垎鏄┖璋冭繕鏄柊椋� + var device = Shared.Common.LocalDevice.Current.GetDevice(report.DeviceAddr, report.DeviceEpoint); + + if (device.Type == DeviceType.FreshAir) + { + if (attData.AttributeId == 0) + { + switch (attData.AttriButeData) + { + case 0: + case 4: + ((FreshAir)locadevice).currentFanStatus = attData.AttriButeData; + break; + case 1: + case 2: + case 3: + ((FreshAir)locadevice).currentFanSpeed = attData.AttriButeData; + break; + case 5: + case 15: + ((FreshAir)locadevice).currentFanMode = attData.AttriButeData; + break; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + else + { + if (attData.AttributeId == 0) + { + //椋庢墖妯″紡 + ((AC)locadevice).currentFanMode = attData.AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 4096) + { + //椋庢墖鎵 + ((AC)locadevice).currentFanSwingMode = attData.AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + else if (attData.AttributeId == 4097) + { + //杞崲涓轰簩杩涘埗 + var value = Convert.ToString(attData.AttriButeData, 2).PadLeft(16, '0'); + //杩欎釜璁剧疆鏄斁鍦ㄥ悗闈㈢殑 + value = value.Substring(value.Length - 1, 1); + //鍚敤鎽嗛鍔熻兘 + ((AC)locadevice).UseSwingFunction = value == "1"; + locadevice.ReSave(); + } + } + } + } + #endregion + + #region 鈻� 浜害鏁版嵁 + //浜害鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 8) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) + { + if (locadevice.Type == DeviceType.DimmableLight) + { + //姝ゅ睘鎬ц〃鏄庡綋鍓嶄寒搴︾▼搴� + ((DimmableLight)locadevice).Level = report.DeviceStatusReport.AttriBute[0].AttriButeData; + } + else if (locadevice.Type == DeviceType.ColorTemperatureLight) + { + //姝ゅ睘鎬ц〃鏄庡綋鍓嶄寒搴︾▼搴� + ((ColorTemperatureLight)locadevice).Level = report.DeviceStatusReport.AttriBute[0].AttriButeData; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + + //if (locadevice is LightBase) + //{ + // //褰撴帴鏀跺埌浜害鍊兼椂,榛樿鎵撳紑 + // ((LightBase)locadevice).OnOffStatus = 1; + //} + } + } + #endregion + + #region 鈻� 鑹叉俯鏁版嵁 + //鑹叉俯鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 768) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) + { + if (locadevice.Type == DeviceType.ColorTemperatureLight) + { + //姝ゅ睘鎬ц〃鏄庡綋鍓嶈壊娓� + int value = report.DeviceStatusReport.AttriBute[0].AttriButeData != 0 ? 1000000 / report.DeviceStatusReport.AttriBute[0].AttriButeData : 0; + ((ColorTemperatureLight)locadevice).ColorTemperature = value; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + #endregion + + #region 鈻� 娓╁害鏁版嵁 + //娓╁害鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 1026) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //娓╁害 + if (attData.AttributeId == (int)AttriButeId.MeasuredValue) + { + decimal temperatrue = 0; + string receiptData = string.Empty; + //涓や釜涓や釜浣嶇疆鏇挎崲 + for (int i = attData.AttriButeDataHex.Length - 1; i >= 0; i = i - 2) + { + receiptData += attData.AttriButeDataHex[i - 1].ToString() + attData.AttriButeDataHex[i].ToString(); + } + //鏈夌鍙�(浼氬嚭鐜拌礋鏁�) + if (attData.AttriButeDataType == 40 || attData.AttriButeDataType == 41) + { + //灏忔暟鐐归渶瑕佷竴浣� + string strValue = Convert.ToInt16(receiptData, 16).ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + //鏃犵鍙�(涓嶄細鍑虹幇璐熸暟) + else if (attData.AttriButeDataType == 32 || attData.AttriButeDataType == 33) + { + ushort shortData = Convert.ToUInt16(receiptData, 16); + if (shortData > 32767) + { + //璐熸暟(鐗规畩澶勭悊) + string strValue = (shortData - 65536).ToString(); + //灏忔暟鐐归渶瑕佷竴浣� + strValue = strValue.Substring(0, strValue.Length - 1); + temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + else + { + //灏忔暟鐐归渶瑕佷竴浣� + string strValue = shortData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + } + + //娓╁害浼犳劅鍣� + if (locadevice is TemperatureSensor) + { + ((TemperatureSensor)locadevice).currentTemperature = temperatrue; + } + //PM2.5浼犳劅鍣� + else if (locadevice is PMSensor) + { + ((PMSensor)locadevice).currentTemperature = (int)temperatrue; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + //娓╁害鍊奸渶瑕佷繚瀛� + locadevice.ReSave(); + } + } + } + #endregion + + #region 鈻� 婀垮害鏁版嵁 + //婀垮害鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 1029) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //婀垮害 + if (attData.AttributeId == (int)AttriButeId.MeasuredValue) + { + decimal humidity = 0; + string receiptData = string.Empty; + //涓や釜涓や釜浣嶇疆鏇挎崲 + for (int i = attData.AttriButeDataHex.Length - 1; i >= 0; i = i - 2) + { + receiptData += attData.AttriButeDataHex[i - 1].ToString() + attData.AttriButeDataHex[i].ToString(); + } + //鏈夌鍙�(浼氬嚭鐜拌礋鏁�) + if (attData.AttriButeDataType == 40 || attData.AttriButeDataType == 41) + { + //灏忔暟鐐归渶瑕佷竴浣� + string strValue = Convert.ToInt16(receiptData, 16).ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + //鏃犵鍙�(涓嶄細鍑虹幇璐熸暟) + else if (attData.AttriButeDataType == 32 || attData.AttriButeDataType == 33) + { + //灏忔暟鐐归渶瑕佷竴浣� 婀垮害涓嶄細鍑虹幇璐熸暟 + string strValue = Convert.ToUInt16(receiptData, 16).ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + //婀垮害浼犳劅鍣� + if (locadevice is TemperatureSensor) + { + ((TemperatureSensor)locadevice).currentHumidity = humidity; + } + //鏂伴鐨勬箍搴︿紶鎰熷櫒 + else if (locadevice is HumiditySensor) + { + ((HumiditySensor)locadevice).currentHumidity = humidity; + } + //PM2.5浼犳劅鍣� + else if (locadevice is PMSensor) + { + ((PMSensor)locadevice).currentHumidity = (int)humidity; + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + //婀垮害鍊奸渶瑕佷繚瀛� + locadevice.ReSave(); + } + } + } + #endregion + + #region 鈻� PM2.5鏁版嵁 + //PM2.5鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 1066) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //PM2.5 + if (attData.AttributeId == (int)AttriButeId.MeasuredValue) + { + + if (attData.AttriButeDataType == 57) + { + ((PMSensor)locadevice).currentPmData = attData.AttriButeData; + } + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + + #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璁惧灞炴�т笂鎶�); + } + + #endregion + + #region 鈻� 浼犳劅鍣ㄤ笂鎶________________________ + + /// <summary> + /// 浼犳劅鍣ㄨ澶囦笂鎶� + /// </summary> + /// <param name="receiveData"></param> + private void SensorDeviceReportPush(JObject receiveData) + { + var ias = new IASZone() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; + ias.iASInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<IASZone.IASInfoData>(receiveData["Data"].ToString()); + + //濡傛灉娌℃湁娣诲姞鍏ュ畨闃� + if (HdlSafeguardLogic.Current.GetZoneIdByIASZone(ias) != -1) + { + //淇濆瓨瀹夐槻鎶ヨ淇℃伅鍒版湰鍦� + HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(ias); + } + + //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 + var locadevice = Common.LocalDevice.Current.GetDevice(ias.DeviceAddr, ias.DeviceEpoint); + if (locadevice != null) + { + ((IASZone)locadevice).iASInfo = ias.iASInfo; + //濡傛灉鎺ユ敹鍒颁笂鎶�,鍗宠鏄庤繖涓紶鎰熷櫒鏄湪绾跨殑 + locadevice.IsOnline = 1; + //璁板綍鍥炲鏃堕棿 + locadevice.LastDateTime = DateTime.Now; + } + + this.DeviceReportPush(ias, ReceiveComandDiv.A浼犳劅鍣ㄤ笂鎶�); + + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + + #endregion + + #region 鈻� 闂ㄩ攣涓婃姤___________________________ + + /// <summary> + /// 闂ㄩ攣涓婃姤 + /// </summary> + /// <param name="receiveData"></param> + private void DoorLockDeviceReportPush(JObject receiveData) + { + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + var device = Common.LocalDevice.Current.GetDevice(receiveData.Value<string>("DeviceAddr"), receiveData.Value<int>("Epoint")); + if (device.Type != DeviceType.DoorLock) + { + //瀹冧笉鏄棬閿� + return; + } + + var info = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockAlarmsResult>(receiveData["Data"].ToString()); + if (info.Clusterid == 257) + { + //216锛氶攣涓婅缃殑甯稿紑 + if (info.AlarmCode == 216) + { + HdlThreadLogic.Current.RunMain(() => + { + //鏇存柊闂ㄩ攣娑夊強鐨勫父寮�/甯稿叧鐨勭晫闈� + if (UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction != null) + { + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction(device.DeviceAddr, true); + } + }); + } + } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + } + #endregion + + #region 鈻� 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣坃______________ + + /// <summary> + /// 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣� + /// </summary> + /// <param name="receiveData"></param> + private void DeviceOnlineChangePush(JObject receiveData) + { + if (this.dicDeviceEvent.Count == 0) + { + //娌℃湁娣诲姞鐩戝惉 + return; + } + var tempDevice = new CommonDevice() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; + tempDevice.IsOnline = Convert.ToInt32(receiveData["Data"]["IsOnline"].ToString()); + + //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 + var locadevice = Common.LocalDevice.Current.GetDevicesByMac(tempDevice.DeviceAddr); + for (int i = 0; i < locadevice.Count; i++) + { + bool onlineChanged = locadevice[i].IsOnline != tempDevice.IsOnline; + locadevice[i].IsOnline = tempDevice.IsOnline; + //璁板綍鍥炲鏃堕棿 + locadevice[i].LastDateTime = DateTime.Now; + if (onlineChanged == true) + { + //鍦ㄧ嚎鐘舵�佸彉鏇翠簡,鎵嶄繚瀛� + locadevice[i].ReSave(); + } + } + + this.DeviceReportPush(tempDevice, ReceiveComandDiv.A璁惧鍦ㄧ嚎涓婃姤); + } + + #endregion + + #region 鈻� 璁惧鎺у埗鐘舵�佸弽棣坃__________________ + + /// <summary> + /// 璁惧鎺у埗鐘舵�佸弽棣� + /// </summary> + /// <param name="receiveData"></param> + private void DeviceControlResponePush(JObject receiveData) + { + if (this.dicDeviceEvent.Count == 0) + { + //娌℃湁娣诲姞鐩戝惉 + return; + } + var tempDevice = new CommonDevice() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") }; + + this.DeviceReportPush(tempDevice, ReceiveComandDiv.A鑺傜偣鎺у埗鍙嶉); + } + + #endregion + + #region 鈻� 甯冮槻_______________________________ + + /// <summary> + /// 甯冮槻鎺ㄩ�� + /// </summary> + /// <param name="receiveData"></param> + private void SetSafetyGarrisonPush(JObject receiveData) + { + var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Safeguard.EnableModeResponseData>(receiveData["Data"].ToString()); + if (data.Result == 0) + { + var garrison = GarrisonMode.None; + //鍦ㄥ甯冮槻 + if (data.ModeId == 1) { garrison = GarrisonMode.AtHome; } + //绂诲甯冮槻 + else if (data.ModeId == 2) { garrison = GarrisonMode.RemoveHome; } + else { return; } + + //淇濆瓨鎶ヨ淇℃伅鐒跺悗鎺ㄩ�佸埌鐣岄潰涓� + HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison); + if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true) + { + //鎺ㄩ�� + var form = (Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"]; + form?.GarrisonModePush(garrison); + } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + } + + #endregion + + #region 鈻� 鎾ら槻_______________________________ + + /// <summary> + /// 鎾ら槻鎺ㄩ�� + /// </summary> + /// <param name="receiveData"></param> + private void RemoveSafetyGarrisonPush(JObject receiveData) + { + var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Safeguard.WithdrawModeResponseData>(receiveData["Data"].ToString()); + if (data.Result == 0) + { + //淇濆瓨鎶ヨ淇℃伅鐒跺悗鎺ㄩ�佸埌鐣岄潰涓� + HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(GarrisonMode.RemoveGarrison); + if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true) + { + //鎺ㄩ�� + var form = (Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"]; + form?.GarrisonModePush(GarrisonMode.RemoveGarrison); + } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + } + + #endregion + + #region 鈻� 閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻_______________ + + /// <summary> + /// 閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻 + /// </summary> + /// <param name="receiveData">鎺ユ敹鐨勬暟鎹�</param> + private void SecurityEnOrWithdrawSucceedReport(JObject receiveData) + { + var data = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityEnOrWithdrawResult>(receiveData["Data"].ToString()); + if (data.EnOrWithdraw == -1 || data.ModeId == -1 || data.OperationWay == -1) + { + return; + } + var garrison = GarrisonMode.None; + if (data.EnOrWithdraw == 0) + { + //鍦ㄥ甯冮槻 + if (data.ModeId == 1) { garrison = GarrisonMode.AtHome; } + //绂诲甯冮槻 + else if (data.ModeId == 2) { garrison = GarrisonMode.RemoveHome; } + } + else if (data.EnOrWithdraw == 1) + { + //鎾ら槻 + garrison = GarrisonMode.RemoveGarrison; + } + string appendText = string.Empty; + //鑷姩鍖� + if (data.OperationWay == 0) { appendText = "(" + Language.StringByID(R.MyInternationalizationString.uLogicOperation) + ")"; } + //鎸夐敭鎿嶄綔 + else if (data.OperationWay == 1) { appendText = "(" + Language.StringByID(R.MyInternationalizationString.uPanelOperation) + ")"; } + + //淇濆瓨鎶ヨ淇℃伅鐒跺悗鎺ㄩ�佸埌鐣岄潰涓� + HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison, appendText); + if (UserCenterResourse.DicActionForm.ContainsKey("SafetyManagementMainForm") == true) + { + //鎺ㄩ�� + var form = (Safety.SafetyManagementMainForm)UserCenterResourse.DicActionForm["SafetyManagementMainForm"]; + form?.GarrisonModePush(garrison); + } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + + /// <summary> + /// 閫氳繃澶栭儴鏂瑰紡甯冮槻鎾ら槻鐨勬帴鏀剁粨鏋� + /// </summary> + private class SecurityEnOrWithdrawResult + { + /// <summary> + /// 0锛氬竷闃叉垚鍔� 1锛氭挙闃叉垚鍔� + /// </summary> + public int EnOrWithdraw = -1; + /// <summary> + /// 瀹夐槻妯″紡id + /// </summary> + public int ModeId = -1; + /// <summary> + /// 澶栭儴甯冩挙闃叉柟寮�-> 0:鎵ц閫昏緫鍔ㄤ綔 1:鎸夐敭鎿嶄綔 + /// </summary> + public int OperationWay = -1; + } + + #endregion + + #region 鈻� 閫昏緫瑙﹀彂涓婃姤_______________________ + + /// <summary> + /// 閫昏緫瑙﹀彂涓婃姤 + /// </summary> + /// <param name="receiveData"></param> + private void LogicExecutePush(JObject receiveData) + { + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + + // 閫昏緫鎵ц甯稿紑妯″紡澶辨晥鐨勬儏鍐� + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + //鑷姩鍖栨墽琛� 甯稿紑鍏抽棴 + var data = Newtonsoft.Json.JsonConvert.DeserializeObject<LogicPushResult>(receiveData["Data"].ToString()); + if (data != null && data.ActionData != null) + { + if (data.ActionData.Actiontype == 8 && data.ActionData.PassDataString == "055704010113") + { + var deviceAddr = data.ActionData.MacStr; + var device = Common.LocalDevice.Current.GetDevicesByMac(deviceAddr, false); + if (device.Count > 0 && device[0].Type != DeviceType.DoorLock) + { + return; + } + + HdlThreadLogic.Current.RunThread(async () => + { + HdlThreadLogic.Current.RunMain(() => + { + //鎻愮ず闂ㄩ攣宸茬粡澶辨晥 + new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.NormallyClosed), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance); + + //鏇存柊闂ㄩ攣娑夊強鐨勫父寮�/甯稿叧鐨勭晫闈� + if (UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction != null) + { + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction(deviceAddr, false); + } + }); + }); + } + } + } + } + #endregion + + #region 鈻� 鍦烘櫙瑙﹀彂涓婃姤_______________________ + + /// <summary> + /// 鍦烘櫙瑙﹀彂涓婃姤 + /// </summary> + /// <param name="receiveData"></param> + private void SceneExecPush(JObject receiveData) + { + //鐩墠涓嶅鐞嗗満鏅笂鎶ュ唴瀹� + + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + + #endregion + + + + #region 鈻� 娣诲姞璁惧浜嬩欢_______________________ + + /// <summary> + /// 娣诲姞鑾峰彇璁惧灞炴�х殑浜嬩欢(灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport) + /// </summary> + /// <param name="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param> + /// <param name="comand">鍛戒护鍖哄垎</param> + /// <param name="action"> + /// <para>褰撴帴鏀跺埌缃戝叧鍥炲涔嬪悗鐨勫洖璋冨嚱鏁�</para> + /// <para>璁惧灞炴�т笂鎶ョ殑瀵硅薄锛歞evice.DeviceStatusReport</para> + /// <para>浼犳劅鍣ㄤ笂鎶ョ殑瀵硅薄锛歩as.iASInfo</para> + /// <para>璁惧鍦ㄧ嚎涓婃姤鐨勫璞★細device.IsOnline</para></param> + public void AddAttributeEvent(string mainKeys, ReceiveComandDiv comand, Action<CommonDevice> action) + { + lock (this.dicDeviceEvent) + { + if (this.dicDeviceEvent.ContainsKey(mainKeys) == true) + { + this.RemoveEvent(mainKeys); + } + this.dicDeviceEvent[mainKeys] = action; + this.dicCommandDiv[mainKeys] = comand; + } + } + + /// <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 鈻� 绉婚櫎璁惧鐩戝惉_______________________ + + /// <summary> + /// 绉婚櫎浜嬩欢 + /// </summary> + /// <param name="mainKeys">鏍囪瘑浜嬩欢鐨勪富閿�(鍙互闅忎究濉�,涓昏鏄拡瀵瑰涓晫闈竴璧蜂娇鐢ㄧ殑鎯呭喌)</param> + public void RemoveEvent(string mainKeys) + { + lock (this.dicDeviceEvent) + { + if (this.dicDeviceEvent.ContainsKey(mainKeys) == true) + { + var action = this.dicDeviceEvent[mainKeys]; + this.dicDeviceEvent.Remove(mainKeys); + this.dicCommandDiv.Remove(mainKeys); + + action = null; + } + } + } + + /// <summary> + /// 绉婚櫎鍏ㄩ儴鐨勪簨浠� + /// </summary> + public void RemoveAllEvent() + { + lock (this.dicDeviceEvent) + { + var list = new HashSet<string>(); + foreach (var keys in this.dicDeviceEvent.Keys) + { + list.Add(keys); + } + foreach (var keys in list) + { + //闇�瑕佹參鎱竴涓竴涓殑閲婃斁Action,鍚 + this.RemoveEvent(keys); + } + } + } + + /// <summary> + /// 绉婚櫎缃戝叧鎺ユ敹浜嬩欢(鍙兘瀛樺湪涓�涓簨浠�) + /// </summary> + public void RemoveGatewayReceiveEvent() + { + this.GatewayReceiveEvent = null; + this.GatewayReceiveId = null; + } + + #endregion + + #region 鈻� 涓�鑸柟娉昣__________________________ + + /// <summary> + /// 璁惧涓婃姤鎺ㄩ��(璋冪敤姝ゆ柟娉�,浠栦細鎺ㄩ�佸埌鍚勮嚜鐨勭晫闈�) + /// </summary> + /// <param name="common"></param> + /// <param name="comand"></param> + public void DeviceReportPush(CommonDevice common, ReceiveComandDiv comand) + { + if (this.dicDeviceEvent.Count == 0) + { + //娌℃湁娣诲姞鐩戝惉 + return; + } + //lock (this.dicDeviceEvent) + { + var list = new List<Action<CommonDevice>>(); + try + { + foreach (string keys in this.dicDeviceEvent.Keys) + { + if (this.dicCommandDiv[keys] != comand) + { + //鍛戒护鍖哄垎涓嶄竴鑷达紝鍒欎笉璋冪敤鍥炶皟鍑芥暟 + continue; + } + //鍛戒护鍖哄垎涓�鑷存椂锛屽垯璋冪敤鍥炶皟鍑芥暟 + list.Add(this.dicDeviceEvent[keys]); + } + } + catch { return; } + //鏈夊彲鑳藉湪鍥炶皟鍑芥暟涓Щ闄や簡浜嬩欢锛屽鑷存姤閿欙紝鎵�浠ュ厛鏀堕泦锛屽啀璋冪敤 + foreach (var action in list) + { + try + { + action?.Invoke(common); + } + catch (Exception ex) + { + //Log鍑哄姏 + string msg = "鎺ㄩ�侀敊璇�! 褰撳墠婵�娲荤殑鐣岄潰[" + UserCenterResourse.NowActionFormID + "]"; + HdlLogLogic.Current.WriteLog(ex, msg); + } + } + } + } + + /// <summary> + /// 鏄惁瀛樺湪鎸囧畾鐨勪簨浠� + /// </summary> + /// <param name="mainkeys"></param> + /// <returns></returns> + public bool IsEsixt(string mainkeys) + { + return this.dicCommandDiv.ContainsKey(mainkeys); + } + + /// <summary> + /// 鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + /// </summary> + private void ShowHadNewMessageAppeal() + { + //鏈夋柊娑堟伅(鐗规晥杩樺湪鏃�,涓嶉渶瑕佸啀澶勭悊) + if (ControlCommonResourse.HadNewMessage == false) + { + HdlThreadLogic.Current.RunMain(() => + { + for (int i = 0; i < ControlCommonResourse.listMessageManaContr.Count; i++) + { + //鏄剧ず瑙掓爣鐗规晥 + ControlCommonResourse.listMessageManaContr[i].IsSelected = true; + } + ControlCommonResourse.HadNewMessage = true; + }); + } + } + + #endregion + } + + /// <summary> + /// 鎺ユ敹鍛戒护鍖哄垎 + /// </summary> + public enum ReceiveComandDiv + { + /// <summary> + /// 璁惧灞炴�т笂鎶� + /// </summary> + A璁惧灞炴�т笂鎶� = 1, + /// <summary> + /// 浼犳劅鍣ㄤ笂鎶� + /// </summary> + A浼犳劅鍣ㄤ笂鎶� = 2, + /// <summary> + /// 璁惧鍦ㄧ嚎涓婃姤 + /// </summary> + A璁惧鍦ㄧ嚎涓婃姤 = 3, + /// <summary> + /// 褰撳鎴风鍙戦�佹帶鍒惰澶囨寚浠わ紝濡傛墦寮�鎴栧叧闂澶囥�佽皟鑺備寒搴︺�侀鑹层�傚鏋滆鎺у埗鐨勮妭鐐硅澶囧湪绾匡紝鑺傜偣璁惧灏嗗弽棣� + /// </summary> + A鑺傜偣鎺у埗鍙嶉 = 4 + } } -- Gitblit v1.8.0