From b079d370b3c23751a5d200dc2d25f6c80977b4d4 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期五, 11 三月 2022 15:03:50 +0800
Subject: [PATCH] 代码同步

---
 HDL_ON/UI/UI2/FuntionControlView/Electrical/AirSwitchPage.cs                   |   20 
 HDL-ON_Android/Properties/AndroidManifest.xml                                  |    2 
 HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs                                      |   12 
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                                           |    1 
 HDL-ON_Android/Assets/Language.ini                                             |   17 
 HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs                      |    6 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerSetTimePage.cs        |   40 +
 HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs               |   94 ++
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPageBLL.cs                       |   10 
 HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs                        |   48 
 HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs                                        |   60 +
 HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs                 |  127 ++-
 HDL-ON_iOS/Info.plist                                                          |    4 
 HDL-ON_iOS/Resources/Language.ini                                              |    8 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs                      |   20 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs               |   12 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWaterValvePage.cs              |   20 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotConsumablesMagPage.cs |   10 
 HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs              |  157 ++-
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs                 |   55 +
 HDL_ON/DAL/DriverLayer/Control.cs                                              |   84 ++
 HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs                       |  118 ++
 SiriIntents/Server/HttpUtil.cs                                                 |    4 
 HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/FunAllAreaView.cs            |    1 
 HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePageBLL.cs               |   27 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs           |   18 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs                 |  113 ++
 HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs                           |  115 ++-
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaFanPage.cs                     |   49 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs      |   18 
 HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPageBLL.cs                |  216 +++--
 HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs                         |   20 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/StbPage.cs                         |  223 +++++
 HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs                      |   45 
 HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs                             |   36 
 HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs                          |   18 
 HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockListPage.cs                  |    4 
 HDL_ON/DAL/Server/HttpUtil.cs                                                  |    4 
 HDL_ON/Common/UserInfo.cs                                                      |   11 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/IrLearnPage.cs                     |   11 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaAirCleanerPage.cs              |   60 +
 HDL_ON/Common/R.cs                                                             |    6 
 HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs          |    4 
 HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs            |   10 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/PjtPage.cs                         |  135 +++
 45 files changed, 1,640 insertions(+), 433 deletions(-)

diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index 80c64ae..ddab725 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -514,7 +514,12 @@
 526=Cancel account
 527=Homekit support notes
 528=Firmware update
- 
+529=
+530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
+531=Password free unlocking within five minutes
+532=The device is offline and cannot be operated temporarily
+
+
 1000=Room Humidity
 1001=V-chip
 1002=Anion
@@ -1650,6 +1655,10 @@
 526=娉ㄩ攢璐﹀彿
 527=鏀寔HomeKit璇存槑
 528=鍥轰欢鏇存柊
+529=
+530=涓洪槻姝㈠紑鍏抽棬鐨勮瑙︾偣鍑伙紝淇濊瘉瀹跺涵瀹夊叏锛岃杈撳叆鎮ㄧ殑闂ㄩ攣寮�闂ㄥ瘑鐮併��
+531=浜斿垎閽熷唴鍏嶅瘑鐮佸紑閿�
+532=璁惧绂荤嚎涓紝鏆傛椂鏃犳硶鎿嶄綔
  
 1000=瀹ゅ唴婀垮害
 1001=绔ラ攣
@@ -2768,6 +2777,12 @@
 526=邪薪薪褍谢懈褉芯胁邪褌褜 褋褔褢褌
 527=懈薪褋褌褉褍泻褑懈褟 锌芯 锌芯写写械褉卸泻械 薪邪斜芯褉邪 懈薪褋褌褉褍屑械薪褌邪谢褜薪褘褏 褋褉械写褋褌胁 写谢褟 褋械屑械泄
 528=芯斜薪芯胁谢械薪懈械 锌褉芯褕懈胁泻懈
+529=
+530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
+531=Password free unlocking within five minutes
+532=The device is offline and cannot be operated temporarily
+
+
 
 1000=袙谢邪卸薪芯褋褌褜 胁 袩芯屑械褖械薪懈懈
 1001=V-芯斜褉邪蟹薪褘泄 褔懈锌
diff --git a/HDL-ON_Android/Properties/AndroidManifest.xml b/HDL-ON_Android/Properties/AndroidManifest.xml
index 7580d19..bdc6cdf 100644
--- a/HDL-ON_Android/Properties/AndroidManifest.xml
+++ b/HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202203081" android:versionName="1.5.5" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202203111" android:versionName="1.5.5" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools">
 	<uses-sdk android:minSdkVersion="28" android:targetSdkVersion="30" />
 	<!--鍙嬬洘-->
 	<!--<uses-sdk android:minSdkVersion="8"></uses-sdk>-->
diff --git a/HDL-ON_iOS/Info.plist b/HDL-ON_iOS/Info.plist
index 7f88fff..fa24946 100644
--- a/HDL-ON_iOS/Info.plist
+++ b/HDL-ON_iOS/Info.plist
@@ -100,9 +100,9 @@
 	<key>UIStatusBarStyle</key>
 	<string>UIStatusBarStyleLightContent</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.5.502203081</string>
+	<string>1.5.502203111</string>
 	<key>CFBundleVersion</key>
-	<string>1.5.503081</string>
+	<string>1.5.503111</string>
 	<key>NSLocationWhenInUseUsageDescription</key>
 	<string>Use geographic location to provide services such as weather</string>
 	<key>NSAppleMusicUsageDescription</key>
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 56130ad..ddab725 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -516,6 +516,9 @@
 528=Firmware update
 529=
 530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
+531=Password free unlocking within five minutes
+532=The device is offline and cannot be operated temporarily
+
 
 1000=Room Humidity
 1001=V-chip
@@ -1655,6 +1658,7 @@
 529=
 530=涓洪槻姝㈠紑鍏抽棬鐨勮瑙︾偣鍑伙紝淇濊瘉瀹跺涵瀹夊叏锛岃杈撳叆鎮ㄧ殑闂ㄩ攣寮�闂ㄥ瘑鐮併��
 531=浜斿垎閽熷唴鍏嶅瘑鐮佸紑閿�
+532=璁惧绂荤嚎涓紝鏆傛椂鏃犳硶鎿嶄綔
  
 1000=瀹ゅ唴婀垮害
 1001=绔ラ攣
@@ -2775,6 +2779,10 @@
 528=芯斜薪芯胁谢械薪懈械 锌褉芯褕懈胁泻懈
 529=
 530=In order to prevent the wrong touch and click of opening and closing the door and ensure family safety, please enter your door lock password.
+531=Password free unlocking within five minutes
+532=The device is offline and cannot be operated temporarily
+
+
 
 1000=袙谢邪卸薪芯褋褌褜 胁 袩芯屑械褖械薪懈懈
 1001=V-芯斜褉邪蟹薪褘泄 褔懈锌
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index bb6fa70..4d9b039 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -4,6 +4,12 @@
 {
     public static class StringId
     {
+
+
+        /// <summary>
+        /// 璁惧绂荤嚎涓紝鏆傛椂鏃犳硶鎿嶄綔
+        /// </summary>
+        public const int DeviceOfflineCannotOption = 532;
         /// <summary>
         /// 浜斿垎閽熷唴鍏嶅瘑鐮佸紑閿�
         /// </summary>
diff --git a/HDL_ON/Common/UserInfo.cs b/HDL_ON/Common/UserInfo.cs
index 2f98571..b7a8838 100644
--- a/HDL_ON/Common/UserInfo.cs
+++ b/HDL_ON/Common/UserInfo.cs
@@ -172,6 +172,17 @@
         [Newtonsoft.Json.JsonIgnore]
         public string doorPasswordString;
 
+        /// <summary>
+        /// 璁板綍鑷姩鍖栫瓫閫夌殑鎴块棿鐨勬潯浠�
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public Entity.Room logicselectedRoom = new Entity.Room { roomId = "6688",roomName = Language.StringByID(StringId.allAreas) };
+        /// <summary>
+        /// 璁板綍鑷姩鍖栫瓫閫夌殑鍔熻兘鐨勬潯浠�
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public string logicselectedFunction;
+
         #endregion
 
         /// <summary>
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index 5bcab7f..80397b6 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -360,10 +360,11 @@
         /// <param name="function"></param>
         /// <param name="useRemote">鏄惁鐩存帴浣跨敤杩滅▼鍙戦��</param>
         /// <returns></returns>
-        public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3)
+        public bool SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3)
         {
             function.controlCounter++;
             function.refreshTime = DateTime.Now;
+
 
             //濡傛灉鏄帶鍒惰皟鍏夌殑寮�鏃讹紝浜害鍊间笉鑳戒负0
             if (commandDictionary.Count > 2)
@@ -404,7 +405,7 @@
                 upDataObj.objects.Add(asd);
                 revString = Newtonsoft.Json.JsonConvert.SerializeObject(upDataObj);
                 UpdataFunctionStatus(revString, null, true);
-                return;
+                return true;
             }
 
 
@@ -493,6 +494,8 @@
                 }
 
             }
+
+            return true;
         }
         /// <summary>
         /// 鍏ㄥ紑鍏ㄥ叧鍔熻兘
@@ -1232,13 +1235,80 @@
             }
             else
             {
-                Dictionary<string, object> d = new Dictionary<string, object>();
-                d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
-                d.Add("deviceId", doorlock.deviceId);
-                var requestJson = HttpUtil.GetSignRequestJson(d);
-                var pack = HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/remoteOpen", requestJson);
+                ConfirmUnlocking(doorlock.deviceId, extStr);
             }
         }
