From 7cfcdb7a90f59bf9001c948e166fd9af09752fe1 Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期二, 24 五月 2022 17:15:18 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/release0123' into wjc

---
 HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/screenpanel.png                      |    0 
 HDL-ON_Android/Properties/AndroidManifest.xml                                      |    4 
 HDL-ON_Android/Assets/Language.ini                                                 |   21 
 HDL-ON_iOS/HDL-ON_iOS.csproj                                                       |    5 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelHelpNormalBgIcon.png           |    0 
 HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputPage.cs                        |  229 
 HDL_ON/DAL/Mqtt/MqttClient.cs                                                      |   14 
 HDL_ON/HDL_ON.projitems                                                            |    7 
 HDL_ON/UI/UI2/FuntionControlView/Panel/EnvironmentPanelPage.cs                     |  174 +
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpNormalBgIcon.png            |    0 
 HDL_ON/Entity/Function/Sensor.cs                                                   |  261 +
 HDL-ON_Android/HDL-ON_Android.csproj                                               |    5 
 HDL-ON_iOS/Info.plist                                                              |    4 
 HDL_ON/DAL/Server/NewApiRes.cs                                                     |    2 
 HDL_ON/UI/UI0-Stan/Form/DeviceFunction4CardCommonForm.cs                           |  452 +++
 HDL_ON/UI/UI1-Login/LoginPage.cs                                                   |    2 
 SiriIntents/Server/HttpUtil.cs                                                     |    4 
 HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs                            |  310 ++
 HDL_ON/UI/UI2/FuntionControlView/Video/VideoSend.cs                                |   38 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs   |  752 ++--
 HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs                               |   75 
 HDL-ON_Android/Resources/values-zh/strings.xml                                     |    2 
 HDL_ON/Common/ImageUtlis.cs                                                        |   41 
 HDL_ON/Entity/Function/Function.cs                                                 |  104 
 HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs                              |  176 +
 HDL_ON/UI/UI2/2-Classification/FunctionPage.cs                                     |    1 
 HDL_ON/DAL/Server/HttpUtil.cs                                                      |    4 
 HDL_ON/UI/UI2/FuntionControlView/ContentView/FhContentView.cs                      |  540 +++
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs                               |    4 
 HDL_ON/UI/UI2/FuntionControlView/Panel/PanelHelpPage.cs                            |  142 +
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelEnviBg.png                      |    0 
 HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs                                            |    1 
 HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs                                          |    9 
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                                               |   58 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs                                 |    4 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs         |   36 
 HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs                            |    7 
 HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs                     |    6 
 HDL_ON/UI/UI2/FuntionControlView/ArmSensor/ArmSensorHistroyPaging.cs               |   10 
 HDL-ON_Android/SplashActivity.cs                                                   |   14 
 HDL-ON_iOS/Resources/Language.ini                                                  | 1160 ++++++++
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs                 |    1 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/screenpanel.png                       |    0 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs | 1876 ++++++------
 HDL_ON/DAL/DriverLayer/Control.cs                                                  |   82 
 HDL_ON/UI/UI2/FuntionControlView/Video/WanderingAlarmPage.cs                       |  231 +
 HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelEnviBg.png                     |    0 
 HDL_APP_Project.sln                                                                |    5 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs               |    4 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs          |    6 
 HDL_ON/UI/UI2/FuntionControlView/Video/ObjectClass.cs                              |    5 
 HDL_ON/Entity/FunctionList.cs                                                      |   19 
 HDL_ON/DAL/Server/NewAPI.cs                                                        |   15 
 HDL_ON/UI/UI2/FuntionControlView/ContentView/AcContentView.cs                      | 1110 ++++++++
 HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelHelpAlarmBgIcon.png            |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpAlarmBgIcon.png             |    0 
 HDL_ON/Common/R.cs                                                                 |   17 
 HDL_ON/DAL/Server/HttpServerRequest.cs                                             |   19 
 HDL-ON_Android/Other/JPush/JPushReceiver.cs                                        |  135 
 59 files changed, 6,550 insertions(+), 1,653 deletions(-)

diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index 9d62f57..3c45ca3 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -525,6 +525,11 @@
 537=Humidity statistics
 538=Uint
 539=Smart panel
+540=In Alarm
+541=Monitoring
+542=Wandering alarm
+543=Get more
+
 
 1000=Room Humidity
 1001=V-chip
@@ -1679,6 +1684,10 @@
 537=婀垮害缁熻鍥�
 538=鍗曚綅
 539=鏅鸿兘闈㈡澘
+540=鎶ヨ涓�
+541=鐩戞帶涓�
+542=寰樺緤鎶ヨ
+543=鑾峰彇鏇村
  
 1000=瀹ゅ唴婀垮害
 1001=绔ラ攣
@@ -2811,7 +2820,10 @@
 537=Humidity statistics
 538=Uint
 539=Smart panel
-
+540=袧芯褉屑邪谢褜薪褘泄
+541=Monitoring
+542=Wandering alarm
+543=Get more
 
 
 1000=袙谢邪卸薪芯褋褌褜 胁 袩芯屑械褖械薪懈懈
@@ -3960,11 +3972,14 @@
 533=Statistical Chart
 534=Data
 535=Dew point temperature
-536=Temperature statistics
+536=Temperature statistics  
 537=Humidity statistics
 538=Uint
 539=Smart panel
-
+540=En alarma
+541=Monitoring
+542=Wandering alarm
+543=Get more
 
 1000=Humedad de ambiente
 1001=V-chip
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/screenpanel.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/screenpanel.png
new file mode 100644
index 0000000..56ba0c5
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/screenpanel.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelEnviBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelEnviBg.png
new file mode 100644
index 0000000..d6482d3
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelEnviBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelHelpAlarmBgIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelHelpAlarmBgIcon.png
new file mode 100644
index 0000000..72ece8b
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelHelpAlarmBgIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelHelpNormalBgIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelHelpNormalBgIcon.png
new file mode 100644
index 0000000..a55c35e
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Panel/PanelHelpNormalBgIcon.png
Binary files differ
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index cb54ebd..d236f95 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -239,6 +239,10 @@
     <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\sensorhelp.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\sensorhelp_blue.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\sensorhelp_white.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Panel\PanelHelpAlarmBgIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Panel\PanelHelpNormalBgIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\screenpanel.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Panel\PanelEnviBg.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidResource Include="Resources\values\colors.xml" />
@@ -1446,6 +1450,7 @@
     <Folder Include="libs\arm64-v8a\" />
     <Folder Include="Zxing\" />
     <Folder Include="Assets\Phone\FunctionIcon\CAC\" />
+    <Folder Include="Assets\Phone\FunctionIcon\Panel\" />
   </ItemGroup>
   <Import Project="..\HDL_ON\HDL_ON.projitems" Label="Shared" Condition="Exists('..\HDL_ON\HDL_ON.projitems')" />
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
diff --git a/HDL-ON_Android/Other/JPush/JPushReceiver.cs b/HDL-ON_Android/Other/JPush/JPushReceiver.cs
index 4566b62..3b0cf2b 100644
--- a/HDL-ON_Android/Other/JPush/JPushReceiver.cs
+++ b/HDL-ON_Android/Other/JPush/JPushReceiver.cs
@@ -43,6 +43,8 @@
             OpenNotification(context, notificationMessage);
         }
 
+       static int msgId = 0;
+
         /// <summary>
         /// 鏀跺埌閫氱煡鍥炶皟
         /// </summary>
@@ -50,46 +52,58 @@
         /// <param name="p1"></param>
         public override void OnNotifyMessageArrived(Context context, NotificationMessage notificationMessage)
         {
-            base.OnNotifyMessageArrived(context, notificationMessage);
+            try
+            {
 
-            var pushMes = new JPushMessageInfo()
-            {
-                Title = notificationMessage.NotificationTitle,
-                Content = notificationMessage.NotificationContent,
-                Extras = notificationMessage.NotificationExtras
-            };
-
-            var jpushExpandData = GetJPushExpandData(pushMes);
-            if (jpushExpandData != null && jpushExpandData.messageType != null)
-            {
-                pushMes.messageType = jpushExpandData.messageType;
-                pushMes.expantContent = jpushExpandData.expantContent;//spk
-                pushMes.HomeId = jpushExpandData.homeId;
-                Utlis.WriteLine("PushMes messageType : " + pushMes.messageType);
-            }
-
-            Utlis.WriteLine("PushMes title : " + pushMes.Title);
-            Utlis.WriteLine("PushMes message : " + pushMes.Content);
-            Utlis.WriteLine("PushMes extras : " + pushMes.Extras);
-            Utlis.WriteLine("PushMes HomeId : " + pushMes.HomeId);
-
-            //UserInfo.Current.PushMesTitle = pushMes.Title;
-            //UserInfo.Current.PushMesMessage = pushMes.Content;
-            //UserInfo.Current.PushMesExtras = pushMes.Extras;
-            //UserInfo.Current.pushMesMessageType = pushMes.messageType;
-            //UserInfo.Current.pushMesExpantContent = pushMes.expantContent;
-            //UserInfo.Current.PushMesHomeId = pushMes.HomeId;
-            UserInfo.Current.pushMessageInfo = pushMes;
-            UserInfo.Current.inCall = DateTime.Now;
-
-            Shared.Application.RunOnMainThread(() =>
-            {
-                HDLCommon.Current.AdjustPushMessage(pushMes);
-            });
-            if (!MainPage.IsEnterBackground)
-            {
                 NotificationManager nMgr = (NotificationManager)Shared.Application.Activity.GetSystemService(Context.NotificationService);
-                nMgr.CancelAll();
+                if (msgId != 0)
+                    nMgr.Cancel(msgId);
+                msgId = notificationMessage.NotificationId;
+                base.OnNotifyMessageArrived(context, notificationMessage); Console.WriteLine("123456789ghjsdjfasdfk");
+
+                var pushMes = new JPushMessageInfo()
+                {
+                    Title = notificationMessage.NotificationTitle,
+                    Content = notificationMessage.NotificationContent,
+                    Extras = notificationMessage.NotificationExtras
+                };
+
+                var jpushExpandData = GetJPushExpandData(pushMes);
+                if (jpushExpandData != null && jpushExpandData.messageType != null)
+                {
+                    pushMes.messageType = jpushExpandData.messageType;
+                    pushMes.expantContent = jpushExpandData.expantContent;//spk
+                    pushMes.HomeId = jpushExpandData.homeId;
+                    Utlis.WriteLine("PushMes messageType : " + pushMes.messageType);
+                }
+
+                Utlis.WriteLine("PushMes title : " + pushMes.Title);
+                Utlis.WriteLine("PushMes message : " + pushMes.Content);
+                Utlis.WriteLine("PushMes extras : " + pushMes.Extras);
+                Utlis.WriteLine("PushMes HomeId : " + pushMes.HomeId);
+
+                //UserInfo.Current.PushMesTitle = pushMes.Title;
+                //UserInfo.Current.PushMesMessage = pushMes.Content;
+                //UserInfo.Current.PushMesExtras = pushMes.Extras;
+                //UserInfo.Current.pushMesMessageType = pushMes.messageType;
+                //UserInfo.Current.pushMesExpantContent = pushMes.expantContent;
+                //UserInfo.Current.PushMesHomeId = pushMes.HomeId;
+                UserInfo.Current.pushMessageInfo = pushMes;
+                if (!string.IsNullOrEmpty(pushMes.spk))//鑷爺鍙瀵硅闇�瑕佽褰曟椂闂村弽鍛�
+                    UserInfo.Current.inCall = DateTime.Now;
+
+                if (!MainPage.IsEnterBackground)
+                {
+                    //NotificationManager nMgr = (NotificationManager)Shared.Application.Activity.GetSystemService(Context.NotificationService);
+                    //nMgr.CancelAll();
+                    Shared.Application.RunOnMainThread(() =>
+                    {
+                        HDLCommon.Current.AdjustPushMessage(pushMes);
+                    });
+                }
+            }
+            catch (Exception wexx) {
+                Console.WriteLine("safsdf"+wexx.Message);
             }
         }
 
@@ -199,25 +213,30 @@
                 i.SetFlags(ActivityFlags.NewTask);
                 context.StartActivity(i);
                 //瑙f瀽msg
-                AdjustPushMessage(pushMes);
-
-                //Shared.Application.RunOnMainThread(() =>
-                //{
-                //    if (Shared.Application.Activity == null)
-                //    {
-                //        var tempIntent = new Intent(context, typeof(Shared.BaseActivity));//Intent intent=new Intent( 璧峰缁勪欢瀵硅薄 , 鐩爣 Service.class);
-                //        tempIntent.SetFlags(ActivityFlags.BroughtToFront);
-                //        context.StartActivity(tempIntent);
-
-                //        HDLCommon.Current.AdjustPushMessage(pushMes);
-                //    }
-                //    else
-                //    {
-
-                //        (Shared.Application.Activity as BaseActivity).MoveToFront();
-                //        HDLCommon.Current.AdjustPushMessage(pushMes);
-                //    }
-                //});
+                AdjustPushMessage(pushMes);
+
+                //Shared.Application.RunOnMainThread(() =>
+                //{
+                //    if (Shared.Application.Activity == null)
+                //    {
+                //        var tempIntent = new Intent(context, typeof(Shared.BaseActivity));//Intent intent=new Intent( 璧峰缁勪欢瀵硅薄 , 鐩爣 Service.class);
+                //        tempIntent.SetFlags(ActivityFlags.BroughtToFront);
+                //        context.StartActivity(tempIntent);
+
+                //        HDLCommon.Current.AdjustPushMessage(pushMes);
+                //    }
+                //    else
+                //    {
+
+                //        (Shared.Application.Activity as BaseActivity).MoveToFront();
+                //        HDLCommon.Current.AdjustPushMessage(pushMes);
+                //    }
+                //});
+                if (!MainPage.IsEnterBackground)
+                {
+                    NotificationManager nMgr = (NotificationManager)Shared.Application.Activity.GetSystemService(Context.NotificationService);
+                    nMgr.CancelAll();
+                }
             }
             catch
             {
@@ -238,7 +257,7 @@
             {
                 while (MainPage.BasePageView == null)
                 {
-                    System.Threading.Thread.Sleep(300);
+                    System.Threading.Thread.Sleep(300);
                 }
                 Shared.Application.RunOnMainThread(() =>
                 {
diff --git a/HDL-ON_Android/Properties/AndroidManifest.xml b/HDL-ON_Android/Properties/AndroidManifest.xml
index cf1b3bd..eabdc56 100644
--- a/HDL-ON_Android/Properties/AndroidManifest.xml
+++ b/HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,6 +1,6 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202204081" android:versionName="1.5.6" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools">
-	<uses-sdk android:minSdkVersion="28" android:targetSdkVersion="30" />
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.5.6" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202205241">
+	<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
 	<!--鍙嬬洘-->
 	<!--<uses-sdk android:minSdkVersion="8"></uses-sdk>-->
 	<!--<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>-->
diff --git a/HDL-ON_Android/Resources/values-zh/strings.xml b/HDL-ON_Android/Resources/values-zh/strings.xml
index 8bba32d..52267b1 100644
--- a/HDL-ON_Android/Resources/values-zh/strings.xml
+++ b/HDL-ON_Android/Resources/values-zh/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources>
-	<string name="app_name">ON_Plus</string>
+	<string name="app_name">On_Pro</string>
 	<string name="action_settings">璁剧疆</string>
 	<string name="video_screenshot">鎴浘</string>
 	<string name="video_unlock">寮�閿�</string>
diff --git a/HDL-ON_Android/SplashActivity.cs b/HDL-ON_Android/SplashActivity.cs
index e5c0d5a..ac78c22 100644
--- a/HDL-ON_Android/SplashActivity.cs
+++ b/HDL-ON_Android/SplashActivity.cs
@@ -84,7 +84,7 @@
             JPushInterface.Init(this);
 
 
-            BaseActivity.OnCreateActoin += (activity, application) =>
+            BaseActivity.OnCreateActoin = (activity, application) =>
             {
                 //鑾峰彇鏋佸厜鎺ㄩ�両D
                 GetJPushRegistrationID(activity);
@@ -133,7 +133,7 @@
                 }
             };
 
-            BaseActivity.OnCreateActoin += (activity, application) =>
+            BaseActivity.OnCreateActoin = (activity, application) =>
             {
                 Language.CurrentLanguage = "Chinese";
                 Locale locale1 = Locale.Default;
@@ -173,16 +173,16 @@
                     HDLCommon.Current.UpdateInternetStatus((int)internetStatus, MainPage.IsEnterBackground);
                 };
             };
-            BaseActivity.RefreshUIAction += (activity) =>
+            BaseActivity.RefreshUIAction = (activity) =>
             {
                 MainPage.Show();
                 checkSomeInfo();
             };
-            BaseActivity.OnResumeAction += (activity) =>
+            BaseActivity.OnResumeAction = (activity) =>
             {
                 checkSomeInfo();
             };
-            BaseActivity.OnDestroyAction += (activity) =>
+            BaseActivity.OnDestroyAction = (activity) =>
             {
                 Console.WriteLine("OnDestroyAction");
                 //BusSocket.Stop();
@@ -229,7 +229,7 @@
             {
                 //淇濆瓨鑾峰彇鐨勬瀬鍏夋湇鍔″櫒涓婄殑娉ㄥ唽ID鍒版湰鍦版枃浠�
                 var tokenID = JPushInterface.GetRegistrationID(activity);
-                Console.WriteLine("RegistrationID:  " + tokenID);
+                Console.WriteLine("RegistrationID1:  " + tokenID);
                 if (!string.IsNullOrEmpty(tokenID) && OnAppConfig.Instance.PushDeviceToken != tokenID)
                 {
                     OnAppConfig.Instance.PushDeviceToken = tokenID;
@@ -250,7 +250,7 @@
                             break;
                         }
                     }
-                    Console.WriteLine("RegistrationID:  " + tokenID);
+                    Console.WriteLine("RegistrationID2:  " + tokenID);
                     if (!string.IsNullOrEmpty(tokenID) && OnAppConfig.Instance.PushDeviceToken != tokenID)
                     {
                         OnAppConfig.Instance.PushDeviceToken = tokenID;
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index e63fc9c..8787622 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -486,6 +486,7 @@
         <Folder Include="Resources\Phone\FunctionIcon\Electrical\AirSwitch\" />
         <Folder Include="Base.lproj\" />
         <Folder Include="Resources\Phone\FunctionIcon\CAC\" />
+        <Folder Include="Resources\Phone\FunctionIcon\Panel\" />
     </ItemGroup>
     <ItemGroup>
         <InterfaceDefinition Include="LaunchScreen.storyboard" />
@@ -1399,6 +1400,10 @@
       <BundleResource Include="Resources\Phone\FunctionIcon\Icon\sensorhelp.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\sensorhelp_blue.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\sensorhelp_white.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Panel\PanelHelpAlarmBgIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Panel\PanelHelpNormalBgIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\screenpanel.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Panel\PanelEnviBg.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Info.plist b/HDL-ON_iOS/Info.plist
index 5e9bc21..bdc5402 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.502204081</string>
+	<string>1.5.502205201</string>
 	<key>CFBundleVersion</key>
-	<string>1.5.504081</string>
+	<string>1.5.505201</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 1ca107b..78daf8e 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -524,6 +524,11 @@
 536=Temperature statistics
 537=Humidity statistics
 538=Uint
+539=Smart panel
+540=In Alarm
+541=Monitoring
+542=Wandering alarm
+543=Get more
 
 
 1000=Room Humidity
@@ -1040,6 +1045,8 @@
 7156=Distress
 7157=whether to unlock
 7158=is
+
+
 
 
 
@@ -1675,6 +1682,11 @@
 536=娓╁害缁熻鍥�
 537=婀垮害缁熻鍥�
 538=鍗曚綅
+539=鏅鸿兘闈㈡澘
+540=鎶ヨ涓�
+541=鐩戞帶涓�
+542=寰樺緤鎶ヨ
+543=鑾峰彇鏇村
  
 1000=瀹ゅ唴婀垮害
 1001=绔ラ攣
@@ -2173,7 +2185,6 @@
 7156=姹傛晳
 7157=鏄惁寮�閿佹椂
 7158=鏄�
-
 
 
  
@@ -2807,7 +2818,11 @@
 536=Temperature statistics
 537=Humidity statistics
 538=Uint
-
+539=Smart panel
+540=袧芯褉屑邪谢褜薪褘泄
+541=Monitoring
+542=Wandering alarm
+543=Get more
 
 
 1000=袙谢邪卸薪芯褋褌褜 胁 袩芯屑械褖械薪懈懈
@@ -3432,3 +3447,1144 @@
 
 
 
+[Spanish]
+1=Ingresar
+2=N煤mero de tel茅fono
+3=Luz
+4=Correo
+5=Por favor ingrese numero de cuenta 
+6=Contrase帽a
+7=Olvidar
+8=Registrarse
+9=Iniciar sesi贸n
+10=Espere鈥�
+11=Cerrar
+12=C贸digo de verificaci贸n
+13=Contrase帽a de acceso
+14=Registrarse
+15=N煤mero de tel茅fono
+16=Ingrese la contrase帽a
+17=Ingrese la contrase帽a nuevamente
+18=C贸digo de verificaci贸n
+19=N煤mero de tel茅fono incorrecto, ingrese nuevamente
+20=L a contrase帽a y la confirmaci贸n no coinciden. Ingrese la contrase帽a nuevamente
+21=El formato de la contrase帽a no cumple con los requisitos. Ingrese la contrase帽a nuevamente
+22=El usuario ya existe. Puede ingresar directamete
+23=C贸digo de verificaci贸n incorrecto, vuelva a ingresarlo. 
+24=N煤mero de cuenta incorrrecta, por favor ingrese el correo correcto 
+25=Correo
+26=Residencia
+27=Miembro
+28=Desarmar
+29=Armar
+30=Copia de seguridad
+31=Funci贸n auxiliar
+32=A帽adir funciones
+33=Modo noche
+34=Configuraci贸n general
+35=Soporte
+36=Casa
+37=Categor铆a
+38=Inteligente
+39=Individual
+40=Inicio de sesi贸n fallido, n煤mero de cuenta o contrase帽a incorrectos
+41=Error al enviar el codigo de verificaci贸n
+42=Error de red
+43=Error en el registo, int茅ntelo de nuevo
+44=Confirmar reinicio
+45=El numero de cuenta no existe, por favor aseg煤rese de estar registrado
+46=Inicio de sesion inv谩lido, iniciar sesion nuevamente
+47=Centro Personal
+48=Nombre
+49=C贸digo QR
+50=Tel茅fono
+51=Correo
+52=No enlazado
+53=Autorizaci贸n de terceros
+54=Cambiar contrase帽a
+55=Configuraci贸n de desbloqueo
+56=Establecer contrase帽a, gesto, huella digital o identificaci贸n facil para proteger su provacidad
+57=Salir
+58=Habitaci贸n
+59=Equipo
+60=Funci贸n
+61=Brillo
+62=Configuraci贸n
+63=Locaci贸n 
+64=Compartir 
+65=A帽adir acceso directo al escritorio
+66=Cambiar nombre
+67=Cancelar 
+68=Confirmar 
+69=Todo
+70=Cortina
+71=Nombre
+72=Address
+73=Gesti贸n de plantas
+74=Gesti贸n de habitaciones
+75=Migraci贸n de administrador 
+76=Migraci贸n de privilegios 
+77=Priviligio de depuraci贸n
+78=El administrador migra a otro usuario
+79=Toda los datos de la residencia migran al nuevo usuario
+80=Permitir que el personal visite su casa de forma remota
+81=Piso
+82=A帽adir piso
+83=Cambiar nombre de piso
+84=Error al a帽adir, el piso ya existe
+85=Escena 
+86=Borrar 
+87=Inmediata
+88=Eliminar el piso o no? 
+89=A帽adir habitaci贸n 
+90=Cmabiar la informacion de la habitaci贸n 
+91=Informaci贸n de la habitanci贸n 
+92=Nombre
+93=Piso
+94=Gesti贸n funcionamiento
+95=Guardar
+96=Eliminar la habitaci贸n 
+97=Galeria por defecto 
+98=Camara
+99=Seleccionar de la galeria 
+100=No asignado 
+101=Asignado
+102=No asignado 
+103=Eliminar la habitaci贸n o no? 
+104=Tiempo de transici贸n 
+105=Temperatura interna 
+106=AC
+107=Videoportero
+108=Sensor
+109=Monitor de seguridad 
+110=Panel Inteligente
+111=Musica 
+112=Aire fresco 
+113=Ambiental 
+114=Monitoreo de energ铆a 
+115=Electrodom茅sticos
+116=Bloqueo inteligente 
+117=Calefacci贸n 
+118=Abrir 
+119=Refrigeraci贸n 
+120=Calefacci贸n 
+121=Deshumidificar
+122=Auto
+123=Suministro de aire
+124=Alto 
+125=Medio 
+126=Bajo 
+127=Modo
+128=Velocidad del ventilador 
+129=Estas seguro de apagar todas las funciones de la habitaci贸n? 
+130=Abierta
+131=A帽adido a favoritos
+132=Felicitaciones! Registro exitoso 
+133=Inicio de sesion autom谩tico pronto鈥�.
+134=El numero de no esta registrado, por favor registrese e ingrese nuevamente
+135=Por favor, obtener codigo de verificaci贸n 
+136=La contrase帽a ha sido cambiada
+137=La direccion rsidencial no puede estar en blanco 
+138=El nombre de la residencia no puede estar en blanco 
+139=El nombre de la habitaci贸n no puede estar en blanco 
+140=El nombre del piso no puede estar en blanco 
+141=No se pudo revisar, el piso ya existe
+142=El nombre del equipo no puede estar en blanco 
+143=El nombre del usuario no puede estar en blanco 
+144=Nombre de usuario 
+145=Seleccione la p谩gina para bloquear 
+146=Puede seleccionar varias paginas que le gustaria mantener
+147=Error en codigo de verificaci贸n
+148=No protegido 
+149=Cuando empieza 
+150=Armar/Desarmar 
+151=Desbloquear remotamente 
+152=No se necesita contrase帽a/gesto al iniciar el software
+153=Iniciar sesi贸n 5 minutos despues de salir de la p谩gina, se requiere el m茅todo de desbloqueo correspondiente.
+154=Centro de miembros - utiliza para debloquear la funci贸n de seguridad como armar/desarmar
+155=Usado para desbloquear la cerradura inteligente 
+156=Configuraci贸n de desbloqueo
+157=Solo valido para host
+158=Desbloquear con contrase帽a
+159=Desbloquear con gesto 
+160=Desbloquear con huella 
+161=Desbloquear con identificaci贸n facial 
+162=Configuraci贸n de contrase帽a num茅rica
+163=Configuraci贸n exitosa
+164=Configuraci贸n de gestos
+165=Por favor dibuja tu patron de desbloqueo
+166=Requiere al menos una conexi贸n de 4 puntos, dibuje nuevamente 
+167=El patron y la corfirmacion que dibujaste no coincide, dibuje nuevamente
+168=Por favor dibuje su patr贸n nuevamente
+169=Desbloquear con huella o no? 
+170=Desbloquar con identificacion facial o no? 
+171=Verificar la contrase帽a num茅rica 
+172=Verificar el gesto 
+173=Por favor ingrese el gesto original 
+174=Por favor ingrese la contrase帽a num茅rica original 
+175=Verificaci贸n fallida, error en la contrase帽a
+176=Cambiar la contrase帽a num茅rica 
+177=Cambiar el gesto 
+178=Cerrar la configuraci贸n de desbloqueo o no? 
+179=Por favor verifique la huella 
+180=Verificaci贸n fallida, error en el gesto
+181=General 
+182=Dia 
+183=Noche 
+184=Abandonar 
+185=Por favor enlace el piso
+186=Ajuste de la velocidad del ventilador 
+187=Ventilador 
+188=Enchufe 
+189=Nivel 
+190=Chl
+191=Vol
+192=TV
+193=La habitanci贸n existe, error al cambiar 
+194=Medio Ambiente
+195=Contaminaci贸n fuerte
+196=Contaminaci贸n leve 
+197=Bueno
+198=Excelente
+199=Frio helado
+200=Frio
+201=Frio
+202=Confort
+203=Tibio 
+204=Caliente
+205=Extremadamente caliente 
+206=Hasta el estandar 
+207=Contaminaci贸n leve 
+208=Contaminaci贸n media
+209=Contaminaci贸n fuerte
+210=Fresco 
+211=Turbidez
+212=Hipoxia
+213=Hipoxia severa
+214=H煤medo 
+215=H煤medo 
+216=Seco 
+217=Temperatura
+218=Humedad 
+219=Rango 
+220=Nivel 
+221=Valor de color 
+222=PM1.0
+223=PM2.5
+224=Ruido
+225=Fuerza del viento
+226=CO2
+227=TV02
+228=Dia 
+229=Semana
+230=Mes
+231=Otra regi贸n 
+232=Administraci贸n de miembros 
+233=Apodo 
+234=Autoridad Administrativa
+235=Crear una escena
+236=Apodo no puede quedar en blanco 
+237=Editar apodo 
+238=La regi贸n utilizada 
+239=A帽adir miembro 
+240=Por favor ingrese el n煤mero de cuenta del miembro 
+
+241=Escanear codigo QR 
+242=Confirmar la invitaci贸n 
+243=Error en n煤mero de cuenta, por favor chequear 
+244=Agregue correctamente al miembro
+245=Error de datos, por favor intente de nuevo 
+246=Error al a帽adir, el numero de cuenta del miembro no esta registrada
+
+247=No puedes agregarte a ti mismo.
+248=El usuario no existe en esta residencia 
+249=Se ha agregado el n煤mero de cuenta del miembro, por lo que no se puede volver a agregar.
+
+250=Error de operaci贸n 
+251=Error al agregar, autoridad no valida 
+252=Guardado correctamente
+253=Guardando鈥spere un momento. 
+254=Adopo editado 
+255=Eliminar este miembro 
+256=Sin favoritos 
+257=Introduzca el contenido 
+258=Bienvenido al nuevo miembro 
+259=Esta seguro de elimianr este miembro? 
+260=Introduzca la contrase帽a de inicio de sesi贸n 
+261=Cambio de residencia exitoso
+262=Seleccionar todo 
+263=Compartir la selecci贸n funcional 
+264=Confirmar uso compartido 
+265=Compartir en 
+266=Error de uso compartido funcional 
+267=Uso compartido funcional exitoso 
+268=Correo 
+269=Cambiar el enlace 
+270=Eliminar el enlace
+271=Correo 
+272=Cambiar la direcci贸n de correo 
+273=Cambiar el m茅todo de verificaci贸n 
+274=El c贸digo de verificaci贸n ha sido enviado, por favor ingrese
+275=Reenviar 
+276=Verificaci贸n correcta 
+277=Correo 
+278=Por favor ingrese el nuevo correo 
+279=Enlazar correctamente su correo electr贸nico a su cuenta
+280=No vincular su correo electr贸nica a su cuenta 
+281=Eliminar el enlace de correo electr贸nico 
+282=Eliminaci贸n correcta de enlace 
+283=N煤mero de telefono
+284=N煤mero de telefono
+285=N煤mero de telefono
+286=Vincular correctamente su numero de tel茅fono a su cuenta
+287=No puede vincular su numero de tel茅fono a su cuenta 
+288=Cambiar el enlace 
+289=Quitar el enlace 
+290=No se puede obtener el historial 
+291=Sin favoritos 
+292=Acerca de ON+
+293=Miembro
+294=Administrador 
+295=Cambiar la contrase帽a
+296=Antes de cambiar la contrase帽a iniciar sesion
+297=Por favor verifique ID
+298=Verificaci贸n telefonica 
+299=Verificaci贸n de correo electronico 
+300=No se ha enlazado a la direcci贸n de correo electronico, no puede verificar 
+301=No se ha enlazado a un numero telefonico, no se puede verificar  
+302=Proceder al enlace 
+303=Eliminado correctamente el enlace a su numero de telefono 
+304=El codigo de verificaci贸n se ha enviado a: 
+305=Telefono 
+306=Correo 
+307=Recibi贸 nuevos datos, esta seguro de anularlos? 
+308=Automatizaci贸n 
+309=Crear una escena
+310=A帽adir escena 
+311=Configuraci贸n basica 
+312=Nombre
+313=Region 
+314=Completo
+315=Vista completa de la residencia
+316=Sleccionar 
+317=Ya a帽adido
+318=Conmutador 
+319=Velocidad del ventilador 
+320=Modo
+321=Encendido
+322=Apagado
+323=Escena 
+324=Retardo de escena
+325=Configuraci贸n de retardo
+326=Retardo 
+327=Capturar la escena
+328=Escena de pelicula 
+329=General 
+330=Modo autom谩tico 
+331=Potencia calentamiento suelo
+332=Refrigeraci贸n suelo
+333=Potencia de refrigeraci贸n del suelo
+334=Ajustar el porcentaje
+335=Sin retardo
+336=No hay escena disponible. A帽ade uno! 
+337=Editar la escena
+338=El nombre de la escena no puede estar en blanco
+339=El nombre de la escena ya existe, por favor revise 
+340=El nombre de la habitaci贸n ya existe, por favor revise
+341=Eliminar esta escena o no? 
+342=La puerta de enlace esta fuera de linea, falla de conexi贸n remota
+343=Error MAC, error de conexi贸n remota. 
+344=Error de conexi贸n remota. 
+345=Telefono 
+346=Correo 
+347=Ingrese el nuevo numero de telefono ceular 
+348=Ya se ha utilizado el numero de telefono celular 
+349=Ya se ha utilizado la direccion de correo electronico 
+350=La direcci贸n de correo electr贸nico es la misma que la actual, sin necesidad de cambiar.
+351=El n煤mero de tel茅fono es la mismo que la actual, sin necesidad de cambiar.
+352=Asignaci贸n de piso 
+353=Separar 
+354=Cerrar
+355=Acerca de
+356=Numero de version 
+357=Esta funcion no esta disponible! 
+358=Telefono 
+359=Correo 
+360=Escena de panel 
+361=No a帽adido
+362=Seleccionar todo 
+363=No se puede comunicar con el servidor, no se puede editar la informaci贸n del dispositivo
+364=No se puede comunicar con el servidor, no se puede editar la informaci贸n de la habitaci贸n
+365=No se puede comunicar con el servidor, no se puede editar la informaci贸n de la escena
+366=No se puede comunicar con el servidor, no se puede eliminar la escena
+367=No se puede comunicar con el servidor, no se puede eliminar el piso
+368=Bienvenido a disfrutar de ON+ 
+369=A帽adir residencia
+370=Convi茅rtete en miembro de la familia
+371=No se puede utilizar la funcion, por favor verifique su conexi贸n 
+372=No se puede crear una escena, por favro verifique su conexi贸n 
+373=Error al agregar un piso 
+374=Los datos residenciales se han eliminado, APP cambiar谩 autom谩ticamente a otra residencia.
+375=El gateway no esta conectado al servidor, no se puede crear la escena 
+376=No se puede introducir un car谩cter especial
+377=Toda la residencia 
+378=Tiempo de transici贸n 
+379=Velocidad de transicion 
+380=Esta funcion no esta disponible! 
+381=Recargar
+400=Bienvenido a casa
+401=Codigo de barras no v谩lido, intentelo de nuevo 
+402=Int茅ntelo de nuevo
+403=Temperatura de color 
+404=Ajuste r谩pido 
+405=Acogedor 
+406=Reuni贸n 
+407=Lectura
+408=A帽adir
+409=Marca de funci贸n 
+410=No ha agregado ningun dispositov de pataforma en la actualidad 
+411=Otros dispositivos de plataforma son compatibles con proveedores de serviciso externos 
+412=A帽adir
+413=Controlador no activado
+414=Controlador activado
+415=Alguien
+416=Registro
+417=Fuga de agua 
+418=En alarma 
+419=Normal 
+420=Seco caliente
+421=Secado al aire
+422=Desinfectar
+423=Iluminaci贸n
+424=Tiempo
+425=Tiempo seco caliente
+426=Tiempo de secado al aire
+427=Tiempo de desinfecci贸n 
+428=Tiempo Ani贸n
+429=H
+430=Min
+431=Actualmente esta agregando cualquier dispositivos de plataforma a
+432=Otros dispositivos de plataforma son compatibles con proveedores de serviciso externos 
+433=Valvula de agua 
+434=Interruptor de tiempo
+435=Control remoto 
+436=Dispositivos a帽adido 
+437=Lista de dispositivos 
+438=humedad:{0}% aire:viento {1}:{2}
+439=Tiempo real: {0} kw
+440=Siguiente paso
+441=Seleccione todas las 谩reas de estado de captura
+442=Generar escena
+443=Implementaci贸n personalizada
+444=Centro de seguridad
+445=Defensa de la casa
+446=Defensa en casa
+447=Defensa de vacaciones 
+448=Implementaci贸n fija 
+449=*Deshacer defensa no afecta
+450=Defensa contra desastres
+451=Defensa de 24 horas 
+452=Alarma antirrobo
+453=Silenciar alarma
+454=Informaci贸n de implementaci贸n
+455=El nombre no puede estar en blanco 
+456=Lienzo
+457=Consumo de energ铆a 
+458=Fecha
+459=Consumo de energ铆a en tiempo real 
+460=Consumo energ茅tico de este mes 
+461=Exterior/Interior
+462=Aun no has a帽adido ningun dispositivo
+
+463=Introduzca el c贸digo SN del dispositivo
+464=Puede empezar a usar la onda milim茅trica Zhaoguan
+465=Eliminar dispositivo
+466=STB
+467=Proyector
+468=Alguien cay贸
+469=Alguien est谩 en
+
+470=Bajo protecci贸n 
+471=Sensor de onda milim茅trica
+472=Exterior
+473=Columpio 
+474=Oscilaci贸n hacia arriba y hacia abajo 
+475=Gira a izquierda y derecha
+476=A帽adir residencia 
+477=Columpio 
+478=Patr贸n
+479=Velocidad
+480=Sensor ambiental 
+481=Puede empezar a usar el sensor ambiental 
+482=Sensor de gas
+483=Introduzca el c贸digo MAC del dispositivo
+484=Abierto
+485=Comprobar/Modificar
+486=Funci贸n de defensa/Estado de alarma 
+487=Objetivo de alarma despues de la activaci贸n 
+488=Paso de rostro
+489=Aplicar identificaci贸n facil a: 
+490=Control de acceso a la comunidad
+491=Acerda de identificacion facil y privacidad 
+492=Borrar datos 
+493=Resetear identificaci贸n facial 
+494=Establecer identificaci贸n facial 
+495=Configuraci贸n paso de rostro
+496=No hay ningun estado de implementacion de tareas asociado 
+497=Personalizado
+498=Implementaci贸n retrasada
+499=Agregar funci贸n de defensa
+500=Agregar destino de alarma
+501=Alarma de seguridad: se activa en {0}
+502=Borrar la alarma de seguridad?
+503=Exceso de estandar 
+504=Bueno
+505=Excelente
+506=Indentificacion facil ingresada correctamente
+507=Ingreso identificaci贸n facil fallida
+508=Formaldeh铆do
+509=Introduzca el nombre de seguridad
+510=Seleccione el destino de implementaci贸n 
+511=Atenuaci贸n combinada
+512=Mensajes no estan habilitados, vaya a configuraci贸n
+513=Introduzca el codigo de emparejamiento
+514=La informaci贸n de la ubicaci贸n del gateway no est谩 configurada
+515=Agregar seguridad
+516=Withdrawal
+------
+517=Instantaneous value
+518=Cumulative power consumption
+519=Voltage (V)
+520=Electric Current (A)
+521=Power (W)
+522=Refresh
+523=Delay alarm
+524=Bypass
+525=Enable
+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
+533=Statistical Chart
+534=Data
+535=Dew point temperature
+536=Temperature statistics  
+537=Humidity statistics
+538=Uint
+539=Smart panel
+540=En alarma
+541=Monitoring
+542=Wandering alarm
+543=Get more
+
+1000=Humedad de ambiente
+1001=V-chip
+1002=Ani贸n
+1003=Estirilizaci贸n
+1004=Humidificar
+1005=Restablecimiento del elemento de filtro
+1006=Iluminaci贸n
+1007=Autom谩tico
+1008=Manual
+1009=Fuerte
+1010=Dormir
+1011=Tiempo
+1012=Velocidad del viento
+1013=Engranaje 
+1014=Confirme si el elemento filtrante se ha restablecido y opere el equipo de acuerdo con el manual de instrucciones para que la vida 煤til del elemento filtrante se vuelva a cronometrar
+1015=Marcha baja
+1016=Engranaje medio
+1017=Marcha alta
+1018=Configuraci贸n de temportizaci贸n 
+1019=Hora
+1020=Tiempo del elemento de filtro: 
+1021=Filtro de aire
+1022=Velocidad actual del viento 
+1023=Cancelar tiempo 
+1024=Robot de barrido de pisos 
+1025=Succi贸n 
+1026=1掳 Marcha 
+1027=2掳 Marcha 
+1028=3掳 Marcha 
+1029=Carga 
+1030=Voz 
+1031=Silenciar 
+1032=Modo de limpieza
+1033=Gestion de consumibles
+1034=Historia
+1035=Autom谩tico
+1036=Aleatorio
+1037=Muro
+1038=Espiral
+1039=脕rea total limpia
+1040=Tiempo total de limpieza
+1041=Vida 煤til restante del cepillo lateral 
+1042=Vida 煤til residual del cepillo de rodillos 
+1043=Vida 煤til restante de la pantalla de filtro
+1044=Restablecer pincel de bordes
+1045=Restablecer cepillo de rollo
+1046=Restablecer pantalla
+1047=Confirmar para restablecer el pincel de bordes? 
+1048=Confirmar para restablecer el cepillo de rollo? 
+1049=Confirmar para restablecer la pantalla? 
+1050=Agregar dispositivo
+1051=Mini control remoto inteligente
+1052=Agregar control remoto por infrarrojos 
+1053=Presione el bot贸n del control remoto infrarrojo{0} durante 3 segundos y la luz indicadora{0} se enciende en azul r谩pidamente
+1054=Aseg煤rese de que su Bluetooth{0} est茅 activado y se pueda buscar
+1055=Siguiente paso
+1056=Buscando dispositivo鈥�
+1057=No se ha encontrado ning煤n mando a distancia por infrarrojos
+1058=1.Compruebe si el dispositivo est谩{0} encendido normalmente{0}2.Compruebe si la funci贸n Bluetooth{0} est谩 activada normalmente{0}3.Compruebe si el indicador{0} luz parpadea en azul
+1059=Buscar de nuevo
+1060=Conectar WiFi
+1061=En la actualidad, solo es compatible con la red WiFi 2.4G{0} y no admite nombres WiFi{0} con caracteres chinos
+1062=Contrase帽a
+1063=Conectando鈥�
+1064=Haga que el control remoto por infrarrojos{0} lo m谩s cerca posible del enrutador WiFi
+1065=Enlace de red
+1066=Subir a nube
+1067=Conectado con 茅xito 
+1068=1.Compruebe si el dispositivo est谩{0} encendido normalmente{0}2.Active la funci贸n Bluetooth{0}3.Presione el bot贸n durante 10 s y el indicador{0} luz estar谩 encendida
+1069=Error al agregar 
+1070=Agregado con 茅xito
+1071=隆Puedes empezar a usar el control infrarrojo{0}remote!
+1072=Empezar a usar 
+1073=Por favor encender Bluethooth
+1074=Informaci贸n de ubicaci贸n (GBS) no disponible
+1075=Red no disponible
+1076=Seleccione el mando a distancia por infrarrojos
+1077=Aire fresco
+1078=Pantalla de filtro residual 
+1079=Energia 
+1080=Ventilado
+;鍒�
+1081=1掳 Marcha 
+1082=2掳 Marcha 
+1083=3掳 Marcha 
+1084=1掳 Marcha 
+1085=2掳 Marcha 
+1086=3掳 Marcha 
+1087=Desbloquear 
+1088=Temp. Contrase帽a
+1089=Conectado 
+1090=Desconectado 
+1091=Generar 
+1092=Tiempo efectivo 
+1093=Tiempo de caducidad
+1094=Seleccionar hora 
+1095=Seleccionar fecha
+1096=Generar 
+1097=Se ha copiado la contrase帽a actual 
+1098=Borrar contrase帽a?
+1099=El tiempo de caducidad debe ser posterior al tiempo efectivo 
+1100=M茅todo de desbloqueo
+1101=Se sincronizar谩 con el bloqueo real, 驴confirmar para eliminar?
+1102=Borrar 
+1103=Comentar 
+1104=El comentario no puede estar en blanco
+1105=Asignar a: 
+1106=Escena de destino no existe 
+1107=Seleccionar escena
+1108=Desbloquear 
+1109=Siempre encendido
+1110=Configuraci贸n
+1111=Automatizaci贸n 
+1112=Activar el modo "Siempre encendido" 
+1113=Desactivar el modo "Siempre encendido"
+1114=Editar 
+1115=Siempre Encendido estar谩 apagado {0}
+1116=Condici贸n
+1117=Movimiento 
+1118=Siempre encendido
+1119=Bloquear 
+1120=Usuario
+1121=M茅todo de desbloqueo
+1122=Huella digital 
+1123=Tarjeta 
+1124=Clave
+1125=Informaci贸n
+1126=Desbloquear 
+1127=Alarma 
+1128=Sin conexi贸n 
+1129=Para el primer usuario, introduzca la contrase帽a.
+1130=Introduzca la contrase帽a de administrador
+1131=Enlace correcto
+1132=Saltar a la contrase帽a personal para desbloquear 
+1133=Saltar 
+1134=Por favor, dibuja tu patr贸n 
+1135=El bloqueo estar谩 siempre encendido despu茅s de la configuraci贸n, confirme para continuar
+1136=Confirmar 
+1137=Caducar 
+1138=Siempre Encendido caducar谩 despues de {0} horas
+1139=Introduzca el tiempo de caducidad 
+1140=El tiempo de caducidad no debe ser superior a 72 horas
+1141=El tiempo de caducidad no debe ser inferior a 1 hora
+1142=Error al establecer conexi贸n, intentelo de nuevo 
+1143=No se puede verificar el ID de administrador, vuelva a iniciar sesi贸n en la cuenta
+1144=Su residencia est谩 siendo migrada a otro HDL
+1145=Nota: 
+1. Todos sus datos de residencia se migrar谩n a un nuevo usuario. {0} 2. Despu茅s de la migraci贸n, el miembro original ser谩{0}autom谩ticamente desvinculado de esta residencia. {0} 3. La nueva cuenta es una HDL v谩lida. {0} 4. La cuenta del receptor no puede ser la misma{0} que la del lado de la migraci贸n.
+1147=Confirmar 
+1148=Cuenta del receptor de entrada
+1149=Perfil 
+1150=Confirmar migraci贸n de administrador de {0} a {1}
+1151=La cuenta no existe
+1152=No transferir la propiedad a usted mismo
+1153=Terminar
+1154=Transferir al usuario, por favor espere...
+1155={0} se ha convertido en administrador residencial
+1156=Los datos de residencia se eliminar谩n de su cuenta
+1157=No se puede migrar
+1158=Int茅ntelo de nuevo
+1159=Migraci贸n de la autoridad de administraci贸n
+1160=Su autoridad de administraci贸n se est谩 migrando a otros miembros
+1161=1.Sus datos (datos en la nube) de la residencia ser谩n{0}migrabados al nuevo administrador{0}2.Sus datos se intercambiar谩n con el miembro objetivo{0}y su permiso se cambiar谩 al miembro objetivo{0}
+1162=Confirmar
+1163=No hay miembros para elegir
+1164=Confirmar la migraci贸n de la autoridad de administraci贸n de {0} a {1}
+1165=Migrar correctamente
+1166=No se puede migrar
+1167=Migrar correctamente, y sus permisos se convertir谩n en miembros normales
+
+4000=Videoportero
+4001=Registro de llamadas 
+4002=*Los registros en la nube solo se conservan durante 30 d铆as
+4003=Llamada telef贸nica a domicilio
+4004=Contestado
+4005=Desbloqueado
+4006=A帽o
+4007=De
+4008=Llamada
+4009=Desbloqueado
+4010=Perdido
+4011=Rechazado
+4012=隆Los par谩metros de configuraci贸n son anormales!
+4013=C贸digo QR de control de acceso
+4014=Contrase帽a temporal 
+
+
+
+
+
+5000=Musica 
+5001=Grupo 
+5002=Configuracion 
+5003=Informaci贸n general 
+5004=Reproductor multimedia 
+5005=Bluetooth
+5006=Region 
+5007=Lista de canciones
+5008=Mis favoritos
+5009=Mi lista 
+5010=Seleccionar fuente 
+5011=Local
+5012=USB
+5013=Radio en linea
+5014=QQ musica
+5015=Bluetooth
+5016=Entrada de linea 
+5017=Revisar el nombre 
+5018=Individual
+5019=Juego aleatorio
+5020=Lista
+5021=Ha cambiado a: 
+5022=Cancelar 
+5023=Borrar 
+5024=Editar 
+5025=El nombre de la lista es el mismo
+5026=El nombre de la lista esta en blanco 
+5027=Introduzca el nombre de la lista 
+5028=Agregar nueva lista 
+5029=Preguntar 
+5030=Eliminar la carpeta o no? 
+5031=Confirmar 
+5032=El nombre est谩 en blanco 
+5033=A帽adido a la lista de canciones
+5034=Radio
+5035=Seleccionar grupo 
+5036=Play
+5037=Seleccione al menos mas de 2 reproductores multimedia
+5038=No se pueden seleccionar 2 o m谩s de 2 reproductores multimedia principales para convertirse en un grupo
+5039=No ha seleccionado el reproductor multimedia 
+5040=Seleccione esta opci贸n para quitar el reproductor multimedia 
+5041=No se ha seleccionado quitar el reproductor multimedia 
+5042=Configurando 
+5043=Borrando鈥�
+5044=Volumen
+5045=Volumen general
+5046=Ajustar volumen 
+5047="QQ music" no se ha instalado en su tel茅fono celular, proceda en el Centro de aplicaciones.
+
+6000=Normal 
+6001=Estado del dispositivo
+6002=piezas
+6003=Dispositivo de control IR actual
+6004=Se ha a帽adido el mando a distancia 
+6005=AC
+6006=TV 
+6007=Ventilador 
+6008=Decodificador
+6009=DVD
+6010=Proyector 
+6011=Personalizado
+6012=IR Control
+6013=Administraci贸n de dispositivos 
+6014=Agregar mando de distancia
+6015=En linea 
+6016=Sin conexi贸n 
+6017=N煤mero de version
+6018=Introduzca el nombre de mando a distancia 
+6019=Recordatorio: Despu茅s de crear el mando a distancia, se puede encontrar y utilizar en Function-Electrical Category{\r\n}
+6020=Boton recomendado
+6021=Introduzca el nombre del bot贸n 
+6022=Siguiente
+6023=Potencia
+6024=Volumen+
+6025=Volumen-
+6026=Channel+
+6027=Channel-
+6028=Subir 
+6029=Bajar
+6030=Izquierda
+6031=Derecha
+6032=Silenciar
+6034=Confirmar
+6035=Reproducir
+6037=Salir 
+6038=Menu
+6039=Pausar
+6040=Volver
+6041=Detener
+6042=Pagina de inicio
+6043=Avance r谩pido 
+6044=Rebobinar 
+6045=Tiempo 
+6046=Copiar funcion de control remoto
+6047=Apunta al centro del mando a distancia y pulsa el mismo bot贸n
+6048=Mando a distancia inteligente
+6049=Agregar bot贸n 
+6050=*Pulsaci贸n larga para la clasificaci贸n personalizada
+6051=Hecho
+6052=Agregado correctmente 
+6053=Se puede clasificar -funcion-operaci贸n electrica y uso 
+6054=Clasificaci贸n
+6055=Nombre del mando a distancia 
+6056=Regi贸n 
+6057=Continuar agregando
+6058=El茅ctrico
+6059=Error al agregar 
+6060=Reintentar
+6061=Hacer coincidir el mando a distancia
+6062=Haga clic en el bot贸n de abajo
+6063=Confirmar si el dispositivo esta respondiendo
+6064=Error de control 
+6065=Control exitoso 
+6066=Encendido 
+6067=Modo de enfriamiento
+6068=
+6069=Temperatura 26掳
+6070=Eliminar dispositivo
+6071=Modificar nombre
+6072=Confirmar eliminaci贸n 
+6073=Cancelar
+6074=El mando a distancia no puede superar los 10 puntos
+6075=El 谩rea donde pertenece el control remoto: 
+6076=Editar informaci贸n
+6077=Actualizaci贸n de la versi贸n 
+6078=El sistema est谩 en mantenimiento ~ Int茅ntelo de nuevo m谩s tarde ~
+6079=Error al obtener datos
+6080=Esta funcion no se admite temporalmente
+6081=Seleccionar banda IR
+6082=
+6083=Baja velocidad
+6084=Interruptor de velocidad del viento
+6085=Alta velocidad 
+6086=Auto
+6087=Temperatura+
+6088=Temperatura-
+6089=Purificador de aire
+6090=Calentador de agua
+6091=Producto no existe
+6092=El dispositivo no existe
+6093=El dispositivo no esta en linea
+6094=El dispositivo de puerta de enlace no existe
+6095=Mas de 30 botondes de adici贸n 
+6000=Renombrar
+6001=Introduzca el nombre
+6002=Xiaodu
+6003=aispeech
+6004=El sistema est谩 en mantenimiento ~ Int茅ntelo de nuevo m谩s tarde ~
+6005=Desvinculado
+6006=Altavoz inteligente
+6007=Controlar contenido
+6008=Error al cagar datos 
+6009=Error al configurar datos 
+6010="Todav铆a no hay altavoz", "Vaya a la aplicaci贸n de terceros para vincular el altavoz inteligente".
+6011=La modificaci贸n de los comentarios no tiene 茅xito
+6012=Quieres desvincularte? 
+6013=Desvinculaci贸n 
+6014=transferir a app de terceros 
+6015=A帽adir altavoces
+7000=Crear automatizaci贸n
+7001=Etidar automatizaci贸n
+7002=Si
+7003=Cuando cumple las siguientes condiciones al mismo tiempo
+7004=Cundo cumple una de las condiciones siguintes
+7005=Continuar con la ejecuci贸n 
+7006=L asiguiente acci贸n 
+7007=M茅todo de reciclaje 
+7008=Ejecutar una vez
+7009=Todos los d铆as
+7010=Cada semana 
+7011=Cada mes
+7012=Guardar
+7013=Mensaje push
+7014=Enviar notificaci贸n 
+7015=Seleccionar la condici贸n 
+7016=Momento 
+7017=Seleccione la condici贸n de tiempo 
+7018=Hora
+7019=Intervalo de tiempo 
+7020=Hora 
+7021=Minuto 
+7022=Segundo 
+7023=Cancelar 
+7024=Seguro 
+7025=*Debe ejecutar la automatizaci贸n que establezca una vez durante el intervalo de tiempo establecido.
+7026=Hora de inicio
+7027=Hora de finalizaci贸n 
+7028=Funci贸n
+7029=Seleccionar condici贸n funcional
+7030=Toda la regi贸n 
+7031=Toda la funci贸n 
+7032=Encendido
+7033=Apagado
+7034=Conmutador 
+7035=Completo
+7036=Agregar ejecuci贸n 
+7037=Lunes 
+7038=Martes
+7039=Mi茅rcoles
+7040=Jueves
+7041=Viernes
+7042=S谩bado
+7043=Domingo 
+7044=Cumplir con la condici贸n 
+7045=Configuraci贸n 
+7046=Nombre
+7047=Cambiar el nombre
+7048=El nombre de la automatizaci贸n ya existe 
+7049=Eliminar automatizaci贸n o no? 
+7050=Agregar escena
+7051=Retraso
+7052=No se puede guardar, int茅ntelo de nuevo
+7053=No se puede eliminar, int茅ntelo de nuevo
+7054=Pausar
+7055=Brillo
+7056=Porcentaje 
+7057=Modo
+7058=Enfriamiento
+7059=Calefacci贸n 
+7060=Autom谩tico
+7061=Deshumidificar 
+7062=Temperatura 
+7063=Velocidad de ventilador 
+7064=D铆a 
+7065=Noche 
+7066=Abandonar 
+7067=General 
+7068=Tiempo 
+7069=No ha configurado la automatizaci贸n, procesa a configurar 
+7070=Nada est谩 aqu铆 
+7071=No se ha establecido la hora de inicio, por favor configurar 
+7072=La hora de finalizaci贸n no se ha establecido, por favor estableza 
+7073=La hora de inicio y la hora de finalizacion no deben ser las mismas
+7074=La hora de inicio no debe ser mayor a la hora de finalizaci贸n 
+7075=La condicion no debe estar en blanco 
+7076=Target no debe estar en blanco 
+7077=La hora no se ha establecido, por favor establezca 
+7078=L a condici贸n o el objetivo no deben estar en blanco 
+7079=L a puerta de enlace esta fuera de l铆nea 
+7080=Salida/Puesta de sol/Mediod铆a
+7081=Amanecer 
+7082=Puesta de sol 
+7083=Mediod铆a 
+7084=A tiempo 
+7085=Avance 
+7086=Minutos
+7087=Cambio exterior 
+7088=Seleccionar condicion de cambio al aire libre
+7089=Temperatura exterior, humedad, cambio de PM2.5
+7090=Cambio de clima (clima urbano) 
+7091=Cambio en el entorno exterior 
+7092=Temperatura superior a 
+7093=Temperatura inferior
+7094=Humedad superior a 
+7095=Humedad por debajo 
+7096=PM2.5 supeior a
+7097=PM2.5 por debajo 
+7098=D铆a soleado
+7099=Nublado 
+7100=
+7101=*Establezca el valor en este rango (1 ~ 100).
+7102=Sin valor establecido 
+7103=Excelente: 0 ~ 35ug/m3
+7104=Bueno: 36 ~ 75ug/m3
+7105=Contaminaci贸n lum铆nica: 76 ~ 115ug/m3
+7106=Contaminaci贸n moderada: 116 ~ 150ug/m3
+7107=Contaminaci贸n intensa: > 150ug/m3
+7108=Fuga/Sin fuga
+7109=Fuga
+7110=Sin fuga
+7111=Fuga de agua/sin fugas de agua
+7112=Fuga de agua 
+7113=Sin fuga de agua 
+7114=Alguien/Nadie
+7115=Alguien
+7116=Nadie
+7117=Abierto/Cerrado
+7118=Activado
+7119=Cerrar
+7120=Funci贸n anti-desmantelamiento
+7121=En linea 
+7122=Fuera de linea 
+7123=Calidad del aire
+7124=Excelente
+7125=Bueno
+7126=Pobre
+7127=Enviar notificaci贸n 
+7128=Contenido de la notificaci贸n 
+7129=(dentro de los 100 caracteres)
+7130=Selecci贸n de cuenta
+7131=Aplicaci贸n push 
+7132=Automatizaci贸n 
+7133=Ejecutado
+7134=Estado de destino
+7135=Ca铆da
+7136=Temperatura
+7137=Humedad 
+7138=PM2.5
+7139=CO2
+7140=TVOC
+7141=Exceder 
+7142=Grave
+7143=Alto 
+7144=Excelencia 
+7145=Seguridad 
+7146=A帽adir seguridad
+7147=Armado 
+7148=Desarmado
+7149=Manualmente
+7150=Inteligente
+7151=Bueno 
+7152=Dejar o Arrivar a un lugar 
+7153=Salir 
+7154=Llegar 
+9000=Inicio sesi贸n con un nuevo n煤mero de tel茅fono celular 
+9001=Inicie sesi贸n con una nueva direcci贸n de correo el茅ctr贸nico 
+9002=Nuevo numero de celular revisado
+9003=Nuevo numero de celular enlazado
+9004=Nueva direcci贸n de correo electr贸nico revisado
+9005=Nueva direcci贸n de correo electr贸nico enlazado 
+9006=El c贸digo de verificaci贸n puede enviarse m谩s tarde, espere.
+9007=Por favor, espere
+9008=Volver 
+9009=El usuario no desea ser nombrado
+9010=Nueva contrase帽a 
+9011=Introduzca la nueva contrase帽a nuevamente
+9012=De acuerdo 
+9013=Acuerdo de servicio 
+9014=Normativa de protecci贸n de la informaci贸n del usuario
+9015=y
+9016=Lea y acepte el Acuerdo de servicio del usuario y las regulaciones de protecci贸n de la informaci贸n del usuario.
+9017=Esta seguro de cerrar sesi贸n?
+9018=Seleccione pais/regi贸n 
+9019=Actualizar ahora
+9020=Ahora no 
+9021=Pa铆s/regi贸n 
+9022=Informaci贸n del servidor 
+9023=Servidor actual 
+9024=*El servidor hace referencia a la base de datos para la nube, sin necesidad alguna, no se recomienda realizar migraci贸n de datos.
+9025=Si es necesaria la migraci贸n de datos, marque
+9026=Introducci贸n a la funci贸n 
+9027=Quejas 
+9028=Actualizaci贸n de la versi贸n 
+9029=(por favor indique "quejas" en el t铆tulo, luego procesaremos en prioridad.)
+9030=Copia realizada
+9031=No hay nada aqu铆 
+9032=Obtener nueva versi贸n 
+9033=脷ltima versi贸n 
+9034=Que puedo hacer por ti? 
+9035=Problema de funci贸n 
+9036=Problema de escena
+9037=Soporte de aplicaciones 
+9038=(Preguntas frecuentes) 
+9039=Compartir y funci贸n 
+9040=Alertas 
+9041=Informaci贸n del sistema 
+9042=Centro de informaci贸n 
+9043=Tenga en cuenta que su n煤mero de cuenta ha iniciado sesi贸n en otro lugar. Si no lo hace usted mismo, cambie la contrase帽a de inmediato.
+9044=Cargado correctamente
+9045=No se puede cargar 
+9046=Revisado correctamente
+9047=La contrase帽a que ha revisado ha entrado en vigor, vuelva a iniciar sesi贸n.
+9048=Iniciar sesion con la contrase帽a del numero de cuenta 
+9049=Contrase帽a incorrecta para muchas veces, 隆el n煤mero de cuenta est谩 bloqueado!
+9050=Verificar la identificaci贸n facial 
+9051=Error al guardar la identificaci贸n facial del usuario 
+9052=La notificaci贸n push de registro esta disponible 
+9053=La notificaci贸n push de registro es anormal 
+9054=Verificaci贸n numerica de contrase帽a 
+9055=Verificaci贸n de gestos 
+9056=A帽o 
+9057=Sin funci贸n regional 
+9058=Guardar o no?
+9059=No compartir ahora 
+9060=Usos-permiso 
+9061=Encuentra tu contrase帽a haciendo clic en "Olvid茅 mi contrase帽a", o int茅ntalo de nuevo en {0} minuto.
+9062=Comprobar 
+9063=Todav铆a tienes {0} veces.
+9064=Altavoz inteligente
+9065=Gesti贸n de datos 
+9066=Comentarios
+9067=Los comentarios no pueden estar en blanco 
+9068=Desea desvincularse? 
+9069=Aviso de propiedad
+10000=Contrasela no v谩lida, vuelva a iniciar sesi贸n 
+10001=Error al solicitar el servidor, int茅ntelo de nuevo m谩s tarde.
+10002=Mantenimiento del sistema, int茅ntalo de nuevo mas tarde 
+10003=No puede iniciar sesi贸n, agregue la residencia al principio.
+10004=El n煤mero de cuenta ya existe
+10005=Env铆as el c贸digo de verificaci贸n con demasiada frecuencia, int茅ntalo de nuevo m谩s tarde.
+10006=Error de firma 
+10007=Sistema ocupado, intentelo de nuevo mas tarde! 
+10008=Contrasea no v谩lida para iniciar sesi贸n 
+10009=El usuario ha sido deshabilitado 
+10010=Error de contrase帽a original 
+10011=El n煤mero de subcuenta ya existe 
+10012=El npumero de subcuenta no existe 
+10013=No esta permitido agregarse como miembro 
+10014=La residencia actual no pertenece al este n煤mero de cuenta 
+10015=El nombre de la residencia ya existe 
+10016=La residencia no existe 
+10017=Error de solicitud, par谩metro anormal! 
+10018=El n煤mero que enlazaste es duplicado 
+10019=Enlazar el gateway primero 
+10020=El gateway no existe 
+10021=El gateway esta fuera de l铆nea
+10022=El dispositivo est谩 fuera de l铆nea 
+10023=Error de control 
+10024=La escena ya existe 
+10025=La automatizaci贸n ya existe 
+10026=Spk no admite esta funci贸n 
+10027=Spk no admite este valor funcional 
+10028=No tienes permiso 
+10029=El destino del dispositivo est谩 duplicado 
+10030=No tiene permiso para el control remoto 
+10031=El dispositivo no debe estar en blanco 
+10032=El usuario no  tiene permiso 
+10033=El dispositivo no existe
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/screenpanel.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/screenpanel.png
new file mode 100644
index 0000000..56ba0c5
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/screenpanel.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelEnviBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelEnviBg.png
new file mode 100644
index 0000000..d6482d3
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelEnviBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpAlarmBgIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpAlarmBgIcon.png
new file mode 100644
index 0000000..72ece8b
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpAlarmBgIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpNormalBgIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpNormalBgIcon.png
new file mode 100644
index 0000000..a55c35e
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpNormalBgIcon.png
Binary files differ
diff --git a/HDL_APP_Project.sln b/HDL_APP_Project.sln
index 965bf82..fab839a 100644
--- a/HDL_APP_Project.sln
+++ b/HDL_APP_Project.sln
@@ -18,11 +18,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UMSdk", "UMSdk\UMSdk.csproj", "{5CD1B2DE-1ABD-4B46-8C97-CCB6EA90346A}"
 EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{510DDCFF-AA25-4C6E-B578-B3B7A2EFBB96}"
-	ProjectSection(SolutionItems) = preProject
-		LogicMethod.cs = LogicMethod.cs
-	EndProjectSection
-EndProject
 Global
 	GlobalSection(SharedMSBuildProjectFiles) = preSolution
 		HDL_ON\HDL_ON.projitems*{09712674-2a38-407b-b1e2-560b2c352f9a}*SharedItemsImports = 4
diff --git a/HDL_ON/Common/ImageUtlis.cs b/HDL_ON/Common/ImageUtlis.cs
index 918483d..fe739d5 100644
--- a/HDL_ON/Common/ImageUtlis.cs
+++ b/HDL_ON/Common/ImageUtlis.cs
@@ -466,6 +466,47 @@
             }
         }
 
+
+
+        /// <summary>
+        /// 涓嬭浇鐢ㄦ埛澶村儚
+        /// </summary>
+        /// <param name="imageUrl"></param>
+        /// <param name="ignoreCache">蹇界暐缂撳瓨</param>
+        /// <param name="regionUrl">鎸囧畾鏈嶅姟鍣ㄥ煙鍚�,浼犵┖涓轰娇鐢ㄥ綋鍓嶇敤鎴峰湴鍧�</param>
+        /// <returns></returns>
+        public byte[] DownImageByImageUrl(string imageUrl, bool ignoreCache = false)
+        {
+            try
+            {
+                if (string.IsNullOrEmpty(imageUrl)) return null;
+
+                byte[] imageBytes;
+                if (!ignoreCache && Exists(imageUrl))
+                {
+                    //鏈湴鏈夌紦瀛�
+                    imageBytes = ReadFile(imageUrl);
+                }
+                else
+                {
+                    //涓嬭浇
+                    imageBytes = HttpUtil.HttpsDownload(imageUrl);
+                    if (imageBytes != null)
+                    {
+                        //淇濆瓨鍒版湰鍦�
+                        WriteFileByBytes(imageUrl, imageBytes);
+                    }
+
+                }
+                return imageBytes;
+            }
+            catch
+            {
+                return null;
+            }
+        }
+
+
         #endregion
     }
 }
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index 98dd5ac..d537d1f 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -4,6 +4,23 @@
 {
     public static class StringId
     {
+
+        /// <summary>
+        /// 鑾峰彇鏇村
+        /// </summary>
+        public const int GetMore = 543;
+        /// <summary>
+        /// 寰樺緤鎶ヨ
+        /// </summary>
+        public const int WanderingAlarm = 542;
+        /// <summary>
+        /// 鐩戞帶涓�
+        /// </summary>
+        public const int Monitoring = 541;
+        /// <summary>
+        /// 鎶ヨ涓�
+        /// </summary>
+        public const int InAlarming = 540;
         /// <summary>
         /// 鏅鸿兘闈㈡澘
         /// </summary>
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index 5f9b849..5672c7a 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -94,7 +94,7 @@
             }
             set
             {
-                if (_GatewayOnline_Local != value)
+                //if (_GatewayOnline_Local != value)
                 {
                     _GatewayOnline_Local = value;
                     if (value)
@@ -129,7 +129,7 @@
             }
             set
             {
-                if (_GatewayOnline_Cloud != value)
+                //if (_GatewayOnline_Cloud != value)
                 {
                     _GatewayOnline_Cloud = value;
                     if(GatewayOnline_Local)
@@ -460,6 +460,7 @@
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson);
                         new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id,resend);
                         MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
+                        //Control.Ins.MsgInfoList.Add($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}"+"\r\n");
                     }
                 }
                 //杩滅▼閫氳
