From 351bdda734832d821a9764b0cde8be5d83c4ec50 Mon Sep 17 00:00:00 2001 From: wjc <1243177876@qq.com> Date: 星期四, 01 十二月 2022 09:56:25 +0800 Subject: [PATCH] 2022年12月01日09:56:23 --- ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs | 812 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 674 insertions(+), 138 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs index 0dd69e0..df2c8d6 100755 --- a/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs +++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs @@ -35,21 +35,29 @@ public string currentUserDisplayMethod = string.Empty;//褰撳墠鐢ㄦ埛鏄剧ず鏂瑰紡 //鏈湴鎵�鏈夎处鎴峰垪琛� public List<Shared.Phone.UserCenter.MemberInfoRes> localAllAccountList = new List<Shared.Phone.UserCenter.MemberInfoRes> { }; + + /// <summary> + /// 鏄惁甯稿紑妯″紡 + /// ture:甯稿紑锛� false:鍏抽棴 + /// </summary> + public bool IsDoorLockNormallyMode = false; + [Newtonsoft.Json.JsonIgnore] public string LocalTempPassword = string.Empty;//鏈湴鐢熸垚鐨勪复鏃跺瘑鐮� public Dictionary<string, bool> IsFreezeAccount = new Dictionary<string, bool> { };//鏄惁鍐荤粨瀛愯处鎴� public Dictionary<string, bool> HasRemoteUnlockAccess = new Dictionary<string, bool> { };//鏄惁缁欏瓙璐︽埛鎷ユ湁杩滅▼寮�閿佺殑鏉′欢 public Dictionary<string, bool> IsFailedToGetDoorLockInfo = new Dictionary<string, bool> { };//鏄惁鑾峰彇闂ㄩ攣鏁版嵁澶辫触 + [Newtonsoft.Json.JsonIgnore] public string RemoteUnlockPassword = string.Empty;//杩滅▼寮�閿佸瘑鐮� public static int RemoteUnlockCount = 5;//杩滅▼寮�閿佹鏁伴檺鍒� public static int failedCount = 3;//杩滅▼寮�閿佸け璐ユ鏁� - public static DateTime maxValue = DateTime.MaxValue; public static DateTime minValue = DateTime.MinValue; #region 涓存椂瀵嗙爜淇℃伅 /// <summary> /// 鐢ㄦ埛绠$悊鍙戦�佹暟鎹洖澶� /// </summary> + [Newtonsoft.Json.JsonIgnore] public TempPasswordObject tempPasswordObject; /// <summary> /// 涓存椂瀵嗙爜鏈湴瀵硅薄 @@ -620,11 +628,11 @@ //璁块棶鎺ュ彛 if (UserCenterResourse.UserInfo.AuthorityNo == 1) { - result1 = await CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync(RequestName, byteData); + result1 = CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync(RequestName, byteData); } else { - result1 = await CommonPage.Instance.RequestZigbeeHttpsByAdmin(RequestName, byteData); + result1 = CommonPage.Instance.RequestZigbeeHttpsByAdmin(RequestName, byteData); } if (result1 != null) { @@ -654,7 +662,11 @@ return await System.Threading.Tasks.Task.Run((Func<System.Threading.Tasks.Task<List<Shared.Phone.UserCenter.MemberInfoRes>>>)(async () => { var pra = new Shared.Phone.UserCenter.MemberListInfoPra(); - string result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra); + string result = UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountByDistributedMark", false, pra); + if (result == null) + { + return null; + } var listInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Shared.Phone.UserCenter.MemberInfoRes>>(result); return listInfo; })); @@ -678,6 +690,7 @@ /// <summary> /// 闂ㄩ攣鎿嶄綔浜嬩欢閫氱煡 /// </summary> + [Newtonsoft.Json.JsonIgnore] public DoorLockOperatingEventNotificationCommand doorLockOperatingEventNotificationCommand; /// <summary> /// 闂ㄩ攣鎿嶄綔浜嬩欢閫氱煡 @@ -928,6 +941,7 @@ /// <summary> /// 闂ㄩ攣缂栫▼浜嬩欢閫氱煡 /// </summary> + [Newtonsoft.Json.JsonIgnore] public DoorLockProgrammingEventNotificationCommand doorLockProgrammingEventNotificationCommand; /// <summary> /// 闂ㄩ攣缂栫▼浜嬩欢閫氱煡 @@ -951,7 +965,7 @@ /// <summary> /// 缂栫▼浜嬩欢瑙﹀彂婧� /// 甯哥敤锛� - /// 0:Keypad(閿洏/瀵嗙爜)锛�3:RFID(灏勯鍗�)锛�15:鎸囩汗 + /// 0:Keypad(閿洏/瀵嗙爜)锛�3:RFID(灏勯鍗�)锛�15:鎸囩汗 58锛歠ace 59锛氶潤鑴� ///涓嶅父鐢細 /// 1:RF(Zigbee鏃犵嚎)锛�2:Manual(鎵嬪姩)锛�255:Indeterminate(涓嶇‘瀹�) /// </summary> @@ -979,8 +993,8 @@ /// <summary> /// 鐭闂ㄩ攣鏃堕棿 /// </summary> - /// <returns>The writable value async.</returns> - /// <param name="timestamp">鐭闂ㄩ攣鐨勬椂闂�</param> + /// <param name="timestamp"></param> + /// <returns></returns> public async System.Threading.Tasks.Task<SetWritableValueResponAllData> RectifyDoorLockTimeAsync(int timestamp) { if (Gateway == null) @@ -997,8 +1011,7 @@ if (topic == gatewayID + "/" + "Error_Respon") { - var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID }; - var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString()); + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); if (temp == null) { @@ -1012,7 +1025,6 @@ if (topic == gatewayID + "/" + "SetWritableValue_Respon") { - var gatewayTemp = new ZbGateway() { DeviceID = jobject.Value<int>("Device_ID"), DeviceAddr = jobject.Value<string>("DeviceAddr"), DeviceEpoint = jobject.Value<int>("Epoint"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID }; var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<SetWritableValueResponData>(jobject["Data"].ToString()); if (tempData == null) @@ -1058,50 +1070,6 @@ }); } - /// <summary> - /// 缃戝叧鐗堟湰淇℃伅,缃戝叧鍙嶉淇℃伅 - /// </summary> - public SetWritableValueResponAllData setWritableValueResponAllData; - /// <summary> - /// 缃戝叧鐗堟湰淇℃伅,缃戝叧鍙嶉淇℃伅 - /// </summary> - [System.Serializable] - public class SetWritableValueResponAllData - { - /// <summary> - /// 閿欒淇℃伅 - /// </summary> - public string errorMessageBase; - /// <summary> - /// 缃戝叧淇℃伅閿欒鍙嶉 - /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> - /// </summary> - public ErrorResponData errorResponData; - /// <summary> - /// 缃戝叧鐗堟湰淇℃伅 - /// </summary> - public SetWritableValueResponData setWritableValueResponData; - } - - /// <summary> - /// 璁剧疆鍙啓灞炴�х殑鍊肩殑鏁版嵁 - /// </summary> - [System.Serializable] - public class SetWritableValueResponData - { - /// <summary> - /// 閰嶇疆灞炴�ф墍鍦ㄧ殑cluster - /// </summary> - public int Cluster; - /// <summary> - /// 0锛氶厤缃垚鍔燂紙鑻ラ厤缃垚鍔燂紝涓嬮潰鐨凙ttributeId瀛楁涓嶅瓨鍦級 - ///<para>134锛氫笉鏀寔璇ュ睘鎬�</para> - ///<para>135锛氭棤鏁堢殑灞炴�у��</para> - ///<para>141锛氭棤鏁堢殑鏁版嵁绫诲瀷</para> - /// </summary> - public int Status; - - } #endregion #endregion @@ -1129,8 +1097,7 @@ if (topic == gatewayID + "/" + "Error_Respon") { - var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID }; - var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString()); + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); if (temp == null) { @@ -1144,18 +1111,17 @@ } if (topic == gatewayID + "/" + "ZbDataPassthrough") { - var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") }; - gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); - if (gatewayTemp.clientDataPassthroughResponseData == null) + if (clientDataPassthroughResponseData == null) { result = new DefaultControlResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; } else - { - if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) + { + if (clientDataPassthroughResponseData?.PassData != null) { - var data = gatewayTemp.clientDataPassthroughResponseData.PassData; + var data = clientDataPassthroughResponseData.PassData; if (data.Length == 16) { var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); @@ -1164,8 +1130,11 @@ var tempD = new DefaultControlResponseData(); 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); - result = new DefaultControlResponseAllData { defaultControlResponseData = tempD }; - DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0450_{ topic}"); + if (tempD.command == "0450") + { + result = new DefaultControlResponseAllData { defaultControlResponseData = tempD }; + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0450_{ topic}"); + } } } } @@ -1281,27 +1250,26 @@ var sbString = new System.Text.StringBuilder(); foreach (var userId in userIdList) { - string temp = Convert.ToString(userId, 16); - switch (temp.Length) + var tempBytes = new byte[2]; + for (int i = 0; i < 2; i++) { - case 1: - userIdStr = "0" + temp + "00"; - break; - case 2: - userIdStr = temp + "00"; - break; - case 3: - var thirdBit = temp.Substring(temp.Length - 2, 1); - userIdStr = temp + "0" + thirdBit; - break; - case 4: - userIdStr = temp; - break; + tempBytes[i] = (byte)(userId >> (i * 8) & 0xff); } - sbString.Append(userIdStr.ToString().ToUpper()); + var curV1 = Convert.ToString(tempBytes[0], 16); + var curV2 = Convert.ToString(tempBytes[1], 16); + if (curV1.Length == 1) + { + curV1 = "0" + curV1; + } + if (curV2.Length == 1) + { + curV2 = "0" + curV2; + } + + userIdStr = (curV1 + curV2).ToUpper(); } data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + - delUserTypeStr + sbString; + delUserTypeStr + userIdStr; } catch { }; @@ -1338,28 +1306,27 @@ delUserTypeStr = "21"; break; } - var sbString = new System.Text.StringBuilder(); - string temp = Convert.ToString(userId, 16); - switch (temp.Length) + var tempBytes = new byte[2]; + for (int i = 0; i < 2; i++) { - case 1: - userIdStr = "0" + temp + "00"; - break; - case 2: - userIdStr = temp + "00"; - break; - case 3: - var thirdBit = temp.Substring(temp.Length - 2, 1); - userIdStr = temp + "0" + thirdBit; - break; - case 4: - userIdStr = temp; - break; + tempBytes[i] = (byte)(userId >> (i * 8) & 0xff); } - sbString.Append(userIdStr.ToString().ToUpper()); + var curV1 = Convert.ToString(tempBytes[0], 16); + var curV2 = Convert.ToString(tempBytes[1], 16); + if (curV1.Length == 1) + { + curV1 = "0" + curV1; + } + if (curV2.Length == 1) + { + curV2 = "0" + curV2; + } + + userIdStr = (curV1 + curV2).ToUpper(); + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + - delUserTypeStr + sbString; + delUserTypeStr + userIdStr; } catch { }; @@ -1369,7 +1336,6 @@ /// <summary> /// 鐢ㄦ埛绠$悊鍙戦�佹暟鎹洖澶� /// </summary> - public DefaultControlResponseAllData defaultControlResponseAllData; [System.Serializable] public class DefaultControlResponseAllData { @@ -1401,8 +1367,8 @@ /// <summary> /// 鐘舵�佸�� /// <para>榛樿鍝嶅簲缁撴灉锛� - ///<para>0 鍒犻櫎鎴愬姛</para> - ///<para>1 鍒犻櫎澶辫触</para> + ///<para>0 鎴愬姛</para> + ///<para>1 澶辫触</para> ///<para>2 鐢ㄦ埛涓嶅瓨鍦�</para> ///<para>32 鍐荤粨鎴愬姛</para> ///<para>34 鍐荤粨澶辫触</para> @@ -1467,8 +1433,7 @@ if (topic == gatewayID + "/" + "Error_Respon") { - var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID }; - var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString()); + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); if (temp == null) { @@ -1482,18 +1447,17 @@ } if (topic == gatewayID + "/" + "ZbDataPassthrough") { - var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") }; - gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); - if (gatewayTemp.clientDataPassthroughResponseData == null) + if (clientDataPassthroughResponseData == null) { result = new VerifyPasswordResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; } else { - if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) + if (clientDataPassthroughResponseData?.PassData != null) { - var data = gatewayTemp.clientDataPassthroughResponseData.PassData; + var data = clientDataPassthroughResponseData.PassData; if (data.Length == 12) { var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); @@ -1573,7 +1537,6 @@ /// <summary> /// 鐢ㄦ埛绠$悊鍙戦�佹暟鎹洖澶� /// </summary> - public VerifyPasswordResponseAllData verifyPasswordResponseAllData; [System.Serializable] public class VerifyPasswordResponseAllData { @@ -1617,8 +1580,7 @@ if (topic == gatewayID + "/" + "Error_Respon") { - var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID }; - var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString()); + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); if (temp == null) { @@ -1643,18 +1605,17 @@ } else if (topic == gatewayID + "/" + "ZbDataPassthrough") { - var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") }; - gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); - if (gatewayTemp.clientDataPassthroughResponseData == null) + if (clientDataPassthroughResponseData == null) { result = new RemoteResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; } else { - if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) + if (clientDataPassthroughResponseData?.PassData != null) { - var data = gatewayTemp.clientDataPassthroughResponseData.PassData; + var data = clientDataPassthroughResponseData.PassData; if (data.Length == 16) { var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); @@ -1663,8 +1624,11 @@ var tempD = new RemoteResponseData(); 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); - result = new RemoteResponseAllData { responseData = tempD }; - DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0462_{ topic}"); + if (tempD.command == "0462") + { + result = new RemoteResponseAllData { responseData = tempD }; + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0462_{ topic}"); + } } } } @@ -1744,7 +1708,6 @@ /// <summary> /// 杩滅▼鍥炲鏁版嵁 /// </summary> - public RemoteResponseAllData remoteResponseAllData; [System.Serializable] public class RemoteResponseAllData { @@ -1789,7 +1752,7 @@ #region 涓存椂瀵嗙爜鍙戦�佹暟鎹� ///<summary > - ///杩滅▼寮�閿� + ///涓存椂瀵嗙爜 ///<para>inputPassword: 杈撳叆瀵嗙爜/para> /// </summary> public async System.Threading.Tasks.Task<TempPasswordResponseAllData> TempPasswordAsync(string inputPassword, System.DateTime startTime, System.DateTime endTime, string fixedPassword = "190605") @@ -1809,8 +1772,7 @@ if (topic == gatewayID + "/" + "Error_Respon") { - var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID }; - var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString()); + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); if (temp == null) { @@ -1824,18 +1786,17 @@ } if (topic == gatewayID + "/" + "ZbDataPassthrough") { - var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") }; - gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); - if (gatewayTemp.clientDataPassthroughResponseData == null) + if (clientDataPassthroughResponseData == null) { result = new TempPasswordResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; } else { - if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) + if (clientDataPassthroughResponseData?.PassData != null) { - var data = gatewayTemp.clientDataPassthroughResponseData.PassData; + var data = clientDataPassthroughResponseData.PassData; if (data.Length == 16) { var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); @@ -1844,8 +1805,11 @@ var tempD = new TempPasswordResponseData(); 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); - result = new TempPasswordResponseAllData { responseData = tempD }; - DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0463_{ topic}"); + if (tempD.command == "0463") + { + result = new TempPasswordResponseAllData { responseData = tempD }; + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0463_{ topic}"); + } } } } @@ -1934,7 +1898,6 @@ /// <summary> /// 涓存椂瀵嗙爜鍥炲鏁版嵁 /// </summary> - public TempPasswordResponseAllData tempPasswordResponseAllData; [System.Serializable] public class TempPasswordResponseAllData { @@ -2019,8 +1982,7 @@ if (topic == gatewayID + "/" + "Error_Respon") { - var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID }; - var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString()); + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); if (temp == null) { @@ -2035,18 +1997,17 @@ if (topic == gatewayID + "/" + "ZbDataPassthrough") { - var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") }; - gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); - if (gatewayTemp.clientDataPassthroughResponseData == null) + if (clientDataPassthroughResponseData == null) { result = new KeyPasswordInfo { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; } else { - if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) + if (clientDataPassthroughResponseData?.PassData != null) { - var data = gatewayTemp.clientDataPassthroughResponseData.PassData; + var data = clientDataPassthroughResponseData.PassData; if (data.Length == 20) { var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); @@ -2340,6 +2301,581 @@ } #endregion + #region 闊抽噺 + ///<summary > + ///鑾峰彇闊抽噺 + /// </summary> + public async System.Threading.Tasks.Task<VolumeResponseAllData> GetVolumeAsync() + { + VolumeResponseAllData result = null; + if (Gateway == null) + { + result = new VolumeResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" }; + return result; + } + return await System.Threading.Tasks.Task.Run(async () => + { + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + result = new VolumeResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + result = new VolumeResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + if (topic == gatewayID + "/" + "ZbDataPassthrough") + { + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + + if (clientDataPassthroughResponseData == null) + { + result = new VolumeResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + if (clientDataPassthroughResponseData?.PassData != null) + { + var data = clientDataPassthroughResponseData.PassData; + if (data.Length == 14) + { + var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); + if (command == "0456") + { + var tempD = new VolumeResponseData(); + tempD.command = data[10].ToString() + data[11].ToString(); + tempD.value = Convert.ToInt32(data[12].ToString() + data[13].ToString(), 16); + result = new VolumeResponseAllData { volumeResponseData = tempD }; + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0456_{ topic}"); + } + } + } + } + } + }; + + Gateway.Actions += action; + DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); + + try + { + var passData = VolumeData(-1); + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new JObject { { "PassData", passData } }; + jObject.Add("Data", data); + Gateway.Send(("ClientDataPassthrough"), jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)// WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (result != null && result.volumeResponseData != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > 9000) + { + result = new VolumeResponseAllData + { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return result; + }); + } + + ///<summary > + ///闊抽噺 + ///<para>鍛戒护鍊�: comandValue</para> + ///<para>comandValue: 0-0x64 闊抽噺</para> + /// </summary> + public async System.Threading.Tasks.Task<DefaultControlResponseAllData> SetVolumeAsync(int comandValue) + { + DefaultControlResponseAllData result = null; + if (Gateway == null) + { + result = new DefaultControlResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" }; + return result; + } + return await System.Threading.Tasks.Task.Run(async () => + { + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + result = new DefaultControlResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + result = new DefaultControlResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + if (topic == gatewayID + "/" + "ZbDataPassthrough") + { + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + + if (clientDataPassthroughResponseData == null) + { + result = new DefaultControlResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + if (clientDataPassthroughResponseData?.PassData != null) + { + var data = clientDataPassthroughResponseData.PassData; + if (data.Length == 16) + { + var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); + if (command == "0002") + { + var tempD = new DefaultControlResponseData(); + 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); + if (tempD.command == "0455") + { + result = new DefaultControlResponseAllData { defaultControlResponseData = tempD }; + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0455_{ topic}"); + } + } + } + } + } + } + }; + + Gateway.Actions += action; + DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); + + try + { + var passData = VolumeData(comandValue); + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new JObject { { "PassData", passData } }; + jObject.Add("Data", data); + Gateway.Send(("ClientDataPassthrough"), jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)// WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (result != null && result.defaultControlResponseData != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > 9000) + { + result = new DefaultControlResponseAllData + { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return result; + }); + } + + /// <summary> + /// 闊抽噺鍙戦�佹暟鎹� + ///<para>comandValue: 0-100 闊抽噺</para> + /// </summary> + public string VolumeData(int comandValue) + { + string data = ""; + string dataLength = "05"; + string dataComand1 = "55"; + string dataComand2 = "04"; + string dataSerialNum = "01"; + string addDataLength = "01"; + string cValue = ""; + try + { + if (comandValue >= 1) + { + cValue = Convert.ToString(comandValue, 16).ToUpper(); + if (cValue.Length == 1) + { + cValue = "0" + cValue; + } + else + { + cValue = cValue; + } + + } + else + { + switch (comandValue) + { + case -1: + cValue = "AA"; + break; + case 0: + cValue = "EB"; + break; + } + } + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + cValue; + } + catch (Exception ex) + { + var mess = ex.Message; + }; + return data; + } + + /// <summary> + /// 闊抽噺鍥炲鏁版嵁 + /// </summary> + [System.Serializable] + public class VolumeResponseAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 闊抽噺鍥炲鏁版嵁 + /// </summary> + public VolumeResponseData volumeResponseData; + } + + /// <summary> + /// 闊抽噺鍥炲鏁版嵁 + /// </summary> + [System.Serializable] + public class VolumeResponseData + { + /// <summary> + ///鍛戒护 + ///<para>0x00 鎺ユ敹鎴愬姛</para> + ///<para>0xea 璇煶妯″紡</para> + ///<para>0xeb 闈欓煶妯″紡</para> + /// </summary> + public string command = ""; + /// <summary> + /// 闊抽噺鍊� + /// <para>0xf1~0xfe 1-14闊抽噺</para> + /// <para>0 鏃犻煶閲忓��</para> + /// </summary> + public int value = -1; + } + #endregion + + #region 甯稿紑妯″紡聽聽聽 聽聽聽聽聽 + /// <summary> + /// 璇诲彇甯稿紑妯″紡 + /// </summary> + /// <returns></returns> + public async System.Threading.Tasks.Task<OpenModeResponseAllData> ReadNormallyOpenModeFuncAsync() + { + OpenModeResponseAllData result = null; + if (Gateway == null) + { + result = new OpenModeResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" }; + return result; + } + return await System.Threading.Tasks.Task.Run(async () => + { + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + result = new OpenModeResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + result = new OpenModeResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + if (topic == gatewayID + "/" + "ZbDataPassthrough") + { + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + + if (clientDataPassthroughResponseData == null) + { + result = new OpenModeResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + if (clientDataPassthroughResponseData?.PassData != null) + { + var data = clientDataPassthroughResponseData.PassData; + if (data.Length == 12) + { + var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); + if (command == "0458") + { + result = new OpenModeResponseAllData(); + result.command = data[10].ToString() + data[11].ToString(); + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0457_{ topic}"); + } + } + } + } + } + }; + + Gateway.Actions += action; + DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); + + try + { + var passData = OpenModeData(SwitchMode.Obtain); + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new JObject { { "PassData", passData } }; + jObject.Add("Data", data); + Gateway.Send(("ClientDataPassthrough"), jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)// WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (result != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > 9000) + { + result = new OpenModeResponseAllData + { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return result; + }); + } + + /// <summary> + /// 璁剧疆甯稿紑妯″紡 + /// </summary> + /// <param name="IsNormallyOpenMode">鏄惁鎵撳紑甯稿紑妯″紡锛歵rue锛氭墦寮� false锛氬叧闂�</param> + /// <returns></returns> + public async System.Threading.Tasks.Task<DefaultControlResponseAllData> SetNormallyOpenModeFuncAsync(bool IsNormallyOpenMode) + { + DefaultControlResponseAllData result = null; + if (Gateway == null) + { + result = new DefaultControlResponseAllData { errorMessageBase = "褰撳墠娌℃湁缃戝叧" }; + return result; + } + return await System.Threading.Tasks.Task.Run(async () => + { + Action<string, string> action = (topic, message) => + { + var gatewayID = topic.Split('/')[0]; + var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); + + if (topic == gatewayID + "/" + "Error_Respon") + { + var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString()); + + if (temp == null) + { + result = new DefaultControlResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + result = new DefaultControlResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + if (topic == gatewayID + "/" + "ZbDataPassthrough") + { + var clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); + + if (clientDataPassthroughResponseData == null) + { + result = new DefaultControlResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + if (clientDataPassthroughResponseData?.PassData != null) + { + var data = clientDataPassthroughResponseData.PassData; + if (data.Length == 16) + { + var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); + if (command == "0002") + { + var tempD = new DefaultControlResponseData(); + 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); + if (tempD.command == "0457") + { + result = new DefaultControlResponseAllData { defaultControlResponseData = tempD }; + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0457_{ topic}"); + } + } + } + } + } + } + }; + + Gateway.Actions += action; + DebugPrintLog("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); + + try + { + var passData = ""; + if (IsNormallyOpenMode) + { + passData = OpenModeData(SwitchMode.NormallyOpen); + } + else + { + passData = OpenModeData(SwitchMode.NormallyClose); + } + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + var data = new JObject { { "PassData", passData } }; + jObject.Add("Data", data); + Gateway.Send(("ClientDataPassthrough"), jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)// WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (result != null && result.defaultControlResponseData != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > 9000) + { + result = new DefaultControlResponseAllData + { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + DebugPrintLog("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return result; + }); + } + + /// <summary> + /// 甯稿紑妯″紡聽鍙戦�佹暟鎹� + /// </summary> + public string OpenModeData(SwitchMode switchMode) + { + string data = ""; + string dataLength = "05"; + string dataComand1 = "57"; + string dataComand2 = "04"; + string dataSerialNum = "01"; + string addDataLength = "01"; + string cValue = ""; + try + { + switch (switchMode) + { + case SwitchMode.Obtain: + cValue = "10"; + break; + case SwitchMode.NormallyOpen: + cValue = "12"; + break; + case SwitchMode.NormallyClose: + cValue = "13"; + break; + } + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + cValue; + } + catch (Exception ex) + { + var mess = ex.Message; + }; + return data; + } + + /// <summary> + /// 甯稿紑妯″紡聽鍥炲鏁版嵁 + /// </summary> + [System.Serializable] + public class OpenModeResponseAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 0x10 甯稿紑宸插紑鍚� + /// <para>0x11 甯稿紑宸插叧闂�</para> + /// </summary> + public string command; + } + + + /// <summary> + /// 寮�鍏虫ā寮� + /// </summary> + public enum SwitchMode + { + /// <summary> + /// 0x10 鏌ヨ甯稿紑鐘舵�� + /// </summary> + Obtain = 0x10, + /// <summary> + /// 0x12 寮�鍚父寮� + /// </summary> + NormallyOpen = 0x12, + /// <summary> + /// 0x13 鍏抽棴甯稿紑 + /// </summary> + NormallyClose = 0x13 + } + #endregion + #endregion } } -- Gitblit v1.8.0