+        /// <summary>
+        /// 纭寮�閿�
+        /// </summary>
+        /// <param name="functionId"></param>
+        /// <param name="pwd"></param>
+        public void ConfirmUnlocking(string functionId,string pwd)
+        {
+            Loading loading = new Loading();
+            MainPage.BaseView.AddChidren(loading);
+            loading.BackgroundColor = 0x88000000;
+            loading.LodingBackgroundColor = UI.CSS.CSS_Color.BackgroundColor;
+            loading.Start(Language.StringByID(StringId.PleaseWait));
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    Dictionary<string, object> d = new Dictionary<string, object>();
+                    d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+                    d.Add("deviceId", functionId);
+                    d.Add("pwd", pwd);
+                    var requestJson = HttpUtil.GetSignRequestJson(d);
+                    var pack = HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/pwdConfirm", requestJson);
+                    if (pack.Code == StateCode.SUCCESS)
+                    {
+                        Newtonsoft.Json.Linq.JObject pairs = Newtonsoft.Json.Linq.JObject.Parse(pack.Data.ToString());
+                        var scrip = pairs.GetValue("scrip");
+
+                        d = new Dictionary<string, object>();
+                        d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+                        d.Add("deviceId", functionId);
+                        d.Add("scrip", scrip);
+                        requestJson = HttpUtil.GetSignRequestJson(d);
+                        pack = HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/remoteOpen", requestJson);
+                        //if(pack.Code == StateCode.SUCCESS)
+                        //{
+                        //    return true;
+                        //}
+                        //else
+                        //{
+                        //    return false;
+                        //}
+                        if (pack.Code != StateCode.SUCCESS) {
+                            Application.RunOnMainThread(() => {
+                                new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), pack.message);
+                                UserInfo.Current.doorPasswordString = "";//
+                                UserInfo.Current.LastTimeOpenDoor = DateTime.MinValue;
+                            });
+                        }
+                    }
+                    if (pack.Code != StateCode.SUCCESS)
+                    {
+                        Application.RunOnMainThread(() => {
+                            new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), pack.message);
+                        });
+                    }
+                }
+                catch (Exception ex)
+                {
+
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loading.Hide();
+                        loading.RemoveFromParent();
+                    });
+                }
+            })
+            { IsBackground = true }.Start();
+        }
         //瀵嗙爜鍐荤粨
         //瀵嗙爜楠岃瘉
 
diff --git a/HDL_ON/DAL/Server/HttpUtil.cs b/HDL_ON/DAL/Server/HttpUtil.cs
index 4917487..72fa068 100644
--- a/HDL_ON/DAL/Server/HttpUtil.cs
+++ b/HDL_ON/DAL/Server/HttpUtil.cs
@@ -17,8 +17,8 @@
         /// 鍥哄畾鍩熷悕,姝e紡鐜
         /// 鍏叡鍩熷悕灏辫繎瑙f瀽
         /// </summary>
-        public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
-        //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm
+        //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
+        public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm
         /// <summary>
         /// RegionMark
         /// </summary>
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
index 5e0a123..6438837 100644
--- a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -125,11 +125,11 @@
                         break;
                     case SPK.MusicStandard:
                     case SPK.AvMusic:
-                        Music.A31MusicModel.Current.functionMusic =function;//褰撳墠鎾斁鍣�
-                        var a31PlayMusicPage = new Music.A31PlayMusicPage();
-                        MainPage.BasePageView.AddChidren(a31PlayMusicPage);
-                        a31PlayMusicPage.Show();
-                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                        //Music.A31MusicModel.Current.functionMusic =function;//褰撳墠鎾斁鍣�
+                        //var a31PlayMusicPage = new Music.A31PlayMusicPage();
+                        //MainPage.BasePageView.AddChidren(a31PlayMusicPage);
+                        //a31PlayMusicPage.Show();
+                        //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                         break;
                     case SPK.LightCCT:
                         var TureView = new ColorTureLampPage(function);
@@ -197,7 +197,7 @@
                         airFresh2.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                         break;
                     case SPK.DoorLock:
-                        var doorLockPage = new DoorLockListPage();
+                        var doorLockPage = new DoorLockPage();
                         doorLockPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                         break;
                 }
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index 7d7fdbe..2d42531 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -869,6 +869,7 @@
                     //闊充箰妯″潡鏈変富浠庡叧绯伙紝闇�瑕佺壒娈婂鐞�
                     if (SPK.MusicSpkList().Contains( function.spk))
                     {
+                        continue;
                         //var music = function as Music.A31MusicModel;
                         //var music = Music.A31MusicModel.A31MusicModelList.Find((obj) => obj.sid == function.sid);
                         //if (music == null)
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
index 8b19f2a..0bbd7a4 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -468,6 +468,16 @@
         {
             btnSwitch.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitch.IsSelected = !btnSwitch.IsSelected;
                 new System.Threading.Thread(() =>
                 {
@@ -521,6 +531,16 @@
         {
             btnSwitch.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     btnSwitch.IsSelected = !btnSwitch.IsSelected;
@@ -555,6 +575,16 @@
         {
             btnClose.MouseUpEventHandler = (sender, e) =>
             {
+                if (!curtain.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnClose.IsSelected = true;
                 curtain.trait_on_off.curValue = "off";
                 curtain.SetAttrState(FunctionAttributeKey.Percent, 0);
@@ -565,6 +595,16 @@
 
             btnOpen.MouseUpEventHandler = (sender, e) =>
             {
+                if (!curtain.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnOpen.IsSelected = true;
                 curtain.trait_on_off.curValue = "on";
                 curtain.SetAttrState(FunctionAttributeKey.Percent, 100);
@@ -585,6 +625,16 @@
             };
             btnUp.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
@@ -606,6 +656,16 @@
             };
             btnDown.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
index 098b041..436d5f9 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -61,8 +61,9 @@
             }
             LoadDiv();
 
-            btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/{function.IconName}.png";
-
+         
+                btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/{function.IconName}.png";
+            
             if (SPK.CurtainSpkList().Contains(function.spk))
             {//绐楀笜娌℃湁寮�鍏虫寜閽�
                 CurtainFragment();
@@ -90,6 +91,10 @@
                         this.AddChidren(btnTipPowerLow);
                     }
                 }
+            }
+            else if (function.spk == SPK.DoorLock)
+            {
+                btnIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/DoorLock.png";
             }
             else
             {
@@ -214,7 +219,9 @@
                 UnSelectedImagePath = "Collection/CollectionGrayIcon.png",
                 IsSelected = function.collect
             };
-            if ( !SPK.ArmSensorSpkList().Contains(function.spk) && !SPK.EnvironDeviceSpkList().Contains( function.spk))//!DB_ResidenceData.Instance.CurrentRegion.isOtherShare &&
+            if ( !SPK.ArmSensorSpkList().Contains(function.spk)
+                && function.spk != SPK.DoorLock
+                && !SPK.EnvironDeviceSpkList().Contains( function.spk))//!DB_ResidenceData.Instance.CurrentRegion.isOtherShare &&
             {
                 bodyDiv.AddChidren(btnCollectionIcon);
             }
@@ -350,7 +357,7 @@
                 btnCurtainOpen.UnSelectedImagePath = "FunctionIcon/Curtain/CurtainUpIcon.png";
                 btnCurtainOpen.SelectedImagePath = "FunctionIcon/Curtain/CurtainUpIconOn.png";
             }
-            LoadEvent_ControlCurtain(btnCurtainStop, btnCurtainOpen, btnCurtainClose, function);
+            LoadEvent_ControlCurtain(btnCurtainStop, btnCurtainOpen, btnCurtainClose);
             #endregion
         }
         /// <summary>
@@ -455,5 +462,8 @@
             };
             bodyDiv.AddChidren(btnLastStates);
         }
+
+
+
     }
 }
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
index 3b8ac47..d579862 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
@@ -79,6 +79,16 @@
 
             btnSwitch.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitch.IsSelected = !btnSwitch.IsSelected;
 
                 if(SPK.NotStatusSpkList.Contains( function.spk ))
@@ -109,34 +119,24 @@
         }
         #region 鐏厜鐨勪簨浠跺垪琛�
 
-        /// <summary>
-        /// 鐏厜寮�鍏充簨浠�
-        /// </summary>
-        void LoadEvent_LightSwitch(Button btnSwitch)
-        {
-            btnSwitch.MouseUpEventHandler += (sender, e) =>
-            {
-                btnSwitch.IsSelected = !btnSwitch.IsSelected;
-                new System.Threading.Thread(() =>
-                {
-                    if (SPK.LightSpkList().Contains( function.spk))
-                    {
-                        function.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off";
-                        Dictionary<string, string> d = new Dictionary<string, string>();
-                        d.Add("on_off", function.trait_on_off.curValue.ToString());
-                        Control.Ins.SendWriteCommand(function, d);
-                    }
-                })
-                { IsBackground = true }.Start();
-            };
-        }
+
 
         /// <summary>
         /// 鐏厜浜害璋冭妭浜嬩欢
         /// </summary>
         void LoadEvent_LightDimming(DiyImageSeekBar dimmerControlBar)
         {
-            if(function.spk == SPK.LightDimming || function.spk == SPK.LightRGB)
+            if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+            {
+                //new Tip()
+                //{
+                //    CloseTime = 1,
+                //    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                //    Direction = AMPopTipDirection.None,
+                //}.Show(MainPage.BaseView);
+                return;
+            }
+            if (function.spk == SPK.LightDimming || function.spk == SPK.LightRGB)
             {
                 dimmerControlBar.OnStartTrackingTouchEvent = (sender, e) => {
                     onDimmerBar = true;
@@ -192,41 +192,71 @@
         /// <param name="btnStop"></param>
         /// <param name="btnOpen"></param>
         /// <param name="btnClose"></param>
-        void LoadEvent_ControlCurtain(Button btnStop, Button btnOpen, Button btnClose, Function curtain)
+        void LoadEvent_ControlCurtain(Button btnStop, Button btnOpen, Button btnClose)
         {
             btnClose.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnClose.IsSelected = true;
                 btnStop.IsSelected = false;
                 btnOpen.IsSelected = false;
-                curtain.trait_on_off.curValue = "off";
-                curtain.SetAttrState(FunctionAttributeKey.Percent, 0);
+                function.trait_on_off.curValue = "off";
+                function.SetAttrState(FunctionAttributeKey.Percent, 0);
                 Dictionary<string, string> d = new Dictionary<string, string>();
-                d.Add(FunctionAttributeKey.OnOff, curtain.trait_on_off.curValue.ToString());
-                Control.Ins.SendWriteCommand(curtain, d);
+                d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString());
+                Control.Ins.SendWriteCommand(function, d);
             };
 
             btnStop.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnStop.IsSelected = true;
                 btnClose.IsSelected = false;
                 btnOpen.IsSelected = false;
-                curtain.trait_on_off.curValue = "stop";
+                function.trait_on_off.curValue = "stop";
                 Dictionary<string, string> d = new Dictionary<string, string>();
-                d.Add(FunctionAttributeKey.OnOff, curtain.trait_on_off.curValue.ToString());
-                Control.Ins.SendWriteCommand(curtain, d);
+                d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString());
+                Control.Ins.SendWriteCommand(function, d);
             };
 
             btnOpen.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnOpen.IsSelected = true;
                 btnClose.IsSelected = false;
                 btnStop.IsSelected = false;