@@ -655,6 +656,79 @@
         }
 
         /// <summary>
+        /// 鍙戦�佽鍙栧懡浠�
+        /// 鑷姩鍒ゆ柇鏄惁涓篈鍗忚璁惧
+        /// </summary>
+        public void SendReadCommand(List<Function> functions, bool forceRemote = false)
+        {
+            List<string> sids = new List<string>();
+            foreach (Function function in functions)
+            {
+                sids.Add(function.sid);
+                function.refreshTime = DateTime.Now;
+            }
+            if (forceRemote)
+            {
+
+                var pm = new DAL.Server.HttpServerRequest();
+                var pack = pm.RefreshDeviceStatus(sids);
+            }
+            else
+            {
+                if (Ins.GatewayOnline_Local)
+                {
+
+                    if (DB_ResidenceData.Instance.GatewayType == 0)
+                    {
+                        try
+                        {
+                            var busClient = new Control_Udp();
+                            foreach (Function function in functions)
+                            {
+                                busClient.ReadBusData(function);
+                            }
+                            
+                        }
+                        catch (Exception ex)
+                        {
+                            MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}");
+                        }
+                    }
+                    else
+                    {
+                        var objects = new List<Dictionary<string, string>>();
+
+
+                        foreach (Function function in functions)
+                        {
+                            var readKey = new Dictionary<string, string>();
+                            readKey.Add("sid", function.sid);
+                            objects.Add(readKey);
+                        }
+
+
+                        var readDataObj = new AlinkReadFunctionStatusObj()
+                        {
+                            id = Ins.msg_id.ToString(),
+                            objects = objects,
+                            time_stamp = Utlis.GetTimestamp()
+                        };
+                        var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+                        var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
+                        MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
+                        new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
+                    }
+                }
+                else
+                {
+                    var pm = new DAL.Server.HttpServerRequest();
+                    var pack = pm.RefreshDeviceStatus(sids);
+                }
+            }
+        }
+
+
+        /// <summary>
         /// 瀹夐槻鎺у埗
         /// </summary>
         public void ControlSecurity(SecurityAlarm securityAlarm,string state)
@@ -666,7 +740,7 @@
                  gatewayId = DB_ResidenceData.Instance.HomeGateway.gatewayId,
                   sid = securityAlarm.sid, status = state, userSecurityId = securityAlarm.userSecurityId
                 } });
-                MainPage.Log($"瀹夐槻鎺у埗缁撴灉:{result.Code}");
+                MainPage.Log($"瀹夐槻鎺у埗缁撴灉:code锛歿result.Code}锛沵sg锛歿result.message}");
             }
             else
             {
@@ -951,6 +1025,7 @@
         /// <summary>
         /// 鏇存柊璁惧鐘舵��
         /// A鍗忚鏁版嵁
+        /// Tag Link鐘舵�佸鐞�
         /// </summary>
         /// <param name="updateBytes"></param>
         public void UpdataFunctionStatus(string revString, byte[] usefulBytes,bool isCloudData = false)
@@ -1194,6 +1269,7 @@
                             case SPK.AirFreshStandard:
                             case SPK.HvacAirFresh:
                             case SPK.SensorGas:
+                            case SPK.SensorHelp:
                                 //璁惧鐘舵�佹帹閫�
                                 //鐘舵�佹洿鏂�
                                 Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
diff --git a/HDL_ON/DAL/Mqtt/MqttClient.cs b/HDL_ON/DAL/Mqtt/MqttClient.cs
index 01d44d8..882cf3b 100644
--- a/HDL_ON/DAL/Mqtt/MqttClient.cs
+++ b/HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -511,12 +511,15 @@
                                 }
                                 #endregion
                                 //A缃戝叧璁惧鐘舵��-鍖呭惈娑傞甫璁惧
+                                //Tag 缃戠粶鐘舵�佽В鏋�
                                 else if (topic == $"/user/{DB_ResidenceData.Instance.CurrentRegion.id}/app/thing/property/send")
                                 {
                                     var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, tuyaEncryptKey);
                                     var revString = Encoding.UTF8.GetString(bytes);
                                     MainPage.Log($"mqtt 鐘舵�佹洿鏂�:{revString}");
                                     Control.Ins.UpdataFunctionStatus(revString, null, true);
+                                    //Control.Ins.MsgInfoList.Add($"mqtt 鐘舵�佹洿鏂�:{revString}");
+
                                     //Control.Ins.MsgInfoList.Add(revString + "\r\n");
                                 }
                                 //涓�绔彛鏁版嵁瑙f瀽
@@ -1094,8 +1097,17 @@
             //鍒涘缓AES瑙e瘑鍣ㄥ璞�
             var cTransform = rm.CreateDecryptor();
 
+            byte[] reData = null;
             //浣跨敤AES灏嗗瘑鏂囨祦杞垚鏄庢枃鐨勫瓧鑺傛暟缁�
-            return cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+            try
+            {
+                reData = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.Message);
+            }
+            return reData;
         }
         #endregion
 
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 0fdea4a..0e0a902 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -2621,6 +2621,25 @@
             var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_FL_Check, requestJson);
             return pack;
         }
+        /// <summary>
+        /// 鑾峰彇闂ㄥ彛鏈哄緲寰婃姤璀︽暟鎹�
+        /// </summary>
+        /// <param name="deviceId"></param>
+        /// <returns></returns>
+        public ResponsePackNew GetAlarmRecords(string deviceId, int pageSize, int pageNo, string alarmType = "PROWLER_ALARM")
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+            d.Add("deviceId", deviceId);
+            d.Add("alarmType", alarmType);
+            d.Add("pageSize", pageSize);
+            d.Add("pageNo", pageNo);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_ALARM_RECORDS, requestJson);
+            return pack;
+
+        }
+
         #endregion
 
         #region 鈻� 闂ㄩ攣鐩稿叧____________________________
diff --git a/HDL_ON/DAL/Server/HttpUtil.cs b/HDL_ON/DAL/Server/HttpUtil.cs
index 82b6dd0..ce16936 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/DAL/Server/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index d1d23bb..b569143 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -668,6 +668,21 @@
         /// 鍔ㄦ�佸瘑鐮�/浜岀淮鐮佸紑閿�
         /// </summary>
         public const string API_POST_FL_QRcode = "http://112.74.164.111:180/api.php/Device/setdynamicpwd";
+        /// <summary>
+        /// 涓存椂瀵嗙爜
+        /// 浜岀淮鐮�
+        /// </summary>
+        public const string API_Post_Temporary_Password = "/home-wisdom/app/freeview/temppwd/add";
+        /// <summary>
+        /// 鑾峰彇闂ㄧ浜岀淮鐮�
+        /// </summary>
+        public const string API_POST_OwnerQRCode = "/community-wisdom/doorDevice/getOwnerQRCode";
+        /// <summary>
+        /// 寰樺緤鎶ヨ
+        /// </summary>
+        public const string API_POST_ALARM_RECORDS = "/home-wisdom/app/device/alarmRecords/listByPage";
+                                                      
+
         #endregion
 
 
diff --git a/HDL_ON/DAL/Server/NewApiRes.cs b/HDL_ON/DAL/Server/NewApiRes.cs
index c92e4d1..f005989 100644
--- a/HDL_ON/DAL/Server/NewApiRes.cs
+++ b/HDL_ON/DAL/Server/NewApiRes.cs
@@ -1505,7 +1505,7 @@
         /// <summary>
         /// 浣忓畢ID
         /// </summary>
-        public string homeId;
+        public string homeId ;
         /// <summary>
         /// 闄勫姞鍐呭
         /// </summary>
diff --git a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
index 56ec48f..abbdbd3 100644
--- a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
+++ b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
@@ -117,6 +117,7 @@
             if (mHDLSipInfo == null) return;
 
 #if __IOS__
