From 48ba446936b51fffafa7c3600c0dadc6ac0e8c20 Mon Sep 17 00:00:00 2001 From: 陈嘉乐 <cjl@hdlchina.com.cn> Date: 星期五, 10 七月 2020 10:52:13 +0800 Subject: [PATCH] 2020-07-10-01 --- ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs | 912 ++++++++++++++++---------------------------------------- 1 files changed, 261 insertions(+), 651 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs old mode 100644 new mode 100755 index 15ee0ba..ac390e4 --- a/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs +++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs @@ -4,7 +4,7 @@ namespace ZigBee.Device { [System.Serializable] - public class AC : ThirdPartyModuleUpgrade + public class AC : CommonDevice { public AC() { @@ -14,30 +14,23 @@ /// <summary> ///褰撳墠瀹ゅ唴娓╁害 /// </summary> + [Newtonsoft.Json.JsonIgnore] public int currentLocalTemperature = 0; - /// <summary> /// 褰撳墠鍔犵儹搴︽暟 /// </summary> + [Newtonsoft.Json.JsonIgnore] public int currentHeatingSetpoint = 0; - /// <summary> /// 褰撳墠鍒跺喎搴︽暟 /// </summary> + [Newtonsoft.Json.JsonIgnore] public int currentCoolingSetpoint = 0; - /// <summary> - ///鎭掓俯璁惧绫诲瀷 - /// <para>鎭掓俯璁惧鍏峰鍔熻兘锛孉ttribute Values濡備笅</para> - /// <para>0:(Cooling Only) 鏃燞eat鍜孍mergency鍔熻兘</para> - /// <para>1:(Cooling With Reheat)鏃燞eat鍜孍mergency鍔熻兘</para> - /// <para>2:(Heating Only)鏃燙ool鍜孭recooling鍔熻兘</para> - /// <para>3:(Heating With Reheat)鏃燙ool鍜孭recooling鍔熻兘</para> - /// <para>4:(Cooling and Heating 4-pipes)鍙兘鏈夋墍鏈夊姛鑳�</para> - /// <para>5:(Cooling and Heating 4-pipes with Reheat)鍙兘鏈夋墍鏈夊姛鑳�</para> + /// 褰撳墠鑷姩娓╁害 /// </summary> - public int currentAcType = 0; - + [Newtonsoft.Json.JsonIgnore] + public int currentAutoSetpoint; /// <summary> /// 鎭掓俯璁惧褰撳墠妯″紡 /// <para>鎭掓俯璁惧鍏峰鍔熻兘锛孲ystemMode Attribute Values濡備笅</para> @@ -51,8 +44,8 @@ /// <para>8:Dry </para> /// <para>9:Sleep</para> /// </summary> + [Newtonsoft.Json.JsonIgnore] public int currentSystemMode = 0; - /// <summary> /// 椋庢墖褰撳墠妯″紡 /// <para>0:Off </para> @@ -63,18 +56,34 @@ /// <para>5:Auto </para> /// <para>6:Smart</para> /// </summary> + [Newtonsoft.Json.JsonIgnore] public int currentFanMode = 0; - /// <summary> - /// 鏀寔鐨勬帶鍒舵ā寮� + /// 椋庢墖zz鎵褰撳墠妯″紡 + /// <para>0:1鎸� </para> + /// <para>1:2</para> + /// <para>2:3</para> + /// <para>3:4 </para> + /// <para>4:5 </para> + /// <para>7:Auto </para> /// </summary> - public List<AcMode> acModes = new List<AcMode> { }; - + [Newtonsoft.Json.JsonIgnore] + public int currentFanSwingMode = 0; /// <summary> - /// 鏀寔鐨勯閫熸ā寮� + /// <para>鑷畾涔夌┖璋冩敮鎸佺殑妯″紡(榛樿鍏ㄥ紑)</para> + /// <para>鏁扮粍绱㈠紩 -> 0:鍒跺喎 1:鍒剁儹 2:閫侀 3:闄ゆ箍 4:鑷姩</para> + /// <para>鍊� -> 1:浠h〃浣跨敤 0:浠h〃涓嶄娇鐢�</para> /// </summary> - public List<FanMode> fanModes = new List<FanMode> { }; - + public int[] listSupportMode = new int[5] { 1, 1, 1, 1, 1 }; + /// <summary> + /// 鏄惁鍚敤鎽嗛鍔熻兘 false:涓嶄娇鐢ㄦ憜椋庡姛鑳� true:浣跨敤鎽嗛鍔熻兘 + /// </summary> + public bool UseSwingFunction = true; + /// <summary> + /// 杩囨护缃戞竻娲楃姸鎬� + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public bool CleanStatu = false; /// <summary> /// 鑾峰彇褰撳墠瀹ゅ唴娓╁害. @@ -101,6 +110,16 @@ public void ReadHeatingSetpoint() { ReadAttri(Device.Cluster_ID.Thermostat, AttriButeId.HeatingSetpoint); + } + + + /// <summary> + /// 鑾峰彇褰撳墠鑷姩搴︽暟. + /// <para>AttriButeId=18 (鍏堣皟鐢ㄥ彂鐜板睘鎬ф帴鍙o紝鏌ョ湅璁惧鏄惁鏀寔璇ユ帴鍙g殑灞炴�э級</para> + /// </summary> + public void ReadAutoSetpoint() + { + ReadAttri(Device.Cluster_ID.Thermostat, AttriButeId.AutoSetpoint); } /// <summary> @@ -139,6 +158,146 @@ ReadAttri(Device.Cluster_ID.FanControl, AttriButeId.FanModeSequence); } + /// <summary> + /// 鑾峰彇绌鸿皟鑷畾涔夎缃殑鏀寔妯″紡 + /// </summary> + public void ReadModeSupport() + { + ReadAttri(Device.Cluster_ID.Thermostat, AttriButeId.AcModeSupport); + } + + /// <summary> + /// 杩囨护缃戞竻娲楃姸鎬� + /// </summary> + public void ReadCleanStatu() + { + ReadAttri(Device.Cluster_ID.Thermostat, AttriButeId.CleanStatu); + } + + /// <summary> + /// 鑾峰彇鏄惁鍚敤绌鸿皟鎽嗛妯″紡鐨勭姸鎬�(鎵撳紑 鎴栬�� 鍏抽棴) + /// </summary> + public void ReadUseSwingFunctionStatu() + { + ReadAttri(Device.Cluster_ID.FanControl, AttriButeId.UseAcSwingFunctionStatu); + } + + /// <summary> + /// 鎵妯″紡 + /// </summary> + public enum FanSwingMode + { + /// <summary> + /// 涓�妗� + /// </summary> + First = 0, + /// <summary> + /// 浜屾尅 + /// </summary> + Second = 1, + /// <summary> + /// 涓夋尅 + /// </summary> + Thrid = 2, + /// <summary> + /// 鍥涙尅 + /// </summary> + Fourth = 3, + /// <summary> + /// 浜旀。 + /// </summary> + Fifth = 4, + /// <summary> + /// 鑷姩 + /// </summary> + Auto = 7 + } + /// <summary> + /// 鑾峰彇鎵妯″紡 + /// </summary> + public void ReadSystemFansSwingMode() + { + ReadAttri(Device.Cluster_ID.FanSwing, AttriButeId.FanSwing); + } + /// <summary> + /// 璁剧疆鎵妯″紡 + /// </summary> + /// <param name="fanSwing"></param> + /// <returns></returns> + public async System.Threading.Tasks.Task<SetWritableValueResponAllData> SetFanSwingAsyncMode(FanSwingMode fanSwing) + { + if (Gateway == null) + { + return null; + } + return await System.Threading.Tasks.Task.Run(async () => + { + SetWritableValueResponAllData d = null; + 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) + { + d = new SetWritableValueResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + d = new SetWritableValueResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "SetWritableValue_Respon") + { + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<SetWritableValueResponData>(jobject["Data"].ToString()); + + if (tempData == null) + { + d = new SetWritableValueResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new SetWritableValueResponAllData { setWritableValueResponData = tempData }; + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + Gateway.Actions += action; + DebugPrintLog("SetWritableValue_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + try + { + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 514 }, { "Command", 120 } }; + var data = new JObject { { "Undivided", 0 }, { "AttributeId", 4096 }, { "AttributeDataType", 48 }, { "AttributeData", (int)fanSwing } }; + jObject.Add("Data", data); + Gateway.Send("SetWritableValue", jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + d = new SetWritableValueResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + DebugPrintLog("SetWritableValue_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + return d; + }); + } + + ///<summary > ///璁剧疆鍒跺喎搴︽暟. /// </summary> @@ -158,8 +317,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) { @@ -173,7 +331,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) @@ -236,8 +393,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) { @@ -251,7 +407,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) @@ -296,6 +451,82 @@ } ///<summary > + ///璁剧疆鑷姩搴︽暟. + /// </summary> + public async System.Threading.Tasks.Task<SetWritableValueResponAllData> SetAutoTemperatureAsync(int temperature) + { + if (Gateway == null) + { + return null; + } + return await System.Threading.Tasks.Task.Run(async () => + { + SetWritableValueResponAllData d = null; + 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) + { + d = new SetWritableValueResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + d = new SetWritableValueResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; + } + } + + if (topic == gatewayID + "/" + "SetWritableValue_Respon") + { + var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<SetWritableValueResponData>(jobject["Data"].ToString()); + + if (tempData == null) + { + d = new SetWritableValueResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + d = new SetWritableValueResponAllData { setWritableValueResponData = tempData }; + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + } + } + }; + Gateway.Actions += action; + DebugPrintLog("SetWritableValue_Actions 鍚姩" + "_" + System.DateTime.Now.ToString()); + try + { + var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 513 }, { "Command", 120 } }; + var data = new JObject { { "Undivided", 0 }, { "AttributeId", 4096 }, { "AttributeDataType", 41 }, { "AttributeData", (int)temperature } }; + jObject.Add("Data", data); + Gateway.Send("SetWritableValue", jObject.ToString()); + } + catch { } + + var dateTime = DateTime.Now; + while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) + { + await System.Threading.Tasks.Task.Delay(10); + if (d != null) + { + break; + } + } + if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) + { + d = new SetWritableValueResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + DebugPrintLog("SetWritableValue_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + return d; + }); + } + + ///<summary > ///璁剧疆鎭掓俯鍣ㄨ澶囧綋鍓嶅伐浣滄ā寮�. /// </summary> public async System.Threading.Tasks.Task<SetWritableValueResponAllData> SetSystemModeAsync(AcMode acMode) @@ -314,8 +545,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) { @@ -329,7 +559,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) @@ -432,8 +661,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) { @@ -447,7 +675,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) @@ -563,622 +790,5 @@ { return await SetSystemModeAsync(acMode); } - - #region 鍗囩骇绌鸿皟绗笁鏂规ā鍧楃殑鎺ュ彛 - - #region 璇诲彇IRACC妯″潡鍥轰欢鐗堟湰锛圓PP -> Zigbee MCU锛� - ///<summary > - ///璇诲彇IRACC妯″潡鍥轰欢鐗堟湰 - /// <para>reserve:0-ff</para> - /// </summary> - public async System.Threading.Tasks.Task<ReadACFirewareVersionResponAllData> ReadACFirewareVersionAsync(string reserve = "01") - { - ReadACFirewareVersionResponAllData result = null; - if (Gateway == null) - { - result = new ReadACFirewareVersionResponAllData { 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 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()); - - if (temp == null) - { - result = new ReadACFirewareVersionResponAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; - } - - else - { - result = new ReadACFirewareVersionResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; - } - } - if (topic == gatewayID + "/" + "ZbDataPassthrough") - { - var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") }; - gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); - - if (gatewayTemp.clientDataPassthroughResponseData == null) - { - result = new ReadACFirewareVersionResponAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; - } - else - { - if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) - { - var data = gatewayTemp.clientDataPassthroughResponseData.PassData; - var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); - if (command == "0259") - { - var tempD = new ReadACFirewareVersionResponData(); - tempD.Status = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16); - if (data.Length == 82) - { - var firewareString = data.Substring(12); - var aa = firewareString.Length; - firewareVersion = firewareString; - var bytes = new byte[firewareString.Length / 2]; - for (int i = 0; i < bytes.Length; i++) - { - bytes[i] = Convert.ToByte(firewareString.Substring(i * 2, 2), 16); - } - - var firewareVersionTemp = System.Text.Encoding.ASCII.GetString(bytes); - tempD.FirewareVersion = firewareVersionTemp.Replace('\0', ' ').Trim(); - } - result = new ReadACFirewareVersionResponAllData { readACFirewareVersionResponData = tempD }; - System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0258_{topic}"); - } - } - } - } - }; - - Gateway.Actions += action; - System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); - - try - { - OpenPassthroughControl(Gateway); - var passData = ReadACFirewareVersionData(reserve); - 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 < WaitReceiveDataTime) - { - await System.Threading.Tasks.Task.Delay(10); - if (result != null) - { - break; - } - } - if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) - { - result = new ReadACFirewareVersionResponAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; - } - Gateway.Actions -= action; - System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); - - return result; - }); - } - - /// <summary> - /// 璇诲彇IRACC妯″潡鍥轰欢鐗堟湰 - /// </summary> - string ReadACFirewareVersionData(string reserve) - { - string data = ""; - string dataLength = "05"; - string dataComand1 = "58"; - string dataComand2 = "02"; - string dataSerialNum = "01"; - string addDataLength = "01"; - string reserveData = reserve; - - try - { - data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + - reserveData; - } - catch { }; - - return data; - } - - /// <summary> - /// IRACC妯″潡鍥轰欢鐗堟湰,缃戝叧鍙嶉淇℃伅 - /// </summary> - public ReadACFirewareVersionResponAllData readACFirewareVersionResponAllData; - /// <summary> - /// IRACC妯″潡鍥轰欢鐗堟湰,缃戝叧鍙嶉淇℃伅 - /// </summary> - [System.Serializable] - public class ReadACFirewareVersionResponAllData - { - /// <summary> - /// 閿欒淇℃伅 - /// </summary> - public string errorMessageBase; - /// <summary> - /// 缃戝叧淇℃伅閿欒鍙嶉 - /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> - /// </summary> - public ErrorResponData errorResponData; - /// <summary> - /// IRACC妯″潡鍥轰欢鐗堟湰淇℃伅 - /// </summary> - public ReadACFirewareVersionResponData readACFirewareVersionResponData; - } - - /// <summary> - /// IRACC妯″潡鍥轰欢鐗堟湰鐨勬暟鎹� - /// </summary> - [System.Serializable] - public class ReadACFirewareVersionResponData - { - /// <summary> - /// 鐘舵�� - ///<para>0--鎴愬姛</para> - ///<para>1--澶辫触</para> - ///<para>ff--鏃犳晥</para> - /// </summary> - public int Status; - /// <summary> - /// 鍥轰欢鐗堟湰 - /// </summary> - public string FirewareVersion; - } - #endregion - - #region 鍗囩骇IRACC妯″潡閫氱煡锛圓PP -> Zigbee MCU锛� - ///<summary > - ///鍗囩骇IRACC妯″潡閫氱煡 - /// <para>firewareVer:鍥轰欢鐗堟湰</para> - /// <para>firewareSize:鍥轰欢澶у皬</para> - /// </summary> - public async System.Threading.Tasks.Task<ResponseAllData> UpggradeACNotificationAsync(string firewareVer, long firewareSize) - { - ResponseAllData result = null; - if (Gateway == null) - { - result = new ResponseAllData { 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 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()); - - if (temp == null) - { - result = new ResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; - } - - else - { - result = new ResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; - } - } - if (topic == gatewayID + "/" + "ZbDataPassthrough") - { - var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") }; - gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); - - if (gatewayTemp.clientDataPassthroughResponseData == null) - { - result = new ResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; - } - else - { - if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) - { - var data = gatewayTemp.clientDataPassthroughResponseData.PassData; - var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); - if (command == "025b") - { - var tempD = new ResponseData(); - if (data.Length == 12) - { - tempD.status = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16); - } - result = new ResponseAllData { responseData = tempD }; - System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); - } - } - } - } - }; - - Gateway.Actions += action; - System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); - - try - { - OpenPassthroughControl(Gateway); - var passData = UpggradeACNotificationData(firewareVer, firewareSize); - 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 < WaitReceiveDataTime) - { - await System.Threading.Tasks.Task.Delay(10); - if (result != null) - { - break; - } - } - if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) - { - result = new ResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; - } - Gateway.Actions -= action; - System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); - - return result; - }); - } - - private string firewareVersion = string.Empty; - /// <summary> - /// 鍗囩骇IRACC妯″潡閫氱煡杩斿洖 - /// </summary> - string UpggradeACNotificationData(string firewareVer, long firewareSize) - { - string data = ""; - string dataLength = "2C"; - string dataComand1 = "5A"; - string dataComand2 = "02"; - string dataSerialNum = "01"; - string addDataLength = "28"; - string deviceUpgradeMethod = "01"; - string firewareVersionData = ""; - string firewareSizeData = ""; - - try - { - //鍥轰欢鐗堟湰 - var firewareVerBytes = System.Text.Encoding.ASCII.GetBytes(firewareVer); - for (int i = 0; i < firewareVerBytes.Length; i++) - { - var fw = Convert.ToString(firewareVerBytes[i], 16); - if (fw.Length == 1) - { - fw = "0" + fw; - } - firewareVersionData += fw; - } - - var aa = firewareVersionData.Length; - firewareVersionData = firewareVersionData.PadRight(70, '0'); - - //鍥轰欢灏哄 - var tempFwSize = Convert.ToString(firewareSize, 16); - tempFwSize = tempFwSize.PadLeft(8, '0'); - for (int i = 6; i >= 0; i = i - 2) - { - firewareSizeData += tempFwSize.Substring(i, 2); - } - - data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + - deviceUpgradeMethod + firewareVersionData + firewareSizeData; - - } - catch { }; - - return data; - } - - /// <summary> - ///鍗囩骇IRACC妯″潡閫氱煡鍥炲 - /// </summary> - public ResponseAllData keyColorDataResponseAllData; - [System.Serializable] - public class ResponseAllData - { - /// <summary> - /// 閿欒淇℃伅 - /// </summary> - public string errorMessageBase; - /// <summary> - /// 缃戝叧淇℃伅閿欒鍙嶉 - /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> - /// </summary> - public ErrorResponData errorResponData; - /// <summary> - /// 鍗囩骇IRACC妯″潡閫氱煡淇℃伅 - /// </summary> - public ResponseData responseData; - } - - /// <summary> - /// 鍗囩骇IRACC妯″潡閫氱煡鍥炲锛圸igbee MCU -> APP锛� - /// </summary> - [System.Serializable] - public class ResponseData - { - /// <summary> - /// 鐘舵�佸�� - /// <para>0--鐗堟湰鍙蜂笉涓�鑷达紙鍙互鍗囩骇</para> - /// <para>1--鐗堟湰鍙蜂竴鑷达紙涓嶇敤鍗囩骇</para> - /// <para>2--棰勭暀锛堟殏鏃朵笉鐢ㄥ埌</para> - /// <para>ff--鏃犳晥锛堟殏鏃朵笉鐢ㄥ埌锛�</para> - /// </summary> - public int status = -1; - } - #endregion - - #region 璁惧璇锋眰APP鑾峰彇鍗囩骇鏁版嵁 锛圸igbee MCU -> APP,涓诲姩涓婃姤锛� - /// <summary> - ///璁惧璇锋眰APP鑾峰彇鍗囩骇鏁版嵁锛圸igbee MCU -> APP,涓诲姩涓婃姤锛� - /// </summary> - [System.Serializable] - public class DeviceRequestUpgradeResponseData - { - /// <summary> - /// 鏁版嵁鍋忕Щ閲忥紝姣忎釜鍒嗗寘鍋忕Щ閲�+锛�1-43锛� - /// </summary> - public string offset = string.Empty; - /// <summary> - /// 鏁版嵁闀垮害len - /// </summary> - public int dataLength = -1; - } - #endregion - - #region 鍙戝崌绾ф暟鎹埌璁惧锛圓PP -> Zigbee MCU锛� - ///<summary > - ///璇诲彇IRACC妯″潡鍥轰欢鐗堟湰 - /// <para>reserve:0-ff</para> - /// </summary> - public async void UpgradeAsync(SendUpgradeData upgradeData) - { - if (Gateway == null) - { - return; - } - Action<string, string> action = (topic, message) => { }; - Gateway.Actions += action; - System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); - - try - { - OpenPassthroughControl(Gateway); - string passData = ""; - if (upgradeData != null) - { - passData = SendUpgrade(upgradeData); - } - - 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 { } - - Gateway.Actions -= action; - System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); - } - - /// <summary> - /// 鍙戝崌绾ф暟鎹埌璁惧 - /// </summary> - string SendUpgrade(SendUpgradeData upgradeData) - { - string data = ""; - string dataLength = ""; - string dataComand1 = "5D"; - string dataComand2 = "02"; - string dataSerialNum = "01"; - string addDataLength = ""; - - string status = ""; - string offset = ""; - string upgradeDataLength = ""; - string dataString = ""; - - try - { - var len = 4 + 1 + 4 + 1 + upgradeData.dataLength; - dataLength = Convert.ToString(len, 16); - if (dataLength.Length == 1) - { - dataLength = "0" + dataLength; - } - - addDataLength = Convert.ToString(6 + upgradeData.dataLength, 16); - if (addDataLength.Length == 1) - { - addDataLength = "0" + addDataLength; - } - - if (upgradeData.status == 0) - { - status = "00"; - } - else if (upgradeData.status == 1) - { - status = "01"; - } - else - { - status = "ff"; - } - - - offset = upgradeData.offset; - - var dl = Convert.ToString(upgradeData.dataLength, 16); - if (dl.Length == 1) - { - upgradeDataLength = "0" + dl; - } - else - { - upgradeDataLength = dl; - } - - for (int i = 0; i < upgradeData.databytes.Length; i++) - { - var dataB = Convert.ToString(upgradeData.databytes[i], 16);鈥� if (dataB.Length == 1)鈥� {鈥� dataB = "0" + dataB;鈥� }鈥� dataString += dataB; - } - - data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + - status + offset + upgradeDataLength + dataString; - } - catch { }; - - return data; - } - - /// <summary> - /// 鍙戦�佸崌绾ф暟鎹埌璁惧锛圓PP -> Zigbee MCU锛� - /// </summary> - [System.Serializable] - public class SendUpgradeData - { - /// <summary> - /// 0--鎴愬姛 - ///<para>1--澶辫触</para> - ///<para>ff--鏃犳晥</para> - /// </summary> - public int status = 0; - /// <summary> - /// 鏁版嵁鍋忕Щ閲忥紝姣忎釜鍒嗗寘鍋忕Щ閲�+锛�1-43锛� - /// </summary> - public string offset; - /// <summary> - /// 鏁版嵁闀垮害len - /// </summary> - public int dataLength = -1; - - /// <summary> - /// 鍒嗗寘鏁版嵁 - /// </summary> - public byte[] databytes; - } - #endregion - - #region 鍒嗗寘缁撴潫锛圸igbee MCU -> APP,涓诲姩涓婃姤锛� - /// <summary> - /// 璁惧璇锋眰APP鑾峰彇鍒嗗寘缁撴潫鍛戒护锛圸igbee MCU -> APP锛� - /// </summary> - [System.Serializable] - public class DeviceRequestFinishResponseData - { - /// <summary> - /// 0-ff - /// </summary> - public int reserve = -1; - } - #endregion - - #region 鍒嗗寘缁撴潫锛圓PP -> Zigbee MCU锛� - ///<summary > - ///璇诲彇IRACC妯″潡鍥轰欢鐗堟湰 - /// <para>status:0--鎴愬姛;1--澶辫触;ff--鏃犳晥 .</para> - /// </summary> - public async void SendFinishAsync(int status) - { - if (Gateway == null) - { - return; - } - Action<string, string> action = (topic, message) => { }; - Gateway.Actions += action; - System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); - - try - { - OpenPassthroughControl(Gateway); - var passData = SendFinishDataString(status); - 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 { } - - Gateway.Actions -= action; - System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); - } - - /// <summary> - /// 鍙戝崌绾ф暟鎹埌璁惧 - /// </summary> - string SendFinishDataString(int status) - { - string data = ""; - string dataLength = "05"; - string dataComand1 = "5F"; - string dataComand2 = "02"; - string dataSerialNum = "01"; - string addDataLength = "01"; - string statusString = ""; - try - { - if (status == 0) - { - statusString = "00"; - } - else if (status == 1) - { - statusString = "01"; - } - else - { - statusString = "ff"; - } - data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + - statusString; - } - catch { }; - - return data; - } - - /// <summary> - /// 鍒嗗寘缁撴潫杩斿洖锛圓PP -> Zigbee MCU - /// </summary> - //[System.Serializable] - public class SendFinishData - { - /// <summary> - /// 鐘舵�侊細鎴愬姛/澶辫触 - ///<para>0--鎴愬姛<<para> - ///<para>1--澶辫触<<para> - ///<para>ff--鏃犳晥<<para> - /// </summary> - public int status = -1; - } - - #endregion - #endregion } } -- Gitblit v1.8.0