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/Scene.cs | 2164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 2,164 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/Scene.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/Scene.cs
new file mode 100755
index 0000000..7006480
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/Scene.cs
@@ -0,0 +1,2164 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+using Newtonsoft.Json.Linq;
+
+namespace ZigBee.Device
+{
+    [System.Serializable]
+    public class Scene
+    {
+        /// <summary>
+        /// 褰撳墠涓荤綉鍏崇殑ID
+        /// </summary>
+        public string GateWayId;
+
+        /// <summary>
+        /// 缃戝叧杩斿洖鍦烘櫙鐨勫懡浠ゆ爣璇�
+        /// </summary>
+        public int DataID;
+
+        /// <summary>
+        /// 缃戝叧鍙嶉鐨勬椂闂存埑
+        /// </summary>
+        public int Time;
+
+        /// <summary>
+        /// 褰撳墠鍦烘櫙鐨処D
+        /// </summary>
+        [System.Serializable]
+        public class SceneBase
+        {
+            /// <summary>
+            /// 鍦烘櫙鐨処
+            /// </summary>
+            public int SceneId;
+        }
+
+        /// <summary>
+        /// 缃戝叧涓満鏅澶囧垪琛�
+        /// </summary>
+        //[Newtonsoft.Json.JsonIgnore]
+        //public List<GetSceneDeviceListInfo> SceneDeviceList = new List<GetSceneDeviceListInfo>();
+
+        /// <summary>
+        /// 缃戝叧淇℃伅閿欒鍙嶉
+        /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+        /// </summary>
+        ErrorResponData errResponData;
+        /// <summary>
+        /// 缃戝叧淇℃伅閿欒鍙嶉
+        /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+        /// </summary>
+        [System.Serializable]
+        public class ErrorResponData
+        {
+            /// <summary>
+            /// Error鍙傛暟鍚箟
+            ///<para>1锛氱綉鍏虫棤娉曡В鏋愬懡浠ゆ暟鎹��</para>
+            ///<para>2锛氬崗璋冨櫒姝e湪鍗囩骇鎴栧浠�/鎭㈠鏁版嵁
+            ///<para>3锛氭搷浣滆澶�/缁�/鍦烘櫙涓嶅瓨鍦�</para>
+            ///<para>4锛氬叾浠栭敊璇�</para>
+            ///<para>5锛氭暟鎹紶杈撻敊璇紙鍦ㄦ煇娆″鎴风鍚戠綉鍏冲彂閫佹暟鎹殑杩囩▼涓紝缃戝叧鍦ㄥ悎鐞嗘椂闂磋寖鍥村唴鎺ユ敹瀹㈡埛绔暟鎹笉瀹屾暣瀵艰嚧璇ラ敊璇彂鐢熴�傚瀹㈡埛绔悜缃戝叧涓�娆″彂閫�100涓瓧鑺傜殑鏁版嵁锛屼絾缃戝叧绛夊緟鎺ユ敹浜嗕竴绉掑彧鎺ユ敹浜�80涓瓧鑺傘�傚彂鐢熻閿欒锛岀綉鍏冲皢涓诲姩鍏抽棴瀹㈡埛绔繛鎺ワ級</para>
+            /// </summary>
+            public int Error;
+        }
+
+        /// <summary>
+        /// 绛夊緟浠庣綉鍏虫帴鏀舵暟鎹殑鏃堕棿
+        /// </summary>
+        /// <value>The wait receive data time.</value>
+        public static int WaitReceiveDataTime
+        {
+            get
+            {
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    return 3000;
+                }
+                else if (mainGateway.IsVirtual)
+                {
+                    return 6000;
+                }
+                else
+                {
+                    return 3000;
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缃戝叧淇℃伅閿欒鍙嶉鐨勫唴瀹�
+        /// </summary>
+        static string ErrorMess(int err)
+        {
+            string message = "";
+            switch (err)
+            {
+                case 1:
+                    message = " 缃戝叧鏃犳硶瑙f瀽鍛戒护鏁版嵁銆�";
+                    break;
+                case 2:
+                    message = " 鍗忚皟鍣ㄦ鍦ㄥ崌绾ф垨澶囦唤 / 鎭㈠鏁版嵁銆�";
+                    break;
+                case 3:
+                    message = "鎿嶄綔璁惧 / 缁� / 鍦烘櫙涓嶅瓨鍦�";
+                    break;
+                case 4:
+                    message = " 鍏朵粬閿欒";
+                    break;
+                case 5:
+                    message = " 鏁版嵁浼犺緭閿欒锛堝湪鏌愭瀹㈡埛绔悜缃戝叧鍙戦�佹暟鎹殑杩囩▼涓紝缃戝叧鍦ㄥ悎鐞嗘椂闂磋寖鍥村唴鎺ユ敹瀹㈡埛绔暟鎹笉瀹屾暣瀵艰嚧璇ラ敊璇彂鐢熴�傚瀹㈡埛绔悜缃戝叧涓�娆″彂閫�100涓瓧鑺傜殑鏁版嵁锛屼絾缃戝叧绛夊緟鎺ユ敹浜嗕竴绉掑彧鎺ユ敹浜�80涓瓧鑺傘�傚彂鐢熻閿欒锛岀綉鍏冲皢涓诲姩鍏抽棴瀹㈡埛绔繛鎺ワ級";
+                    break;
+                default:
+                    break;
+            }
+            return message;
+        }
+
+        #region 鍦ㄤ粠缃戝叧涓彂鍦烘櫙鐨勫懡浠ょ殑鍙嶉
+        /// <summary>
+        ///鍦ㄤ粠缃戝叧涓彂鍦烘櫙鐨勫懡浠ょ殑鍙嶉
+        /// </summary>
+        public SceneErrorRespon sceneErrorRespon;
+        /// <summary>
+        ///鍦ㄤ粠缃戝叧涓彂鍦烘櫙鐨勫懡浠ょ殑鍙嶉
+        /// </summary>
+        [System.Serializable]
+        public class SceneErrorRespon
+        {
+            /// <summary>
+            /// 闈炰富缃戝叧涓嶈兘浣跨敤鍦烘櫙鎸囦护銆�
+            /// </summary>
+            public int Data_ID;
+
+        }
+        #endregion
+
+        #region 鍒涘缓涓�涓┖鍦烘櫙
+        ///<summary >
+        /// 鍒涘缓涓�涓┖鍦烘櫙.(浠呯敤浜庝富缃戝叧鎺ュ彛锛�
+        /// <para>sceneName:鍙栬鍦烘櫙鐨勫悕瀛�</para>
+        /// </summary>
+        public static async System.Threading.Tasks.Task<GetSceneIdAllData> GetSceneNewIdAsync(string sceneName)
+        {
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                GetSceneIdAllData d = null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new GetSceneIdAllData {errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return d;
+                }
+
+                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 = mainGateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            d = new GetSceneIdAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+                        else
+                        {
+                            d = new GetSceneIdAllData { errorResponData = temp , errorMessageBase = ErrorMess(temp.Error)};
+                        }
+                    }
+
+                    if (topic == gatewayID + "/" + "Scene/GetNewId_Respon")
+                    {
+                        var scene = new Scene() { DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.CurrentGateWayId };
+                        scene.getSceneIdData = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneIdData>(jobject["Data"].ToString());
+                        if (scene.getSceneIdData == null)
+                        {
+                            d = new GetSceneIdAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            GetSceneAllInfoAsync();
+                            d = new GetSceneIdAllData { getSceneIdData = scene.getSceneIdData };
+                            System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+
+                        }
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/GetNewId_Actions 鍚姩" + System.DateTime.Now.ToString());
+                try{
+                    var bytes = new byte[32];
+                    var reamarkGwBytes = System.Text.Encoding.UTF8.GetBytes(sceneName);
+                    System.Array.Copy(reamarkGwBytes, 0, bytes, 0, 32 < reamarkGwBytes.Length ? 32 : reamarkGwBytes.Length);
+                    sceneName = System.Text.Encoding.UTF8.GetString(bytes);
+
+                    var jObject = new Newtonsoft.Json.Linq.JObject() {
+                                    { "Cluster_ID", 0 },
+                                    { "Command", 800 }
+                                };
+                    var data = new JObject { { "ScenesName", sceneName } };
+                    jObject.Add("Data", data);
+                    mainGateway.Send("Scene/GetNewId", 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 GetSceneIdAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+
+                }
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/GetNewId_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+
+                return d;
+            });
+        }
+
+        /// <summary>
+        /// 鍒涘缓涓�涓┖鍦烘櫙杩斿洖鐨勬暟鎹�,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        public GetSceneIdAllData getSceneIdAllData;
+        /// <summary>
+        /// 鍒涘缓涓�涓┖鍦烘櫙杩斿洖鐨勬暟鎹�,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class GetSceneIdAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 鍒涘缓涓�涓┖鍦烘櫙杩斿洖鐨勬暟鎹�
+            /// </summary>
+            public GetSceneIdData getSceneIdData;
+        }
+
+        /// <summary>
+        /// 鍒涘缓涓�涓┖鍦烘櫙杩斿洖鐨勬暟鎹�
+        /// </summary>
+        public GetSceneIdData getSceneIdData;
+        /// <summary>
+        /// 鍒涘缓涓�涓┖鍦烘櫙杩斿洖鐨勬暟鎹�
+        /// </summary>
+        [System.Serializable]
+        public class GetSceneIdData
+        {
+            /// <summary>
+            /// 鏂扮殑鍦烘櫙id
+            /// </summary>
+            public int NewScenesId;
+            /// <summary>
+            /// 鍦烘櫙鍚嶇О 锛屼笉澶т簬32涓瓧鑺傘��
+            /// </summary>
+            public string ScenesName;
+        }
+        #endregion
+
+        #region 鑾峰彇涓�涓満鏅殑鎵�鏈変俊鎭�
+        ///<summary >
+        ///鑾峰彇涓�涓満鏅殑鎵�鏈変俊鎭� .
+        ///</summary>
+        public static async System.Threading.Tasks.Task<GetSceneAllData> GetSceneAllInfoAsync()
+        {
+            return await System.Threading.Tasks.Task.Run(async () => {
+                GetSceneAllData d = null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new GetSceneAllData { errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return d;
+                }
+                ZbGateway.AllSceneList.Clear();
+                var dateTime = DateTime.Now;
+                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 = mainGateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            d = new GetSceneAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+                        else
+                        {
+                            d = new GetSceneAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error)};
+                        }
+                    }
+
+                    if (topic == gatewayID + "/" + "Scene/GetAllInfo_Respon")
+                    {
+                        dateTime = DateTime.Now;
+                        var scene = new Scene() { DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.CurrentGateWayId };
+                        scene.sceneGetAllInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetSceneAllInfo>(jobject["Data"].ToString());
+
+                        if (scene.sceneGetAllInfo == null)
+                        {
+                            d = new GetSceneAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            var info = ZbGateway.AllSceneList.Find(obj => obj.ScenesId == scene.sceneGetAllInfo.ScenesId);
+                            if (info == null)
+                            {
+                                ZbGateway.AllSceneList.Add(scene.sceneGetAllInfo);
+                            }
+                            else
+                            {
+                                info.DeviceList = scene.sceneGetAllInfo.DeviceList;
+                                info.DeviceSum = scene.sceneGetAllInfo.DeviceSum;
+                                info.IsOpen = scene.sceneGetAllInfo.IsOpen;
+                                info.ScenesId = scene.sceneGetAllInfo.ScenesId;
+                                info.ScenesName = scene.sceneGetAllInfo.ScenesName;
+                                info.ScenesNum = scene.sceneGetAllInfo.ScenesNum;
+                                info.ScenesSum = scene.sceneGetAllInfo.ScenesSum;
+                            }
+                            d = new GetSceneAllData { getSceneAllInfo = scene.sceneGetAllInfo };
+                            System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+
+                        }
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/GetAllInfo_Actions 鍚姩" + System.DateTime.Now.ToString());
+                try{
+                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 807 } };
+                    mainGateway.Send(("Scene/GetAllInfo"), jObject.ToString());
+                }
+                catch {}
+
+                while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime)
+                {
+                    await System.Threading.Tasks.Task.Delay(100);
+                }
+
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/GetAllInfo_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+
+                return d;
+            });
+        }
+        /// <summary>
+        /// 鑾峰彇鎵�鏈夊満鏅殑鎵�鏈変俊鎭�,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        public GetSceneAllData getSceneAllData;
+        /// <summary>
+        /// 鑾峰彇鎵�鏈夊満鏅殑鎵�鏈変俊鎭�,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class GetSceneAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 鑾峰彇鎵�鏈夊満鏅殑鎵�鏈変俊鎭�
+            /// </summary>
+            public GetSceneAllInfo getSceneAllInfo;
+        }
+        /// <summary>
+        /// 鑾峰彇鎵�鏈夊満鏅殑鎵�鏈変俊鎭�
+        /// </summary>
+        public GetSceneAllInfo sceneGetAllInfo;
+        /// <summary>
+        /// 鑾峰彇鎵�鏈夊満鏅殑鎵�鏈変俊鎭�
+        /// </summary>
+        [System.Serializable]
+        public class GetSceneAllInfo:CommonDevice
+        {
+            /// <summary>
+            ///鍦烘櫙鎬绘暟
+            /// </summary>
+            public int ScenesSum;
+
+            /// <summary>
+            ///琛ㄧず褰撳墠鍙戦�佺殑鏄鍑犱釜鍦烘櫙淇℃伅銆係cenesNum浠�0寮�濮嬶紝姣忓彂閫佷竴涓満鏅俊鎭皢鑷姞1锛屽綋ScenesNum绛変簬ScenesSum鏃讹紝琛ㄧず鎵�鏈変俊鎭彂閫佸畬姣曘��
+            /// </summary>
+            public int ScenesNum;
+
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+
+            /// <summary>
+            /// 鍦烘櫙鏄惁澶勪簬寮�鍚姸鎬�
+            /// <para>0锛氬満鏅病鏈夊紑鍚�</para>
+            ///<para>1锛氬満鏅浜庡紑鍚姸鎬�</para>
+            /// </summary>
+            public int IsOpen;
+
+            /// <summary>
+            /// 鍦烘櫙鍚嶇О
+            /// </summary>
+            public string ScenesName;
+
+            /// <summary>
+            /// 褰撳墠鍦烘櫙鐨勮澶囨暟閲�
+            /// </summary>
+            public int DeviceSum;
+
+            /// <summary>
+            /// 鍦烘櫙鍒楄〃
+            /// </summary>
+            public List<DeviceListData> DeviceList = new List<DeviceListData>();
+        }
+        /// <summary>
+        /// 鍦烘櫙鍒楄〃鏁版嵁
+        /// </summary>
+        [System.Serializable]
+        public class DeviceListData
+        {
+            /// <summary>
+            /// 鎴愬憳绫诲瀷
+            ///<para>0锛氳澶囨垚鍛�</para>
+            ///<para>1锛氬満鏅垚鍛�</para>
+            ///<para>2锛氬欢鏃舵垚鍛�</para>
+            /// </summary>
+            public int Type;
+
+            /// <summary>
+            /// 璁惧mac鍦板潃 锛�
+            ///<para>褰揟ype=0鏃跺瓨鍦ㄣ��</para>
+            /// </summary>
+            public string DeviceAddr;
+            /// <summary>
+            /// 璁惧绔彛鍙�
+            ///<para>褰揟ype=0鏃跺瓨鍦ㄣ��</para>
+            /// </summary>
+            public int Epoint;
+            /// <summary>
+            /// 璁惧鍚嶇О
+            /// </summary>
+            public string DeviceName;
+            /// <summary>
+            /// 璁惧鍒楄〃
+            /// 褰揟ype=0鏃跺瓨鍦�
+            /// </summary>
+            public List<Safeguard.TaskListInfo> TaskList = new List<Safeguard.TaskListInfo>();
+
+            /// <summary>
+            /// 鍦烘櫙鎴愬憳鐨勫満鏅痠d
+            /// <para>褰揟ype=1鏃跺瓨鍦�</para>
+            /// </summary>
+            public int ElseScenesId;
+
+            /// <summary>
+            ///寤舵椂鎵ц鏃堕棿锛屽崟浣嶇銆�
+            /// </summary>
+            public int DelayTime;
+            /// <summary>
+            /// 鍦烘櫙鍔ㄤ綔搴忓彿锛岃〃绀虹鍑犱釜鍔ㄤ綔
+            /// </summary>
+            public int MemberNumber;
+        }
+
+        #endregion
+
+        #region 鑾峰彇鍦烘櫙鍒楄〃
+        ///<summary >
+        ///鑾峰彇鍦烘櫙鍒楄〃
+        ///</summary>
+        public static async System.Threading.Tasks.Task<List<GetSceneAllInfo>> GetSceneListAsync()
+        {
+            ZbGateway.AllSceneList.Clear();
+            return await System.Threading.Tasks.Task.Run(async () => {
+                var dateTime = DateTime.Now;
+                GetSceneAllData d = null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new GetSceneAllData { errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return null;
+                }
+                Action<string, string> action = (topic, message) =>
+                {
+                    var gatewayID = topic.Split('/')[0];
+                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
+
+                    if (topic == gatewayID + "/" + "Scene/GetAllInfo_Respon")
+                    {
+                        dateTime = DateTime.Now;
+                        var scene = new Scene() { DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.CurrentGateWayId };
+                        scene.sceneGetAllInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetSceneAllInfo>(jobject["Data"].ToString());
+
+                        var info = ZbGateway.AllSceneList.Find(obj => obj.ScenesId == scene.sceneGetAllInfo.ScenesId);
+                        if (info == null)
+                        {
+                            ZbGateway.AllSceneList.Add(scene.sceneGetAllInfo);
+                        }
+                        else
+                        {
+                            info.DeviceList = scene.sceneGetAllInfo.DeviceList;
+                            info.DeviceSum = scene.sceneGetAllInfo.DeviceSum;
+                            info.IsOpen = scene.sceneGetAllInfo.IsOpen;
+                            info.ScenesId = scene.sceneGetAllInfo.ScenesId;
+                            info.ScenesName = scene.sceneGetAllInfo.ScenesName;
+                            info.ScenesNum = scene.sceneGetAllInfo.ScenesNum;
+                            info.ScenesSum = scene.sceneGetAllInfo.ScenesSum;
+                        }
+                        System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/GetAllInfo_Actions 鍚姩" + System.DateTime.Now.ToString());
+                try
+                {
+                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 807 } };
+                    mainGateway.Send(("Scene/GetAllInfo"),System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+                }
+                catch { }
+
+                while ((DateTime.Now - dateTime).TotalMilliseconds < 1000)
+                {
+                    await System.Threading.Tasks.Task.Delay(10);
+                }
+
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/GetAllInfo_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+
+                return ZbGateway.AllSceneList;
+            });
+        }
+        #endregion
+
+        #region 鍙兘鑾峰彇鍦烘櫙淇℃伅锛屾病鏈夊満鏅腑鐨勮澶囦俊鎭�
+        /// <summary>
+        /// 鍙兘鑾峰彇鍦烘櫙淇℃伅锛屾病鏈夊満鏅腑鐨勮澶囦俊鎭�
+        /// </summary>
+        /// <returns></returns>
+        //static async System.Threading.Tasks.Task<GetOnlySceneAllData> GetSceneInfoAsync()
+        //{
+        //if (ZbGateway.MainGateWay == null)
+        //{
+        //    return null;
+        //}
+        //return await System.Threading.Tasks.Task.Run(async () =>
+        //{
+        //var d = new GetOnlySceneAllData { };
+        //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 = ZbGateway.MainGateWay.getGatewayBaseInfo.gwID };
+        //    var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+        //    if (temp == null)
+        //    {
+        //        d.errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖";
+        //    }
+        //    else
+        //    {
+        //        d.errorResponData = temp;
+        //        d.errorMessageBase = ErrorMess(temp.Error);
+        //    }
+        //}
+
+        //if (topic == gatewayID + "/" + "Scene/GetInfo_Respon")
+        //{
+        //var scene = new Scene() { DataID = jobject.Value<int>("Data_ID"), GateWayId = ZbGateway.MainGateWay?.CurrentGateWayId };
+        //scene.sceneGetInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<GetSceneInfo>(jobject["Data"].ToString());
+
+        //if (scene.sceneGetInfo == null)
+        //{
+        //    d.errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�";
+        //}
+        //else
+        //{
+        //if (ZbGateway.MainGateWay?.SceneList.Count == 0)
+        //{
+        //    ZbGateway.MainGateWay.SceneList.Add(scene.sceneGetInfo);
+        //}
+        //else
+        //{
+        //    foreach (var a in ZbGateway.MainGateWay.SceneList)
+        //    {
+        //        a.ScenesList = scene.sceneGetInfo.ScenesList;
+        //    }
+        //}
+        //d.getSceneInfo = scene.sceneGetInfo;
+        //        }
+        //    }
+        //};
+        //ZbGateway.MainGateWay.Actions += action;
+        //System.Console.WriteLine("Scene/GetInfo_Actions 鍚姩" + System.DateTime.Now.ToString());
+
+        //var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 805 } };
+        //ZbGateway.MainGateWay?.Send(("Scene/GetInfo"),System.Text.Encoding.UTF8.GetBytes(jObject.ToString()));
+
+        //var dateTime = DateTime.Now;
+        //while ((DateTime.Now - dateTime).TotalMilliseconds < 1000)
+        //{
+        //    await System.Threading.Tasks.Task.Delay(10);
+        //    if (d.getSceneInfo != null)
+        //    {
+        //        break;
+        //    }
+        //}
+        //if ((DateTime.Now - dateTime).TotalMilliseconds > 10000)
+        //{
+        //    d.errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔";
+        //}
+        //ZbGateway.MainGateWay.Actions -= action;
+        //System.Console.WriteLine("Scene/GetInfo_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+
+        //return d;
+        //});
+        // }
+
+        /// <summary>
+        ///鑾峰彇鍦烘櫙淇℃伅,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        GetOnlySceneAllData getOnlySceneAllData;
+        /// <summary>
+        ///鑾峰彇鍦烘櫙淇℃伅,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        [System.Serializable]
+        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:CommonDevice
+        {
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+
+            /// <summary>
+            /// 鍚嶇О
+            /// </summary>
+            public string ScenesName;
+
+            /// <summary>
+            /// 鏄惁澶勪簬寮�鍚姸鎬�
+            ///0锛氬満鏅病鏈夎寮�鍚�
+            ///1锛氬満鏅浜庡紑鍚姸鎬�
+            /// </summary>
+            public int IsOpen;
+        }
+        #endregion
+
+        #region 鑾峰彇褰撳墠鍦烘櫙涓殑璁惧鍒楄〃淇℃伅
+        ///<summary >
+        ///鑾峰彇褰撳墠鍦烘櫙涓殑璁惧鍒楄〃淇℃伅
+        /// </summary>
+        public static async System.Threading.Tasks.Task<GetSceneDeviceListAllInfo> GetSceneDeviceListAsync(int scenesId)
+        {
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                GetSceneDeviceListAllInfo d = null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new GetSceneDeviceListAllInfo { errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return d;
+                }
+                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 = mainGateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            d = new GetSceneDeviceListAllInfo { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+                        else
+                        {
+                            d = new GetSceneDeviceListAllInfo { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                        }
+                    }
+
+                    if (topic == gatewayID + "/" + "Scene/GetDeviceList_Respon")
+                    {
+                        var sceneTemp = new Scene() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.getGatewayBaseInfo.gwID };
+                        sceneTemp.sceneGetDeviceListObj = Newtonsoft.Json.JsonConvert.DeserializeObject<GetSceneDeviceListInfo>(jobject["Data"].ToString());
+
+                        if (sceneTemp.sceneGetDeviceListObj == null)
+                        {
+                            d = new GetSceneDeviceListAllInfo { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                         }
+                        else
+                        {
+                            var sDev = mainGateway.SceneDeviceList.Find(obj => obj.ScenesId == sceneTemp.sceneGetDeviceListObj.ScenesId);
+                            if (sDev == null)
+                            {
+                                ZbGateway.MainGateWay.SceneDeviceList.Add(sceneTemp.sceneGetDeviceListObj);
+                            }
+                            else
+                            {
+                                sDev.DeviceList = sceneTemp.sceneGetDeviceListObj.DeviceList;
+                            }
+
+                            d = new GetSceneDeviceListAllInfo { getSceneDeviceListInfo = sceneTemp.sceneGetDeviceListObj };
+                            System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+
+                        }
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/GetDeviceList_Actions 鍚姩" + System.DateTime.Now.ToString());
+                try
+                {
+                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 806 } };
+                    var data = new JObject { { "ScenesId", scenesId } };
+                    jObject.Add("Data", data);
+                    mainGateway.Send(("Scene/GetDeviceList"),System.Text.Encoding.UTF8.GetBytes(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 GetSceneDeviceListAllInfo { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                }
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/GetDeviceList_Actions閫�鍑�" + System.DateTime.Now.ToString());
+
+                return d;
+            });
+        }
+
+        /// <summary>
+        ///鑾峰彇鍦烘櫙鐨勮澶囧垪琛ㄤ俊鎭�,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        public GetSceneDeviceListAllInfo getSceneDeviceListAllInfo;
+        /// <summary>
+        ///鑾峰彇鍦烘櫙鐨勮澶囧垪琛ㄤ俊鎭�,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class GetSceneDeviceListAllInfo
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 鑾峰彇鍦烘櫙鐨勮澶囧垪琛ㄤ俊鎭�
+            /// </summary>
+            public GetSceneDeviceListInfo getSceneDeviceListInfo;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍦烘櫙鐨勮澶囧垪琛ㄤ俊鎭�
+        /// </summary>
+        public GetSceneDeviceListInfo sceneGetDeviceListObj;
+        /// <summary>
+        /// 鑾峰彇鍦烘櫙鐨勮澶囧垪琛ㄤ俊鎭�
+        /// </summary>
+        [System.Serializable]
+        public class GetSceneDeviceListInfo
+        {
+            /// <summary>
+            ///鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+
+            /// <summary>
+            ///鍦烘櫙鏄惁澶勪簬寮�鍚姸鎬�
+            ///0锛氬満鏅病鏈夊紑鍚�
+            ///1锛氬満鏅浜庡紑鍚姸鎬�
+            /// </summary>
+            public int IsOpen;
+
+            /// <summary>
+            ///鍦烘櫙鐨勮澶囨暟閲�
+            /// </summary>
+            public int DeviceSum;
+
+            /// <summary>
+            /// 璁惧鍒楄〃
+            /// </summary>
+            public List<DeviceListData> DeviceList = new List<DeviceListData>();
+
+        }
+        #endregion
+
+        #region 鍦烘櫙涓坊鍔犵殑鎴愬憳
+        /// <summary>
+        /// 娣诲姞鐩爣鍒扮綉鍏冲埌鍦烘櫙涓��
+        /// <para>杩斿洖缁撴灉Result 1 鍔犲叆鎴愬姛</para>
+        /// <para>杩斿洖缁撴灉Result 0 鍔犲叆澶辫触</para>
+        /// </summary>
+        /// <returns>The scene member.</returns>
+        /// <param name="scenesId">Scenes identifier.</param>
+        public static async System.Threading.Tasks.Task<AddSceneMemberResponseAllData> AddSceneMemberAsync(AddSceneMemberData sceneMemberData)
+        {
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                AddSceneMemberResponseAllData d = null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new AddSceneMemberResponseAllData { errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return d;
+                }
+                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 = mainGateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            d = new AddSceneMemberResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+                        else
+                        {
+                            d = new AddSceneMemberResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                        }
+                    }
+
+                    if (topic == gatewayID + "/" + "Scene/AddMember_Respon")
+                    {
+                        var scene = new Scene() { DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.CurrentGateWayId };
+                        scene.addSceneMemberData = Newtonsoft.Json.JsonConvert.DeserializeObject<AddSceneMemberResponseData>(jobject["Data"].ToString());
+
+                        if (scene.addSceneMemberData == null)
+                        {
+                            d = new AddSceneMemberResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            d = new AddSceneMemberResponseAllData { addSceneMemberResponseData = scene.addSceneMemberData };
+                            System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+
+                        }
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/AddMember_Actions 鍚姩" + System.DateTime.Now.ToString());
+                try{
+                    if (sceneMemberData != null)
+                    {
+                        var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 820 } };
+                        var data = new JObject { };
+                        if (sceneMemberData.Type == 0)
+                        {
+                            var taskList = new JArray { };
+                            foreach (var taskInfo in sceneMemberData.TaskList)
+                            {
+                                var tInfo = new JObject{
+                            { "TaskType", taskInfo.TaskType},
+                            { "Data1", taskInfo.Data1},
+                            { "Data2",taskInfo.Data2}
+                            };
+                                taskList.Add(tInfo);
+                            }
+
+                            data = new JObject {
+                         { "ScenesId",sceneMemberData.ScenesId},
+                         { "Type", sceneMemberData.Type} ,
+                         { "DeviceAddr",sceneMemberData.DeviceAddr} ,
+                         { "Epoint", sceneMemberData.Epoint} ,
+                         { "TaskList", taskList },
+                         { "DelayTime", sceneMemberData.DelayTime} ,
+                         { "MemberNumber",sceneMemberData.MemberNumber},
+                        };
+                        }
+                        else if (sceneMemberData.Type == 1)
+                        {
+                            data = new JObject {
+                         { "ScenesId",sceneMemberData.ScenesId},
+                         { "Type", sceneMemberData.Type} ,
+                         { "ElseScenesId", sceneMemberData.ElseScenesId },
+                         { "DelayTime", sceneMemberData.DelayTime} ,
+                         { "MemberNumber",sceneMemberData.MemberNumber},
+                        };
+                        }
+                        else if (sceneMemberData.Type == 2)
+                        {
+                            data = new JObject {
+                          { "Type", sceneMemberData.Type} ,
+                         { "ScenesId",sceneMemberData.ScenesId},
+                         { "DelayTime", sceneMemberData.DelayTime} ,
+                         { "MemberNumber",sceneMemberData.MemberNumber},
+                        };
+                        }
+
+                        jObject.Add("Data", data);
+                        mainGateway.Send(("Scene/AddMember"),System.Text.Encoding.UTF8.GetBytes(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 AddSceneMemberResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                }
+
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/AddMember_Actions 閫�鍑�" + System.DateTime.Now.ToString());
+
+                return d;
+            });
+        }
+
+
+        /// <summary>
+        /// 鑾峰彇鍦烘櫙涓坊鍔犵殑鎴愬憳,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        public AddSceneMemberResponseAllData addSceneMemberResponseAllData;
+        /// <summary>
+        /// 鑾峰彇鍦烘櫙涓坊鍔犵殑鎴愬憳,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class AddSceneMemberResponseAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 鑾峰彇鍦烘櫙涓坊鍔犵殑鎴愬憳
+            /// </summary>
+            public AddSceneMemberResponseData addSceneMemberResponseData;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍦烘櫙涓坊鍔犵殑鎴愬憳
+        /// </summary>
+        public AddSceneMemberResponseData addSceneMemberData;
+        /// <summary>
+        /// 鑾峰彇娣诲姞鎴愬憳鍒板満鏅垨鏇存柊鍦烘櫙
+        /// </summary>
+        [System.Serializable]
+        public class AddSceneMemberResponseData
+        {
+            /// <summary>
+            /// 1 鍔犲叆鎴愬姛
+            /// <para>0 鍔犲叆澶辫触</para>
+            /// </summary>
+            public int Result;
+
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+
+            /// <summary>
+            /// 寤舵椂鎵ц鏃堕棿锛屽崟浣嶇
+            /// </summary>
+            public int DelayTime;
+
+            /// <summary>
+            /// 0锛氬姞鍏ユ垚鍛樹负鑺傜偣璁惧
+            /// <para>1锛氬姞鍏ユ垚鍛樹负鍏朵粬鍦烘櫙</para>
+            /// </summary>
+            public int Type;
+
+            /// <summary>
+            /// 鍏朵粬鍦烘櫙id
+            /// <para>褰揟ype=1鏃讹紝璇ュ瓧娈靛瓨鍦�</para>
+            /// </summary>
+            public int ElseScenesId;
+
+            /// <summary>
+            /// 璁惧mac鍦板潃
+            /// </summary>
+            public string DeviceAddr;
+
+            /// <summary>
+            /// 璁惧绔彛鍙�
+            /// </summary>
+            public int Epoint;
+
+            /// <summary>
+            /// 璁惧鍚嶇О 锛屽綋Type=0鏃讹紝璇ュ瓧娈靛瓨鍦�
+            /// </summary>
+            public string DeviceName;
+        }
+
+        /// <summary>
+        /// 娣诲姞鎴愬憳鍒板満鏅垨鏇存柊鍦烘櫙
+        /// </summary>
+        public AddSceneMemberData setAddMember;
+        /// <summary>
+        /// 娣诲姞鎴愬憳鍒板満鏅垨鏇存柊鍦烘櫙
+        /// </summary>
+        [System.Serializable]
+        public class AddSceneMemberData
+        {
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// <para>0锛氭柊澧炲満鏅紝缃戝叧灏嗚嚜鍔ㄤ负璇ュ満鏅垎閰嶄竴涓湭琚娇鐢ㄧ殑鍦烘櫙id銆�</para>
+            /// <para>鍏朵粬锛氳澶囪鍔犲叆鐨勫満鏅�傚鏋滃満鏅痠d涓嶅瓨鍦紝鍒欑綉鍏虫柊寤轰竴涓満鏅苟鐢ㄨ瀛楁鍊间綔涓哄満鏅痠d銆�</para>
+            /// </summary>
+            public int ScenesId;
+
+            /// <summary>
+            /// 娣诲姞鎴愬憳绫诲瀷
+            ///<para>0锛氳妭鐐硅澶�</para>
+            ///<para>1锛氬叾浠栧満鏅�</para>
+            ///<para>2锛氬欢鏃剁被鍨�</para>
+            /// </summary>
+            public int Type;
+
+            /// <summary>
+            /// 寤舵椂鎵ц鏃堕棿锛屽崟浣嶇
+            /// 褰揟ype=2鏃跺瓨鍦�
+            /// </summary>
+            public int DelayTime;
+            /// <summary>
+            /// 寤舵椂鎵ц搴忓彿锛岃〃绀哄欢鏃剁储寮�
+            ///褰揟ype=2鏃跺瓨鍦�
+            /// </summary>
+            public int MemberNumber;
+
+            /// <summary>
+            /// 浣滀负鎴愬憳鐨勫叾浠栧満鏅痠d銆�
+            ///<para>褰揟ype=1鏃讹紝璇ュ瓧娈垫墠瀛樺湪銆�</para>
+            /// </summary>
+            public int ElseScenesId;
+
+            /// <summary>
+            /// 璁惧mac鍦板潃
+            /// <para>Type=0鏃跺瓨鍦�</para>
+            /// </summary>
+            public string DeviceAddr;
+            /// <summary>
+            /// 璁惧绔彛鍙�
+            /// <para>Type=0鏃跺瓨鍦�</para>
+            /// </summary>
+            public int Epoint;
+            /// <summary>
+            /// 璁惧鍒楄〃
+            /// <para>Type=0鏃跺瓨鍦�</para>
+            /// </summary>
+            public List<Safeguard.TaskListInfo> TaskList = new List<Safeguard.TaskListInfo>();
+        }
+        #endregion
+
+        #region 浠庣綉鍏崇殑鍦烘櫙涓Щ闄よ澶�
+        /// <summary>
+        /// 浠庣綉鍏崇殑鍦烘櫙涓Щ闄よ澶�.
+        /// <para>杩斿洖缁撴灉Result/RemoveResult 1锛氱Щ闄ゅけ璐ワ紝鎴愬憳涓嶅瓨鍦ㄥ満鏅腑</para>
+        /// <para>杩斿洖缁撴灉Result/RemoveResult 0锛氱Щ闄ゆ垚鍔熻触</para>
+        /// </summary>
+        /// <returns>The scene member.</returns>
+        /// <param name="scenesId">Scenes identifier.</param>
+        public static async System.Threading.Tasks.Task<RemoveSceneMemberResponseAllData> RemoveSceneMemberAsync(SceneRemoveMemberData sceneRemoveMemberData)
+        {
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                RemoveSceneMemberResponseAllData d = null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new RemoveSceneMemberResponseAllData { errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return d;
+                }
+                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 = mainGateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            d = new RemoveSceneMemberResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+                        else
+                        {
+                            d = new RemoveSceneMemberResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                        }
+                    }
+                    if (topic == gatewayID + "/" + "Scene/RemoveMember_Respon")
+                    {
+                        var scene = new Scene() { DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.CurrentGateWayId };
+                        scene.removeSceneMemberResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<RemoveSceneMemberResponseData>(jobject["Data"].ToString());
+
+                        if (scene.removeSceneMemberResponseData == null)
+                        {
+                            d = new RemoveSceneMemberResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            d = new RemoveSceneMemberResponseAllData { removeSceneMemberResponseData = scene.removeSceneMemberResponseData };
+                            System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+
+                        }
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/RemoveMember_Actions 鍚姩" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+
+                try{
+                    if (sceneRemoveMemberData != null)
+                    {
+                        var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 802 } };
+                        var deviceList = new JArray { };
+                        foreach (var deviceInfo in sceneRemoveMemberData.DeviceList)
+                        {
+                            if (deviceInfo.Type == 0)
+                            {
+                                var dInfo = new JObject{
+                            { "Type", deviceInfo.Type},
+                            { "DeviceAddr",deviceInfo.DeviceAddr},
+                            { "Epoint",deviceInfo.Epoint},
+                            { "DelayTime", deviceInfo.DelayTime} ,
+                            { "MemberNumber",deviceInfo.MemberNumber},
+                            };
+                                deviceList.Add(dInfo);
+                            }
+                            else if (deviceInfo.Type == 1)
+                            {
+                                var dInfo = new JObject{
+                            { "Type", deviceInfo.Type},
+                            { "ElseScenesId",deviceInfo.ElseScenesId},
+                            { "DelayTime", deviceInfo.DelayTime} ,
+                            { "MemberNumber",deviceInfo.MemberNumber},
+                            };
+                                deviceList.Add(dInfo);
+                            }
+                            else if (deviceInfo.Type == 2)
+                            {
+                                var dInfo = new JObject{
+                            { "Type", deviceInfo.Type},
+                           { "DelayTime", deviceInfo.DelayTime} ,
+                           { "MemberNumber",deviceInfo.MemberNumber},
+                            };
+                                deviceList.Add(dInfo);
+                            }
+
+                            }
+
+                        var data = new JObject {
+                    {"ScenesId",sceneRemoveMemberData.ScenesId},
+                    { "DeviceList", deviceList }
+                    };
+                        jObject.Add("Data", data);
+                        mainGateway.Send(("Scene/RemoveMember"),System.Text.Encoding.UTF8.GetBytes(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 RemoveSceneMemberResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                }
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/RemoveMember_Actions 閫�鍑�" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+
+                return d;
+            });
+        }
+        /// <summary>
+        /// 浠庡満鏅腑绉婚櫎鎴愬憳
+        /// </summary>
+        public SceneRemoveMemberData sceneRemoveMemberData;
+        /// <summary>
+        /// 浠庡満鏅腑绉婚櫎鎴愬憳
+        /// </summary>
+        [System.Serializable]
+        public class SceneRemoveMemberData
+        {
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+
+            /// <summary>
+            /// 璁惧鍒楄〃 锛岃绉婚櫎鐨勮澶�
+            /// </summary>
+            public List<RemoveSceneDeviceListInfo> DeviceList = new List<RemoveSceneDeviceListInfo>();
+        }
+
+        /// <summary>
+        /// 绉婚櫎鍦烘櫙鎴愬憳淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class RemoveSceneDeviceListInfo
+        {
+            /// <summary>
+            /// 绉婚櫎鎴愬憳绫诲瀷
+            ///<para >0锛氳澶囨垚鍛�</para>
+            ///<para >1锛氬満鏅垚鍛�</para>
+            ///<para >2锛氬欢鏃剁被鍨�</para>
+            /// </summary>
+            public int Type;
+
+            /// <summary>
+            /// 璁惧mac鍦板潃
+            /// <para>褰揟ype=0鏃跺瓨鍦�</para>
+            /// </summary>
+            public string DeviceAddr;
+
+            /// <summary>
+            /// 璁惧绔彛鍙�
+            /// 褰揟ype=0鏃跺瓨鍦�
+            /// </summary>
+            public int Epoint;
+
+            /// <summary>
+            /// 鍦烘櫙鎴愬憳id
+            /// 褰揟ype=1鏃跺瓨鍦�
+            /// </summary>
+            public int ElseScenesId;
+
+            /// <summary>
+            /// 寤舵椂鎵ц鏃堕棿锛屽崟浣嶇
+            /// 褰揟ype=2鏃跺瓨鍦�
+            /// </summary>
+            public int DelayTime;
+            /// <summary>
+            /// 寤舵椂鎵ц搴忓彿锛岃〃绀哄欢鏃剁储寮�
+            ///褰揟ype=2鏃跺瓨鍦�
+            /// </summary>
+            public int MemberNumber;
+        }
+
+        /// <summary>
+        ///  绉婚櫎鍦烘櫙鎴愬憳淇℃伅鍙嶉,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        public RemoveSceneMemberResponseAllData removeSceneMemberResponseAllData;
+        /// <summary>
+        ///  绉婚櫎鍦烘櫙鎴愬憳淇℃伅鍙嶉,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class RemoveSceneMemberResponseAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 绉婚櫎鍦烘櫙鎴愬憳淇℃伅鍙嶉
+            /// </summary>
+            public RemoveSceneMemberResponseData removeSceneMemberResponseData;
+        }
+
+        /// <summary>
+        /// 绉婚櫎鍦烘櫙鎴愬憳淇℃伅鍙嶉
+        /// </summary>
+        public RemoveSceneMemberResponseData removeSceneMemberResponseData;
+        /// <summary>
+        /// 绉婚櫎鍦烘櫙鎴愬憳淇℃伅鍙嶉
+        /// </summary>
+        [System.Serializable]
+        public class RemoveSceneMemberResponseData
+        {
+            /// <summary>
+            /// 0 绉婚櫎鎴愬姛
+            ///<para>1 鍦烘櫙ID涓嶅瓨鍦�</para>
+            /// </summary>
+            public int Result = 2;
+
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+            /// <summary>
+            /// 绉婚櫎璁惧鍒楄〃 锛孯esult=0鏃跺瓨鍦ㄣ��
+            /// </summary>
+            public List<RemoveSceneDeviceListResponseInfo> RemoveList = new List<RemoveSceneDeviceListResponseInfo>();
+        }
+
+        /// <summary>
+        /// 绉婚櫎鍦烘櫙鎴愬憳淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class RemoveSceneDeviceListResponseInfo
+        {
+            /// <summary>
+            /// 0锛氱Щ闄ゆ垚鍔�
+            ///<para >1锛氱Щ闄ゅけ璐ワ紝鎴愬憳涓嶅瓨鍦ㄥ満鏅腑</para>
+            /// </summary>
+            public int RemoveResult = 999;
+            /// <summary>
+            /// 绉婚櫎鎴愬憳绫诲瀷
+            ///<para >0锛氳澶囨垚鍛�</para>
+            ///<para >1锛氬叾浠栧満鏅�</para>
+            /// </summary>
+            public int Type;
+
+            /// <summary>
+            /// 璁惧mac鍦板潃
+            /// <para>褰揟ype=0鏃跺瓨鍦�</para>
+            /// </summary>
+            public string DeviceAddr;
+
+            /// <summary>
+            /// 璁惧绔彛鍙� 褰揟ype=0鏃跺瓨鍦�
+            /// </summary>
+            public int Epoint;
+
+            /// <summary>
+            /// 鍦烘櫙鎴愬憳id锛屽綋Type=1鏃跺瓨鍦�
+            /// </summary>
+            public int ElseScenesId;
+        }
+        #endregion
+
+        #region  淇敼鍦烘櫙鍚嶇О
+        ///<summary >
+        /// 淇敼鍦烘櫙鍚嶇О.
+        /// </summary>
+        public static async System.Threading.Tasks.Task<SceneRenameResponseAllData> RenameSceneAsync(int scenesId, string scenesName)
+        {
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                SceneRenameResponseAllData d = null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new SceneRenameResponseAllData { errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return d;
+                }
+                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 = mainGateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            d = new SceneRenameResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+                        else
+                        {
+                            d = new SceneRenameResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                        }
+                    }
+
+                    if (topic == gatewayID + "/" + "Scene/Rename_Respon")
+                    {
+                        var scene = new Scene() { DataID = jobject.Value<int>("DataID"), GateWayId = mainGateway.CurrentGateWayId };
+                        scene.sceneRenameResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneRenameResponseData>(jobject["Data"].ToString());
+
+                        if (scene.sceneRenameResponseData == null)
+                        {
+                            d = new SceneRenameResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            d = new SceneRenameResponseAllData { sceneRenameResponseData = scene.sceneRenameResponseData };
+                            System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+
+                        }
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/Rename_Actions 鍚姩" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+                try{
+                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 804 } };
+                    var data = new JObject { { "ScenesId", scenesId }, { "ScenesName", scenesName } };
+                    jObject.Add("Data", data);
+                    mainGateway.Send(("Scene/Rename"),System.Text.Encoding.UTF8.GetBytes(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 SceneRenameResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                }
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/Rename_Actions 閫�鍑�" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+
+                return d;
+            });
+        }
+
+        /// <summary>
+        /// 淇敼鍦烘櫙鍚嶇О,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        public SceneRenameResponseAllData sceneRenameResponseAllData;
+        ///<summary >
+        /// 淇敼鍦烘櫙鍚嶇О
+        /// </summary>
+        [System.Serializable]
+        public class SceneRenameResponseAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 淇敼鍦烘櫙鍚嶇О
+            /// </summary>
+            public SceneRenameResponseData sceneRenameResponseData;
+        }
+
+        ///<summary >
+        /// 淇敼鍦烘櫙鍚嶇О
+        /// </summary>
+        public SceneRenameResponseData sceneRenameResponseData;
+        ///<summary >
+        /// 淇敼鍦烘櫙鍚嶇О
+        /// </summary>
+        [System.Serializable]
+        public class SceneRenameResponseData
+        {
+            /// <summary>
+            ///缁撴灉
+            ///<para>0 淇敼澶辫触</para>
+            ///<para>1 淇敼鎴愬姛</para>
+            ///<para>2 娌℃湁鍦ㄨ鍦烘櫙</para>
+            /// </summary>
+            public int Result=999;
+
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+
+            /// <summary>
+            /// 鍦烘櫙鍚嶇О
+            /// </summary>
+            public string ScenesName;
+        }
+        #endregion
+
+        #region  鍒犻櫎鍦烘櫙
+        ///<summary >
+        /// 鍒犻櫎鍦烘櫙
+        /// <para>杩斿洖缁撴灉 0 绉婚櫎澶辫触</para>
+        ///<para>杩斿洖缁撴灉 1 绉婚櫎鎴愬姛</para>
+        ///<para>杩斿洖缁撴灉 2 娌℃湁璇ュ満鏅�</para>
+        /// </summary>
+        public static async System.Threading.Tasks.Task<RemoveSceneAllData> DeleteSceneAsync(int scenesId)
+        {
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                RemoveSceneAllData d =null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new RemoveSceneAllData { errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return d;
+                }
+                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 = mainGateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            d = new RemoveSceneAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+                        else
+                        {
+                            d = new RemoveSceneAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                        }
+                    }
+
+                    if (topic == gatewayID + "/" + "Scene/Remove_Respon")
+                    {
+                        var scene = new Scene() { DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.CurrentGateWayId };
+                        scene.removeSceneData = Newtonsoft.Json.JsonConvert.DeserializeObject<RemoveSceneData>(jobject["Data"].ToString());
+                        if (scene.removeSceneData == null)
+                        {
+                            d = new RemoveSceneAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                            return;
+                        }
+                        else
+                        {
+                            for (int listCount = 0; listCount < ZigBee.Device.ZbGateway.AllSceneList.Count; listCount++)
+                            {
+                                var sc = ZbGateway.AllSceneList[listCount];
+
+                                if (scene.removeSceneData.ScenesId == sc.ScenesId)
+                                {
+                                    ZigBee.Device.ZbGateway.AllSceneList.RemoveAt(listCount);
+                                    listCount--;
+                                }
+                            }
+                            d = new RemoveSceneAllData { removeSceneData = scene.removeSceneData };
+                            System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+
+                        }
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/Remove_Actions 鍚姩" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+                try{
+                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 803 } };
+                    var data = new JObject { { "ScenesId", scenesId } };
+                    jObject.Add("Data", data);
+                    mainGateway.Send(("Scene/Remove"),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 RemoveSceneAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                }
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/Remove_Actions 閫�鍑�" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+
+                return d;
+            });
+        }
+
+        /// <summary>
+        /// 绉婚櫎鍦烘櫙,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        public RemoveSceneAllData removeSceneAllData;
+        /// <summary>
+        /// 绉婚櫎鍦烘櫙,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class RemoveSceneAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 绉婚櫎鍦烘櫙
+            /// </summary>
+            public RemoveSceneData removeSceneData;
+        }
+
+        /// <summary>
+        /// 绉婚櫎鍦烘櫙鏁版嵁
+        /// </summary>
+        public RemoveSceneData removeSceneData;
+        /// <summary>
+        /// 绉婚櫎鍦烘櫙鏁版嵁
+        /// </summary>
+        [System.Serializable]
+        public class RemoveSceneData
+        {
+            /// <summary>
+            ///0 绉婚櫎澶辫触
+            ///<para>1 绉婚櫎鎴愬姛</para>
+            ///<para>2 娌℃湁璇ュ満鏅�</para>
+            /// </summary>
+            public int Result=999;
+
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+        }
+        #endregion
+
+        #region  璋冪敤鍦烘櫙
+        ///<summary >
+        ///璋冪敤鍦烘櫙
+        /// <para>DelayTime:寤舵椂鎵ц鏃堕棿锛屽崟浣嶇</para>
+        /// </summary>
+        public static async System.Threading.Tasks.Task<SceneOpenAllData> ControlSceneAsync(int ScenesId,int delayTime)
+        {
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                SceneOpenAllData d = null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new SceneOpenAllData { errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return d;
+                }
+                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 = mainGateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            d = new SceneOpenAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                        }
+                        else
+                        {
+                            d = new SceneOpenAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                        }
+                    }
+
+                    if (topic == gatewayID + "/" + "Scene/Open_Respon")
+                    {
+                        var scene = new Scene() { DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.CurrentGateWayId };
+                        scene.sceneOpen = Newtonsoft.Json.JsonConvert.DeserializeObject<SceneOpenData>(jobject["Data"].ToString());
+                        if (scene.sceneOpen == null)
+                        {
+                            d = new SceneOpenAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            d = new SceneOpenAllData { sceneOpenData = scene.sceneOpen };
+                            System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+
+                        }
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/Open_Actions 鍚姩" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+                try{
+                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 821 } };
+                    var data = new JObject { { "ScenesId", ScenesId }, { "DelayTime", delayTime } };
+                    jObject.Add("Data", data);
+                    mainGateway.Send(("Scene/Open"),System.Text.Encoding.UTF8.GetBytes(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 SceneOpenAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                }
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/Open_Actions閫�鍑�" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+
+                return d;
+            });
+        }
+
+        /// <summary>
+        /// 璋冪敤鍦烘櫙,缃戝叧鍙嶉淇℃伅
+        /// <para>杩斿洖Result 0锛氳皟鐢ㄥけ璐�</para>
+        ///<para>Result 1锛氳皟鐢ㄦ垚鍔�<para>
+        /// </summary>
+        public SceneOpenAllData sceneOpenAllData;
+        /// <summary>
+        /// 璋冪敤鍦烘櫙,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class SceneOpenAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 璋冪敤鍦烘櫙
+            /// </summary>
+            public SceneOpenData sceneOpenData;
+        }
+
+        ///<summary >
+        /// 璋冪敤鍦烘櫙
+        /// </summary>
+        public SceneOpenData sceneOpen;
+        ///<summary >
+        /// 璋冪敤鍦烘櫙
+        /// </summary>
+        [System.Serializable]
+        public class SceneOpenData
+        {
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+
+            /// <summary>
+            ///缁撴灉
+            ///<para>Result 0锛氳皟鐢ㄥけ璐�</para>
+            ///<para>Result 1锛氳皟鐢ㄦ垚鍔�<para>
+            /// </summary>
+            public int Result=999;
+
+            /// <summary>
+            /// 寤舵椂鏃堕棿
+            /// </summary>
+            public int DelayTime;
+
+        }
+        #endregion
+
+        #region 鏌ョ湅姝e湪寤舵椂鐨勫満鏅�
+        /// <summary>
+        /// 鏌ョ湅姝e湪寤舵椂鐨勫満鏅�.
+        /// </summary>
+        public static async System.Threading.Tasks.Task<CatDelaySceneResponseAllData> CatDelaySceneAsync()
+        {
+            return await System.Threading.Tasks.Task.Run(async () =>
+            {
+                CatDelaySceneResponseAllData d = null;
+                var mainGateway = ZbGateway.MainGateWay;
+                if (mainGateway == null)
+                {
+                    d = new CatDelaySceneResponseAllData { errorMessageBase = "褰撳墠娌℃湁涓荤綉鍏�" };
+                    return d;
+                }
+                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 = mainGateway.getGatewayBaseInfo.gwID };
+                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ErrorResponData>(jobject["Data"].ToString());
+
+                        if (temp == null)
+                        {
+                            d = new CatDelaySceneResponseAllData { errorMessageBase = "缃戝叧閿欒鍥炲锛屼笖鏁版嵁鏄┖" };
+                         }
+                        else
+                        {
+                            d = new CatDelaySceneResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
+                         }
+                    }
+                    if (topic == gatewayID + "/" + "Scene/CatDelayScene_Respon")
+                    {
+                        var scene = new Scene() { DataID = jobject.Value<int>("Data_ID"), GateWayId = mainGateway.CurrentGateWayId };
+                        scene.catDelaySceneResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<CatDelaySceneResponseData>(jobject["Data"].ToString());
+
+                        if (scene.catDelaySceneResponseData == null)
+                        {
+                            d = new CatDelaySceneResponseAllData { errorMessageBase = "缃戝叧杩斿洖鐨勬暟鎹负绌�" };
+                        }
+                        else
+                        {
+                            d = new CatDelaySceneResponseAllData { catDelaySceneResponseData = scene.catDelaySceneResponseData };
+                            System.Console.WriteLine($"UI鏀跺埌閫氱煡鍚庣殑涓婚_{ topic}");
+                        }
+                    }
+                };
+                mainGateway.Actions += action;
+                System.Console.WriteLine("Scene/CatDelayScene_Actions 鍚姩" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+                try
+                {
+                    var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 811 } };
+                    mainGateway.Send(("Scene/CatDelayScene"),System.Text.Encoding.UTF8.GetBytes(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 CatDelaySceneResponseAllData { errorMessageBase = " 鍥炲瓒呮椂锛岃閲嶆柊鎿嶄綔" };
+                  }
+                mainGateway.Actions -= action;
+                System.Console.WriteLine("Scene/CatDelayScene_Actions 閫�鍑�" + "_" + mainGateway.getGatewayBaseInfo.gwID + System.DateTime.Now.ToString());
+
+                return d;
+            });
+        }
+
+        /// <summary>
+        ///  鏌ョ湅姝e湪寤舵椂鐨勫満鏅俊鎭俊鎭弽棣�,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        public CatDelaySceneResponseAllData catDelaySceneResponseAllData;
+        /// <summary>
+        ///  鏌ョ湅姝e湪寤舵椂鐨勫満鏅俊鎭弽棣�,缃戝叧鍙嶉淇℃伅
+        /// </summary>
+        [System.Serializable]
+        public class CatDelaySceneResponseAllData
+        {
+            /// <summary>
+            /// 閿欒淇℃伅
+            /// </summary>
+            public string errorMessageBase;
+            /// <summary>
+            /// 缃戝叧淇℃伅閿欒鍙嶉
+            /// <para>褰撶綉鍏虫帴鏀跺埌瀹㈡埛绔俊鎭悗锛屽嚭鐜颁互涓嬪紓甯告儏鍐靛皢鍙嶉閿欒銆�</para>
+            /// </summary>
+            public ErrorResponData errorResponData;
+            /// <summary>
+            /// 鏌ョ湅姝e湪寤舵椂鐨勫満鏅俊鎭俊鎭弽棣�
+            /// </summary>
+            public CatDelaySceneResponseData catDelaySceneResponseData;
+        }
+
+        /// <summary>
+        /// 鏌ョ湅姝e湪寤舵椂鐨勫満鏅俊鎭弽棣�
+        /// </summary>
+        public CatDelaySceneResponseData catDelaySceneResponseData;
+        /// <summary>
+        /// 鏌ョ湅姝e湪寤舵椂鐨勫満鏅俊鎭弽棣�
+        /// </summary>
+        [System.Serializable]
+        public class CatDelaySceneResponseData
+        {
+            /// <summary>
+            /// 姝e湪寤舵椂鎵ц鐨勫満鏅�
+            /// </summary>
+            public List<DelayScenesListResponseInfo> DelayScenesList = new List<DelayScenesListResponseInfo>();
+        }
+
+        /// <summary>
+        /// 姝e湪寤舵椂鎵ц鐨勫満鏅俊鎭�
+        /// </summary>
+        [System.Serializable]
+        public class DelayScenesListResponseInfo
+        {
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId ;
+            /// <summary>
+            /// 寤舵椂鏃堕棿
+            /// </summary>
+            public int DelayTime;
+
+            /// <summary>
+            /// 鍓╀綑瑙﹀彂鏃堕棿锛屽崟浣嶇
+            /// </summary>
+            public int RemainTime;
+        }
+        #endregion
+
+        ///<summary >
+        /// 鍦烘櫙琚牬鍧忓弽棣�
+        /// </summary>
+        public SceneBreak sceneBreak;
+        ///<summary >
+        /// 鍦烘櫙琚牬鍧忓弽棣�
+        /// </summary>
+        [System.Serializable]
+        public class SceneBreak
+        {
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+
+        }
+
+        ///<summary >
+        /// 鍦烘櫙鍔ㄤ綔琚墽琛岄�氱煡
+        /// </summary>
+        public SceneExecRespon sceneExecRespon;
+        ///<summary >
+        /// 鍦烘櫙鍔ㄤ綔琚墽琛岄�氱煡
+        /// </summary>
+        [System.Serializable]
+        public class SceneExecRespon
+        {
+            /// <summary>
+            /// 鍦烘櫙ID
+            /// </summary>
+            public int ScenesId;
+
+        }
+
+        //public static string SceneFilePath = "SceneFile";
+
+        //static Scene()
+        //{
+        //    if (null == Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(Encoding.UTF8.GetString(Shared.IO.FileUtils.ReadFile(SceneFilePath))))
+        //    {
+        //        //鍒濆鍖栧満鏅垪琛�
+        //        Shared.IO.FileUtils.WriteFileByBytes(SceneFilePath, System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(new List<string>())));
+        //    }
+        //}
+
+        ///// <summary>
+        ///// 淇濆瓨褰撳墠鍦烘櫙
+        ///// </summary>
+        ///// <param name="scenceFilePath">Scence file path.</param>
+        //public void Save(string scenceFilePath)
+        //{
+        //    Shared.IO.FileUtils.WriteFileByBytes(scenceFilePath, System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)));
+        //}
+
+        /// <summary>
+        /// 鏍规嵁鍦烘櫙璺緞鎭㈠鍦烘櫙瀵硅薄
+        /// </summary>
+        /// <returns>The by file path.</returns>
+        /// <param name="sceneFilePath">Room file path.</param>
+        //public static Scene GetSceneByFilePath(string sceneFilePath)
+        //{
+        //    try
+        //    {
+        //        return Newtonsoft.Json.JsonConvert.DeserializeObject<Scene>(System.Text.Encoding.UTF8.GetString(Shared.IO.FileUtils.ReadFile(sceneFilePath)));
+        //    }
+        //    catch
+        //    {
+        //        return new Scene();
+        //    }
+        //}
+
+        /// <summary>
+        /// 鍦烘櫙鏍囪瘑
+        /// </summary>
+        //public bool SceneLabel = false;
+
+        /// <summary>
+        /// 鎺у埗鐩爣鐨勬枃浠惰矾寰�,鏍煎紡濡傦細RoomScene_+DeviceID_Mac_Epoint
+        /// </summary>
+        //public readonly List<string> DeviceFilePathList = new List<string>();
+
+        /// <summary>
+        /// 鍦烘櫙鐨勮儗鏅浘
+        /// </summary>
+        //public string BackgroundImagePath = "Scene/s1.png";
+
+        /// <summary>
+        /// 鍦烘櫙涓殑璁惧鍒楄〃
+        /// </summary>
+        //[Newtonsoft.Json.JsonIgnore]
+        //public List<Scene> sceneDeviceList = new List<Scene>();
+
+        //[Newtonsoft.Json.JsonIgnore]
+        //public List<Scene> LocalSceneList = new List<Scene>();
+
+        //public SceneId SceneID;
+
+        ///<summary >
+        /// 浠庣綉鍏崇殑鍦烘櫙涓Щ闄よ澶�
+        /// </summary>
+        //public static void SceneRemoveMember1(ZigBee.Device.ZbGateway gateway, int ScenesId, string DeviceAddr, int Epoint)
+        //{
+        //    var jobject = new JObject { { "Cluster_ID", 0 }, { "Command", 802 } };
+        //    var DeviceList = new JArray
+        //                        {
+        //                            new JObject {
+        //                                { "Type", 0},
+        //                                { "DeviceAddr",DeviceAddr},
+        //                                { "Epoint",Epoint}
+        //                            }
+        //                        };
+        //    var data = new JObject {
+        //        {"ScenesId",ScenesId},
+        //                            { "DeviceList", DeviceList }
+        //                        };
+        //    jobject.Add("Data", data);
+        //    gateway.Send(("Scene/RemoveMember"), Common.SecuritySet.Encryption((jobject.ToString())));
+
+        //}
+
+        ///<summary >
+        /// 鍒犻櫎鍦烘櫙
+        /// </summary>
+        //public static void SceneRemove1(ZigBee.Device.ZbGateway gateway, int scenesId)
+        //{
+        //    var jobject = new JObject { { "Cluster_ID", 0 }, { "Command", 803 } };
+        //    var data = new JObject { { "ScenesId", scenesId } };
+        //    jobject.Add("Data", data);
+        //    gateway.Send(("Scene/Remove"), Common.SecuritySet.Encryption((jobject.ToString())));
+        //}
+
+        ///<summary >
+        /// 淇敼鍦烘櫙鍚嶇О
+        /// </summary>
+        //public static void SceneRename1(ZigBee.Device.ZbGateway gateway, int scenesId, string scenesName)
+        //{
+        //    var jobject = new JObject { { "Cluster_ID", 0 }, { "Command", 804 } };
+        //    var data = new JObject { { "ScenesId", scenesId }, { "ScenesName", scenesName } };
+        //    jobject.Add("Data", data);
+        //    gateway.Send(("Scene/Rename"), Common.SecuritySet.Encryption((jobject.ToString())));
+        //}
+
+        ///<summary >
+        /// 鑾峰彇缃戝叧涓満鏅俊鎭�
+        /// </summary>
+        //public static void SceneGetInfo1(ZigBee.Device.ZbGateway gateway)
+        //{
+        //    var jobject = new JObject { { "Cluster_ID", 0 }, { "Command", 805 } };
+        //    gateway.Send(("Scene/GetInfo"), Common.SecuritySet.Encryption((jobject.ToString())));
+        //}
+
+        ///<summary >
+        ///鑾峰彇缃戝叧涓満鏅殑璁惧鍒楄〃
+        /// </summary>
+        //public static void SceneGetDeviceList1(ZigBee.Device.ZbGateway gateway, int ScenesId)
+        //{
+        //    var jobject = new JObject { { "Cluster_ID", 0 }, { "Command", 806 } };
+        //    var data = new JObject { { "ScenesId", ScenesId } };
+        //    jobject.Add("Data", data);
+        //    gateway.Send(("Scene/GetDeviceList"), Common.SecuritySet.Encryption((jobject.ToString())));
+        //}
+
+        ///<summary >
+        /// 鑾峰彇鎵�鏈夊満鏅俊鎭紙鍖呮嫭鍦烘櫙璁惧鍒楄〃锛�
+        /// </summary>
+        //public static void SceneGetAllInfo1(ZigBee.Device.ZbGateway gateway)
+        //{
+        //    var jobject = new JObject { { "Cluster_ID", 0 }, { "Command", 807 } };
+        //    gateway.Send(("Scene/GetAllInfo"), Common.SecuritySet.Encryption((jobject.ToString())));
+        //}
+
+        ///<summary >
+        ///璋冪敤鍦烘櫙
+        /// </summary>
+        //public static void SceneOpen1(ZigBee.Device.ZbGateway gateway, int ScenesId)
+        //{
+        //    var jobject = new JObject { { "Cluster_ID", 0 }, { "Command", 808 } };
+        //    var data = new JObject { { "ScenesId", ScenesId } };
+        //    jobject.Add("Data", data);
+        //    gateway.Send(("Scene/Open"), Common.SecuritySet.Encryption((jobject.ToString())));
+        //}
+    }
+}

--
Gitblit v1.8.0