+            //Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login("1003", "123456", "192.168.31.194:5060");
             //Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login("6666", "85521566", "116.62.26.215:5060");
             Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login(mHDLSipInfo.sipAccount, mHDLSipInfo.sipPasswd, mHDLSipInfo.realm);
 #else
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 6fdb8d9..a142825 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -88,7 +88,7 @@
         {
             var attrs = new List<string>();
 
-            foreach(var attr in  attributes)
+            foreach (var attr in attributes)
             {
                 attrs.Add(attr.key);
             }
@@ -349,6 +349,26 @@
         public List<string> roomIds = new List<string>();
 
         /// <summary>
+        /// 瀛樺偍灞炴�ч厤缃�
+        /// 鐜浼犳劅鍣ㄧ殑绛夌骇
+        /// </summary>
+        public List<AttrKeyConfig> attrKeyConfigs = new List<AttrKeyConfig>();
+
+        public List<AttrKeyConfig> GetAttrKeyConfigs(string key)
+        {
+            if (attrKeyConfigs.Count == 0)
+            {
+                switch (key)
+                {
+                    case "pm2.5":
+
+                        break;
+                }
+            }
+            return attrKeyConfigs;
+        }
+
+        /// <summary>
         /// bus鍗忚鏁版嵁鏍煎紡
         /// 浣跨敤A鍗忚鎺у埗鏃讹紝鏀瑰睘鎬т负绌�
         /// </summary>
@@ -361,6 +381,11 @@
         /// 鏄惁鍦ㄧ嚎
         /// </summary>
         public bool online = true;
+
+        /// <summary>
+        /// 鐜闈㈡澘 缁戝畾鐨� 璁惧鐩爣sid鍒楄〃
+        /// </summary>
+        public List<string> targetSids = new List<string>();
         /// <summary>
         /// 浜戠鏁版嵁鍒涘缓鐨勬椂闂�
         /// </summary>
@@ -403,7 +428,7 @@
                         _trait_on_off.curValue = "off";
                     }
                 }
-                if(_trait_on_off.curValue.ToString() != "on"&& _trait_on_off.curValue.ToString() != "off" && _trait_on_off.curValue.ToString() != "stop")
+                if (_trait_on_off.curValue.ToString() != "on" && _trait_on_off.curValue.ToString() != "off" && _trait_on_off.curValue.ToString() != "stop")
                 {
                     _trait_on_off.curValue = "off";
                 }
@@ -470,7 +495,7 @@
                         collect = !collect;
                         IMessageCommon.Current.ShowErrorInfoAlter(result);
                     });
-                }else
+                } else
                 {
                     Application.RunOnMainThread(() =>
                     {
@@ -495,7 +520,7 @@
                 }
                 else
                 {
-                    result = ApiUtlis.Ins.HttpRequest.UnbindDeviceToRoom(deviceId,roomId);
+                    result = ApiUtlis.Ins.HttpRequest.UnbindDeviceToRoom(deviceId, roomId);
                 }
                 //鎻愮ず閿欒
                 if (result != StateCode.SUCCESS)
@@ -538,9 +563,9 @@
                 {
                     roomNameList += ",";
                 }
-                roomNameList += findRoom.floorName +"-"+ findRoom.roomName;
+                roomNameList += findRoom.floorName + "-" + findRoom.roomName;
             }
-            if (roomNameList == "" )
+            if (roomNameList == "")
             {
                 roomNameList = Language.StringByID(StringId.WholeZone);
             }
@@ -653,14 +678,14 @@
                     case FunctionAttributeKey.Percent:
                     case FunctionAttributeKey.CCT:
                     case FunctionAttributeKey.RGB:
-                    //case FunctionAttributeKey.FadeTime:
+                        //case FunctionAttributeKey.FadeTime:
                         if (attr.curValue.ToString() == "{}")
                         {
                             if (attr.key == FunctionAttributeKey.OnOff)
                             {
                                 attr.curValue = "off";
                             }
-                            else if (attr.key == FunctionAttributeKey.Mode )
+                            else if (attr.key == FunctionAttributeKey.Mode)
                             {
                                 if (DB_ResidenceData.Instance.GatewayType == 0)
                                 {
@@ -678,7 +703,7 @@
                                     }
                                 }
                             }
-                            else 
+                            else
                             {
                                 attr.curValue = "0";
                             }
@@ -731,7 +756,7 @@
             return sendDataObj;
         }
 
-        public AlinkDoorlockObj GetGatewayAlinkDoorlockData(string userId,string extStr)
+        public AlinkDoorlockObj GetGatewayAlinkDoorlockData(string userId, string extStr)
         {
             var sendDataObj = new AlinkDoorlockObj();
             sendDataObj.id = Control.Ins.msg_id.ToString();
@@ -1162,7 +1187,7 @@
                 try
                 {
                     return Convert.ToByte(loopId, 16);
-                }catch
+                } catch
                 {
                     return 0;
                 }
@@ -1266,7 +1291,7 @@
         /// <summary>
         /// 锛堢孩澶栫┖璋冿級
         /// </summary>
-        public const string AcIr= "ir.ac";
+        public const string AcIr = "ir.ac";
         /// <summary>
         /// 绌鸿皟
         /// </summary>
@@ -1465,10 +1490,11 @@
             spkList.Add(SensorDryContact2);
             spkList.Add(SenesorMegahealth);
             spkList.Add(SenesorMegahealth2);
-            spkList.Add(SensorHelp);
             return spkList;
         }
+        #endregion
 
+        public const string PanelEnvironment = "screen.panel";
         /// <summary>
         /// 闈㈡澘spk鍒楄〃
         /// </summary>
@@ -1477,9 +1503,9 @@
         {
             var spkList = new List<string>();
             spkList.Add(SensorHelp);
+            spkList.Add(PanelEnvironment);
             return spkList;
         }
-        #endregion
 
         #region 鐜浼犳劅鍣�
         /// <summary>
@@ -1840,9 +1866,49 @@
     //}
 
 
-public class VersionInfo
-{
-    public string module = "";
-    public string version = "";
-}
+    public class VersionInfo
+    {
+        public string module = "";
+        public string version = "";
+    }
+
+    /// <summary>
+    /// 鍔熻兘灞炴�х浉鍏抽厤缃俊鎭�
+    /// 鐜浼犳劅鍣ㄧ瓑绾т娇鐢�
+    /// </summary>
+    public class AttrKeyConfig
+    {
+        public string key = string.Empty;
+        /// <summary>
+        /// 閰嶇疆绫诲瀷
+        /// interval 鍖洪棿
+        /// 鐩墠鍙敮鎸侊細interval
+        /// </summary>
+        public string type = string.Empty;
+
+        public string unit = string.Empty;
+
+        public List<AttrKeyInfo> configs = new List<AttrKeyInfo>();
+
+    }
+
+    public class AttrKeyInfo
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public string start = string.Empty;
+        /// <summary>
+        /// 
+        /// </summary>
+        public string end = string.Empty;
+        /// <summary>
+        /// 
+        /// </summary>
+        public string color = string.Empty;
+        /// <summary>
+        /// 鎻忚堪
+        /// </summary>
+        public string desc = string.Empty;
+    }
 }
diff --git a/HDL_ON/Entity/Function/Sensor.cs b/HDL_ON/Entity/Function/Sensor.cs
index 82ed611..f07f304 100644
--- a/HDL_ON/Entity/Function/Sensor.cs
+++ b/HDL_ON/Entity/Function/Sensor.cs
@@ -1,5 +1,6 @@
 锘縰sing System;
 using System.Collections.Generic;
+using Shared;
 
 namespace HDL_ON.Entity
 {
@@ -64,7 +65,7 @@
                 }
             }
             double value = 0.0;
-            double.TryParse( attr.state,out value);
+            double.TryParse(attr.state, out value);
 
             return Convert.ToDouble(value);
         }
@@ -81,9 +82,30 @@
         /// <summary>
         /// 姣忎釜绛夌骇瀵瑰尯闂村��
         /// </summary>
-        public List<string> GetIntervalValue(string spk)
+        public List<string> GetIntervalValue(Function function)
         {
             var _intervalValue = new List<string>();
+
+
+            if (function.attrKeyConfigs.Count > 0)
+            {
+
+                foreach (var attrKey in function.attrKeyConfigs)
+                {
+                    if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
+                    {
+                        foreach (var info in attrKey.configs)
+                        {
+                            _intervalValue.Add(info.start + " ~ " + info.end);
+                        }
+                    }
+                }
+                if (_intervalValue.Count > 0)
+                    return _intervalValue;
+            }
+
+
+            string spk = function.spk;
             switch (spk)
             {
                 case SPK.SensorPm25:
@@ -128,12 +150,72 @@
             return _intervalValue;
         }
 
+        public string Unit(Function function)
+        {
+            string unit = "";
+
+            if (function.attrKeyConfigs.Count > 0)
+            {
+
+                foreach (var attrKey in function.attrKeyConfigs)
+                {
+                    if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
+                    {
+                        if (string.IsNullOrEmpty(attrKey.unit))
+                            return attrKey.unit;
+                    }
+                }
+            }
+
+            switch (function.spk)
+            {
+                case SPK.SensorPm25:
+                    unit = "ug/m虏";
+                    break;
+                case SPK.SensorTemperature:
+                    unit = "掳C";
+                    break;
+                case SPK.SensorTVOC:
+                    unit = "PPB";
+                    break;
+                case SPK.SensorCO2:
+                    unit = "PPM";
+                    break;
+                case SPK.SensorHumidity:
+                    unit = "%";
+                    break;
+                case SPK.SensorHcho:
+                    unit = "mg/m3";
+                    break;
+            }
+
+            return unit;
+        }
+
         /// <summary>
         /// 姣忎釜绛夌骇鐨勯鑹插��
         /// </summary>
-        public List<uint> GetLevelColorList(string spk)
+        public List<uint> GetLevelColorList(Function function)
         {
             var _levelColorList = new List<uint>();
+            if (function.attrKeyConfigs.Count > 0)
+            {
+
+                foreach (var attrKey in function.attrKeyConfigs)
+                {
+                    if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
+                    {
+                        foreach (var info in attrKey.configs)
+                        {
+                            _levelColorList.Add(Convert.ToUInt32(info.color, 16));
+                        }
+                    }
+                }
+                if (_levelColorList.Count > 0)
+                    return _levelColorList;
+            }
+
+            string spk = function.spk;
             switch (spk)
             {
                 case SPK.SensorPm25:
@@ -187,56 +269,138 @@
         /// <summary>
         /// 姣忎釜绛夌骇鐨勫悕绉�
         /// </summary>
-        public List<int> GetLevelTextList(string spk)
+        public List<string> GetLevelTextList(Function function)
         {
-            var _levelTextList = new List<int>();
+            var _levelTextList = new List<string>();
+
+            if (function.attrKeyConfigs.Count > 0)
+            {
+
+                foreach (var attrKey in function.attrKeyConfigs)
+                {
+                    if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
+                    {
+                        foreach (var info in attrKey.configs)
+                        {
+                            _levelTextList.Add(info.desc);
+                        }
+                    }
+                }
+                if (_levelTextList.Count > 0)
+                    return _levelTextList;
+            }
+
+            string spk = function.spk;
             switch (spk)
             {
                 case SPK.SensorPm25:
-                    _levelTextList.Add(StringId.Great);
-                    _levelTextList.Add(StringId.Good);
-                    _levelTextList.Add(StringId.MildPollution);
-                    _levelTextList.Add(StringId.HeavyPollution);
+                    _levelTextList.Add(Language.StringByID(StringId.Great));
+                    _levelTextList.Add(Language.StringByID(StringId.Good));
+                    _levelTextList.Add(Language.StringByID(StringId.MildPollution));
+                    _levelTextList.Add(Language.StringByID(StringId.HeavyPollution));
                     break;
                 case SPK.SensorCO2:
-                    _levelTextList.Add(StringId.SensorReferenceTipCO2Level1);
-                    _levelTextList.Add(StringId.SensorReferenceTipCO2Level2);
-                    _levelTextList.Add(StringId.SensorReferenceTipCO2Level3);
-                    _levelTextList.Add(StringId.SensorReferenceTipCO2Level4);
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceTipCO2Level1));
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceTipCO2Level2));
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceTipCO2Level3));
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceTipCO2Level4));
                     break;
                 case SPK.SensorTemperature:
-                    _levelTextList.Add(StringId.ExtremelyCold);
-                    _levelTextList.Add(StringId.Cold);
-                    _levelTextList.Add(StringId.SlightlyCold);
-                    _levelTextList.Add(StringId.Comfortable);
-                    _levelTextList.Add(StringId.TepidFever);
-                    _levelTextList.Add(StringId.Heat_SensorTip);
-                    _levelTextList.Add(StringId.ExtremeHeat);
+                    _levelTextList.Add(Language.StringByID(StringId.ExtremelyCold));
+                    _levelTextList.Add(Language.StringByID(StringId.Cold));
+                    _levelTextList.Add(Language.StringByID(StringId.SlightlyCold));
+                    _levelTextList.Add(Language.StringByID(StringId.Comfortable));
+                    _levelTextList.Add(Language.StringByID(StringId.TepidFever));
+                    _levelTextList.Add(Language.StringByID(StringId.Heat_SensorTip));
+                    _levelTextList.Add(Language.StringByID(StringId.ExtremeHeat));
                     break;
                 case SPK.SensorTVOC:
-                    _levelTextList.Add(StringId.SensorReferenceTVOCTipLevel1);
-                    _levelTextList.Add(StringId.SensorReferenceTVOCTipLevel2);
-                    _levelTextList.Add(StringId.SensorReferenceTVOCTipLevel3);
-                    _levelTextList.Add(StringId.SensorReferenceTVOCTipLevel4);
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceTVOCTipLevel1));
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceTVOCTipLevel2));
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceTVOCTipLevel3));
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceTVOCTipLevel4));
                     break;
                 case SPK.SensorHumidity:
-                    _levelTextList.Add(StringId.SensorReferenceHumidityTipLevel1);
-                    _levelTextList.Add(StringId.SensorReferenceHumidityTipLevel2);
-                    _levelTextList.Add(StringId.SensorReferenceHumidityTipLevel3);
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceHumidityTipLevel1));
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceHumidityTipLevel2));
+                    _levelTextList.Add(Language.StringByID(StringId.SensorReferenceHumidityTipLevel3));
                     break;
                 case SPK.SensorHcho:
-                    _levelTextList.Add(StringId.Class_I_BuildingStandard);
-                    _levelTextList.Add(StringId.SecondaryBuildingStandard);
-                    _levelTextList.Add(StringId.ExceedingTheStandard);
+                    _levelTextList.Add(Language.StringByID(StringId.Class_I_BuildingStandard));
+                    _levelTextList.Add(Language.StringByID(StringId.SecondaryBuildingStandard));
+                    _levelTextList.Add(Language.StringByID(StringId.ExceedingTheStandard));
                     break;
                 default:
-                    _levelTextList.Add(99999999);
-                    _levelTextList.Add(99999999);
-                    _levelTextList.Add(99999999);
+                    _levelTextList.Add("");
+                    _levelTextList.Add("");
+                    _levelTextList.Add("");
                     break;
             }
             return _levelTextList;
         }
+
+        /// <summary>
+        /// 鑾峰彇
+        /// </summary>
+        /// <param name="function"></param>
+        /// <returns></returns>
+        public uint GetCurColor(Function function)
+        {
+            var spk = function.spk;
+            var values = GetValues(function);
+            uint level = 0x00000000;
+            if (function.attrKeyConfigs.Count > 0)
+            {
+
+                foreach (var attrKey in function.attrKeyConfigs)
+                {
+                    if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
+                    {
+                        foreach (var info in attrKey.configs)
+                        {
+                            if ((Convert.ToInt32(info.start) >= values) && (Convert.ToInt32(info.end) < values))
+                            {
+                                return Convert.ToUInt32(info.color, 16);
+                            }
+                        }
+                    }
+                }
+            }
+
+            return level;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏂囨湰
+        /// </summary>
+        /// <param name="function"></param>
+        /// <returns></returns>
+        public string GetCurText(Function function)
+        {
+            var spk = function.spk;
+            var values = GetValues(function);
+            var level = "";
+            if (function.attrKeyConfigs.Count > 0)
+            {
+
+                foreach (var attrKey in function.attrKeyConfigs)
+                {
+                    if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
+                    {
+                        foreach (var info in attrKey.configs)
+                        {
+                            if ((Convert.ToInt32(info.start) >= values) && (Convert.ToInt32(info.end) < values))
+                            {
+                                return info.desc;
+                            }
+                        }
+                    }
+                }
+            }
+
+            return level;
+        }
+
         /// <summary>
         /// 褰撳墠绛夌骇
         /// </summary>
@@ -245,6 +409,37 @@
             var spk = function.spk;
             var values = GetValues(function);
             int level = 1;
+
+
+
+            if (function.attrKeyConfigs.Count > 0)
+            {
+
+                foreach (var attrKey in function.attrKeyConfigs)
+                {
+                    if (function.spk.Replace(".", "").Contains(attrKey.key.Replace(".", "")))
+                    {
+                        level = 1;
+                        if(attrKey.configs.Count == 0)
+                        {
+                            break;
+                        }
+                        foreach (var info in attrKey.configs)
+                        {
+                            if ((Convert.ToDouble(info.start) < values) && (Convert.ToDouble(info.end) >= values))
+                            {
+                                return level;
+                            }
+                            level++;
+
+                        }
+                    }
+                }
+                    return 1;
+            }
+
+
+
             switch (spk)
             {
                 case SPK.SensorPm25:
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index 208eb41..9b724ca 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -468,12 +468,25 @@
 
                     if(DriverLayer.Control.Ins.GatewayOnline_Local)
                     {
+
+                        //List<Function> functions = GetDeviceFunctionList(SPK.BrandType.Hdl);
+                        //var sss = functions.OrderBy((obj) => obj.collect);
+
+                        List<Function> readList = new List<Function>();
                         foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
                         {
+                            readList.Add(function);
                             MainPage.Log($"璇诲彇鍔熻兘鐘舵�侊細{function.name} : {function.sid} ");
-                            Control.Ins.SendReadCommand(function);
+                            if (readList.Count > 9)
+                            {
+                                Control.Ins.SendReadCommand(readList);
+                            }
                         }
-                        if(DB_ResidenceData.Instance.GatewayType == 1)
+                        if (readList.Count > 0)
+                        {
+                            Control.Ins.SendReadCommand(readList);
+                        }
+                        if (DB_ResidenceData.Instance.GatewayType == 1)
                         {
                             Dictionary<string, string> pairs = new Dictionary<string, string>();
                             string sendId = Control.Ins.msg_id.ToString();
@@ -490,6 +503,8 @@
                         var page = new List<string>();
                         int count = 0;
 
+                        //List<Function> functions = GetDeviceFunctionList(SPK.BrandType.Hdl);
+                        //var sss = functions.OrderBy((obj) => obj.collect);
                         foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
                         {
                             page.Add(function.deviceId);
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 84c78f2..948c13d 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -493,6 +493,12 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\1ContorlPage\CacDayHistoryPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\1ContorlPage\CacHistoryChoosePage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\LogicMethod.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Panel\PanelHelpPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Panel\EnvironmentPanelPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Form\DeviceFunction4CardCommonForm.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ContentView\FhContentView.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ContentView\AcContentView.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Video\WanderingAlarmPage.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
@@ -519,5 +525,6 @@
     <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\SenesorEnvironment\" />
     <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Light\LightScene\" />
     <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\FaceManagement\" />
+    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ContentView\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
index b4a926d..736410b 100644
--- a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -204,6 +204,15 @@
                         var doorLockPage = new DoorLockPage();
                         doorLockPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                         break;
+                    case SPK.SensorHelp:
+                        var panelHelpPage = new UI2.FuntionControlView.Panel.PanelHelpPage();
+                        panelHelpPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
+                        break;
+                    case SPK.PanelEnvironment:
+                        var panelEnvironmentPage = new EnvironmentPanelPage();
+                        panelEnvironmentPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
+                        break;
+                         
                 }
             };
             return eventHandler;
diff --git a/HDL_ON/UI/UI0-Stan/Form/DeviceFunction4CardCommonForm.cs b/HDL_ON/UI/UI0-Stan/Form/DeviceFunction4CardCommonForm.cs
new file mode 100644
index 0000000..dacaea3
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Form/DeviceFunction4CardCommonForm.cs
@@ -0,0 +1,452 @@
+锘縰sing HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 璁惧鍔熻兘鍗$墖鐨勫簳灞傜晫闈�
+    /// </summary>
+    public class DeviceFunction4CardCommonForm : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 褰撳墠鍥炶矾瀵硅薄
+        /// </summary>
+        public Function device = null;
+        /// <summary>
+        /// 鍙充笂瑙掗厤缃粨鏉熺殑浜嬩欢
+        /// </summary>
+        public Action SettionFinishEvent = null;
+        /// <summary>
+        /// 宸﹀彸缈婚〉鐨勬帶浠剁殑浜嬩欢
+        /// </summary>
+        public Action<int> PageChangeEvent = null;
+        /// <summary>
+        /// 宸﹀彸鏁翠釜缈婚〉鐨勬帶浠�
+        /// </summary>
+        private PageLayout pageLayout = null;
+        /// <summary>
+        /// 璁惧鍚嶅瓧鎺т欢(鍒锋柊鐢ㄥ埌)
+        /// </summary>
+        public NormalViewControl btnDeviceName = null;
+        /// <summary>
+        /// 鎴块棿鍚嶅瓧鎺т欢(鍒锋柊鐢ㄥ埌)
+        /// </summary>
+        public NormalViewControl btnRoomName = null;
+        /// <summary>
+        /// 搴曢儴蹇嵎鎸夐挳1
+        /// </summary>
+        private NormalViewControl btnBottomOne = null;
+        /// <summary>
+        /// 搴曢儴蹇嵎鎸夐挳2
+        /// </summary>
+        private NormalViewControl btnBottomTwo = null;
+        private NormalViewControl btnBottom3 = null;
+        private NormalViewControl btnBottom4 = null;
+        /// <summary>
+        /// 绗竴绱㈠紩鐨勭櫧鑹插尯鍩熺殑妗屽竷鎺т欢
+        /// </summary>
+        public NormalFrameLayout FrameWhiteCentet1 = null;
+        /// <summary>
+        /// 绗簩绱㈠紩鐨勭櫧鑹插尯鍩熺殑妗屽竷鎺т欢(璇峰厛璋冪敤AddSecondPage鍑芥暟瀹屾垚娣诲姞)
+        /// </summary>
+        public NormalFrameLayout FrameWhiteCentet2 = null;
+        public NormalFrameLayout FrameWhiteCentet3 = null;
+        public NormalFrameLayout FrameWhiteCentet4 = null;
+
+        /// <summary>
+        /// 鏄惁鏄剧ず鏀惰棌鎸夐挳
+        /// </summary>
+        public bool ShowColltionButton = true;
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        /// <param name="i_device">璁惧瀵硅薄</param>
+        /// <param name="btnHigherCollection">涓婁竴绾х晫闈㈢殑鏀惰棌鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        /// <param name="btnHigherDeviceName">涓婁竴绾х晫闈㈢殑璁惧鍚嶅瓧鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        /// <param name="btnHigherRoom">涓婁竴绾х晫闈㈢殑鎴块棿鍚嶅瓧鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        public void ShowForm(Function i_device, Button btnHigherCollection, Button btnHigherDeviceName, Button btnHigherRoom)
+        {
+            this.device = i_device;
+
+            //娣诲姞澶撮儴銆愯缃�戝浘鏍�
+            this.AddTopSettingIcon(btnHigherDeviceName, btnHigherRoom);
+
+            //鍒濆鍖栦腑閮ㄤ俊鎭�
+            this.InitMiddleFrame(btnHigherCollection);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄤ俊鎭�
+        /// </summary>
+        /// <param name="btnHigherCollection">涓婁竴绾х晫闈㈢殑鏀惰棌鎺т欢</param>
+        private void InitMiddleFrame(Button btnHigherCollection)
+        {
+            //娓呯┖bodyFrame
+            this.ClearBodyFrame();
+
+            //宸﹀彸鏁翠釜缈婚〉鐨勬帶浠�
+            this.pageLayout = new PageLayout();
+            pageLayout.IsShowPoint = false;
+            pageLayout.ScrollEnabled = false;
+            bodyFrameLayout.AddChidren(pageLayout);
+            pageLayout.PageChange += (sender, index) =>
+            {
+                //璁剧疆搴曢儴涓や釜鎸夐挳鐨勭姸鎬�
+                this.SetBottomTwoButtonStatu();
+                this.PageChangeEvent?.Invoke(index);
+            };
+
+            //鍒濆鍖栫涓�涓储寮曠殑妗屽竷
+            this.InitFrameWhiteContent1(btnHigherCollection);
+            //鍒濆鍖栫櫧鑹插唴瀹�(闇�瑕佽嚜涓诲疄鐜�)
+            this.InitFrameWhiteContent();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曠殑妗屽竷
+        /// </summary>
+        /// <param name="btnHigherCollection">涓婁竴绾х晫闈㈢殑鏀惰棌鎺т欢</param>
+        private void InitFrameWhiteContent1(Button btnHigherCollection)
+        {
+            //绗竴涓储寮曟甯冩槸蹇呭畾瀛樺湪鐨�
+            var frameTable1 = new FrameLayout();
+            frameTable1.Width = pageLayout.Width;
+            frameTable1.Height = pageLayout.Height;
+            pageLayout.AddChidren(frameTable1);
+            //绗竴涓储寮曠殑鐧借壊妗屽竷
+            this.FrameWhiteCentet1 = new NormalFrameLayout();
+            FrameWhiteCentet1.Gravity = Gravity.CenterHorizontal;
+            FrameWhiteCentet1.Y = Application.GetRealHeight(22);
+            FrameWhiteCentet1.Width = Application.GetRealWidth(327);
+            FrameWhiteCentet1.Height = Application.GetRealHeight(526);
+            FrameWhiteCentet1.BackgroundImagePath = "Public/Fragmentbg.png";
+            frameTable1.AddChidren(FrameWhiteCentet1);
+            //璁惧鍚嶅瓧
+            this.btnDeviceName = new NormalViewControl(270, 37, true);
+            btnDeviceName.X = Application.GetRealWidth(16);
+            btnDeviceName.Y = Application.GetRealHeight(18);
+            btnDeviceName.TextColor = CSS_Color.FirstLevelTitleColor;
+            btnDeviceName.TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel;
+            btnDeviceName.Text = device.name;
+            btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
+            FrameWhiteCentet1.AddChidren(btnDeviceName);
+            //鎴块棿鍚嶅瓧
+            this.btnRoomName = new NormalViewControl(270, 21, true);
+            btnRoomName.X = Application.GetRealWidth(16);
+            btnRoomName.Y = btnDeviceName.Bottom;
+            btnRoomName.TextColor = CSS_Color.PromptingColor1;
+            btnRoomName.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnRoomName.Text = device.GetRoomListName();
+            btnRoomName.Width = btnRoomName.GetRealWidthByText();
+            FrameWhiteCentet1.AddChidren(btnRoomName);
+            if (ShowColltionButton)
+            {
+                var btnCollection = new IconViewControl(40);
+                btnCollection.X = Application.GetRealWidth(273);
+                btnCollection.Y = Application.GetRealHeight(16);
+                btnCollection.SelectedImagePath = "Collection/CollectionIcon.png";
+                btnCollection.UnSelectedImagePath = "Collection/CollectionGrayIcon.png";
+                btnCollection.IsSelected = device.collect;
+                FrameWhiteCentet1.AddChidren(btnCollection);
+                btnCollection.ButtonClickEvent += (sender, e) =>
+                {
+                    btnCollection.IsSelected = !btnCollection.IsSelected;
+                    device.collect = btnCollection.IsSelected;
+                    btnHigherCollection.IsSelected = device.collect;
+
+                    device.CollectFunction();
+                };
+            }
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫浜屼釜绱㈠紩鐨勬甯�
+        /// </summary>
+        private void InitFrameWhiteContent2()
+        {
+            this.pageLayout.ScrollEnabled = true;
+            //绗竴涓储寮曟甯冩槸蹇呭畾瀛樺湪鐨�
+            var frameTable2 = new FrameLayout();
+            frameTable2.Width = pageLayout.Width;
+            frameTable2.Height = pageLayout.Height;
+            pageLayout.AddChidren(frameTable2);
+            //绗竴涓储寮曠殑鐧借壊妗屽竷
+            this.FrameWhiteCentet2 = new NormalFrameLayout();
+            FrameWhiteCentet2.Gravity = Gravity.CenterHorizontal;
+            FrameWhiteCentet2.Y = Application.GetRealHeight(22);
+            FrameWhiteCentet2.Width = Application.GetRealWidth(327);
+            FrameWhiteCentet2.Height = Application.GetRealHeight(526);
+            FrameWhiteCentet2.BackgroundImagePath = "Public/Fragmentbg.png";
+            frameTable2.AddChidren(FrameWhiteCentet2);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫3涓储寮曠殑妗屽竷
+        /// </summary>
+        private void InitFrameWhiteContent3()
+        {
+            var frameTable3 = new FrameLayout();
+            frameTable3.Width = pageLayout.Width;
+            frameTable3.Height = pageLayout.Height;
+            pageLayout.AddChidren(frameTable3);
+            //绗竴涓储寮曠殑鐧借壊妗屽竷
+            this.FrameWhiteCentet3 = new NormalFrameLayout();
+            FrameWhiteCentet3.Gravity = Gravity.CenterHorizontal;
+            FrameWhiteCentet3.Y = Application.GetRealHeight(22);
+            FrameWhiteCentet3.Width = Application.GetRealWidth(327);
+            FrameWhiteCentet3.Height = Application.GetRealHeight(526);
+            FrameWhiteCentet3.BackgroundImagePath = "Public/Fragmentbg.png";
+            frameTable3.AddChidren(FrameWhiteCentet3);
+        }
+        /// <summary>
+        /// 鍒濆鍖栫4涓储寮曠殑妗屽竷
+        /// </summary>
+        private void InitFrameWhiteContent4()
+        {
+            var frameTable4 = new FrameLayout();
+            frameTable4.Width = pageLayout.Width;
+            frameTable4.Height = pageLayout.Height;
+            pageLayout.AddChidren(frameTable4);
+            //绗竴涓储寮曠殑鐧借壊妗屽竷
+            this.FrameWhiteCentet4 = new NormalFrameLayout();
+            FrameWhiteCentet4.Gravity = Gravity.CenterHorizontal;
+            FrameWhiteCentet4.Y = Application.GetRealHeight(22);
+            FrameWhiteCentet4.Width = Application.GetRealWidth(327);
+            FrameWhiteCentet4.Height = Application.GetRealHeight(526);
+            FrameWhiteCentet4.BackgroundImagePath = "Public/Fragmentbg.png";
+            frameTable4.AddChidren(FrameWhiteCentet4);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插唴瀹�(闇�瑕佽嚜涓诲疄鐜�)
+        /// </summary>
+        public virtual void InitFrameWhiteContent()
+        {
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞绗簩绱㈠紩椤礯____________________
+
+        /// <summary>
+        /// 娣诲姞绗簩绱㈠紩椤�
+        /// </summary>
+        public void AddSecondPage()
+        {
+            //鍒濆鍖栫浜屼釜绱㈠紩鐨勬甯�
+            this.InitFrameWhiteContent2();
+
+            //搴曢儴娣诲姞涓や釜鎸夐挳
+            this.btnBottomOne = new NormalViewControl(14, 6, true);
+            btnBottomOne.X = Application.GetRealWidth(170);
+            btnBottomOne.Y = FrameWhiteCentet1.Bottom + Application.GetRealHeight(30);
+            btnBottomOne.BackgroundColor = CSS_Color.MainColor;
+            btnBottomOne.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottomOne);
+
+            this.btnBottomTwo = new NormalViewControl(14, 6, true);
+            btnBottomTwo.X = btnBottomOne.Right + Application.GetRealWidth(8);
+            btnBottomTwo.Y = btnBottomOne.Y;
+            btnBottomTwo.BackgroundColor = 0xffadc7f7;
+            btnBottomTwo.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottomTwo);
+
+        }
+
+        /// <summary>
+        /// 娣诲姞绗�3绱㈠紩椤�
+        /// </summary>
+        public void Add3thPage()
+        {
+            this.InitFrameWhiteContent2();
+            this.InitFrameWhiteContent3();
+
+            //搴曢儴娣诲姞涓や釜鎸夐挳
+            this.btnBottomOne = new NormalViewControl(14, 6, true);
+            btnBottomOne.X = Application.GetRealWidth(160);
+            btnBottomOne.Y = FrameWhiteCentet1.Bottom + Application.GetRealHeight(30);
+            btnBottomOne.BackgroundColor = CSS_Color.MainColor;
+            btnBottomOne.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottomOne);
+            this.btnBottomTwo = new NormalViewControl(14, 6, true);
+            btnBottomTwo.X = btnBottomOne.Right + Application.GetRealWidth(8);
+            btnBottomTwo.Y = btnBottomOne.Y;
+            btnBottomTwo.BackgroundColor = 0xffadc7f7;
+            btnBottomTwo.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottomTwo);
+            this.btnBottom3 = new NormalViewControl(14, 6, true);
+            btnBottom3.X = btnBottomTwo.Right + Application.GetRealWidth(8);
+            btnBottom3.Y = btnBottomTwo.Y;
+            btnBottom3.BackgroundColor = 0xffadc7f7;
+            btnBottom3.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottom3);
+        }
+        /// <summary>
+        /// 娣诲姞绗�3绱㈠紩椤�
+        /// </summary>
+        public void Add4Page()
+        {
+            this.InitFrameWhiteContent2();
+            this.InitFrameWhiteContent3();
+            this.InitFrameWhiteContent4();
+
+            //搴曢儴娣诲姞涓や釜鎸夐挳
+            this.btnBottomOne = new NormalViewControl(14, 6, true);
+            btnBottomOne.X = Application.GetRealWidth(150);
+            btnBottomOne.Y = FrameWhiteCentet1.Bottom + Application.GetRealHeight(30);
+            btnBottomOne.BackgroundColor = CSS_Color.MainColor;
+            btnBottomOne.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottomOne);
+            this.btnBottomTwo = new NormalViewControl(14, 6, true);
+            btnBottomTwo.X = btnBottomOne.Right + Application.GetRealWidth(8);
+            btnBottomTwo.Y = btnBottomOne.Y;
+            btnBottomTwo.BackgroundColor = 0xffadc7f7;
+            btnBottomTwo.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottomTwo);
+            this.btnBottom3 = new NormalViewControl(14, 6, true);
+            btnBottom3.X = btnBottomTwo.Right + Application.GetRealWidth(8);
+            btnBottom3.Y = btnBottomTwo.Y;
+            btnBottom3.BackgroundColor = 0xffadc7f7;
+            btnBottom3.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottom3);
+            this.btnBottom4 = new NormalViewControl(14, 6, true);
+            btnBottom4.X = btnBottom3.Right + Application.GetRealWidth(8);
+            btnBottom4.Y = btnBottom3.Y;
+            btnBottom4.BackgroundColor = 0xffadc7f7;
+            btnBottom4.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottom4);
+        }
+
+
+        /// <summary>
+        /// 璁剧疆搴曢儴涓や釜鎸夐挳鐨勭姸鎬�
+        /// </summary>
+        private void SetBottomTwoButtonStatu()
+        {
+            if (this.btnBottomTwo == null) { return; }
+
+            if (this.pageLayout.PageIndex == 0)
+            {
+                this.btnBottomOne.BackgroundColor = CSS_Color.MainColor;
+                this.btnBottomTwo.BackgroundColor = 0xffadc7f7;
+                this.btnBottom3.BackgroundColor = 0xffadc7f7;
+                this.btnBottom4.BackgroundColor = 0xffadc7f7;
+            }
+            else if (this.pageLayout.PageIndex == 1)
+            {
+                this.btnBottomOne.BackgroundColor = 0xffadc7f7;
+                this.btnBottomTwo.BackgroundColor = CSS_Color.MainColor;
+                this.btnBottom3.BackgroundColor = 0xffadc7f7;
+                this.btnBottom4.BackgroundColor = 0xffadc7f7;
+            }
+            else if (this.pageLayout.PageIndex == 2)
+            {
+                this.btnBottomOne.BackgroundColor = 0xffadc7f7;
+                this.btnBottomTwo.BackgroundColor = 0xffadc7f7;
+                this.btnBottom3.BackgroundColor = CSS_Color.MainColor;
+                this.btnBottom4.BackgroundColor = 0xffadc7f7;
+            }
+            else if (this.pageLayout.PageIndex == 3)
+            {
+                this.btnBottomOne.BackgroundColor = 0xffadc7f7;
+                this.btnBottomTwo.BackgroundColor = 0xffadc7f7;
+                this.btnBottom4.BackgroundColor = CSS_Color.MainColor;
+                this.btnBottom3.BackgroundColor = 0xffadc7f7;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鐣岄潰鍏抽棴___________________________
+
+        /// <summary>
+        /// 鐣岄潰鍏抽棴
+        /// </summary>
+        public override void CloseFormBefore()
+        {
+            base.CloseFormBefore();
+
+            this.SettionFinishEvent = null;
+            this.PageChangeEvent = null;
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鑾峰彇澶撮儴鍙宠竟鐨勩�愯缃�戝浘鏍囨帶浠�
+        /// </summary>
+        /// <returns></returns>
+        public PicViewControl GetTopSettingIcon()
+        {
+            for (int i = 0; i < topFrameLayout.ChildrenCount; i++)
+            {
+                var myView = topFrameLayout.GetChildren(i);
+                if (myView == null || myView.Name != "btnSetting")
+                {
+                    continue;
+                }
+                return myView as PicViewControl;
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 娣诲姞澶撮儴銆愯缃�戠殑鍥炬爣
+        /// </summary>
+        /// <param name="btnHigherCollection">涓婁竴绾х晫闈㈢殑鏀惰棌鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        /// <param name="btnHigherDeviceName">涓婁竴绾х晫闈㈢殑璁惧鍚嶅瓧鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        private void AddTopSettingIcon(Button btnHigherDeviceName, Button btnHigherRoom)
+        {
+            //璁剧疆鍥炬爣(闂ㄩ攣鐣岄潰闇�瑕佸�熺敤杩欎釜鍥炬爣鐨刋杞村拰Y杞�,鎵�浠ュ姞杩涙潵)
+            var btnSetting = new PicViewControl(28, 28);
+            btnSetting.X = Application.GetRealWidth(337);
+            btnSetting.Y = Application.GetRealHeight(9);
+            btnSetting.UnSelectedImagePath = "Public/FuncInfoSetIcon.png";
+            btnSetting.Name = "btnSetting";
+            topFrameLayout.AddChidren(btnSetting);
+
+            //濡傛灉鏄垚鍛樻病鏈夊姛鑳�
+            if (DB_ResidenceData.Instance.CurrentRegion.isOtherShare == true)
+            {
+                btnSetting.Visible = false;
+            }
+
+            btnSetting.ButtonClickEvent += (sender, e) =>
+            {
+                var infoView = new UI.FunctionBaseInfoSetPage(this.device, () =>
+                {
+                    //鍒锋柊鏄剧ず
+                    btnHigherDeviceName.Text = this.device.name;
+                    btnHigherRoom.Text = this.device.GetRoomListName();
+
+                    //浠庢柊璁$畻瀹藉害
+                    this.btnDeviceName.Text = btnHigherDeviceName.Text;
+                    this.btnDeviceName.Width = this.btnDeviceName.GetRealWidthByText();
+
+                    this.btnRoomName.Text = btnHigherRoom.Text;
+                    this.btnRoomName.Width = this.btnRoomName.GetRealWidthByText();
+
+                    //鍥炶皟浜嬩欢
+                    this.SettionFinishEvent?.Invoke();
+                });
+                MainPage.BasePageView.AddChidren(infoView);
+                infoView.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI1-Login/LoginPage.cs b/HDL_ON/UI/UI1-Login/LoginPage.cs
index 8c52aca..4b8c43a 100644
--- a/HDL_ON/UI/UI1-Login/LoginPage.cs
+++ b/HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -217,6 +217,7 @@
                     //etAccount.Text = "18316120654";//tujie
                     //etAccount.Text = "13450425807";//榛勭婧� knx椤圭洰
                     etAccount.Text = "18244942707";
+                    etAccount.Text = "3083375423@qq.com";//闄堜紵娼� 鑷爺鍙瀵硅
                 }
                 else
                 {
@@ -244,6 +245,7 @@
                     //etAccount.Text = "info@smartlife-ks.com";
                     //etAccount.Text = "551775569@qq.com";//wcf
                     //etAccount.Text = "15626203746";
+                    etAccount.Text = "18244942707";
                     //etAccount.Text = "zhangquansongjava@163.com";
                     //etAccount.Text = "s.savinov@hdlautomation.ru";
                 }
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index 0bb4e7c..fc4e748 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -569,7 +569,7 @@
 
             //FunctionList.List.Functions.Add(new Function
             //{
-            //    name = "闂ㄩ攣",
+            //    name = "娴嬭瘯闂ㄩ攣",
             //    spk = SPK.DoorLock,
             //    sid = "12345",
             //    attributes = new List<FunctionAttributes> {
@@ -626,18 +626,43 @@
             //        new FunctionAttributes(){ key = "status",curValue= "on",state = "on" },
             //    },
             //});
+
             FunctionList.List.Functions.Add(new Function()
             {
-                spk = SPK.SensorHelp,
-                name = "娴嬭瘯绱ф�ユ眰鍔╂寜閽�",
+                spk = SPK.SensorPm25,
+                name = "娴嬭瘯Pm2.5",
                 attributes = new List<FunctionAttributes>()
                 {
-                    new FunctionAttributes(){ key = "status",curValue= "on",state = "on" },
-                    new FunctionAttributes(){ key = "battery_value",curValue= "2000",state = "2000" },
-                    new FunctionAttributes(){ key = "battery_percentage",curValue= "80",state = "80" },
-                    new FunctionAttributes(){ key = "battery_state",curValue= "high",state = "high" },
+                    new FunctionAttributes(){ key = "pm25",curValue= "70",state = "70" },
+                },
+                attrKeyConfigs = new List<AttrKeyConfig>()
+                {
+                    new AttrKeyConfig (){
+                        key = "pm2.5",
+                        type = "interval" ,
+                        unit = "ug/m虏",
+                        configs = new List<AttrKeyInfo>(){
+                           new AttrKeyInfo(){ start = "0",end = "75",color = "0xFFADE764", desc = "鑹ソ"},
+                           new AttrKeyInfo(){ start = "76",end = "150",color = "0xFFFFD154",desc = "杞�/涓害姹℃煋"},
+                           new AttrKeyInfo(){ start = "151",end = "500",color = "0xFFFF9D54",desc = "閲嶅害/涓ラ噸姹℃煋"},
+                        }
+                    }
                 },
             });
+
+            //FunctionList.List.Functions.Add(new Function()
+            //{
+            //    spk = SPK.SensorHelp,
+            //    name = "娴嬭瘯绱ф�ユ眰鍔╂寜閽�",
+            //    attributes = new List<FunctionAttributes>()
+            //    {
+            //        new FunctionAttributes(){ key = "status",curValue= "on",state = "on" },
+            //        new FunctionAttributes(){ key = "alarm_status",curValue= "alarm",state = "alarm" },
+            //        new FunctionAttributes(){ key = "battery_value",curValue= "200",state = "200" },
+            //        new FunctionAttributes(){ key = "battery_percentage",curValue= "10",state = "10" },
+            //        new FunctionAttributes(){ key = "battery_state",curValue= "low",state = "low" },
+            //    },
+            //});
 
             //FunctionList.List.Functions.Add(new Function()
             //{
@@ -653,11 +678,23 @@
             //{
             //    spk = SPK.AirFreshStandard,
             //    name = "娴嬭瘯鏂伴",
+            //    sid = "098765433242342342",
             //    attributes = new List<FunctionAttributes>()
             //    {
             //        new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
             //        new FunctionAttributes(){ key = "fan",curValue= "low",state = "low" ,value = new List<string>(){ "high", "medium", "low" } },
             //    },
+            //});
+
+            //FunctionList.List.Functions.Add(new Function()
+            //{
+            //    spk = SPK.PanelEnvironment,
+            //    name = "娴嬭瘯鐜闈㈡澘",
+            //    targetSids = new List<string> {
+            //        "098765433242342342",
+            //        "ac1",
+            //        "floorheat1"
+            //    }
             //});
 
 
@@ -884,6 +921,7 @@
 
         /// <summary>
         /// 鍔犺浇璁惧鍔熻兘鏄剧ず鍖哄煙
+        /// Tag 鏀惰棌鍗$墖
         /// </summary>
         void LoadDeviceFunctionControlZone()
         {
@@ -1097,6 +1135,7 @@
 
         /// <summary>
         /// 鍔犺浇鍔熻兘鎺у埗鍗$墖
+        /// Tag 鍗$墖鑷畾涔�
         /// </summary>
         void LoadDeviceFunctionDiv(FrameLayout view, Function function)
         {
@@ -1311,6 +1350,11 @@
                     LoadEvent_ControlClothesHanger(function, btnUp, btnDown);
 
                 }
+                //绱ф�ユ眰鍔�
+                else if (function.spk == SPK.SensorHelp)
+                {
+
+                }
 
                 else
                 {
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
index c049ebd..b269c83 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -647,6 +647,7 @@
 
             var functionCategoryCount = 0;
 
+            //Tag 鍒嗙被鍗$墖鏄剧ず
             foreach (var item in DB_ResidenceData.Instance.functionTypeList)
             {
                 int functionCount = 0;
@@ -709,8 +710,7 @@
 #endif
                         break;
                     case ShowFunction.Panel:
-
-
+                        functionCount = FunctionList.List.GetPanelList().Count;
                         break;
                     case ShowFunction.SecurityMonitoring:
                         if (!MainPage.NoLoginMode)
@@ -790,37 +790,56 @@
                 };
                 functionView.AddChidren(btnName);
 
+                //Tag 鏁伴噺鏄剧ず
                 if (item != ShowFunction.Environmental && item != ShowFunction.Sensor && item != ShowFunction.VideoIntercom
                     && item != ShowFunction.SecurityMonitoring && item != ShowFunction.FreshAir && item != ShowFunction.Music
                     && item != ShowFunction.EnergyMonitoring && item != ShowFunction.SecurityCenter
                     && functionCount != 0)
                 {
-                    Button btnFunctionCount = new Button()
+                    if (item == ShowFunction.Panel)
                     {
-                        X = Application.GetRealWidth(17) + Application.GetRealWidth(7 * functionCount.ToString().Length),
-                        Y = btnName.Bottom,
-                        Width = Application.GetRealWidth(120),
-                        Height = Application.GetRealHeight(24),
-                        TextColor = CSS_Color.PromptingColor1,
-                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                        TextAlignment = TextAlignment.CenterLeft,
-                        Text = "/" + functionCount,
-                    };
-                    functionView.AddChidren(btnFunctionCount);
-                    Button btnOpenCount = new Button()
+                        Button btnFunctionCount = new Button()
+                        {
+                            X = Application.GetRealWidth(16),
+                            Y = btnName.Bottom,
+                            Width = Application.GetRealWidth(120),
+                            Height = Application.GetRealHeight(24),
+                            TextColor = CSS_Color.PromptingColor1,
+                            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                            TextAlignment = TextAlignment.CenterLeft,
+                            Text = functionCount.ToString(),
+                        };
+                        functionView.AddChidren(btnFunctionCount);
+                    }
+                    else
                     {
-                        X = Application.GetRealWidth(16),
-                        Y = btnName.Bottom,
-                        Width = Application.GetRealWidth(14 * functionCount.ToString().Length),
-                        Height = Application.GetRealHeight(24),
-                        TextColor = CSS_Color.MainColor,
-                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                        TextAlignment = TextAlignment.CenterLeft,
-                        Text = functionOnCount.ToString(),
-                        Tag = item + "_onCount",
-                        BorderWidth = 0,
-                    };
-                    functionView.AddChidren(btnOpenCount);
+                        Button btnFunctionCount = new Button()
+                        {
+                            X = Application.GetRealWidth(17) + Application.GetRealWidth(7 * functionCount.ToString().Length),
+                            Y = btnName.Bottom,
+                            Width = Application.GetRealWidth(120),
+                            Height = Application.GetRealHeight(24),
+                            TextColor = CSS_Color.PromptingColor1,
+                            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                            TextAlignment = TextAlignment.CenterLeft,
+                            Text = "/" + functionCount,
+                        };
+                        functionView.AddChidren(btnFunctionCount);
+                        Button btnOpenCount = new Button()
+                        {
+                            X = Application.GetRealWidth(16),
+                            Y = btnName.Bottom,
+                            Width = Application.GetRealWidth(14 * functionCount.ToString().Length),
+                            Height = Application.GetRealHeight(24),
+                            TextColor = CSS_Color.MainColor,
+                            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                            TextAlignment = TextAlignment.CenterLeft,
+                            Text = functionOnCount.ToString(),
+                            Tag = item + "_onCount",
+                            BorderWidth = 0,
+                        };
+                        functionView.AddChidren(btnOpenCount);
+                    }
                 }
 
 
@@ -832,6 +851,7 @@
                 };
                 functionView.AddChidren(btnFunctionViewBg);
 
+                //Tag 璋冭瘯浜嬩欢鍒ゆ柇
                 int functionPageTitleId = 0;
                 switch (item)
                 {
@@ -1024,7 +1044,8 @@
                         };
                         break;
                     case ShowFunction.Panel:
-                        btnName.TextID = StringId.Panel;
+                        btnName.TextID = StringId.SmartPanel;
+                        functionPageTitleId = StringId.SmartPanel;
                         break;
                     case ShowFunction.SecurityMonitoring:
                         btnName.TextID = StringId.SecurityMonitoring;
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
index aa40d9a..92fea27 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -54,6 +54,7 @@
 
         /// <summary>
         /// 鍔犺浇鍔熻兘绫诲瀷鎺у埗鍗$墖
+        /// Tag 鍔熻兘灞炴�ф樉绀�
         /// </summary>
         public void LoadFunctionDiv()
         {
@@ -76,8 +77,7 @@
             {//闊充箰娌℃湁寮�鍏虫寜閽�
                 MusicFragment();
             }
-            else if (SPK.EvironmentSensorList().Contains(function.spk) || SPK.ArmSensorSpkList().Contains(function.spk)
-                || SPK.PanelSpkList().Contains(function.spk)) //浼犳劅鍣ㄦ病鏈夊紑鍏虫寜閽�)
+            else if (SPK.EvironmentSensorList().Contains(function.spk) || SPK.ArmSensorSpkList().Contains(function.spk)) //浼犳劅鍣ㄦ病鏈夊紑鍏虫寜閽�)
             {
                 var powerLowTipAttr = function.attributes.Find((obj) => obj.key == FunctionAttributeKey.BatteryState);
                 if (powerLowTipAttr != null)
@@ -101,6 +101,178 @@
             {
                 btnIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/DoorLock.png";
             }
+            else if(SPK.PanelSpkList().Contains(function.spk))//鏅鸿兘闈㈡澘璁惧
+            {
+                var powerLowTipAttr = function.attributes.Find((obj) => obj.key == FunctionAttributeKey.BatteryState);
+                if (powerLowTipAttr != null)
+                {
+                    if (powerLowTipAttr.state.ToLower() == "low")
+                    {
+                        Button btnTipPowerLow = new Button()
+                        {
+                            X = Application.GetRealWidth(307),
+                            Y = Application.GetRealHeight(70),
+                            Width = Application.GetRealWidth(24),
+                            Height = Application.GetRealWidth(24),
+                            UnSelectedImagePath = "FunctionIcon/ArmSensor/PowerLowIcon.png",
+                            SelectedImagePath = "FunctionIcon/ArmSensor/PowerLowIcon.png",
+                        };
+                        this.AddChidren(btnTipPowerLow);
+                    }
+                }
+                var alarmStatusAttr = function.GetAttribute("alarm_status");
+                if(alarmStatusAttr !=null)
+                {
+                    var btnAlarmStatus = new Button()
+                    {
+                        X = Application.GetRealWidth(8 + 10 + 32),
+                        Y = Application.GetRealHeight(53),
+                        Width = Application.GetRealWidth(200),
+                        Height = Application.GetRealHeight(24),
+                        TextAlignment = TextAlignment.CenterLeft,
+                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+                        Tag = "AlarmStatus"
+                    };
+                    if (alarmStatusAttr.state == "alarm")
+                    {
+                        btnAlarmStatus.TextID = StringId.InAlarm;
+                        btnAlarmStatus.TextColor = CSS_Color.WarningColor;
+                    }
+                    else
+                    {
+                        btnAlarmStatus.TextID = StringId.zhengchang;
+                        btnAlarmStatus.TextColor = CSS_Color.MainColor;
+                    }
+
+                    bodyDiv.AddChidren(btnAlarmStatus);
+                }
+
+                //var tipScrView1 = new HorizontalScrolViewLayout() {
+                //    X = Application.GetRealWidth(10),
+                //    Y =  Application.GetRealHeight(56),
+                //    Height = Application.GetRealHeight(20),
+                //    Width = Application.GetRealWidth(330),
+                //    BackgroundColor = 0x22220022,
+                //};
+                //var tipScrView2 = new HorizontalScrolViewLayout()
+                //{
+                //    X = Application.GetRealWidth(10),
+                //    Y = Application.GetRealHeight(83),
+                //    Height = Application.GetRealHeight(20),
+                //    Width = Application.GetRealWidth(330),
+                //    BackgroundColor = 0x22220022,
+                //};
+
+
+                foreach (var target in function.targetSids)
+                {
+                    //bodyDiv.AddChidren(tipScrView1);
+                    //bodyDiv.AddChidren(tipScrView2);
+                    var targetObj = FunctionList.List.Functions.Find((obj) => target == obj.sid);
+                    if(targetObj == null)
+                    {
+                        continue;
+                    }
+                    if (SPK.AcSpkList().Contains(targetObj.spk))
+                    {
+                        bodyDiv.Height = Application.GetRealHeight(126);
+
+                        AC acDevice = new AC();
+                        var btnAcMode = new Button()
+                        {
+                            X = Application.GetRealWidth(10),
+                            Y = Application.GetRealHeight(56),
+                            Width = Application.GetRealWidth(62),
+                            Height = Application.GetRealHeight(19),
+                            BackgroundColor = 0x334484F4,
+                            TextAlignment = TextAlignment.Center,
+                            TextSize = 10,
+                            TextColor = 0xFF4484F4,
+                            Text = Language.StringByID(StringId.AC) + acDevice.GetModeAttrText(targetObj.GetAttrState(FunctionAttributeKey.Mode)),
+                            Tag = target + "screen.panel.ac.mode",
+                            Radius = (uint)Application.GetRealWidth(4),
+                        };
+                        bodyDiv.AddChidren(btnAcMode);
+                        //tipScrView1.AddChidren(new Button() { Width = Application.GetRealWidth(16)});
+
+                        var btnAcTemp = new Button()
+                        {
+                            X = Application.GetRealWidth(10 + 72),
+                            Y = Application.GetRealHeight(56),
+                            Width = Application.GetRealWidth(62),
+                            Height = Application.GetRealHeight(19),
+                            BackgroundColor = 0x334484F4,
+                            TextAlignment = TextAlignment.Center,
+                            TextSize = 10,
+                            TextColor = 0xFF4484F4,
+                            Text = Language.StringByID(StringId.AC) + targetObj.GetAttrState(FunctionAttributeKey.Temperature) + "掳C",
+                            Radius = (uint)Application.GetRealWidth(4),
+                            Tag = target + "screen.panel.ac.temp"
+                        };
+                        bodyDiv.AddChidren(btnAcTemp);
+                        //tipScrView1.AddChidren(new Button() { Width = Application.GetRealWidth(6) });
+                    }
+                    else if (SPK.FhSpkList().Contains(targetObj.spk))
+                    {
+
+                        FloorHeating fhDevice = new FloorHeating();
+                        var btnFhMode = new Button()
+                        {
+                            X = Application.GetRealWidth(10 + 72*2),
+                            Y = Application.GetRealHeight(56),
+                            Radius = (uint)Application.GetRealWidth(4),
+                            Width = Application.GetRealWidth(62),
+                            Height = Application.GetRealHeight(19),
+                            BackgroundColor = 0x33ff9d54,
+                            TextAlignment = TextAlignment.Center,
+                            TextSize = 10,
+                            TextColor = 0xFFff9d54,
+                            Text = Language.StringByID(StringId.FloorHeating) + fhDevice.GetModeAttrText(targetObj.GetAttrState(FunctionAttributeKey.Mode)),
+                            Tag = target + "screen.panel.fh.mode"
+                        };
+                        bodyDiv.AddChidren(btnFhMode);
+                        //tipScrView1.AddChidren(new Button() { Width = Application.GetRealWidth(6) });
+
+                        var btnFhTemp = new Button()
+                        {
+                            X = Application.GetRealWidth(10 + 72 * 3),
+                            Y = Application.GetRealHeight(56),
+                            Radius = (uint)Application.GetRealWidth(4),
+                            Width = Application.GetRealWidth(62),
+                            Height = Application.GetRealHeight(19),
+                            BackgroundColor = 0x33ff9d54,
+                            TextAlignment = TextAlignment.Center,
+                            TextSize = 10,
+                            TextColor = 0xFFff9d54,
+                            Text = Language.StringByID(StringId.FloorHeating) + targetObj.GetAttrState(FunctionAttributeKey.Temperature) + "掳C",
+                            Tag = target + "screen.panel.fh.temp"
+                        };
+                        bodyDiv.AddChidren(btnFhTemp);
+                        //tipScrView1.AddChidren(new Button() { Width = Application.GetRealWidth(6) });
+                    }
+                    else if (SPK.AirFreshSpkList().Contains(targetObj.spk))
+                    {
+
+                        AC acDevice = new AC();
+                        var btnAirFreshFanSpeed = new Button()
+                        {
+                            X = Application.GetRealWidth(10),
+                            Y = Application.GetRealHeight(83),
+                            Width = Application.GetRealWidth(62),
+                            Height = Application.GetRealHeight(19),
+                            BackgroundColor = 0x3309bb07,
+                            TextAlignment = TextAlignment.Center,
+                            TextSize = 10,
+                            TextColor = 0xFF09bb07,
+                            Radius = (uint)Application.GetRealWidth(4),
+                            Text = Language.StringByID(StringId.AirFresh) + acDevice.GetFanAttrText(targetObj.GetAttrState(FunctionAttributeKey.FanSpeed)),
+                            Tag = target + "screen.panel.airFresh.mode"
+                        };
+                        bodyDiv.AddChidren(btnAirFreshFanSpeed);
+                    }
+                }
+
+            }
             else
             {
                 if (function.spk == SPK.ClothesHanger)//鏅捐。鏋�
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs b/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
index 9418e78..624ea5d 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
@@ -114,6 +114,7 @@
             };
             bodyView.AddChidren(functionListView);
 
+            //Tag 鏄剧ず鍒楄〃
             if (titleId == StringId.Lights)
             {
                 functionList.AddRange(FunctionList.List.GetLightList());
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
index ee6432c..6edd835 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
@@ -993,7 +993,9 @@
                 })
                 { IsBackground = true }.Start();
             }
-            catch { }
+            catch (Exception ex) {
+                MainPage.Log("涓婁紶鍥剧墖寮傚父锛�" + ex.Message);
+            }
         }
     }
 }
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
index 703cb02..b4008c8 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -928,7 +928,7 @@
 #endif
             #endregion
 
-            #region 鑾峰彇鏀寔
+            //#region 鑾峰彇鏀寔
             //FrameLayout supView = new FrameLayout()
             //{
             //    Height = Application.GetRealWidth(44),
@@ -1022,7 +1022,7 @@
             //    BackgroundColor = CSS_Color.DividingLineColor
             //};
             //supView.AddChidren(btnSupportViewLine);
-            #endregion
+            //#endregion
 
             #region 鍏充簬On Pro
             FrameLayout aboutView = new FrameLayout()
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs
index a4aefbd..22ddee1 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshControlPage.cs
@@ -719,13 +719,13 @@
             this.btnMode2.CanClick = this.airFreshData.Open;
 
             //椋庨��
-            if (this.airFreshData.Fan == "level_3")
+            if (this.airFreshData.Fan == "level_3" || this.airFreshData.Fan == "high")
             {
                 this.btnFan.UnSelectedImagePath = "FunctionIcon/AirFresh/Fan3.png";
                 this.btnFan.SelectedImagePath = "FunctionIcon/AirFresh/Fan3Select.png";
                 this.btnFanView.Text = this.dicText["3妗�"];
             }
-            else if(this.airFreshData.Fan == "level_2")
+            else if(this.airFreshData.Fan == "level_2" || this.airFreshData.Fan == "medium")
             {
                 this.btnFan.UnSelectedImagePath = "FunctionIcon/AirFresh/Fan2.png";
                 this.btnFan.SelectedImagePath = "FunctionIcon/AirFresh/Fan2Select.png";
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs
index ca2a6d6..90fea50 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AirFreshRelayControlPage.cs
@@ -109,15 +109,15 @@
                 { IsBackground = true }.Start();
             };
 
-            //鍒锋柊鐣岄潰鐘舵��
-            this.RefreshFormStatu();
-
             if (fanSpeedList.Count > 0)
             {
                 this.btnFan.UnSelectedImagePath = "FunctionIcon/AirFresh/Fan1.png";
                 this.btnFan.SelectedImagePath = "FunctionIcon/AirFresh/Fan1Select.png";
                 this.btnFanView.Text = Language.StringByID(StringId.LowWindSpeed);
             }
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+
         }
 
         #endregion
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs
index 71f5518..4553294 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs
@@ -109,6 +109,7 @@
             //var opString = brokenLine.InitOption();
 
             //    myEchartsView_Line.ShowWithOption(opString);
+
 #endif
             LoadMothed_GetHistoryData();
         }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputPage.cs
