HDL Home App 第二版本 旧平台金堂用 正在使用
黄学彪
2019-09-30 404cdc88627f942df7944af04ee05b9d527752d6
ZigbeeApp/Shared/Phone/ZigBee/Device/Panel.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Shared.Common;
namespace ZigBee.Device
{
@@ -27,13 +28,87 @@
        public int panelBacklightLevel = -1;
        /// <summary>
        /// 当前选择模式
        /// </summary>
        public string currentKeySelectModeText = "";
        /// <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>
        /// 当前房间ID
        /// </summary>
        public string curSelectSceneID = "";
        // <summary>
        /// 按键中被绑定的目标列表
        /// </summary>
        public System.Collections.Generic.List<BindListResponseObj> bindList = new System.Collections.Generic.List<BindListResponseObj> { };
        /// <summary>
        /// 按键支持的私有模式列表
        /// </summary>
        public System.Collections.Generic.List<string> priFunList = new System.Collections.Generic.List<string> { };
        public System.Collections.Generic.List<string> priFunList = new System.Collections.Generic.List<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>
        ///获取面板的私有信息
@@ -120,6 +195,11 @@
                                                {
                                                    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:
@@ -134,12 +214,19 @@
                                                    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:
@@ -154,14 +241,26 @@
                                                    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;
@@ -181,11 +280,10 @@
                try
                {
                    OpenPassthroughControl(Gateway);
                    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);
                    jObject.Add("Data", data);
                    Gateway.Send("ClientDataPassthrough", jObject.ToString());
                }
                catch { }
@@ -233,7 +331,7 @@
        }
        /// <summary>
        /// PIR配置参数回复
        /// 配置参数回复
        /// </summary>
        public PanelPrivateFunctionsResponseInfo panelPrivateFunctionsResponseInfo;
        [System.Serializable]
@@ -245,8 +343,8 @@
            /// <para>2:第二级别</para>
            /// <para>3:第三级别</para>
            /// </summary>
            public int funLevel = -1;
            public int funLevel = -1;
            /// <summary>
            /// 私有功能类
            /// <para>256:Key,按键类类 </para>
@@ -285,8 +383,8 @@
            /// <para>303:CurtainUpStop,窗帘上升停</para>
            /// <para>304:CurtainDownstop,窗帘下降停</para>
            /// </summary>
            public List<int> privateFuncTypeLevelThirdList = new List<int>();
            public List<int> privateFuncTypeLevelThirdList = new List<int>();
        }
        /// <summary>
@@ -306,7 +404,7 @@
            string addDataLength = "";
            string value0 = "";
            string value1 = "";
            string value2 = "";
            string value2 = "";
            try
            {
@@ -316,18 +414,18 @@
                    {
                        dataLength = string.Concat(0, 2 * args.Length + 5);
                    }
                    else
                    {
                    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);
                    }
@@ -336,7 +434,7 @@
                        switch (args.Length)
                        {
                            case 1:
                                value0 = "02";
                                value0 = "02";
                                switch (args[0])
                                {
                                    case 1024:
@@ -396,15 +494,15 @@
                                    case 768:
                                        value1 = "0003";
                                        break;
                                }
                                break;
                        }
                                }
                                break;
                        }
                    }
                }
                else
                {
                }
                else
                {
                    dataLength = "05";
                    addDataLength = "01";
                    value0 = "01";
@@ -412,8 +510,8 @@
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                        value0 + value1 + value2;
            }
            catch { };
            catch { };
            return data;
        }
@@ -428,7 +526,7 @@
            /// <para>768:PIR,PIR类</para>
            /// <para>1024:Light,灯类</para>
            /// </summary>
            public int privateFuncTypeOne;
            public int privateFuncTypeOne;
        }
        /// <summary>
@@ -448,8 +546,8 @@
            /// <para>102:RGBLevel,RGB指示灯亮度(灯类)</para>
            /// </summary>
            public int privateFuncTypeTwo;
        }
        }
        /// <summary>
        /// 私有功能类(第三级别)信息
        /// </summary>
@@ -488,6 +586,7 @@
            {
                return null;
            }
            return result.panelPrivateFunctionsResponseInfo.privateFuncTypeLevelFirstList;
        }
