From af0269cf1d551fb799784df233d8d9c388c6b18b Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期四, 30 六月 2022 16:02:27 +0800
Subject: [PATCH] 合并可视对讲功能

---
 SiriIntents/SiriIntents.csproj                                                   |    1 
 HDL-ON_Android/Properties/AndroidManifest.xml                                    |    2 
 .idea/OnPro.iml                                                                  |    9 
 HDL-ON_iOS/HDL-ON_iOS.csproj                                                     |    7 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/sensorhelp_white.png       |    0 
 HDL-ON_iOS/Resources/Phone/Public/MsgIcon/CallIcon.png                           |    0 
 HDL-ON_iOS/Resources/Phone/Public/MsgIcon/HangUpIcon.png                         |    0 
 HDL_ON/UI/UI2/FuntionControlView/Panel/EnvironmentPanelPage.cs                   |  174 +++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpNormalBgIcon.png          |    0 
 .idea/vcs.xml                                                                    |    6 
 .idea/modules.xml                                                                |    8 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/CAC/DataIcon.png                         |    0 
 HDL_ON/UI/UI0-Stan/Form/DeviceFunction4CardCommonForm.cs                         |  452 +++++++
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs                               |   16 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs               |  199 +++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/screenpanel.png                     |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/CAC/JinMaoIcon.png                       |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorHistoryPage.cs                     |    3 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/sensorhelp_blue.png        |    0 
 HDL-ON_iOS/Resources/Phone/Public/MsgIcon/AnswerIcon.png                         |    0 
 HDL_APP_Project.sln                                                              |   14 
 HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTipDialogCallBack.cs                    |   13 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacHistoryChoosePage.cs            |  108 +
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs                   |   33 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/hvaccac_blue.png           |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTimeDialogCallBak.cs                    |   14 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs |    5 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/hvaccac_white.png          |    0 
 HDL-ON_iOS/Resources/Phone/Public/dialogBg2.png                                  |    0 
 HDL_ON/Common/ImageUtlis.cs                                                      |   51 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacWeekHistoryPage.cs              |  424 +++++++
 HDL_ON/DAL/Server/NewAPI.cs                                                      |   47 
 HDL_ON/Entity/Function/Function.cs                                               |   10 
 HDL_ON/UI/UI2/FuntionControlView/ContentView/AcContentView.cs                    | 1110 +++++++++++++++++++
 HDL_ON/UI/UI2/FuntionControlView/ContentView/FhContentView.cs                    |  540 +++++++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelHelpAlarmBgIcon.png           |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorQRCodePage.cs                      |   39 
 HDL_ON/UI/UI2/FuntionControlView/Panel/PanelHelpPage.cs                          |  142 ++
 HDL_ON/DAL/Server/HttpServerRequest.cs                                           |   46 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/hvaccac.png                         |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Panel/PanelEnviBg.png                    |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/sensorhelp.png                      |    0 
 HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs                                            |    2 
 43 files changed, 3,379 insertions(+), 96 deletions(-)

diff --git a/.idea/OnPro.iml b/.idea/OnPro.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/OnPro.iml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..36ee694
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/OnPro.iml" filepath="$PROJECT_DIR$/.idea/OnPro.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/HDL-ON_Android/Properties/AndroidManifest.xml b/HDL-ON_Android/Properties/AndroidManifest.xml
index fef2fce..d9ae09a 100644
--- a/HDL-ON_Android/Properties/AndroidManifest.xml
+++ b/HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.5.9" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202206291">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.5.9" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202206301">
 	<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
 	<!--鍙嬬洘-->
 	<!--<uses-sdk android:minSdkVersion="8"></uses-sdk>-->
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index 78e6c1e..56e980e 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -105,11 +105,14 @@
         <Reference Include="Shared.IOS.LCVideoOnSDK">
           <HintPath>..\DLL\LC\IOS\Shared.IOS.LCVideoOnSDK.dll</HintPath>
         </Reference>
+        <Reference Include="Shared.IOS.HDLSceneSiri">
+          <HintPath>..\DLL\IOS\Shared.IOS.HDLSceneSiri.dll</HintPath>
+        </Reference>
         <Reference Include="Shared.IOS.HDLLinphoneSDK">
           <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath>
         </Reference>