index e1dd248..7f04f4e 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputPage.cs
@@ -145,7 +145,7 @@
                 {
                     continue;
                 }
-                if (!string.IsNullOrEmpty(roomId) && roomId == "ALLSELECT")
+                if (!string.IsNullOrEmpty(roomId) && roomId != "ALLSELECT")
                 {
                     if (!function.roomIds.Contains(roomId))
                     {
@@ -172,7 +172,7 @@
                 {
                     continue;
                 }
-                if (!string.IsNullOrEmpty(roomId))
+                if (!string.IsNullOrEmpty(roomId) && roomId != "ALLSELECT")
                 {
                     if (!scene.roomIds.Contains(roomId))
                     {
@@ -202,121 +202,131 @@
         void LoadFunctionListRow()
         {
             functionListView.RemoveAll();
-            foreach (var function in allocatedList)
+            new System.Threading.Thread(() =>
             {
-                //var output = alarm.output.Find((obj) => obj.sid == function.sid);
-                //if (output == null)
-                //{
-                //    output = new SecurityOutput();
-                //    output.sid = function.sid;
-                //}
-
-                FrameLayout functionRow = new FrameLayout()
+                System.Threading.Thread.Sleep(50);
+                Application.RunOnMainThread(() =>
                 {
-                    Height = Application.GetRealHeight(65),
-                    BackgroundColor = CSS_Color.MainBackgroundColor,
-                };
-                functionListView.AddChidren(functionRow);
 
-                var btnFunctionName = new Button()
-                {
-                    X = Application.GetRealWidth(16),
-                    Width = Application.GetRealWidth(200),
-                    Height = Application.GetRealHeight(44),
-                    Text = function.name,
-                    TextAlignment = TextAlignment.CenterLeft,
-                    TextColor = CSS_Color.FirstLevelTitleColor,
-                    TextSize = CSS_FontSize.TextFontSize,
-                };
-                functionRow.AddChidren(btnFunctionName);
-
-                var btnFunctionFloorName = new Button()
-                {
-                    X = Application.GetRealWidth(16),
-                    Y = Application.GetRealHeight(24),
-                    Width = Application.GetRealWidth(200),
-                    Height = Application.GetRealHeight(41),
-                    Text = function.RoomName,
-                    TextAlignment = TextAlignment.CenterLeft,
-                    TextColor = CSS_Color.PromptingColor1,
-                    TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                };
-                functionRow.AddChidren(btnFunctionFloorName);
-
-                Button btnState = new Button()
-                {
-                    Width = Application.GetRealWidth(317),
-                    TextAlignment = TextAlignment.CenterRight,
-                    TextSize = CSS_FontSize.TextFontSize,
-                    TextColor = CSS_Color.PromptingColor1,
-                    Text = function.StateText()
-                };
-                functionRow.AddChidren(btnState);
-
-                Button btnChooseIcon = new Button()
-                {
-                    X = Application.GetRealWidth(333),
-                    Gravity = Gravity.CenterVertical,
-                    Width = Application.GetMinRealAverage(32),
-                    Height = Application.GetMinRealAverage(32),
-                    UnSelectedImagePath = "Public/ChooseIcon.png",
-                    SelectedImagePath = "Public/ChooseOnIcon.png",
-                };
-                functionRow.AddChidren(btnChooseIcon);
-
-                btnChooseIcon.MouseUpEventHandler = (sender, e) => {
-                    btnChooseIcon.IsSelected = !btnChooseIcon.IsSelected;
-                    var tempLocal = alarm.output.Find((obj) =>
-                        obj.sid == function.sid
-                    );
-                    //if (tempLocal == null && !string.IsNullOrEmpty(output.spk))
-                    //{
-                    //    ShowStateDialog(output, btnState, btnChooseIcon);
-                    //}
-                    if (btnChooseIcon.IsSelected)
+                    foreach (var function in allocatedList)
                     {
-                        if (tempLocal == null)
-                            alarm.output.Add(function);
-                        ShowStateDialog(function, btnState, btnChooseIcon);
-                    }
-                    else
-                    {
-                        if (tempLocal != null)
+                        //var output = alarm.output.Find((obj) => obj.sid == function.sid);
+                        //if (output == null)
+                        //{
+                        //    output = new SecurityOutput();
+                        //    output.sid = function.sid;
+                        //}
+
+                        FrameLayout functionRow = new FrameLayout()
                         {
-                            alarm.output.Remove(function);
+                            Height = Application.GetRealHeight(65),
+                            BackgroundColor = CSS_Color.MainBackgroundColor,
+                        };
+                        functionListView.AddChidren(functionRow);
+
+                        var btnFunctionName = new Button()
+                        {
+                            X = Application.GetRealWidth(16),
+                            Width = Application.GetRealWidth(200),
+                            Height = Application.GetRealHeight(44),
+                            Text = function.name,
+                            TextAlignment = TextAlignment.CenterLeft,
+                            TextColor = CSS_Color.FirstLevelTitleColor,
+                            TextSize = CSS_FontSize.TextFontSize,
+                        };
+                        functionRow.AddChidren(btnFunctionName);
+
+                        var btnFunctionFloorName = new Button()
+                        {
+                            X = Application.GetRealWidth(16),
+                            Y = Application.GetRealHeight(24),
+                            Width = Application.GetRealWidth(200),
+                            Height = Application.GetRealHeight(41),
+                            Text = function.RoomName,
+                            TextAlignment = TextAlignment.CenterLeft,
+                            TextColor = CSS_Color.PromptingColor1,
+                            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+                        };
+                        functionRow.AddChidren(btnFunctionFloorName);
+
+                        Button btnState = new Button()
+                        {
+                            Width = Application.GetRealWidth(317),
+                            TextAlignment = TextAlignment.CenterRight,
+                            TextSize = CSS_FontSize.TextFontSize,
+                            TextColor = CSS_Color.PromptingColor1,
+                            Text = function.StateText()
+                        };
+                        functionRow.AddChidren(btnState);
+
+                        Button btnChooseIcon = new Button()
+                        {
+                            X = Application.GetRealWidth(333),
+                            Gravity = Gravity.CenterVertical,
+                            Width = Application.GetMinRealAverage(32),
+                            Height = Application.GetMinRealAverage(32),
+                            UnSelectedImagePath = "Public/ChooseIcon.png",
+                            SelectedImagePath = "Public/ChooseOnIcon.png",
+                        };
+                        functionRow.AddChidren(btnChooseIcon);
+
+                        btnChooseIcon.MouseUpEventHandler = (sender, e) =>
+                        {
+                            btnChooseIcon.IsSelected = !btnChooseIcon.IsSelected;
+                            var tempLocal = alarm.output.Find((obj) =>
+                                obj.sid == function.sid
+                            );
+                            //if (tempLocal == null && !string.IsNullOrEmpty(output.spk))
+                            //{
+                            //    ShowStateDialog(output, btnState, btnChooseIcon);
+                            //}
+                            if (btnChooseIcon.IsSelected)
+                            {
+                                if (tempLocal == null)
+                                    alarm.output.Add(function);
+                                ShowStateDialog(function, btnState, btnChooseIcon);
+                            }
+                            else
+                            {
+                                if (tempLocal != null)
+                                {
+                                    alarm.output.Remove(function);
+                                }
+                            }
+                        };
+                        btnState.MouseUpEventHandler = (sender, e) =>
+                        {
+                            btnChooseIcon.IsSelected = true;
+                            var tempLocal = alarm.output.Find((obj) =>
+                                obj.sid == function.sid
+                            );
+                            if (tempLocal == null)
+                                alarm.output.Add(function);
+                            ShowStateDialog(function, btnState, btnChooseIcon);
+                        };
+
+                        var localOutput = alarm.output.Find((obj) => obj.sid == function.sid);
+
+                        if (localOutput != null)
+                        {
+                            btnChooseIcon.IsSelected = true;
+                            btnState.Text = function.StateText();
                         }
+
+
+                        functionListView.AddChidren(new Button()
+                        {
+                            Gravity = Gravity.CenterHorizontal,
+                            Width = Application.GetRealWidth(343),
+                            Height = Application.GetRealWidth(1),
+                            BackgroundColor = CSS_Color.DividingLineColor,
+                        });
+
+
                     }
-                };
-                btnState.MouseUpEventHandler = (sender, e) =>
-                {
-                    btnChooseIcon.IsSelected = true;
-                    var tempLocal = alarm.output.Find((obj) =>
-                        obj.sid == function.sid
-                    );
-                    if (tempLocal == null)
-                        alarm.output.Add(function);
-                    ShowStateDialog(function, btnState, btnChooseIcon);
-                };
 
-                var localOutput = alarm.output.Find((obj) => obj.sid == function.sid);
-
-                if (localOutput != null)
-                {
-                    btnChooseIcon.IsSelected = true;
-                    btnState.Text = function.StateText();
-                }
-
-
-                functionListView.AddChidren(new Button()
-                {
-                    Gravity = Gravity.CenterHorizontal,
-                    Width = Application.GetRealWidth(343),
-                    Height = Application.GetRealWidth(1),
-                    BackgroundColor = CSS_Color.DividingLineColor,
                 });
-
-
-            }
+            }).Start();
         }
 
 
@@ -471,7 +481,8 @@
                 var form = new FloorRoomSelectPopupView();
                 form.ShowDeviceFunctionView(btnFloor, listAllFun, (selectId, listFun) =>
                 {
-                    SetData(selectId);
+                    var selecteRoom = SpatialInfo.CurrentSpatial.RoomList.Find((obj) => obj.uid == selectId);
+                    SetData(selecteRoom.roomId);
                     //閲嶆柊鍒锋柊璁惧鍒楄〃
                     this.LoadFunctionListRow();
                 }, nowSelectId);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/ArmSensorHistroyPaging.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/ArmSensorHistroyPaging.cs
index 5ca7239..5e78767 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/ArmSensorHistroyPaging.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/ArmSensorHistroyPaging.cs
@@ -32,7 +32,7 @@
             VerticalScrolViewLayout histroyView = new VerticalScrolViewLayout()
             {
                 Y = btnTitle.Bottom,
-                Height = Application.GetRealHeight(450),
+                Height = Application.GetRealHeight(0),
             };
             FrameWhiteCentet2.AddChidren(histroyView);
 
@@ -53,6 +53,14 @@
                     Application.RunOnMainThread(() =>
                     {
                         var startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 褰撳湴鏃跺尯
+                        if (revData.list.Count > 9)
+                        {
+                            histroyView.Height = Application.GetRealHeight(450);
+                        }
+                        else
+                        {
+                            histroyView.Height = Application.GetRealHeight(50*revData.list.Count);
+                        }
                         foreach (var data in revData.list)
                         {
                             var yearString = startTime.AddMilliseconds(Convert.ToDouble(data.createTime)).ToString("yyyy") + Language.StringByID(StringId.Years);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ContentView/AcContentView.cs b/HDL_ON/UI/UI2/FuntionControlView/ContentView/AcContentView.cs
new file mode 100644
index 0000000..1bb8cbf
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/ContentView/AcContentView.cs
@@ -0,0 +1,1110 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.DriverLayer;
+using HDL_ON.Entity;
+using HDL_ON.Stan;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI.UI2.FuntionControlView.Panel
+{
+    public class AcContentView : FrameLayout
+    {
+
+        #region 鈻� 鍙橀噺澹版槑___________________________
+        /// <summary>
+        /// 绌鸿皟娓╁害鎺у埗鎺т欢
+        /// </summary>
+        DiyArcSeekBar arcBar;
+        /// <summary>
+        /// 鍑忓彿鎸夐挳
+        /// </summary>
+        Button btnMinus;
+        /// <summary>
+        /// 鍔犲彿鎸夐挳
+        /// </summary>
+        Button btnPlus;
+        /// <summary>
+        /// 娓╁害鎸夐挳
+        /// </summary>
+        Button btnTemp;
+        Button btnTempUint;
+        /// <summary>
+        /// 瀹ゅ唴娓╁害鎸夐挳
+        /// </summary>
+        Button btnIndoorTemp;
+        /// <summary>
+        /// 妯″紡鎸夐挳
+        /// </summary>
+        Button btnMode;
+        /// <summary>
+        /// 鎵鎸夐挳
+        /// </summary>
+        Button btnSwing;
+        /// <summary>
+        /// 椋庨�熸寜閽�
+        /// </summary>
+        Button btnWindSpeed;
+        /// <summary>
+        /// 寮�鍏虫寜閽�
+        /// </summary>
+        Button btnSwitch;
+
+        AC acFunction = new AC();
+
+        /// <summary>
+        /// 鎺у埗鏃堕棿
+        /// </summary>
+        DateTime controlTime = DateTime.MinValue.AddDays(10);
+        /// <summary>
+        /// 鎺у埗娓╁害
+        /// </summary>
+        int temp = 16;
+
+        #endregion
+        Function device;
+        public AcContentView(Function function)
+        {
+            device = function;
+
+            var sk = device.GetAttribute(FunctionAttributeKey.SetTemp);
+            if (sk != null)
+            {
+                if (sk.min == 0)
+                {
+                    sk.min = 16;
+                }
+                if (sk.max == 0)
+                {
+                    sk.max = 32;
+                }
+            }
+
+        }
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public void InitContent(bool initStandard = true)
+        {
+            if (initStandard)
+            {
+                //璁惧鍚嶅瓧
+                var btnDeviceName = new NormalViewControl(270, 37, true);
+                btnDeviceName.X = Application.GetRealWidth(16);
+                btnDeviceName.Y = Application.GetRealHeight(18);
+                btnDeviceName.TextColor = CSS_Color.FirstLevelTitleColor;
+                btnDeviceName.TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel;
+                btnDeviceName.Text = device.name;
+                btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
+                AddChidren(btnDeviceName);
+                //鎴块棿鍚嶅瓧
+                var btnRoomName = new NormalViewControl(270, 21, true);
+                btnRoomName.X = Application.GetRealWidth(16);
+                btnRoomName.Y = btnDeviceName.Bottom;
+                btnRoomName.TextColor = CSS_Color.PromptingColor1;
+                btnRoomName.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+                btnRoomName.Text = device.GetRoomListName();
+                btnRoomName.Width = btnRoomName.GetRealWidthByText();
+                AddChidren(btnRoomName);
+
+            }
+
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent();
+
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            new System.Threading.Thread(() =>
+            {
+                while (true)
+                {
+                    if (controlTime == DateTime.MinValue)
+                    {
+
+                    }
+                    else if (controlTime.AddSeconds(2) < DateTime.Now)
+                    {
+                        Control.Ins.SendReadCommand(device);
+                        controlTime = DateTime.MinValue;
+                    }
+                    System.Threading.Thread.Sleep(1000);
+                }
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent()
+        {
+            temp = (int)Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", "."));
+            arcBar = new DiyArcSeekBar()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                OpenAngle = 160,
+                ThumbImageHeight = Application.GetRealWidth(50),
+                ProgressBarColor = CSS_Color.MainColor,
+                OfflineProgressBarColor = CSS_Color.PromptingColor2,
+                ArcColor = CSS_Color.BackgroundColor,
+#if __IOS__
+                Y = Application.GetRealHeight(120 + 25),
+                Width = Application.GetRealWidth(260 - 40),
+                Height = Application.GetRealWidth(260 - 40),
+                SeekBarPadding = Application.GetRealWidth(8),
+#else
+                Y = Application.GetRealHeight(120 + 40),
+                Width = Application.GetRealWidth(260 - 40),
+                Height = Application.GetRealWidth(260 - 40),
+                SeekBarPadding = Application.GetRealWidth(7),
+#endif
+
+            };
+            this.AddChidren(arcBar);
+
+
+            arcBar.ThumbImagePath = device.GetAttrState(FunctionAttributeKey.OnOff) == "on" ? "FunctionIcon/AC/DiyThumbIconOn.png" : "FunctionIcon/AC/DiyThumbIcon.png";
+            arcBar.IsOffline = device.GetAttrState(FunctionAttributeKey.OnOff) == "off";
+            arcBar.MinValue = device.GetAttribute(FunctionAttributeKey.SetTemp).min;
+            arcBar.MaxValue = device.GetAttribute(FunctionAttributeKey.SetTemp).max;
+            arcBar.Progress = (int)Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", "."));
+
+            btnTemp = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(206),
+                Width = Application.GetRealWidth(71),
+                Height = Application.GetRealWidth(60),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 50,
+                IsBold = true,
+                Text = Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")).ToString(),
+                TextAlignment = TextAlignment.Center,
+            };
+            this.AddChidren(btnTemp);
+
+            btnTempUint = new Button()
+            {
+                X = btnTemp.Right,
+                Y = btnTemp.Y,
+                Width = Application.GetRealWidth(30),
+                Height = Application.GetRealHeight(30),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
+                IsBold = true,
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = "掳C",
+            };
+            this.AddChidren(btnTempUint);
+
+            btnIndoorTemp = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = btnTemp.Bottom,
+                Width = Application.GetRealWidth(120),
+                Height = Application.GetRealHeight(20),
+                Text = Language.StringByID(StringId.IndoorTemp) + "20掳C",
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            };
+            this.AddChidren(btnIndoorTemp);
+
+            btnMinus = new Button()
+            {
+                X = Application.GetRealWidth(21),
+                Y = Application.GetRealHeight(263),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "Public/MinusSignIcon.png",
+            };
+            this.AddChidren(btnMinus);
+
+            btnPlus = new Button()
+            {
+                X = Application.GetRealWidth(275),
+                Y = Application.GetRealHeight(263),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "Public/PlusSignIcon.png",
+            };
+            this.AddChidren(btnPlus);
+
+            btnMode = new Button()
+            {
+                X = Application.GetRealWidth(60),
+                Y = Application.GetRealHeight(334),
+                Width = Application.GetRealWidth(30),
+                Height = Application.GetRealWidth(30),
+                UnSelectedImagePath = acFunction.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode)),
+            };
+            this.AddChidren(btnMode);
+
+
+            btnSwing = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(330),
+                Width = Application.GetRealWidth(40),
+                Height = Application.GetRealWidth(40),
+                UnSelectedImagePath = "FunctionIcon/AC/SweepIconNullOn.png",
+            };
+            if (device.GetAttribute(FunctionAttributeKey.Swing) != null)
+            {
+                this.AddChidren(btnSwing);
+            }
+
+
+            btnWindSpeed = new Button()
+            {
+                X = Application.GetRealWidth(235),
+                Y = Application.GetRealHeight(337),
+                Width = Application.GetRealWidth(30),
+                Height = Application.GetRealWidth(30),
+                UnSelectedImagePath = acFunction.GetFanIconPath(device.GetAttrState(FunctionAttributeKey.FanSpeed)),
+            };
+            this.AddChidren(btnWindSpeed);
+
+            btnSwitch = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(466),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "Public/PowerClose.png",
+                SelectedImagePath = "Public/PowerOpen.png",
+                IsSelected = device.GetAttrState(FunctionAttributeKey.OnOff) == "on"
+            };
+            this.AddChidren(btnSwitch);
+
+            LoadEvent_TempChange();
+            LoadEvent_AcStatesChange();
+
+            LoadDiv_IrView();
+        }
+
+        /// <summary>
+        /// 鍔犺浇淇敼妯″紡鍖哄煙
+        /// </summary>
+        void LoadDiv_ChangeModeView()
+        {
+            Dialog dialog = new Dialog();
+
+            FrameLayout dialogView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(dialogView);
+
+            FrameLayout modeChangeView;
+            modeChangeView = new FrameLayout()
+            {
+                X = Application.GetRealWidth(30),
+                Y = Application.GetRealHeight(128),
+                Width = Application.GetRealWidth(160),
+                Height = Application.GetRealHeight(287),
+                BackgroundImagePath = "FunctionIcon/AC/DivBg1.png",
+            };
+            dialogView.AddChidren(modeChangeView);
+
+            Button btnTitle;
+            btnTitle = new Button()
+            {
+                X = Application.GetRealWidth(8 + 16),
+                Y = Application.GetRealHeight(8),
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(44),
+                TextID = StringId.ChooseMode,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
+            };
+            modeChangeView.AddChidren(btnTitle);
+
+            Button btnLine = new Button()
+            {
+                X = btnTitle.X,
+                Y = btnTitle.Bottom,
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(1),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            };
+            modeChangeView.AddChidren(btnLine);
+
+            var modeList = device.GetAttribute(FunctionAttributeKey.Mode).value;
+            foreach (var m in modeList)
+            {
+                Button btnModeIcon = new Button()
+                {
+                    X = btnTitle.X,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 10 + 8),
+                    Width = Application.GetRealWidth(24),
+                    Height = Application.GetRealWidth(24),
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m,
+                };
+                modeChangeView.AddChidren(btnModeIcon);
+
+                Button btnModeText = new Button()
+                {
+                    X = Application.GetRealWidth(12) + btnModeIcon.Right,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 8),
+                    Height = Application.GetRealHeight(44),
+                    Width = Application.GetRealWidth(90),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                modeChangeView.AddChidren(btnModeText);
+
+                btnModeIcon.UnSelectedImagePath = acFunction.GetModeIconPath(m, false);
+                btnModeIcon.SelectedImagePath = acFunction.GetModeIconPath(m);
+                btnModeText.Text = acFunction.GetModeAttrText(m);
+
+                if (modeList.IndexOf(m) < modeList.Count - 1)
+                {
+                    modeChangeView.AddChidren(new Button()
+                    {
+                        X = btnTitle.X,
+                        Y = btnModeText.Bottom,
+                        Width = Application.GetRealWidth(112),
+                        Height = Application.GetRealHeight(1),
+                        BackgroundColor = CSS_Color.BackgroundColor,
+                    });
+                }
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+                {
+                    dialog.Close();
+                };
+                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);
+                    Dictionary<string, string> d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.Mode, m);
+                    Control.Ins.SendWriteCommand(device, d);
+                    dialog.Close();
+                    if (device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                    {
+                        arcBar.IsClickable = false;
+                        arcBar.IsOffline = true;
+                    }
+                    else
+                    {
+                        arcBar.IsOffline = false;
+                        arcBar.IsClickable = true;
+                    }
+                };
+                btnModeIcon.MouseUpEventHandler = eventHandler1;
+                btnModeText.MouseUpEventHandler = eventHandler1;
+                dialogView.MouseUpEventHandler = eventHandler;
+
+            }
+
+            dialogView.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+            };
+            dialog.Show();
+        }
+
+        /// <summary>
+        /// 鍔犺浇淇敼鎵妯″紡鍖哄煙
+        /// </summary>
+        void LoadDiv_ChangeSwingView()
+        {
+            Dialog dialog = new Dialog();
+
+            FrameLayout dialogView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(dialogView);
+
+            FrameLayout modeChangeView;
+            modeChangeView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(128),
+                Width = Application.GetRealWidth(160),
+                Height = Application.GetRealHeight(287),
+                BackgroundImagePath = "FunctionIcon/AC/DivBg2.png",
+            };
+            dialogView.AddChidren(modeChangeView);
+
+            Button btnTitle;
+            btnTitle = new Button()
+            {
+                X = Application.GetRealWidth(8 + 16),
+                Y = Application.GetRealHeight(8),
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(44),
+                TextID = StringId.Swing,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
+            };
+            modeChangeView.AddChidren(btnTitle);
+
+            Button btnLine = new Button()
+            {
+                X = btnTitle.X,
+                Y = btnTitle.Bottom,
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(1),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            };
+            modeChangeView.AddChidren(btnLine);
+
+            var modeList = device.GetAttribute(FunctionAttributeKey.Swing).value;
+            foreach (var m in modeList)
+            {
+                Button btnModeIcon = new Button()
+                {
+                    X = btnTitle.X,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 10 + 8),
+                    Width = Application.GetRealWidth(24),
+                    Height = Application.GetRealWidth(24),
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.Swing) == m,
+                };
+                modeChangeView.AddChidren(btnModeIcon);
+
+                Button btnModeText = new Button()
+                {
+                    X = Application.GetRealWidth(12) + btnModeIcon.Right,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 8),
+                    Height = Application.GetRealHeight(44),
+                    Width = Application.GetRealWidth(90),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.Swing) == m,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                modeChangeView.AddChidren(btnModeText);
+
+                if (modeList.IndexOf(m) < modeList.Count - 1)
+                {
+                    modeChangeView.AddChidren(new Button()
+                    {
+                        X = btnTitle.X,
+                        Y = btnModeText.Bottom,
+                        Width = Application.GetRealWidth(112),
+                        Height = Application.GetRealHeight(1),
+                        BackgroundColor = CSS_Color.BackgroundColor,
+                    });
+                }
+
+                btnModeIcon.UnSelectedImagePath = acFunction.GetSwingIconPath(m, false);
+                btnModeIcon.SelectedImagePath = acFunction.GetSwingIconPath(m);
+                btnModeText.Text = acFunction.GetSwingAttrText(m);
+
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+                {
+                    dialog.Close();
+                };
+                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);
+                    Dictionary<string, string> d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.Swing, m);
+                    Control.Ins.SendWriteCommand(device, d);
+                    dialog.Close();
+                };
+                btnModeIcon.MouseUpEventHandler = eventHandler1;
+                btnModeText.MouseUpEventHandler = eventHandler1;
+                dialogView.MouseUpEventHandler = eventHandler;
+
+            }
+
+            dialogView.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+            };
+            dialog.Show();
+        }
+        /// <summary>
+        /// 鍔犺浇淇敼妯″紡鍖哄煙
+        /// </summary>
+        void LoadDiv_ChangeFanView()
+        {
+            Dialog dialog = new Dialog();
+
+            FrameLayout dialogView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(dialogView);
+
+            FrameLayout modeChangeView;
+            modeChangeView = new FrameLayout()
+            {
+                X = Application.GetRealWidth(185),
+                Y = Application.GetRealHeight(172),
+                Width = Application.GetRealWidth(160),
+                Height = Application.GetRealHeight(243),
+                BackgroundImagePath = "FunctionIcon/AC/DivBg2.png",
+            };
+            dialogView.AddChidren(modeChangeView);
+
+            Button btnTitle;
+            btnTitle = new Button()
+            {
+                X = Application.GetRealWidth(8 + 16),
+                Y = Application.GetRealHeight(8),
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(44),
+                TextID = StringId.ChooseFan,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
+            };
+            modeChangeView.AddChidren(btnTitle);
+
+            Button btnLine = new Button()
+            {
+                X = btnTitle.X,
+                Y = btnTitle.Bottom,
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(1),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            };
+            modeChangeView.AddChidren(btnLine);
+
+            var modeList = device.GetAttribute(FunctionAttributeKey.FanSpeed).value;
+            foreach (var m in modeList)
+            {
+                Button btnFanIcon = new Button()
+                {
+                    X = btnTitle.X,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 10 + 8),
+                    Width = Application.GetRealWidth(24),
+                    Height = Application.GetRealWidth(24),
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.FanSpeed) == m,
+                };
+                modeChangeView.AddChidren(btnFanIcon);
+
+                Button btnFanText = new Button()
+                {
+                    X = Application.GetRealWidth(12) + btnFanIcon.Right,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 8),
+                    Height = Application.GetRealHeight(44),
+                    Width = Application.GetRealWidth(70),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.FanSpeed) == m,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                modeChangeView.AddChidren(btnFanText);
+                btnFanIcon.UnSelectedImagePath = acFunction.GetFanIconPath(m, false);
+                btnFanIcon.SelectedImagePath = acFunction.GetFanIconPath(m);
+                btnFanText.Text = acFunction.GetFanAttrText(m);
+
+                if (modeList.IndexOf(m) < modeList.Count - 1)
+                {
+                    modeChangeView.AddChidren(new Button()
+                    {
+                        X = btnTitle.X,
+                        Y = btnFanText.Bottom,
+                        Width = Application.GetRealWidth(112),
+                        Height = Application.GetRealHeight(1),
+                        BackgroundColor = CSS_Color.BackgroundColor,
+                    });
+                }
+
+                EventHandler<MouseEventArgs> closeDialogEvent = (sender, e) =>
+                {
+                    dialog.Close();
+                };
+                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);
+                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.FanSpeed, m);
+                    Control.Ins.SendWriteCommand(device, d);
+                    //btnWindSpeed.UnSelectedImagePath = btnFanIcon.UnSelectedImagePath;
+                    dialog.Close();
+                };
+                btnFanIcon.MouseUpEventHandler = eventHandler1;
+                btnFanText.MouseUpEventHandler = eventHandler1;
+                dialogView.MouseUpEventHandler = closeDialogEvent;
+            }
+
+            dialog.Show();
+        }
+
+        /// <summary>
+        /// 鍔犺浇绾㈠閬ユ帶鍣紝棰濆鎸夐挳
+        /// </summary>
+        void LoadDiv_IrView()
+        {
+            if (device.spk == SPK.AcIr)
+            {
+                var btnMore = new Button()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Y = Application.GetRealHeight(334 + 80),
+                    Width = Application.GetRealWidth(35),
+                    Height = Application.GetRealWidth(35),
+                    UnSelectedImagePath = "FunctionIcon/AC/More.png",
+                };
+                this.AddChidren(btnMore);
+
+                btnMore.MouseUpEventHandler = (sender, e) => {
+                    LoadDialog_IrMoreView();
+                };
+            }
+        }
+
+        /// <summary>
+        /// 鍔犺浇棰濆瀵圭孩澶栨寜閽晫闈�
+        /// </summary>
+        void LoadDialog_IrMoreView()
+        {
+            Dialog dialog = new Dialog();
+
+            var div = new FrameLayout();
+            dialog.AddChidren(div);
+            div.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+            };
+
+            var bodyView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(427),//667
+                Height = Application.GetRealHeight(240),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            div.AddChidren(bodyView);
+
+            var contentView = new VerticalScrolViewLayout()
+            {
+                Y = Application.GetRealHeight(16),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(296 + 200),
+            };
+            bodyView.AddChidren(contentView);
+
+
+            var row = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(60),
+                Width = Application.GetRealWidth(296),
+                Gravity = Gravity.CenterHorizontal,
+            };
+            contentView.AddChidren(row);
+
+            int index = 0;
+            List<FunctionAttributes> attrList = new List<FunctionAttributes>();
+            attrList.AddRange(device.attributes);
+            attrList.Add(new FunctionAttributes()
+            {
+                key = "+",
+            });
+
+            foreach (var attr in attrList)
+            {
+                if (attr.key == FunctionAttributeKey.Mode
+                    || attr.key == FunctionAttributeKey.OnOff
+                    || attr.key == FunctionAttributeKey.SetTemp
+                    || attr.key == FunctionAttributeKey.SetTempStep
+                    || attr.key == FunctionAttributeKey.FanSpeed
+                    || attr.key == FunctionAttributeKey.FanManual
+                    || attr.key == FunctionAttributeKey.FanAuto
+                    )
+                {
+                    continue;
+                }
+                if (index != 0 && index % 3 == 0)
+                {
+                    row = new FrameLayout()
+                    {
+                        Height = Application.GetRealHeight(56),
+                        Width = Application.GetRealWidth(296),
+                        Gravity = Gravity.CenterHorizontal,
+                    };
+                    contentView.AddChidren(row);
+                }
+                if (attr.key == "+")
+                {
+                    var addView = new FrameLayout()
+                    {
+                        Gravity = Gravity.CenterVertical,
+                        Width = Application.GetRealWidth(88),
+                        Height = Application.GetRealHeight(40),
+                        Radius = (uint)Application.GetRealHeight(18),
+                        BorderColor = CSS_Color.PromptingColor1,
+                        BorderWidth = (uint)Application.GetRealWidth(2),
+                    };
+
+
+                    if (index % 3 == 1)
+                    {
+                        addView.Gravity = Gravity.Center;
+                    }
+                    else if (index % 3 == 2)
+                    {
+                        addView.X = Application.GetRealWidth(208);
+                    }
+                    row.AddChidren(addView);
+
+                    var btnAdd = new Button()
+                    {
+                        Gravity = Gravity.Center,
+                        UnSelectedImagePath = "Public/PlusSignIcon.png",
+                        Width = Application.GetRealWidth(32),
+                        Height = Application.GetRealWidth(32),
+                    };
+                    addView.AddChidren(btnAdd);
+
+                    btnAdd.MouseUpEventHandler = (sender, e) =>
+                    {
+                        dialog.Close();
+                        Action action = () => {
+                            LoadDialog_IrMoreView();
+                        };
+                        var addButton = new AcControlPage_AddIrButton(action);
+                        MainPage.BasePageView.AddChidren(addButton);
+                        addButton.Show(device);
+                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                    };
+
+
+                }
+                else
+                {
+
+                    var btn = new Button()
+                    {
+                        Gravity = Gravity.CenterVertical,
+                        Width = Application.GetRealWidth(88),
+                        Height = Application.GetRealHeight(40),
+                        Radius = (uint)Application.GetRealHeight(18),
+                        BorderColor = CSS_Color.PromptingColor1,
+                        BorderWidth = (uint)Application.GetRealWidth(2),
+                        TextAlignment = TextAlignment.Center,
+                        TextSize = CSS_FontSize.TextFontSize,
+                        TextColor = CSS_Color.FirstLevelTitleColor,
+                        SelectedTextColor = CSS_Color.MainBackgroundColor,
+                        SelectedBackgroundColor = CSS_Color.MainColor,
+                    };
+                    if (attr.value.Count > 0)
+                    {
+                        btn.Text = attr.value[0];
+                    }
+                    if (index % 3 == 1)
+                    {
+                        btn.Gravity = Gravity.Center;
+                    }
+                    else if (index % 3 == 2)
+                    {
+                        btn.X = Application.GetRealWidth(208);
+                    }
+                    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);
+                        //}
+                        Dictionary<string, string> d = new Dictionary<string, string>();
+                        d.Add(attr.key, "");
+                        Control.Ins.SendWriteCommand(device, d);
+
+                        new System.Threading.Thread(() =>
+                        {
+                            System.Threading.Thread.Sleep(2000);
+                            Application.RunOnMainThread(() =>
+                            {
+                                btn.IsSelected = false;
+                            });
+                        })
+                        { IsBackground = true }.Start();
+                    };
+
+                }
+
+                index++;
+            }
+
+            dialog.Show();
+        }
+
+
+        #endregion
+
+        #region 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        /// <summary>
+        /// 娓╁害鏀瑰彉妯″紡
+        /// </summary>
+        void LoadEvent_TempChange()
+        {
+            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;
+                }
+                --temp;
+                Console.WriteLine($"temp == {temp}");
+                controlTime = DateTime.Now;
+                arcBar.Progress = temp;
+                btnTemp.Text = temp.ToString();
+                device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString());
+                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.SetTemp, temp.ToString());
+                Control.Ins.SendWriteCommand(device, d);
+            };
+            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;
+                }
+                if (temp >= device.GetAttribute(FunctionAttributeKey.SetTemp).max)
+                {
+                    return;
+                }
+                ++temp;
+                controlTime = DateTime.Now;
+                arcBar.Progress = temp;
+                btnTemp.Text = temp.ToString();
+                device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString());
+                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.SetTemp, temp.ToString());
+                Control.Ins.SendWriteCommand(device, d);
+            };
+            //if (device.online)
+            {
+                arcBar.OnStopTrackingTouchEvent = (sender, e) =>
+                {
+                    temp = arcBar.Progress;
+                    device.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
+                    btnTemp.Text = arcBar.Progress.ToString();
+                    controlTime = DateTime.Now;
+                    Dictionary<string, string> d = new 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>
+        /// 鎺у埗妯″紡浜嬩欢
+        /// </summary>
+        void LoadEvent_AcStatesChange()
+        {
+            btnMode.MouseUpEventHandler = (sender, e) =>
+            {
+                if (device.trait_on_off.curValue.ToString() == "off")
+                {
+                    return;
+                }
+                LoadDiv_ChangeModeView();
+            };
+            //鎵鏀瑰彉妯″紡
+            btnSwing.MouseUpEventHandler = (sender, e) =>
+            {
+                if (device.trait_on_off.curValue.ToString() == "off")
+                {
+                    return;
+                }
+                LoadDiv_ChangeSwingView();
+            };
+            btnWindSpeed.MouseUpEventHandler = (sender, e) =>
+            {
+                if (device.trait_on_off.curValue.ToString() == "off")
+                {
+                    return;
+                }
+                LoadDiv_ChangeFanView();
+            };
+
+            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")
+                {
+                    arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIconOn.png";
+                    btnSwitch.IsSelected = true;
+                    arcBar.IsOffline = false;
+                }
+                else
+                {
+                    arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png";
+                    btnSwitch.IsBold = false;
+                    arcBar.IsOffline = true;
+                }
+                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.OnOff, device.trait_on_off.curValue.ToString());
+                Control.Ins.SendWriteCommand(device, d);
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        public void RefreshFormStatu()
+        {
+            Application.RunOnMainThread(() =>
+            {
+                //app鑷繁鎺у埗鐨勪笉鐢ㄦ洿鏂帮紝浼氶�犳垚璺冲姩
+                if (controlTime.AddSeconds(2) > DateTime.Now)
+                {
+                    return;
+                }
+                else
+                {
+                    btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.RoomTemp).Replace(",", "."))) + "掳C";
+                    btnMode.SelectedImagePath = acFunction.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode));
+                    btnSwing.SelectedImagePath = acFunction.GetSwingIconPath(device.GetAttrState(FunctionAttributeKey.Swing));
+                    btnWindSpeed.SelectedImagePath = acFunction.GetFanIconPath(device.GetAttrState(FunctionAttributeKey.FanSpeed));
+                    btnMode.UnSelectedImagePath = acFunction.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode), false);
+                    btnSwing.UnSelectedImagePath = acFunction.GetSwingIconPath(device.GetAttrState(FunctionAttributeKey.Swing), false);
+                    btnWindSpeed.UnSelectedImagePath = acFunction.GetFanIconPath(device.GetAttrState(FunctionAttributeKey.FanSpeed), false);
+                    temp = Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")));
+
+
+                    arcBar.Progress = temp;
+                    btnTemp.Text = temp.ToString();
+
+                    if (device.trait_on_off.curValue.ToString() == "on")
+                    {
+                        btnMode.IsSelected = btnSwing.IsSelected = btnWindSpeed.IsSelected = true;
+                        arcBar.IsOffline = false;
+                        btnSwitch.IsSelected = true;
+                        arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIconOn.png";
+                        if (device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                        {
+                            arcBar.IsClickable = false;
+                        }
+                        else
+                        {
+                            arcBar.IsClickable = true;
+                        }
+                    }
+                    else
+                    {
+                        btnMode.IsSelected = btnSwing.IsSelected = btnWindSpeed.IsSelected = false;
+                        arcBar.IsOffline = true;
+                        btnSwitch.IsSelected = false;
+                        arcBar.IsClickable = false;
+                        arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png";
+                    }
+
+                    if (device.GetAttrState(FunctionAttributeKey.Mode) == "dry")
+                    {
+                        arcBar.IsOffline = true;
+                        arcBar.IsClickable = false;
+
+                    }
+                }
+
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+        /// </summary>
+        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
+        {
+        }
+
+        #endregion
+    }
+}
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ContentView/FhContentView.cs b/HDL_ON/UI/UI2/FuntionControlView/ContentView/FhContentView.cs
new file mode 100644
index 0000000..a4134a9
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/ContentView/FhContentView.cs
@@ -0,0 +1,540 @@
+锘縰sing System;
+using HDL_ON.DriverLayer;
+using HDL_ON.Entity;
+using HDL_ON.Stan;
+using HDL_ON.UI.CSS;
+using Shared;
+namespace HDL_ON.UI
+{
+    public class FhContentView : FrameLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+        /// <summary>
+        /// 绌鸿皟娓╁害鎺у埗鎺т欢
+        /// </summary>
+        DiyArcSeekBar arcBar;
+        /// <summary>
+        /// 鍑忓彿鎸夐挳
+        /// </summary>
+        Button btnMinus;
+        /// <summary>
+        /// 鍔犲彿鎸夐挳
+        /// </summary>
+        Button btnPlus;
+        /// <summary>
+        /// 娓╁害鎸夐挳
+        /// </summary>
+        Button btnTemp;
+        Button btnTempUint;
+        /// <summary>
+        /// 瀹ゅ唴娓╁害鎸夐挳
+        /// </summary>
+        Button btnIndoorTemp;
+        /// <summary>
+        /// 妯″紡鎸夐挳
+        /// </summary>
+        Button btnMode;
+        /// <summary>
+        /// 寮�鍏虫寜閽�
+        /// </summary>
+        Button btnSwitch;
+
+        FloorHeating fhTemp = new FloorHeating();
+
+        Function device;
+
+        #endregion
+
+        public FhContentView(Function function)
+        {
+            device = function;
+        }
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public void InitContentView(bool initStandard)
+        {
+
+            if (initStandard)
+            {
+                //璁惧鍚嶅瓧
+                var btnDeviceName = new NormalViewControl(270, 37, true);
+                btnDeviceName.X = Application.GetRealWidth(16);
+                btnDeviceName.Y = Application.GetRealHeight(18);
+                btnDeviceName.TextColor = CSS_Color.FirstLevelTitleColor;
+                btnDeviceName.TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel;
+                btnDeviceName.Text = device.name;
+                btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
+                AddChidren(btnDeviceName);
+                //鎴块棿鍚嶅瓧
+                var btnRoomName = new NormalViewControl(270, 21, true);
+                btnRoomName.X = Application.GetRealWidth(16);
+                btnRoomName.Y = btnDeviceName.Bottom;
+                btnRoomName.TextColor = CSS_Color.PromptingColor1;
+                btnRoomName.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+                btnRoomName.Text = device.GetRoomListName();
+                btnRoomName.Width = btnRoomName.GetRealWidthByText();
+                AddChidren(btnRoomName);
+
+            }
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent1();
+
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            new System.Threading.Thread(() =>
+            {
+                Control.Ins.SendReadCommand(device);
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent1()
+        {
+
+            arcBar = new DiyArcSeekBar()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                OpenAngle = 160,
+                //ThumbImagePath = device.trait_on_off.curValue.ToString() == "on" ? "FunctionIcon/FloorHeating/DiyThumbIconOn.png" : "FunctionIcon/AC/DiyThumbIcon.png",
+                ThumbImageHeight = Application.GetRealWidth(50),
+                ProgressBarColor = CSS_Color.AuxiliaryColor1, // 0xFFFC9C04,
+                OfflineProgressBarColor = CSS_Color.PromptingColor2,
+                MinValue = device.GetAttribute(FunctionAttributeKey.SetTemp).min,
+                MaxValue = device.GetAttribute(FunctionAttributeKey.SetTemp).max,
+                ArcColor = CSS_Color.BackgroundColor,
+                Progress = Convert.ToInt32(device.GetAttrState(FunctionAttributeKey.SetTemp)),
+#if __IOS__
+                Y = Application.GetRealHeight(120 + 25),
+                Width = Application.GetRealWidth(260 - 40),
+                Height = Application.GetRealWidth(260 - 40),
+                SeekBarPadding = Application.GetRealWidth(8),
+#else
+                Y = Application.GetRealHeight(120 + 40),
+                Width = Application.GetRealWidth(260 - 40),
+                Height = Application.GetRealWidth(260 - 40),
+                SeekBarPadding = Application.GetRealWidth(7),
+#endif
+
+            };
+            AddChidren(arcBar);
+
+
+            arcBar.ThumbImagePath = device.GetAttrState(FunctionAttributeKey.OnOff) == "on" ? "FunctionIcon/AC/DiyThumbIconOn.png" : "FunctionIcon/AC/DiyThumbIcon.png";
+            arcBar.IsOffline = device.GetAttrState(FunctionAttributeKey.OnOff) == "off";
+            arcBar.MinValue = device.GetAttribute(FunctionAttributeKey.SetTemp).min;
+            arcBar.MaxValue = device.GetAttribute(FunctionAttributeKey.SetTemp).max;
+            arcBar.Progress = Convert.ToInt32(device.GetAttrState(FunctionAttributeKey.SetTemp));
+
+
+
+            btnTemp = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(200),
+                Width = Application.GetRealWidth(80),
+                Height = Application.GetRealWidth(60),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 56,
+                IsBold = true,
+                Text = device.GetAttrState(FunctionAttributeKey.SetTemp),
+                TextAlignment = TextAlignment.Center,
+            };
+            AddChidren(btnTemp);
+
+            btnTempUint = new Button()
+            {
+                X = btnTemp.Right,
+                Y = btnTemp.Y,
+                Width = Application.GetRealWidth(30),
+                Height = Application.GetRealWidth(25),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
+                IsBold = true,
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = fhTemp.GetTempUnitString(device)
+            };
+            AddChidren(btnTempUint);
+
+            btnIndoorTemp = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = btnTemp.Bottom + Application.GetRealWidth(10),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealHeight(20),
+                Text = Language.StringByID(StringId.IndoorTemp) + "20掳C",
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            };
+            AddChidren(btnIndoorTemp);
+
+            btnMinus = new Button()
+            {
+                X = Application.GetRealWidth(21),
+                Y = Application.GetRealHeight(263),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "Public/MinusSignIcon.png",
+            };
+            AddChidren(btnMinus);
+
+            btnPlus = new Button()
+            {
+                X = Application.GetRealWidth(275),
+                Y = Application.GetRealHeight(263),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "Public/PlusSignIcon.png",
+            };
+            AddChidren(btnPlus);
+
+            if (device.GetAttribute(FunctionAttributeKey.Mode) != null)
+            {
+                btnMode = new Button()
+                {
+                    X = Application.GetRealWidth(235),
+                    Y = Application.GetRealHeight(337),
+                    Width = Application.GetRealWidth(30),
+                    Height = Application.GetRealWidth(30),
+                    UnSelectedImagePath = fhTemp.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode))
+                };
+                AddChidren(btnMode);
+                if (device.GetAttribute(FunctionAttributeKey.Mode).value.Count > 1)
+                {
+                    btnMode.MouseUpEventHandler = (sender, e) =>
+                    {
+                        LoadDiv_ChangeModeView();
+                    };
+                }
+            }
+
+            btnSwitch = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(466),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "Public/PowerClose.png",
+                SelectedImagePath = "Public/PowerOpen.png",
+                IsSelected = device.trait_on_off.curValue.ToString() == "on"
+            };
+            AddChidren(btnSwitch);
+
+            LoadEvent_TempChange();
+            LoadEvent_AcStatesChange();
+
+        }
+
+        /// <summary>
+        /// 鍔犺浇淇敼妯″紡鍖哄煙
+        /// </summary>
+        void LoadDiv_ChangeModeView()
+        {
+            Dialog dialog = new Dialog();
+
+            FrameLayout dialogView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(dialogView);
+
+            FrameLayout modeChangeView;
+            modeChangeView = new FrameLayout()
+            {
+                X = Application.GetRealWidth(30),
+                Y = Application.GetRealHeight(128),
+                Width = Application.GetRealWidth(160),
+                Height = Application.GetRealHeight(287),
+                BackgroundImagePath = "FunctionIcon/AC/DivBg1.png",
+            };
+            dialogView.AddChidren(modeChangeView);
+
+            Button btnTitle;
+            btnTitle = new Button()
+            {
+                X = Application.GetRealWidth(8 + 16),
+                Y = Application.GetRealHeight(8),
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(44),
+                TextID = StringId.ChooseMode,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.EmphasisFontSize_Secondary,
+            };
+            modeChangeView.AddChidren(btnTitle);
+
+            Button btnLine = new Button()
+            {
+                X = btnTitle.X,
+                Y = btnTitle.Bottom,
+                Width = Application.GetRealWidth(112),
+                Height = Application.GetRealHeight(1),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            };
+            modeChangeView.AddChidren(btnLine);
+
+            var modeList = device.GetAttribute(FunctionAttributeKey.Mode).value;
+            foreach (var m in modeList)
+            {
+                Button btnModeIcon = new Button()
+                {
+                    X = btnTitle.X,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 10 + 8),
+                    Width = Application.GetRealWidth(24),
+                    Height = Application.GetRealWidth(24),
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m,
+                };
+                modeChangeView.AddChidren(btnModeIcon);
+
+                Button btnModeText = new Button()
+                {
+                    X = Application.GetRealWidth(12) + btnModeIcon.Right,
+                    Y = Application.GetRealHeight(44 * (modeList.IndexOf(m) + 1) + 8),
+                    Height = Application.GetRealHeight(44),
+                    Width = Application.GetRealWidth(90),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    IsSelected = device.GetAttrState(FunctionAttributeKey.Mode) == m,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                modeChangeView.AddChidren(btnModeText);
+
+                btnModeIcon.UnSelectedImagePath = fhTemp.GetModeIconPath(m, false);
+                btnModeIcon.SelectedImagePath = fhTemp.GetModeIconPath(m);
+                btnModeText.Text = fhTemp.GetModeAttrText(m);
+
+                if (modeList.IndexOf(m) < modeList.Count - 1)
+                {
+                    modeChangeView.AddChidren(new Button()
+                    {
+                        X = btnTitle.X,
+                        Y = btnModeText.Bottom,
+                        Width = Application.GetRealWidth(112),
+                        Height = Application.GetRealHeight(1),
+                        BackgroundColor = CSS_Color.BackgroundColor,
+                    });
+                }
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+                {
+                    dialog.Close();
+                };
+                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);
+                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                    btnMode.UnSelectedImagePath = btnModeIcon.UnSelectedImagePath;
+                    d.Add(FunctionAttributeKey.Mode, m);
+                    Control.Ins.SendWriteCommand(device, d);
+                    dialog.Close();
+                    if (device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                    {
+                        arcBar.IsClickable = false;
+                    }
+                    else
+                    {
+                        arcBar.IsClickable = true;
+                    }
+                };
+                btnModeIcon.MouseUpEventHandler = eventHandler1;
+                btnModeText.MouseUpEventHandler = eventHandler1;
+                dialogView.MouseUpEventHandler = eventHandler;
+
+            }
+
+            dialogView.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+            };
+            dialog.Show();
+        }
+
+        #endregion
+
+
+        #region 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        /// <summary>
+        /// 娓╁害鏀瑰彉妯″紡
+        /// </summary>
+        void LoadEvent_TempChange()
+        {
+            btnMinus.MouseUpEventHandler = (sender, e) =>
+            {
+                //if (!device.online)
+                //{
+                //    new Tip()
+                //    {
+                //        CloseTime = 1,
+                //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                //        Direction = AMPopTipDirection.None,
+                //    }.Show(MainPage.BaseView);
+                //    return;
+                //}
+                if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                {
+                    return;
+                }
+                var temp = Convert.ToInt32(device.GetAttrState(FunctionAttributeKey.SetTemp));
+                if (temp <= device.GetAttribute(FunctionAttributeKey.Mode).min)
+                {
+                    return;
+                }
+                temp--;
+                arcBar.Progress = temp;
+                btnTemp.Text = temp.ToString();
+                device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString());
+                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.SetTemp, temp.ToString());
+                Control.Ins.SendWriteCommand(device, d);
+            };
+            btnPlus.MouseUpEventHandler = (sender, e) =>
+            {
+                //if (!device.online)
+                //{
+                //    new Tip()
+                //    {
+                //        CloseTime = 1,
+                //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+                //        Direction = AMPopTipDirection.None,
+                //    }.Show(MainPage.BaseView);
+                //    return;
+                //}
+                if (device.trait_on_off.curValue.ToString() == "off" || device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                {
+                    return;
+                }
+                var temp = Convert.ToInt32(device.GetAttrState(FunctionAttributeKey.SetTemp));
+                if (temp >= device.GetAttribute(FunctionAttributeKey.SetTemp).max)
+                {
+                    return;
+                }
+                temp++;
+                arcBar.Progress = temp;
+                btnTemp.Text = temp.ToString();
+                device.SetAttrState(FunctionAttributeKey.SetTemp, temp.ToString());
+                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.SetTemp, temp.ToString());
+                Control.Ins.SendWriteCommand(device, d);
+            };
+
+            //if (device.online)
+            {
+                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>
+        /// 鎺у埗妯″紡浜嬩欢
+        /// </summary>
+        void LoadEvent_AcStatesChange()
+        {
+            btnMode.MouseUpEventHandler = (sender, e) =>
+            {
+                if (device.trait_on_off.curValue.ToString() == "off")
+                {
+                    return;
+                }
+                LoadDiv_ChangeModeView();
+            };
+
+            btnSwitch.MouseUpEventHandler = (sender, e) =>
+            {
+                btnSwitch.IsSelected = !btnSwitch.IsSelected;
+                device.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off";
+                if (device.trait_on_off.curValue.ToString() == "on")
+                {
+                    arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIconOn.png";
+                    btnSwitch.IsSelected = true;
+                    arcBar.IsOffline = false;
+                }
+                else
+                {
+                    arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png";
+                    btnSwitch.IsBold = false;
+                    arcBar.IsOffline = true;
+                }
+                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.OnOff, device.trait_on_off.curValue.ToString());
+                Control.Ins.SendWriteCommand(device, d);
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        private void RefreshFormStatu()
+        {
+            Application.RunOnMainThread(() =>
+            {
+                btnTemp.Text = device.GetAttrState(FunctionAttributeKey.SetTemp);
+                btnIndoorTemp.Text = Language.StringByID(StringId.IndoorTemp) + Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.RoomTemp).Replace(",", "."))) + "掳C";
+                btnMode.UnSelectedImagePath = fhTemp.GetModeIconPath(device.GetAttrState(FunctionAttributeKey.Mode));
+                arcBar.Progress = Convert.ToInt32(Convert.ToDouble(device.GetAttrState(FunctionAttributeKey.SetTemp).Replace(",", ".")));
+                if (device.trait_on_off.curValue.ToString() == "on")
+                {
+                    arcBar.IsOffline = false;
+                    btnSwitch.IsSelected = true;
+                    arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIconOn.png";
+                    if (device.GetAttrState(FunctionAttributeKey.Mode) == "fan")
+                    {
+                        arcBar.IsClickable = false;
+                    }
+                    else
+                    {
+                        arcBar.IsClickable = true;
+                    }
+                }
+                else
+                {
+                    arcBar.IsOffline = true;
+                    btnSwitch.IsSelected = false;
+                    arcBar.IsClickable = false;
+                    arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png";
+                }
+                //鑷姩妯″紡涓嶅厑璁歌皟娓╁害 2021-10-27 09:41:35 wxr 闄堢惓鍙嶉
+                if (device.GetAttrState(FunctionAttributeKey.Mode) == "auto")
+                {
+                    btnPlus.Enable = false;
+                    btnMinus.Enable = false;
+                    arcBar.IsClickable = false;
+                    arcBar.IsOffline = true;
+                }
+            });
+        }
+
+        #endregion
+    }
+}
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs
index cf7936f..0b08588 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs
@@ -1,1052 +1,1052 @@
-锘縰sing System;
-using System.Collections.Generic;
-using HDL_ON.DriverLayer;
-using HDL_ON.Entity;
-using HDL_ON.UI.CSS;
-using Shared;
+锘�//using System;
+//using System.Collections.Generic;
+//using HDL_ON.DriverLayer;
+//using HDL_ON.Entity;
+//using HDL_ON.UI.CSS;
+//using Shared;
 