-                curtain.trait_on_off.curValue = "on";
-                curtain.SetAttrState(FunctionAttributeKey.Percent, 100);
+                function.trait_on_off.curValue = "on";
+                function.SetAttrState(FunctionAttributeKey.Percent, 100);
                 Dictionary<string, string> d = new Dictionary<string, string>();
-                d.Add(FunctionAttributeKey.OnOff, curtain.trait_on_off.curValue.ToString());
-                Control.Ins.SendWriteCommand(curtain, d);
+                d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString());
+                Control.Ins.SendWriteCommand(function, d);
             };
         }
         #endregion
@@ -243,6 +273,16 @@
             };
             btnUp.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
@@ -264,6 +304,16 @@
             };
             btnDown.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)//绂荤嚎涓嶅厑璁告搷浣�
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs
index 8cc3709..f7b44a0 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/FunTpye.cs
@@ -14,7 +14,7 @@
         /// <summary>
         /// 榛樿閫変腑鏄埧闂存椂锛氬叏閮ㄥ尯鍩�
         /// </summary>
-        public static Entity.Room selectedRoom = new Entity.Room { roomId ="6688" };
+        //public static Entity.Room selectedRoom = new Entity.Room { roomId ="6688" };
 
         /// <summary>
         /// 榛樿閫変腑鏄澶囩被鍨嬫椂锛氬叏閮ㄥ姛鑳�
@@ -122,7 +122,9 @@
                         funAllAreaView.btnText1.Text = (areaView.btnClick.Tag as Entity.Room).roomName;
                         ///鍒囨崲鎴块棿榛樿鍔熻兘绫诲瀷鍏ㄩ儴;
                         funAllAreaView.btnText2.Text = Language.StringByID(StringId.allFun);
-                        selectedRoom = (areaView.btnClick.Tag as Entity.Room);
+                        //selectedRoom = (areaView.btnClick.Tag as Entity.Room);
+                        UserInfo.Current.logicselectedRoom = (areaView.btnClick.Tag as Entity.Room);
+                        UserInfo.Current.logicselectedFunction = "";
                         ///鑾峰彇鏄剧ず璁惧鍒楄〃
                         var list = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(areaView.btnClick.Tag as Entity.Room, if_type);
 
@@ -142,7 +144,7 @@
             {
 
                 //鑾峰彇鏈�缁堟樉绀哄垪琛�
-                var functionList = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(selectedRoom, if_type);
+                var functionList = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(UserInfo.Current.logicselectedRoom, if_type);
                 //鑾峰彇璁惧鍒楄〃鐨勭被鍨嬶紙渚嬪锛氱伅鍏夌被锛岀獥甯樼被銆傘�傘�傦級
                 var deviceTypeList = LogicMethod.CurrLogicMethod.GetDeviceTypeList(functionList);
                 if (deviceTypeList.Count == 0)
@@ -223,11 +225,13 @@
                     {
                         fLayout.RemoveFromParent();
                         funAllAreaView.btnText2.Text = areaView.btnClick.Tag.ToString();
+                        UserInfo.Current.logicselectedFunction = areaView.btnClick.Tag.ToString();
                         ///鑾峰彇鍗曚釜绫诲瀷锛堜緥濡傦細鐏厜绫汇�傘�傦級璁惧FunctionType鍒楄〃
-                        var typeFunctionList = LogicMethod.CurrLogicMethod.GetDeviceTypeFunctionList(areaView.btnClick.Tag.ToString());
+                        var typeFunctionList = LogicMethod.CurrLogicMethod.GetDeviceTypeFunctionList(UserInfo.Current.logicselectedFunction);
                         ///鑾峰彇鍗曚釜鐏厜绫诲瀷锛堜緥濡傦細鐏厜1,鐏厜2銆傘�傦級鏄剧ず璁惧鍒楄〃
-                        var lists = LogicMethod.CurrLogicMethod.GetShowDeviceList(typeFunctionList, functionList);
-                        DeviceListView(vv, lists);
+                        var lists2 = LogicMethod.CurrLogicMethod.GetShowDeviceList(typeFunctionList, functionList);
+                        DeviceListView(vv, lists2);
+
                     };
                     if (deviceTypeList.Count - 1 == i)
                     {
@@ -239,9 +243,24 @@
             funAllAreaView.btnText2.MouseUpEventHandler += funClick;
             funAllAreaView.btnIcon2.MouseUpEventHandler += funClick;
             ///鑾峰彇鏄剧ず璁惧鍒楄〃
-            var deviceList = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(selectedRoom, if_type);
-            DeviceListView(vv, deviceList);
+            var deviceList = LogicMethod.CurrLogicMethod.GetFunctionDeviceList(UserInfo.Current.logicselectedRoom, if_type);
 
+            if (!string.IsNullOrEmpty(UserInfo.Current.logicselectedFunction))
+            {
+
+                ///鑾峰彇鍗曚釜绫诲瀷锛堜緥濡傦細鐏厜绫汇�傘�傦級璁惧FunctionType鍒楄〃
+                var typeFunctionList = LogicMethod.CurrLogicMethod.GetDeviceTypeFunctionList(UserInfo.Current.logicselectedFunction);
+                ///鑾峰彇鍗曚釜鐏厜绫诲瀷锛堜緥濡傦細鐏厜1,鐏厜2銆傘�傦級鏄剧ず璁惧鍒楄〃
+                var lists = LogicMethod.CurrLogicMethod.GetShowDeviceList(typeFunctionList, deviceList);
+
+                funAllAreaView.btnText2.Text = UserInfo.Current.logicselectedFunction;
+                DeviceListView(vv, lists);
+            }
+            else
+            {
+                DeviceListView(vv, deviceList);
+            }
+            funAllAreaView.btnText1.Text = UserInfo.Current.logicselectedRoom.roomName;
         }
 
 
@@ -252,6 +271,7 @@
         /// <param name="deviceList"></param>
         public void DeviceListView(VerticalScrolViewLayout verticalScrolView, List<HDL_ON.Entity.Function> deviceList)
         {
+
             verticalScrolView.RemoveAll();
             foreach (var dev in deviceList)
             {
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/FunAllAreaView.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/FunAllAreaView.cs
index 9f803da..cdcd840 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/FunAllAreaView.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/FunAllAreaView.cs
@@ -37,7 +37,6 @@
             X = Application.GetRealWidth(34),
             TextAlignment = TextAlignment.CenterLeft,
             TextID=StringId.allAreas,
-            
         };
 
         /// <summary>
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs
index 15ceafd..9ad21a0 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs
@@ -147,7 +147,9 @@
                             });
                         }
                     }
-                    catch { }
+                    catch (Exception ex) {
+                        MainPage.Log(ex.Message);
+                    }
                     finally
                     {
                         Application.RunOnMainThread(() => {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
index 83bbe40..cd5aefc 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
@@ -358,6 +358,15 @@
                 };
                 EventHandler<MouseEventArgs> eventHandler1 = (sender, e) =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                    }
                     btnModeIcon.IsSelected = btnModeText.IsSelected = true;
                     device.SetAttrState(FunctionAttributeKey.Mode, m);
                     btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(m);
@@ -485,6 +494,15 @@
                 };
                 EventHandler<MouseEventArgs> eventHandler1 = (sender, e) =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                    }
                     btnModeIcon.IsSelected = btnModeText.IsSelected = true;
                     device.SetAttrState(FunctionAttributeKey.Swing, m);
                     btnSwing.UnSelectedImagePath = acFunction.GetSwingIconPath(m);
@@ -600,6 +618,15 @@
                 };
                 EventHandler<MouseEventArgs> eventHandler1 = (sender, e) =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                    }
                     btnFanIcon.IsSelected = btnFanText.IsSelected = true;
                     device.SetAttrState(FunctionAttributeKey.FanSpeed, m);
                     btnWindSpeed.UnSelectedImagePath = acFunction.GetFanIconPath(m);
@@ -787,6 +814,15 @@
 
                 btn.MouseUpEventHandler = (sender, e) =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                    }
                     Dictionary<string, string> d = new Dictionary<string, string>();
                     d.Add(attr.key, "");
                     Control.Ins.SendWriteCommand(device, d);
@@ -841,11 +877,20 @@
         {
             btnMinus.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
                 {
                     return;
                 }
-                
+
                 if (temp <= device.GetAttribute(FunctionAttributeKey.SetTemp).min)
                 {
                     return;
@@ -862,6 +907,15 @@
             };
             btnPlus.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
                 {
                     return;
@@ -879,31 +933,33 @@
                 d.Add(FunctionAttributeKey.SetTemp, temp.ToString());
                 Control.Ins.SendWriteCommand(device, d);
             };
-            arcBar.OnStopTrackingTouchEvent = (sender, e) =>
+            if (!device.online)
             {
-                temp = arcBar.Progress;
-                device.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
-                btnTemp.Text = arcBar.Progress.ToString();
-                controlTime = DateTime.Now;
-                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                d.Add(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
-                Control.Ins.SendWriteCommand(device, d);
-            };
-            arcBar.OnProgressChangedEvent = (sender, e) =>
-            {
-                device.SetAttrState(FunctionAttributeKey.SetTemp, e.ToString());
-                btnTemp.Text = e.ToString();
-            };
-            //arcBar.MouseDownEventHandler = (sender, e) => {
-            //    Console.WriteLine("ddd");
-            //    MainPage.BasePageView.ScrollEnabled =false;
-            //};
-            //arcBar.MouseUpEventHandler = (sender, e) => {
-            //    Console.WriteLine("ddd2");
-            //    MainPage.BasePageView.ScrollEnabled = true;
-            //};
+                arcBar.OnStopTrackingTouchEvent = (sender, e) =>
+                {
+                    temp = arcBar.Progress;
+                    device.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
+                    btnTemp.Text = arcBar.Progress.ToString();
+                    controlTime = DateTime.Now;
+                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
+                    Control.Ins.SendWriteCommand(device, d);
+                };
+                arcBar.OnProgressChangedEvent = (sender, e) =>
+                {
+                    device.SetAttrState(FunctionAttributeKey.SetTemp, e.ToString());
+                    btnTemp.Text = e.ToString();
+                };
+                //arcBar.MouseDownEventHandler = (sender, e) => {
+                //    Console.WriteLine("ddd");
+                //    MainPage.BasePageView.ScrollEnabled =false;
+                //};
+                //arcBar.MouseUpEventHandler = (sender, e) => {
+                //    Console.WriteLine("ddd2");
+                //    MainPage.BasePageView.ScrollEnabled = true;
+                //};
+            }
         }
-
 
         /// <summary>
         /// 鎺у埗妯″紡浜嬩欢
