From fa6bcb2e9907772480f99205f36ec2a1ce735a22 Mon Sep 17 00:00:00 2001 From: 黄学彪 <hxb@hdlchina.com.cn> Date: 星期四, 09 一月 2020 14:11:07 +0800 Subject: [PATCH] 合并代码 --- ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs | 629 +------------------------------------------------------- 1 files changed, 14 insertions(+), 615 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs index b70e603..daed5b8 100755 --- a/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs +++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs @@ -91,11 +91,15 @@ /// </summary> public List<FanMode> fanModes = new List<FanMode> { }; /// <summary> - /// <para>鑷畾涔夌┖璋冩敮鎸佺殑妯″紡(榛樿鍏ㄥ叧)</para> + /// <para>鑷畾涔夌┖璋冩敮鎸佺殑妯″紡(榛樿鍏ㄥ紑)</para> /// <para>鏁扮粍绱㈠紩 -> 0:鍒跺喎 1:鍒剁儹 2:閫侀 3:闄ゆ箍 4:鑷姩</para> /// <para>鍊� -> 1:浠h〃浣跨敤 0:浠h〃涓嶄娇鐢�</para> /// </summary> - public int[] listSupportMode = new int[5] { 0, 0, 0, 0, 0 }; + public int[] listSupportMode = new int[5] { 1, 1, 1, 1, 1 }; + /// <summary> + /// 鏄惁鍚敤鎽嗛鍔熻兘 false:涓嶄娇鐢ㄦ憜椋庡姛鑳� true:浣跨敤鎽嗛鍔熻兘 + /// </summary> + public bool UseSwingFunction = true; /// <summary> /// 杩囨护缃戞竻娲楃姸鎬� @@ -189,6 +193,14 @@ public void ReadCleanStatu() { ReadAttri(Device.Cluster_ID.Thermostat, AttriButeId.CleanStatu); + } + + /// <summary> + /// 鑾峰彇鏄惁鍚敤绌鸿皟鎽嗛妯″紡鐨勭姸鎬�(鎵撳紑 鎴栬�� 鍏抽棴) + /// </summary> + public void ReadUseSwingFunctionStatu() + { + ReadAttri(Device.Cluster_ID.FanControl, AttriButeId.UseAcSwingFunctionStatu); } /// <summary> @@ -811,618 +823,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 - { - 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 - { - 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 - { - 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 - { - 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