From 6fa9d69da922c8049f5acfcbb9ce9fd26811024c Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期四, 16 四月 2020 17:10:57 +0800 Subject: [PATCH] 请合并代码 --- ZigbeeApp/Shared/Phone/ZigBee/Device/Panel.cs | 3286 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 3,286 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/Panel.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/Panel.cs new file mode 100755 index 0000000..4de23e1 --- /dev/null +++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/Panel.cs @@ -0,0 +1,3286 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Threading.Tasks; +using MQTTnet; +using Newtonsoft.Json.Linq; +using Shared.Common; + +namespace ZigBee.Device +{ + [System.Serializable] + public class Panel : BindObj + { + public Panel() + { + this.Type = DeviceType.OnOffSwitch; + } + /// <summary> + /// 鎸夐敭妯″紡锛堢鏈夊姛鑳斤級 + /// </summary> + public int panelMode = 65535; + /// <summary> + ///鎸夐敭寮�鐘舵�侊紙鎸囩ず锛変寒搴� + /// </summary> + public int panelDirectionsLevel = -1; + + /// <summary> + /// 鎸夐敭鍏崇姸鎬侊紙鑳屽厜锛変寒搴� + /// </summary> + public int panelBacklightLevel = -1; + + /// <summary> + /// 褰撳墠閫夋嫨妯″紡 + /// </summary> + public string currentKeySelectModeText = ""; + /// <summary> + /// 褰撳墠閫夋嫨鐨勬ゼ灞侷D + /// </summary> + public string currentSelectFloorId = string.Empty; + /// <summary> + /// 褰撳墠寮�鍏虫ā寮� + /// </summary> + public string CurrentSwitchMode = ""; + /// <summary> + /// 褰撳墠灞炴�фā寮� + /// </summary> + public int currentClusterID; + + /// <summary> + /// 褰撳墠璋冨厜妯″紡 + /// </summary> + public string CurrentDimmerMode = ""; + + /// <summary> + /// 褰撳墠閬槼妯″紡 + /// </summary> + public string CurrentCurtainMode = ""; + + /// <summary> + /// 褰撳墠鎴块棿ID + /// </summary> + public string RoomId = ""; + + /// <summary> + /// 褰撳墠閫変腑鐨勫満鏅疘D + /// </summary> + public string curSelectSceneID = ""; + + /// <summary> + /// 鏈湴妤煎眰鎴块棿缁戝畾鍒楄〃 + /// </summary> + public Dictionary<int, FloorRoomBindObj> FloorRoomBindObjList = new Dictionary<int, FloorRoomBindObj> { }; + /// <summary> + /// 缁戝畾鐨勬ゼ灞傛埧闂翠俊鎭� + /// </summary> + [System.Serializable] + public class FloorRoomBindObj + { + /// <summary> + /// 妤煎眰ID + /// </summary> + public string floodID; + /// <summary> + /// 妤煎眰鍚嶇О + /// </summary> + public string floodName; + /// <summary> + /// 鎴块棿ID + /// </summary> + public string roomID; + /// <summary> + /// 鎴块棿鍚嶇О + /// </summary> + public string roomName; + /// <summary> + /// 缁戝畾鐩爣ID + /// </summary> + public string BindID; + /// <summary> + /// 缁戝畾鐩爣鍚嶇О + /// </summary> + public string BindName; + /// <summary> + /// 鍥剧墖璺緞 + /// </summary> + public string IconPath = ""; + + } + + // <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> { }; + + /// <summary> + /// 绉佹湁鍔熻兘绫� + /// <para>256:Key,鎸夐敭绫荤被 </para> + /// <para>768:PIR,PIR绫�</para> + /// <para>1024:Light,鐏被</para> + /// </summary> + public List<int> privateFuncFirstLevelList = new List<int>(); + + /// <summary> + /// 绗簩绾т俊鎭� + /// <para>1:鐗规畩鍔熻兘</para> + /// <para>100:Switch,寮�鍏筹紙鎸夐敭绫伙級</para> + /// <para>200:Dimmer,璋冨厜锛堟寜閿被锛�</para> + /// <para>300:Curtain,绐楀笜锛堟寜閿被锛�</para> + /// <para>0:EnergySavingMode,鑺傝兘妯″紡锛堢伅绫伙級</para> + /// <para>1:SleepMode,鐫$湢妯″紡锛堢伅绫伙級</para> + /// <para>100:WhiteBalance,鐧藉钩琛★紙鐏被锛�</para> + /// <para>101:RGBColor,RGB鎸囩ず鐏鑹诧紙鐏被锛�</para> + /// <para>102:RGBLevel,RGB鎸囩ず鐏寒搴︼紙鐏被锛�</para> + /// </summary> + public List<int> privateFuncSecondLevelList = new List<int>(); + + /// <summary> + /// 绗笁绾т俊鎭� + /// <para>1:鍦烘櫙瑙﹀彂锛堢壒娈婂姛鑳斤級</para> + /// <para>65535:绂佹鍙戦�佸姛鑳斤紙鐗规畩鍔熻兘锛�</para> + /// <para>100:SwitchOpen,寮�鍏冲紑锛堟寜閿被锛�</para> + /// <para>101:SwitchClose,寮�鍏冲叧锛堟寜閿被锛�</para> + /// <para>102:SwitchChange,寮�鍏冲垏鎹紙鎸夐敭绫伙級</para> + /// <para>200:DimmerStepUp,澧炲ぇ璋冨厜锛堟寜閿被锛�</para> + /// <para>201:DimmerStepDown,闄嶄綆璋冨厜锛堟寜閿被锛�</para> + /// <para>202:DimmerStepChange,璋冨厜鍒囨崲锛堟寜閿被锛�</para> + /// <para>300:CurtainOpen,绐楀笜寮�锛堟寜閿被锛�</para> + /// <para>301:CurtainClose,绐楀笜鍏筹紙鎸夐敭绫伙級</para> + /// <para>302:CurtainStop,绐楀笜鍋�</para> + /// <para>303:CurtainUpStop,绐楀笜涓婂崌鍋�</para> + /// <para>304:CurtainDownstop,绐楀笜涓嬮檷鍋�</para> + /// </summary> + public List<int> privateFuncThirdLevelList = new List<int>(); + #region 鑾峰彇闈㈡澘鐨勭鏈変俊鎭�. + /// <summary> + ///鑾峰彇闈㈡澘鐨勭鏈変俊鎭� + /// <para>娉ㄦ剰params浼犲叆鍙傛暟濡備笅锛�</para> + /// <para>鏂规硶1锛氬綋int[]浼犵┖锛岃繑鍥炲�兼槸鈥滈潰鏉垮叿鏈夌殑鍔熻兘澶х被,鍗宠繑鍥炩�滅涓�绾у埆銆�1024:鐏被锛�256:鎸夐敭绫伙紝768:PIR绫�</para> + /// <para>鏂规硶2锛氥�佸綋int[]鍊间负绗竴绾у埆PrivateFuncTypeFir涓�夋嫨涓�涓��</para> + /// <para>杩斿洖鍊兼槸鈥滈潰鎸夐敭鍙戦�佸姛鑳界被鈥濓紝鍗宠繑鍥炩�滅浜岀骇鍒��</para> + /// <para>1:鐗规畩鍔熻兘;100:Switch,寮�鍏筹紙鎸夐敭绫伙級;200:Dimmer,璋冨厜锛堟寜閿被锛�;300:Curtain,绐楀笜锛堟寜閿被锛�</para> + /// <para>0:EnergySavingMode,鑺傝兘妯″紡锛堢伅绫伙級;1:SleepMode,鐫$湢妯″紡锛堢伅绫伙級;100:WhiteBalance,鐧藉钩琛★紙鐏被锛�;101:RGBColor,RGB鎸囩ず鐏鑹诧紙鐏被锛�;102:RGBLevel,RGB鎸囩ず鐏寒搴︼紙鐏被锛�</para> + /// <para>鏂规硶3锛氬綋int[]鍊间负绗竴绾у埆PrivateFuncTypeFir涓�夋嫨涓�涓紝鎺ョ潃鍐嶉�夌浜岀骇鍒玃rivateFunTypeSec涓�夋嫨涓�涓� </para> + /// <para>杩斿洖鍊兼槸鈥滈潰鎸夐敭鍏蜂綋鍔熻兘閰嶇疆鈥濓紝鍗宠繑鍥炩�滅浜岀骇鍒��</para> + /// <para>1:鍦烘櫙瑙﹀彂;65535:绂佹鍙戦�佸姛鑳� + /// <para>100:SwitchOpen,寮�鍏冲紑锛堟寜閿被锛�;101:SwitchClose,寮�鍏冲叧锛堟寜閿被锛�;102:SwitchChange,寮�鍏冲垏鎹紙鎸夐敭绫伙級</para> + /// <para>200:DimmerStepUp,澧炲ぇ璋冨厜锛堟寜閿被锛�;201:DimmerStepDown,闄嶄綆璋冨厜锛堟寜閿被锛�;202:DimmerStepChange,璋冨厜鍒囨崲锛堟寜閿被锛�</para> + /// <para>300:CurtainOpen,绐楀笜寮�锛堟寜閿被锛�;301:CurtainClose,绐楀笜鍏筹紙鎸夐敭绫伙級;302:CurtainStop,绐楀笜鍋�;303:CurtainUpStop,绐楀笜涓婂崌鍋�;304:CurtainDownstop,绐楀笜涓嬮檷鍋�</para> + /// </summary> + public async System.Threading.Tasks.Task<PanelPrivateFunctionsResponseAllInfo> GetPanelPrivateFunctionsAsync(params int[] args) + { + PanelPrivateFunctionsResponseAllInfo result = null; + if (Gateway == null) + { + result = new PanelPrivateFunctionsResponseAllInfo { 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 PanelPrivateFunctionsResponseAllInfo { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + result = new PanelPrivateFunctionsResponseAllInfo { 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 PanelPrivateFunctionsResponseAllInfo { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) + { + var data = gatewayTemp.clientDataPassthroughResponseData.PassData; + + if (data.Length > 12) + { + var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); + if (command == "0004") + { + var tempD = new PanelPrivateFunctionsResponseInfo(); + int len = 2 + 2 * Convert.ToInt32(data[0].ToString() + data[1].ToString(), 16); + int usefulLength = (len - 12); + tempD.funLevel = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16); + int tempCount = 0; + var listData = new List<string>(); + + switch (tempD.funLevel) + { + case 1: + while (tempCount < usefulLength) + { + listData.Add(data[12 + tempCount].ToString()); + tempCount++; + } + for (int j = 0; j < listData.Count / 4; j++) + { + int curIndex = 4 * j; + tempD.privateFuncTypeLevelFirstList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //if (privateFuncFirstLevelList.Contains(256) == false) + //{ + // privateFuncFirstLevelList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + + //} + } + break; + case 2: + while (tempCount < usefulLength) + { + listData.Add(data[12 + tempCount].ToString()); + tempCount++; + } + for (int j = 0; j < listData.Count / 4; j++) + { + int curIndex = 4 * j; + if (j == 0) + { + tempD.privateFuncTypeLevelFirstList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //if (privateFuncFirstLevelList.Contains(256) == false) + //{ + // privateFuncFirstLevelList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //} + } + else + { + tempD.privateFuncTypeLevelSecondList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //if (privateFuncSecondLevelList.Contains(1) == false || privateFuncSecondLevelList.Contains(100) == false || privateFuncSecondLevelList.Contains(200) == false || privateFuncSecondLevelList.Contains(300) == false) + //{ + // privateFuncSecondLevelList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //} + } + } + break; + case 3: + while (tempCount < usefulLength) + { + listData.Add(data[12 + tempCount].ToString()); + tempCount++; + } + for (int j = 0; j < listData.Count / 4; j++) + { + int curIndex = 4 * j; + if (j == 0) + { + tempD.privateFuncTypeLevelFirstList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //if (privateFuncFirstLevelList.Contains(256) == false) + //{ + // privateFuncFirstLevelList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //} + } + else if (j == 1) + { + tempD.privateFuncTypeLevelSecondList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //if (privateFuncSecondLevelList.Contains(1) == false || privateFuncSecondLevelList.Contains(100) == false || privateFuncSecondLevelList.Contains(200) == false || privateFuncSecondLevelList.Contains(300) == false) + //{ + // privateFuncSecondLevelList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //} + } + else + { + tempD.privateFuncTypeLevelThirdList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); + //if (privateFuncThirdLevelList.Contains(1) == false || privateFuncThirdLevelList.Contains(65535) == false || privateFuncThirdLevelList.Contains(100) == false || privateFuncThirdLevelList.Contains(101) == false || privateFuncThirdLevelList.Contains(102) == false || privateFuncThirdLevelList.Contains(200) == false || privateFuncThirdLevelList.Contains(201) == false || privateFuncThirdLevelList.Contains(202) == false || privateFuncThirdLevelList.Contains(300) == false || privateFuncThirdLevelList.Contains(301) == false || privateFuncThirdLevelList.Contains(302) == false || privateFuncThirdLevelList.Contains(303) == false || privateFuncThirdLevelList.Contains(304) == false) + //{ + // privateFuncThirdLevelList.Add(Convert.ToInt32(listData[curIndex + 2] + listData[curIndex + 3].ToString() + listData[curIndex].ToString() + listData[curIndex + 1].ToString(), 16)); ; + //} + } + } + break; + } + panelPrivateFunctionsResponseInfo = tempD; + result = new PanelPrivateFunctionsResponseAllInfo { panelPrivateFunctionsResponseInfo = tempD }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0003_{topic}"); + } + } + } + } + } + }; + + Gateway.Actions += action; + System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); + + try + { + var passData = SendPanelPrivateFunctions(args); + 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 PanelPrivateFunctionsResponseAllInfo { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return result; + }); + } + + /// <summary> + /// PIR閰嶇疆鍙傛暟鍥炲 + /// </summary> + [System.Serializable] + public class PanelPrivateFunctionsResponseAllInfo + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 鍏夋劅绛夌骇涓暟锛圠ux鑳藉姏锛� + /// <para>鏈夊嚑涓瓑绾у氨鏄剧ず鍑犱釜鍒诲害</para> + /// </summary> + public PanelPrivateFunctionsResponseInfo panelPrivateFunctionsResponseInfo; + } + + /// <summary> + /// 閰嶇疆鍙傛暟鍥炲 + /// </summary> + public PanelPrivateFunctionsResponseInfo panelPrivateFunctionsResponseInfo; + [System.Serializable] + public class PanelPrivateFunctionsResponseInfo + { + /// <summary> + /// 鍔熻兘绫荤骇鍒搴� + /// <para>1:绗竴绾у埆</para> + /// <para>2:绗簩绾у埆</para> + /// <para>3:绗笁绾у埆</para> + /// </summary> + public int funLevel = -1; + + /// <summary> + /// 绉佹湁鍔熻兘绫� + /// <para>256:Key,鎸夐敭绫荤被 </para> + /// <para>768:PIR,PIR绫�</para> + /// <para>1024:Light,鐏被</para> + /// </summary> + public List<int> privateFuncTypeLevelFirstList = new List<int>(); + + /// <summary> + /// 绗簩绾т俊鎭� + /// <para>1:鐗规畩鍔熻兘</para> + /// <para>100:Switch,寮�鍏筹紙鎸夐敭绫伙級</para> + /// <para>200:Dimmer,璋冨厜锛堟寜閿被锛�</para> + /// <para>300:Curtain,绐楀笜锛堟寜閿被锛�</para> + /// <para>0:EnergySavingMode,鑺傝兘妯″紡锛堢伅绫伙級</para> + /// <para>1:SleepMode,鐫$湢妯″紡锛堢伅绫伙級</para> + /// <para>100:WhiteBalance,鐧藉钩琛★紙鐏被锛�</para> + /// <para>101:RGBColor,RGB鎸囩ず鐏鑹诧紙鐏被锛�</para> + /// <para>102:RGBLevel,RGB鎸囩ず鐏寒搴︼紙鐏被锛�</para> + /// </summary> + public List<int> privateFuncTypeLevelSecondList = new List<int>(); + + /// <summary> + /// 绗笁绾т俊鎭� + /// <para>1:鍦烘櫙瑙﹀彂锛堢壒娈婂姛鑳斤級</para> + /// <para>65535:绂佹鍙戦�佸姛鑳斤紙鐗规畩鍔熻兘锛�</para> + /// <para>100:SwitchOpen,寮�鍏冲紑锛堟寜閿被锛�</para> + /// <para>101:SwitchClose,寮�鍏冲叧锛堟寜閿被锛�</para> + /// <para>102:SwitchChange,寮�鍏冲垏鎹紙鎸夐敭绫伙級</para> + /// <para>200:DimmerStepUp,澧炲ぇ璋冨厜锛堟寜閿被锛�</para> + /// <para>201:DimmerStepDown,闄嶄綆璋冨厜锛堟寜閿被锛�</para> + /// <para>202:DimmerStepChange,璋冨厜鍒囨崲锛堟寜閿被锛�</para> + /// <para>300:CurtainOpen,绐楀笜寮�锛堟寜閿被锛�</para> + /// <para>301:CurtainClose,绐楀笜鍏筹紙鎸夐敭绫伙級</para> + /// <para>302:CurtainStop,绐楀笜鍋�</para> + /// <para>303:CurtainUpStop,绐楀笜涓婂崌鍋�</para> + /// <para>304:CurtainDownstop,绐楀笜涓嬮檷鍋�</para> + /// </summary> + public List<int> privateFuncTypeLevelThirdList = new List<int>(); + + } + + /// <summary> + ///璇诲彇闈㈡澘鐨勭鏈変俊鎭� + /// <para>娉ㄦ剰params鍙栧�煎涓嬶細</para> + /// <para>1銆佸綋int[]浼犵┖锛岃繑鍥炲�兼槸鈥滈潰鏉垮叿鏈夌殑鍔熻兘澶х被鈥濓細1024:鐏被锛�256:鎸夐敭绫伙紝768:PIR绫�</para> + /// <para>2銆佸綋int[]鍊间负绗竴绾у埆PrivateFuncTypeFir涓�夋嫨涓�涓�傝繑鍥炲�兼槸鈥滈潰鎸夐敭鍙戦�佸姛鑳界被鈥�</para> + /// <para>3銆佸綋int[]鍊间负绗竴绾у埆PrivateFuncTypeFir涓�夋嫨涓�涓紝鎺ョ潃鍐嶉�夌浜岀骇鍒玃rivateFunTypeSec涓�夋嫨涓�涓紝杩斿洖鍊兼槸鈥滈潰鎸夐敭鍏蜂綋鍔熻兘閰嶇疆鈥�</para> + /// </summary> + string SendPanelPrivateFunctions(params int[] args) + { + string data = ""; + string dataLength = ""; + string dataComand1 = "03"; + string dataComand2 = "00"; + string dataSerialNum = "01"; + string addDataLength = ""; + string value0 = ""; + string value1 = ""; + string value2 = ""; + try + { + + if (args.Length != 0) + { + if (Convert.ToString(2 * args.Length + 5, 16).Length == 1) + { + dataLength = string.Concat(0, 2 * args.Length + 5); + } + else + { + dataLength = Convert.ToString(2 * args.Length + 5, 16); + } + + + if (Convert.ToString(2 * args.Length, 16).Length == 1) + { + addDataLength = string.Concat(0, 2 * args.Length + 1); + } + else + { + addDataLength = Convert.ToString(2 * args.Length + 1, 16); + } + + for (int i = 0; i < args.Length; i++) + { + switch (args.Length) + { + case 1: + value0 = "02"; + switch (args[0]) + { + case 1024: + value1 = "0004"; + break; + case 256: + value1 = "0001"; + break; + case 768: + value1 = "0003"; + break; + } + break; + case 2: + value0 = "03"; + switch (args[0]) + { + case 1024: + value1 = "0004"; + switch (args[1]) + { + case 0: + value2 = "0000"; + break; + case 1: + value2 = "0100"; + break; + case 100: + value2 = "6400"; + break; + case 101: + value2 = "6500"; + break; + case 102: + value2 = "6600"; + break; + } + break; + case 256: + value1 = "0001"; + switch (args[1]) + { + case 1: + value2 = "0100"; + break; + case 100: + value2 = "6400"; + break; + case 200: + value2 = "C800"; + break; + case 300: + value2 = "2C01"; + break; + } + break; + case 768: + value1 = "0003"; + break; + } + + break; + } + } + + } + else + { + dataLength = "05"; + addDataLength = "01"; + value0 = "01"; + } + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + value0 + value1 + value2; + } + catch { }; + + return data; + } + + /// <summary> + /// 绉佹湁鍔熻兘绫伙紙绗竴绾у埆锛変俊鎭� + /// </summary> + public class PrivateFuncTypeFir + { + /// <summary> + /// 绉佹湁鍔熻兘绫� + /// <para>256:Key,鎸夐敭绫荤被 </para> + /// <para>768:PIR,PIR绫�</para> + /// <para>1024:Light,鐏被</para> + /// </summary> + public int privateFuncTypeOne; + } + + /// <summary> + /// 绉佹湁鍔熻兘绫伙紙绗簩绾у埆锛変俊鎭� + /// </summary> + public class PrivateFunTypeSec + { + /// <summary> + /// 绗簩绾т俊鎭� + /// <para>100:Switch,寮�鍏筹紙鎸夐敭绫伙級</para> + /// <para>200:Dimmer,璋冨厜锛堟寜閿被锛�</para> + /// <para>300:Curtain,绐楀笜锛堟寜閿被锛�</para> + /// <para>0:EnergySavingMode,鑺傝兘妯″紡锛堢伅绫伙級</para> + /// <para>1:SleepMode,鐫$湢妯″紡锛堢伅绫伙級</para> + /// <para>100:WhiteBalance,鐧藉钩琛★紙鐏被锛�</para> + /// <para>101:RGBColor,RGB鎸囩ず鐏鑹诧紙鐏被锛�</para> + /// <para>102:RGBLevel,RGB鎸囩ず鐏寒搴︼紙鐏被锛�</para> + /// </summary> + public int privateFuncTypeTwo; + } + + /// <summary> + /// 绉佹湁鍔熻兘绫伙紙绗笁绾у埆锛変俊鎭� + /// </summary> + public class PrivateFunTypeThird + { + /// <summary> + /// 绗笁绾т俊鎭� + /// <para>0:EnergySavingModeOpenLevel,鑺傝兘妯″紡寮�浜害锛堢伅绫� 锛�</para> + /// <para>1:EnergySavingModeCloseLevel,鑺傝兘妯″紡鍏充寒搴︼紙鐏被锛�</para> + /// <para>1:鍦烘櫙瑙﹀彂;锛堢壒娈婂姛鑳斤級</para> + /// <para>65535:绂佹鍙戦�佸姛鑳斤紙鐗规畩鍔熻兘锛�</para> + /// <para>100:SwitchOpen,寮�鍏冲紑锛堟寜閿被锛�</para> + /// <para>101:SwitchClose,寮�鍏冲叧锛堟寜閿被锛�</para> + /// <para>102:SwitchChange,寮�鍏冲垏鎹紙鎸夐敭绫伙級</para> + /// <para>200:DimmerStepUp,澧炲ぇ璋冨厜锛堟寜閿被锛�</para> + /// <para>201:DimmerStepDown,闄嶄綆璋冨厜锛堟寜閿被锛�</para> + /// <para>202:DimmerStepChange,璋冨厜鍒囨崲锛堟寜閿被锛�</para> + /// <para>300:CurtainOpen,绐楀笜寮�锛堟寜閿被锛�</para> + /// <para>301:CurtainClose,绐楀笜鍏筹紙鎸夐敭绫伙級</para> + /// <para>302:CurtainStop,绐楀笜鍋�</para> + /// <para>303:CurtainUpStop,绐楀笜涓婂崌鍋�</para> + /// <para>304:CurtainDownstop,绐楀笜涓嬮檷鍋�</para> + /// </summary> + public int privateFuncTypeThird; + } + + /// <summary> + /// 鑾峰彇鎸夐敭闈㈡澘鐨勭涓�绾у埆鍔熻兘鍔熻兘绯�(1024:鐏被锛�256:鎸夐敭绫伙紝768:PIR绫�) + /// </summary> + /// <param name="panel">鎸夐敭闈㈡澘鐨勬煇涓�涓洖璺�</param> + /// <returns></returns> + public async Task<List<int>> GetPanelDeviceFunctionLevel1() + { + var result = await GetPanelPrivateFunctionsAsync(); + if (result == null || result.panelPrivateFunctionsResponseInfo == null) + { + return null; + } + + return result.panelPrivateFunctionsResponseInfo.privateFuncTypeLevelFirstList; + } + + /// <summary> + /// <para>鑾峰彇鎸夐敭闈㈡澘鐨勭浜岀骇鍒姛鑳藉姛鑳界郴(浠ヤ笅涓鸿繑鍥炲��)</para> + /// <para>100:Switch,寮�鍏筹紙鎸夐敭绫伙級</para> + /// <para>200:Dimmer,璋冨厜锛堟寜閿被锛�</para> + /// <para>300:Curtain,绐楀笜锛堟寜閿被锛�</para> + /// <para>0:EnergySavingMode,鑺傝兘妯″紡锛堢伅绫伙級</para> + /// <para>1:SleepMode,鐫$湢妯″紡锛堢伅绫伙級</para> + /// <para>100:WhiteBalance,鐧藉钩琛★紙鐏被锛�</para> + /// <para>101:RGBColor,RGB鎸囩ず鐏鑹诧紙鐏被锛�</para> + /// <para>102:RGBLevel,RGB鎸囩ず鐏寒搴︼紙鐏被锛�</para> + /// </summary> + /// <param name="panel">鎸夐敭闈㈡澘鐨勬煇涓�涓洖璺�</param> + /// <param name="level1">绗竴绾у埆鐨処D(1024:鐏被锛�256:鎸夐敭绫伙紝768:PIR绫�)</param> + /// <returns></returns> + public async Task<List<int>> GetPanelDeviceFunctionLevel2(int level1) + { + var result = await GetPanelPrivateFunctionsAsync(new int[] { level1 }); + if (result == null || result.panelPrivateFunctionsResponseInfo == null) + { + return null; + } + return result.panelPrivateFunctionsResponseInfo.privateFuncTypeLevelSecondList; + } + + /// <summary> + /// 鎸夐敭绫荤涓夌骇鍒涓嬶細 + /// <para>1:鍦烘櫙瑙﹀彂;锛堢壒娈婂姛鑳斤級</para> + /// <para>65535:绂佹鍙戦�佸姛鑳斤紙鐗规畩鍔熻兘锛�</para> + /// <para>100:SwitchOpen,寮�鍏冲紑锛堟寜閿被锛�</para> + /// <para>101:SwitchClose,寮�鍏冲叧锛堟寜閿被锛�</para> + /// <para>102:SwitchChange,寮�鍏冲垏鎹紙鎸夐敭绫伙級</para> + /// <para>200:DimmerStepUp,澧炲ぇ璋冨厜锛堟寜閿被锛�</para> + /// <para>201:DimmerStepDown,闄嶄綆璋冨厜锛堟寜閿被锛�</para> + /// <para>202:DimmerStepChange,璋冨厜鍒囨崲锛堟寜閿被锛�</para> + /// <para>300:CurtainOpen,绐楀笜寮�锛堟寜閿被锛�</para> + /// <para>301:CurtainClose,绐楀笜鍏筹紙鎸夐敭绫伙級</para> + /// <para>302:CurtainStop,绐楀笜鍋�</para> + /// <para>303:CurtainUpStop,绐楀笜涓婂崌鍋�</para> + /// <para>304:CurtainDownstop,绐楀笜涓嬮檷鍋�</para> + /// </summary> + /// <param name="panel">鎸夐敭闈㈡澘鐨勬煇涓�涓洖璺�</param> + /// <param name="level1">绗竴绾у埆鐨処D(1024:鐏被锛�256:鎸夐敭绫伙紝768:PIR绫�)</param> + /// <param name="level2">绗簩绾у埆鐨処D(褰撶涓�绾у埆鏄寜閿被,1:鐗规畩鍔熻兘锛�100:鎸夐敭寮�鍏筹紝200:鎸夐敭璋冨厜锛�300:鎸夐敭绐楀笜)</param> + /// <returns></returns> + public async Task<List<int>> GetPanelDeviceFunctionLevel3(int level1, int level2) + { + var result = await GetPanelPrivateFunctionsAsync(new int[] { level1, level2 }); + if (result == null || result.panelPrivateFunctionsResponseInfo == null) + { + return null; + } + return result.panelPrivateFunctionsResponseInfo.privateFuncTypeLevelThirdList; + } + #endregion + + #region 鎺у埗鎸夐敭鎸囩ず鐏�. + ///<summary > + ///鎺у埗鎸夐敭鎸囩ず鐏� + /// </summary> + public async System.Threading.Tasks.Task<ResponseAllData> ControlKeyAsync(KeyNumStatus keyNum, KeyStatus keyStatus) + { + 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 == "0400") + { + result = new ResponseAllData { responseData = tempD }; + System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0400_{ topic}"); + } + + } + } + } + } + } + }; + + Gateway.Actions += action; + System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); + + try + { + var passData = ControlKeyData(keyNum, keyStatus); + 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> + public enum KeyStatus + { + /// <summary> + /// 鍏� + /// </summary> + close = 0x00, + /// <summary> + /// 寮� + /// </summary> + open = 0x64, + /// <summary> + /// 鏃犳晥 + /// </summary> + inValid = 0xff, + } + + /// <summary> + /// 鎺у埗鎸夐敭鎸囩ず鐏� + /// </summary> + string ControlKeyData(KeyNumStatus keyNumStatus, KeyStatus keyStatus) + { + string data = ""; + string dataLength = "07"; + string dataComand1 = "00"; + string dataComand2 = "04"; + string dataSerialNum = "01"; + string addDataLength = "03"; + string kStatus = ""; + string kNum = ""; + 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()); + + switch (keyStatus) + { + case KeyStatus.close: + kStatus = "00"; + break; + case KeyStatus.open: + kStatus = "64"; + break; + case KeyStatus.inValid: + kStatus = "ff"; + break; + } + + + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + tempAttributeData + kStatus; + } + catch { }; + + return data; + } + #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> + /// 缁戝畾璁惧淇℃伅,缃戝叧鍙嶉淇℃伅 + /// </summary> + [System.Serializable] + public class KeyColorDataResponseAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 鎸夐敭鎸囩ず鐏鑹蹭俊鎭� + /// </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> + [System.Serializable] + public class KeyColorData + { + /// <summary> + /// 鎸囩ず鐏搴旈『搴忓彿 + /// </summary> + public KeyNum keyNum; + /// <summary> + /// 寮�鐘舵�侀鑹睷(0-ff) + /// </summary> + public string OpenColorR; + /// <summary> + /// 寮�鐘舵�侀鑹睪(0-ff) + /// </summary> + public string OpenColorG; + /// <summary> + /// 寮�鐘舵�侀鑹睟(0-ff) + /// </summary> + public string OpenColorB; + /// <summary> + /// 鍏崇姸鎬侀鑹睷(0-ff) + /// </summary> + public string CloseColorR; + /// <summary> + /// 鍏崇姸鎬侀鑹睪(0-ff) + /// </summary> + public string CloseColorG; + /// <summary> + /// 鍏崇姸鎬侀鑹睟(0-ff) + /// </summary> + public string CloseColorB; + } + + /// <summary> + /// 鎸夐敭鎸囩ず鐏鑹蹭俊鎭搴旈『搴忓彿 + /// </summary> + public class KeyNumStatus + { + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key1; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key2; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key3; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key4; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key5; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key6; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key7; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key8; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key9; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key10; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key11; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key12; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key13; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key14; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key15; + /// <summary> + /// false:鍏� + /// true:寮� + /// </summary> + public bool Key16; + } + #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-ff</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 = "07"; + string dataComand1 = "03"; + string dataComand2 = "04"; + string dataSerialNum = "01"; + string addDataLength = "03"; + string mode = ""; + string time = ""; + string level = ""; + try + { + if (modeEnable) + { + mode = "01"; + } + else + { + mode = "00"; + } + var sbString1 = new System.Text.StringBuilder(); + string temp = Convert.ToString(modeTime, 16); + switch (temp.Length) + { + case 1: + time = "0" + temp; + break; + case 2: + time = temp; + break; + } + + 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; + } + + sbString1.Append(time.ToUpper()); + sbString2.Append(level.ToUpper()); + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + mode + sbString1 + sbString2; + } + catch { }; + + return data; + } + #endregion + + #region 閰嶇疆鎺ヨ繎浼犳劅 + ///<summary > + /// 閰嶇疆鎺ヨ繎浼犳劅 + /// <para>sensorEnable:浼犳劅鍣ㄤ娇鑳�</para> + /// </summary> + public async System.Threading.Tasks.Task<ResponseAllData> SetProximitySensor(bool sensorEnable) + { + 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 == "0500") + { + result = new ResponseAllData { responseData = tempD }; + DebugPrintLog($"UI鏀跺埌閫氱煡鍚庣殑涓婚_command:0500_{ topic}"); + } + } + } + } + } + } + }; + + Gateway.Actions += action; + System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); + + try + { + var passData = SetProximitySensorData(sensorEnable); + 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> + /// 閰嶇疆鎺ヨ繎浼犳劅 + /// [璇ユ潯鍗忚鍙﹀2涓弬鏁癠I鍜岃澶囬兘涓嶉渶瑕侊紝璁惧閮藉悓浜嬭姹備紶鎰熷櫒璺濈鍜屼紶鎰熷櫒瑙﹀彂寤惰繜鏃堕棿閮介粯璁ゆ槸FFFF] + /// </summary> + /// <param name="sensorEnable">浼犳劅鍣ㄤ娇鑳� 0-disable 1-enable</param> + /// <returns></returns> + string SetProximitySensorData(bool sensorEnable) + { + string data = ""; + string dataLength = "09"; + string dataComand1 = "00"; + string dataComand2 = "05"; + string dataSerialNum = "01"; + string addDataLength = "05"; + string sEnable = ""; + try + { + if (sensorEnable) + { + sEnable = "01"; + } + else + { + sEnable = "00"; + } + + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + sEnable + "FFFFFFFF"; + } + catch { }; + + return data; + } + #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> + /// 鎸夐敭鎸囩ず鐏鑹蹭俊鎭搴旈『搴忓彿(鐫$湢缁勫彿) + /// </summary> + public enum KeyNum + { + Key1 = 1, + Key2 = 2, + Key3 = 3, + Key4 = 4, + Key5 = 5, + Key6 = 6, + Key7 = 7, + Key8 = 8, + Key9 = 9, + Key10 = 10, + Key11 = 11, + Key12 = 12, + Key13 = 13, + Key14 = 14, + Key15 = 15, + Key16 = 16, + } + #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> + /// 鎸夐敭鎸囩ず鐏潰鏉垮紑鍏充寒搴﹂厤缃洖澶� + /// </summary> + [System.Serializable] + public class PanelSwitchLevelInfo + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + ///鎸夐敭寮�鐘舵�侊紙鎸囩ず锛変寒搴�(杩欎釜鏄偣鍑诲悗鐨勫��) + /// </summary> + public int panelDirectionsLevel = -1; + + /// <summary> + /// 鎸夐敭鍏崇姸鎬侊紙鑳屽厜锛変寒搴�(杩欎釜鏄偣鍑诲墠鐨勫��) + /// </summary> + public int panelBacklightLevel = -1; + } + #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 == 16) + { + 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[12].ToString() + data[13].ToString(), 16); + tempR.level = Convert.ToInt32(data[14].ToString() + data[15].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> + /// 鑾峰彇鎸夐敭鑺傝兘妯″紡閰嶇疆鐘舵�佹暟鎹洖澶� + /// </summary> + [System.Serializable] + public class PanelSwitchLevelResponInfo + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>鑾峰彇鎸夐敭鑺傝兘妯″紡閰嶇疆鐘舵�佹暟鎹�</para> + /// </summary> + public PanelSaveEnergyModeInfo panelSaveEnergyModeInfo; + } + + /// <summary> + /// 鎸夐敭鑺傝兘妯″紡淇℃伅 + /// </summary> + public PanelSaveEnergyModeInfo panelSaveEnergyModeInfo; + /// <summary> + /// 鑾峰彇鎸夐敭鑺傝兘妯″紡閰嶇疆鐘舵�佹暟鎹� + /// </summary> + [System.Serializable] + public class PanelSaveEnergyModeInfo + { + /// <summary> + ///false-disable true-enable + /// </summary> + public bool enable; + /// <summary> + ///鏃犳搷浣滆繘鍏ヨ妭鑳芥ā寮忔椂闂�(0-255 鍗曚綅绉�) + /// </summary> + public int time = -1; + + /// <summary> + /// 鑺傝兘妯″紡浜害(0-100) + /// </summary> + public int level = -1; + } + #endregion + + #region 鑾峰彇鎺ヨ繎浼犳劅閰嶇疆 + ///<summary > + ///鑾峰彇鎺ヨ繎浼犳劅閰嶇疆 + /// </summary> + public async System.Threading.Tasks.Task<PanelProximitySensorResponInfo> GetProximitySensorAsync(string reserve = "01") + { + PanelProximitySensorResponInfo result = null; + if (Gateway == null) + { + result = new PanelProximitySensorResponInfo { 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 PanelProximitySensorResponInfo { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + + else + { + result = new PanelProximitySensorResponInfo { 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 PanelProximitySensorResponInfo { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + } + else + { + if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) + { + var data = gatewayTemp.clientDataPassthroughResponseData.PassData; + if (data.Length == 20) + { + var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); + if (command == "0502") + { + var tempR = new PanelProximitySensorInfo(); + if (data[10].ToString() + data[11].ToString() == "01") + { + tempR.enable = true; + } + else + { + tempR.enable = false; + } + 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}"); + } + } + } + } + } + }; + + Gateway.Actions += action; + System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); + + try + { + var passData = SendProiximitySensorData(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 PanelProximitySensorResponInfo { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + Gateway.Actions -= action; + System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + return result; + }); + } + + /// <summary> + /// 鑾峰彇鎺ヨ繎浼犳劅閰嶇疆鏁版嵁 + /// </summary> + string SendProiximitySensorData(string reserve) + { + string data = ""; + string dataLength = "05"; + string dataComand1 = "01"; + string dataComand2 = "05"; + string dataSerialNum = "01"; + string addDataLength = "01"; + string reserveData = reserve; + + try + { + data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + reserveData; + } + catch { }; + + return data; + } + + /// <summary> + /// 鑾峰彇鎺ヨ繎浼犳劅閰嶇疆鏁版嵁鍥炲 + /// </summary> + [System.Serializable] + public class PanelProximitySensorResponInfo + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// <para>鑾峰彇鎺ヨ繎浼犳劅閰嶇疆鏁版嵁</para> + /// </summary> + public PanelProximitySensorInfo panelProximitySensorInfo; + } + + /// <summary> + /// 鑾峰彇鎺ヨ繎浼犳劅閰嶇疆 + /// </summary> + public PanelProximitySensorInfo panelProximitySensorInfo; + /// <summary> + /// 鑾峰彇鎺ヨ繎浼犳劅閰嶇疆鏁版嵁 + /// </summary> + [System.Serializable] + public class PanelProximitySensorInfo + { + /// <summary> + /// 浼犳劅鍣ㄤ娇鑳� + ///false-disable true-enable + /// </summary> + public bool enable; + + /// <summary> + ///浼犳劅鍣ㄨ窛绂� + /// </summary> + public int sensorDistance = -1; + + /// <summary> + /// 浼犳劅鍣ㄨЕ鍙戝欢杩熸椂闂� + /// </summary> + public int sensorDelayTime = -1; + } + #endregion + + #region 閰嶇疆鎸夐敭鎸囩ず鐏潯鐪犵粍鍒嗭紙鏆傛椂涓嶅仛锛� + ///<summary > + ///鑾峰彇鎸夐敭鎸囩ず鐏潯鐪犵粍 + ///<para>sleepGroup:鐫$湢缁勫彿</para> + /// </summary> + //public async System.Threading.Tasks.Task<PanelSleepGroupResponseAllData> GetPanelSleepGroupAsync(SleepGroup sleepGroup) + //{ + // PanelSleepGroupResponseAllData result = null; + // if (Gateway == null) + // { + // result = new PanelSleepGroupResponseAllData { 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 PanelSleepGroupResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + // } + + // else + // { + // result = new PanelSleepGroupResponseAllData { 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 PanelSleepGroupResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" }; + // } + // else + // { + // if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null) + // { + // var data = gatewayTemp.clientDataPassthroughResponseData.PassData; + // if (data.Length == 14) + // { + // var tempR = new PanelSleepGroupResponseData(); + // tempR.status = int.Parse(data[12].ToString() + data[13].ToString()); + // switch (data[10].ToString() + data[11].ToString()) + // { + // case "01": + // tempR.sleepGroupNum = SleepGroupNum.Group1; + // break; + // case "02": + // tempR.sleepGroupNum = SleepGroupNum.Group2; + // break; + // case "03": + // tempR.sleepGroupNum = SleepGroupNum.Group3; + // break; + // case "04": + // tempR.sleepGroupNum = SleepGroupNum.Group4; + // break; + // case "05": + // tempR.sleepGroupNum = SleepGroupNum.Group5; + // break; + // case "06": + // tempR.sleepGroupNum = SleepGroupNum.Group6; + // break; + // case "07": + // tempR.sleepGroupNum = SleepGroupNum.Group7; + // break; + // case "08": + // tempR.sleepGroupNum = SleepGroupNum.Group8; + // break; + // case "09": + // tempR.sleepGroupNum = SleepGroupNum.Group9; + // break; + // case "0a": + // tempR.sleepGroupNum = SleepGroupNum.Group10; + // break; + // case "0b": + // tempR.sleepGroupNum = SleepGroupNum.Group11; + // break; + // case "0c": + // tempR.sleepGroupNum = SleepGroupNum.Group12; + // break; + // case "0d": + // tempR.sleepGroupNum = SleepGroupNum.Group13; + // break; + // case "0e": + // tempR.sleepGroupNum = SleepGroupNum.Group14; + // break; + // case "0f": + // tempR.sleepGroupNum = SleepGroupNum.Group15; + // break; + // } + // result = new PanelSleepGroupResponseAllData { panelSleepGroupResponseData = tempR }; + // } + // } + // System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}"); + // } + // } + // }; + + // Gateway.Actions += action; + // System.Console.WriteLine("ClientDataPassthrough_Actions 鍚姩" + System.DateTime.Now.ToString()); + + // try + // { + // OpenPassthroughControl(Gateway); + // var passData = SetPanelSleepGroupData(sleepGroup); + // var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; + // var data = new JObject { { "PassData", passData } }; + // jObject.Add("Data", data); + // CurrentGateWayId = Gateway.getGatewayBaseInfo?.gwID; + // 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 PanelSleepGroupResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + // } + // Gateway.Actions -= action; + // System.Console.WriteLine("ClientDataPassthrough_Actions 閫�鍑�" + System.DateTime.Now.ToString()); + + // return result; + // }); + //} + + ///// <summary> + ///// 缁戝畾璁惧淇℃伅,缃戝叧鍙嶉淇℃伅 + ///// </summary> + //public PanelSleepGroupResponseAllData panelSleepGroupResponseAllData; + //[System.Serializable] + //public class PanelSleepGroupResponseAllData + //{ + // /// <summary> + // /// 閿欒淇℃伅 + // /// </summary> + // public string errorMessageBase; + // /// <summary> + // /// 缃戝叧淇℃伅閿欒鍙嶉 + // /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + // /// </summary> + // public ErrorResponData errorResponData; + // /// <summary> + // /// 缁戝畾璁惧淇℃伅 + // /// </summary> + // public PanelSleepGroupResponseData panelSleepGroupResponseData; + //} + + ///// <summary> + ///// 缁戝畾璁惧淇℃伅,缃戝叧鍙嶉淇℃伅 + ///// </summary> + //public PanelSleepGroupResponseData panelSleepGroupResponseData; + //[System.Serializable] + //public class PanelSleepGroupResponseData + //{ + // /// <summary> + // /// 鐫$湢缁勫彿 + // /// </summary> + // public SleepGroupNum sleepGroupNum; + // /// <summary> + // /// 鐘舵�� + // /// <para>0--鎵ц 1鈥斿敜閱�</para> + // /// </summary> + // public int status; + //} + + ///// <summary> + ///// 閰嶇疆鎸夐敭鎸囩ず鐏潯鐪犵粍鍒嗗尯 + ///// </summary> + //string SetPanelSleepGroupData(SleepGroup sleepGroup) + //{ + // string data = ""; + // string dataLength = "06"; + // string dataComand1 = "0a"; + // string dataComand2 = "04"; + // string dataSerialNum = "01"; + // string addDataLength = "02"; + // int attributeData = 0; + + // try + // { + // int bit0 = 0, bit1 = 0, bit2 = 0, bit3 = 0, bit4 = 0, bit5 = 0, bit6 = 0, bit7 = 0, bit8 = 0, bit9 = 0, bit10 = 0, bit11 = 0, bit12 = 0, bit13 = 0, bit14 = 0, bit15 = 0; + // if (sleepGroup != null) + // { + // if (sleepGroup.bit0) + // { + // bit0 = 1; + // } + // if (sleepGroup.bit1) + // { + // bit1 = 1; + // } + // if (sleepGroup.bit2) + // { + // bit2 = 1; + // } + // if (sleepGroup.bit3) + // { + // bit3 = 1; + // } + // if (sleepGroup.bit4) + // { + // bit4 = 1; + // } + // if (sleepGroup.bit5) + // { + // bit5 = 1; + // } + // if (sleepGroup.bit6) + // { + // bit6 = 1; + // } + // if (sleepGroup.bit7) + // { + // bit7 = 1; + // } + // if (sleepGroup.bit8) + // { + // bit8 = 1; + // } + // if (sleepGroup.bit9) + // { + // bit9 = 1; + // } + // if (sleepGroup.bit10) + // { + // bit10 = 1; + // } + // if (sleepGroup.bit11) + // { + // bit11 = 1; + // } + // if (sleepGroup.bit12) + // { + // bit12 = 1; + // } + // if (sleepGroup.bit13) + // { + // bit13 = 1; + // } + // if (sleepGroup.bit14) + // { + // bit14 = 1; + // } + // if (sleepGroup.bit15) + // { + // bit15 = 1; + // } + // attributeData = bit0 * 1 + bit1 * 2 + bit2 * 4 + bit3 * 8 + bit4 * 16 + bit5 * 32 + bit6 * 64 + bit7 * 128 + bit8 * 256 + bit9 * 512 + bit10 * 1024 + bit11 * 2048 + bit12 * 4096 + bit13 * 8192 + bit14 * 16384 + bit15 * 32768; + // } + // string tempAttributeData = attributeData.ToString("X4"); + + // if (sleepGroup != null) + // { + // data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + + // tempAttributeData; + // } + // } + // catch { }; + + // return data; + //} + + ///// <summary> + ///// 鐫$湢缁勫彿锛堝彲浣嶆垨锛� + ///// </summary> + //public class SleepGroup + //{ + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit0; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit1; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit2; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit3; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit4; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit5; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit6; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit7; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit8; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit9; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit10; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit11; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit12; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit13; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit14; + // /// <summary> + // /// false:鍏� + // /// true:寮� + // /// </summary> + // public bool bit15; + //} + + ///// <summary> + ///// 鎵ц鎸夐敭鎸囩ず鐏潯鐪犵粍 + ///// </summary> + //public enum SleepGroupNum + //{ + // Group1 = 1, + // Group2 = 2, + // Group3 = 3, + // Group4 = 4, + // Group5 = 5, + // Group6 = 6, + // Group7 = 7, + // Group8 = 8, + // Group9 = 9, + // Group10 = 10, + // Group11 = 11, + // Group12 = 12, + // Group13 = 13, + // Group14 = 14, + // Group15 = 15, + // Group16 = 16, + //} + #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> + /// 閰嶇疆闈㈡澘鐨勫姛鑳芥ā寮� + /// </summary> + public enum KeyMode + { + /// <summary> + /// 寮�鍏崇被鍨嬧�斺�斿紑. + /// </summary> + Scene_Trigger = 1, + /// <summary> + /// 寮�鍏崇被鍨嬧�斺�斿紑. + /// </summary> + OnOff_On = 100, + /// <summary> + /// 寮�鍏崇被鍨嬧�斺�斿叧. + /// </summary> + OnOff_oFF = 101, + /// <summary> + /// 寮�鍏崇被鍨嬧�斺�斿彇鍙�. + /// </summary> + OnOff_OnOff = 102, + /// <summary> + /// 浜害绫诲瀷鈥斺�旀寜绛夌骇璋冨ぇ. + /// </summary> + Level_Step_Up = 200, + /// <summary> + /// 浜害绫诲瀷鈥斺�旀寜绛夌骇璋冨皬. + /// </summary> + Level_Step_Down = 201, + /// <summary> + /// 浜害绫诲瀷鈥斺�旀寜绛夌骇鍙栧弽. + /// </summary> + Level_Step_Up_Down = 202, + /// <summary> + /// 浜害绫诲瀷鈥斺�斿彇鍙�. + /// </summary> + Level_Up = 203, + /// <summary> + /// 浜害绫诲瀷鈥斺�斿彇鍙�. + /// </summary> + Level_Down = 204, + /// <summary> + /// 浜害绫诲瀷鈥斺�斿彇鍙�. + /// </summary> + Level_Up_Down = 205, + /// <summary> + /// 绐楀笜绫诲瀷鈥斺�斿紑. + /// </summary> + Wcd_Up = 300, + /// <summary> + /// 绐楀笜绫诲瀷鈥斺�斿叧. + /// </summary> + Wcd_Down = 301, + /// <summary> + /// 绐楀笜绫诲瀷鈥斺�斿仠. + /// </summary> + Wcd_Stop = 302, + /// <summary> + /// 绐楀笜绫诲瀷鈥斺�斾笂鍗囧仠姝�. + /// </summary> + Wcd_Up_Stop = 303, + /// <summary> + /// 绐楀笜绫诲瀷鈥斺�斾笅闄嶅仠姝�. + /// </summary> + Wcd_Down_Stop = 304, + /// <summary> + /// 绐楀笜绫诲瀷鈥斺�斾笅闄嶅仠姝�. + /// </summary> + Default = 65535, + } + #endregion + + /// <summary> + ///璇诲彇闈㈡澘鐨勯厤缃俊鎭� + /// </summary> + public void ReadPanelSupportAttribute() + { + ReadAttri(Device.Cluster_ID.HdlKey, AttriButeId.HdlKey); + } + + #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];//缃戝叧杩斿洖鐨勭綉鍏矷D + var reportStatus = topic.Split('/')[1];//涓婚涓鸿澶囦笂鎶ョ殑涓婚 + string addr = "";//涓婃姤鐨勮澶嘺ddr + string epoint = "";//涓婃姤鐨勮澶噀point + string cluID = "";//涓婃姤鐨勮澶嘽luID + string attrId = "";//涓婃姤鐨勮澶嘺ttrId + 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> + /// 缃戝叧鎭㈠鍑哄巶璁剧疆杩斿洖鏁版嵁 + /// </summary> + [System.Serializable] + public class PanelConfigureInfoResponAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + ///<summary > + ///璁惧鏁版嵁 + /// </summary> + public DeviceStatusReportData deviceStatusReportData; + } + #endregion + + #region 鑾峰彇缃戝叧涓殑鍦烘櫙 + /// <summary> + /// 鍙兘鑾峰彇鍦烘櫙淇℃伅锛屾病鏈夊満鏅腑鐨勮澶囦俊鎭� + /// </summary> + /// <returns></rxeturns> + public async System.Threading.Tasks.Task<GetOnlySceneAllData> GetSceneInfoAsync() + { + GetOnlySceneAllData result = null; + if (ZbGateway.MainGateWay == null) + { + result = new GetOnlySceneAllData { errorMessageBase = "娌℃湁涓荤綉鍏�" }; + } + 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 tempResult = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString()); + if (tempResult == null) + { + result = new GetOnlySceneAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + result = new GetOnlySceneAllData { errorResponData = tempResult }; + } + } + + if (topic == gatewayID + "/" + "Scene/GetInfo_Respon") + { + var getSceneInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetSceneInfo>(jobject["Data"].ToString()); + if (getSceneInfo == null) + { + result = new GetOnlySceneAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" }; + } + else + { + result = new GetOnlySceneAllData { getSceneInfo = getSceneInfo }; + } + } + }; + ZbGateway.MainGateWay.Actions += action; + System.Console.WriteLine("Scene/GetInfo_Actions 鍚姩" + System.DateTime.Now.ToString()); + var jobjectData = new JObject { { "Cluster_ID", 0 }, { "Command", 805 } }; + await ZbGateway.MainGateWay.Send(("Scene/GetInfo"), System.Text.Encoding.UTF8.GetBytes(jobjectData.ToString())); + + 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 GetOnlySceneAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" }; + } + return result; + }); + } + /// <summary> + ///鑾峰彇鍦烘櫙淇℃伅,缃戝叧鍙嶉淇℃伅 + /// </summary> + [System.Serializable] + public class GetOnlySceneAllData + { + /// <summary> + /// 閿欒淇℃伅 + /// </summary> + public string errorMessageBase; + /// <summary> + /// 缃戝叧淇℃伅閿欒鍙嶉 + /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para> + /// </summary> + public ErrorResponData errorResponData; + /// <summary> + /// 鑾峰彇鍦烘櫙淇℃伅 + /// </summary> + public GetSceneInfo getSceneInfo; + } + + /// <summary> + /// 鑾峰彇鍦烘櫙淇℃伅 + /// </summary> + public GetSceneInfo sceneGetInfo; + /// <summary> + /// 鑾峰彇鍦烘櫙淇℃伅 + /// </summary> + [System.Serializable] + public class GetSceneInfo + { + /// <summary> + ///鍦烘櫙鎬绘暟 + /// </summary> + public int ScenesSum; + + /// <summary> + /// 鍦烘櫙鍒楄〃 + /// </summary> + public List<ScenesListInfo> ScenesList = new List<ScenesListInfo>(); + } + + /// <summary> + /// 鍦烘櫙鍒楄〃涓殑鍏蜂綋淇℃伅 + /// </summary> + [System.Serializable] + public class ScenesListInfo + { + /// <summary> + /// 鍦烘櫙ID + /// </summary> + public int ScenesId; + + /// <summary> + /// 鍚嶇О + /// </summary> + public string ScenesName; + + /// <summary> + /// 鏄惁澶勪簬寮�鍚姸鎬� + ///0锛氬満鏅病鏈夎寮�鍚� + ///1锛氬満鏅浜庡紑鍚姸鎬� + /// </summary> + public int IsOpen; + } + #endregion + } +} -- Gitblit v1.8.0