@@ -938,6 +994,15 @@
 
             btnSwitch.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 btnSwitch.IsSelected = !btnSwitch.IsSelected;
                 device.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off";
                 if (device.trait_on_off.curValue.ToString() == "on")
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs
index 848c823..7075c77 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs
@@ -759,6 +759,15 @@
         /// <param name="comadValue">鍛戒护</param>
         private void SendOtherComand(IconViewControl btnIcon, string comadKey, string comadValue)
         {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+            }
             btnIcon.CanClick = false;
 
             HdlThreadLogic.Current.RunThread(() =>
@@ -779,6 +788,15 @@
         /// </summary>
         private void SendSwitchComand()
         {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+            }
             this.btnSwitch.CanClick = false;
 
             string statu = this.btnSwitch.IsSelected == true ? "off" : "on";
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs
index 3f665d1..7ea9ab3 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs
@@ -89,6 +89,15 @@
             FrameWhiteCentet1.AddChidren(btnSwitch);
             btnSwitch.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 btnSwitch.IsSelected = !btnSwitch.IsSelected;
                 device.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off";
                 new System.Threading.Thread(() =>
@@ -280,6 +289,15 @@
         /// <param name="comadValue">鍛戒护</param>
         private void SendOtherComand(IconViewControl btnIcon, string comadKey, string comadValue)
         {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+            }
             btnIcon.CanClick = false;
 
             HdlThreadLogic.Current.RunThread(() =>
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs
index 9bb66af..f2de9ff 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/FhControlPage.cs
@@ -305,6 +305,15 @@
                 };
                 EventHandler<MouseEventArgs> eventHandler1 = (sender, e) =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                    }
                     btnModeIcon.IsSelected = btnModeText.IsSelected = true;
                     device.SetAttrState(FunctionAttributeKey.Mode, m);
                     btnMode.UnSelectedImagePath = fhTemp.GetModeIconPath(m);
@@ -362,6 +371,15 @@
         {
             btnMinus.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
                 {
                     return;
@@ -381,6 +399,15 @@
             };
             btnPlus.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
                 {
                     return;
@@ -398,19 +425,23 @@
                 d.Add(FunctionAttributeKey.SetTemp, temp.ToString());
                 Control.Ins.SendWriteCommand(device, d);
             };
-            arcBar.OnStopTrackingTouchEvent = (sender, e) =>
+
+            if (!device.online)
             {
-                device.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
-                btnTemp.Text = arcBar.Progress.ToString();
-                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                d.Add(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
-                Control.Ins.SendWriteCommand(device, d);
-            };
-            arcBar.OnProgressChangedEvent = (sender, e) =>
-            {
-                device.SetAttrState(FunctionAttributeKey.SetTemp, e.ToString());
-                btnTemp.Text = e.ToString();
-            };
+                arcBar.OnStopTrackingTouchEvent = (sender, e) =>
+                {
+                    device.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
+                    btnTemp.Text = arcBar.Progress.ToString();
+                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
+                    Control.Ins.SendWriteCommand(device, d);
+                };
+                arcBar.OnProgressChangedEvent = (sender, e) =>
+                {
+                    device.SetAttrState(FunctionAttributeKey.SetTemp, e.ToString());
+                    btnTemp.Text = e.ToString();
+                };
+            }
         }
         /// <summary>
         /// 鎺у埗妯″紡浜嬩欢
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePageBLL.cs
index f571b61..242fb61 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainModulePageBLL.cs
@@ -72,6 +72,15 @@
         void LoadEvent_ControlEvent()
         {
             btnCurtainClose.MouseUpEventHandler = (sender, e) => {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 new System.Threading.Thread(() => {
                     System.Threading.Thread.Sleep(2000);
                     Application.RunOnMainThread(() => {
@@ -107,6 +116,15 @@
 
             btnCurtainStop.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 new System.Threading.Thread(() => {
                     System.Threading.Thread.Sleep(2000);
                     Application.RunOnMainThread(() => {
@@ -121,6 +139,15 @@
             };
             btnCurtainOpen.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 new System.Threading.Thread(() => {
                     System.Threading.Thread.Sleep(2000);
                     Application.RunOnMainThread(() => {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPageBLL.cs
index 7638d01..87044d5 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Curtain/MotorCurtainPageBLL.cs
@@ -137,6 +137,15 @@
         {
             btnCurtainClose.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
@@ -156,6 +165,15 @@
 
             btnCurtainStop.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 onCurtainAnimation = false;
                 new System.Threading.Thread(() =>
                 {
@@ -174,6 +192,15 @@
 
             btnCurtainOpen.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
@@ -191,107 +218,108 @@
                 CurtainAnimation(100);
             };
 
+            if (!function.online)
+            {
+                btnCurtainStop.MouseDownEventHandler = (sender, e) =>
+                {
+                    btnCurtainStop.IsSelected = true;
+                    btnCurtainClose.IsSelected = false;
+                    btnCurtainOpen.IsSelected = false;
+                };
+                btnCurtainOpen.MouseDownEventHandler = (sender, e) =>
+                {
+                    btnCurtainOpen.IsSelected = true;
+                    btnCurtainClose.IsSelected = false;
+                    btnCurtainStop.IsSelected = false;
+                };
+                btnCurtainClose.MouseDownEventHandler = (sender, e) =>
+                {
+                    btnCurtainClose.IsSelected = true;
+                    btnCurtainOpen.IsSelected = false;
+                    btnCurtainStop.IsSelected = false;
+                };
 
-            btnCurtainStop.MouseDownEventHandler = (sender, e) =>
-            {
-                btnCurtainStop.IsSelected = true;
-                btnCurtainClose.IsSelected = false;
-                btnCurtainOpen.IsSelected = false;
-            };
-            btnCurtainOpen.MouseDownEventHandler = (sender, e) =>
-            {
-                btnCurtainOpen.IsSelected = true;
-                btnCurtainClose.IsSelected = false;
-                btnCurtainStop.IsSelected = false;
-            };
-            btnCurtainClose.MouseDownEventHandler = (sender, e) =>
-            {
-                btnCurtainClose.IsSelected = true;
-                btnCurtainOpen.IsSelected = false;
-                btnCurtainStop.IsSelected = false;
-            };
+                //btnMinusSignIcon.MouseUpEventHandler = (sender, e) =>
+                //{
+                //    function.percent--;
+                //    controlBar.Progress = function.percent;
+                //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                //    d.Add(FunctionAttributeKey.Percent, function.percent.ToString());
+                //    DriverLayer.Control.Ins.SendWriteCommand(function, d);
+                //};
 
-            //btnMinusSignIcon.MouseUpEventHandler = (sender, e) =>
-            //{
-            //    function.percent--;
-            //    controlBar.Progress = function.percent;
-            //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-            //    d.Add(FunctionAttributeKey.Percent, function.percent.ToString());
-            //    DriverLayer.Control.Ins.SendWriteCommand(function, d);
-            //};
+                //btnPlusSgnIcon.MouseUpEventHandler = (sender, e) =>
+                //{
+                //    function.percent++;
+                //    controlBar.Progress = function.percent;
+                //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                //    d.Add(FunctionAttributeKey.Percent, function.percent.ToString());
+                //    DriverLayer.Control.Ins.SendWriteCommand(function, d);
+                //};
 
-            //btnPlusSgnIcon.MouseUpEventHandler = (sender, e) =>
-            //{
-            //    function.percent++;
-            //    controlBar.Progress = function.percent;
-            //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-            //    d.Add(FunctionAttributeKey.Percent, function.percent.ToString());
-            //    DriverLayer.Control.Ins.SendWriteCommand(function, d);
-            //};
-
-            curtainSeekBar.OnProgressChangedEvent = (sender, e) =>
-            {
-                btnProgress.Text = curtainSeekBar.Progress + "%";
-            //    controlBar.Progress = curtainSeekBar.Progress;
-            //    new System.Threading.Thread(() =>
-            //    {
-            //        if (controlBar.Progress == 0 || controlBar.Progress == 100 || (DateTime.Now - function.refreshTime).TotalMilliseconds > 300)
-            //        {
-            //            function.percent = e;
-            //            function.refreshTime = DateTime.Now;
-            //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-            //            d.Add("percent", function.percent.ToString());
-            //            Control.SendWriteCommand(function, d);
-            //        }
-            //    })
-            //    { IsBackground = true }.Start();
-            };
-            curtainSeekBar.OnStopTrackingTouchEvent = (sender, e) =>
-            {
-            btnProgress.Text = curtainSeekBar.Progress + "%";
+                curtainSeekBar.OnProgressChangedEvent = (sender, e) =>
+                {
+                    btnProgress.Text = curtainSeekBar.Progress + "%";
+                    //    controlBar.Progress = curtainSeekBar.Progress;
+                    //    new System.Threading.Thread(() =>
+                    //    {
+                    //        if (controlBar.Progress == 0 || controlBar.Progress == 100 || (DateTime.Now - function.refreshTime).TotalMilliseconds > 300)
+                    //        {
+                    //            function.percent = e;
+                    //            function.refreshTime = DateTime.Now;
+                    //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    //            d.Add("percent", function.percent.ToString());
+                    //            Control.SendWriteCommand(function, d);
+                    //        }
+                    //    })
+                    //    { IsBackground = true }.Start();
+                };
+                curtainSeekBar.OnStopTrackingTouchEvent = (sender, e) =>
+                {
+                    btnProgress.Text = curtainSeekBar.Progress + "%";
                 //controlBar.Progress = curtainSeekBar.Progress;
                 new System.Threading.Thread(() =>
-                {
-                    function.SetAttrState(FunctionAttributeKey.Percent, e);
-                    function.refreshTime = DateTime.Now;
-                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                    d.Add(FunctionAttributeKey.Percent, e.ToString());
-                    DriverLayer.Control.Ins.SendWriteCommand(function, d);
-                })
-                { IsBackground = true }.Start();
-            };
+                    {
+                        function.SetAttrState(FunctionAttributeKey.Percent, e);
+                        function.refreshTime = DateTime.Now;
+                        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                        d.Add(FunctionAttributeKey.Percent, e.ToString());
+                        DriverLayer.Control.Ins.SendWriteCommand(function, d);
+                    })
+                    { IsBackground = true }.Start();
+                };
 
-            //controlBar.OnProgressChangedEvent = (sender, e) =>
-            //{
-            //    curtainSeekBar.Progress = controlBar.Progress;
-            //    new System.Threading.Thread(() =>
-            //    {
-            //        if (controlBar.Progress == 0 || controlBar.Progress == 100 || (DateTime.Now - function.refreshTime).TotalMilliseconds > 300)
-            //        {
-            //            function.percent = e;
-            //            function.refreshTime = DateTime.Now;
-            //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-            //            d.Add("percent", function.percent.ToString());
-            //            Control.SendWriteCommand(function, d);
-            //        }
-            //    })
-            //    { IsBackground = true }.Start();
-            //};
+                //controlBar.OnProgressChangedEvent = (sender, e) =>
+                //{
+                //    curtainSeekBar.Progress = controlBar.Progress;
+                //    new System.Threading.Thread(() =>
+                //    {
+                //        if (controlBar.Progress == 0 || controlBar.Progress == 100 || (DateTime.Now - function.refreshTime).TotalMilliseconds > 300)
+                //        {
+                //            function.percent = e;
+                //            function.refreshTime = DateTime.Now;
+                //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                //            d.Add("percent", function.percent.ToString());
+                //            Control.SendWriteCommand(function, d);
+                //        }
+                //    })
+                //    { IsBackground = true }.Start();
+                //};
 
-            //controlBar.OnStopTrackingTouchEvent = (sender, e) =>
-            //{
-            //    curtainSeekBar.Progress = controlBar.Progress;
-            //    new System.Threading.Thread(() =>
-            //    {
-            //        function.percent = e;
-            //        function.refreshTime = DateTime.Now;
-            //        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-            //        d.Add("percent", function.percent.ToString());
-            //        DriverLayer.Control.Ins.SendWriteCommand(function, d);
-            //    })
-            //    { IsBackground = true }.Start();
-            //};
-
+                //controlBar.OnStopTrackingTouchEvent = (sender, e) =>
+                //{
+                //    curtainSeekBar.Progress = controlBar.Progress;
+                //    new System.Threading.Thread(() =>
+                //    {
+                //        function.percent = e;
+                //        function.refreshTime = DateTime.Now;
+                //        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                //        d.Add("percent", function.percent.ToString());
+                //        DriverLayer.Control.Ins.SendWriteCommand(function, d);
+                //    })
+                //    { IsBackground = true }.Start();
+                //};
+            }
         }
     }
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs
index 775b792..94bfddc 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Curtain/RollingShutterPageBLL.cs
@@ -138,6 +138,15 @@
         {
             btnCurtainClose.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
@@ -157,6 +166,15 @@
 
             btnCurtainStop.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 new System.Threading.Thread(() => {
                     System.Threading.Thread.Sleep(2000);
                     Application.RunOnMainThread(() => {
@@ -173,6 +191,15 @@
 
             btnCurtainOpen.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
@@ -208,61 +235,63 @@
             //    DriverLayer.Control.Ins.SendWriteCommand(function, d);
             //};
 
+            if (!function.online)
+            {
 
-            btnCurtainStop.MouseDownEventHandler = (sender, e) =>
-            {
-                btnCurtainStop.IsSelected = true;
-                btnCurtainClose.IsSelected = false;
-                btnCurtainOpen.IsSelected = false;
-            };
-            btnCurtainOpen.MouseDownEventHandler = (sender, e) =>
-            {
-                btnCurtainOpen.IsSelected = true;
-                btnCurtainClose.IsSelected = false;
-                btnCurtainStop.IsSelected = false;
-            };
-            btnCurtainClose.MouseDownEventHandler = (sender, e) =>
-            {
-                btnCurtainClose.IsSelected = true;
-                btnCurtainOpen.IsSelected = false;
-                btnCurtainStop.IsSelected = false;
-            };
+                btnCurtainStop.MouseDownEventHandler = (sender, e) =>
+                {
+                    btnCurtainStop.IsSelected = true;
+                    btnCurtainClose.IsSelected = false;
+                    btnCurtainOpen.IsSelected = false;
+                };
+                btnCurtainOpen.MouseDownEventHandler = (sender, e) =>
+                {
+                    btnCurtainOpen.IsSelected = true;
+                    btnCurtainClose.IsSelected = false;
+                    btnCurtainStop.IsSelected = false;
+                };
+                btnCurtainClose.MouseDownEventHandler = (sender, e) =>
+                {
+                    btnCurtainClose.IsSelected = true;
+                    btnCurtainOpen.IsSelected = false;
+                    btnCurtainStop.IsSelected = false;
+                };
 
 
-            //curtainSeekBar.OnProgressChangedEvent = (sender, e) =>
-            //{
-            //    controlBar.Progress = curtainSeekBar.Progress;
-            //    new System.Threading.Thread(() =>
-            //    {
-            //        if (controlBar.Progress == 0 || controlBar.Progress == 100 || (DateTime.Now - function.refreshTime).TotalMilliseconds > 300)
-            //        {
-            //            function.percent = e;
-            //            function.refreshTime = DateTime.Now;
-            //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-            //            d.Add("percent", function.percent.ToString());
-            //            Control.SendWriteCommand(function, d);
-            //        }
-            //    })
-            //    { IsBackground = true }.Start();
-            //};
-            curtainSeekBar.OnStopTrackingTouchEvent = (sender, e) =>
-            {
+                //curtainSeekBar.OnProgressChangedEvent = (sender, e) =>
+                //{
+                //    controlBar.Progress = curtainSeekBar.Progress;
+                //    new System.Threading.Thread(() =>
+                //    {
+                //        if (controlBar.Progress == 0 || controlBar.Progress == 100 || (DateTime.Now - function.refreshTime).TotalMilliseconds > 300)
+                //        {
+                //            function.percent = e;
+                //            function.refreshTime = DateTime.Now;
+                //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                //            d.Add("percent", function.percent.ToString());
+                //            Control.SendWriteCommand(function, d);
+                //        }
+                //    })
+                //    { IsBackground = true }.Start();
+                //};
+                curtainSeekBar.OnStopTrackingTouchEvent = (sender, e) =>
+                {
                 //controlBar.Progress = curtainSeekBar.Progress;
                 btnProgress.Text = curtainSeekBar.Progress + "%";
-                new System.Threading.Thread(() =>
-                {
-                    function.SetAttrState(FunctionAttributeKey.Percent, e);
-                    function.refreshTime = DateTime.Now;
-                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                    d.Add(FunctionAttributeKey.Percent, e.ToString());
-                    DriverLayer.Control.Ins.SendWriteCommand(function, d);
-                })
-                { IsBackground = true }.Start();
-            };
+                    new System.Threading.Thread(() =>
+                    {
+                        function.SetAttrState(FunctionAttributeKey.Percent, e);
+                        function.refreshTime = DateTime.Now;
+                        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                        d.Add(FunctionAttributeKey.Percent, e.ToString());
+                        DriverLayer.Control.Ins.SendWriteCommand(function, d);
+                    })
+                    { IsBackground = true }.Start();
+                };
 
-            curtainSeekBar.OnProgressChangedEvent = (sender, e) =>
-            {
-                btnProgress.Text = curtainSeekBar.Progress + "%";
+                curtainSeekBar.OnProgressChangedEvent = (sender, e) =>
+                {
+                    btnProgress.Text = curtainSeekBar.Progress + "%";
                 //    new System.Threading.Thread(() =>
                 //    {
                 //        if (controlBar.Progress == 0 || controlBar.Progress == 100 || (DateTime.Now - function.refreshTime).TotalMilliseconds > 300)
@@ -277,21 +306,21 @@
                 //    { IsBackground = true }.Start();
             };
 
-            //controlBar.OnStopTrackingTouchEvent = (sender, e) =>
-            //{
-            //    curtainSeekBar.Progress = controlBar.Progress;
-            //    btnProgress.Text = curtainSeekBar.Progress + "%";
-            //    new System.Threading.Thread(() =>
-            //    {
-            //        function.SetAttrState(FunctionAttributeKey.Percent, e);
-            //        function.refreshTime = DateTime.Now;
-            //        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-            //        d.Add("percent", e.ToString());
-            //        DriverLayer.Control.Ins.SendWriteCommand(function, d);
-            //    })
-            //    { IsBackground = true }.Start();
-            //};
-
+                //controlBar.OnStopTrackingTouchEvent = (sender, e) =>
+                //{
+                //    curtainSeekBar.Progress = controlBar.Progress;
+                //    btnProgress.Text = curtainSeekBar.Progress + "%";
+                //    new System.Threading.Thread(() =>
+                //    {
+                //        function.SetAttrState(FunctionAttributeKey.Percent, e);
+                //        function.refreshTime = DateTime.Now;
+                //        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                //        d.Add("percent", e.ToString());
+                //        DriverLayer.Control.Ins.SendWriteCommand(function, d);
+                //    })
+                //    { IsBackground = true }.Start();
+                //};
+            }
         }
     }
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockListPage.cs b/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockListPage.cs
index 2a02592..85dcbb1 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockListPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockListPage.cs
@@ -52,7 +52,7 @@
             base.SetTitleText(Language.StringByID(StringId.DoorLock));
 
             //鍒濆鍖栧ご閮ㄥ巻鍙茶褰曟帶浠�
-            this.InitTopHistoryControl();
+            //this.InitTopHistoryControl();
 
             //鍒濆鍖栦腑閮ㄤ俊鎭�
             this.InitMiddleFrame();
@@ -173,7 +173,7 @@
             //鐢垫睜鍥炬爣
             var btnBattery = new BatteryPersentControl();
             btnBattery.Y = Application.GetRealHeight(62);
-            frameBack.AddChidren(btnBattery, ChidrenBindMode.BindEvent);
+            //frameBack.AddChidren(btnBattery, ChidrenBindMode.BindEvent);
             btnBattery.InitControl();
             btnBattery.SetValue(80);
             btnBattery.X = frameBack.Width - btnBattery.Width - Application.GetRealWidth(12);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs b/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs
index d101c2e..7d9146c 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/DoorLock/DoorLockPage.cs
@@ -129,7 +129,7 @@
             //瀹冩湁涓渶灏忕殑X杞�
             batteryControl.X = Application.GetRealWidth(104) > base.btnRoomName.Right ?
                 Application.GetRealWidth(104) : base.btnRoomName.Right + Application.GetRealWidth(4);
-            FrameWhiteCentet1.AddChidren(batteryControl);
+            //FrameWhiteCentet1.AddChidren(batteryControl);
             if (batteryControl.Height > base.btnRoomName.Height)
             {
                 //涓�涓槸25锛屼竴涓槸21锛屽紕涓嶅噯鍒板簳璋佹洿楂�,鍥犱负璁$畻鏂规硶涓嶄竴鏍�
@@ -147,7 +147,7 @@
             btnOnlineIcon.X = batteryControl.Right + Application.GetRealWidth(12);
             btnOnlineIcon.Y = batteryControl.Y;
             btnOnlineIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/Connect.png";
-            FrameWhiteCentet1.AddChidren(btnOnlineIcon);
+            //FrameWhiteCentet1.AddChidren(btnOnlineIcon);
             //鍦ㄧ嚎鏂囨湰
             this.btnOnlineView = new NormalViewControl(Application.GetRealWidth(100), btnOnlineIcon.Height, false);
             btnOnlineView.X = btnOnlineIcon.Right + Application.GetRealWidth(4);
@@ -155,7 +155,7 @@
             btnOnlineView.TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel;
             btnOnlineView.TextColor = CSS_Color.PromptingColor1;
             btnOnlineView.TextID = StringId.Connected;
-            FrameWhiteCentet1.AddChidren(btnOnlineView);
+            //FrameWhiteCentet1.AddChidren(btnOnlineView);
             //鍙充笂瑙掗厤缃粨鏉熺殑浜嬩欢
             base.SettionFinishEvent += () =>
             {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/AirSwitchPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/AirSwitchPage.cs
index 76d2fb3..7021c55 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/AirSwitchPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/AirSwitchPage.cs
@@ -417,6 +417,16 @@
         {
             btnSwitchIcon.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitch.IsSelected = btnSwitchIcon.IsSelected = !btnSwitchIcon.IsSelected;
                 new System.Threading.Thread(() =>
                 {
@@ -429,6 +439,16 @@
             };
             btnSwitch.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitchIcon.IsSelected = btnSwitch.IsSelected = !btnSwitch.IsSelected;
                 new System.Threading.Thread(() =>
                 {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs
index 190b378..d93b021 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs
@@ -125,10 +125,17 @@
             FrameWhiteCentet1.AddChidren(btnDown);
 
             #region 鎺у埗
-            btnUp.MouseDownEventHandler = (sender, e) => {
-                btnUp.IsSelected = true;
-            };
             btnUp.MouseUpEventHandler = (sender, e) => {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
@@ -143,10 +150,17 @@
                 Control.Ins.SendWriteCommand(device, d);
             };
             //----
-            btnStop.MouseDownEventHandler = (sender, e) => {
-                btnStop.IsSelected = true;
-            };
             btnStop.MouseUpEventHandler = (sender, e) => {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
@@ -160,11 +174,31 @@
                 d.Add(FunctionAttributeKey.Position, "stop");
                 Control.Ins.SendWriteCommand(device, d);
             };
-            //-----
-            btnDown.MouseDownEventHandler = (sender, e) => {
-                btnDown.IsSelected = true;
-            };
+            if (!device.online)
+            {
+                btnUp.MouseDownEventHandler = (sender, e) => {
+                    btnUp.IsSelected = true;
+                };
+                btnStop.MouseDownEventHandler = (sender, e) => {
+                    btnStop.IsSelected = true;
+                };
+                //-----
+                btnDown.MouseDownEventHandler = (sender, e) =>
+                {
+                    btnDown.IsSelected = true;
+                };
+            }
             btnDown.MouseUpEventHandler = (sender, e) => {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 new System.Threading.Thread(() =>
                 {
                     System.Threading.Thread.Sleep(2000);
@@ -208,6 +242,16 @@
 
                 EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                    return;
+                    }
                     string onoff = hotDryView.Lighting ? "false" : "true";
                     device.SetAttrState(FunctionAttributeKey.HotDry, onoff);
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -237,6 +281,16 @@
 
                 EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                    return;
+                    }
                     string onoff = windDryView.Lighting ? "false" : "true";
                     device.SetAttrState(FunctionAttributeKey.WindDry, onoff);
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -272,6 +326,16 @@
 
                 EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                    return;
+                    }
                     string onoff = disinfectView.Lighting ? "false" : "true";
                     device.SetAttrState(FunctionAttributeKey.Disinfect, onoff);
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -312,6 +376,16 @@
 
                 EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                    return;
+                    }
                     string onoff = lightingView.Lighting ? "off" : "on";
                     device.SetAttrState(FunctionAttributeKey.OnOff, onoff);
                     Dictionary<string, string> d = new Dictionary<string, string>();
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerSetTimePage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerSetTimePage.cs
index 3d4e0fb..e9ec37c 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerSetTimePage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerSetTimePage.cs
@@ -74,6 +74,16 @@
                 functionListView.AddChidren(hotDryTimeCell);
                 hotDryTimeCell.GoAction = () =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                        return;
+                    }
                     BottomTimeSelectControl timeControl = new BottomTimeSelectControl(hRange, mRange,3, Language.StringByID(StringId.HotDryTime));
                     timeControl.RowHeight = Application.GetRealHeight(50);
                     timeControl.InitControl(0, 1, 162);
@@ -120,6 +130,16 @@
                 functionListView.AddChidren(windDryCell);
                 windDryCell.GoAction = () =>
                 {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                        return;
+                    }
                     BottomTimeSelectControl timeControl = new BottomTimeSelectControl(hRange, mRange,3,Language.StringByID(StringId.WindDryTime));
                     timeControl.RowHeight = Application.GetRealHeight(50);
                     timeControl.InitControl(0, 1, 162);
@@ -167,6 +187,16 @@
 
                 functionListView.AddChidren(disinfectTimeCell);
                 disinfectTimeCell.GoAction = () => {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                        return;
+                    }
                     BottomTimeSelectControl timeControl = new BottomTimeSelectControl(hRange, mRange,3, Language.StringByID(StringId.DisinfectTime));
                     timeControl.RowHeight = Application.GetRealHeight(50);
                     timeControl.InitControl(0, 1, 162);
@@ -215,6 +245,16 @@
                 anionTimeCell.LineView.RemoveFromParent();
 
                 anionTimeCell.GoAction = () => {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                        return;
+                    }
                     BottomTimeSelectControl timeControl = new BottomTimeSelectControl(hRange, mRange,3,Language.StringByID(StringId.AnionTime));
 
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs
index 86a0e73..7dab158 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs
@@ -62,6 +62,16 @@
         {
             btnSwitchIcon.MouseUpEventHandler += (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitchIcon.IsSelected = btnSwitch.IsSelected = !btnSwitchIcon.IsSelected;
 
                 new System.Threading.Thread(() =>
@@ -76,6 +86,16 @@
             };
             btnSwitch.MouseUpEventHandler += (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitch.IsSelected = btnSwitchIcon.IsSelected = !btnSwitch.IsSelected;
 
                 new System.Threading.Thread(() =>
@@ -88,18 +108,21 @@
                 { IsBackground = true }.Start();
             };
 
-            barGradualChange.OnProgressChangedEvent = (sender, e) => {
-                function.SetAttrState(FunctionAttributeKey.OpenLevel, e.ToString());
-                new System.Threading.Thread(() =>
+            if (!function.online)
+            {
+                barGradualChange.OnProgressChangedEvent = (sender, e) =>
                 {
-                    function.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off";
-                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                    d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString());
-                    Control.Ins.SendWriteCommand(function, d);
-                })
-                { IsBackground = true }.Start();
-            };
-
+                    function.SetAttrState(FunctionAttributeKey.OpenLevel, e.ToString());
+                    new System.Threading.Thread(() =>
+                    {
+                        function.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off";
+                        System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                        d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString());
+                        Control.Ins.SendWriteCommand(function, d);
+                    })
+                    { IsBackground = true }.Start();
+                };
+            }
         }
 
     }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/IrLearnPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/IrLearnPage.cs
index c576ebf..c8041d3 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/IrLearnPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/IrLearnPage.cs
@@ -89,6 +89,17 @@
                 row.AddChidren(btn);
 
                 btn.MouseUpEventHandler = (sender, e) => {
+
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                        return;
+                    }
                     System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                     d.Add(attr.key, "");
                     Control.Ins.SendWriteCommand(device, d);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/PjtPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/PjtPage.cs
index 5873fdd..df0f1d1 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/PjtPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/PjtPage.cs
@@ -480,6 +480,16 @@
 
                     btn.MouseUpEventHandler = (sender, e) =>
                     {
+                        if (!device.online)
+                        {
+                            new Tip()
+                            {
+                                CloseTime = 1,
+                                Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                                Direction = AMPopTipDirection.None,
+                            }.Show(MainPage.BaseView);
+                            return;
+                        }
                         Dictionary<string, string> d = new Dictionary<string, string>();
                         d.Add(attr.key, "");
                         Control.Ins.SendWriteCommand(device, d);
@@ -538,6 +548,16 @@
 
             btnChlPlus.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -547,6 +567,16 @@
             };
             btnChlReduce.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -556,6 +586,16 @@
             };
             btnVolPlus.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -565,6 +605,16 @@
             };
             btnVolReduce.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -574,6 +624,16 @@
             };
             btnBack.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -583,6 +643,16 @@
             };
             btnPower.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -609,6 +679,16 @@
             };
             btnMenu.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -618,6 +698,17 @@
                 }
             };
             btnTopMenuUp.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -627,6 +718,17 @@
                 }
             };
             btnTopMenuLeft.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -636,6 +738,17 @@
                 }
             };
             btnTopMenuRight.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -645,6 +758,17 @@
                 }
             };
             btnTopMenuDown.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -654,6 +778,17 @@
                 }
             };
             btnOk.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs
index 240cb13..c5c93da 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/SocketPage.cs
@@ -290,6 +290,16 @@
         {
             btnSwitchIcon.MouseUpEventHandler += (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitchIcon.IsSelected = btnSwitch.IsSelected = !btnSwitchIcon.IsSelected;
 
                 new System.Threading.Thread(() =>
@@ -306,6 +316,16 @@
             };
             btnSwitch.MouseUpEventHandler += (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitch.IsSelected = btnSwitchIcon.IsSelected = !btnSwitch.IsSelected;
 
                 new System.Threading.Thread(() =>
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/StbPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/StbPage.cs
index 8d323c4..cf97d88 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/StbPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/StbPage.cs
@@ -421,6 +421,16 @@
                 }
                 numberView.AddChidren(btn);
                 btn.MouseUpEventHandler = (sender, e) => {
+                    if (!device.online)
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(MainPage.BaseView);
+                        return;
+                    }
                     string index = (sender as Button).Text;
                     btn.IsSelected = false;
                     if (DB_ResidenceData.Instance.GatewayType == 1)
@@ -474,6 +484,16 @@
         {
             btnMenu.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -483,6 +503,16 @@
             };
             btnChlPlus.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -492,6 +522,16 @@
             };
             btnChlReduce.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -501,6 +541,16 @@
             };
             btnVolPlus.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -510,6 +560,16 @@
             };
             btnVolReduce.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -519,6 +579,16 @@
             };
             btnBack.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -529,6 +599,16 @@
 
             btnMenu.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -538,10 +618,30 @@
             };
             btn123.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 ShowNumberView();
             };
             btnMute.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -551,6 +651,16 @@
             };
             btnPower.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
                     Dictionary<string, string> d = new Dictionary<string, string>();