-        <Reference Include="Shared.IOS.HDLSceneSiri">
-          <HintPath>..\DLL\IOS\Shared.IOS.HDLSceneSiri.dll</HintPath>
+        <Reference Include="Shared.IOS.HDLFVSDK">
+          <HintPath>..\DLL\IOS\Shared.IOS.HDLFVSDK.dll</HintPath>
         </Reference>
     </ItemGroup>
     <ItemGroup>
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/CAC/DataIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/CAC/DataIcon.png
new file mode 100644
index 0000000..9832d06
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/CAC/DataIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/CAC/JinMaoIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/CAC/JinMaoIcon.png
new file mode 100644
index 0000000..b5e26bf
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/CAC/JinMaoIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/hvaccac_blue.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/hvaccac_blue.png
new file mode 100644
index 0000000..addcd70
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/hvaccac_blue.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/hvaccac_white.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/hvaccac_white.png
new file mode 100644
index 0000000..c63e9e3
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/hvaccac_white.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/sensorhelp_blue.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/sensorhelp_blue.png
new file mode 100644
index 0000000..7e5e4ac
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/sensorhelp_blue.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/sensorhelp_white.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/sensorhelp_white.png
new file mode 100644
index 0000000..448b3c8
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/sensorhelp_white.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/hvaccac.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/hvaccac.png
new file mode 100644
index 0000000..5b8b9fa
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/hvaccac.png
Binary files differ
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/Icon/sensorhelp.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/sensorhelp.png
new file mode 100644
index 0000000..cbb1b1c
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/sensorhelp.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-ON_iOS/Resources/Phone/Public/MsgIcon/AnswerIcon.png b/HDL-ON_iOS/Resources/Phone/Public/MsgIcon/AnswerIcon.png
new file mode 100644
index 0000000..89096a9
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/Public/MsgIcon/AnswerIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/Public/MsgIcon/CallIcon.png b/HDL-ON_iOS/Resources/Phone/Public/MsgIcon/CallIcon.png
new file mode 100644
index 0000000..843101e
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/Public/MsgIcon/CallIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/Public/MsgIcon/HangUpIcon.png b/HDL-ON_iOS/Resources/Phone/Public/MsgIcon/HangUpIcon.png
new file mode 100644
index 0000000..e516074
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/Public/MsgIcon/HangUpIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/Public/dialogBg2.png b/HDL-ON_iOS/Resources/Phone/Public/dialogBg2.png
new file mode 100644
index 0000000..2c28530
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/Public/dialogBg2.png
Binary files differ
diff --git a/HDL_APP_Project.sln b/HDL_APP_Project.sln
index c0bd16f..84800828 100644
--- a/HDL_APP_Project.sln
+++ b/HDL_APP_Project.sln
@@ -18,8 +18,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UMSdk", "UMSdk\UMSdk.csproj", "{5CD1B2DE-1ABD-4B46-8C97-CCB6EA90346A}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared.Droid.HDLLinphone", "Shared.Droid.HDLLinphone\Shared.Droid.HDLLinphone.csproj", "{703D29ED-674F-44A8-8AAD-863035899D4B}"
-EndProject
 Global
 	GlobalSection(SharedMSBuildProjectFiles) = preSolution
 		HDL_ON\HDL_ON.projitems*{09712674-2a38-407b-b1e2-560b2c352f9a}*SharedItemsImports = 4