@@ -617,11 +716,10 @@
                try
                {
                    OpenPassthroughControl(Gateway);
                    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);
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
@@ -697,8 +795,8 @@
                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 tempAttributeData = string.Concat(td1[2].ToString(), td1[3].ToString(), td1[0].ToString(), td1[1].ToString());
                switch (keyStatus)
                {
                    case KeyStatus.close:
@@ -792,11 +890,10 @@
                try
                {
                    OpenPassthroughControl(Gateway);
                    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);
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
@@ -866,14 +963,14 @@
                    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)
                    {
                    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());
@@ -1168,11 +1265,10 @@
                try
                {
                    OpenPassthroughControl(Gateway);
                    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);
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
@@ -1320,11 +1416,10 @@
                try
                {
                    OpenPassthroughControl(Gateway);
                    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);
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
@@ -1362,7 +1457,7 @@
            string addDataLength = "03";
            string mode = "";
            string time = "";
            string level = "";
            string level = "";
            try
            {
                if (modeEnable)
@@ -1396,7 +1491,7 @@
                        level = temp2;
                        break;
                }
                sbString1.Append(time.ToUpper());
                sbString2.Append(level.ToUpper());
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
@@ -1535,11 +1630,10 @@
                try
                {
                    OpenPassthroughControl(Gateway);
                    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);
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
@@ -1734,11 +1828,10 @@
                try
                {
                    OpenPassthroughControl(Gateway);
                    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);
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
@@ -1890,15 +1983,14 @@
                };
                Gateway.Actions += action;
                System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
                System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
                try
                {
                    OpenPassthroughControl(Gateway);
                    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);
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
@@ -1991,401 +2083,401 @@
            /// 节能模式亮度(0-100)
            /// </summary>
            public int level = -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,
        //}
        //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 >
        ///配置面板功能
@@ -2442,7 +2534,7 @@
                {
                    var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 6 }, { "Command", 120 } };
                    var data = new JObject { { "Undivided", 0 }, { "AttributeId", 6533 }, { "AttributeDataType", 33 }, { "AttributeData", (int)value } };
                    jObject.Add("Data", data);
                    jObject.Add("Data", data);
                    Gateway.Send("SetWritableValue", jObject.ToString());
                }
                catch { }
@@ -2487,20 +2579,30 @@
            /// 开关类型——取反.
            /// </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>
@@ -2521,6 +2623,10 @@
            /// 窗帘类型——下降停止.
            /// </summary>
            Wcd_Down_Stop = 304,
            /// <summary>
            /// 窗帘类型——下降停止.
            /// </summary>
            Default = 65535,
        }
        #endregion
@@ -2618,7 +2724,7 @@
                   }
                    };
                    var data = new JObject { { "AttriBute", attriBute } };
                    JObject.Add("Data", data);
                    JObject.Add("Data", data);
                    Gateway?.Send(("GetDeviceStatus"), JObject.ToString());
                }
                catch
@@ -2644,8 +2750,8 @@
                return d;
            });
        }
        }
        /// <summary>
        /// 网关恢复出厂设置返回数据
        /// </summary>
@@ -2772,7 +2878,7 @@
        //            {"BindName",addBindData.BindName},
        //            { "BindList", bindList }
        //            };
        //                jObject.Add("Data", data);
        //                jObject.Add("Data", data);
        //                mainGateway.Send("Bind/SetBind", jObject.ToString());
        //            }
        //        }
@@ -3059,7 +3165,7 @@
        //                var data = new JObject {
        //            {"RemoveBindList",removeBindList}
        //             };
        //                jObject.Add("Data", data);
        //                jObject.Add("Data", data);
        //                mainGateway.Send("Bind/RemoveBind", jObject.ToString());
        //            }
        //        }
@@ -3305,7 +3411,7 @@
        //        try
        //        {
        //            System.Console.WriteLine("Bind/GetDeviceBind_Actions 启动" + "_" + System.DateTime.Now.ToString());
        //            var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5007 } };
        //            var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5007 } };
        //            mainGateway.Send("Bind/GetDeviceBind", jObject.ToString());
        //        }
        //        catch { }
@@ -3458,7 +3564,7 @@
        //        try
        //        {
        //            var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5006 } };
        //            var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5006 } };
        //            Gateway.Send("Bind/ClearBindInfo", jObject.ToString());
        //        }
        //        catch { }