-namespace HDL_ON.UI
-{
-    public class A_EnvironmentalDataCenter : FrameLayout
-    {
+//namespace HDL_ON.UI
+//{
+//    public class A_EnvironmentalDataCenter : FrameLayout
+//    {
 
-        #region 鎺т欢闆嗗悎
-        static A_EnvironmentalDataCenter bodyView;
-        /// <summary>
-        /// 妤煎眰鏄剧ず
-        /// </summary>
-        Button btnRoom;
-        /// <summary>
-        /// 鎴块棿閫夋嫨涓嬫媺鍥炬爣
-        /// </summary>
-        Button btnFoorDownIcon;
-        /// <summary>
-        /// 鎴块棿閫夋嫨瑙﹀彂鍖哄煙
-        /// </summary>
-        Button btnRoomClickRow;
-        /// <summary>
-        /// 浼犳劅鍣ㄥ垪琛ㄥ尯鍩�
-        /// </summary>
-        FrameLayout sensorListView;
+//        #region 鎺т欢闆嗗悎
+//        static A_EnvironmentalDataCenter bodyView;
+//        /// <summary>
+//        /// 妤煎眰鏄剧ず
+//        /// </summary>
+//        Button btnRoom;
+//        /// <summary>
+//        /// 鎴块棿閫夋嫨涓嬫媺鍥炬爣
+//        /// </summary>
+//        Button btnFoorDownIcon;
+//        /// <summary>
+//        /// 鎴块棿閫夋嫨瑙﹀彂鍖哄煙
+//        /// </summary>
+//        Button btnRoomClickRow;
+//        /// <summary>
+//        /// 浼犳劅鍣ㄥ垪琛ㄥ尯鍩�
+//        /// </summary>
+//        FrameLayout sensorListView;
 
-        VerticalScrolViewLayout sensorListContentView;
+//        VerticalScrolViewLayout sensorListContentView;
 
-        /// <summary>
-        /// 澶╂皵鍚嶇О鏂囨湰
-        /// </summary>
-        Button btnWatherText;
-        /// <summary>
-        /// 婀垮害鏁版嵁鏂囨湰
-        /// </summary>
-        Button btnHumidityText;
-        /// <summary>
-        /// pm25鏁版嵁鏂囨湰
-        /// </summary>
-        Button btnPm25Values;
-        /// <summary>
-        /// 椋庨�熸暟鎹枃鏈�
-        /// </summary>
-        Button btnFanSpeedValues;
+//        /// <summary>
+//        /// 澶╂皵鍚嶇О鏂囨湰
+//        /// </summary>
+//        Button btnWatherText;
+//        /// <summary>
+//        /// 婀垮害鏁版嵁鏂囨湰
+//        /// </summary>
+//        Button btnHumidityText;
+//        /// <summary>
+//        /// pm25鏁版嵁鏂囨湰
+//        /// </summary>
+//        Button btnPm25Values;
+//        /// <summary>
+//        /// 椋庨�熸暟鎹枃鏈�
+//        /// </summary>
+//        Button btnFanSpeedValues;
 
 
 
-        List<SensorView> sensorViewList = new List<SensorView>();
-        #endregion
-        #region 鍖哄煙鍙橀噺
-        Room room;
+//        List<SensorView> sensorViewList = new List<SensorView>();
+//        #endregion
+//        #region 鍖哄煙鍙橀噺
+//        Room room;
 
-        Sensor sensorTemp = new Sensor();
-        /// <summary>
-        /// 浼犳劅鍣ㄥ垎绫诲垪琛�
-        /// </summary>
-        Dictionary<string, List<Function>> sensorList = new Dictionary<string, List<Function>>();
-        #endregion
+//        Sensor sensorTemp = new Sensor();
+//        /// <summary>
+//        /// 浼犳劅鍣ㄥ垎绫诲垪琛�
+//        /// </summary>
+//        Dictionary<string, List<Function>> sensorList = new Dictionary<string, List<Function>>();
+//        #endregion
 
 
-        public A_EnvironmentalDataCenter()
-        {
-            bodyView = this;
-        }
+//        public A_EnvironmentalDataCenter()
+//        {
+//            bodyView = this;
+//        }
 
-        /// <summary>
-        /// 鍔犺浇鐣岄潰
-        /// </summary>
-        /// <param name="btnCollectionIcon">鏀惰棌鎸夐挳</param>
-        /// <param name="btnFunctionName">鍔熻兘鍚嶇О淇℃伅鎸夐挳</param>
-        /// <param name="btnFromFloor">鍔熻兘妤煎眰淇℃伅鎸夐挳</param>
-        public void LoadPage()
-        {
-            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+//        /// <summary>
+//        /// 鍔犺浇鐣岄潰
+//        /// </summary>
+//        /// <param name="btnCollectionIcon">鏀惰棌鎸夐挳</param>
+//        /// <param name="btnFunctionName">鍔熻兘鍚嶇О淇℃伅鎸夐挳</param>
+//        /// <param name="btnFromFloor">鍔熻兘妤煎眰淇℃伅鎸夐挳</param>
+//        public void LoadPage()
+//        {
+//            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
 
-            #region 椤堕儴澶╂皵閮ㄥ垎
-            var topWeatherView = new FrameLayout()
-            {
-                Gravity = Gravity.CenterHorizontal,
-                Y = Application.GetRealHeight(73),
-                Width = Application.GetRealWidth(361),
-                Height = Application.GetRealWidth(166),
-                BackgroundImagePath = "FunctionIcon/EnvirSensor/0.png",
-            };
-            bodyView.AddChidren(topWeatherView);
-            LoadEvent_ChangeWeatherIcon(topWeatherView);
+//            #region 椤堕儴澶╂皵閮ㄥ垎
+//            var topWeatherView = new FrameLayout()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Y = Application.GetRealHeight(73),
+//                Width = Application.GetRealWidth(361),
+//                Height = Application.GetRealWidth(166),
+//                BackgroundImagePath = "FunctionIcon/EnvirSensor/0.png",
+//            };
+//            bodyView.AddChidren(topWeatherView);
+//            LoadEvent_ChangeWeatherIcon(topWeatherView);
 
-            var btnLocationText = new Button()
-            {
-                X = Application.GetRealWidth(27),
-                Width = Application.GetRealWidth(74),
-                Height = Application.GetRealWidth(44),
-                TextAlignment = TextAlignment.CenterLeft,
-                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                TextColor = CSS_Color.FirstLevelTitleColor,
-                Text = MainPage.cityInfo.location,
-            };
-            topWeatherView.AddChidren(btnLocationText);
+//            var btnLocationText = new Button()
+//            {
+//                X = Application.GetRealWidth(27),
+//                Width = Application.GetRealWidth(74),
+//                Height = Application.GetRealWidth(44),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                Text = MainPage.cityInfo.location,
+//            };
+//            topWeatherView.AddChidren(btnLocationText);
 
 
-            var btnTemp = new Button()
-            {
-                X = Application.GetRealWidth(21),
-                Y = Application.GetRealWidth(53),
-                Width = Application.GetRealWidth(78),
-                Height = Application.GetRealWidth(68),
-                TextSize = 60,
-                IsBold = true,
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = CSS_Color.FirstLevelTitleColor,
-                Text = MainPage.cityInfo.temperature,
-            };
-            topWeatherView.AddChidren(btnTemp);
+//            var btnTemp = new Button()
+//            {
+//                X = Application.GetRealWidth(21),
+//                Y = Application.GetRealWidth(53),
+//                Width = Application.GetRealWidth(78),
+//                Height = Application.GetRealWidth(68),
+//                TextSize = 60,
+//                IsBold = true,
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                Text = MainPage.cityInfo.temperature,
+//            };
+//            topWeatherView.AddChidren(btnTemp);
 
-            var btnTempUint = new Button()
-            {
-                X = Application.GetRealWidth(109),
-                Y = Application.GetRealWidth(60),
-                Width = Application.GetRealWidth(20),
-                Height = Application.GetRealWidth(20),
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                TextColor = CSS_Color.TextualColor,
-                Text = "掳C",
-            };
-            topWeatherView.AddChidren(btnTempUint);
+//            var btnTempUint = new Button()
+//            {
+//                X = Application.GetRealWidth(109),
+//                Y = Application.GetRealWidth(60),
+//                Width = Application.GetRealWidth(20),
+//                Height = Application.GetRealWidth(20),
+//                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//                TextColor = CSS_Color.TextualColor,
+//                Text = "掳C",
+//            };
+//            topWeatherView.AddChidren(btnTempUint);
 
 
-            btnWatherText = new Button()
-            {
-                X = Application.GetRealWidth(109),
-                Y = Application.GetRealWidth(82),
-                Width = Application.GetRealWidth(200),
-                Height = Application.GetRealWidth(20),
-                TextColor = CSS_Color.TextualColor,
-                TextSize = CSS_FontSize.TextFontSize,
-                TextAlignment = TextAlignment.CenterLeft,
-                Text = MainPage.cityInfo.weather
-            };
-            topWeatherView.AddChidren(btnWatherText);
+//            btnWatherText = new Button()
+//            {
+//                X = Application.GetRealWidth(109),
+//                Y = Application.GetRealWidth(82),
+//                Width = Application.GetRealWidth(200),
+//                Height = Application.GetRealWidth(20),
+//                TextColor = CSS_Color.TextualColor,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                TextAlignment = TextAlignment.CenterLeft,
+//                Text = MainPage.cityInfo.weather
+//            };
+//            topWeatherView.AddChidren(btnWatherText);
 
-            var btnTempUpperLimit = new Button()
-            {
-                X = Application.GetRealWidth(107),
-                Y = Application.GetRealWidth(101),
-                Width = Application.GetRealWidth(16),
-                Height = Application.GetRealWidth(16),
-                UnSelectedImagePath = "FunctionIcon/EnvirSensor/UpperLimit.png",
-            };
-            topWeatherView.AddChidren(btnTempUpperLimit);
+//            var btnTempUpperLimit = new Button()
+//            {
+//                X = Application.GetRealWidth(107),
+//                Y = Application.GetRealWidth(101),
+//                Width = Application.GetRealWidth(16),
+//                Height = Application.GetRealWidth(16),
+//                UnSelectedImagePath = "FunctionIcon/EnvirSensor/UpperLimit.png",
+//            };
+//            topWeatherView.AddChidren(btnTempUpperLimit);
 
-            var btnTempUpperLimitText = new Button()
-            {
-                X = btnTempUpperLimit.Right,
-                Y = Application.GetRealWidth(101),
-                Width = Application.GetRealWidth(42),
-                Height = Application.GetRealWidth(20),
-                TextColor = CSS_Color.TextualColor,
-                TextAlignment = TextAlignment.CenterLeft,
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                Text = $"{MainPage.cityInfo.highestTemperature}掳C",
-            };
-            topWeatherView.AddChidren(btnTempUpperLimitText);
+//            var btnTempUpperLimitText = new Button()
+//            {
+//                X = btnTempUpperLimit.Right,
+//                Y = Application.GetRealWidth(101),
+//                Width = Application.GetRealWidth(42),
+//                Height = Application.GetRealWidth(20),
+//                TextColor = CSS_Color.TextualColor,
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//                Text = $"{MainPage.cityInfo.highestTemperature}掳C",
+//            };
+//            topWeatherView.AddChidren(btnTempUpperLimitText);
 
-            var btnTempLowerLimit = new Button()
-            {
-                X = Application.GetRealWidth(156),
-                Y = Application.GetRealWidth(101),
-                Width = Application.GetRealWidth(16),
-                Height = Application.GetRealWidth(16),
-                UnSelectedImagePath = "FunctionIcon/EnvirSensor/LowerLimit.png",
-            };
-            topWeatherView.AddChidren(btnTempLowerLimit);
+//            var btnTempLowerLimit = new Button()
+//            {
+//                X = Application.GetRealWidth(156),
+//                Y = Application.GetRealWidth(101),
+//                Width = Application.GetRealWidth(16),
+//                Height = Application.GetRealWidth(16),
+//                UnSelectedImagePath = "FunctionIcon/EnvirSensor/LowerLimit.png",
+//            };
+//            topWeatherView.AddChidren(btnTempLowerLimit);
 
-            var btnTempLowerLimitText = new Button()
-            {
-                X = btnTempLowerLimit.Right,
-                Y = Application.GetRealWidth(101),
-                Width = Application.GetRealWidth(42),
-                Height = Application.GetRealWidth(20),
-                TextColor = CSS_Color.TextualColor,
-                TextAlignment = TextAlignment.CenterLeft,
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                Text = $"{MainPage.cityInfo.lowestTemperature}掳C",
-            };
-            topWeatherView.AddChidren(btnTempLowerLimitText);
+//            var btnTempLowerLimitText = new Button()
+//            {
+//                X = btnTempLowerLimit.Right,
+//                Y = Application.GetRealWidth(101),
+//                Width = Application.GetRealWidth(42),
+//                Height = Application.GetRealWidth(20),
+//                TextColor = CSS_Color.TextualColor,
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//                Text = $"{MainPage.cityInfo.lowestTemperature}掳C",
+//            };
+//            topWeatherView.AddChidren(btnTempLowerLimitText);
 
 
-            var btnValue = new Button()
-            {
-                X = Application.GetRealWidth(27),
-                Y = Application.GetRealWidth(119),
-                Width = Application.GetRealWidth(300),
-                Height = Application.GetRealWidth(34),
-                TextAlignment = TextAlignment.CenterLeft,
-                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                TextColor = CSS_Color.TextualColor,
-            };
-            topWeatherView.AddChidren(btnValue);
-            var valueText = Language.StringByID(StringId.EnvirSensorValueTip);
-            btnValue.Text = valueText.Replace("{0}", $"{MainPage.cityInfo.humidity}").Replace("{1}", $"{MainPage.cityInfo.pm25}").Replace("{2}", $"{MainPage.cityInfo.windLevel}");
-            #endregion
+//            var btnValue = new Button()
+//            {
+//                X = Application.GetRealWidth(27),
+//                Y = Application.GetRealWidth(119),
+//                Width = Application.GetRealWidth(300),
+//                Height = Application.GetRealWidth(34),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+//                TextColor = CSS_Color.TextualColor,
+//            };
+//            topWeatherView.AddChidren(btnValue);
+//            var valueText = Language.StringByID(StringId.EnvirSensorValueTip);
+//            btnValue.Text = valueText.Replace("{0}", $"{MainPage.cityInfo.humidity}").Replace("{1}", $"{MainPage.cityInfo.pm25}").Replace("{2}", $"{MainPage.cityInfo.windLevel}");
+//            #endregion
 
-            #region contentView
-            FrameLayout contentView = new FrameLayout()
-            {
-                Gravity = Gravity.CenterHorizontal,
-                Y = Application.GetRealWidth(239),
-                Height = Application.GetRealHeight(450),
-            };
-            bodyView.AddChidren(contentView);
+//            #region contentView
+//            FrameLayout contentView = new FrameLayout()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Y = Application.GetRealWidth(239),
+//                Height = Application.GetRealHeight(450),
+//            };
+//            bodyView.AddChidren(contentView);
 
-            #region 鎴块棿椤堕儴鍒囨崲鏄剧ず鍖哄煙
-            room = new Room() { roomName = Language.StringByID(StringId.All) };
-            btnFoorDownIcon = new Button()
-            {
-                Width = Application.GetMinRealAverage(16),
-                Height = Application.GetMinRealAverage(16),
-                X = Application.GetRealWidth(16),
-                Y = Application.GetRealHeight(18),
-                UnSelectedImagePath = "Public/DownIcon.png",
-            };
-            contentView.AddChidren(btnFoorDownIcon);
+//            #region 鎴块棿椤堕儴鍒囨崲鏄剧ず鍖哄煙
+//            room = new Room() { roomName = Language.StringByID(StringId.All) };
+//            btnFoorDownIcon = new Button()
+//            {
+//                Width = Application.GetMinRealAverage(16),
+//                Height = Application.GetMinRealAverage(16),
+//                X = Application.GetRealWidth(16),
+//                Y = Application.GetRealHeight(18),
+//                UnSelectedImagePath = "Public/DownIcon.png",
+//            };
+//            contentView.AddChidren(btnFoorDownIcon);
 
-            btnRoom = new Button()
-            {
-                X = btnFoorDownIcon.Right,
-                Y = Application.GetRealHeight(18),
-                Width = Application.GetRealWidth(200),
-                Height = Application.GetMinRealAverage(16),
-                TextColor = CSS_Color.FirstLevelTitleColor,
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                TextAlignment = TextAlignment.CenterLeft,
-                Text = room.roomName,
-            };
-            contentView.AddChidren(btnRoom);
+//            btnRoom = new Button()
+//            {
+//                X = btnFoorDownIcon.Right,
+//                Y = Application.GetRealHeight(18),
+//                Width = Application.GetRealWidth(200),
+//                Height = Application.GetMinRealAverage(16),
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//                TextAlignment = TextAlignment.CenterLeft,
+//                Text = room.roomName,
+//            };
+//            contentView.AddChidren(btnRoom);
 
-            btnRoomClickRow = new Button()
-            {
-                Height = Application.GetRealHeight(40),
-            };
-            contentView.AddChidren(btnRoomClickRow);
+//            btnRoomClickRow = new Button()
+//            {
+//                Height = Application.GetRealHeight(40),
+//            };
+//            contentView.AddChidren(btnRoomClickRow);
 
-            #endregion
-            sensorListContentView = new VerticalScrolViewLayout()
-            {
-                Gravity = Gravity.CenterHorizontal,
-                Y = Application.GetRealHeight(50),
-                Height = Application.GetRealHeight(400),
-                Radius = (uint)Application.GetRealWidth(12),
-                BorderColor = 0x00000000,
-                BorderWidth = 0,
-            };
-            contentView.AddChidren(sensorListContentView);
-            sensorListView = new FrameLayout();
-            sensorListContentView.AddChidren(sensorListView);
+//            #endregion
+//            sensorListContentView = new VerticalScrolViewLayout()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Y = Application.GetRealHeight(50),
+//                Height = Application.GetRealHeight(400),
+//                Radius = (uint)Application.GetRealWidth(12),
+//                BorderColor = 0x00000000,
+//                BorderWidth = 0,
+//            };
+//            contentView.AddChidren(sensorListContentView);
+//            sensorListView = new FrameLayout();
+//            sensorListContentView.AddChidren(sensorListView);
 
-            LoadSenesorList();
+//            LoadSenesorList();
 
 
 
-            #endregion
+//            #endregion
 
-            //LoadEventList();
-            LoadDialog_ChangeRoom();
+//            //LoadEventList();
+//            LoadDialog_ChangeRoom();
 
-            new TopViewDiv(bodyView, Language.StringByID(StringId.EnvironmentalScience)).LoadTopView();
+//            new TopViewDiv(bodyView, Language.StringByID(StringId.EnvironmentalScience)).LoadTopView();
 
-        }
+//        }
 
-        /// <summary>
-        /// 鍔犺浇浼犳劅鍣ㄥ垪琛�
-        /// </summary>
-        void LoadSenesorList()
-        {
-            sensorListView.RemoveAll();
-            sensorViewList.Clear();
+//        /// <summary>
+//        /// 鍔犺浇浼犳劅鍣ㄥ垪琛�
+//        /// </summary>
+//        void LoadSenesorList()
+//        {
+//            sensorListView.RemoveAll();
+//            sensorViewList.Clear();
 
-            sensorList = new Dictionary<string, List<Function>>();
-            int index = 0;
-            foreach (var sensor in FunctionList.List.GetEnvirSensorsList())
-            {
-                foreach (var sensorAttr in sensor.attributes)
-                {
-                    if (SPK.EnvironSpkList().Contains(sensorAttr.key) || sensorAttr.key == "value")
-                    {
-                        var flag = sensorAttr.key;
-                        if (flag == "value")
-                        {
-                            flag = sensor.spk.Replace("sensor.", "");
-                        }
-                        var newTemp = new Function()
-                        {
-                            name = sensor.name,
-                            sid = sensor.sid,
-                            deviceId = sensor.deviceId,
-                            roomIds = sensor.roomIds,
-                            spk = "sensor."+ flag,
-                            attributes = new List<FunctionAttributes> { new FunctionAttributes { key = "value", state = sensorAttr.state, curValue = sensorAttr.curValue }
-                            , new FunctionAttributes {key = "spk",state = sensorAttr.key,curValue = sensorAttr.key } }
-                        };
-                        //鍒嗙被鍔犲叆闆嗗悎
-                        if (sensorList.ContainsKey(flag))
-                        {
-                            sensorList[flag].Add(newTemp);
-                        }
-                        else
-                        {
-                            sensorList.Add(flag, new List<Function>() { newTemp });
-                        }
-                    }
-                }
+//            sensorList = new Dictionary<string, List<Function>>();
+//            int index = 0;
+//            foreach (var sensor in FunctionList.List.GetEnvirSensorsList())
+//            {
+//                foreach (var sensorAttr in sensor.attributes)
+//                {
+//                    if (SPK.EnvironSpkList().Contains(sensorAttr.key) || sensorAttr.key == "value")
+//                    {
+//                        var flag = sensorAttr.key;
+//                        if (flag == "value")
+//                        {
+//                            flag = sensor.spk.Replace("sensor.", "");
+//                        }
+//                        var newTemp = new Function()
+//                        {
+//                            name = sensor.name,
+//                            sid = sensor.sid,
+//                            deviceId = sensor.deviceId,
+//                            roomIds = sensor.roomIds,
+//                            spk = "sensor."+ flag,
+//                            attributes = new List<FunctionAttributes> { new FunctionAttributes { key = "value", state = sensorAttr.state, curValue = sensorAttr.curValue }
+//                            , new FunctionAttributes {key = "spk",state = sensorAttr.key,curValue = sensorAttr.key } }
+//                        };
+//                        //鍒嗙被鍔犲叆闆嗗悎
+//                        if (sensorList.ContainsKey(flag))
+//                        {
+//                            sensorList[flag].Add(newTemp);
+//                        }
+//                        else
+//                        {
+//                            sensorList.Add(flag, new List<Function>() { newTemp });
+//                        }
+//                    }
+//                }
 
-                new System.Threading.Thread(() =>
-                {
-                    Control.Ins.SendReadCommand(sensor);
-                })
-                { IsBackground = true }.Start();
-            }
+//                new System.Threading.Thread(() =>
+//                {
+//                    Control.Ins.SendReadCommand(sensor);
+//                })
+//                { IsBackground = true }.Start();
+//            }
 
 
-            foreach(var sensorAssemble in sensorList)
-            {
-                var showList = sensorAssemble.Value;
-                if(room.roomId != "")
-                {
-                    showList = sensorAssemble.Value.FindAll((obj) => obj.roomIds.Contains(room.roomId));
-                }
-                if (showList != null && showList.Count > 0)
-                {
-                    var sensorView = new SensorView(showList,index);
-                    sensorListView.AddChidren(sensorView);
-                    sensorViewList.Add(sensorView);
-                    sensorView.LoadView();
+//            foreach(var sensorAssemble in sensorList)
+//            {
+//                var showList = sensorAssemble.Value;
+//                if(room.roomId != "")
+//                {
+//                    showList = sensorAssemble.Value.FindAll((obj) => obj.roomIds.Contains(room.roomId));
+//                }
+//                if (showList != null && showList.Count > 0)
+//                {
+//                    var sensorView = new SensorView(showList,index);
+//                    sensorListView.AddChidren(sensorView);
+//                    sensorViewList.Add(sensorView);
+//                    sensorView.LoadView();
 
-                    index++;
-                }
-            }
-            sensorListView.Height = Application.GetRealWidth(124 * (index + 1) / 2);
-        }
+//                    index++;
+//                }
+//            }
+//            sensorListView.Height = Application.GetRealWidth(124 * (index + 1) / 2);
+//        }
 
 
-        /// <summary>
-        /// 鎴块棿鍒楄〃鐐瑰嚮浜嬩欢
-        /// </summary>
-        void LoadDialog_ChangeRoom()
-        {
-            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
-            {
-                var dialog = new Dialog();
-                var dialogBody = new FrameLayout();
-                dialog.AddChidren(dialogBody);
-                dialogBody.MouseUpEventHandler += (sender1, e1) =>
-                {
-                    dialog.Close();
-                };
+//        /// <summary>
+//        /// 鎴块棿鍒楄〃鐐瑰嚮浜嬩欢
+//        /// </summary>
+//        void LoadDialog_ChangeRoom()
+//        {
+//            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+//            {
+//                var dialog = new Dialog();
+//                var dialogBody = new FrameLayout();
+//                dialog.AddChidren(dialogBody);
+//                dialogBody.MouseUpEventHandler += (sender1, e1) =>
+//                {
+//                    dialog.Close();
+//                };
 
-                var dispalyView = new FrameLayout()
-                {
-                    X = Application.GetRealWidth(10),
-                    Y = Application.GetRealHeight(266),
-                    Width = Application.GetRealWidth(160),
-                    Height = Application.GetRealHeight(110),
-                    BackgroundImagePath = "PersonalCenter/HomeList1bg.png",
-                };
-                dialogBody.AddChidren(dispalyView);
+//                var dispalyView = new FrameLayout()
+//                {
+//                    X = Application.GetRealWidth(10),
+//                    Y = Application.GetRealHeight(266),
+//                    Width = Application.GetRealWidth(160),
+//                    Height = Application.GetRealHeight(110),
+//                    BackgroundImagePath = "PersonalCenter/HomeList1bg.png",
+//                };
+//                dialogBody.AddChidren(dispalyView);
 
-                var contentView = new VerticalScrolViewLayout()
-                {
-                    X = Application.GetRealWidth(8),
-                    Y = Application.GetRealHeight(15),
-                    Width = Application.GetRealWidth(150),
-                    Height = Application.GetRealHeight(45 * 2),
-                    ScrollEnabled = false
-                };
-                dispalyView.AddChidren(contentView);
+//                var contentView = new VerticalScrolViewLayout()
+//                {
+//                    X = Application.GetRealWidth(8),
+//                    Y = Application.GetRealHeight(15),
+//                    Width = Application.GetRealWidth(150),
+//                    Height = Application.GetRealHeight(45 * 2),
+//                    ScrollEnabled = false
+//                };
+//                dispalyView.AddChidren(contentView);
 
-                if (SpatialInfo.CurrentSpatial.RoomList.Count < 2)
-                {
-                }
-                else if (SpatialInfo.CurrentSpatial.RoomList.Count < 3)
-                {
-                    dispalyView = new FrameLayout()
-                    {
-                        X = Application.GetRealWidth(10),
-                        Y = Application.GetRealHeight(266),
-                        Width = Application.GetRealWidth(160),
-                        Height = Application.GetRealHeight(155),
-                        BackgroundImagePath = "PersonalCenter/HomeList2bg.png",
-                    };
-                    dialogBody.AddChidren(dispalyView);
+//                if (SpatialInfo.CurrentSpatial.RoomList.Count < 2)
+//                {
+//                }
+//                else if (SpatialInfo.CurrentSpatial.RoomList.Count < 3)
+//                {
+//                    dispalyView = new FrameLayout()
+//                    {
+//                        X = Application.GetRealWidth(10),
+//                        Y = Application.GetRealHeight(266),
+//                        Width = Application.GetRealWidth(160),
+//                        Height = Application.GetRealHeight(155),
+//                        BackgroundImagePath = "PersonalCenter/HomeList2bg.png",
+//                    };
+//                    dialogBody.AddChidren(dispalyView);
 
-                    contentView.Height = Application.GetRealHeight(45 * 3);
-                    dispalyView.AddChidren(contentView);
-                }
-                else if (SpatialInfo.CurrentSpatial.RoomList.Count < 4)
-                {
-                    dispalyView = new FrameLayout()
-                    {
-                        X = Application.GetRealWidth(10),
-                        Y = Application.GetRealHeight(266),
-                        Width = Application.GetRealWidth(160),
-                        Height = Application.GetRealHeight(200),
-                        BackgroundImagePath = "PersonalCenter/HomeList3bg.png",
-                    };
-                    dialogBody.AddChidren(dispalyView);
+//                    contentView.Height = Application.GetRealHeight(45 * 3);
+//                    dispalyView.AddChidren(contentView);
+//                }
+//                else if (SpatialInfo.CurrentSpatial.RoomList.Count < 4)
+//                {
+//                    dispalyView = new FrameLayout()
+//                    {
+//                        X = Application.GetRealWidth(10),
+//                        Y = Application.GetRealHeight(266),
+//                        Width = Application.GetRealWidth(160),
+//                        Height = Application.GetRealHeight(200),
+//                        BackgroundImagePath = "PersonalCenter/HomeList3bg.png",
+//                    };
+//                    dialogBody.AddChidren(dispalyView);
 
-                    contentView.Height = Application.GetRealHeight(45 * 4);
-                    dispalyView.AddChidren(contentView);
-                }
-                else
-                {
-                    dispalyView = new FrameLayout()
-                    {
-                        X = Application.GetRealWidth(10),
-                        Y = Application.GetRealHeight(266),
-                        Width = Application.GetRealWidth(160),
-                        Height = Application.GetRealHeight(245),
-                        BackgroundImagePath = "PersonalCenter/HomeList4bg.png",
-                    };
-                    dialogBody.AddChidren(dispalyView);
+//                    contentView.Height = Application.GetRealHeight(45 * 4);
+//                    dispalyView.AddChidren(contentView);
+//                }
+//                else
+//                {
+//                    dispalyView = new FrameLayout()
+//                    {
+//                        X = Application.GetRealWidth(10),
+//                        Y = Application.GetRealHeight(266),
+//                        Width = Application.GetRealWidth(160),
+//                        Height = Application.GetRealHeight(245),
+//                        BackgroundImagePath = "PersonalCenter/HomeList4bg.png",
+//                    };
+//                    dialogBody.AddChidren(dispalyView);
 
-                    contentView.Height = Application.GetRealHeight(45 * 5);
-                    contentView.ScrollEnabled = true;
-                    dispalyView.AddChidren(contentView);
-                }
+//                    contentView.Height = Application.GetRealHeight(45 * 5);
+//                    contentView.ScrollEnabled = true;
+//                    dispalyView.AddChidren(contentView);
+//                }
 
 
-                var showListRoom = new List<Room>();
-                showListRoom.Add(new Room() { roomName = Language.StringByID(StringId.All) });
-                showListRoom.AddRange(SpatialInfo.CurrentSpatial.RoomList);
+//                var showListRoom = new List<Room>();
+//                showListRoom.Add(new Room() { roomName = Language.StringByID(StringId.All) });
+//                showListRoom.AddRange(SpatialInfo.CurrentSpatial.RoomList);
 
-                foreach (var roomTemp in showListRoom)
-                {
-                    string roomName = roomTemp.roomName;
-                    var btnRoomName = new Button()
-                    {
-                        Gravity = Gravity.CenterHorizontal,
-                        Width = Application.GetRealWidth(112),
-                        Height = Application.GetRealHeight(44),
-                        TextAlignment = TextAlignment.CenterLeft,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        SelectedTextColor = CSS_Color.MainColor,
-                        Text = roomName,
-                        TextSize = CSS_FontSize.SubheadingFontSize,
-                        IsSelected = btnRoom.Text == roomName,
-                        IsMoreLines = true,
-                        Tag = roomName
-                    };
-                    contentView.AddChidren(btnRoomName);
+//                foreach (var roomTemp in showListRoom)
+//                {
+//                    string roomName = roomTemp.roomName;
+//                    var btnRoomName = new Button()
+//                    {
+//                        Gravity = Gravity.CenterHorizontal,
+//                        Width = Application.GetRealWidth(112),
+//                        Height = Application.GetRealHeight(44),
+//                        TextAlignment = TextAlignment.CenterLeft,
+//                        TextColor = CSS_Color.FirstLevelTitleColor,
+//                        SelectedTextColor = CSS_Color.MainColor,
+//                        Text = roomName,
+//                        TextSize = CSS_FontSize.SubheadingFontSize,
+//                        IsSelected = btnRoom.Text == roomName,
+//                        IsMoreLines = true,
+//                        Tag = roomName
+//                    };
+//                    contentView.AddChidren(btnRoomName);
 
-                    btnRoomName.MouseUpEventHandler += (senderH, en) =>
-                    {
-                        dialog.Close();
-                        btnRoom.Text = roomName;
-                        room = roomTemp;
-                        LoadSenesorList();
-                    };
-                }
+//                    btnRoomName.MouseUpEventHandler += (senderH, en) =>
+//                    {
+//                        dialog.Close();
+//                        btnRoom.Text = roomName;
+//                        room = roomTemp;
+//                        LoadSenesorList();
+//                    };
+//                }
 
-                dialog.Show();
-            };
+//                dialog.Show();
+//            };
 
-            btnRoomClickRow.MouseUpEventHandler = eventHandler;
-            //btnFoorDownIcon.MouseUpEventHandler = eventHandler;
-        }
+//            btnRoomClickRow.MouseUpEventHandler = eventHandler;
+//            //btnFoorDownIcon.MouseUpEventHandler = eventHandler;
+//        }
 
 
 
 
 
-        #region event
+//        #region event
 
-        public static void LoadEvent_UpdataStatus(Function updateTemp)
-        {
-            Application.RunOnMainThread(() =>
-            {
-                try
-                {
-                    if (bodyView != null)
-                    {
-                        foreach (var sensorAttr in updateTemp.attributes)
-                        {
-                            if (SPK.EnvironSpkList().Contains(sensorAttr.key) || sensorAttr.key == "value")
-                            {
-                                var flag = sensorAttr.key;
-                                if (flag == "value")
-                                {
-                                    flag = updateTemp.spk.Replace("sensor.", "");
-                                }
+//        public static void LoadEvent_UpdataStatus(Function updateTemp)
+//        {
+//            Application.RunOnMainThread(() =>
+//            {
+//                try
+//                {
+//                    if (bodyView != null)
+//                    {
+//                        foreach (var sensorAttr in updateTemp.attributes)
+//                        {
+//                            if (SPK.EnvironSpkList().Contains(sensorAttr.key) || sensorAttr.key == "value")
+//                            {
+//                                var flag = sensorAttr.key;
+//                                if (flag == "value")
+//                                {
+//                                    flag = updateTemp.spk.Replace("sensor.", "");
+//                                }
 
-                                foreach (var view in bodyView.sensorViewList)
-                                {
-                                    if (view.Tag.ToString() == flag)
-                                    {
-                                        view.UpdataStatus(flag,updateTemp.sid, sensorAttr.state);
-                                    }
-                                }
+//                                foreach (var view in bodyView.sensorViewList)
+//                                {
+//                                    if (view.Tag.ToString() == flag)
+//                                    {
+//                                        view.UpdataStatus(flag,updateTemp.sid, sensorAttr.state);
+//                                    }
+//                                }
 
-                            }
-                        }
+//                            }
+//                        }
 
-                    }
-                }
-                catch (Exception ex)
-                {
-                    MainPage.Log($"鏇存柊鐜浼犳劅鍣ㄧ晫闈㈠紓甯�:{ex.Message}");
-                }
-            });
-        }
+//                    }
+//                }
+//                catch (Exception ex)
+//                {
+//                    MainPage.Log($"鏇存柊鐜浼犳劅鍣ㄧ晫闈㈠紓甯�:{ex.Message}");
+//                }
+//            });
+//        }
 
-        void LoadEvent_ChangeWeatherIcon(FrameLayout view)
-        {
+//        void LoadEvent_ChangeWeatherIcon(FrameLayout view)
+//        {
 
-            switch (MainPage.cityInfo.weather)
-            {
-                case "鏅�":
-                case "Sunny":
-                case "鏅村ぉ":
-                case "澶╂櫞":
-                case "Clear":
-                case "澶ч儴鏅存湕":
-                case "Mostly Sunny":
-                case "鏅存檪澶氶洸":
-                case "闄藉厜鍏呮矝":
-                case "Mostly Clear":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/0.png";
-                    break;
-                case "澶氫簯":
-                case "Cloudy":
-                case "澶氶洸":
-                case "灏戜簯":
-                case "Partly Cloudy":
-                case "灏戦洸":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/1.png";
-                    break;
-                case "闃�":
-                case "Overcast":
-                case "闄板ぉ":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/2.png";
-                    break;
-                case "闃甸洦":
-                case "Showers":
-                case "闄i洦":
-                case "椹熼洦":
-                case "灞�閮ㄩ樀闆�":
-                case "Scattered Showers":
-                case "灞�鍦伴櫍闆�":
-                case "灞�閮ㄥ湴鍗�鎬ч闆�":
-                case "灏忛樀闆�":
-                case "Light Showers":
-                case "灏忛櫍闆�":
-                case "闆舵暎椹熼洦":
-                case "寮洪樀闆�":
-                case "Heavy Showers":
-                case "寮烽櫍闆�":
-                case "闁撲腑鏈夐闆�":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
-                    break;
-                case "闃甸洩":
-                case "Snow Showers":
-                case "闄i洩":
-                case "椹熼洩":
-                case "灏忛樀闆�":
-                case "Light Snow Showers":
-                case "灏忛櫍闆�":
-                case "闆舵暎椹熼洩":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
-                    break;
-                case "闆�":
-                case "Fog":
-                case "闇�":
-                case "钖勯湩":
-                case "鍐婚浘":
-                case "Freezing Fog":
-                case "鍑嶉湩":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/18.png";
-                    break;
-                case "娌欏皹鏆�":
-                case "Sandstorm":
-                case "娌欏〉鏆�":
-                case "寮烘矙灏樻毚":
-                case "Heavy Sandstorm":
-                case "寮锋矙濉垫毚":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/20.png";
-                    break;
-                case "娴皹":
-                case "Dust":
-                case "娴〉":
-                case "灏樺嵎椋�":
-                case "Dust Storm":
-                case "濉垫嵅棰�":
-                case "鎵矙":
-                case "Sand":
-                case "鎻氭矙":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/29.png";
-                    break;
-                case "闇�":
-                case "Haze":
-                case "鐓欓湠":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/45.png";
-                    break;
-                case "闆烽樀闆�":
-                case "Thundershower":
-                case "闆烽櫍闆�":
-                case "闆烽洦":
-                case "闆风數":
-                case "Lightning":
-                case "闆烽浕":
-                case "闆锋毚":
-                case "Thunderstorm":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/4.png";
-                    break;
-                case "闆烽樀闆ㄤ即鏈夊啺闆�":
-                case "Thundershower with Hail":
-                case "闆烽櫍闆ㄤ即鏈夊啺闆�":
-                case "闆烽洦浼存湁鍐伴浌":
-                case "鍐伴浌":
-                case "Hail":
-                case "鍐伴拡":
-                case "Needle Ice":
-                case "鍐伴嚌":
-                case "鍐扮矑":
-                case "Icy":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/5.png";
-                    break;
-                case "闆ㄥす闆�":
-                case "Sleet":
-                case "闆ㄥぞ闆�":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/6.png";
-                    break;
-                case "灏忛洦":
-                case "Light Rain":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
-                    break;
-                case "涓洦":
-                case "Rain":
-                case "灏忓埌涓洦":
-                case "闆�":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
-                    break;
-                case "澶ч洦":
-                case "Heavy Rain":
-                case "涓埌澶ч洦":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
-                    break;
-                case "鏆撮洦":
-                case "Rainstorm":
-                case "璞洦":
-                case "澶ф毚闆�":
-                case "Heavy Rainstorm":
-                case "澶ц豹闆�":
-                case "鐗瑰ぇ鏆撮洦":
-                case "Extreme Rainstorm":
-                case "瓒呭ぇ璞洦":
-                case "澶у埌鏆撮洦":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
-                    break;
-                case "灏忛洩":
-                case "Light Snow":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
-                    break;
-                case "闆�":
-                case "涓洩":
-                case "灏忓埌涓洩":
-                case "Snow":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
-                    break;
-                case "澶ч洩":
-                case "Heavy Snow":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
-                    break;
-                case "鏆撮洩":
-                case "Blizzard":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
-                    break;
-                case "鍐婚洦":
-                case "Freezing Rain":
-                case "鍑嶉洦":
-                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/6.png";
-                    break;
-            }
-        }
+//            switch (MainPage.cityInfo.weather)
+//            {
+//                case "鏅�":
+//                case "Sunny":
+//                case "鏅村ぉ":
+//                case "澶╂櫞":
+//                case "Clear":
+//                case "澶ч儴鏅存湕":
+//                case "Mostly Sunny":
+//                case "鏅存檪澶氶洸":
+//                case "闄藉厜鍏呮矝":
+//                case "Mostly Clear":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/0.png";
+//                    break;
+//                case "澶氫簯":
+//                case "Cloudy":
+//                case "澶氶洸":
+//                case "灏戜簯":
+//                case "Partly Cloudy":
+//                case "灏戦洸":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/1.png";
+//                    break;
+//                case "闃�":
+//                case "Overcast":
+//                case "闄板ぉ":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/2.png";
+//                    break;
+//                case "闃甸洦":
+//                case "Showers":
+//                case "闄i洦":
+//                case "椹熼洦":
+//                case "灞�閮ㄩ樀闆�":
+//                case "Scattered Showers":
+//                case "灞�鍦伴櫍闆�":
+//                case "灞�閮ㄥ湴鍗�鎬ч闆�":
+//                case "灏忛樀闆�":
+//                case "Light Showers":
+//                case "灏忛櫍闆�":
+//                case "闆舵暎椹熼洦":
+//                case "寮洪樀闆�":
+//                case "Heavy Showers":
+//                case "寮烽櫍闆�":
+//                case "闁撲腑鏈夐闆�":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
+//                    break;
+//                case "闃甸洩":
+//                case "Snow Showers":
+//                case "闄i洩":
+//                case "椹熼洩":
+//                case "灏忛樀闆�":
+//                case "Light Snow Showers":
+//                case "灏忛櫍闆�":
+//                case "闆舵暎椹熼洩":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
+//                    break;
+//                case "闆�":
+//                case "Fog":
+//                case "闇�":
+//                case "钖勯湩":
+//                case "鍐婚浘":
+//                case "Freezing Fog":
+//                case "鍑嶉湩":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/18.png";
+//                    break;
+//                case "娌欏皹鏆�":
+//                case "Sandstorm":
+//                case "娌欏〉鏆�":
+//                case "寮烘矙灏樻毚":
+//                case "Heavy Sandstorm":
+//                case "寮锋矙濉垫毚":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/20.png";
+//                    break;
+//                case "娴皹":
+//                case "Dust":
+//                case "娴〉":
+//                case "灏樺嵎椋�":
+//                case "Dust Storm":
+//                case "濉垫嵅棰�":
+//                case "鎵矙":
+//                case "Sand":
+//                case "鎻氭矙":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/29.png";
+//                    break;
+//                case "闇�":
+//                case "Haze":
+//                case "鐓欓湠":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/45.png";
+//                    break;
+//                case "闆烽樀闆�":
+//                case "Thundershower":
+//                case "闆烽櫍闆�":
+//                case "闆烽洦":
+//                case "闆风數":
+//                case "Lightning":
+//                case "闆烽浕":
+//                case "闆锋毚":
+//                case "Thunderstorm":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/4.png";
+//                    break;
+//                case "闆烽樀闆ㄤ即鏈夊啺闆�":
+//                case "Thundershower with Hail":
+//                case "闆烽櫍闆ㄤ即鏈夊啺闆�":
+//                case "闆烽洦浼存湁鍐伴浌":
+//                case "鍐伴浌":
+//                case "Hail":
+//                case "鍐伴拡":
+//                case "Needle Ice":
+//                case "鍐伴嚌":
+//                case "鍐扮矑":
+//                case "Icy":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/5.png";
+//                    break;
+//                case "闆ㄥす闆�":
+//                case "Sleet":
+//                case "闆ㄥぞ闆�":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/6.png";
+//                    break;
+//                case "灏忛洦":
+//                case "Light Rain":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
+//                    break;
+//                case "涓洦":
+//                case "Rain":
+//                case "灏忓埌涓洦":
+//                case "闆�":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
+//                    break;
+//                case "澶ч洦":
+//                case "Heavy Rain":
+//                case "涓埌澶ч洦":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
+//                    break;
+//                case "鏆撮洦":
+//                case "Rainstorm":
+//                case "璞洦":
+//                case "澶ф毚闆�":
+//                case "Heavy Rainstorm":
+//                case "澶ц豹闆�":
+//                case "鐗瑰ぇ鏆撮洦":
+//                case "Extreme Rainstorm":
+//                case "瓒呭ぇ璞洦":
+//                case "澶у埌鏆撮洦":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/3.png";
+//                    break;
+//                case "灏忛洩":
+//                case "Light Snow":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
+//                    break;
+//                case "闆�":
+//                case "涓洩":
+//                case "灏忓埌涓洩":
+//                case "Snow":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
+//                    break;
+//                case "澶ч洩":
+//                case "Heavy Snow":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
+//                    break;
+//                case "鏆撮洩":
+//                case "Blizzard":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/13.png";
+//                    break;
+//                case "鍐婚洦":
+//                case "Freezing Rain":
+//                case "鍑嶉洦":
+//                    view.BackgroundImagePath = "FunctionIcon/EnvirSensor/6.png";
+//                    break;
+//            }
+//        }
 
-        #endregion
-    }
+//        #endregion
+//    }
 
 
 
 
-    /// <summary>
-    /// 鍔犺浇浼犳劅鍣ㄥ垪琛�
-    /// </summary>
-    public class SensorView :FrameLayout
-    {
-        Button btnSensorValues;
-        Button btnLevel;
+//    /// <summary>
+//    /// 鍔犺浇浼犳劅鍣ㄥ垪琛�
+//    /// </summary>
+//    public class SensorView :FrameLayout
+//    {
+//        Button btnSensorValues;
+//        Button btnLevel;
 
-        List<Function> sensorList = new List<Function>();
-        string imagePath = "";
-        string iconPath = "";
-        string sensorSPK = "";
-        Sensor sensorTemp = new Sensor();
-        double assembleValues = 0.0;
+//        List<Function> sensorList = new List<Function>();
+//        string imagePath = "";
+//        string iconPath = "";
+//        string sensorSPK = "";
+//        Sensor sensorTemp = new Sensor();
+//        double assembleValues = 0.0;
 
-        public SensorView(List<Function> showList, int index)//,,string spk,double value)
-        {
-            sensorList = showList;
-            sensorSPK = showList[0].spk;
-            foreach (var s in showList)
-            {
-                assembleValues += Convert.ToDouble(s.GetAttrState("value").Replace(",", "."));
-            }
+//        public SensorView(List<Function> showList, int index)//,,string spk,double value)
+//        {
+//            sensorList = showList;
+//            sensorSPK = showList[0].spk;
+//            foreach (var s in showList)
+//            {
+//                assembleValues += Convert.ToDouble(s.GetAttrState("value").Replace(",", "."));
+//            }
 
 
-            this.X = Application.GetRealWidth(7);
-            this.Width = Application.GetRealWidth(182);
-            this.Height = Application.GetRealWidth(124);
-            this.Y = Application.GetRealWidth(124 * (index / 2));
-            this.Tag = sensorSPK;
+//            this.X = Application.GetRealWidth(7);
+//            this.Width = Application.GetRealWidth(182);
+//            this.Height = Application.GetRealWidth(124);
+//            this.Y = Application.GetRealWidth(124 * (index / 2));
+//            this.Tag = sensorSPK;
 
-            if (index % 2 != 0)
-            {
-                this.X = Application.GetRealWidth(189);
-            }
+//            if (index % 2 != 0)
+//            {
+//                this.X = Application.GetRealWidth(189);
+//            }
 
 
-            switch (sensorSPK)
-            {
-                case SPK.SensorCO2:
-                    imagePath = "FunctionIcon/EnvirSensor/Co2Bg.png";
-                    iconPath = "FunctionIcon/EnvirSensor/Co2Icon.png";
-                    break;
-                case SPK.SensorPm25:
-                    imagePath = "FunctionIcon/EnvirSensor/Pm25Bg.png";
-                    iconPath = "FunctionIcon/EnvirSensor/Pm25Icon.png";
-                    break;
-                case SPK.SensorTVOC:
-                    imagePath = "FunctionIcon/EnvirSensor/TvocBg.png";
-                    iconPath = "FunctionIcon/EnvirSensor/TvocIcon.png";
-                    break;
-                case SPK.SensorHumidity:
-                    imagePath = "FunctionIcon/EnvirSensor/HumidityBg.png";
-                    iconPath = "FunctionIcon/EnvirSensor/HumidityIcon.png";
-                    break;
-                case SPK.SensorTemperature:
-                    imagePath = "FunctionIcon/EnvirSensor/TempBg.png";
-                    iconPath = "FunctionIcon/EnvirSensor/TempIcon.png";
-                    break;
-                case SPK.SensorHcho:
-                    imagePath = "FunctionIcon/EnvirSensor/HchoBg.png";
-                    iconPath = "FunctionIcon/EnvirSensor/HchoIcon.png";
-                    break;
-            }
-        }
+//            switch (sensorSPK)
+//            {
+//                case SPK.SensorCO2:
+//                    imagePath = "FunctionIcon/EnvirSensor/Co2Bg.png";
+//                    iconPath = "FunctionIcon/EnvirSensor/Co2Icon.png";
+//                    break;
+//                case SPK.SensorPm25:
+//                    imagePath = "FunctionIcon/EnvirSensor/Pm25Bg.png";
+//                    iconPath = "FunctionIcon/EnvirSensor/Pm25Icon.png";
+//                    break;
+//                case SPK.SensorTVOC:
+//                    imagePath = "FunctionIcon/EnvirSensor/TvocBg.png";
+//                    iconPath = "FunctionIcon/EnvirSensor/TvocIcon.png";
+//                    break;
+//                case SPK.SensorHumidity:
+//                    imagePath = "FunctionIcon/EnvirSensor/HumidityBg.png";
+//                    iconPath = "FunctionIcon/EnvirSensor/HumidityIcon.png";
+//                    break;
+//                case SPK.SensorTemperature:
+//                    imagePath = "FunctionIcon/EnvirSensor/TempBg.png";
+//                    iconPath = "FunctionIcon/EnvirSensor/TempIcon.png";
+//                    break;
+//                case SPK.SensorHcho:
+//                    imagePath = "FunctionIcon/EnvirSensor/HchoBg.png";
+//                    iconPath = "FunctionIcon/EnvirSensor/HchoIcon.png";
+//                    break;
+//            }
+//        }
 
-        public void LoadView()
-        {
-            Function sensor = sensorList[0];
-            this.BackgroundImagePath = imagePath;
+//        public void LoadView()
+//        {
+//            Function sensor = sensorList[0];
+//            this.BackgroundImagePath = imagePath;
 
-            var btnIcon = new Button()
-            {
-                X = Application.GetRealWidth(23),
-                Y = Application.GetRealHeight(17),
-                Width = Application.GetRealWidth(32),
-                Height = Application.GetRealWidth(32),
-                UnSelectedImagePath = iconPath
-            };
-            this.AddChidren(btnIcon);
+//            var btnIcon = new Button()
+//            {
+//                X = Application.GetRealWidth(23),
+//                Y = Application.GetRealHeight(17),
+//                Width = Application.GetRealWidth(32),
+//                Height = Application.GetRealWidth(32),
+//                UnSelectedImagePath = iconPath
+//            };
+//            this.AddChidren(btnIcon);
 
-            btnIcon.MouseUpEventHandler = (sender, e) =>
-            {
-                #region 
-                var esp = new EnvironmentalSensorPage(sensor,sensorList);
-                MainPage.BasePageView.AddChidren(esp);
-                esp.LoadPage();
-                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                #endregion
-            };
+//            btnIcon.MouseUpEventHandler = (sender, e) =>
+//            {
+//                #region 
+//                var esp = new EnvironmentalSensorPage(sensor,sensorList);
+//                MainPage.BasePageView.AddChidren(esp);
+//                esp.LoadPage();
+//                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                #endregion
+//            };
 
-            var btnInfoIcon = new Button()
-            {
-                X = Application.GetRealWidth(139),
-                Y = Application.GetRealHeight(21),
-                Width = Application.GetRealWidth(24),
-                Height = Application.GetRealWidth(24),
-                UnSelectedImagePath = "FunctionIcon/EnvirSensor/InfoIcon.png",
-            };
-            this.AddChidren(btnInfoIcon);
-            btnInfoIcon.MouseUpEventHandler = (sender, e) =>
-            {
-                LoadInfo(sensorSPK);
-            };
+//            var btnInfoIcon = new Button()
+//            {
+//                X = Application.GetRealWidth(139),
+//                Y = Application.GetRealHeight(21),
+//                Width = Application.GetRealWidth(24),
+//                Height = Application.GetRealWidth(24),
+//                UnSelectedImagePath = "FunctionIcon/EnvirSensor/InfoIcon.png",
+//            };
+//            this.AddChidren(btnInfoIcon);
+//            btnInfoIcon.MouseUpEventHandler = (sender, e) =>
+//            {
+//                LoadInfo(sensorSPK);
+//            };
 
-            var curLevel = sensorTemp.GetCurLevel(sensorSPK, assembleValues);
-            var levelTextList = sensorTemp.GetLevelTextList(sensorSPK);
-            btnLevel = new Button()
-            {
-                X = Application.GetRealWidth(25),
-                Y = Application.GetRealWidth(59),
-                Width = Application.GetRealWidth(100),
-                Height = Application.GetRealWidth(32),
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = sensorTemp.GetLevelColorList(sensorSPK)[curLevel - 1],
-                TextSize = CSS_FontSize.SubheadingFontSize,
-                TextID = levelTextList[curLevel - 1],
-                Tag = "SensorLevel",
-            };
-            this.AddChidren(btnLevel);
+//            var curLevel = sensorTemp.GetCurLevel(sensorSPK, assembleValues);
+//            var levelTextList = sensorTemp.GetLevelTextList(sensor);
+//            btnLevel = new Button()
+//            {
+//                X = Application.GetRealWidth(25),
+//                Y = Application.GetRealWidth(59),
+//                Width = Application.GetRealWidth(100),
+//                Height = Application.GetRealWidth(32),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextColor = sensorTemp.GetLevelColorList(sensor)[curLevel - 1],
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//                Text = levelTextList[curLevel - 1],
+//                Tag = "SensorLevel",
+//            };
+//            this.AddChidren(btnLevel);
 
-            btnLevel.MouseUpEventHandler = (sender, e) =>
-            {
-                #region 
-                var esp = new EnvironmentalSensorPage(sensor,sensorList);
-                MainPage.BasePageView.AddChidren(esp);
-                esp.LoadPage();
-                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                #endregion
-            };
+//            btnLevel.MouseUpEventHandler = (sender, e) =>
+//            {
+//                #region 
+//                var esp = new EnvironmentalSensorPage(sensor,sensorList);
+//                MainPage.BasePageView.AddChidren(esp);
+//                esp.LoadPage();
+//                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                #endregion
+//            };
 
 
-            btnSensorValues = new Button()
-            {
-                X = Application.GetRealWidth(25),
-                Y = Application.GetRealWidth(83),
-                Width = Application.GetRealWidth(100),
-                Height = Application.GetRealWidth(27),
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = CSS_Color.PromptingColor1,
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                IsBold = true,
-                Text = assembleValues.ToString(),
-                Tag = "SensorValues"
-            };
-            this.AddChidren(btnSensorValues);
-            btnSensorValues.MouseUpEventHandler = (sender, e) =>
-            {
-                #region 
-                var esp = new EnvironmentalSensorPage(sensor,sensorList);
-                MainPage.BasePageView.AddChidren(esp);
-                esp.LoadPage();
-                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                #endregion
-            };
-        }
+//            btnSensorValues = new Button()
+//            {
+//                X = Application.GetRealWidth(25),
+//                Y = Application.GetRealWidth(83),
+//                Width = Application.GetRealWidth(100),
+//                Height = Application.GetRealWidth(27),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextColor = CSS_Color.PromptingColor1,
+//                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//                IsBold = true,
+//                Text = assembleValues.ToString(),
+//                Tag = "SensorValues"
+//            };
+//            this.AddChidren(btnSensorValues);
+//            btnSensorValues.MouseUpEventHandler = (sender, e) =>
+//            {
+//                #region 
+//                var esp = new EnvironmentalSensorPage(sensor,sensorList);
+//                MainPage.BasePageView.AddChidren(esp);
+//                esp.LoadPage();
+//                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                #endregion
+//            };
+//        }
 
 
-        /// <summary>
-        /// 鍔犺浇浼犳劅鍣ㄧ瓑绾х浉鍏充俊鎭�
-        /// </summary>
-        void LoadInfo(string sensorSPK)
-        {
-            var levelColorList = sensorTemp.GetLevelColorList(sensorSPK);
-            var levelTextList = sensorTemp.GetLevelTextList(sensorSPK);
-            Dialog dialog = new Dialog();
+//        /// <summary>
+//        /// 鍔犺浇浼犳劅鍣ㄧ瓑绾х浉鍏充俊鎭�
+//        /// </summary>
+//        void LoadInfo(string sensorSPK)
+//        {
+//            var levelColorList = sensorTemp.GetLevelColorList(sensorSPK);
+//            var levelTextList = sensorTemp.GetLevelTextList(sensorSPK);
+//            Dialog dialog = new Dialog();
 
-            FrameLayout dialogBodyView = new FrameLayout();
-            dialog.AddChidren(dialogBodyView);
-            dialogBodyView.MouseUpEventHandler = (sender, e) =>
-            {
-                dialog.Close();
-            };
-            VerticalScrolViewLayout infoView = new VerticalScrolViewLayout()
-            {
-                Gravity = Gravity.CenterHorizontal,
-                Y = Application.GetRealHeight(667 - 94 - (levelColorList.Count * 44) - 20),
-                Width = Application.GetRealWidth(343),
-                Height = Application.GetRealHeight(94 + (levelColorList.Count * 44) + levelColorList.Count),
-                Radius = (uint)Application.GetRealWidth(12),
-                BackgroundColor = CSS_Color.MainBackgroundColor,
-                Animate = Animate.DownToUp,
-                ScrollEnabled = false,
-                AnimateSpeed = 0.3f,
-            };
-            dialogBodyView.AddChidren(infoView);
+//            FrameLayout dialogBodyView = new FrameLayout();
+//            dialog.AddChidren(dialogBodyView);
+//            dialogBodyView.MouseUpEventHandler = (sender, e) =>
+//            {
+//                dialog.Close();
+//            };
+//            VerticalScrolViewLayout infoView = new VerticalScrolViewLayout()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Y = Application.GetRealHeight(667 - 94 - (levelColorList.Count * 44) - 20),
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(94 + (levelColorList.Count * 44) + levelColorList.Count),
+//                Radius = (uint)Application.GetRealWidth(12),
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Animate = Animate.DownToUp,
+//                ScrollEnabled = false,
+//                AnimateSpeed = 0.3f,
+//            };
+//            dialogBodyView.AddChidren(infoView);
 
-            Button btnTitle = new Button()
-            {
-                Height = Application.GetRealHeight(50),
-                TextColor = CSS_Color.FirstLevelTitleColor,
-                IsBold = true,
-                TextSize = CSS_FontSize.SubheadingFontSize,
-                TextAlignment = TextAlignment.Center,
-            };
-            infoView.AddChidren(btnTitle);
+//            Button btnTitle = new Button()
+//            {
+//                Height = Application.GetRealHeight(50),
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                IsBold = true,
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//                TextAlignment = TextAlignment.Center,
+//            };
+//            infoView.AddChidren(btnTitle);
 
-            switch (sensorSPK)
-            {
-                case SPK.SensorPm25:
-                    btnTitle.Text = "PM2.5(ug/m虏)";
-                    break;
-                case SPK.SensorTemperature:
-                    btnTitle.Text = Language.StringByID(StringId.Temp) + "(掳C)";
-                    break;
-                case SPK.SensorTVOC:
-                    btnTitle.Text = "TVOC(PPB)";
-                    break;
-                case SPK.SensorCO2:
-                    btnTitle.Text = "CO2(PPM)";
-                    break;
-                case SPK.SensorHumidity:
-                    btnTitle.Text = Language.StringByID(StringId.Humidity) + "(%)";
-                    break;
-                case SPK.SensorHcho:
-                    btnTitle.Text = Language.StringByID(StringId.Formaldehyde) + "(mg/m3)";
-                    break;
-            }
+//            switch (sensorSPK)
+//            {
+//                case SPK.SensorPm25:
+//                    btnTitle.Text = "PM2.5(ug/m虏)";
+//                    break;
+//                case SPK.SensorTemperature:
+//                    btnTitle.Text = Language.StringByID(StringId.Temp) + "(掳C)";
+//                    break;
+//                case SPK.SensorTVOC:
+//                    btnTitle.Text = "TVOC(PPB)";
+//                    break;
+//                case SPK.SensorCO2:
+//                    btnTitle.Text = "CO2(PPM)";
+//                    break;
+//                case SPK.SensorHumidity:
+//                    btnTitle.Text = Language.StringByID(StringId.Humidity) + "(%)";
+//                    break;
+//                case SPK.SensorHcho:
+//                    btnTitle.Text = Language.StringByID(StringId.Formaldehyde) + "(mg/m3)";
+//                    break;
+//            }
 
-            FrameLayout subTitleView = new FrameLayout()
-            {
-                Height = Application.GetRealHeight(44),
-            };
-            infoView.AddChidren(subTitleView);
+//            FrameLayout subTitleView = new FrameLayout()
+//            {
+//                Height = Application.GetRealHeight(44),
+//            };
+//            infoView.AddChidren(subTitleView);
 
-            subTitleView.AddChidren(new Button()
-            {
-                X = Application.GetRealWidth(20),
-                Width = Application.GetRealWidth(100),
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = CSS_Color.FirstLevelTitleColor,
-                TextSize = CSS_FontSize.TextFontSize,
-                IsBold = true,
-                TextID = StringId.IntervalValue,
-            });
+//            subTitleView.AddChidren(new Button()
+//            {
+//                X = Application.GetRealWidth(20),
+//                Width = Application.GetRealWidth(100),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                IsBold = true,
+//                TextID = StringId.IntervalValue,
+//            });
 
-            subTitleView.AddChidren(new Button()
-            {
-                Gravity = Gravity.CenterHorizontal,
-                Width = Application.GetRealWidth(100),
-                TextAlignment = TextAlignment.Center,
-                TextColor = CSS_Color.FirstLevelTitleColor,
-                TextSize = CSS_FontSize.TextFontSize,
-                IsBold = true,
-                TextID = StringId.LevelSensor,
-            });
+//            subTitleView.AddChidren(new Button()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(100),
+//                TextAlignment = TextAlignment.Center,
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                IsBold = true,
+//                TextID = StringId.LevelSensor,
+//            });
 
-            subTitleView.AddChidren(new Button()
-            {
-                X = Application.GetRealWidth(223),
-                Width = Application.GetRealWidth(100),
-                TextAlignment = TextAlignment.CenterRight,
-                TextColor = CSS_Color.FirstLevelTitleColor,
-                TextSize = CSS_FontSize.TextFontSize,
-                IsBold = true,
-                TextID = StringId.ColorValue,
-            });
-            for (int index = 0; index < levelTextList.Count; index++)
-            {
-                infoView.AddChidren(new Button()
-                {
-                    Gravity = Gravity.CenterHorizontal,
-                    Width = Application.GetRealWidth(303),
-                    Height = Application.GetRealWidth(1),
-                    BackgroundColor = CSS_Color.DividingLineColor,
-                });
+//            subTitleView.AddChidren(new Button()
+//            {
+//                X = Application.GetRealWidth(223),
+//                Width = Application.GetRealWidth(100),
+//                TextAlignment = TextAlignment.CenterRight,
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                IsBold = true,
+//                TextID = StringId.ColorValue,
+//            });
+//            for (int index = 0; index < levelTextList.Count; index++)
+//            {
+//                infoView.AddChidren(new Button()
+//                {
+//                    Gravity = Gravity.CenterHorizontal,
+//                    Width = Application.GetRealWidth(303),
+//                    Height = Application.GetRealWidth(1),
+//                    BackgroundColor = CSS_Color.DividingLineColor,
+//                });
 
-                FrameLayout subInfoView = new FrameLayout()
-                {
-                    Height = Application.GetRealHeight(44),
-                };
-                infoView.AddChidren(subInfoView);
+//                FrameLayout subInfoView = new FrameLayout()
+//                {
+//                    Height = Application.GetRealHeight(44),
+//                };
+//                infoView.AddChidren(subInfoView);
 
-                subInfoView.AddChidren(new Button()
-                {
-                    X = Application.GetRealWidth(20),
-                    Width = Application.GetRealWidth(100),
-                    TextAlignment = TextAlignment.CenterLeft,
-                    TextColor = CSS_Color.FirstLevelTitleColor,
-                    TextSize = CSS_FontSize.TextFontSize,
-                    IsBold = true,
-                    Text = sensorTemp.GetIntervalValue(sensorSPK)[index]
-                });
+//                subInfoView.AddChidren(new Button()
+//                {
+//                    X = Application.GetRealWidth(20),
+//                    Width = Application.GetRealWidth(100),
+//                    TextAlignment = TextAlignment.CenterLeft,
+//                    TextColor = CSS_Color.FirstLevelTitleColor,
+//                    TextSize = CSS_FontSize.TextFontSize,
+//                    IsBold = true,
+//                    Text = sensorTemp.GetIntervalValue(sensorSPK)[index]
+//                });
 
-                subInfoView.AddChidren(new Button()
-                {
-                    Gravity = Gravity.CenterHorizontal,
-                    Width = Application.GetRealWidth(100),
-                    TextAlignment = TextAlignment.Center,
-                    TextColor = CSS_Color.FirstLevelTitleColor,
-                    TextSize = CSS_FontSize.TextFontSize,
-                    IsBold = true,
-                    TextID = levelTextList[index]
-                });
+//                subInfoView.AddChidren(new Button()
+//                {
+//                    Gravity = Gravity.CenterHorizontal,
+//                    Width = Application.GetRealWidth(100),
+//                    TextAlignment = TextAlignment.Center,
+//                    TextColor = CSS_Color.FirstLevelTitleColor,
+//                    TextSize = CSS_FontSize.TextFontSize,
+//                    IsBold = true,
+//                    TextID = levelTextList[index]
+//                });
 
-                subInfoView.AddChidren(new Button()
-                {
-                    X = Application.GetRealWidth(285),
-                    Gravity = Gravity.CenterVertical,
-                    Width = Application.GetRealWidth(38),
-                    Height = Application.GetRealHeight(18),
-                    Radius = (uint)Application.GetRealWidth(4),
-                    BackgroundColor = levelColorList[index]
-                });
-            }
+//                subInfoView.AddChidren(new Button()
+//                {
+//                    X = Application.GetRealWidth(285),
+//                    Gravity = Gravity.CenterVertical,
+//                    Width = Application.GetRealWidth(38),
+//                    Height = Application.GetRealHeight(18),
+//                    Radius = (uint)Application.GetRealWidth(4),
+//                    BackgroundColor = levelColorList[index]
+//                });
+//            }
 
 
 
 
-            dialog.Show();
-        }
+//            dialog.Show();
+//        }
 
 
 
-        public void calculateAverage()
-        {
-            assembleValues = 0;
-            foreach (var s in sensorList)
-            {
-                assembleValues += Convert.ToDouble(s.GetAttrState("value").Replace(",", "."));
-            }
-        }
+//        public void calculateAverage()
+//        {
+//            assembleValues = 0;
+//            foreach (var s in sensorList)
+//            {
+//                assembleValues += Convert.ToDouble(s.GetAttrState("value").Replace(",", "."));
+//            }
+//        }
 
-        /// <summary>
-        /// 鏇存柊鐘舵��
-        /// </summary>
-        /// <param name="updateTemp"></param>
-        public void UpdataStatus(string spk ,string sid,string value)
-        {
-            try
-            {
-                if (spk == sensorSPK)
-                {
-                    var temp = sensorList.Find((obj) => obj.sid == sid);
-                    if(temp!= null)
-                    {
-                        temp.SetAttrState("value", value);
-                    }
-                    calculateAverage();
+//        /// <summary>
+//        /// 鏇存柊鐘舵��
+//        /// </summary>
+//        /// <param name="updateTemp"></param>
+//        public void UpdataStatus(string spk ,string sid,string value)
+//        {
+//            try
+//            {
+//                if (spk == sensorSPK)
+//                {
+//                    var temp = sensorList.Find((obj) => obj.sid == sid);
+//                    if(temp!= null)
+//                    {
+//                        temp.SetAttrState("value", value);
+//                    }
+//                    calculateAverage();
 
 
-                    btnSensorValues.Text = assembleValues.ToString();
+//                    btnSensorValues.Text = assembleValues.ToString();
 
-                    var curLevel = sensorTemp.GetCurLevel(sensorSPK, assembleValues);
+//                    var curLevel = sensorTemp.GetCurLevel(sensorSPK, assembleValues);
 
-                    btnLevel.TextID = sensorTemp.GetLevelTextList(sensorSPK)[curLevel- 1];
-                    btnLevel.TextColor = sensorTemp.GetLevelColorList(sensorSPK)[curLevel - 1];
-                }
-            }
-            catch (Exception ex)
-            {
-                MainPage.Log($"鏇存柊鐜浼犳劅鍣ㄧ晫闈㈠紓甯�:{ex.Message}");
-            }
-        }
+//                    btnLevel.TextID = sensorTemp.GetLevelTextList(sensorSPK)[curLevel- 1];
+//                    btnLevel.TextColor = sensorTemp.GetLevelColorList(sensorSPK)[curLevel - 1];
+//                }
+//            }
+//            catch (Exception ex)
+//            {
+//                MainPage.Log($"鏇存柊鐜浼犳劅鍣ㄧ晫闈㈠紓甯�:{ex.Message}");
+//            }
+//        }
 
-    }
+//    }
 
-}
+//}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs
index ea27379..d7acf79 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs
@@ -347,8 +347,8 @@
         /// </summary>
         void LoadSensorDiv(Function sensor,int index)
         {
-            var levelColorList = sensorTemp.GetLevelColorList(sensor.spk);
-            var levelTextList = sensorTemp.GetLevelTextList(sensor.spk);
+            var levelColorList = sensorTemp.GetLevelColorList(sensor);
+            var levelTextList = sensorTemp.GetLevelTextList(sensor);
             {
                 var sensorTag = sensor.spk + sensor.sid + sensor.deviceId;
                 FrameLayout sensorView = new FrameLayout()
@@ -438,9 +438,9 @@
                     Width = Application.GetRealWidth(100),
                     Height = Application.GetRealWidth(32),
                     TextAlignment = TextAlignment.CenterLeft,
-                    TextColor = sensorTemp.GetLevelColorList(sensor.spk)[sensorTemp.GetCurLevel(sensor) - 1],
+                    TextColor = sensorTemp.GetLevelColorList(sensor)[sensorTemp.GetCurLevel(sensor) - 1],
                     TextSize = CSS_FontSize.SubheadingFontSize,
-                    TextID = levelTextList[sensorTemp.GetCurLevel(sensor) - 1],
+                    Text = levelTextList[sensorTemp.GetCurLevel(sensor) - 1],
                     Tag = "SensorLevel",
                 };
                 sensorView.AddChidren(btnLevel);
@@ -488,8 +488,8 @@
         /// </summary>
         void LoadInfo(Function sensor)
         {
-            var levelColorList = sensorTemp.GetLevelColorList(sensor.spk);
-            var levelTextList = sensorTemp.GetLevelTextList(sensor.spk);
+            var levelColorList = sensorTemp.GetLevelColorList(sensor);
+            var levelTextList = sensorTemp.GetLevelTextList(sensor);
             Dialog dialog = new Dialog();
 
             FrameLayout dialogBodyView = new FrameLayout();
@@ -525,22 +525,22 @@
             switch (sensor.spk)
             {
                 case SPK.SensorPm25:
-                    btnTitle.Text = "PM2.5(ug/m虏)";
+                    btnTitle.Text = $"PM2.5({sensorTemp.Unit(sensor)})";
                     break;
                 case SPK.SensorTemperature:
-                    btnTitle.Text = Language.StringByID(StringId.Temp) + "(掳C)";
+                    btnTitle.Text = Language.StringByID(StringId.Temp) + $"({sensorTemp.Unit(sensor)})";
                     break;
                 case SPK.SensorTVOC:
-                    btnTitle.Text = "TVOC(PPB)";
+                    btnTitle.Text = $"TVOC({sensorTemp.Unit(sensor)})";
                     break;
                 case SPK.SensorCO2:
-                    btnTitle.Text = "CO2(PPM)";
+                    btnTitle.Text = $"CO2({sensorTemp.Unit(sensor)})";
                     break;
                 case SPK.SensorHumidity:
-                    btnTitle.Text = Language.StringByID(StringId.Humidity) + "(%)";
+                    btnTitle.Text = Language.StringByID(StringId.Humidity) + $"({sensorTemp.Unit(sensor)})";
                     break;
                 case SPK.SensorHcho:
-                    btnTitle.Text = Language.StringByID(StringId.Formaldehyde) +"(mg/m3)";
+                    btnTitle.Text = Language.StringByID(StringId.Formaldehyde) +$"({sensorTemp.Unit(sensor)})";
                     break;
             }
 
@@ -606,7 +606,7 @@
                     TextColor = CSS_Color.FirstLevelTitleColor,
                     TextSize = CSS_FontSize.TextFontSize,
                     IsBold = true,
-                    Text = sensorTemp.GetIntervalValue(sensor.spk)[index]
+                    Text = sensorTemp.GetIntervalValue(sensor)[index]
                 });
 
                 subInfoView.AddChidren(new Button()
@@ -617,7 +617,7 @@
                     TextColor = CSS_Color.FirstLevelTitleColor,
                     TextSize = CSS_FontSize.TextFontSize,
                     IsBold = true,
-                    TextID = levelTextList[index]
+                    Text = levelTextList[index]
                 });
 
                 subInfoView.AddChidren(new Button()
@@ -865,16 +865,16 @@
                                             }
                                             else if (tag == "SensorLevel")
                                             {
-                                                (btn as Button).TextID = bodyView.sensorTemp.GetLevelTextList(updateTemp.spk)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
-                                                (btn as Button).TextColor = bodyView.sensorTemp.GetLevelColorList(updateTemp.spk)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
+                                                (btn as Button).Text = bodyView.sensorTemp.GetLevelTextList(updateTemp)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
+                                                (btn as Button).TextColor = bodyView.sensorTemp.GetLevelColorList(updateTemp)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
                                             }
                                         }
                                     }
                                     else if (btn.GetType() == typeof(ArcSeekBar))
                                     {
-                                        (btn as ArcSeekBar).ProgressBarColor = bodyView.sensorTemp.GetLevelColorList(updateTemp.spk)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
+                                        (btn as ArcSeekBar).ProgressBarColor = bodyView.sensorTemp.GetLevelColorList(updateTemp)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
 
-                                        (btn as ArcSeekBar).Progress = (96 / bodyView.sensorTemp.GetLevelColorList(updateTemp.spk).Count) * bodyView.sensorTemp.GetCurLevel(updateTemp);
+                                        (btn as ArcSeekBar).Progress = (96 / bodyView.sensorTemp.GetLevelColorList(updateTemp).Count) * bodyView.sensorTemp.GetCurLevel(updateTemp);
                                     }
                                 }
                             }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