@@ -121,18 +119,6 @@
 		{5CD1B2DE-1ABD-4B46-8C97-CCB6EA90346A}.Release|iPhone.Build.0 = Release|Any CPU
 		{5CD1B2DE-1ABD-4B46-8C97-CCB6EA90346A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{5CD1B2DE-1ABD-4B46-8C97-CCB6EA90346A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Debug|iPhone.Build.0 = Debug|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Release|Any CPU.Build.0 = Release|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Release|iPhone.ActiveCfg = Release|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Release|iPhone.Build.0 = Release|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
-		{703D29ED-674F-44A8-8AAD-863035899D4B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/HDL_ON/Common/ImageUtlis.cs b/HDL_ON/Common/ImageUtlis.cs
index 918483d..3b3a486 100644
--- a/HDL_ON/Common/ImageUtlis.cs
+++ b/HDL_ON/Common/ImageUtlis.cs
@@ -147,9 +147,9 @@
         {
             var requestJson = HttpUtil.GetSignRequestJson(uploadImageObj);
             var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_UploadImage, requestJson);
-            if(revertObj.Code == StateCode.SUCCESS)
+            if (revertObj.Code == StateCode.SUCCESS)
             {
-                if(revertObj.Data != null)
+                if (revertObj.Data != null)
                 {
                     return revertObj.Data.ToString();
                 }
@@ -440,7 +440,7 @@
             try
             {
                 if (string.IsNullOrEmpty(imageKey)) return null;
-                
+
                 byte[] imageBytes;
                 if (!ignoreCache && Exists(imageKey))
                 {
@@ -451,12 +451,12 @@
                 {
                     //浜戠涓嬭浇
                     imageBytes = GetImageDownloadUrlWithRegionUrl(imageKey, regionUrl);
-                    if(imageBytes != null)
+                    if (imageBytes != null)
                     {
                         //淇濆瓨鍒版湰鍦�
                         WriteFileByBytes(imageKey, imageBytes);
                     }
-                   
+
                 }
                 return imageBytes;
             }
@@ -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/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 8efd6e5..bf89109 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -5,7 +5,6 @@
 using System.Text;
 using HDL_ON.Entity;
 using Newtonsoft.Json.Linq;
-using Shared;
 
 namespace HDL_ON.DAL.Server
 {
@@ -46,13 +45,17 @@
         /// <param name="deviceId">璁惧ID</param>
         /// <param name="deviceKey">鍔熻兘鏌ヨ绫诲瀷锛歱m25</param>
         /// <returns></returns>
-        public ResponsePackNew GetSensorHistory(string qType, string deviceId, string deviceKey)
+        public ResponsePackNew GetSensorHistory(string qType, string deviceId, string deviceKey, string time = "")
         {
             Dictionary<string, object> d = new Dictionary<string, object>();
             d.Add("type", qType);
             d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
             d.Add("deviceId", deviceId);
             d.Add("key", deviceKey);
+            if (time != "")
+            {
+                d.Add("time", time);
+            }
 
             var requestJson = HttpUtil.GetSignRequestJson(d);
             return HttpUtil.RequestHttpsPost(NewAPI.Api_Post_EnvironmentalSensorHistoricalData, requestJson);
@@ -1030,10 +1033,10 @@
 #endif
                 //鏄惁鐢熶骇妯″紡
                 bool isProduce = true;
-#if DEBUG
-                isProduce = true;
-#endif
-
+                if (HttpUtil.GlobalRequestHttpsHost == "https://test-gz.hdlcontrol.com")
+                {
+                    isProduce = false;
+                }
                 if (string.IsNullOrEmpty(OnAppConfig.Instance.PushDeviceToken))
                 {
                     Utlis.WriteLine("PushDeviceToken 涓虹┖");
@@ -1058,15 +1061,9 @@
 
                 //var mAddpushinfoJson = Newtonsoft.Json.JsonConvert.SerializeObject(mAddpushinfoObj);
                 var mAddpushinfoJson = HttpUtil.GetSignRequestJson(mAddpushinfoObj);
-
-                Utlis.WriteLine("mAddpushinfoJson: " + mAddpushinfoJson);
-
-                //new Alert("", , "鍙栨秷", "纭畾").Show();
                 var revertObj = HttpUtil.RequestHttpsPost(NewAPI.API_POST_PushSerivce_AddToken, mAddpushinfoJson);
                 if (revertObj.Code == StateCode.SUCCESS)
                 {
-                    //new Alert("", "鎻愪氦pushToken鎴愬姛" + OnAppConfig.Instance.PushDeviceToken, "鍙栨秷", "纭畾").Show();
-
                     if (revertObj.Data != null)
                     {
                         var pushId = revertObj.Data.ToString();
@@ -1075,7 +1072,7 @@
                             OnAppConfig.Instance.PushId = pushId;
                             OnAppConfig.Instance.SaveConfig();
                             Utlis.WriteLine("PushId: " + pushId);
-                            //new Alert("","鎻愪氦pushToken鎴愬姛"+ OnAppConfig.Instance.PushDeviceToken, "鍙栨秷","纭畾").Show();
+
                             return true;
                         }
                     }
@@ -1083,7 +1080,7 @@
                 }
                 else
                 {
-                    Utlis.WriteLine("AddToken 澶辫触");
+                    //Utlis.WriteLine("AddToken 澶辫触");
                 }
                 return false;
             }
@@ -1957,7 +1954,7 @@
         /// 鑾峰彇璁惧鍒楄〃
         /// </summary>
         /// <returns></returns>
-        public ResponsePackNew GetDeviceList(string pageSize="",string pageNo ="")
+        public ResponsePackNew GetDeviceList(string pageSize = "", string pageNo = "")
         {
             Dictionary<string, object> d = new Dictionary<string, object>();
             d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
@@ -2624,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/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index f4ccb6b..875b8b8 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -17,22 +17,7 @@
         /// 鑾峰彇鍏ㄧ悆鍖哄煙鍒楄〃 鍏嶇櫥褰�
         /// </summary>
         public const string API_POST_GlobalRegionList = "/smart-footstone/region/globalRegionList";
-        #endregion
-
-        #region 璁垮
-        /// <summary>
-        /// 鐢熸垚涓存椂瀵嗙爜
-        /// </summary>
-        public const string API_POST_ADD_TEMP_PASSWORD = "/community-wisdom/app/visitor/freeview/add";
-        /// <summary>
-        /// 鍒犻櫎涓存椂瀵嗙爜
-        /// </summary>
-        public const string API_POST_DEL_TEMP_PASSWORD = "/community-wisdom/app/visitor/freeview/delete";
-        /// <summary>
-        /// 鑾峰彇涓存椂瀵嗙爜
-        /// </summary>
-        public const string API_POST_GET_TEMP_PASSWORD_LIST = "/community-wisdom/app/visitor/freeview/page";
-        #endregion
+        #endregion 
 
         #region 鈻� AcCluster -- 鐧诲綍鍜屾敞鍐岄儴鍒哶__________________________
         /// <summary>
@@ -92,6 +77,21 @@
         /// 瑙g粦璁よ瘉(鎵嬫満/閭)
         /// </summary>
         public const string API_POST_Member_UnbindWithAccount = "/smart-footstone/member/memberInfo/unbindWithAccount";
+        #endregion
+
+        #region 璁垮
+        /// <summary>
+        /// 鐢熸垚涓存椂瀵嗙爜
+        /// </summary>
+        public const string API_POST_ADD_TEMP_PASSWORD = "/community-wisdom/app/visitor/freeview/add";
+        /// <summary>
+        /// 鍒犻櫎涓存椂瀵嗙爜
+        /// </summary>
+        public const string API_POST_DEL_TEMP_PASSWORD = "/community-wisdom/app/visitor/freeview/delete";
+        /// <summary>
+        /// 鑾峰彇涓存椂瀵嗙爜
+        /// </summary>
+        public const string API_POST_GET_TEMP_PASSWORD_LIST = "/community-wisdom/app/visitor/freeview/page";
         #endregion
 
         /// <summary>
@@ -683,6 +683,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/ThirdPartySdk/ESOnVideo.cs b/HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs
index 37eb371..700f956 100644
--- a/HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs
+++ b/HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs
@@ -109,7 +109,7 @@
             }else if (interphoneType == InterphoneType.HDL.ToString())
             {
                 //HDLLinphone 鐙勮�愬厠
-                HDLLinphone.Current.ShowESVideoMonitor(mESVideoInfo);
+                HDLLinphone.Current.ShowESVideoMonitor(mESVideoInfo, interphoneType);
                 ////鍏ㄨ閫�
                 //NSDictionary deviceInfo = new NSDictionary("deviceCode","3-1-11-2", "deviceName", mESVideoInfo.DeviceName);
                 //Shared.IOS.HDLFVSDK.Video.Monitor(deviceInfo);
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 747df45..9c31531 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -380,7 +380,15 @@
         /// <summary>
         /// 鏄惁鍦ㄧ嚎
         /// </summary>
-        public bool online = true;
+        public bool online {
+            get
+            {
+                return true;
+            }
+            set {
+
+            }
+        }
 
         /// <summary>
         /// 鐜闈㈡澘 缁戝畾鐨� 璁惧鐩爣sid鍒楄〃
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/UI2/4-PersonalCenter/PersonalDataPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
index 69edf9b..409580a 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
@@ -738,17 +738,19 @@
 
                 btnisitorVManagementText.MouseUpEventHandler = (sender, e) =>
                 {
+
+
+#if __IOS__
+                    //鍒锋柊鎺ュ彛璇锋眰鎵�闇�瑕佺殑鍙傛暟
+                    Foundation.NSDictionary info = new Foundation.NSDictionary("regionUrl", HttpUtil.GlobalRequestHttpsHost, "token", UserInfo.Current.LoginTokenString, "appkey", "HDL-HOME-APP-TEST", "secret", "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss", "refreshToken", UserInfo.Current.RefreshToken);
+                    Shared.IOS.HDLFVSDK.Video.RefreshInfo(info);
+                    //璺宠浆璁垮绠$悊鐣岄潰
+                    Shared.IOS.HDLFVSDK.Video.ShowVisitorManager();
+#else
                     var page = new VisitorQRCodePage();
                     MainPage.BasePageView.AddChidren(page);
                     page.LoadPage();
                     MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-
-#if __IOS__
-                    //鍒锋柊鎺ュ彛璇锋眰鎵�闇�瑕佺殑鍙傛暟
-                    NSDictionary info = new NSDictionary("regionUrl", HttpUtil.GlobalRequestHttpsHost, "token", UserInfo.Current.LoginTokenString, "appkey", "HDL-HOME-APP-TEST", "secret", "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss", "refreshToken", UserInfo.Current.RefreshToken);
-                    Shared.IOS.HDLFVSDK.Video.RefreshInfo(info);
-                    //璺宠浆璁垮绠$悊鐣岄潰
-                    Shared.IOS.HDLFVSDK.Video.ShowVisitorManager();
 #endif
                 };
             }
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTimeDialogCallBak.cs b/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTimeDialogCallBak.cs
index 272cb66..7ce425a 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTimeDialogCallBak.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTimeDialogCallBak.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘�#if __Android__
+using System;
 using Com.Hdl.Hdllinphonesdk.Dialog;
 using Java.Interop;
 
@@ -24,4 +25,13 @@
             action.Invoke(time);
         }
     }
-}
\ No newline at end of file
+}
+#else
+
+namespace HDL_ON.UI.UI2.PersonalCenter.Visitor
+{
+    public class LpTimeDialogCallBak
+    {
+    }
+}
+#endif
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTipDialogCallBack.cs b/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTipDialogCallBack.cs
index 798b924..1f123d4 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTipDialogCallBack.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/LpTipDialogCallBack.cs
@@ -1,4 +1,6 @@
-锘縰sing System;
+锘�
+#if __Android__
+using System;
 using Com.Hdl.Hdllinphonesdk.Dialog;
 namespace HDL_ON.UI.UI2.PersonalCenter.Visitor
 {
@@ -22,3 +24,12 @@
         }
     }
 }
