From bba578c2f0acf2eca747edcb69426771e0cadd32 Mon Sep 17 00:00:00 2001 From: WJC <wjc@hdlchina.com.cn> Date: 星期一, 23 三月 2020 18:20:50 +0800 Subject: [PATCH] 2020-03-23-3 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs | 228 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 222 insertions(+), 6 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs index 619dd26..4cab21b 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs @@ -194,10 +194,207 @@ var deviceAddr = receiveData.Value<string>("DeviceAddr"); var deviceEpoint = receiveData.Value<int>("Epoint"); - var tempDevice = new CommonDevice { DeviceAddr = deviceAddr, DeviceEpoint = deviceEpoint }; - tempDevice.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(receiveData["Data"].ToString()); + 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; + } - this.DeviceReportPush(tempDevice, ReceiveComandDiv.A璁惧灞炴�т笂鎶�); + //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 + 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 鈻� 绐楀笜鏁版嵁 + //绐楀笜鏁版嵁 + 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 (report.DeviceStatusReport.CluterID == 514) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + 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; + } + } + } + #endregion + + #region 鈻� 浜害鏁版嵁 + //浜害鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 8) + { + locadevice.DeviceStatusReport = report.DeviceStatusReport; + if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0) + { + //姝ゅ睘鎬ц〃鏄庡綋鍓嶄寒搴︾▼搴� + ((DimmableLight)locadevice).Level = report.DeviceStatusReport.AttriBute[0].AttriButeData; + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + #endregion + + #region 鈻� 娓╁害鏁版嵁 + //娓╁害鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 1026) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //娓╁害 + if (attData.AttributeId == (int)AttriButeId.MeasuredValue) + { + if (attData.AttriButeData == 0) + { + ((TemperatureSensor)locadevice).Temperatrue = 0; + } + else if (attData.AttriButeData > 32767) + { + //璐熸暟(鐗规畩澶勭悊) + string strValue = (attData.AttriButeData - 65536).ToString(); + //灏忔暟鐐归渶瑕佷竴浣� + strValue = strValue.Substring(0, strValue.Length - 1); + ((TemperatureSensor)locadevice).Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + else + { + //灏忔暟鐐归渶瑕佷竴浣� + string strValue = attData.AttriButeData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + ((TemperatureSensor)locadevice).Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + } + #endregion + + #region 鈻� 婀垮害鏁版嵁 + //婀垮害鏁版嵁 + else if (report.DeviceStatusReport.CluterID == 1029) + { + foreach (var attData in report.DeviceStatusReport.AttriBute) + { + //婀垮害 + if (attData.AttributeId == (int)AttriButeId.MeasuredValue) + { + if (attData.AttriButeData == 0) + { + ((TemperatureSensor)locadevice).Humidity = 0; + } + else + { + //灏忔暟鐐归渶瑕佷竴浣�(婀垮害娌℃湁璐熸暟) + string strValue = attData.AttriButeData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + ((TemperatureSensor)locadevice).Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); + } + } + //宸茬粡鎺ユ敹鍒扮姸鎬� + locadevice.HadReadDeviceStatu = true; + } + } + #endregion + } + + this.DeviceReportPush(report, ReceiveComandDiv.A璁惧灞炴�т笂鎶�); } #endregion @@ -218,6 +415,15 @@ { //淇濆瓨瀹夐槻鎶ヨ淇℃伅鍒版湰鍦� HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(ias); + } + + //澶勭悊缃戝叧涓婃姤鐨勬暟鎹�,鐒跺悗鍙樻洿鏈湴缂撳瓨 + var locadevice = Common.LocalDevice.Current.GetDevice(ias.DeviceAddr, ias.DeviceEpoint); + if (locadevice != null) + { + ((IASZone)locadevice).iASInfo = ias.iASInfo; + //璁板綍鍥炲鏃堕棿 + locadevice.LastDateTime = DateTime.Now; } this.DeviceReportPush(ias, ReceiveComandDiv.A浼犳劅鍣ㄤ笂鎶�); @@ -260,7 +466,17 @@ } 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.GetDevice(tempDevice.DeviceAddr, tempDevice.DeviceEpoint); + if (locadevice != null) + { + locadevice.IsOnline = tempDevice.IsOnline; + //璁板綍鍥炲鏃堕棿 + locadevice.LastDateTime = DateTime.Now; + locadevice.ReSave(); + } + this.DeviceReportPush(tempDevice, ReceiveComandDiv.A璁惧鍦ㄧ嚎涓婃姤); } @@ -517,11 +733,11 @@ #region 鈻� 涓�鑸柟娉昣__________________________ /// <summary> - /// 璁惧涓婃姤鎺ㄩ�� + /// 璁惧涓婃姤鎺ㄩ��(璋冪敤姝ゆ柟娉�,浠栦細鎺ㄩ�佸埌鍚勮嚜鐨勭晫闈�) /// </summary> /// <param name="common"></param> /// <param name="comand"></param> - private void DeviceReportPush(CommonDevice common, ReceiveComandDiv comand) + public void DeviceReportPush(CommonDevice common, ReceiveComandDiv comand) { if (this.dicDeviceEvent.Count == 0) { -- Gitblit v1.8.0