From 4f0ab0ad21ce450b7856d50f98322a7899361386 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期二, 22 九月 2020 10:30:01 +0800
Subject: [PATCH] 不要下载这个备份
---
ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs | 831 ++++++++++++----------------------------------------------
1 files changed, 178 insertions(+), 653 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs
index 2855c62..7de29dc 100755
--- 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,35 +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>
/// 褰撳墠鑷姩娓╁害
/// </summary>
+ [Newtonsoft.Json.JsonIgnore]
public int currentAutoSetpoint;
-
- /// <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;
-
/// <summary>
/// 鎭掓俯璁惧褰撳墠妯″紡
/// <para>鎭掓俯璁惧鍏峰鍔熻兘锛孲ystemMode Attribute Values濡備笅</para>
@@ -56,8 +44,8 @@
/// <para>8:Dry </para>
/// <para>9:Sleep</para>
/// </summary>
+ [Newtonsoft.Json.JsonIgnore]
public int currentSystemMode = 0;
-
/// <summary>
/// 椋庢墖褰撳墠妯″紡
/// <para>0:Off </para>
@@ -68,18 +56,38 @@
/// <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>
+ public string AcModelVersion = string.Empty;
+ /// <summary>
+ /// 杩囨护缃戞竻娲楃姸鎬�
+ /// </summary>
+ [Newtonsoft.Json.JsonIgnore]
+ public bool CleanStatu = false;
/// <summary>
/// 鑾峰彇褰撳墠瀹ゅ唴娓╁害.
@@ -154,6 +162,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>
@@ -173,8 +321,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)
{
@@ -188,7 +335,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)
@@ -251,8 +397,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)
{
@@ -266,7 +411,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)
@@ -329,8 +473,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)
{
@@ -344,7 +487,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)
@@ -407,8 +549,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)
{
@@ -422,7 +563,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)
@@ -525,8 +665,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)
{
@@ -540,7 +679,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)
@@ -656,618 +794,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