+
+#else
+namespace HDL_ON.UI.UI2.PersonalCenter.Visitor
+{
+    public class LpTipDialogCallBack
+    {
+    }
+}
+#endif
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorHistoryPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorHistoryPage.cs
index 4e1dc4d..1efd6aa 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorHistoryPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorHistoryPage.cs
@@ -101,10 +101,13 @@
                 itemLayout.AddChidren(btn);//+= (sender, e)
                 btn.MouseUpEventHandler += (sender, e) =>
                 {
+#if __IOS__
+#else
                     VisitorQRCodePage page = new VisitorQRCodePage(action, temPwd);
                     MainPage.BasePageView.AddChidren(page);
                     page.LoadPage();
                     MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+#endif
                 };
                 bodyScrolView.AddChidren(itemLayout);
             }
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorQRCodePage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorQRCodePage.cs
index aac3c30..f77d5e6 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorQRCodePage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/Visitor/VisitorQRCodePage.cs
@@ -1,4 +1,6 @@
-锘縰sing System;
+锘�#if __Android__
+
+using System;
 using HDL_ON.UI.CSS;
 using Shared;
 using HDL_ON.DAL.Server;
@@ -45,7 +47,7 @@
 
         public void LoadPage()
         {
-            #region 椤堕儴瀵艰埅鏍�
+#region 椤堕儴瀵艰埅鏍�
             if (tempPassword == null || tempPassword.id == null)
             {
                 tempPassword = new VisitorTempPassword();
@@ -71,7 +73,7 @@
                 bodyView.BackgroundColor = CSS_Color.BackgroundColor;
                 new TopViewDiv(bodyView, Language.StringByID(StringId.VisitorInvitation)).LoadTopView();
             }
-            #endregion
+#endregion
 
             bodyScrolView = new VerticalScrolViewLayout()
             {
@@ -93,7 +95,7 @@
                 Height = Application.GetRealHeight(60),
             });
 
-            #region 鎵嬫満鍙�
+#region 鎵嬫満鍙�
             bodyScrolView.AddChidren(new Button()
             {
                 Text = Language.StringByID(StringId.PhoneNumber),
@@ -129,9 +131,9 @@
                 Height = Application.GetRealHeight(1),
                 BackgroundColor = CSS_Color.DividingLineColor,
             });
-            #endregion
+#endregion
 
-            #region 鍔ㄦ�佸瘑鐮�
+#region 鍔ㄦ�佸瘑鐮�
             bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(10), });
             bodyScrolView.AddChidren(new Button()
             {
@@ -182,9 +184,9 @@
                 Height = Application.GetRealHeight(1),
                 BackgroundColor = CSS_Color.DividingLineColor,
             });
