| | |
| | | /// 按键模式(私有功能) |
| | | /// </summary> |
| | | public int panelMode = 65535; |
| | | /// <summary> |
| | | ///按键开状态(指示)亮度 |
| | | /// </summary> |
| | | public int panelDirectionsLevel = -1; |
| | | |
| | | /// <summary> |
| | | /// 按键关状态(背光)亮度 |
| | | /// </summary> |
| | | public int panelBacklightLevel = -1; |
| | | |
| | | /// <summary> |
| | | /// 当前选择模式 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string currentKeySelectModeText = ""; |
| | | /// <summary> |
| | | /// 当前选择的楼层ID |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string currentSelectFloorId = string.Empty; |
| | | /// <summary> |
| | | /// 当前开关模式 |
| | | /// 当前选择的房间ID【新风面板】 |
| | | /// </summary> |
| | | public string CurrentSwitchMode = ""; |
| | | /// <summary> |
| | | /// 当前属性模式 |
| | | /// </summary> |
| | | public int currentClusterID; |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string currentSelectRoomId = string.Empty; |
| | | |
| | | /// <summary> |
| | | /// 当前调光模式 |
| | | /// </summary> |
| | | public string CurrentDimmerMode = ""; |
| | | |
| | | /// <summary> |
| | | /// 当前遮阳模式 |
| | | /// </summary> |
| | | public string CurrentCurtainMode = ""; |
| | | |
| | | /// <summary> |
| | | /// 当前房间ID |
| | | /// </summary> |
| | | public string RoomId = ""; |
| | | |
| | | /// <summary> |
| | | /// 当前选中的场景ID |
| | | /// </summary> |
| | | public string curSelectSceneID = ""; |
| | | |
| | | /// <summary> |
| | | /// 本地楼层房间绑定列表 |
| | | /// </summary> |
| | | public Dictionary<int, FloorRoomBindObj> FloorRoomBindObjList = new Dictionary<int, FloorRoomBindObj> { }; |
| | | /// <summary> |
| | | /// 绑定的楼层房间信息 |
| | | /// </summary> |
| | |
| | | // <summary> |
| | | /// 按键中被绑定的目标列表 |
| | | /// </summary> |
| | | public System.Collections.Generic.List<BindListResponseObj> bindList = new System.Collections.Generic.List<BindListResponseObj> { }; |
| | | |
| | | /// <summary> |
| | | /// 按键支持的私有模式列表 |
| | | /// </summary> |
| | | public System.Collections.Generic.Dictionary<int, string> priDeviceModeFunList = new System.Collections.Generic.Dictionary<int, string> { };
|
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public List<BindListResponseObj> bindList = new List<BindListResponseObj>(); |
| | | |
| | | /// <summary> |
| | | /// 私有功能类 |
| | |
| | | |
| | | 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) |
| | | { |
| | |
| | | |
| | | 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 PanelPrivateFunctionsResponseAllInfo { errorMessageBase = "网关返回的数据为空" }; |
| | | } |
| | | else |
| | | { |
| | | if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) |
| | | if (clientDataPassthroughResponseData?.PassData != null) |
| | | { |
| | | var data = gatewayTemp.clientDataPassthroughResponseData.PassData; |
| | | var data = clientDataPassthroughResponseData.PassData; |
| | | |
| | | if (data.Length > 12) |
| | | { |
| | |
| | | } |
| | | break; |
| | | } |
| | | panelPrivateFunctionsResponseInfo = tempD; |
| | | result = new PanelPrivateFunctionsResponseAllInfo { panelPrivateFunctionsResponseInfo = tempD }; |
| | | System.Console.WriteLine($"UI收到通知后的主题_command:0003_{topic}"); |
| | | } |
| | |
| | | /// PIR配置参数回复 |
| | | /// </summary> |
| | | [System.Serializable] |
| | | public class PanelPrivateFunctionsResponseAllInfo |
| | | public class PanelPrivateFunctionsResponseAllInfo:ErrorResponCommon |
| | | { |
| | | /// <summary> |
| | | /// 错误信息 |
| | | /// </summary> |
| | | public string errorMessageBase; |
| | | /// <summary> |
| | | /// 网关信息错误反馈 |
| | | /// <para>当网关接收到客户端信息后,出现以下异常情况将反馈错误。</para> |
| | | /// </summary> |
| | | public ErrorResponData errorResponData; |
| | | /// <summary> |
| | | /// 光感等级个数(Lux能力) |
| | | /// <para>有几个等级就显示几个刻度</para> |
| | |
| | | /// <summary> |
| | | /// 配置参数回复 |
| | | /// </summary> |
| | | public PanelPrivateFunctionsResponseInfo panelPrivateFunctionsResponseInfo; |
| | | [System.Serializable] |
| | | public class PanelPrivateFunctionsResponseInfo |
| | | { |
| | |
| | | |
| | | 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) |
| | | { |
| | |
| | | |
| | | 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 ResponseAllData { 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(); |
| | |
| | | string dataSerialNum = "01"; |
| | | string addDataLength = "03"; |
| | | string kStatus = ""; |
| | | string kNum = ""; |
| | | int attributeData = 0; |
| | | |
| | | try |
| | |
| | | #endregion |
| | | |
| | | #region 配置按键指示灯颜色. |
| | | ///<summary > |
| | | ///配置按键指示灯颜色 |
| | | /// </summary> |
| | | public async System.Threading.Tasks.Task<ResponseAllData> SetPanelColorInfoAsync(KeyColorData keyColorData, KeyNumStatus keyNumStatus) |
| | | { |
| | | 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; |
| | | if (data.Length == 16) |
| | | { |
| | | var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); |
| | | if (command == "0002") |
| | | { |
| | | var tempD = new ResponseData(); |
| | | tempD.command = data[12].ToString() + data[13].ToString() + data[10].ToString() + data[11].ToString(); |
| | | tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16); |
| | | if (tempD.command == "0401") |
| | | { |
| | | result = new ResponseAllData { responseData = tempD }; |
| | | DebugPrintLog($"UI收到通知后的主题_command:0401_{ topic}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | Gateway.Actions += action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString()); |
| | | |
| | | try |
| | | { |
| | | var passData = SetPanelColorData(keyColorData, keyNumStatus); |
| | | var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; |
| | | var data = new JObject { { "PassData", passData } }; |
| | | jObject.Add("Data", data);
|
| | | 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 > WaitReceiveDataTime) |
| | | { |
| | | result = new ResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |
| | | Gateway.Actions -= action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString()); |
| | | |
| | | return result; |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 绑定设备信息,网关反馈信息 |
| | |
| | | public KeyColorData keyColorData; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 配置按键指示灯颜色数据 |
| | | /// <para>发配置按键指示灯颜色命令时,此时为发送到网关的透传数据</para> |
| | | /// </summary> |
| | | /// <returns>The passthorugh data.</returns> |
| | | /// <param name="keyColorData">Key color data.</param> |
| | | /// <param name="keyNum">Key number.</param> |
| | | string SetPanelColorData(KeyColorData keyColorData, KeyNumStatus keyNumStatus) |
| | | { |
| | | string data = ""; |
| | | string dataLength = "0c"; |
| | | string dataComand1 = "01"; |
| | | string dataComand2 = "04"; |
| | | string dataSerialNum = "01"; |
| | | string addDataLength = "08"; |
| | | int attributeData = 0; |
| | | |
| | | try |
| | | { |
| | | for (int i = 1; i <= 16; i++) |
| | | { |
| | | Type type = keyNumStatus.GetType(); |
| | | var obj = type.InvokeMember("Key" + i, System.Reflection.BindingFlags.GetField, null, keyNumStatus, null); |
| | | int value0 = 0; |
| | | if (Convert.ToBoolean(obj) == true)
|
| | | {
|
| | | value0 = 1; |
| | | } |
| | | int v = (int)Math.Pow(2, i - 1); |
| | | attributeData += value0 * v; |
| | | }
|
| | |
|
| | | string td = attributeData.ToString("X4"); |
| | | char[] td1 = td.ToCharArray(); |
| | | string tempAttributeData = string.Concat(td1[2].ToString(), td1[3].ToString(), td1[0].ToString(), td1[1].ToString()); |
| | | string temp = ""; |
| | | var tempColor1 = keyColorData.OpenColorR.ToString(); |
| | | var sbString1 = new System.Text.StringBuilder(); |
| | | switch (tempColor1.Length) |
| | | { |
| | | case 1: |
| | | temp = "0" + tempColor1; |
| | | break; |
| | | case 2: |
| | | temp = tempColor1; |
| | | break; |
| | | } |
| | | sbString1.Append(temp.ToUpper()); |
| | | |
| | | var tempColor2 = keyColorData.OpenColorG.ToString(); |
| | | var sbString2 = new System.Text.StringBuilder(); |
| | | switch (tempColor2.Length) |
| | | { |
| | | case 1: |
| | | temp = "0" + tempColor2; |
| | | break; |
| | | case 2: |
| | | temp = tempColor2; |
| | | break; |
| | | } |
| | | sbString2.Append(temp.ToUpper()); |
| | | |
| | | var tempColor3 = keyColorData.OpenColorB.ToString(); |
| | | var sbString3 = new System.Text.StringBuilder(); |
| | | switch (tempColor3.Length) |
| | | { |
| | | case 1: |
| | | temp = "0" + tempColor3; |
| | | break; |
| | | case 2: |
| | | temp = tempColor3; |
| | | break; |
| | | } |
| | | sbString3.Append(temp.ToUpper()); |
| | | |
| | | var tempColor4 = keyColorData.CloseColorR.ToString(); |
| | | var sbString4 = new System.Text.StringBuilder(); |
| | | switch (tempColor3.Length) |
| | | { |
| | | case 1: |
| | | temp = "0" + tempColor4; |
| | | break; |
| | | case 2: |
| | | temp = tempColor4; |
| | | break; |
| | | } |
| | | sbString4.Append(temp.ToUpper()); |
| | | |
| | | var tempColor5 = keyColorData.CloseColorG.ToString(); |
| | | var sbString5 = new System.Text.StringBuilder(); |
| | | switch (tempColor5.Length) |
| | | { |
| | | case 1: |
| | | temp = "0" + tempColor5; |
| | | break; |
| | | case 2: |
| | | temp = tempColor5; |
| | | break; |
| | | } |
| | | sbString5.Append(temp.ToUpper()); |
| | | |
| | | var tempColor6 = keyColorData.CloseColorB.ToString(); |
| | | var sbString6 = new System.Text.StringBuilder(); |
| | | switch (tempColor6.Length) |
| | | { |
| | | case 1: |
| | | temp = "0" + tempColor6; |
| | | break; |
| | | case 2: |
| | | temp = tempColor6; |
| | | break; |
| | | } |
| | | sbString6.Append(temp.ToUpper()); |
| | | |
| | | if (keyColorData != null) |
| | | { |
| | | data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + |
| | | tempAttributeData + sbString1 + sbString2 + sbString3 + |
| | | sbString4 + sbString5 + sbString6; |
| | | } |
| | | } |
| | | catch { }; |
| | | |
| | | return data; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 按键指示灯颜色信息 |
| | | /// </summary> |
| | | public KeyColorData keyColorData; |
| | | // <summary> |
| | | /// 按键指示灯颜色信息 |
| | | /// </summary> |
| | |
| | | } |
| | | #endregion |
| | | |
| | | #region 配置按键指示灯面板亮度属性. |
| | | ///<summary > |
| | | ///配置按键指示灯面板亮度属性 |
| | | /// <para>directionsLevel:指示灯亮度 0-100(这个是点击后的值)</para> |
| | | /// <para>backlightLevel:背光灯亮度 0-100(这个是点击前的值)</para> |
| | | /// </summary> |
| | | public async System.Threading.Tasks.Task<ResponseAllData> SetKeyLevelAsync(int directionsLevel, int backlightLevel) |
| | | { |
| | | 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; |
| | | if (data.Length == 16) |
| | | { |
| | | var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); |
| | | if (command == "0002") |
| | | { |
| | | var tempD = new ResponseData(); |
| | | tempD.command = data[12].ToString() + data[13].ToString() + data[10].ToString() + data[11].ToString(); |
| | | tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16); |
| | | if (tempD.command == "0402") |
| | | { |
| | | result = new ResponseAllData { responseData = tempD }; |
| | | DebugPrintLog($"UI收到通知后的主题_command:0402_{ topic}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | Gateway.Actions += action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString()); |
| | | |
| | | try |
| | | { |
| | | var passData = SetPanelLevelData(directionsLevel, backlightLevel); |
| | | 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 > WaitReceiveDataTime) |
| | | { |
| | | result = new ResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |
| | | Gateway.Actions -= action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString()); |
| | | |
| | | return result; |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 控制按键指示灯 |
| | | /// </summary> |
| | | string SetPanelLevelData(int level1, int level2) |
| | | { |
| | | string data = ""; |
| | | string dataLength = "06"; |
| | | string dataComand1 = "02"; |
| | | string dataComand2 = "04"; |
| | | string dataSerialNum = "01"; |
| | | string addDataLength = "02"; |
| | | string l1 = ""; |
| | | string l2 = ""; |
| | | try |
| | | { |
| | | var sbString1 = new System.Text.StringBuilder(); |
| | | var sbString2 = new System.Text.StringBuilder(); |
| | | string temp1 = Convert.ToString(level1, 16); |
| | | string temp2 = Convert.ToString(level2, 16); |
| | | |
| | | switch (temp1.Length) |
| | | { |
| | | case 1: |
| | | l1 = "0" + temp1; |
| | | break; |
| | | case 2: |
| | | l1 = temp1; |
| | | break; |
| | | } |
| | | switch (temp2.Length) |
| | | { |
| | | case 1: |
| | | l2 = "0" + temp2; |
| | | break; |
| | | case 2: |
| | | l2 = temp2; |
| | | break; |
| | | } |
| | | sbString1.Append(l1.ToString().ToUpper()); |
| | | sbString2.Append(l2.ToString().ToUpper()); |
| | | data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + |
| | | sbString1 + sbString2; |
| | | } |
| | | catch { }; |
| | | |
| | | return data; |
| | | } |
| | | #endregion |
| | | |
| | | #region 配置按键指示灯面板节能模式. |
| | | ///<summary > |
| | | /// 配置按键指示灯面板节能模式 |
| | | /// <para>modeEnable:节能模式使能</para> |
| | | /// <para>modeTime:无操作进入节能模式时间 0-ffff</para> |
| | | /// <para>节能模式亮度:0-100</para> |
| | | /// </summary> |
| | | public async System.Threading.Tasks.Task<ResponseAllData> SetKeyModeAsync(bool modeEnable, int modeTime, int level) |
| | | { |
| | | 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; |
| | | if (data.Length == 16) |
| | | { |
| | | var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); |
| | | if (command == "0002") |
| | | { |
| | | var tempD = new ResponseData(); |
| | | tempD.command = data[12].ToString() + data[13].ToString() + data[10].ToString() + data[11].ToString(); |
| | | tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16); |
| | | if (tempD.command == "0403") |
| | | { |
| | | result = new ResponseAllData { responseData = tempD }; |
| | | System.Console.WriteLine($"UI收到通知后的主题_command:0403_{ topic}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | Gateway.Actions += action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString()); |
| | | |
| | | try |
| | | { |
| | | var passData = SetPanelModeModeData(modeEnable, modeTime, level); |
| | | var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; |
| | | var data = new JObject { { "PassData", passData } }; |
| | | jObject.Add("Data", data);
|
| | | 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 > WaitReceiveDataTime) |
| | | { |
| | | result = new ResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |
| | | Gateway.Actions -= action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString()); |
| | | |
| | | return result; |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 配置按键指示灯面板节能模式 |
| | | /// </summary> |
| | | string SetPanelModeModeData(bool modeEnable, int modeTime, int modelevel) |
| | | { |
| | | string data = ""; |
| | | string dataLength = "08"; |
| | | string dataComand1 = "03"; |
| | | string dataComand2 = "04"; |
| | | string dataSerialNum = "01"; |
| | | string addDataLength = "04"; |
| | | string mode = ""; |
| | | string time = ""; |
| | | string level = "";
|
| | | try |
| | | { |
| | | if (modeEnable) |
| | | { |
| | | mode = "01"; |
| | | } |
| | | else |
| | | { |
| | | mode = "00"; |
| | | } |
| | | |
| | | if (modeTime == -1) |
| | | { |
| | | //当节能模式没有给时间,默认给60秒 |
| | | modeTime = 60; |
| | | } |
| | | |
| | | var tempBytes = new byte[2]; |
| | | for (int i = 0; i < 2; i++) |
| | | { |
| | | tempBytes[i] = (byte)(modeTime >> (i * 8) & 0xff); |
| | | } |
| | | var time1 = Convert.ToString(tempBytes[0], 16); |
| | | var time2 = Convert.ToString(tempBytes[1], 16); |
| | | if (time1.Length == 1) |
| | | { |
| | | time1 = "0" + time1; |
| | | } |
| | | if (time2.Length == 1) |
| | | { |
| | | time2 = "0" + time2; |
| | | } |
| | | |
| | | time = (time1 + time2).ToUpper(); |
| | | |
| | | var sbString2 = new System.Text.StringBuilder(); |
| | | string temp2 = Convert.ToString(modelevel, 16); |
| | | switch (temp2.Length) |
| | | { |
| | | case 1: |
| | | level = "0" + temp2; |
| | | break; |
| | | case 2: |
| | | level = temp2; |
| | | break; |
| | | } |
| | |
|
| | | sbString2.Append(level.ToUpper()); |
| | | data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + |
| | | mode + time + sbString2; |
| | | } |
| | | catch { }; |
| | | |
| | | return data; |
| | | } |
| | | #endregion |
| | | |
| | | #region 配置接近传感 |
| | | ///<summary > |
| | | /// 配置接近传感 |
| | |
| | | |
| | | 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) |
| | | { |
| | |
| | | |
| | | 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 ResponseAllData { 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(); |
| | |
| | | #endregion |
| | | |
| | | #region 获取按键指示灯开关颜色. |
| | | ///<summary > |
| | | ///获取按键指示灯开关颜色. |
| | | /// </summary> |
| | | public async System.Threading.Tasks.Task<KeyColorDataResponseAllData> GetPanelColorInfoAsync(KeyNum keyNum) |
| | | { |
| | | KeyColorDataResponseAllData result = null; |
| | | if (Gateway == null) |
| | | { |
| | | result = new KeyColorDataResponseAllData { 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 KeyColorDataResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; |
| | | } |
| | | |
| | | else |
| | | { |
| | | result = new KeyColorDataResponseAllData { 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 KeyColorDataResponseAllData { errorMessageBase = "网关返回的数据为空" }; |
| | | } |
| | | else |
| | | { |
| | | if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) |
| | | { |
| | | var data = gatewayTemp.clientDataPassthroughResponseData.PassData; |
| | | if (data.Length == 24) |
| | | { |
| | | var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); |
| | | if (command == "0405") |
| | | { |
| | | var key1 = data[10] + data[11]; |
| | | var key = data[10].ToString() + data[11].ToString(); |
| | | var tempR = new KeyColorData(); |
| | | tempR.OpenColorR = data[12].ToString() + data[13].ToString(); ; |
| | | tempR.OpenColorG = data[14].ToString() + data[15].ToString(); ; |
| | | tempR.OpenColorB = data[16].ToString() + data[17].ToString(); ; |
| | | tempR.CloseColorR = data[18].ToString() + data[19].ToString(); ; |
| | | tempR.CloseColorG = data[20].ToString() + data[21].ToString(); ; |
| | | tempR.CloseColorB = data[22].ToString() + data[23].ToString(); ; |
| | | |
| | | switch (key) |
| | | { |
| | | case "01": |
| | | tempR.keyNum = KeyNum.Key1; |
| | | break; |
| | | case "02": |
| | | tempR.keyNum = KeyNum.Key2; |
| | | break; |
| | | case "03": |
| | | tempR.keyNum = KeyNum.Key3; |
| | | break; |
| | | case "04": |
| | | tempR.keyNum = KeyNum.Key4; |
| | | break; |
| | | case "05": |
| | | tempR.keyNum = KeyNum.Key5; |
| | | break; |
| | | case "06": |
| | | tempR.keyNum = KeyNum.Key6; |
| | | break; |
| | | case "07": |
| | | tempR.keyNum = KeyNum.Key7; |
| | | break; |
| | | case "08": |
| | | tempR.keyNum = KeyNum.Key8; |
| | | break; |
| | | case "09": |
| | | tempR.keyNum = KeyNum.Key9; |
| | | break; |
| | | case "0a": |
| | | tempR.keyNum = KeyNum.Key10; |
| | | break; |
| | | case "0b": |
| | | tempR.keyNum = KeyNum.Key11; |
| | | break; |
| | | case "0c": |
| | | tempR.keyNum = KeyNum.Key12; |
| | | break; |
| | | case "0d": |
| | | tempR.keyNum = KeyNum.Key13; |
| | | break; |
| | | case "0e": |
| | | tempR.keyNum = KeyNum.Key14; |
| | | break; |
| | | case "0f": |
| | | tempR.keyNum = KeyNum.Key15; |
| | | break; |
| | | } |
| | | keyColorData = tempR; |
| | | result = new KeyColorDataResponseAllData { keyColorData = tempR }; |
| | | System.Console.WriteLine($"UI收到通知后的主题_command:0404_{ topic}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | Gateway.Actions += action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString()); |
| | | |
| | | try |
| | | { |
| | | var passData = GetkeyColorData(keyNum); |
| | | 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 > WaitReceiveDataTime) |
| | | { |
| | | result = new KeyColorDataResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |
| | | Gateway.Actions -= action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString()); |
| | | |
| | | return result; |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取按键指示灯开关颜色 |
| | | /// </summary> |
| | | string GetkeyColorData(KeyNum keyNum) |
| | | { |
| | | string data = ""; |
| | | string dataLength = "05"; |
| | | string dataComand1 = "04"; |
| | | string dataComand2 = "04"; |
| | | string dataSerialNum = "01"; |
| | | string addDataLength = "01"; |
| | | string kNum = ""; |
| | | |
| | | try |
| | | { |
| | | switch (keyNum) |
| | | { |
| | | case KeyNum.Key1: |
| | | kNum = "01"; |
| | | break; |
| | | case KeyNum.Key2: |
| | | kNum = "02"; |
| | | break; |
| | | case KeyNum.Key3: |
| | | kNum = "03"; |
| | | break; |
| | | case KeyNum.Key4: |
| | | kNum = "04"; |
| | | break; |
| | | case KeyNum.Key5: |
| | | kNum = "05"; |
| | | break; |
| | | case KeyNum.Key6: |
| | | kNum = "06"; |
| | | break; |
| | | case KeyNum.Key7: |
| | | kNum = "07"; |
| | | break; |
| | | case KeyNum.Key8: |
| | | kNum = "08"; |
| | | break; |
| | | case KeyNum.Key9: |
| | | kNum = "09"; |
| | | break; |
| | | case KeyNum.Key10: |
| | | kNum = "0A"; |
| | | break; |
| | | case KeyNum.Key11: |
| | | kNum = "0B"; |
| | | break; |
| | | case KeyNum.Key12: |
| | | kNum = "0C"; |
| | | break; |
| | | case KeyNum.Key13: |
| | | kNum = "0D"; |
| | | break; |
| | | case KeyNum.Key14: |
| | | kNum = "0E"; |
| | | break; |
| | | case KeyNum.Key15: |
| | | kNum = "0F"; |
| | | break; |
| | | case KeyNum.Key16: |
| | | kNum = "10"; |
| | | break; |
| | | } |
| | | |
| | | data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + kNum; |
| | | } |
| | | catch { }; |
| | | |
| | | return data; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 按键指示灯颜色信息对应顺序号(睡眠组号) |
| | |
| | | #endregion |
| | | |
| | | #region 获取按键指示灯面板开关亮度配置. |
| | | ///<summary > |
| | | ///获取按键指示灯面板开关亮度配置 |
| | | /// </summary> |
| | | public async System.Threading.Tasks.Task<PanelSwitchLevelInfo> GetPanelSwitchLevelAsync(string reserve = "01") |
| | | { |
| | | PanelSwitchLevelInfo result = null; |
| | | if (Gateway == null) |
| | | { |
| | | result = new PanelSwitchLevelInfo { 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 PanelSwitchLevelInfo { errorMessageBase = "网关错误回复,且数据是空" }; |
| | | } |
| | | |
| | | else |
| | | { |
| | | result = new PanelSwitchLevelInfo { 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 PanelSwitchLevelInfo { errorMessageBase = "网关返回的数据为空" }; |
| | | } |
| | | else |
| | | { |
| | | if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) |
| | | { |
| | | var data = gatewayTemp.clientDataPassthroughResponseData.PassData; |
| | | if (data.Length == 14) |
| | | { |
| | | var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); |
| | | if (command == "0407") |
| | | { |
| | | var level1 = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16); |
| | | var level2 = Convert.ToInt32(data[12].ToString() + data[13].ToString(), 16); |
| | | panelDirectionsLevel = level1; |
| | | panelBacklightLevel = level2; |
| | | result = new PanelSwitchLevelInfo { panelDirectionsLevel = level1, panelBacklightLevel = level2 }; |
| | | System.Console.WriteLine($"UI收到通知后的主题_command:0406_{ topic}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | Gateway.Actions += action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString()); |
| | | |
| | | try |
| | | { |
| | | var passData = SendPanelSwitchLevelData(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 < 9000)//WaitReceiveDataTime) |
| | | { |
| | | await System.Threading.Tasks.Task.Delay(10); |
| | | if (result != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) |
| | | { |
| | | result = new PanelSwitchLevelInfo { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |
| | | Gateway.Actions -= action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString()); |
| | | |
| | | return result; |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取按键指示灯面板开关亮度配置数据 |
| | | /// <para>发配置按键指示灯颜色命令时,此时为发送到网关的透传数据</para> |
| | | /// </summary> |
| | | string SendPanelSwitchLevelData(string reserve) |
| | | { |
| | | string data = ""; |
| | | string dataLength = "05"; |
| | | string dataComand1 = "06"; |
| | | string dataComand2 = "04"; |
| | | string dataSerialNum = "01"; |
| | | string addDataLength = "01"; |
| | | string reserveData = reserve; |
| | | |
| | | try |
| | | { |
| | | data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + |
| | | reserveData; |
| | | } |
| | | catch { }; |
| | | |
| | | return data; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 按键指示灯面板开关亮度配置回复 |
| | |
| | | #endregion |
| | | |
| | | #region 获取按键节能模式配置状态. |
| | | ///<summary > |
| | | ///获取按键节能模式配置状态 |
| | | /// </summary> |
| | | public async System.Threading.Tasks.Task<PanelSwitchLevelResponInfo> GetPanelSaveEnergyModeAsync(string reserve = "01") |
| | | { |
| | | PanelSwitchLevelResponInfo result = null; |
| | | if (Gateway == null) |
| | | { |
| | | result = new PanelSwitchLevelResponInfo { 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 PanelSwitchLevelResponInfo { errorMessageBase = "网关错误回复,且数据是空" }; |
| | | } |
| | | |
| | | else |
| | | { |
| | | result = new PanelSwitchLevelResponInfo { 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 PanelSwitchLevelResponInfo { errorMessageBase = "网关返回的数据为空" }; |
| | | } |
| | | else |
| | | { |
| | | if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) |
| | | { |
| | | var data = gatewayTemp.clientDataPassthroughResponseData.PassData; |
| | | if (data.Length == 18) |
| | | { |
| | | var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); |
| | | if (command == "0409") |
| | | { |
| | | var tempR = new PanelSaveEnergyModeInfo(); |
| | | if (data[10].ToString() + data[11].ToString() == "01") |
| | | { |
| | | tempR.enable = true; |
| | | } |
| | | else |
| | | { |
| | | tempR.enable = false; |
| | | } |
| | | tempR.time = Convert.ToInt32(data[14].ToString() + data[15].ToString() + data[12].ToString() + data[13].ToString(), 16); |
| | | tempR.level = Convert.ToInt32(data[16].ToString() + data[17].ToString(), 16); |
| | | panelSaveEnergyModeInfo = tempR; |
| | | result = new PanelSwitchLevelResponInfo { panelSaveEnergyModeInfo = tempR }; |
| | | System.Console.WriteLine($"UI收到通知后的主题_command:0408_{ topic}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | Gateway.Actions += action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
|
| | |
|
| | | try |
| | | { |
| | | var passData = SendPanelSaveEnergyModeData(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 > 9000)// WaitReceiveDataTime) |
| | | { |
| | | result = new PanelSwitchLevelResponInfo { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |
| | | Gateway.Actions -= action; |
| | | System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString()); |
| | | |
| | | return result; |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取按键节能模式配置状态数据 |
| | | /// </summary> |
| | | string SendPanelSaveEnergyModeData(string reserve) |
| | | { |
| | | string data = ""; |
| | | string dataLength = "05"; |
| | | string dataComand1 = "08"; |
| | | string dataComand2 = "04"; |
| | | string dataSerialNum = "01"; |
| | | string addDataLength = "01"; |
| | | string reserveData = reserve; |
| | | |
| | | try |
| | | { |
| | | data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + |
| | | reserveData; |
| | | } |
| | | catch { }; |
| | | |
| | | return data; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取按键节能模式配置状态数据回复 |
| | |
| | | public PanelSaveEnergyModeInfo panelSaveEnergyModeInfo; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 按键节能模式信息 |
| | | /// </summary> |
| | | public PanelSaveEnergyModeInfo panelSaveEnergyModeInfo; |
| | | /// <summary> |
| | | /// 获取按键节能模式配置状态数据 |
| | | /// </summary> |
| | |
| | | |
| | | 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) |
| | | { |
| | |
| | | |
| | | 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 PanelProximitySensorResponInfo { 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(); |
| | |
| | | } |
| | | tempR.sensorDistance = Convert.ToInt32(data[14].ToString() + data[15].ToString() + data[12].ToString() + data[13].ToString(), 16); |
| | | tempR.sensorDelayTime = Convert.ToInt32(data[18].ToString() + data[19].ToString() + data[16].ToString() + data[17].ToString(), 16); |
| | | panelProximitySensorInfo = tempR; |
| | | result = new PanelProximitySensorResponInfo { panelProximitySensorInfo = tempR }; |
| | | System.Console.WriteLine($"UI收到通知后的主题_command:0408_{ topic}"); |
| | | } |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取接近传感配置 |
| | | /// </summary> |
| | | public PanelProximitySensorInfo panelProximitySensorInfo; |
| | | /// <summary> |
| | | /// 获取接近传感配置数据 |
| | | /// </summary> |
| | | [System.Serializable] |
| | |
| | |
|
| | | // 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)
|
| | | // {
|
| | |
| | | // }
|
| | | // 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 PanelSleepGroupResponseAllData { errorMessageBase = "网关返回的数据为空" };
|
| | | // }
|
| | | // else
|
| | | // {
|
| | | // if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
|
| | | // if (clientDataPassthroughResponseData?.PassData != null)
|
| | | // {
|
| | | // var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
|
| | | // var data = clientDataPassthroughResponseData.PassData;
|
| | | // if (data.Length == 14)
|
| | | // {
|
| | | // var tempR = new PanelSleepGroupResponseData();
|
| | |
| | | #endregion |
| | |
|
| | | #region 配置面板功能 |
| | | ///<summary > |
| | | ///配置面板功能 |
| | | ///<para>value:给面板配置的模式</para> |
| | | /// </summary> |
| | | public async System.Threading.Tasks.Task<SetWritableValueResponAllData> ConfigureHdlKeyValueAsync(KeyMode value, int clusterID = 6) |
| | | { |
| | | 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 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) |
| | | { |
| | | d = new SetWritableValueResponAllData { errorMessageBase = "网关错误回复,且数据是空" }; |
| | | } |
| | | else |
| | | { |
| | | d = new SetWritableValueResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; |
| | | } |
| | | } |
| | | |
| | | 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) |
| | | { |
| | | d = new SetWritableValueResponAllData { errorMessageBase = "网关返回的数据为空" }; |
| | | } |
| | | else |
| | | { |
| | | d = new SetWritableValueResponAllData { setWritableValueResponData = tempData }; |
| | | System.Console.WriteLine($"UI收到通知后的主题_{ topic}"); |
| | | } |
| | | } |
| | | }; |
| | | Gateway.Actions += action; |
| | | System.Console.WriteLine("SetWritableValue_Actions 启动" + "_" + System.DateTime.Now.ToString()); |
| | | try |
| | | { |
| | | var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", clusterID }, { "Command", 120 } }; |
| | | var data = new JObject { { "Undivided", 0 }, { "AttributeId", 6533 }, { "AttributeDataType", 33 }, { "AttributeData", (int)value } }; |
| | | 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; |
| | | System.Console.WriteLine("SetWritableValue_Actions 退出" + System.DateTime.Now.ToString()); |
| | | return d; |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 配置面板的功能模式 |
| | |
| | | } |
| | | |
| | | #region 读取面板的配置信息 |
| | | /// <summary> |
| | | /// 读取面板的配置信息 |
| | | /// </summary> |
| | | public async System.Threading.Tasks.Task<PanelConfigureInfoResponAllData> ReadPanelConfigureInfoAsync(params int[] args) |
| | | { |
| | | if (Gateway == null) |
| | | { |
| | | return null; |
| | | } |
| | | return await System.Threading.Tasks.Task.Run(async () => |
| | | { |
| | | PanelConfigureInfoResponAllData d = null; |
| | | Action<string, string> action = (topic, message) => |
| | | { |
| | | var gatewayID = topic.Split('/')[0];//网关返回的网关ID |
| | | var reportStatus = topic.Split('/')[1];//主题为设备上报的主题 |
| | | string addr = "";//上报的设备addr |
| | | string epoint = "";//上报的设备epoint |
| | | string cluID = "";//上报的设备cluID |
| | | string attrId = "";//上报的设备attrId |
| | | if (reportStatus == "DeviceStatusReport") |
| | | { |
| | | addr = topic.Split('/')[2]; |
| | | epoint = topic.Split('/')[3]; |
| | | cluID = topic.Split('/')[4]; |
| | | attrId = topic.Split('/')[5]; |
| | | } |
| | | 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) |
| | | { |
| | | d = new PanelConfigureInfoResponAllData { errorMessageBase = "网关错误回复,且数据是空" }; |
| | | } |
| | | else |
| | | { |
| | | d = new PanelConfigureInfoResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; |
| | | } |
| | | } |
| | | else if (topic == gatewayID + "/" + "DeviceStatusReport" + "/" + addr + "/" + epoint + "/" + cluID + "/" + attrId) |
| | | { |
| | | var deviceID = jobject.Value<int>("Device_ID"); |
| | | var deviceAddr = jobject.Value<string>("DeviceAddr"); |
| | | var tempEpoint = jobject.Value<int>("Epoint"); |
| | | var dataId = jobject.Value<int>("Data_ID"); |
| | | |
| | | var lightSwitch = new Panel { DeviceID = deviceID, DeviceAddr = deviceAddr, DeviceEpoint = tempEpoint, DataID = dataId }; |
| | | lightSwitch.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<Panel.DeviceStatusReportData>(jobject["Data"].ToString()); |
| | | if ((DeviceType)(deviceID) == DeviceType.OnOffSwitch) |
| | | { |
| | | var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<Panel.DeviceStatusReportData>(jobject["Data"].ToString()); |
| | | if (tempData == null) |
| | | { |
| | | d = new PanelConfigureInfoResponAllData { errorMessageBase = "网关错误回复,且数据是空" }; |
| | | } |
| | | else |
| | | { |
| | | d = new PanelConfigureInfoResponAllData { deviceStatusReportData = tempData }; |
| | | System.Console.WriteLine($"UI收到通知后的主题_{ topic}"); |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | Gateway.Actions += action; |
| | | System.Console.WriteLine("GetDeviceStatus_Actions 启动" + System.DateTime.Now.ToString()); |
| | | |
| | | try |
| | | { |
| | | var JObject = new JObject { |
| | | { "DeviceAddr",DeviceAddr }, |
| | | { "Epoint", DeviceEpoint }, |
| | | { "Cluster_ID", (int)Device.Cluster_ID.HdlKey }, |
| | | { "Command", 108 } |
| | | }; |
| | | var attriBute = new JArray{ |
| | | new JObject { |
| | | { "AttriButeId", (int)AttriButeId.HdlKey} |
| | | } |
| | | }; |
| | | var data = new JObject { { "AttriBute", attriBute } }; |
| | | JObject.Add("Data", data);
|
| | | Gateway?.Send(("GetDeviceStatus"), 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 PanelConfigureInfoResponAllData { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |
| | | Gateway.Actions -= action; |
| | | System.Console.WriteLine("GetDeviceStatus_Actions 退出" + System.DateTime.Now.ToString()); |
| | | |
| | | return d; |
| | | }); |
| | | }
|
| | |
|
| | | /// <summary> |
| | | /// 网关恢复出厂设置返回数据 |
| | |
| | | public GetSceneInfo getSceneInfo; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取场景信息 |
| | | /// </summary> |
| | | public GetSceneInfo sceneGetInfo; |
| | | /// <summary> |
| | | /// 获取场景信息 |
| | | /// </summary> |