@@ -560,23 +670,41 @@
             };
 
 
-            btnTopMenuUp.MouseDownEventHandler = (sender, e) => {
-                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconUp.png";
-            };
-            btnTopMenuDown.MouseDownEventHandler = (sender, e) => {
-                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconDown.png";
-            };
-            btnTopMenuLeft.MouseDownEventHandler = (sender, e) => {
-                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconLeft.png";
-            };
-            btnTopMenuRight.MouseDownEventHandler = (sender, e) => {
-                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconRight.png";
-            };
-            btnOk.MouseDownEventHandler = (sender, e) => {
-                topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconOk.png";
-            };
+            if (!device.online)
+            {
+                btnTopMenuUp.MouseDownEventHandler = (sender, e) =>
+                {
+                    topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconUp.png";
+                };
+                btnTopMenuDown.MouseDownEventHandler = (sender, e) =>
+                {
+                    topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconDown.png";
+                };
+                btnTopMenuLeft.MouseDownEventHandler = (sender, e) =>
+                {
+                    topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconLeft.png";
+                };
+                btnTopMenuRight.MouseDownEventHandler = (sender, e) =>
+                {
+                    topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconRight.png";
+                };
+                btnOk.MouseDownEventHandler = (sender, e) =>
+                {
+                    topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIconOk.png";
+                };
+            }
             btnMenu.MouseUpEventHandler = (sender, e) =>
             {
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -586,6 +714,17 @@
                 }
             };
             btnTopMenuUp.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -595,6 +734,17 @@
                 }
             };
             btnTopMenuLeft.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -604,6 +754,17 @@
                 }
             };
             btnTopMenuRight.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -613,6 +774,17 @@
                 }
             };
             btnTopMenuDown.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -622,6 +794,17 @@
                 }
             };
             btnOk.MouseUpEventHandler = (sender, e) => {
+
+                if (!device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 topMenuView.BackgroundImagePath = "FunctionIcon/Electrical/TV/TVOkIcon.png";
                 if (DB_ResidenceData.Instance.GatewayType == 1)
                 {
@@ -788,6 +971,16 @@
 
                     btn.MouseUpEventHandler = (sender, e) =>
                     {
+                        if (!device.online)
+                        {
+                            new Tip()
+                            {
+                                CloseTime = 1,
+                                Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                                Direction = AMPopTipDirection.None,
+                            }.Show(MainPage.BaseView);
+                            return;
+                        }
                         Dictionary<string, string> d = new Dictionary<string, string>();
                         d.Add(attr.key, "");
                         Control.Ins.SendWriteCommand(device, d);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPageBLL.cs
index 5fbf109..ff71d51 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TVPageBLL.cs
@@ -40,6 +40,16 @@
         /// </summary>
         void LoadControlEvent()
         {
+            if (!function.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             btnChangeTVAV.MouseUpEventHandler = (sender, e) =>
             {
                 if (DB_ResidenceData.Instance.GatewayType == 1)
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaAirCleanerPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaAirCleanerPage.cs
index 2074184..0bc953c 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaAirCleanerPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaAirCleanerPage.cs
@@ -539,7 +539,17 @@
         /// </summary>
         /// <param name="value">auto:鑷姩  sleep:鐫$湢  manual:鎵嬪姩  strong:寮虹儓</param>
         private void SendModeComand(string value)
-        {
+        {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             this.btnMode.CanClick = false;
             HdlThreadLogic.Current.RunThread(() =>
             {
@@ -558,7 +568,17 @@
         /// </summary>
         /// <param name="value">canel:鍙栨秷 1:1灏忔椂 2:2灏忔椂 3:4灏忔椂 4:8灏忔椂</param>
         private void SendTimingComand(string value)
-        {
+        {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             this.btnTime.CanClick = false;
             HdlThreadLogic.Current.RunThread(() =>
             {
@@ -577,7 +597,17 @@
         /// </summary>
         /// <param name="value">1:浣庢。 2:涓。 3:楂樻。</param>
         private void SendFanSpeedComand(string value)
-        {
+        {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             this.btnFan.CanClick = false;
             HdlThreadLogic.Current.RunThread(() =>
             {
@@ -595,7 +625,17 @@
         /// 鍙戦�佸紑鍏冲懡浠�
         /// </summary>
         private void SendSwitchComand()
-        {
+        {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             this.btnPictrue.CanClick = false;
             this.btnSwitch.CanClick = false;
 
@@ -622,7 +662,17 @@
         /// 鍙戦�佷娇鑳藉懡浠�
         /// </summary>
         private void SendEnableComand(MostRightIconControl btnSwitch, string sendKey, string value)
-        {
+        {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             if (btnSwitch != null)
             {
                 btnSwitch.CanClick = false;
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaFanPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaFanPage.cs
index c280a90..df3ecc3 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaFanPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaFanPage.cs
@@ -97,21 +97,25 @@
             //鍒锋柊鐣岄潰鐘舵��
             this.RefreshFormStatu(false);
             //妗�
-            var strView = Language.StringByID(StringId.Gear);
-            seekBarContr.ProgressChangedEvent += (div, value) =>
-            {
-                this.btnNowGear.Text = value + strView;
-                //婊戝姩涓�
-                if (div == 0) { this.fanData.IsProgressing = true; }
-                //婊戝姩缁撴潫
-                else
-                {
-                    this.fanData.IsProgressing = false;
-                    this.fanData.ProgressEndTime = DateTime.Now;
-                    //鍙戦�侀閫熷懡浠�
-                    this.SendSpeedComand(value);
-                }
-            };
+            var strView = Language.StringByID(StringId.Gear);
+
+            if (device.online)
+            {
+                seekBarContr.ProgressChangedEvent += (div, value) =>
+                {
+                    this.btnNowGear.Text = value + strView;
+                    //婊戝姩涓�
+                    if (div == 0) { this.fanData.IsProgressing = true; }
+                    //婊戝姩缁撴潫
+                    else
+                    {
+                        this.fanData.IsProgressing = false;
+                        this.fanData.ProgressEndTime = DateTime.Now;
+                        //鍙戦�侀閫熷懡浠�
+                        this.SendSpeedComand(value);
+                    }
+                };
+            }
         }
 
         #endregion
@@ -174,7 +178,17 @@
         /// 鍙戦�佸紑鍏冲懡浠�
         /// </summary>
         private void SendSwitchComand()
-        {
+        {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             this.btnSwitch.CanClick = false;
 
             string statu = this.btnSwitch.IsSelected == true ? "off" : "on";
@@ -194,7 +208,8 @@
         /// 鍙戦�侀閫熷懡浠�
         /// </summary>
         private void SendSpeedComand(int value)
-        {
+        {
+         
             var dic = new Dictionary<string, string>();
             dic.Add("fan_speed_percent", value.ToString());
             Control.Ins.SendWriteCommand(this.device, dic, true);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWaterValvePage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWaterValvePage.cs
index 73e6c7a..3d08b88 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWaterValvePage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWaterValvePage.cs
@@ -167,6 +167,16 @@
         /// </summary>
         private void SendSwitchComand()
         {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             this.btnPictrue.CanClick = false;
             this.btnSwitch.CanClick = false;
 
@@ -272,6 +282,16 @@
 
         private void SetControlTime()
         {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             var timeControl = new BottomTimeSelectControl();
             timeControl.RowCount = 5;
             timeControl.InitControl(0,0);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotConsumablesMagPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotConsumablesMagPage.cs
index 8532e4a..0b3bf1b 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotConsumablesMagPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotConsumablesMagPage.cs
@@ -86,6 +86,16 @@
             btnSwitch.IsSelected = i_brushStatu;
             btnSwitch.ButtonClickEvent += (sender, e) =>
             {
+                if (!i_device.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 if (btnSwitch.IsSelected == true)
                 {
                     //鍙栨秷鐨勮瘽鐩存帴鍙栨秷
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs
index 2368509..1fa0b85 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs
@@ -454,7 +454,17 @@
         /// 鍙戦�佸懡浠�
         /// </summary>
         private void SendComand(string key, string i_value)
-        {
+        {
+            if (!device.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             HdlThreadLogic.Current.RunThread(() =>
             {
                 var dic = new Dictionary<string, string>();
diff --git a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
index 38fb12f..5782d56 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
@@ -129,6 +129,16 @@
         /// </summary>
         void LoadEvent_TempChange()
         {
+            if (!function.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             btnMinus.MouseUpEventHandler = (sender, e) =>
             {
                 if(function.trait_on_off.curValue.ToString() == "off")
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs
index c5349dd..8ab3dc2 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs
@@ -85,7 +85,17 @@
         /// 淇敼鑹叉俯
         /// </summary>
         void LoadEvet_ChangeColorTemplatrue()
-        {
+        {
+            if (!function.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             barColorTemplatrue.OnProgressChangedEvent += (sender, value) =>
             {
                 new System.Threading.Thread(() =>
@@ -129,11 +139,18 @@
         /// </summary>
         void LoadEvent_DimmerBar()
         {
-            dimmerBar.OnStartTrackingTouchEvent = (sender, e) => {
-                onDimmerBar = true;
-            };
             dimmerBar.OnStopTrackingTouchEvent = (sender, e) =>
-            {
+            {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 onDimmerBar = false;
                 function.SetAttrState(FunctionAttributeKey.Brightness, dimmerBar.Progress);
                 System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
@@ -143,48 +160,54 @@
                 btnBrightnessText.Text = dimmerBar.Progress + "%";
 
                 dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
-            };
-            dimmerBar.OnProgressChangedEvent = (sender, e) =>
-            {
-                dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
-                //function.fadeTime = 0;
-                //if (!btnSwitch.IsSelected)
-                //{
-                //    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
-                //}
-                //btnSwitch.IsSelected = e > 0 ? true : false;
-                //function.brightness = e;
-                //function.trait_on_off.curValue = e > 0 ? "on" : "off";
-
-                //if (e == 0 || e == 100)
-                //{
-                //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                //    d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
-                //    Control.Ins.SendWriteCommand(function, d);
-                //}
-                //else
-                //{
-                //    if (200 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
-                //    {
-                //        function.refreshTime = DateTime.Now;
-                //        new System.Threading.Thread(() =>
-                //        {
-                //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                //            d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
-                //            Control.Ins.SendWriteCommand(function, d);
-                //        })
-                //        { IsBackground = true }.Start();
-                //    }
-                //}
-
-                //btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16 - 16) / 100) + Application.GetRealWidth(40);
-                //btnBrightnessText.Text = function.brightness + "%";
-
+            };
+            if (function.online)
+            {
+                dimmerBar.OnStartTrackingTouchEvent = (sender, e) =>
+                {
+                    onDimmerBar = true;
+                };
+                dimmerBar.OnProgressChangedEvent = (sender, e) =>
+                {
+                    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
+                //function.fadeTime = 0;
+                //if (!btnSwitch.IsSelected)
+                //{
+                //    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
+                //}
+                //btnSwitch.IsSelected = e > 0 ? true : false;
+                //function.brightness = e;
+                //function.trait_on_off.curValue = e > 0 ? "on" : "off";
+
+                //if (e == 0 || e == 100)
+                //{
+                //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                //    d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
+                //    Control.Ins.SendWriteCommand(function, d);
+                //}
+                //else
+                //{
+                //    if (200 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
+                //    {
+                //        function.refreshTime = DateTime.Now;
+                //        new System.Threading.Thread(() =>
+                //        {
+                //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                //            d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
+                //            Control.Ins.SendWriteCommand(function, d);
+                //        })
+                //        { IsBackground = true }.Start();
+                //    }
+                //}
+
+                //btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16 - 16) / 100) + Application.GetRealWidth(40);
+                //btnBrightnessText.Text = function.brightness + "%";
+
                 btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(222 - 16) / 100) + Application.GetRealWidth(80);
-                btnBrightnessText.Text = dimmerBar.Progress + "%";
-            };
-
-
+                    btnBrightnessText.Text = dimmerBar.Progress + "%";
+                };
+
+            }
         }
 
         /// <summary>
@@ -193,7 +216,17 @@
         void LoadSwitchEvent()
         {
             btnSwitch.MouseUpEventHandler += (sender, e) =>
-            {
+            {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 //function.fadeTime = barFadeTime.Progress;
                 btnSwitch.IsSelected = !btnSwitch.IsSelected;
                 if (btnSwitch.IsSelected)
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
index bc1193d..a8d34a9 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
@@ -88,21 +88,25 @@
         /// </summary>
         void LoadEvent_DimmerBar()
         {
-            dimmerBar.OnStartTrackingTouchEvent = (sender, e) => {
-                onDimmerBar = true;
-            };
-            dimmerBar.OnStopTrackingTouchEvent = (sender, e) => {
-                onDimmerBar = false;
-                function.SetAttrState(FunctionAttributeKey.Brightness, dimmerBar.Progress);
-                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                d.Add(FunctionAttributeKey.Brightness, dimmerBar.Progress.ToString());
-                Control.Ins.SendWriteCommand(function, d);
-                btnBrightnessText.Text = dimmerBar.Progress + "%";
-            };
-            //20201223 鍒犻櫎婊戝姩鍙戦�佸懡浠わ紝闃叉鎺т欢璺冲姩
-            dimmerBar.OnProgressChangedEvent = (sender, e) =>
+            if (function.online)
             {
-                dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
+                dimmerBar.OnStartTrackingTouchEvent = (sender, e) =>
+                {
+                    onDimmerBar = true;
+                };
+                dimmerBar.OnStopTrackingTouchEvent = (sender, e) =>
+                {
+                    onDimmerBar = false;
+                    function.SetAttrState(FunctionAttributeKey.Brightness, dimmerBar.Progress);
+                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.Brightness, dimmerBar.Progress.ToString());
+                    Control.Ins.SendWriteCommand(function, d);
+                    btnBrightnessText.Text = dimmerBar.Progress + "%";
+                };
+                //20201223 鍒犻櫎婊戝姩鍙戦�佸懡浠わ紝闃叉鎺т欢璺冲姩
+                dimmerBar.OnProgressChangedEvent = (sender, e) =>
+                {
+                    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                 //function.fadeTime = 0;
                 //if (!btnSwitch.IsSelected)
                 //{
@@ -133,10 +137,10 @@
                 //    }
                 //}
                 btnBrightnessText.Y = ((100 - dimmerBar.Progress) * Application.GetRealHeight(288 - 16 - 16) / 100) + Application.GetRealWidth(40);
-                btnBrightnessText.Text = dimmerBar.Progress + "%";
-            };
+                    btnBrightnessText.Text = dimmerBar.Progress + "%";
+                };
+            }
         }
-
         /// <summary>
         /// 鍔犺浇寮�鍏充簨浠�
         /// </summary>
@@ -144,6 +148,16 @@
         {
             btnSwitch.MouseUpEventHandler += (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitch.IsSelected = !btnSwitch.IsSelected;
                 if (btnSwitch.IsSelected)
                 {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs
index 8281d85..ef4bf1b 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs
@@ -88,6 +88,16 @@
         /// </summary>
         void LoadColorChangeEvent()
         {
+            if (!function.online)
+            {
+                new Tip()
+                {
+                    CloseTime = 1,
+                    Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                    Direction = AMPopTipDirection.None,
+                }.Show(MainPage.BaseView);
+                return;
+            }
             DateTime colorChangeTime = DateTime.MinValue;
             //bool send = false;
 
@@ -202,11 +212,21 @@
         /// </summary>
         void LoadEvent_DimmerBar()
         {
-            dimmerBar.OnStartTrackingTouchEvent = (sender, e)=>{
-                onDimmerBar = true;
-            };
-            dimmerBar.OnStopTrackingTouchEvent = (sender, e) => {
-                new System.Threading.Thread(() => {
+
+            dimmerBar.OnStopTrackingTouchEvent = (sender, e) =>
+            {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
+                new System.Threading.Thread(() =>
+                {
                     System.Threading.Thread.Sleep(200);
                     onDimmerBar = false;
                 })
@@ -214,47 +234,54 @@
                 function.SetAttrState(FunctionAttributeKey.Brightness, dimmerBar.Progress);
                 System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                 d.Add(FunctionAttributeKey.Brightness, dimmerBar.Progress.ToString());
-               
+
                 Control.Ins.SendWriteCommand(function, d);
             };
-            dimmerBar.OnProgressChangedEvent = (sender, e) => {
-                //function.fadeTime = 0;
-                //if (!btnSwitch.IsSelected)
-                //{
-                //    dimmerBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1;
-                //}
-                //btnSwitch.IsSelected = e > 0 ? true : false;
-                //function.brightness = e;
-                //function.trait_on_off.curValue = e > 0 ? "on" : "off";
+            if (function.online)
+            {
+                dimmerBar.OnStartTrackingTouchEvent = (sender, e) =>
+                {
+                    onDimmerBar = true;
+                };
+                dimmerBar.OnProgressChangedEvent = (sender, e) =>
+                {
+                    //function.fadeTime = 0;
+                    //if (!btnSwitch.IsSelected)
+                    //{
+                    //    dimmerBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1;
+                    //}
+                    //btnSwitch.IsSelected = e > 0 ? true : false;
+                    //function.brightness = e;
+                    //function.trait_on_off.curValue = e > 0 ? "on" : "off";
 
-                //if (e == 0 || e == 100)
-                //{
-                //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                //    d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
-                //    Control.Ins.SendWriteCommand(function, d);
-                //}
-                //else
-                //{
-                //    if (200 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
-                //    {
-                //        function.refreshTime = DateTime.Now;
-                //        new System.Threading.Thread(() =>
-                //        {
-                //            //Control.Send(CommandType_A.write, function);
-                //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
-                //            d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
-                //            Control.Ins.SendWriteCommand(function, d);
-                //        })
-                //        { IsBackground = true }.Start();
-                //    }
-                //    else
-                //    {
-                //        MainPage.Log("skip dimmer control!!");
-                //    }
-                //}
-            };
+                    //if (e == 0 || e == 100)
+                    //{
+                    //    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    //    d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
+                    //    Control.Ins.SendWriteCommand(function, d);
+                    //}
+                    //else
+                    //{
+                    //    if (200 < (DateTime.Now - function.refreshTime).TotalMilliseconds)
+                    //    {
+                    //        function.refreshTime = DateTime.Now;
+                    //        new System.Threading.Thread(() =>
+                    //        {
+                    //            //Control.Send(CommandType_A.write, function);
+                    //            System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    //            d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString());
+                    //            Control.Ins.SendWriteCommand(function, d);
+                    //        })
+                    //        { IsBackground = true }.Start();
+                    //    }
+                    //    else
+                    //    {
+                    //        MainPage.Log("skip dimmer control!!");
+                    //    }
+                    //}
+                };
+            }
         }
-
         /// <summary>
         /// 淇敼鐏厜娓愬彉鏃堕棿
         /// </summary>
@@ -309,6 +336,10 @@
         {
             btnRestoredPoint.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    return;
+                }
                 if(function.trait_on_off.curValue.ToString() == "off")
                 {
                     return;
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs
index 6fc5a4a..d71f38a 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs
@@ -62,6 +62,16 @@
         {
             btnSwitchIcon.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitch.IsSelected = btnSwitchIcon.IsSelected = !btnSwitchIcon.IsSelected;
                 new System.Threading.Thread(() =>
                 {
@@ -74,6 +84,16 @@
             };
             btnSwitch.MouseUpEventHandler = (sender, e) =>
             {
+                if (!function.online)
+                {
+                    new Tip()
+                    {
+                        CloseTime = 1,
+                        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                        Direction = AMPopTipDirection.None,
+                    }.Show(MainPage.BaseView);
+                    return;
+                }
                 btnSwitchIcon.IsSelected = btnSwitch.IsSelected = !btnSwitch.IsSelected;
                 new System.Threading.Thread(() =>
                 {
diff --git a/SiriIntents/Server/HttpUtil.cs b/SiriIntents/Server/HttpUtil.cs
index f61de04..56a78a0 100644
--- a/SiriIntents/Server/HttpUtil.cs
+++ b/SiriIntents/Server/HttpUtil.cs
@@ -16,8 +16,8 @@
         /// 鍥哄畾鍩熷悕,姝e紡鐜
         /// 鍏叡鍩熷悕灏辫繎瑙f瀽
         /// </summary>
-        public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
-        //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm
+        //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
+        public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm
         /// <summary>
         /// RegionMark
         /// </summary>

--
Gitblit v1.8.0