-            #endregion
+#endregion
 
-            #region 浜岀淮鐮佺敓鏁堟椂闂�
+#region 浜岀淮鐮佺敓鏁堟椂闂�
             FrameLayout startLayout = new FrameLayout()
             {
                 Height = Application.GetRealHeight(40),
@@ -256,9 +258,9 @@
                 BackgroundColor = CSS_Color.DividingLineColor,
             });
 
-            #endregion
+#endregion
 
-            #region 浜岀淮鐮佸け鏁堟椂闂�
+#region 浜岀淮鐮佸け鏁堟椂闂�
             FrameLayout endLayout = new FrameLayout()
             {
                 Height = Application.GetRealHeight(40),
@@ -329,9 +331,9 @@
                     string error = ex.Message;
                 }
             };
-            #endregion
+#endregion
 
-            #region 浜岀淮鐮�
+#region 浜岀淮鐮�
             bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(33), });
             codeLayout = new FrameLayout()
             {
@@ -360,7 +362,7 @@
                 Visible = false,
             };
             bodyScrolView.AddChidren(codeSaveTipBtn);
-            #endregion
+#endregion
 
             bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(28), });
             visitorVoucherBtn = new Button()
@@ -664,4 +666,13 @@
             return pwd;
         }
     }
-}
\ No newline at end of file
+}
+#else
+using Shared;
+
+namespace HDL_ON.UI.UI2.PersonalCenter.Visitor
+{
+    public class VisitorQRCodePage : FrameLayout
+    { }
+}
+#endif
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
index ca02d57..1902f71 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
@@ -94,23 +94,24 @@
             //鍒锋柊鐣岄潰鐘舵��
             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();