index 698b5aa..0505d7d 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
@@ -149,383 +149,383 @@
             historyDataView.AddChidren(myEchartsView);
 
             #region 搴曢儴绛夌骇鎻愮ず
-            HorizontalScrolViewLayout tipValuesView = new HorizontalScrolViewLayout()
-            {
-                Gravity = Gravity.CenterHorizontal,
-                Y = Application.GetRealWidth(348),
-                Width = Application.GetRealWidth(303),
-                Height = Application.GetRealHeight(30),
-            };
-            diagramView.AddChidren(tipValuesView);
+            //HorizontalScrolViewLayout tipValuesView = new HorizontalScrolViewLayout()
+            //{
+            //    Gravity = Gravity.CenterHorizontal,
+            //    Y = Application.GetRealWidth(348),
+            //    Width = Application.GetRealWidth(303),
+            //    Height = Application.GetRealHeight(30),
+            //};
+            //diagramView.AddChidren(tipValuesView);
 
-            Button btnColorTip = new Button()
-            {
-                Gravity = Gravity.CenterHorizontal,
-                Y = tipValuesView.Bottom,
-                Width = Application.GetRealWidth(303),
-                Height = Application.GetRealHeight(7),
-                UnSelectedImagePath = "FunctionIcon/EnvironmentalScience/SensorColorTipBg.png",
-            };
-            diagramView.AddChidren(btnColorTip);
+            //Button btnColorTip = new Button()
+            //{
+            //    Gravity = Gravity.CenterHorizontal,
+            //    Y = tipValuesView.Bottom,
+            //    Width = Application.GetRealWidth(303),
+            //    Height = Application.GetRealHeight(7),
+            //    UnSelectedImagePath = "FunctionIcon/EnvironmentalScience/SensorColorTipBg.png",
+            //};
+            //diagramView.AddChidren(btnColorTip);
 
