From e747e6d8524e3146bb48dc304a713f309966b1c6 Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期二, 19 五月 2020 13:10:03 +0800 Subject: [PATCH] 新版本 --- ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs | 756 ++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 506 insertions(+), 250 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs index 7975fd9..e662761 100755 --- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs +++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs @@ -3,6 +3,7 @@ using System.Text; using ZigBee.Device; using System.Threading.Tasks; +using Newtonsoft.Json.Linq; namespace Shared.Phone.UserCenter { @@ -59,10 +60,10 @@ /// </summary> /// <param name="panel">鎸夐敭闈㈡澘鐨勬煇涓�涓洖璺�</param> /// <returns></returns> - public async Task<Panel.KeyColorData> GetPanelEpointColorInfo(Panel panel) + public Panel.KeyColorData GetPanelEpointColorInfo(CommonDevice panel) { Panel.KeyNum keyNum = (Panel.KeyNum)panel.DeviceEpoint; - var result = await panel.GetPanelColorInfoAsync(keyNum); + var result = this.GetPanelColorInfoAsync(panel, keyNum); //鍏遍�氶敊璇娴� string error = HdlCheckLogic.Current.CheckCommonErrorCode(result); if (error != null) @@ -86,11 +87,11 @@ /// </summary> /// <param name="panel">鎸夐敭闈㈡澘鐨勬煇涓�涓洖璺�</param> /// <returns></returns> - public async Task<Panel.KeyColorData> GetPanelColorInfo(Panel panel) + public Panel.KeyColorData GetPanelColorInfo(CommonDevice panel) { panel.DeviceEpoint = 1; Panel.KeyNum keyNum = (Panel.KeyNum)panel.DeviceEpoint; - var result = await panel.GetPanelColorInfoAsync(keyNum); + var result = this.GetPanelColorInfoAsync(panel, keyNum); //鍏遍�氶敊璇娴� string error = HdlCheckLogic.Current.CheckCommonErrorCode(result); if (error != null) @@ -109,19 +110,57 @@ return result.keyColorData; } + ///<summary > + ///鑾峰彇鎸夐敭鎸囩ず鐏紑鍏抽鑹�. + /// </summary> + public Panel.KeyColorDataResponseAllData GetPanelColorInfoAsync(CommonDevice device, Panel.KeyNum keyNum) + { + //濡傛灉褰撳墠鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return ModelData.DeviceModelDataLogic.Current.GetPanelColorInfo(device, keyNum); + } + //鍙戦�佹暟鎹� keyNum杞负16杩涘埗 鑼冨洿锛�01~10 + var passData = "0504040101" + Convert.ToString((int)keyNum, 16).ToUpper().PadLeft(2, '0'); + var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var dataObject = new JObject { { "PassData", passData } }; + jObject.Add("Data", dataObject); + + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway2(device, jObject.ToString(), "0405", 24, 9); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + return null; + } + string data = result.ReceiptData; + + var tempR = new Panel.KeyColorData(); + tempR.OpenColorR = data[12].ToString() + data[13].ToString(); + tempR.OpenColorG = data[14].ToString() + data[15].ToString(); + tempR.OpenColorB = data[16].ToString() + data[17].ToString(); + tempR.CloseColorR = data[18].ToString() + data[19].ToString(); + tempR.CloseColorG = data[20].ToString() + data[21].ToString(); + tempR.CloseColorB = data[22].ToString() + data[23].ToString(); + + var key = data[10].ToString() + data[11].ToString(); + int keyEnum1 = Convert.ToInt32(key, 16); + tempR.keyNum = (Panel.KeyNum)keyEnum1; + + return new Panel.KeyColorDataResponseAllData { keyColorData = tempR }; + } + /// <summary> /// 璁剧疆鎸夐敭闈㈡澘鎸囧畾绔偣鐨勩�愭寚绀虹伅寮�鍏抽鑹层�戠殑淇℃伅 /// </summary> /// <param name="panel">鎸夐敭闈㈡澘鐨勬煇涓�涓洖璺�</param> /// <param name="colorData">寮�鍜屽叧鐨勯鑹查兘闇�瑕佷竴璧疯缃�</param> /// <returns></returns> - public async Task<bool> SetPanelEpointColorInfo(Panel panel, Panel.KeyColorData colorData) + public bool SetPanelEpointColorInfo(CommonDevice panel, Panel.KeyColorData colorData) { var keyNum = new Panel.KeyNumStatus(); Type type = keyNum.GetType(); type.InvokeMember("Key" + panel.DeviceEpoint, System.Reflection.BindingFlags.SetField, null, keyNum, new object[] { true }); - var result = await panel.SetPanelColorInfoAsync(colorData, keyNum); + var result = this.SetPanelColorInfoAsync(panel, colorData, keyNum); if (result == null || result.responseData == null) { //璁剧疆鎸夐敭闈㈡澘鎸囩ず鐏鑹插け璐� @@ -136,8 +175,6 @@ this.ShowErrorMsg(msg); return false; } - //澶囦唤璁惧 - await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(panel, GatewayBackupEnum.A骞叉帴鐐归鑹茶皟鑺�, colorData); return true; } @@ -147,12 +184,12 @@ /// <param name="panel">鎸夐敭闈㈡澘鐨�</param> /// <param name="colorData">鍙缃紑鐨勯鑹�</param> /// <returns></returns> - public async Task<bool> SetPanelColorInfo(Panel panel, Panel.KeyColorData colorData) + public bool SetPanelColorInfo(CommonDevice panel, Panel.KeyColorData colorData) { var keyNum = new Panel.KeyNumStatus(); //榛樿绗竴涓敤闈㈡澘绗竴涓寜閿鑹蹭綔涓烘暣涓潰鏉跨殑棰滆壊 keyNum.Key1 = true; - var result = await panel.SetPanelColorInfoAsync(colorData, keyNum); + var result = this.SetPanelColorInfoAsync(panel, colorData, keyNum); if (result == null || result.responseData == null) { //璁剧疆鎸夐敭闈㈡澘鎸囩ず鐏鑹插け璐� @@ -167,45 +204,210 @@ this.ShowErrorMsg(msg); return false; } - //澶囦唤璁惧 - await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(panel, GatewayBackupEnum.A骞叉帴鐐归鑹茶皟鑺�, colorData); return true; + } + + ///<summary > + ///閰嶇疆鎸夐敭鎸囩ず鐏鑹� + /// </summary> + public CommonDevice.ResponseAllData SetPanelColorInfoAsync(CommonDevice device, Panel.KeyColorData keyColorData, Panel.KeyNumStatus keyNumStatus) + { + //濡傛灉褰撳墠鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) + { + return ModelData.DeviceModelDataLogic.Current.SetPanelColorInfo(device, keyColorData, keyNumStatus, "ZbDataPassthrough"); + } + //鑾峰彇閰嶇疆鎸夐敭鎸囩ず鐏鑹茬殑鍛戒护瀛楃 + var sendData = this.GetPanelColorCommandText(device.DeviceAddr, keyColorData, keyNumStatus); + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway2(device, sendData, "0002", 16, 9); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) + { + return null; + } + var data = result.ReceiptData; + var tempD = new CommonDevice.ResponseData(); + tempD.command = data[12].ToString() + data[13].ToString() + data[10].ToString() + data[11].ToString(); + tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16); + return new CommonDevice.ResponseAllData { responseData = tempD }; + } + + /// <summary> + /// 鑾峰彇閰嶇疆鎸夐敭鎸囩ず鐏鑹茬殑鍛戒护瀛楃 + /// </summary> + /// <param name="DeviceAddr"></param> + /// <param name="keyColorData"></param> + /// <param name="keyNumStatus"></param> + /// <returns></returns> + public string GetPanelColorCommandText(string DeviceAddr, Panel.KeyColorData keyColorData, Panel.KeyNumStatus keyNumStatus) + { + var passData = this.GetPanelColorPassData(keyColorData, keyNumStatus); + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new JObject { { "PassData", passData } }; + jObject.Add("Data", data); + + return jObject.ToString(); + } + + /// <summary> + /// 閰嶇疆鎸夐敭鎸囩ず鐏鑹叉暟鎹� + /// <para>鍙戦厤缃寜閿寚绀虹伅棰滆壊鍛戒护鏃讹紝姝ゆ椂涓哄彂閫佸埌缃戝叧鐨勯�忎紶鏁版嵁</para> + /// </summary> + /// <returns>The passthorugh data.</returns> + /// <param name="keyColorData">Key color data.</param> + /// <param name="keyNum">Key number.</param> + private string GetPanelColorPassData(Panel.KeyColorData keyColorData, Panel.KeyNumStatus keyNumStatus) + { + string data = ""; + string dataLength = "0c"; + string dataComand1 = "01"; + string dataComand2 = "04"; + string dataSerialNum = "01"; + string addDataLength = "08"; + int attributeData = 0; + + try + { + for (int i = 1; i <= 16; i++) + { + Type type = keyNumStatus.GetType(); + var obj = type.InvokeMember("Key" + i, System.Reflection.BindingFlags.GetField, null, keyNumStatus, null); + int value0 = 0; + if (Convert.ToBoolean(obj) == true) + { + value0 = 1; + } + int v = (int)Math.Pow(2, i - 1); + attributeData += value0 * v; + } + + string td = attributeData.ToString("X4"); + char[] td1 = td.ToCharArray(); + string tempAttributeData = string.Concat(td1[2].ToString(), td1[3].ToString(), td1[0].ToString(), td1[1].ToString()); + string temp = ""; + var tempColor1 = keyColorData.OpenColorR.ToString(); + var sbString1 = new System.Text.StringBuilder(); + switch (tempColor1.Length) + { + case 1: + temp = "0" + tempColor1; + break; + case 2: + temp = tempColor1; + break; + } + sbString1.Append(temp.ToUpper()); + + var tempColor2 = keyColorData.OpenColorG.ToString(); + var sbString2 = new System.Text.StringBuilder(); + switch (tempColor2.Length) + { + case 1: + temp = "0" + tempColor2; + break; + case 2: + temp = tempColor2; + break; + } + sbString2.Append(temp.ToUpper()); + + var tempColor3 = keyColorData.OpenColorB.ToString(); + var sbString3 = new System.Text.StringBuilder(); + switch (tempColor3.Length) + { + case 1: + temp = "0" + tempColor3; + break; + case 2: + temp = tempColor3; + break; + } + sbString3.Append(temp.ToUpper()); + + var tempColor4 = keyColorData.CloseColorR.ToString(); + var sbString4 = new System.Text.StringBuilder(); + switch (tempColor3.Length) + { + case 1: + temp = "0" + tempColor4; + break; + case 2: + temp = tempColor4; + break; + } + sbString4.Append(temp.ToUpper()); + + var tempColor5 = keyColorData.CloseColorG.ToString(); + var sbString5 = new System.Text.StringBuilder(); + switch (tempColor5.Length) + { + case 1: + temp = "0" + tempColor5; + break; + case 2: + temp = tempColor5; + break; + } + sbString5.Append(temp.ToUpper()); + + var tempColor6 = keyColorData.CloseColorB.ToString(); + var sbString6 = new System.Text.StringBuilder(); + switch (tempColor6.Length) + { + case 1: + temp = "0" + tempColor6; + break; + case 2: + temp = tempColor6; + break; + } + sbString6.Append(temp.ToUpper()); + + if (keyColorData != null) + { + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + tempAttributeData + sbString1 + sbString2 + sbString3 + + sbString4 + sbString5 + sbString6; + } + } + catch { }; + + return data; } #endregion #region 鈻� 浜害璋冭妭___________________________ - /// <summary> - /// 鑾峰彇璁惧浜害閰嶇疆锛坲i鍙寒搴﹁皟鑺�,浣跨敤杩斿洖鍊肩殑panelDirectionsLevel锛� + + ///<summary > + ///鑾峰彇璁惧浜害閰嶇疆锛坲i鍙寒搴﹁皟鑺�,浣跨敤杩斿洖鍊肩殑panelDirectionsLevel锛� /// </summary> - /// <param name="device">璁惧瀵硅薄</param> - /// <returns></returns> - public async Task<Panel.PanelSwitchLevelInfo> GetDeviceLightSettion(CommonDevice device) + public Panel.PanelSwitchLevelInfo GetDeviceLightSettion(CommonDevice device) { - //鍊熺敤瀹冪殑鍑芥暟 - var panel = new Panel(); - panel.DeviceAddr = device.DeviceAddr; - panel.DeviceEpoint = device.DeviceEpoint; - panel.CurrentGateWayId = device.CurrentGateWayId; - - var result = await panel.GetPanelSwitchLevelAsync(); - panel = null; - //鍏遍�氶敊璇娴� - string error = HdlCheckLogic.Current.CheckCommonErrorCode(result); - if (error != null) + //濡傛灉褰撳墠鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) { - this.ShowErrorMsg(error); - return null; + return ModelData.DeviceModelDataLogic.Current.GetDeviceLightSettion(device); } + //鑾峰彇鍙戦�佺殑鍛戒护瀛楃 + var passData = "050604010101"; + var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "PassData", passData } }; + jObject.Add("Data", data); + var sendData = jObject.ToString(); - if (result == null || string.IsNullOrEmpty(result.errorMessageBase) == false) + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway2(device, sendData, "0407", 14, 9); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) { //鑾峰彇鎸夐敭闈㈡澘浜害璋冭妭淇℃伅澶辫触 string msg = Language.StringByID(R.MyInternationalizationString.uGetPanelLightRegulationInfoFail); this.ShowErrorMsg(msg); return null; } - return result; + var receiptData = result.ReceiptData; + var level1 = Convert.ToInt32(receiptData[10].ToString() + receiptData[11].ToString(), 16); + var level2 = Convert.ToInt32(receiptData[12].ToString() + receiptData[13].ToString(), 16); + + return new Panel.PanelSwitchLevelInfo { panelDirectionsLevel = level1, panelBacklightLevel = level2 }; } /// <summary> @@ -215,25 +417,22 @@ /// <param name="directionsLevel">0-100(杩欎釜鏄偣鍑诲悗鐨勫��)</param> /// <param name="backlightLevel">0-100(杩欎釜鏄偣鍑诲墠鐨勫��)</param> /// <returns></returns> - public async Task<bool> SetDeviceLightSettion(CommonDevice device, int directionsLevel, int backlightLevel) + public bool SetDeviceLightSettion(CommonDevice device, int directionsLevel, int backlightLevel) { - //鍊熺敤瀹冪殑鍑芥暟 - var panel = new Panel(); - panel.DeviceAddr = device.DeviceAddr; - panel.DeviceEpoint = device.DeviceEpoint; - panel.CurrentGateWayId = device.CurrentGateWayId; - - var result = await panel.SetKeyLevelAsync(directionsLevel, backlightLevel); - panel = null; - //鍏遍�氶敊璇娴� - string error = HdlCheckLogic.Current.CheckCommonErrorCode(result); - if (error != null) + //濡傛灉褰撳墠鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) { - this.ShowTipMsg(error); + return ModelData.DeviceModelDataLogic.Current.SetDeviceLightSettion(device, directionsLevel, backlightLevel, "ZbDataPassthrough"); + } + //鑾峰彇淇敼闈㈡澘鐨勪寒搴﹁皟鑺傜殑鍛戒护瀛楃 + var sendData = this.GetPanelLevelCommadText(device.DeviceAddr, directionsLevel, backlightLevel); + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway2(device, sendData, "0002", 16, 9); + if (result.ErrorMsg != null) + { + this.ShowTipMsg(result.ErrorMsg); return false; } - - if (result == null || result.responseData == null) + if (result.ErrorMsgDiv == 0) { //璁剧疆浜害璋冭妭澶辫触 string msg = Language.StringByID(R.MyInternationalizationString.uSetLightRegulationFail); @@ -244,24 +443,88 @@ return false; } - if (result.responseData.status != 0) + //杩欓噷杩樻湁涓�涓� 0402 + //tempD.command = data[12].ToString() + data[13].ToString() + data[10].ToString() + data[11].ToString(); + + var status = Convert.ToInt32(result.ReceiptData[14].ToString() + result.ReceiptData[15].ToString(), 16); + if (status != 0) { //璁剧疆浜害璋冭妭澶辫触 string msg = Language.StringByID(R.MyInternationalizationString.uSetLightRegulationFail); this.ShowTipMsg(msg); return false; } - //澶囦唤璁惧 - var backData = new Newtonsoft.Json.Linq.JObject - { - { "directionsLevel",directionsLevel }, - { "backlightLevel", backlightLevel } - }; - //澶囦唤璁惧 - await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.A骞叉帴鐐逛寒搴﹁皟鑺�, backData); + + //淇敼缂撳瓨 + ModelData.DeviceModelDataLogic.Current.SetDeviceLightSettion(device, directionsLevel, backlightLevel, "ZbDataPassthrough"); + return true; } + /// <summary> + /// 鑾峰彇淇敼闈㈡澘鐨勪寒搴﹁皟鑺傜殑鍛戒护瀛楃 + /// </summary> + /// <param name="DeviceAddr"></param> + /// <param name="directionsLevel">0-100(杩欎釜鏄偣鍑诲悗鐨勫��)</param> + /// <param name="backlightLevel">0-100(杩欎釜鏄偣鍑诲墠鐨勫��)</param> + /// <returns></returns> + public string GetPanelLevelCommadText(string DeviceAddr, int directionsLevel, int backlightLevel) + { + var passData = this.GetSetPanelLevelPassData(directionsLevel, backlightLevel); + var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "PassData", passData } }; + jObject.Add("Data", data); + + return jObject.ToString(); + } + + /// <summary> + /// 鑾峰彇閰嶇疆鎸夐敭鎸囩ず鐏潰鏉夸寒搴︾殑鍛戒护瀛楃 + /// </summary> + private string GetSetPanelLevelPassData(int level1, int level2) + { + string data = ""; + string dataLength = "06"; + string dataComand1 = "02"; + string dataComand2 = "04"; + string dataSerialNum = "01"; + string addDataLength = "02"; + string l1 = ""; + string l2 = ""; + try + { + var sbString1 = new System.Text.StringBuilder(); + var sbString2 = new System.Text.StringBuilder(); + string temp1 = Convert.ToString(level1, 16); + string temp2 = Convert.ToString(level2, 16); + + switch (temp1.Length) + { + case 1: + l1 = "0" + temp1; + break; + case 2: + l1 = temp1; + break; + } + switch (temp2.Length) + { + case 1: + l2 = "0" + temp2; + break; + case 2: + l2 = temp2; + break; + } + sbString1.Append(l1.ToString().ToUpper()); + sbString2.Append(l2.ToString().ToUpper()); + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + sbString1 + sbString2; + } + catch { }; + + return data; + } #endregion #region 鈻� 鎺ヨ繎鎰熷簲___________________________ @@ -333,14 +596,6 @@ this.ShowTipMsg(msg); return false; } - - // 澶囦唤璁惧 - var backData = new Newtonsoft.Json.Linq.JObject - { - { "sensorEnable",sensorEnable } - }; - //澶囦唤璁惧 - await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.A闈㈡澘鎺ヨ繎鎰熷簲鍔熻兘, backData); return true; } #endregion @@ -351,26 +606,25 @@ /// </summary> /// <param name="device">璁惧瀵硅薄</param> /// <returns></returns> - public async Task<Panel.PanelSaveEnergyModeInfo> GetDeviceEnergyConservationMode(CommonDevice device) + public Panel.PanelSaveEnergyModeInfo GetDeviceEnergyConservationMode(CommonDevice device) { - //鍊熺敤瀹冪殑鍑芥暟 - var panel = new Panel(); - panel.DeviceAddr = device.DeviceAddr; - panel.DeviceEpoint = device.DeviceEpoint; - panel.CurrentGateWayId = device.CurrentGateWayId; - - var result = await panel.GetPanelSaveEnergyModeAsync(); - panel = null; - - //鍏遍�氶敊璇娴� - string error = HdlCheckLogic.Current.CheckCommonErrorCode(result); - if (error != null) + //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) { - this.ShowErrorMsg(error); + return ModelData.DeviceModelDataLogic.Current.GetDeviceEnergyConservationMode(device); + } + //鍙戦�佸懡浠� + string passData = "050804010101"; + var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new JObject { { "PassData", passData } }; + jObject.Add("Data", data); + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway2(device, jObject.ToString(), "0409", 18, 9); + if (result.ErrorMsg != null) + { + this.ShowTipMsg(result.ErrorMsg); return null; } - - if (result == null || result.panelSaveEnergyModeInfo == null) + if (result.ErrorMsgDiv == 0) { //鑾峰彇鎸夐敭闈㈡澘鑺傝兘妯″紡淇℃伅澶辫触 string msg = Language.StringByID(R.MyInternationalizationString.uGetPanelEnergyConservationInfoFail); @@ -380,7 +634,20 @@ this.ShowErrorMsg(msg); return null; } - return result.panelSaveEnergyModeInfo; + + var energyInfo = new Panel.PanelSaveEnergyModeInfo(); + + if (result.ReceiptData[10].ToString() + result.ReceiptData[11].ToString() == "01") + { + energyInfo.enable = true; + } + else + { + energyInfo.enable = false; + } + energyInfo.time = Convert.ToInt32(result.ReceiptData[14].ToString() + result.ReceiptData[15].ToString() + result.ReceiptData[12].ToString() + result.ReceiptData[13].ToString(), 16); + energyInfo.level = Convert.ToInt32(result.ReceiptData[16].ToString() + result.ReceiptData[17].ToString(), 16); + return energyInfo; } /// <summary> @@ -391,25 +658,22 @@ /// <param name="modeTime">鏃犳搷浣滆繘鍏ヨ妭鑳芥ā寮忔椂闂� 0-255</param> /// <param name="level">鑺傝兘妯″紡浜害:0-100</param> /// <returns></returns> - public async Task<bool> SetDeviceEnergyConservationMode(CommonDevice device, bool modeEnable, int modeTime, int level) + public bool SetDeviceEnergyConservationMode(CommonDevice device, bool modeEnable, int modeTime, int level) { - //鍊熺敤瀹冪殑鍑芥暟 - var panel = new Panel(); - panel.DeviceAddr = device.DeviceAddr; - panel.DeviceEpoint = device.DeviceEpoint; - panel.CurrentGateWayId = device.CurrentGateWayId; - - var result = await panel.SetKeyModeAsync(modeEnable, modeTime, level); - panel = null; - //鍏遍�氶敊璇娴� - string error = HdlCheckLogic.Current.CheckCommonErrorCode(result); - if (error != null) + //濡傛灉褰撳墠鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) { - this.ShowErrorMsg(error); + return ModelData.DeviceModelDataLogic.Current.SetDeviceEnergyConservationMode(device, modeEnable, modeTime, level, "ZbDataPassthrough"); + } + //鑾峰彇璁剧疆璁惧鐨勮妭鑳芥ā寮忕殑鍛戒护瀛楃 + var sendData = this.GetDeviceEnergyConservationModeCommandText(device.DeviceAddr, modeEnable, modeTime, level); + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway2(device, sendData, "0002", 16, 9); + if (result.ErrorMsg != null) + { + this.ShowTipMsg(result.ErrorMsg); return false; } - - if (result == null || result.responseData == null) + if (result.ErrorMsgDiv == 0) { //鑺傝兘妯″紡閰嶇疆澶辫触 string msg = Language.StringByID(R.MyInternationalizationString.uSetEnergyConservationFail); @@ -419,25 +683,109 @@ this.ShowTipMsg(msg); return false; } - - if (result.responseData.status != 0) + var status = Convert.ToInt32(result.ReceiptData[14].ToString() + result.ReceiptData[15].ToString(), 16); + if (status != 0) { //鑺傝兘妯″紡閰嶇疆澶辫触 string msg = Language.StringByID(R.MyInternationalizationString.uSetEnergyConservationFail); this.ShowTipMsg(msg); return false; } - //澶囦唤璁惧 - var backData = new Newtonsoft.Json.Linq.JObject - { - { "modeEnable",modeEnable }, - { "modeTime", modeTime }, - { "level", level } - }; - //澶囦唤璁惧 - await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.A骞叉帴鐐硅妭鑳芥ā寮�, backData); + + //淇敼缂撳瓨 + ModelData.DeviceModelDataLogic.Current.SetDeviceEnergyConservationMode(device, modeEnable, modeTime, level, "ZbDataPassthrough"); + return true; } + + /// <summary> + /// 鑾峰彇璁剧疆璁惧鐨勮妭鑳芥ā寮忕殑鍛戒护瀛楃 + /// </summary> + /// <param name="DeviceAddr"></param> + /// <param name="modeEnable"></param> + /// <param name="modeTime"></param> + /// <param name="level"></param> + /// <returns></returns> + public string GetDeviceEnergyConservationModeCommandText(string DeviceAddr, bool modeEnable, int modeTime, int level) + { + var passData = this.GetPanelModeModePassData(modeEnable, modeTime, level); + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new JObject { { "PassData", passData } }; + jObject.Add("Data", data); + + return jObject.ToString(); + } + + /// <summary> + /// 鑾峰彇璁剧疆璁惧鐨勮妭鑳芥ā寮忕殑鍛戒护瀛楃 + /// </summary> + private string GetPanelModeModePassData(bool modeEnable, int modeTime, int modelevel) + { + string data = ""; + string dataLength = "08"; + string dataComand1 = "03"; + string dataComand2 = "04"; + string dataSerialNum = "01"; + string addDataLength = "04"; + string mode = ""; + string time = ""; + string level = ""; + try + { + if (modeEnable) + { + mode = "01"; + } + else + { + mode = "00"; + } + + if (modeTime == -1) + { + //褰撹妭鑳芥ā寮忔病鏈夌粰鏃堕棿锛岄粯璁ょ粰60绉� + modeTime = 60; + } + + var tempBytes = new byte[2]; + for (int i = 0; i < 2; i++) + { + tempBytes[i] = (byte)(modeTime >> (i * 8) & 0xff); + } + var time1 = Convert.ToString(tempBytes[0], 16); + var time2 = Convert.ToString(tempBytes[1], 16); + if (time1.Length == 1) + { + time1 = "0" + time1; + } + if (time2.Length == 1) + { + time2 = "0" + time2; + } + + time = (time1 + time2).ToUpper(); + + var sbString2 = new System.Text.StringBuilder(); + string temp2 = Convert.ToString(modelevel, 16); + switch (temp2.Length) + { + case 1: + level = "0" + temp2; + break; + case 2: + level = temp2; + break; + } + + sbString2.Append(level.ToUpper()); + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + mode + time + sbString2; + } + catch { }; + + return data; + } + #endregion @@ -456,7 +804,7 @@ panel.DeviceEpoint = device.DeviceEpoint; panel.CurrentGateWayId = device.CurrentGateWayId; - var result = await panel.ReadPanelConfigureInfoAsync(); + var result = HdlDeviceBindLogic.Current.ReadPanelConfigureInfoAsync(panel); panel = null; //鍏遍�氶敊璇娴� @@ -624,9 +972,9 @@ /// <param name="panel">骞叉帴鐐瑰璞�</param> /// <param name="i_value">骞叉帴鐐圭殑绗笁绾у埆灞炴�х殑鍊�,鍏蜂綋璇峰弬鐓х涓夌骇鍒睘鎬�</param> /// <returns></returns> - public async Task<bool> EditorDryContactThirdFunction(Panel panel, int i_value) + public bool EditorDryContactThirdFunction(Panel panel, int i_value) { - var result = await panel.ConfigureHdlKeyValueAsync((Panel.KeyMode)i_value); + var result = HdlDeviceBindLogic.Current.ConfigureHdlKeyValueAsync(panel, (Panel.KeyMode)i_value); //鍏遍�氶敊璇娴� string error = HdlCheckLogic.Current.CheckCommonErrorCode(result); if (error != null) @@ -676,9 +1024,6 @@ this.ShowErrorMsg(msg); return false; } - //澶囦唤璁惧 - await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(panel, GatewayBackupEnum.A骞叉帴鐐圭涓夌骇鍒鏈夊睘鎬�, i_value); - return true; } @@ -691,64 +1036,20 @@ /// </summary> /// <param name="device">鏌愪竴鍥炶矾</param> /// <returns></returns> - public VibrationInfo GetPanelVibrationData(CommonDevice device) + public PanelVibrationInfo GetPanelVibrationData(CommonDevice device) { - var returnData = new VibrationInfo(); - var gateway = device.Gateway; - if (gateway == null) + //濡傛灉鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) { - //閿欒:缃戝叧瀵硅薄涓㈠け - this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg)); - return null; + return ModelData.DeviceModelDataLogic.Current.GetPanelVibrationInfo(device); } - string checkTopic = HdlGatewayLogic.Current.GetGatewayId(gateway) + "/" + "ZbDataPassthrough"; - bool canBreak = false; - - Action<string, string> action = (topic, message) => - { - if (topic == checkTopic) - { - try - { - var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); - string PassData = jobject["Data"]["PassData"].ToString(); - if (PassData.Length != 18) - { - return; - } - string mytopic = PassData[4].ToString() + PassData[5].ToString() + PassData[2].ToString() + PassData[3].ToString(); - if (mytopic != "0802") - { - return; - } - returnData.A闇囧姩浣胯兘 = PassData.Substring(10, 2) == "01" ? true : false; - returnData.A闇囧姩寮哄害 = Convert.ToInt32(PassData.Substring(12, 2), 16); - returnData.A闇囧姩鏃堕棿 = Convert.ToInt32(PassData.Substring(14, 4), 16); - - canBreak = true; - } - catch { } - } - }; - gateway.Actions += action; - try - { - var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; - var data = new Newtonsoft.Json.Linq.JObject { { "PassData", "050108110101" } }; - jObject.Add("Data", data); - gateway.Send(("ClientDataPassthrough"), jObject.ToString()); - } - catch { } - - int TimeOut = 0; - while (canBreak == false && TimeOut < 60) - { - System.Threading.Thread.Sleep(100); - TimeOut++; - } - gateway.Actions -= action; - - if (TimeOut >= 60) + //鍙戦�佹暟鎹� + var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "PassData", "050108110101" } }; + jObject.Add("Data", data); + var sendData = jObject.ToString(); + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway2(device, sendData, "0802", 18, 6); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) { //鑾峰彇闇囧姩鍙嶉閰嶇疆淇℃伅澶辫触 string errorMsg = Language.StringByID(R.MyInternationalizationString.uGetVibrationFeedbackSettionFail); @@ -756,6 +1057,11 @@ this.ShowTipMsg(errorMsg); return null; } + var returnData = new PanelVibrationInfo(); + returnData.A闇囧姩浣胯兘 = result.ReceiptData.Substring(10, 2) == "01" ? true : false; + returnData.A闇囧姩寮哄害 = Convert.ToInt32(result.ReceiptData.Substring(12, 2), 16); + returnData.A闇囧姩鏃堕棿 = Convert.ToInt32(result.ReceiptData.Substring(14, 4), 16); + return returnData; } @@ -765,103 +1071,53 @@ /// <param name="device">鏌愪竴鍥炶矾</param> /// <param name="datainfo">璁剧疆鐨勪俊鎭�</param> /// <returns></returns> - public bool SetPanelVibrationData(CommonDevice device, VibrationInfo datainfo) + public bool SetPanelVibrationData(CommonDevice device, PanelVibrationInfo datainfo) { - var gateway = device.Gateway; - if (gateway == null) + //濡傛灉鏄櫄鎷熶綇瀹� + if (Common.Config.Instance.Home.IsVirtually == true) { - //閿欒:缃戝叧瀵硅薄涓㈠け - this.ShowTipMsg(Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg)); - return false; + return ModelData.DeviceModelDataLogic.Current.SetPanelVibrationInfo(device, datainfo, "ClientDataPassthrough"); } - string checkTopic = HdlGatewayLogic.Current.GetGatewayId(gateway) + "/" + "ZbDataPassthrough"; - bool canBreak = false; - - bool success = false; - Action<string, string> action = (topic, message) => - { - if (topic == checkTopic) - { - try - { - var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); - if (jobject["DeviceAddr"].ToString() != device.DeviceAddr) - { - //涓嶆槸鍚屼竴涓笢瑗� - return; - } - string PassData = jobject["Data"]["PassData"].ToString(); - if (PassData.Length != 16) - { - return; - } - string mytopic = PassData[4].ToString() + PassData[5].ToString() + PassData[2].ToString() + PassData[3].ToString(); - if (mytopic != "0002") - { - return; - } - int command = Convert.ToInt32(PassData[10].ToString() + PassData[11].ToString() + PassData[12].ToString() + PassData[13].ToString(), 16); - int status = Convert.ToInt32(PassData[14].ToString() + PassData[15].ToString(), 16); - if (status == 0) - { - //鎴愬姛 - success = true; - } - canBreak = true; - } - catch { } - } - }; - gateway.Actions += action; - try - { - string passData = "0800081104"; - passData += datainfo.A闇囧姩浣胯兘 ? "01" : "00"; - passData += Convert.ToString(datainfo.A闇囧姩寮哄害, 16).PadLeft(2, '0'); - string time = Convert.ToString(datainfo.A闇囧姩鏃堕棿, 16).PadLeft(4, '0'); - //浣庝綅鍦ㄥ墠锛岄珮浣嶅湪鍚� - passData += time.Substring(2, 2); - passData += time.Substring(0, 2); - - var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; - var data = new Newtonsoft.Json.Linq.JObject { { "PassData", passData } }; - jObject.Add("Data", data); - gateway.Send(("ClientDataPassthrough"), jObject.ToString()); - } - catch { } - - int TimeOut = 0; - while (canBreak == false && TimeOut < 60) - { - System.Threading.Thread.Sleep(100); - TimeOut++; - } - gateway.Actions -= action; - - if (success == false) + //鑾峰彇缂栬緫闈㈡澘闇囧姩鍔熻兘鐨勫懡浠ゅ瓧绗� + var sendData = this.GetPanelVibrationCommandText(device.DeviceAddr, datainfo); + var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway2(device, sendData, "0002", 16, 6); + if (result.ErrorMsg != null || result.ErrorMsgDiv == 0) { //璁剧疆闇囧姩鍙嶉閰嶇疆淇℃伅澶辫触 string errorMsg = Language.StringByID(R.MyInternationalizationString.uSetVibrationFeedbackSettionFail); - if (TimeOut >= 60) - { - errorMsg = UserCenterLogic.CombineGatewayTimeOutMsg(errorMsg, null, "鍥炲瓒呮椂", false); - } + errorMsg = UserCenterLogic.CombineGatewayTimeOutMsg(errorMsg, null, "鍥炲瓒呮椂", false); this.ShowTipMsg(errorMsg); return false; } - //澶囦唤璁惧 - HdlThreadLogic.Current.RunThread(async () => - { - await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.A绠�绾﹂潰鏉块渿鍔ㄥ姛鑳�, datainfo); - }, ShowErrorMode.NO); + return true; + } - return success; + /// <summary> + /// 鑾峰彇缂栬緫闈㈡澘闇囧姩鍔熻兘鐨勫懡浠ゅ瓧绗� + /// </summary> + /// <param name="DeviceAddr"></param> + /// <param name="datainfo"></param> + /// <returns></returns> + public string GetPanelVibrationCommandText(string DeviceAddr, PanelVibrationInfo datainfo) + { + string passData = "0800081104"; + passData += datainfo.A闇囧姩浣胯兘 ? "01" : "00"; + passData += Convert.ToString(datainfo.A闇囧姩寮哄害, 16).PadLeft(2, '0'); + string time = Convert.ToString(datainfo.A闇囧姩鏃堕棿, 16).PadLeft(4, '0'); + //浣庝綅鍦ㄥ墠锛岄珮浣嶅湪鍚� + passData += time.Substring(2, 2); + passData += time.Substring(0, 2); + + var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new Newtonsoft.Json.Linq.JObject { { "PassData", passData } }; + jObject.Add("Data", data); + return jObject.ToString(); } /// <summary> /// 绠�绾﹂潰鏉块渿鍔ㄥ姛鑳戒俊鎭� /// </summary> - public class VibrationInfo + public class PanelVibrationInfo { /// <summary> /// 闇囧姩浣胯兘 -- Gitblit v1.8.0