+            //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>
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs
new file mode 100644
index 0000000..4553294
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs
@@ -0,0 +1,199 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.DAL.Server;
+using HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI
+{
+    public class CacDayHistoryPage : FrameLayout
+    {
+        CacDayHistoryPage bodyView;
+        EchartsOption_BrokenLine brokenLine;
+        MyEchartsViewOn myEchartsView_Line;
+        string curQueryType = "hour";
+        string queryTime;
+        string functionId;
+        string time;
+        public CacDayHistoryPage(string functionId,string queryType, string time)
+        {
+            this.time = time;
+            this.functionId = functionId;
+            curQueryType = queryType;
+            bodyView = this;
+            queryTime = time;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void InitView()
+        {
+            new TopViewDiv(bodyView, Language.StringByID(StringId.StatisticalChart24Hour)).LoadTopView();
+            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+
+            var contentView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(64),
+                Height = Application.GetRealHeight(603),
+            };
+            bodyView.AddChidren(contentView);
+
+            var btnTitle = new Button()
+            {
+                Height = Application.GetRealHeight(60),
+                TextAlignment = TextAlignment.Center,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+            };
+            if(curQueryType == "room_temp")
+            {
+                btnTitle.Text = queryTime + "瀹ゅ唴娓╁害鍘嗗彶鏁版嵁";
+            }
+            else
+            {
+                btnTitle.Text = queryTime + "瀹ゅ唴婀垮害鍘嗗彶鏁版嵁";
+            }
+            contentView.AddChidren(btnTitle);
+
+
+            var historyDataView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(52),
+                Height = Application.GetRealWidth(350),
+            };
+            contentView.AddChidren(historyDataView);
+
+
+            brokenLine = new EchartsOption_BrokenLine();
+
+            myEchartsView_Line = new MyEchartsViewOn()
+            {
+                Y = Application.GetRealWidth(10),
+                Height = Application.GetRealWidth(338),
+            };
+            historyDataView.AddChidren(myEchartsView_Line);
+
+
+#if DEBUG
+
+            //List<string> vs = new List<string>() {
+            //            "1","2","3","4","5","6","7","8","9","10","11","12","13","14"
+            //        };
+            //brokenLine.InitXdataText(vs);
+            //brokenLine.InitYdataText("yData", new List<EnvironmentalSensorHistor>() {
+            //    new EnvironmentalSensorHistor{ fieldName = "1", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "2", fieldValue= "22"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "3", fieldValue= "-11"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "4", fieldValue= "21"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "5", fieldValue= "-41"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "6", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "7", fieldValue= "-31"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "8", fieldValue= "-23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "9", fieldValue= "-11"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "10", fieldValue= "-21"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "11", fieldValue= "24"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "12", fieldValue= "41"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "13", fieldValue= "32"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "14", fieldValue= "23"  }
+            //}, "#FF9D54");
+            //brokenLine.yTitle = "(鈩�)";
+            //brokenLine.xTitle = "";
+            ////if (curQueryType != "hour")
+            ////{
+            ////    brokenLine.xTitle = Language.StringByID(StringId.Date);
+            ////}
+            //var opString = brokenLine.InitOption();
+
+            //    myEchartsView_Line.ShowWithOption(opString);
+
+#endif
+            LoadMothed_GetHistoryData();
+        }
+
+        /// <summary>
+        /// 璇诲彇鍘嗗彶鏁版嵁
+        /// </summary>
+        void LoadMothed_GetHistoryData()
+        {
+
+            var loadPage = new Loading()
+            {
+                LodingBackgroundColor = 0x88888888,
+            };
+            bodyView.AddChidren(loadPage);
+
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Start(Language.StringByID(StringId.PleaseWait));
+                    });
+
+                    var revertObj = new HttpServerRequest().GetSensorHistory("day_hour", functionId, curQueryType,time);
+                    if (revertObj != null)
+                    {
+                        if (revertObj.Code == StateCode.SUCCESS)
+                        {
+                            var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<EnvironmentalSensorHistor>>(revertObj.Data.ToString());
+
+                            List<string> vs = new List<string>();
+                            if (brokenLine.YvalueText == "")
+                            {
+                                foreach (var data in revertData)
+                                {
+                                    vs.Add(data.fieldName);
+                                }
+                                brokenLine.InitXdataText(vs);
+                            }
+                            //if (sr.GetAttribute("ydata") == null)
+                            //{
+                            //    sr.attributes.Add(new FunctionAttributes() { key = "ydata" });
+                            //}
+                            //sr.SetAttrState("ydata",
+                            brokenLine.InitYdataText("", revertData, "#FF9D54");// + ",");
+                        }
+                    }
+                    brokenLine.yTitle = Language.StringByID(StringId.Uint);
+                    if(curQueryType == "room_temp")
+                    {
+                        brokenLine.yTitle += ":掳C";
+                    }
+                    else
+                    {
+                        brokenLine.yTitle += ":%";
+                    }
+                    brokenLine.xTitle = Language.StringByID(StringId.timeMode);
+                    //if (curQueryType != "hour")
+                    //{
+                    //    brokenLine.xTitle = Language.StringByID(StringId.Date);
+                    //}
+                    var opString = brokenLine.InitOption();
+
+                    Application.RunOnMainThread(() =>
+                    {
+                        myEchartsView_Line.ShowWithOption(opString);
+                    });
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log($"sensor history error : {ex.Message}");
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Hide();
+                    });
+                }
+            })
+            { IsBackground = true }.Start();
+        }
+
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacHistoryChoosePage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacHistoryChoosePage.cs
new file mode 100644
index 0000000..d9514ef
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacHistoryChoosePage.cs
@@ -0,0 +1,108 @@
+锘縰sing System;
+using HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+namespace HDL_ON.UI
+{
+    /// <summary>
+    /// 娓╂帶鍣ㄥ巻鍙叉暟鎹樉绀洪�夋嫨鐣岄潰
+    /// </summary>
+    public class CacHistoryChoosePage : FrameLayout
+    {
+        FrameLayout bodyView;
+        Function device;
+        public CacHistoryChoosePage(Function function)
+        {
+            device = function;
+            bodyView = this;
+        }
+
+        public void InitView()
+        {
+            new TopViewDiv(bodyView, Language.StringByID(StringId.Data)).LoadTopView();
+            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+
+            FrameLayout tempView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(64),
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            bodyView.AddChidren(tempView);
+
+            Button btnTempRight = new Button()
+            {
+                X = Application.GetRealWidth(339),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetMinRealAverage(16),
+                Height = Application.GetMinRealAverage(16),
+                UnSelectedImagePath = "Public/Right.png",
+            };
+            tempView.AddChidren(btnTempRight);
+
+            Button btnTempLine = new Button()
+            {
+                Y = Application.GetRealHeight(49),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(1),
+                BackgroundColor = CSS_Color.DividingLineColor
+            };
+            tempView.AddChidren(btnTempLine);
+
+            Button btnTempName = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.TemperatureStatistics
+            };
+            tempView.AddChidren(btnTempName);
+            btnTempName.MouseUpEventHandler = (sender, e) => {
+                var page = new CacWeekHistoryPage(device, "room_temp");
+                MainPage.BasePageView.AddChidren(page);
+                page.InitView();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
+
+
+            FrameLayout humidityView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(64 + 50),
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            bodyView.AddChidren(humidityView);
+
+            Button btnHumidityRight = new Button()
+            {
+                X = Application.GetRealWidth(339),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetMinRealAverage(16),
+                Height = Application.GetMinRealAverage(16),
+                UnSelectedImagePath = "Public/Right.png",
+            };
+            humidityView.AddChidren(btnHumidityRight);
+
+            Button btnHumidityName = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.HumidityStatistics
+            };
+            humidityView.AddChidren(btnHumidityName);
+            btnHumidityName.MouseUpEventHandler = (sender, e) => {
+                var page = new CacWeekHistoryPage(device, "room_humidity");
+                MainPage.BasePageView.AddChidren(page);
+                page.InitView();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
+
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacWeekHistoryPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacWeekHistoryPage.cs
new file mode 100644
index 0000000..1f5553b
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacWeekHistoryPage.cs
@@ -0,0 +1,424 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.DAL.Server;
+using HDL_ON.Entity;
+using HDL_ON.Stan;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI
+{
+    public class CacWeekHistoryPage : FrameLayout
+    {
+
+        CacWeekHistoryPage bodyView;
+            HorizontalScrolViewLayout dateHorView;
+        Function device;
+        /// <summary>
+        /// 鏁版嵁鏄剧ず绫诲瀷
+        /// room_temp 娓╁害
+        /// room_humidity 婀垮害
+        /// </summary>
+        string showType;
+            Dictionary<string, double> dataDic = new Dictionary<string, double>();
+        public CacWeekHistoryPage(Function device,string type)
+        {
+            bodyView = this;
+            this.device = device;
+            showType = type;
+            BackgroundColor = CSS_Color.BackgroundColor;
+        }
+
+        public void InitView()
+        {
+            if (showType == "room_temp")
+            {
+                new TopViewDiv(bodyView, Language.StringByID(StringId.Temp)).LoadTopView();
+            }
+            else
+            {
+                new TopViewDiv(bodyView, Language.StringByID(StringId.Humidity)).LoadTopView();
+            }
+
+
+
+            InitContentView();
+        }
+
+
+        private void InitContentView()
+        {
+            FrameLayout contentView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(80),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(482),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(5)
+            };
+            bodyView.AddChidren(contentView);
+
+            Button btnTitle = new Button()
+            {
+                Height = Application.GetRealHeight(60),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextAlignment = TextAlignment.Center,
+            };
+            if (showType == "room_temp")
+            {
+                btnTitle.Text = "鏈�杩�7澶╂瘡澶╁钩鍧囧鍐呮俯搴︾粺璁″浘";
+            }
+            else
+            {
+                btnTitle.Text = "鏈�杩�7澶╂瘡澶╁钩鍧囧鍐呮箍搴︾粺璁″浘";
+            }
+            contentView.AddChidren(btnTitle);
+
+            FrameLayout dataView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(39),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(293),
+                Height = Application.GetRealHeight(345 + 30),
+            };
+            contentView.AddChidren(dataView);
+
+            Button btnUnit = new Button()
+            {
+                Height = Application.GetRealHeight(15 + 30),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = 0xFF43425D,
+                TextSize = 8,
+            };
+            if (showType == "room_temp")
+            {
+                btnUnit.Text = Language.StringByID(StringId.Uint) + "锛氣剝";
+            }
+            else
+            {
+                btnUnit.Text = Language.StringByID(StringId.Uint) + "%";
+            }
+            dataView.AddChidren(btnUnit);
+
+#if DEBUG
+            //dataDic.Add("0201", 49);
+            //dataDic.Add("0202", 20);
+            //dataDic.Add("0203", 10);
+            //dataDic.Add("0204", 49);
+            //dataDic.Add("0205", 20);
+            //dataDic.Add("0206", 20);
+            //dataDic.Add("0207", 48);
+
+            //dataDic.Add("0201", -20);
+            //dataDic.Add("0202", -20);
+            //dataDic.Add("0203", -20);
+            //dataDic.Add("0204", -48);
+            //dataDic.Add("0205", -20);
+            //dataDic.Add("0206", -20);
+            //dataDic.Add("0207", -20);
+#endif
+
+            DataItemView dataShowView = new DataItemView("0",360);
+            //dataShowView.Height = Application.GetRealHeight(360);
+            dataShowView.Y = Application.GetRealHeight(30);
+
+            List<string> items = new List<string>()
+            {
+                "100","90","80","70","60","50","40","30","20","10","0"
+            };
+            if (showType == "room_temp")
+            {
+                items = new List<string>()
+                {
+                    "50","40","30","20","10","0","-10","-20","-30","-40","-50"
+                };
+            }
+            int index = 0;
+            foreach (var item in items)
+            {
+                DataItemView dataItemView;
+                if (item == "0" )
+                {
+                    dataItemView = dataShowView;
+                    index++;
+                }
+                else
+                {
+                    dataItemView = new DataItemView(item,30);
+                    dataItemView.Y = ++index * Application.GetRealHeight(30) + Application.GetRealHeight(15);
+                }
+                dataItemView.InitView(showType == "room_temp");
+                dataView.AddChidren(dataItemView);
+            }
+            dateHorView = new HorizontalScrolViewLayout()
+            {
+                X = Application.GetRealWidth(48),
+                Y = dataView.Bottom,// - Application.GetRealHeight(19),
+                Width = Application.GetRealWidth(267),
+                Height = Application.GetRealHeight(26),
+            };
+            contentView.AddChidren(dateHorView);
+
+            Button btnTip = new Button()
+            {
+                Y = contentView.Bottom + Application.GetRealHeight(28),
+                Height = Application.GetRealHeight(20),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+                TextAlignment = TextAlignment.Center,
+                Text = "*鍙�氳繃鐐瑰嚮鏌卞舰鍥炬煡鐪嬪綋澶�24灏忔椂娓╁害缁熻"
+            };
+            bodyView.AddChidren(btnTip);
+
+
+            new System.Threading.Thread(() =>
+            {
+
+                var revertObj = new HttpServerRequest().GetSensorHistory("week", device.deviceId, showType);
+                if (revertObj.Code == StateCode.SUCCESS)
+                {
+                    var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<EnvironmentalSensorHistor>>(revertObj.Data.ToString());
+                    foreach (var reObj in revertData)
+                    {
+                        double value = 0;
+                        try
+                        {
+                            value = Convert.ToDouble(reObj.fieldValue);
+                        }
+                        catch { }
+                        dataDic.Add(reObj.time, value);
+                    }
+                    Application.RunOnMainThread(() =>
+                    {
+                        RefrshDataView(dataDic, dataShowView);
+                        RefreshXtext();
+                    });
+
+                }
+            })
+            { IsBackground = true }.Start();
+        }
+
+        void RefreshXtext()
+        {
+            dateHorView.RemoveAll();
+
+            foreach (var dic in dataDic)
+            {
+                FrameLayout dateView = new FrameLayout()
+                {
+                    Width = Application.GetRealWidth(39),
+                    Height = Application.GetRealHeight(26),
+                };
+                dateHorView.AddChidren(dateView);
+
+                Button btnLineh = new Button()
+                {
+                    Width = 1,
+                    Height = Application.GetRealHeight(4),
+                    Gravity = Gravity.CenterHorizontal,
+                    BackgroundColor = 0xFFDBDBDB
+                };
+                dateView.AddChidren(btnLineh);
+
+                Button btnDate = new Button()
+                {
+                    Y = Application.GetRealHeight(12),
+                    Height = Application.GetRealHeight(14),
+                    TextColor = 0xFF43425D,
+                    TextSize = 10,
+                    Text = dic.Key,
+                };
+                try
+                {
+                    string[] strs = dic.Key.Split(@"/");
+                    btnDate.Text = strs[1] + "/" + strs[2];
+                }
+                catch { }
+                dateView.AddChidren(btnDate);
+            }
+
+        }
+
+
+        void RefrshDataView(Dictionary<string,double> dataDic, FrameLayout dataShowView)
+        {
+            int valueIndex = 0;
+            foreach (var data in dataDic)
+            {
+                ColumnarView cv = new ColumnarView(device.deviceId,showType, data.Key, data.Value);
+                cv.X = Application.GetRealWidth(valueIndex * 38 + 25);
+                cv.InitView();
+                dataShowView.AddChidren(cv);
+                cv.Clicker();
+
+
+                valueIndex++;
+            }
+        }
+
+
+
+    }
+
+    class DataItemView : FrameLayout
+    {
+        string value;
+        Button btnLine;
+        int height;
+        public DataItemView(string value,int height)
+        {
+            this.value = value;
+            Width = Application.GetRealWidth(293);
+            this.height = height;
+            Height = Application.GetRealHeight(height);
+        }
+
+        public void InitView(bool isTemp) {
+
+            Button btnValue = new Button()
+            {
+                Width = Application.GetRealWidth(18),
+                Height = Application.GetRealHeight(30),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = 0xFF43425D,
+                TextSize = 8,
+                Text = value
+            };
+            AddChidren(btnValue);
+
+            btnLine = new Button()
+            {
+                X = Application.GetRealWidth(26),
+                Width = Application.GetRealWidth(267),
+                Height = 1,
+                BackgroundColor = CSS_Color.DividingLineColor,
+            };
+            if (isTemp)
+            {
+                btnLine.Gravity = Gravity.CenterVertical;
+                btnValue.Gravity = Gravity.CenterVertical;
+            }
+            else
+            {
+                if (height == 360)
+                {
+                    btnValue.Y = Application.GetRealHeight(height - 45);
+                }
+                else
+                {
+                    btnLine.Gravity = Gravity.CenterVertical;
+                }
+                btnLine.Y = Application.GetRealHeight(height - 30);
+            }
+            AddChidren(btnLine);
+
+
+
+
+
+        }
+
+    }
+
+    class ColumnarView : VerticalScrolViewLayout
+    {
+        string functionId;
+        string time;
+        string type;
+        double value;
+        string valueText;
+        /// <summary>
+        /// 鏂瑰悜锛氬悜涓娿�佸悜涓�
+        /// </summary>
+        bool isUpward;
+        Button btnValue;
+        Button btnValueText;
+
+
+        public ColumnarView(string functionId,string type, string key, double value)
+        {
+            this.functionId = functionId;
+            this.type = type;
+            time = key;
+            this.isUpward = value >= 0;
+            valueText = value.ToString();
+            if (isUpward)
+            {
+                this.value = value;
+            }
+            else
+            {
+                this.value = value * -1;
+            }
+            Width = Application.GetRealWidth(39);
+            Height = Application.GetRealHeight((int)(value * 3 + 30));
+        }
+
+        public void InitView()
+        {
+            int yValue = 0;
+            btnValue = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Height = Application.GetRealHeight((int)(value * 3)),
+                Width = Application.GetRealWidth(16),
+                BackgroundColor = 0xFFFF9D54,
+            };
+
+            btnValueText = new Button()
+            {
+                Height = Application.GetRealHeight(30),
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                TextColor = 0xFF43425D,
+                Text = valueText,
+            };
+            if(type == "room_temp")
+            {
+                btnValueText.Text += "鈩�";
+                if (isUpward)
+                {
+                    yValue = (int)(150 - value * 3);
+                    yValue = yValue > 0 ? yValue : 0;
+                    Y = Application.GetRealHeight(yValue+1);
+                    AddChidren(btnValueText);
+                    AddChidren(btnValue);
+                }
+                else
+                {
+                    Y = Application.GetRealHeight(180);
+                    AddChidren(btnValue);
+                    AddChidren(btnValueText);
+                }
+            }
+            else
+            {
+                yValue = (int)(360 -30- 30 - value * 3);
+                Y = Application.GetRealHeight(yValue+1);
+                AddChidren(btnValueText);
+                AddChidren(btnValue);
+                btnValueText.Text += "%";
+            }
+        }
+
+        public void Clicker()
+        {
+            btnValue.MouseUpEventHandler = (sender, e) =>
+            {
+                var page = new CacDayHistoryPage(functionId,type, time);
+                MainPage.BasePageView.AddChidren(page);
+                page.InitView();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+            btnValueText.MouseUpEventHandler = (sender, e) =>
+            {
+                var page = new CacDayHistoryPage(functionId,type, time);
+                MainPage.BasePageView.AddChidren(page);
+                page.InitView();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+        }
+    }
+}
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/EnvironmentalSensorPage.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
index 2d25afd..75388ce 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
@@ -955,5 +955,10 @@
         /// <summary>
         /// </summary>
         public string fieldValue { get; set; }
+
+        /// <summary>
+        /// 鏃堕棿
+        /// </summary>
+        public string time { get; set; }
     }
 }
\ No newline at end of file
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/SiriIntents/SiriIntents.csproj b/SiriIntents/SiriIntents.csproj
index 45c6d61..a36210c 100644
--- a/SiriIntents/SiriIntents.csproj
+++ b/SiriIntents/SiriIntents.csproj
@@ -44,7 +44,6 @@
     <MtouchArch>ARM64</MtouchArch>
     <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
     <MtouchVerbosity></MtouchVerbosity>
-    <CodesignProvision>OnProSiri220307-1-Hoc</CodesignProvision>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
     <DebugType>pdbonly</DebugType>

--
Gitblit v1.8.0