-            HorizontalScrolViewLayout tipTextView = new HorizontalScrolViewLayout()
-            {
-                Gravity = Gravity.CenterHorizontal,
-                Y = btnColorTip.Bottom,
-                Width = Application.GetRealWidth(303),
-                Height = Application.GetRealHeight(30),
-            };
-            diagramView.AddChidren(tipTextView);
+            //HorizontalScrolViewLayout tipTextView = new HorizontalScrolViewLayout()
+            //{
+            //    Gravity = Gravity.CenterHorizontal,
+            //    Y = btnColorTip.Bottom,
+            //    Width = Application.GetRealWidth(303),
+            //    Height = Application.GetRealHeight(30),
+            //};
+            //diagramView.AddChidren(tipTextView);
 
-            switch (function.spk)
-            {
-                case SPK.SensorPm25:
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        Text = "35",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        Text = "75",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        Text = "115",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.Great,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.Good,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.MildPollution,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.HeavyPollution,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    break;
-                //case SPK.SensorPm25:
-                //_intervalValue.Add("0 ~ 35");
-                //_intervalValue.Add("36 ~ 75");
-                //_intervalValue.Add("76 ~ 115");
-                //_intervalValue.Add("115 ~");
-                //_levelTextList.Add(StringId.Great);
-                //_levelTextList.Add(StringId.Good);
-                //_levelTextList.Add(StringId.MildPollution);
-                //_levelTextList.Add(StringId.HeavyPollution);
-                //break;
-                case SPK.SensorCO2:
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        Text = "1000",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        Text = "2000",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        Text = "5000",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.SensorReferenceTipCO2Level1,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.SensorReferenceTipCO2Level2,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.SensorReferenceTipCO2Level3,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.SensorReferenceTipCO2Level4,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    break;
-                case SPK.SensorTemperature:
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(50),
-                        Text = "18掳C",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(50),
-                        Text = "20掳C",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(50),
-                        Text = "25掳C",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(50),
-                        Text = "27掳C",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(50),
-                        Text = "30掳C",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(50),
-                        Text = "33掳C",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    //_intervalValue.Add("~ 18掳C");
-                    //_intervalValue.Add("18 ~ 20掳C");
-                    //_intervalValue.Add("20 ~ 25掳C");
-                    //_intervalValue.Add("25 ~ 27掳C");
-                    //_intervalValue.Add("27 ~ 30掳C");
-                    //_intervalValue.Add("30 ~ 33掳C");
-                    //_intervalValue.Add("33掳C ~");
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(43),
-                        TextID = StringId.ExtremelyCold,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(43),
-                        TextID = StringId.SlightlyCold,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(43),
-                        TextID = StringId.Cold,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(43),
-                        TextID = StringId.Comfortable,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(43),
-                        TextID = StringId.TepidFever,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(43),
-                        TextID = StringId.Heat_SensorTip,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(43),
-                        TextID = StringId.ExtremeHeat,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    //_levelTextList.Add(StringId.ExtremelyCold);
-                    //_levelTextList.Add(StringId.);
-                    //_levelTextList.Add(StringId.);
-                    //_levelTextList.Add(StringId.);
-                    //_levelTextList.Add(StringId.);
-                    //_levelTextList.Add(StringId.);
-                    //_levelTextList.Add(StringId.ExtremeHeat);
-                    break;
-                case SPK.SensorTVOC:
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        Text = "0.6",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        Text = "2",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        Text = "5",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.SensorReferenceTVOCTipLevel1,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.SensorReferenceTVOCTipLevel2,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.SensorReferenceTVOCTipLevel3,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(75),
-                        TextID = StringId.SensorReferenceTVOCTipLevel4,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    break;
-                case SPK.SensorHumidity:
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(151),
-                        Text = "40%",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipValuesView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(151),
-                        Text = "70%",
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        TextID = StringId.SensorReferenceHumidityTipLevel1,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        TextID = StringId.SensorReferenceHumidityTipLevel2,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    tipTextView.AddChidren(new Button()
-                    {
-                        Width = Application.GetRealWidth(101),
-                        TextID = StringId.SensorReferenceHumidityTipLevel3,
-                        TextAlignment = TextAlignment.Center,
-                        TextColor = CSS_Color.FirstLevelTitleColor,
-                        TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
-                    });
-                    break;
-            }
+            //switch (function.spk)
+            //{
+            //    case SPK.SensorPm25:
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            Text = "35",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            Text = "75",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            Text = "115",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.Great,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.Good,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.MildPollution,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.HeavyPollution,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        break;
+            //    //case SPK.SensorPm25:
+            //    //_intervalValue.Add("0 ~ 35");
+            //    //_intervalValue.Add("36 ~ 75");
+            //    //_intervalValue.Add("76 ~ 115");
+            //    //_intervalValue.Add("115 ~");
+            //    //_levelTextList.Add(StringId.Great);
+            //    //_levelTextList.Add(StringId.Good);
+            //    //_levelTextList.Add(StringId.MildPollution);
+            //    //_levelTextList.Add(StringId.HeavyPollution);
+            //    //break;
+            //    case SPK.SensorCO2:
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            Text = "1000",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            Text = "2000",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            Text = "5000",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.SensorReferenceTipCO2Level1,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.SensorReferenceTipCO2Level2,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.SensorReferenceTipCO2Level3,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.SensorReferenceTipCO2Level4,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        break;
+            //    case SPK.SensorTemperature:
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(50),
+            //            Text = "18掳C",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(50),
+            //            Text = "20掳C",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(50),
+            //            Text = "25掳C",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(50),
+            //            Text = "27掳C",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(50),
+            //            Text = "30掳C",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(50),
+            //            Text = "33掳C",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        //_intervalValue.Add("~ 18掳C");
+            //        //_intervalValue.Add("18 ~ 20掳C");
+            //        //_intervalValue.Add("20 ~ 25掳C");
+            //        //_intervalValue.Add("25 ~ 27掳C");
+            //        //_intervalValue.Add("27 ~ 30掳C");
+            //        //_intervalValue.Add("30 ~ 33掳C");
+            //        //_intervalValue.Add("33掳C ~");
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(43),
+            //            TextID = StringId.ExtremelyCold,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(43),
+            //            TextID = StringId.SlightlyCold,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(43),
+            //            TextID = StringId.Cold,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(43),
+            //            TextID = StringId.Comfortable,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(43),
+            //            TextID = StringId.TepidFever,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(43),
+            //            TextID = StringId.Heat_SensorTip,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(43),
+            //            TextID = StringId.ExtremeHeat,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        //_levelTextList.Add(StringId.ExtremelyCold);
+            //        //_levelTextList.Add(StringId.);
+            //        //_levelTextList.Add(StringId.);
+            //        //_levelTextList.Add(StringId.);
+            //        //_levelTextList.Add(StringId.);
+            //        //_levelTextList.Add(StringId.);
+            //        //_levelTextList.Add(StringId.ExtremeHeat);
+            //        break;
+            //    case SPK.SensorTVOC:
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            Text = "0.6",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            Text = "2",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            Text = "5",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.SensorReferenceTVOCTipLevel1,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.SensorReferenceTVOCTipLevel2,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.SensorReferenceTVOCTipLevel3,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(75),
+            //            TextID = StringId.SensorReferenceTVOCTipLevel4,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        break;
+            //    case SPK.SensorHumidity:
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(151),
+            //            Text = "40%",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipValuesView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(151),
+            //            Text = "70%",
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            TextID = StringId.SensorReferenceHumidityTipLevel1,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            TextID = StringId.SensorReferenceHumidityTipLevel2,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        tipTextView.AddChidren(new Button()
+            //        {
+            //            Width = Application.GetRealWidth(101),
+            //            TextID = StringId.SensorReferenceHumidityTipLevel3,
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.FirstLevelTitleColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            //        });
+            //        break;
+            //}
 
             #endregion
 
@@ -659,6 +659,10 @@
             int index = 1;
             foreach (var tempSensor in sensorList)
             {
+                if (index > 5)
+                {
+                    break;
+                }
                 if (tempSensor.sid == function.sid)
                 {
                     continue;
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs
index 09d981d..fc62ae0 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/ColorTureLampPageBLL.cs
@@ -155,7 +155,11 @@
                 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());
-                d.Add(FunctionAttributeKey.FadeTime, function.GetAttrState(FunctionAttributeKey.FadeTime));
+                d.Add(FunctionAttributeKey.FadeTime, function.GetAttrState(FunctionAttributeKey.FadeTime));
+                if (dimmerBar.Progress > 0)
+                {
+                    d.Add(FunctionAttributeKey.OnOff, "on");
+                }
                 Control.Ins.SendWriteCommand(function, d);
                 //function.fadeTime = barFadeTime.Progress;
                 btnBrightnessText.Text = dimmerBar.Progress + "%";
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
index 400c887..3205232 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/DimmerPageBLL.cs
@@ -93,6 +93,7 @@
                 dimmerBar.OnStartTrackingTouchEvent = (sender, e) =>
                 {
                     onDimmerBar = true;
+                    dimmerBar.SetProgressBarColors(CSS_Color.AuxiliaryColor1, CSS_Color.AuxiliaryColor1);
                 };
                 dimmerBar.OnStopTrackingTouchEvent = (sender, e) =>
                 {
@@ -100,13 +101,17 @@
                     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());
+                    if(dimmerBar.Progress > 0)
+                    {
+                        d.Add(FunctionAttributeKey.OnOff, "on");
+                    }
                     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)
                 //{
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Panel/EnvironmentPanelPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Panel/EnvironmentPanelPage.cs
new file mode 100644
index 0000000..abb5549
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Panel/EnvironmentPanelPage.cs
@@ -0,0 +1,174 @@
+锘縰sing System;
+using HDL_ON.Entity;
+using HDL_ON.Stan;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI
+{
+    public class EnvironmentPanelPage : DeviceFunction4CardCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鍥炬爣
+        /// </summary>
+        private IconViewControl btnIcon = null;
+        /// <summary>
+        /// 鏂囨湰鎺т欢
+        /// </summary>
+        private NormalViewControl btnSuctionView = null;
+
+        Function acDevice;
+        Function fhDevice;
+        Function airFreshDevice;
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public override void InitFrameWhiteContent()
+        {
+            base.ShowColltionButton = false;
+            base.SetTitleText(Language.StringByID(StringId.SmartPanel));
+            foreach (var sid in device.targetSids)
+            {
+                var targetObj = FunctionList.List.Functions.Find((obj) => sid == obj.sid);
+                if (targetObj == null)
+                {
+                    continue;
+                }
+                if (SPK.AcSpkList().Contains(targetObj.spk))
+                {
+                    acDevice = targetObj;
+                }
+                else if (SPK.FhSpkList().Contains(targetObj.spk))
+                {
+                    fhDevice = targetObj;
+                }
+                else if (SPK.AirFreshSpkList().Contains(targetObj.spk))
+                {
+                    airFreshDevice = targetObj;
+                }
+            }
+
+            //娣诲姞绗簩绱㈠紩椤�
+            this.Add4Page();
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent1();
+            //鍒濆鍖栫浜屼釜绱㈠紩椤电殑鍐呭
+            this.InitFrameWhiteContent2();
+            this.InitFrameWhiteContent3();
+            //鍒锋柊鐣岄潰鐘舵��
+            //this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            //new System.Threading.Thread(() =>
+            //{
+            //    DriverLayer.Control.Ins.SendReadCommand(device);
+            //})
+            //{ IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent1()
+        {
+            btnIcon = new IconViewControl(198)
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(146),
+                UnSelectedImagePath = "FunctionIcon/Panel/PanelHelpNormalBgIcon.png",
+                SelectedImagePath = "FunctionIcon/Panel/PanelHelpAlarmBgIcon.png",
+            };
+            FrameWhiteCentet1.AddChidren(btnIcon);
+
+            btnSuctionView = new NormalViewControl(300, 84, true)
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = btnIcon.Bottom,
+                TextAlignment = TextAlignment.Center,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextColor = CSS_Color.MainColor,
+                SelectedTextColor = CSS_Color.AuxiliaryColor2,
+                //BackgroundColor = 0xFFFF0000
+            };
+            FrameWhiteCentet1.AddChidren(btnSuctionView);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫浜屼釜绱㈠紩椤电殑鍐呭
+        /// </summary>
+        private void InitFrameWhiteContent2()
+        {
+            var acPage = new UI2.FuntionControlView.Panel.AcContentView(acDevice);
+            FrameWhiteCentet2.AddChidren(acPage);
+            acPage.InitContent();
+        }
+
+        private void InitFrameWhiteContent3()
+        {
+            var fhPage = new FhContentView(fhDevice);
+            FrameWhiteCentet3.AddChidren(fhPage);
+            fhPage.InitContentView(true);
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧鐘舵�佸弽棣坃______________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佸弽棣�
+        /// </summary>
+        /// <param name="i_LocalDevice"></param>
+        public override void DeviceStatuPush(Function i_LocalDevice)
+        {
+            //涓嶆槸鍚屼竴涓笢瑗�
+            if (this.device.sid != i_LocalDevice.sid) { return; }
+
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+        }
+
+        #endregion
+
+        #region 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        private void RefreshFormStatu()
+        {
+            Application.RunOnMainThread(() => {
+                var temp = device.attributes.Find((sta) => sta.key == "alarm_status");
+                if (temp != null)
+                {
+                    if (temp.state == "alarm")
+                    {
+                        btnIcon.IsSelected = true;
+                        btnSuctionView.TextID = StringId.InAlarm;
+                        btnSuctionView.IsSelected = true;
+                    }
+                    else
+                    {
+                        btnIcon.IsSelected = false;
+                        btnSuctionView.TextID = StringId.SensorNormalState;
+                        btnSuctionView.IsSelected = false;
+                    }
+                }
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Panel/PanelHelpPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Panel/PanelHelpPage.cs
new file mode 100644
index 0000000..1350a45
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Panel/PanelHelpPage.cs
@@ -0,0 +1,142 @@
+锘縰sing System;
+using HDL_ON.Entity;
+using HDL_ON.Stan;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI.UI2.FuntionControlView.Panel
+{
+    public class PanelHelpPage : DeviceFunctionCardCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鍥炬爣
+        /// </summary>
+        private IconViewControl btnIcon = null;
+        /// <summary>
+        /// 鏂囨湰鎺т欢
+        /// </summary>
+        private NormalViewControl btnSuctionView = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public override void InitFrameWhiteContent()
+        {
+            base.ShowColltionButton = false;
+            base.SetTitleText(Language.StringByID(StringId.SmartPanel));
+
+            //娣诲姞绗簩绱㈠紩椤�
+            this.AddSecondPage();
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent1();
+            //鍒濆鍖栫浜屼釜绱㈠紩椤电殑鍐呭
+            this.InitFrameWhiteContent2();
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            new System.Threading.Thread(() =>
+            {
+                DriverLayer.Control.Ins.SendReadCommand(device);
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent1()
+        {
+            btnIcon = new IconViewControl(198)
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(146),
+                UnSelectedImagePath = "FunctionIcon/Panel/PanelHelpNormalBgIcon.png",
+                SelectedImagePath = "FunctionIcon/Panel/PanelHelpAlarmBgIcon.png",
+            };
+            FrameWhiteCentet1.AddChidren(btnIcon);
+
+            btnSuctionView = new NormalViewControl(300, 84, true)
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = btnIcon.Bottom,
+                TextAlignment = TextAlignment.Center,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextColor = CSS_Color.MainColor,
+                SelectedTextColor = CSS_Color.AuxiliaryColor2,
+                //BackgroundColor = 0xFFFF0000
+            };
+            FrameWhiteCentet1.AddChidren(btnSuctionView);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫浜屼釜绱㈠紩椤电殑鍐呭
+        /// </summary>
+        private void InitFrameWhiteContent2()
+        {
+            var paging = new ArmSensorHistroyPaging(device);
+            paging.InitFrame(FrameWhiteCentet2);
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧鐘舵�佸弽棣坃______________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佸弽棣�
+        /// </summary>
+        /// <param name="i_LocalDevice"></param>
+        public override void DeviceStatuPush(Function i_LocalDevice)
+        {
+            //涓嶆槸鍚屼竴涓笢瑗�
+            if (this.device.sid != i_LocalDevice.sid) { return; }
+
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+        }
+
+        #endregion
+
+        #region 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        private void RefreshFormStatu()
+        {
+            Application.RunOnMainThread(() => {
+                var temp = device.attributes.Find((sta) => sta.key == "alarm_status");
+                if (temp != null)
+                {
+                    if (temp.state == "alarm")
+                    {
+                        btnIcon.IsSelected = true;
+                        btnSuctionView.TextID = StringId.InAlarming;
+                        btnSuctionView.IsSelected = true;
+                    }
+                    else
+                    {
+                        btnIcon.IsSelected = false;
+                        btnSuctionView.TextID = StringId.Monitoring;
+                        btnSuctionView.IsSelected = false;
+                    }
+                }
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Video/ObjectClass.cs b/HDL_ON/UI/UI2/FuntionControlView/Video/ObjectClass.cs
index fc82b32..36e51aa 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Video/ObjectClass.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Video/ObjectClass.cs
@@ -132,6 +132,11 @@
         /// </summary>
         public string deviceName = string.Empty;
         /// <summary>
+        /// 鍖哄垎鏄媱鑰愬厠杩樻槸鑷爺
+        /// 鐩墠鍙湁鑷爺鏈夊�硷細door.gate
+        /// </summary>
+        public string spk = string.Empty;
+        /// <summary>
         /// 璁惧id銆佸簭鍒楀彿銆乽uid
         /// </summary>
         public string deviceId = string.Empty;
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs b/HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs
index 6d0dd75..b1c8fb3 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs
@@ -2,14 +2,16 @@
 using HDL_ON.UI.Music;
 using System.Collections.Generic;
 using Shared;
-using HDL_ON.Stan;
-using ZXing.QrCode.Internal;
-using static HDL_ON.UI.UI2.FuntionControlView.Video.VideoMethod;
+using HDL_ON.UI.CSS;
 
 namespace HDL_ON.UI.UI2.FuntionControlView.Video
 {
     public class VideoMainView : FrameLayout
     {
+
+        List<Video> ximoVideoList = new List<Video>();
+
+
         /// <summary>
         /// 鍔犺浇鍙瀵硅UI
         /// </summary>
@@ -17,6 +19,8 @@
         /// <param name="videoList">鍙瀵硅鍒楄〃</param>
         public void Show(List<CallView> listCall, List<Video> videoList)
         {
+            ximoVideoList = videoList.FindAll((obj) => obj.spk == "door.gate");
+
             #region 甯冨眬鐣岄潰
             this.BackgroundColor = MusicColor.ViewColor;
             var topView = new TopView();
@@ -191,11 +195,17 @@
             };
             bjFl.AddChidren(vv);
 
-            bool bol = haveFlVideo(videoList);
+            bool bol = haveQRCodeVideo(videoList);
             if (bol)
             {
                 //闂ㄧ浜岀淮鐮佸浐瀹氭湁鐨�,铏氭嫙涓�涓嚭鏉�
-                videoList.Add(new Video { deviceName = Language.StringByID(StringId.menjinerweima), interphoneType = "100" });
+                videoList.Add(new Video { deviceName = Language.StringByID(StringId.menjinerweima), interphoneType = "100",devType = "100" });
+            }
+            if (ximoVideoList.Count > 0)
+            {
+                //寰樺緤鎶ヨ
+                videoList.Add(new Video { deviceName = Language.StringByID(StringId.WanderingAlarm), interphoneType = "222", devType = "222" });
+                
             }
             //鏁扮粍涓暟
             //int value = 15;
@@ -217,10 +227,13 @@
             };
             vv.AddChidren(fL);
             int line = 0;
+
+
             #endregion
             for (int i = 1, j = 0; i <= videoList.Count; i++, j++)
             {
                 var video = videoList[i - 1];
+             
                 #region
                 var fLayout = new FrameLayout
                 {
@@ -239,6 +252,7 @@
                     UnSelectedImagePath = "VideoIcon/weiqiangji.png",
                 };
                 fLayout.AddChidren(iconBtn);
+
 
                 var deviceNameBtn = new Button
                 {
@@ -267,19 +281,28 @@
                 //闂ㄥ彛鏈虹殑鐐瑰嚮浜嬩欢
                 clickBtn.MouseUpEventHandler += (sender, e) =>
                 {
+                    if (video.devType == "VisitorQrCode")
+                    {
+
+                        return;
+                    }
+                    else if (video.devType == "FaceManagement")
+                    {
+
+                        return;
+                    }
+
                     var video2 = clickBtn.Tag as Video;
                     if (video2.devType == "100")
                     {
-                        //闂ㄧ浜岀淮鐮佸浐瀹氭湁鐨�
-                        VideoSend.GetQRcode(this, video2, (tag, paw) =>
-                        {
-                            if (tag)
-                            {
-                                //娉ㄦ剰锛氬瘑鐮佹湁鍙兘寤舵椂1鍒嗛挓鐢熸晥
-                                View.ShowDialog showDialog = new View.ShowDialog();
-                                showDialog.QRcode(paw);
-                            }
-                        });
+                        ChooseVideoShowQRCode();
+
+                    }
+                    else if(video2.devType == "222")
+                    {
+                        ChooseAlarmShow();
+
+
                     }
                     else
                     {
@@ -544,20 +567,273 @@
 
 
         //鍒ゆ柇鏄惁鏈� 涓版灄鍙瀵硅
-        private bool haveFlVideo(List<Video> videoList)
+        private bool haveQRCodeVideo(List<Video> videoList)
         {
             bool bol = false;
 
             for (int i = 0; i < videoList.Count; i++)
             {
                 var _video = videoList[i];
-                if (_video.interphoneType == "FLVI")
+                if (_video.interphoneType == "FLVI"|| _video.spk == "door.gate")
+                {
                     return true;
+                }
             }
 
             return bol;
         }
 
+
+        /// <summary>
+        /// 鑾峰彇闂ㄧ浜岀淮鐮�
+        /// </summary>
+        public void ChooseVideoShowQRCode()
+        {
+            Dialog dialog = new Dialog()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+
+            FrameLayout dialogView = new FrameLayout();
+            dialog.AddChidren(dialogView);
+            dialogView.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+            };
+
+            var contentView = new FrameLayout()
+            {
+                Gravity = Gravity.Center,
+                Width = Application.GetRealWidth(270),
+                Height = Application.GetRealHeight(280),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                BorderColor = 0x00000000,
+                BorderWidth = 0,
+                Radius = (uint)Application.GetMinRealAverage(10),
+            };
+            dialogView.AddChidren(contentView);
+
+            var btnTitle = new Button()
+            {
+                Height = Application.GetRealHeight(64),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextID = StringId.menjinerweima,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+            };
+            contentView.AddChidren(btnTitle);
+
+            var listView = new VerticalScrolViewLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(70),
+                Width = Application.GetRealWidth(230),
+                Height = Application.GetRealHeight(200),
+            };
+            contentView.AddChidren(listView);
+
+            //if (ximoVideoList.Count == 1)
+            {
+                Loading loading = new Loading();
+                contentView.AddChidren(loading);
+                loading.Start("");
+                new System.Threading.Thread(() =>
+                {
+                    try
+                    {
+                        var pack = VideoSend.GetQRcode();
+                        var pairs = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AccessControlQRode>>(pack.Data.ToString());
+                        if (pairs.Count > 0)
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                ImageView codeImage = new ImageView()
+                                {
+                                    Gravity = Gravity.Center,
+                                    Height = Application.GetRealWidth(320),
+                                    Width = Application.GetRealWidth(320),
+                                    ImageBytes = Scan.BytesFromText(pairs[0].qrcode, Application.GetRealWidth(200), Application.GetRealWidth(200)),
+                                };
+                                dialogView.AddChidren(codeImage);
+                            });
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        MainPage.Log($"鑾峰彇闂ㄧ浜岀淮鐮佸紓甯革細{ex.Message}");
+                    }
+                    finally
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            if (loading != null)
+                            {
+                                loading.Hide();
+                                loading.RemoveFromParent();
+                            }
+                        });
+                    }
+                })
+                { IsBackground = true }.Start();
+            }
+            //else
+            //{
+
+            //    foreach (var v in ximoVideoList)
+            //    {
+            //        Button btnMsg = new Button()
+            //        {
+            //            Gravity = Gravity.CenterHorizontal,
+            //            Height = Application.GetRealHeight(50),
+            //            Width = Application.GetRealHeight(160),
+            //            TextAlignment = TextAlignment.Center,
+            //            TextColor = CSS_Color.TextualColor,
+            //            TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            //            Text = v.deviceName,
+            //            Radius = (uint)Application.GetRealWidth(5),
+            //            BackgroundColor = CSS_Color.DividingLineColor,
+            //            IsMoreLines = true,
+            //        };
+            //        listView.AddChidren(btnMsg);
+
+            //        listView.AddChidren(new Button() { Height = Application.GetRealHeight(12) });
+
+            //        btnMsg.MouseUpEventHandler = (sender, e) =>
+            //        {
+
+
+            //            if (v.spk == "door.gate")
+            //            {
+                          
+            //                return;
+            //            }
+
+            //            //闂ㄧ浜岀淮鐮佸浐瀹氭湁鐨�
+            //            VideoSend.GetQRcode(this, v, (tag, paw) =>
+            //            {
+            //                if (tag)
+            //                {
+            //                //娉ㄦ剰锛氬瘑鐮佹湁鍙兘寤舵椂1鍒嗛挓鐢熸晥
+            //                View.ShowDialog showDialog = new View.ShowDialog();
+            //                    showDialog.QRcode(paw);
+            //                }
+            //            });
+            //            dialog.Close();
+            //        };
+            //    }
+            //}
+            dialog.Show();
+
+        }
+
+        /// <summary>
+        /// 閫夋嫨寰樺緤鎶ヨ鍒楄〃鏄剧ず
+        /// </summary>
+        public void ChooseAlarmShow()
+        {
+            if (ximoVideoList.Count == 1)
+            {
+                var wanderingAlarmPage = new WanderingAlarmPage(ximoVideoList[0].deviceId);
+                MainPage.BasePageView.AddChidren(wanderingAlarmPage);
+                wanderingAlarmPage.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+
+            }
+            else
+            {
+                Dialog dialog = new Dialog()
+                {
+                    BackgroundColor = CSS_Color.DialogTransparentColor1,
+                };
+
+                FrameLayout dialogView = new FrameLayout();
+                dialog.AddChidren(dialogView);
+                dialogView.MouseUpEventHandler = (sender, e) =>
+                {
+                    dialog.Close();
+                };
+
+                var contentView = new FrameLayout()
+                {
+                    Gravity = Gravity.Center,
+                    Width = Application.GetRealWidth(270),
+                    Height = Application.GetRealHeight(280),
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                    BorderColor = 0x00000000,
+                    BorderWidth = 0,
+                    Radius = (uint)Application.GetMinRealAverage(10),
+                };
+                dialogView.AddChidren(contentView);
+
+                var btnTitle = new Button()
+                {
+                    Height = Application.GetRealHeight(64),
+                    TextAlignment = TextAlignment.Center,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextID = StringId.WanderingAlarm,
+                    TextSize = CSS_FontSize.SubheadingFontSize,
+                };
+                contentView.AddChidren(btnTitle);
+
+                var listView = new VerticalScrolViewLayout()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Y = Application.GetRealHeight(70),
+                    Width = Application.GetRealWidth(230),
+                    Height = Application.GetRealHeight(200),
+                };
+                contentView.AddChidren(listView);
+
+
+                foreach (var v in ximoVideoList)
+                {
+                    Button btnMsg = new Button()
+                    {
+                        Gravity = Gravity.CenterHorizontal,
+                        Height = Application.GetRealHeight(50),
+                        Width = Application.GetRealHeight(160),
+                        TextAlignment = TextAlignment.Center,
+                        TextColor = CSS_Color.TextualColor,
+                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                        Text = v.deviceName,
+                        Radius = (uint)Application.GetRealWidth(5),
+                        BackgroundColor = CSS_Color.DividingLineColor,
+                        IsMoreLines = true,
+                    };
+                    listView.AddChidren(btnMsg);
+
+                    listView.AddChidren(new Button() { Height = Application.GetRealHeight(12) });
+
+                    btnMsg.MouseUpEventHandler = (sender, e) =>
+                    {
+
+
+                        var wanderingAlarmPage = new WanderingAlarmPage(v.deviceId);
+                        MainPage.BasePageView.AddChidren(wanderingAlarmPage);
+                        wanderingAlarmPage.LoadPage();
+                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+
+                        dialog.Close();
+                    };
+                }
+                dialog.Show();
+            }
+
+        }
+
+
     }
 
+    public class AccessControlQRode
+    {
+        public string title = string.Empty;
+        public string codeType = string.Empty;
+        public string userName = string.Empty;
+        public string houseFullName = string.Empty;
+        public string communityName = string.Empty;
+        public string desc = string.Empty;
+        public string businessType = string.Empty;
+        public string qrcode = string.Empty;
+    }
+
+
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Video/VideoSend.cs b/HDL_ON/UI/UI2/FuntionControlView/Video/VideoSend.cs
index ae759bb..9388f8b 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Video/VideoSend.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Video/VideoSend.cs
@@ -3,6 +3,7 @@
 using System.IO;
 using System.Net;
 using HDL_ON.DAL.Server;
+using HDL_ON.Entity;
 using HDL_ON.UI.UI2.PersonalCenter.PirDevice;
 using Newtonsoft.Json.Linq;
 using Shared;
@@ -81,6 +82,18 @@
             return revertObj;
         }
 
+        public static ResponsePackNew GetQRcode()
+        {
+            var jobject = new JObject();
+            jobject.Add("userId", UserInfo.Current.ID);
+            jobject.Add("userType", "C");
+            jobject.Add("houseId", DB_ResidenceData.Instance.CurrentRegion.id);
+            jobject.Add("codeSecond", "60");
+            var requestJson = HttpUtil.GetSignRequestJson(jobject);//鏁版嵁绛惧悕
+            var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_OwnerQRCode, requestJson);
+            return revertObj;
+        }
+
         /// <summary>
         /// 涓婃姤鍔ㄦ�佸紑閿佸瘑鐮�(娉ㄦ剰锛氬瘑鐮佹湁鍙兘寤舵椂1鍒嗛挓鐢熸晥)
         /// </summary>
@@ -90,12 +103,21 @@
             bool if_bool = false;
             //涓存椂瀵嗙爜
             string pwd = VideoMethod.GetCode();
-            var jobject = new JObject();
            jobject.Add("communityID", video.flRoomBindVO.flCmtId);//绀惧尯ID
-            jobject.Add("fromTime", VideoMethod.GetCurrentTimeStamp());//寮�濮嬫椂闂�
-            jobject.Add("validTime", VideoMethod.GetTomorrowTimeStamp());//鏈夋晥鏃堕棿
-            jobject.Add("unitno", video.flRoomBindVO.flBuildingId);//鍗曞厓鍙�
-            jobject.Add("roomno", video.flRoomBindVO.flRoomId);//鎴块棿鍙�
-            jobject.Add("code", pwd);
            jobject.Add("userKey", video.flRoomBindVO.id);
            jobject.Add("timestamp", VideoMethod.GetCurrentTimeStamp());
            jobject.Add("secretKey", video.flRoomBindVO.flSecretKey);
            jobject.Add("method", "setdynamicpwd");
            jobject.Add("numTimes", "5");
+            var jobject = new JObject();
+
+
+                jobject.Add("communityID", video.flRoomBindVO.flCmtId);//绀惧尯ID
+                jobject.Add("fromTime", VideoMethod.GetCurrentTimeStamp());//寮�濮嬫椂闂�
+                jobject.Add("validTime", VideoMethod.GetTomorrowTimeStamp());//鏈夋晥鏃堕棿
+                jobject.Add("unitno", video.flRoomBindVO.flBuildingId);//鍗曞厓鍙�
+                jobject.Add("roomno", video.flRoomBindVO.flRoomId);//鎴块棿鍙�
+                jobject.Add("code", pwd);
+                jobject.Add("userKey", video.flRoomBindVO.id);
+                jobject.Add("timestamp", VideoMethod.GetCurrentTimeStamp());
+                jobject.Add("secretKey", video.flRoomBindVO.flSecretKey);
+                jobject.Add("method", "setdynamicpwd");
+                jobject.Add("numTimes", "5");
+            
             //鍔犺浇log
             Loading loading = new Loading();
             frame.AddChidren(loading);
@@ -104,7 +126,9 @@
             {
                 try
                 {
-                    var str = HttpWebRequest(NewAPI.API_POST_FL_QRcode, jobject.ToString(), "POST");
+                    string str = "";
+
+                    str = HttpWebRequest(NewAPI.API_POST_FL_QRcode, jobject.ToString(), "POST");
                     if (!string.IsNullOrEmpty(str))
                     {
                         var json = JObject.Parse(str);
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Video/WanderingAlarmPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Video/WanderingAlarmPage.cs
new file mode 100644
index 0000000..d6b5a5e
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Video/WanderingAlarmPage.cs
@@ -0,0 +1,231 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.DAL.Server;
+using HDL_ON.UI.CSS;
+using Shared;
+namespace HDL_ON.UI.UI2.FuntionControlView.Video
+{
+    public class WanderingAlarmPage : FrameLayout
+    {
+        FrameLayout bodyView;
+        string deviceId;
+        public WanderingAlarmPage(string deviceId)
+        {
+            bodyView = this;
+            this.deviceId = deviceId;
+        }
+
+        VerticalScrolViewLayout contentView;
+
+        public void LoadPage()
+        {
+            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
+            new TopViewDiv(bodyView, Language.StringByID(StringId.WanderingAlarm)).LoadTopView();
+
+            var btnTipMsg = new Button()
+            {
+                Y = Application.GetRealHeight(64),
+                X = Application.GetRealWidth(20),
+                Height = Application.GetRealHeight(58),
+                Width = Application.GetRealWidth(318),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                Text = "*鍙瀵硅鍙互鑷姩璇嗗埆闂ㄥ彛鍙枒浜哄憳锛屽苟鍙戣捣寰樺緤鎶ヨ璁板綍"
+            };
+            if(Language.CurrentLanguage != "Chinese")
+            {
+                btnTipMsg.Text = "*Visual intercom can automatically identify suspicious persons at the door and initiate wandering alarm records";
+            }
+            bodyView.AddChidren(btnTipMsg);
+
+            contentView = new VerticalScrolViewLayout()
+            {
+                Y = Application.GetRealHeight(64 + 62),
+                Height = Application.GetRealHeight(550),
+            };
+            bodyView.AddChidren(contentView);
+
+            LoadCloudData(20, 1);
+        }
+
+        /// <summary>
+        /// 璇诲彇浜戠鏁版嵁
+        /// </summary>
+        void LoadCloudData(int pageCount,int pageNo)
+        {
+            Loading loading = new Loading();
+            bodyView.AddChidren(loading);
+            loading.Start("");
+            new System.Threading.Thread(() => {
+                try
+                {
+                    HttpServerRequest http = new HttpServerRequest();
+                    var pack = http.GetAlarmRecords(deviceId, pageCount,pageNo);
+                    if (pack.Code == StateCode.SUCCESS)
+                    {
+                        var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<AlarmRecordInfoPack>(pack.Data.ToString());
+                        Application.RunOnMainThread(() =>
+                        {
+                            LoadSceneGallery(obj);
+                        });
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log($"璇诲彇寰樺緤鎶ヨ鏁版嵁寮傚父锛歿ex.Message}");
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        if (loading != null)
+                        {
+                            loading.Hide();
+                            loading.RemoveFromParent();
+                        }
+                    });
+                }
+            })
+            { IsBackground = true }.Start();
+
+        }
+
+        /// <summary>
+        /// 鍔犺浇鍦烘櫙鍥惧簱
+        /// </summary>
+        void LoadSceneGallery(AlarmRecordInfoPack pack)
+        {
+            FrameLayout sceneImageRow = new FrameLayout()
+            {
+                Height = Application.GetRealWidth(128),
+            };
+            new System.Threading.Thread(() =>
+            {
+                for (int i = 0; i < pack.list.Count; i++)
+                {
+                    var item = pack.list[i];
+
+                    var imageBytes = ImageUtlis.Current.DownImageByImageUrl(item.alarmImg);
+                    Application.RunOnMainThread(() =>
+                    {
+                        var sceneImageView = new ImageView()
+                        {
+                            Width = Application.GetRealWidth(172),
+                            Height = Application.GetRealHeight(90),
+                            Radius = (uint)Application.GetRealWidth(12),
+                            ImageBytes = imageBytes
+                        };
+                        var btnTime = new Button()
+                        {
+                            Width = Application.GetRealHeight(160),
+                            Height = Application.GetRealHeight(41),
+                            Y = Application.GetRealHeight(90),
+                            Text = Utlis.UnixToDateTimeMS(item.alarmTime).ToString(),
+                            TextColor = CSS_Color.FirstLevelTitleColor,
+                            TextAlignment = TextAlignment.Center
+                        };
+                        if (i % 2 == 0)
+                        {
+                            sceneImageRow = new FrameLayout()
+                            {
+                                Height = Application.GetRealHeight(90 + 53),
+                            };
+                            contentView.AddChidren(sceneImageRow);
+                            sceneImageView.X = Application.GetRealWidth(10);
+                            sceneImageRow.AddChidren(sceneImageView);
+                            btnTime.X = Application.GetRealWidth(10);
+                            sceneImageRow.AddChidren(btnTime);
+
+                        }
+                        else
+                        {
+                            sceneImageView.X = Application.GetRealWidth(194);
+                            sceneImageRow.AddChidren(sceneImageView);
+
+                            btnTime.X = Application.GetRealWidth(194);
+                            sceneImageRow.AddChidren(btnTime);
+                        }
+
+
+                        sceneImageView.MouseUpEventHandler = (sender, e) =>
+                        {
+                            Dialog dialog = new Dialog();
+
+                            FrameLayout dialogContentView = new FrameLayout();
+                            dialog.AddChidren(dialogContentView);
+                            dialogContentView.MouseUpEventHandler = (sender2, e2) =>
+                            {
+                                dialog.Close();
+                            };
+                            ImageView btnImage = new ImageView()
+                            {
+                                Gravity = Gravity.Center,
+                                Height = Application.GetRealHeight(211),
+                                ImageBytes = sceneImageView.ImageBytes,
+                            };
+                            dialogContentView.AddChidren(btnImage);
+
+
+                            dialog.Show();
+                        };
+
+                    });
+                    System.Threading.Thread.Sleep(20);
+
+                }
+                Application.RunOnMainThread(() =>
+                {
+                    if (pack.totalPage > pack.pageNo)
+                    {
+                        var btnLoadMore = new Button()
+                        {
+                            TextAlignment = TextAlignment.Center,
+                            TextID = StringId.GetMore,
+                            Height = Application.GetRealHeight(60),
+                            TextSize = CSS_FontSize.SubheadingFontSize,
+                            TextColor = CSS_Color.FirstLevelTitleColor,
+                        };
+                        contentView.AddChidren(btnLoadMore);
+                        btnLoadMore.MouseUpEventHandler = (sender, e) =>
+                        {
+                            LoadCloudData(20, pack.pageNo + 1);
+                            btnLoadMore.RemoveFromParent();
+                        };
+                    }
+                });
+
+            })
+            { IsBackground = true }.Start();
+ }
+
+
+    }
+
+    public class AlarmRecordInfoPack
+    {
+        public int totalCount = 0;
+
+        public int totalPage = 0;
+
+        public int pageNo = 0;
+
+        public int pageSize = 0;
+
+        public List<AlarmRecordInfo> list = new List<AlarmRecordInfo>();
+    }
+
+    /// <summary>
+    /// 寰樺緤鎶ヨ淇℃伅
+    /// </summary>
+    public class AlarmRecordInfo
+    {
+        public string alarmImg = string.Empty;
+
+        public long alarmTime;
+
+        public string alarmType = string.Empty;
+
+        public string alarmTypeDesc = string.Empty;
+    }
+}
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