From a3dfbcd5218270f9a75e6e32807b08215270b657 Mon Sep 17 00:00:00 2001
From: wxr <wxr@hdlchina.com.cn>
Date: 星期三, 11 九月 2024 11:48:23 +0800
Subject: [PATCH] Merge branch 'feature/v2.5_极光推送' into feature/V2.6.0_google

---
 SiriIntents/SiriIntents.csproj                                                             |    6 
 HDL-ON_Android/Assets/Language.ini                                                         |  109 
 HDL_ON/UI/UI2/FuntionControlView/Acst/InverterJinmaoHistroyPage.cs                         | 1561 +++++++++
 DLL/Linphone/iOS/Shared.IOS.HDLLinphoneSDK.dll                                             |    0 
 HDL-ON_iOS/HDL-ON_iOS.csproj                                                               |   63 
 HDL_ON/Common/ApiUtlis.cs                                                                  |    3 
 HDL_ON/UI/UI2/2-Classification/RoomPage.cs                                                 |    3 
 HDL_ON/Entity/Function/InverterJinmao.cs                                                   |  123 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png   |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoIcon_Coal.png  |    0 
 HDL_ON/HDL_ON.projitems                                                                    |    7 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown100.png          |    0 
 HDL_ON/Entity/Function/Sensor.cs                                                           |    8 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconRun.png                        |    0 
 HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainDreamPage.cs                               |   27 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconDischarge.png                 |    0 
 HDL-ON_iOS/Resources/oldphone_mono.wav                                                     |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault.png                 |    0 
 HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs                                     |   10 
 HDL-ON_iOS/Resources/ic_esvideo_on_hangup_all.png                                          |    0 
 HDL_ON/Entity/Enumerative/MyEnum.cs                                                        |    4 
 HDL_ON/Entity/Room.cs                                                                      |    2 
 HDL_ON/UI/UI0-Public/PublicAssmebly.cs                                                     |  305 -
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg100.png              |    0 
 SiriIntents/Server/HttpUtil.cs                                                             |    2 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_Histogram.cs           |  226 +
 HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubHistoryPage.cs                                |  101 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs                                        |   14 
 HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs                           |    3 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationIcon.png        |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png    |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/PreIcon.png                      |    0 
 HDL_ON/UI/UI1-Login/LoginPageBLL.cs                                                        |    2 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/grey/PowerOffIcon.png                         |    0 
 HDL_ON/Entity/DB_ResidenceData.cs                                                          |   14 
 HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/InverterJinmaoFunctionBg.png           |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EnergyStorageStatusBg.png            |    0 
 HDL_ON/DAL/DriverLayer/Control_Udp.cs                                                      |    7 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_1.png  |    0 
 HDL_ON/UI/UI0-Public/TopViewDiv.cs                                                         |   27 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown100.png           |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/PreIcon.png                       |    0 
 HDL_ON/Entity/Function/WaterHeaterJinmao.cs                                                |   75 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_1.png    |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown.png              |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_True.png                 |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs                                       |   31 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvBgRun.png                          |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvBgDischarge.png                    |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/RoomEditPageBLL.cs                           |    4 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvBgDischarge.png                   |    0 
 HDL_ON/UI/UI2/FuntionControlView/Acst/WaterHeaterJinmaoPage.cs                             | 1380 ++++++++
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_1.png |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png                |    0 
 HDL-ON_iOS/Resources/ic_esvideo_on_unlock_select.png                                       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoBg_Coal.png   |    0 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs                                         |    9 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconRun.png                       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconDischarge.png                  |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoBg_Coal.png    |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconShutdown.png                  |    0 
 HDL-ON_iOS/AppDelegate.cs                                                                  |   88 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg.png                 |    0 
 HDL-ON_Android/LeChengVideoActivity.cs                                                     |    1 
 HDL-ON_iOS/Resources/ic_esvideo_on_takephoto_unselect.png                                  |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png |    0 
 HDL-ON_iOS/Resources/Language.ini                                                          |  109 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationBg.png          |    0 
 HDL-ON_iOS/Resources/ic_esvideo_on_answer.png                                              |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png               |    0 
 HDL_ON/UI/UI1-Login/RegisterPageBLL.cs                                                     |    3 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs                         |   64 
 HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubPage.cs                                       |    7 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs         |    2 
 HDL_ON/DAL/DriverLayer/Control.cs                                                          |   55 
 SiriIntentsUI/SiriIntentsUI.csproj                                                         |    6 
 DLL/Linphone/Android/Shared.Droid.HDLLinphone.dll                                          |    0 
 HDL-ON_iOS/Resources/ic_esvideo_on_unlock_unselect.png                                     |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg.png             |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_True.png                |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconFault.png                      |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/AddRoom/AddRoomPage.cs                       |    4 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationBg.png         |    0 
 HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs                                    |  253 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconCharg.png                     |    0 
 HDL_ON/Common/FileUtlis.cs                                                                 |    2 
 HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs                             |   10 
 HDL_ON/UI/UI1-Login/RegisterPage.cs                                                        |   24 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png              |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/NextIcon.png                      |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic.png                 |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconCharg.png                      |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconFault.png                     |    0 
 HDL_ON/DAL/Server/HttpServerRequest.cs                                                     |   15 
 HDL_ON/UI/UI2/FuntionControlView/Acst/InverterJinmaoPage.cs                                | 1541 +++++++++
 HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs                        |   70 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/NextIcon.png                     |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconShutdown.png                   |    0 
 HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs                          |    2 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionIcon.png       |    0 
 HDL_ON/UI/UI0-Public/AppUnlockPage.cs                                                      |  811 ++--
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg.png                |    0 
 HDL-ON_Android/HDL-ON_Android.csproj                                                       |   47 
 HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs                                |  169 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png             |    0 
 HDL-ON_iOS/Info.plist                                                                      |    4 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/TempBg.png                       |    0 
 HDL_ON/Common/HDLCommon.cs                                                                 |    5 
 HDL_ON/UI/UI1-Login/LoginPage.cs                                                           |  240 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_1.png   |    0 
 HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs                                    |    1 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg100.png           |    0 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacHistoryChoosePage.cs                      |   12 
 HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/TemperatureView.cs                       |    7 
 HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs                                           |    9 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/InverterJinmaoFunctionBg.png            |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png    |    0 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs           |   28 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EnergyStorageStatusBg.png           |    0 
 HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs                                       |  109 
 HDL-ON_iOS/Other/SoundPlayer.cs                                                            |   62 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg.png              |    0 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacWeekHistoryPage.cs                        |   47 
 HDL_ON/Entity/Function/Function.cs                                                         |   23 
 HDL_ON/DAL/Server/HttpUtil.cs                                                              |    2 
 HDL_ON/Common/UserInfo.cs                                                                  |    2 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg100.png          |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png   |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png  |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconFault.png                      |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_False.png                |    0 
 HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs                                                  |   41 
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                                                       |  182 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic.png                |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/TempBg.png                        |    0 
 HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs                             |    8 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionBg.png        |    0 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_BrokenLine.cs          |    2 
 HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs                 |    2 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionIcon.png      |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_False.png               |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg100.png             |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault.png                |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png  |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionBg.png         |    0 
 HDL-ON_Android/SplashActivity.cs                                                           |    1 
 HDL-ON_iOS/Resources/ic_esvideo_on_takephoto_select.png                                    |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault100.png              |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat_On.png             |    0 
 HDL-ON_iOS/Resources/ic_esvideo_on_hangup.png                                              |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconFault.png                     |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat_On.png            |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvBgRun.png                         |    0 
 HDL_ON/UI/MainPage.cs                                                                      |   18 
 HDL-ON_Android/Application.cs                                                              |    4 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationIcon.png       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconStandby.png                    |    0 
 HDL-ON_iOS/Resources/ic_esvideo_on_back.png                                                |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconStandby.png                   |    0 
 HDL_ON/UI/UI2/FuntionControlView/Music/View/TopView.cs                                     |   22 
 HDL_ON/Entity/FunctionList.cs                                                              |   66 
 HDL_ON/UI/UI1-Login/SelectServerDialog.cs                                                  |  103 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoIcon_Coal.png |    0 
 HDL_ON/DAL/Server/NewAPI.cs                                                                |    6 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown.png             |    0 
 HDL_ON/UI/UI2/FuntionControlView/Acst/WetarHeaterJinmaoHistoryPage.cs                      | 1592 +++++++++
 HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault100.png             |    0 
 HDL_ON/Common/R.cs                                                                         |   27 
 HDL-ON_Android/Assets/agconnect-services.json                                              |  121 
 HDL-ON_Android/Other/JPush/JPushReceiver.cs                                                |   62 
 171 files changed, 8,699 insertions(+), 1,518 deletions(-)

diff --git a/DLL/Linphone/Android/Shared.Droid.HDLLinphone.dll b/DLL/Linphone/Android/Shared.Droid.HDLLinphone.dll
index 09f4a5f..7a4e2a1 100644
--- a/DLL/Linphone/Android/Shared.Droid.HDLLinphone.dll
+++ b/DLL/Linphone/Android/Shared.Droid.HDLLinphone.dll
Binary files differ
diff --git a/DLL/Linphone/iOS/Shared.IOS.HDLLinphoneSDK.dll b/DLL/Linphone/iOS/Shared.IOS.HDLLinphoneSDK.dll
index 624d470..40b2ada 100644
--- a/DLL/Linphone/iOS/Shared.IOS.HDLLinphoneSDK.dll
+++ b/DLL/Linphone/iOS/Shared.IOS.HDLLinphoneSDK.dll
Binary files differ
diff --git a/HDL-ON_Android/Application.cs b/HDL-ON_Android/Application.cs
index e0d59a4..0aec7bf 100644
--- a/HDL-ON_Android/Application.cs
+++ b/HDL-ON_Android/Application.cs
@@ -106,7 +106,7 @@
                 multicast.Acquire();
 
                 //鍚庡彴鍥炲埌鍓嶅彴
-                new HDL_ON.UI.AppUnlockPage().LoadPage();
+                //new HDL_ON.UI.AppUnlockPage().LoadPage();
                 
             }
 
@@ -122,7 +122,7 @@
                 BusSocketStop();
                 multicast.Release();
                 //杩涘叆鍚庡彴
-                UserInfo.Current.unlockTime = DateTime.Now;
+                //UserInfo.Current.unlockTime = DateTime.Now;
             }
         }
 
diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index 96e7893..0a74118 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -685,7 +685,12 @@
 698=Break
 699=Choose automation
 700=Add execution action
-
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
 
 
 
@@ -2086,8 +2091,12 @@
 698=鏂紑
 699=閫夋嫨鑷姩鍖�
 700=娣诲姞鎵ц鐩爣
-
-
+701=杩炴帴鏂瑰紡
+702=閰嶇疆宸茬粡鏇存柊锛岄噸鍚箣鍚庣敓鏁堛��
+703=涓浗鐢ㄦ埛閫夋嫨
+704=闈炰腑鍥界敤鎴烽�夋嫨
+705=璇烽�夋嫨鏈嶅姟鍣�
+706=鏂拌兘婧�
 
 
 
@@ -3485,8 +3494,12 @@
 698=Break
 699=Choose automation
 700=Add execution action
-
-
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
 
 
 
@@ -4879,6 +4892,13 @@
 698=Break
 699=Choose automation
 700=Add execution action
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
+
 
 
 
@@ -6258,7 +6278,12 @@
 698=Break
 699=Choose automation
 700=Add execution action
-
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
 
 
 
@@ -7593,6 +7618,78 @@
 634=袪械泻芯屑械薪写芯胁邪薪芯
 635=袩芯褌芯褔薪懈泄 泻芯谢褨褉
 636=效懈褋谢芯 蟹薪邪褔械薪薪褟 泻芯谢褜芯褉褍 褋泻谢邪写邪褦褌褜褋褟 蟹 6 褑懈褎褉 (褋泻谢邪写邪褦褌褜褋褟 蟹 褔懈褋褌懈褏 褔懈褋械谢/褑懈褎褉+谢褨褌械褉)
+637=Delete
+638=User Management
+639=Closed
+640=Open
+641=Automatic Coloring
+642=LED Banner
+643=Unlock method
+644=Clear
+645=Digital password
+646=Card/NFC key
+647=Face key
+648=Delete user
+649=Activity detection
+650=Do you want to delete this user?
+651=Successfully deleted
+652=Unlock settings
+653=Face unlock settings
+654=Press the button to unlock twice
+655=To unlock indoors, press the unlock button twice to prevent children or pets from accidentally touching the lock
+656=Child lock mode
+657=After opening, the door cannot be unlocked through buttons, only the emergency knob can be used to unlock
+658=Anti lock mode
+659=After opening, ordinary users cannot unlock, while the main user can still unlock. After opening the door with the indoor button, the anti lock mode will automatically close
+660=Deployment mode
+661=It is recommended to change the mode when leaving home for a long time. It can also be activated by pressing the blue button that lights up on the door lock keyboard after closing the door
+662=Audio settings
+663=Battery management
+664=Face unlocking
+665=After opening, the device can perform facial recognition and unlock
+666=Trigger mode
+667=Face entry help
+668=Manual triggering
+669=Automatic triggering
+670=After entering the detection range, the door lock will automatically recognize the face and unlock it
+671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
+672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+678=Current user data has been cleared, about to return to the previous page.
+679=Group control
+680=Colorful switch
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
+686=Total
+687=A-phase electricity data
+688=B-phase electricity data
+689=C-phase electricity data
+690=Voltage
+691=Current
+692=Real-time power
+693=Total electricity consumption (KW路h)
+694=Hourly electricity consumption in the past 24 hours
+695=Daily data of the past month
+696=Monthly data of the past year
+697=prompt: The closer the starting color selection is to the edge of the color ring, the more obvious the dazzling effect. The closer to the white center, the less noticeable the dazzling effect.
+698=Break
+699=Choose automation
+700=Add execution action
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
+
+
 
 
 
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg.png
new file mode 100644
index 0000000..be81759
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg100.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg100.png
new file mode 100644
index 0000000..6ab90fe
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg100.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg.png
new file mode 100644
index 0000000..9220a3e
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg100.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg100.png
new file mode 100644
index 0000000..94e8d15
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg100.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault.png
new file mode 100644
index 0000000..2340d15
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault100.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault100.png
new file mode 100644
index 0000000..1ae7e24
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault100.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown.png
new file mode 100644
index 0000000..f100885
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown100.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown100.png
new file mode 100644
index 0000000..cf8f972
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown100.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionBg.png
new file mode 100644
index 0000000..601dc35
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionIcon.png
new file mode 100644
index 0000000..6294feb
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationBg.png
new file mode 100644
index 0000000..e5b8d1e
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationIcon.png
new file mode 100644
index 0000000..00d0d77
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EnergyStorageStatusBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EnergyStorageStatusBg.png
new file mode 100644
index 0000000..40e3ca0
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EnergyStorageStatusBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconCharg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconCharg.png
new file mode 100644
index 0000000..e307f25
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconCharg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconDischarge.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconDischarge.png
new file mode 100644
index 0000000..15ae7f0
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconDischarge.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconFault.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconFault.png
new file mode 100644
index 0000000..699d4ee
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconFault.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconShutdown.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconShutdown.png
new file mode 100644
index 0000000..e009295
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/EsIconShutdown.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvBgDischarge.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvBgDischarge.png
new file mode 100644
index 0000000..b00cac3
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvBgDischarge.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvBgRun.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvBgRun.png
new file mode 100644
index 0000000..4fe6422
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvBgRun.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconFault.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconFault.png
new file mode 100644
index 0000000..5b2ec16
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconFault.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconRun.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconRun.png
new file mode 100644
index 0000000..4b27c5c
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconRun.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconStandby.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconStandby.png
new file mode 100644
index 0000000..0f62825
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/PvIconStandby.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoBg_Coal.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoBg_Coal.png
new file mode 100644
index 0000000..e777f14
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoBg_Coal.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoIcon_Coal.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoIcon_Coal.png
new file mode 100644
index 0000000..b7b59ec
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoIcon_Coal.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_False.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_False.png
new file mode 100644
index 0000000..7ef209a
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_False.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_True.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_True.png
new file mode 100644
index 0000000..fe2947a
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_True.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic.png
new file mode 100644
index 0000000..f8aedd0
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png
new file mode 100644
index 0000000..b4c83f5
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png
new file mode 100644
index 0000000..f8820e4
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat_On.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat_On.png
new file mode 100644
index 0000000..a2f353d
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat_On.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/NextIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/NextIcon.png
new file mode 100644
index 0000000..689bea6
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/NextIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/PreIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/PreIcon.png
new file mode 100644
index 0000000..4b91428
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/PreIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_1.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_1.png
new file mode 100644
index 0000000..51199ba
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_1.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png
new file mode 100644
index 0000000..1b04c61
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png
new file mode 100644
index 0000000..ad44a95
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_1.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_1.png
new file mode 100644
index 0000000..c545256
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_1.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png
new file mode 100644
index 0000000..7ce8788
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png
new file mode 100644
index 0000000..43ddc5a
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/TempBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/TempBg.png
new file mode 100644
index 0000000..8b2adca
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Acst/WaterHeater/TempBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/InverterJinmaoFunctionBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/InverterJinmaoFunctionBg.png
new file mode 100644
index 0000000..2ac2f2f
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/InverterJinmaoFunctionBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/agconnect-services.json b/HDL-ON_Android/Assets/agconnect-services.json
index 466ec39..2fe8708 100644
--- a/HDL-ON_Android/Assets/agconnect-services.json
+++ b/HDL-ON_Android/Assets/agconnect-services.json
@@ -1,47 +1,96 @@
 {
-	"agcgw_all":{
-		"CN":"connect-drcn.hispace.hicloud.com",
-		"CN_back":"connect-drcn.dbankcloud.cn",
-		"DE":"connect-dre.hispace.hicloud.com",
-		"DE_back":"connect-dre.dbankcloud.cn",
-		"RU":"connect-drru.hispace.hicloud.com",
-		"RU_back":"connect-drru.dbankcloud.cn",
-		"SG":"connect-dra.hispace.hicloud.com",
-		"SG_back":"connect-dra.dbankcloud.cn"
+	"agcgw": {
+		"backurl": "connect-drcn.hispace.hicloud.com",
+		"url": "connect-drcn.dbankcloud.cn",
+		"websocketbackurl": "connect-ws-drcn.hispace.dbankcloud.com",
+		"websocketurl": "connect-ws-drcn.hispace.dbankcloud.cn"
 	},
-	"client":{
-		"cp_id":"2850086000428177029",
-		"product_id":"736430079245970940",
-		"client_id":"703480846752957504",
-		"client_secret":"6E796F2ED36C43A87C4F7BB68680F29A15CBD7635F1D55ED004A17F2D2070D17",
-		"project_id":"736430079245970940",
-		"app_id":"104676079",
-		"api_key":"CwEAAAAAzCMOmemAwFVmnLqO8YeBY1StA3YLbXD5k/jRfW8xIga0hN85Ka9PQ4R9hj7dn0WtjVkoW9rTgusFrJhAxUE4tMGV514=",
-		"package_name":"com.hdl.onpro"
+	"agcgw_all": {
+		"CN": "connect-drcn.dbankcloud.cn",
+		"CN_back": "connect-drcn.hispace.hicloud.com",
+		"DE": "connect-dre.dbankcloud.cn",
+		"DE_back": "connect-dre.hispace.hicloud.com",
+		"RU": "connect-drru.hispace.dbankcloud.ru",
+		"RU_back": "connect-drru.hispace.dbankcloud.cn",
+		"SG": "connect-dra.dbankcloud.cn",
+		"SG_back": "connect-dra.hispace.hicloud.com"
 	},
-	"oauth_client":{
-		"client_id":"104676079",
-		"client_type":1
+	"websocketgw_all": {
+		"CN": "connect-ws-drcn.hispace.dbankcloud.cn",
+		"CN_back": "connect-ws-drcn.hispace.dbankcloud.com",
+		"DE": "connect-ws-dre.hispace.dbankcloud.cn",
+		"DE_back": "connect-ws-dre.hispace.dbankcloud.com",
+		"RU": "connect-ws-drru.hispace.dbankcloud.ru",
+		"RU_back": "connect-ws-drru.hispace.dbankcloud.cn",
+		"SG": "connect-ws-dra.hispace.dbankcloud.cn",
+		"SG_back": "connect-ws-dra.hispace.dbankcloud.com"
 	},
-	"app_info":{
-		"app_id":"104676079",
-		"package_name":"com.hdl.onpro"
+	"client": {
+		"cp_id": "2850086000428177029",
+		"product_id": "736430079245970940",
+		"client_id": "703480846752957504",
+		"client_secret": "6E796F2ED36C43A87C4F7BB68680F29A15CBD7635F1D55ED004A17F2D2070D17",
+		"project_id": "736430079245970940",
+		"app_id": "104676079",
+		"api_key": "CwEAAAAAzCMOmemAwFVmnLqO8YeBY1StA3YLbXD5k/jRfW8xIga0hN85Ka9PQ4R9hj7dn0WtjVkoW9rTgusFrJhAxUE4tMGV514=",
+		"package_name": "com.hdl.onpro"
 	},
-	"configuration_version":"3.0",
-	"appInfos":[
+	"oauth_client": {
+		"client_id": "104676079",
+		"client_type": 1
+	},
+	"app_info": {
+		"app_id": "104676079",
+		"package_name": "com.hdl.onpro"
+	},
+	"service": {
+		"analytics": {
+			"collector_url": "datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
+			"collector_url_ru": "datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com",
+			"collector_url_sg": "datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn",
+			"collector_url_de": "datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn",
+			"collector_url_cn": "datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
+			"resource_id": "p1",
+			"channel_id": ""
+		},
+		"edukit": {
+			"edu_url": "edukit.cloud.huawei.com.cn",
+			"dh_url": "edukit.cloud.huawei.com.cn"
+		},
+		"search": {
+			"url": "https://search-drcn.cloud.huawei.com"
+		},
+		"cloudstorage": {
+			"storage_url_sg_back": "https://agc-storage-dra.cloud.huawei.asia",
+			"storage_url_ru_back": "https://agc-storage-drru.cloud.huawei.ru",
+			"storage_url_ru": "https://agc-storage-drru.cloud.huawei.ru",
+			"storage_url_de_back": "https://agc-storage-dre.cloud.huawei.eu",
+			"storage_url_de": "https://ops-dre.agcstorage.link",
+			"storage_url": "https://agc-storage-drcn.platform.dbankcloud.cn",
+			"storage_url_sg": "https://ops-dra.agcstorage.link",
+			"storage_url_cn_back": "https://agc-storage-drcn.cloud.huawei.com.cn",
+			"storage_url_cn": "https://agc-storage-drcn.platform.dbankcloud.cn"
+		},
+		"ml": {
+			"mlservice_url": "ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn"
+		}
+	},
+	"region": "CN",
+	"configuration_version": "3.0",
+	"appInfos": [
 		{
-			"package_name":"com.hdl.onpro",
-			"client":{
-				"app_id":"104676079"
+			"package_name": "com.hdl.onpro",
+			"client": {
+				"app_id": "104676079"
 			},
-			"app_info":{
-				"package_name":"com.hdl.onpro",
-				"app_id":"104676079"
+			"app_info": {
+				"package_name": "com.hdl.onpro",
+				"app_id": "104676079"
 			},
-			"oauth_client":{
-				"client_type":1,
-				"client_id":"104676079"
+			"oauth_client": {
+				"client_type": 1,
+				"client_id": "104676079"
 			}
 		}
 	]
-}
\ No newline at end of file
+}
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index e2e3330..de5637e 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -187,6 +187,12 @@
     <Reference Include="Shared.Droid.HDLWidget">
       <HintPath>..\DLL\Android\Shared.Droid.HDLWidget.dll</HintPath>
     </Reference>
+    <Reference Include="Shared.Droid.JPush">
+      <HintPath>..\..\绗笁鏂瑰姛鑳絓鏋佸厜\Sdk5.4.0\2024-07-19\Shared.Droid.JPush.dll</HintPath>
+    </Reference>
+    <Reference Include="Shared.Droid.HDLLinphone">
+      <HintPath>..\DLL\Linphone\Android\Shared.Droid.HDLLinphone.dll</HintPath>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Other\JPush\JPushFirmBroadcast.cs" />
@@ -592,6 +598,47 @@
     <AndroidAsset Include="Assets\Phone\FunctionIcon\EnvirSensor\Pm10Bg.png" />
     <None Include="libs\armeabi-v7a\libjcore212.so" />
     <None Include="libs\arm64-v8a\libjcore212.so" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoBg_1.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoBg_3.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoBg_2.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\Mode_QuickHeat.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\NextIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\ModeFree_False.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\Mode_Economic.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\PreIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\Mode_QuickHeat_On.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\TempBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoIcon_3.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\Mode_Economic_On.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\ModeFree_True.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoIcon_2.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoIcon_1.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\EsIconDischarge.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\PvIconFault.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\EsIconCharg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\BatteryIconFault.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\BatteryIconDischarg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\SocialContributionInfoIcon_Coal.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\PvBgDischarge.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\PvIconStandby.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\BatteryIconShutdown.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\ElectricityConsumptionBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\SocialContributionInfoBg_Coal.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\EnergyStorageStatusBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\EsIconShutdown.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\ElectricityGenerationIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\ElectricityConsumptionIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\BatteryIconCharg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\ElectricityGenerationBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\PvBgRun.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\PvIconRun.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\EsIconFault.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\FunctionBg\AcstFunctionBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\FunctionBg\InverterJinmaoFunctionBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\BatteryIconCharg100.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\BatteryIconDischarg100.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\BatteryIconFault100.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Acst\Inverter\BatteryIconShutdown100.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidResource Include="Resources\values\colors.xml" />
diff --git a/HDL-ON_Android/LeChengVideoActivity.cs b/HDL-ON_Android/LeChengVideoActivity.cs
index 9938349..3eb1636 100644
--- a/HDL-ON_Android/LeChengVideoActivity.cs
+++ b/HDL-ON_Android/LeChengVideoActivity.cs
@@ -191,7 +191,6 @@
         /// </summary>
         public void StopTalk()
         {
-            UserInfo.Current.inCall = DateTime.MinValue;
             UserInfo.Current.inVideo = false;
             LCOpenSDK_Talk.StopTalk();
             LCOpenSDK_Talk.Listener = null;
diff --git a/HDL-ON_Android/Other/JPush/JPushReceiver.cs b/HDL-ON_Android/Other/JPush/JPushReceiver.cs
index fdd0833..3261a1a 100644
--- a/HDL-ON_Android/Other/JPush/JPushReceiver.cs
+++ b/HDL-ON_Android/Other/JPush/JPushReceiver.cs
@@ -1,31 +1,50 @@
 锘�
 using System;
-using Android.App;
 using Android.Content;
 using CN.Jpush.Android.Api;
 using CN.Jpush.Android.Service;
+using Com.Hdl.Hdllinphonesdk;
 using HDL_ON;
 using HDL_ON.DAL.Server;
 using Shared;
-using Android.OS;
 
 namespace HDL_ON_Android
 {
 
-    [BroadcastReceiver(Enabled = true, Exported = false)]
-    [Android.App.IntentFilter(new string[]
-    {
-        "cn.jpush.android.intent.RECEIVE_MESSAGE"
-    },
-    Categories = new string[]
-    {
-        "com.hdl.onpro"
-    })]
-    public class JPushReceiver : JPushMessageReceiver
+    //[BroadcastReceiver(Enabled = true, Exported = false)]
+    //[Android.App.IntentFilter(new string[]
+    //{
+    //    "cn.jpush.android.intent.RECEIVE_MESSAGE"
+    //},
+    //Categories = new string[]
+    //{
+    //    "com.hdl.onpro"
+    //})]
+
+
+    //[Android.App.Service(Enabled = true)]
+    //[Android.App.IntentFilter(
+    //    new string[] { "cn.jpush.android.intent.SERVICE_MESSAGE" },
+    //    Categories = new string[]
+    //    {
+    //        "com.hdl.onpro"
+    //    })]
+
+    [BroadcastReceiver(Enabled = true, Exported = true)]
+    [Android.App.IntentFilter(new string[] { "cn.jpush.android.intent.SERVICE_MESSAGE" }, Categories = new string[] { "com.hdl.onpro" })]
+    public class JPushReceiver : JPushMessageReceiver// JPushMessageService
     {
 
 
         private static string TAG = "JPushReceiver";
+
+        public override void OnMessage(Context p0, CustomMessage p1)
+        {
+            Console.WriteLine("鏀跺埌鏋佸厜鎺ㄩ��");
+            base.OnMessage(p0, p1);
+
+        }
+
         /// <summary>
         /// 鐢ㄦ埛鐐瑰嚮鎵撳紑浜嗛�氱煡
         /// 鐐瑰嚮閫氱煡鍥炶皟
@@ -35,7 +54,7 @@
         public override void OnNotifyMessageOpened(Context context, NotificationMessage notificationMessage)
         {
 
-            
+
             //2020-12-23 瑙e喅鐐瑰嚮閫氱煡鏍忔墦寮�涓嶄簡APP闂
             //base.OnNotifyMessageOpened(context, notificationMessage);
             OpenNotification(context, notificationMessage);
@@ -49,7 +68,7 @@
         public override void OnNotifyMessageArrived(Context context, NotificationMessage notificationMessage)
         {
             base.OnNotifyMessageArrived(context, notificationMessage);
-         
+
             var pushMes = new JPushMessageInfo()
             {
                 Title = notificationMessage.NotificationTitle,
@@ -63,14 +82,10 @@
                 pushMes.messageType = jpushExpandData.messageType;
                 pushMes.expantContent = jpushExpandData.expantContent;
                 pushMes.HomeId = jpushExpandData.homeId;
-                Utlis.WriteLine("PushMes messageType : " + pushMes.messageType);
+                Utlis.WriteLine("鏀跺埌閫氱煡鍥炶皟\r\nPushMes messageType : " + pushMes.messageType);
             }
 
-            if (!string.IsNullOrEmpty(pushMes.spk))//鑷爺鍙瀵硅闇�瑕佽褰曟椂闂村弽鍛�
-            {
-                UserInfo.Current.pushMessageInfo = pushMes;
-                UserInfo.Current.inCall = DateTime.Now;
-            }
+           
 
             Utlis.WriteLine("PushMes title : " + pushMes.Title);
             Utlis.WriteLine("PushMes message : " + pushMes.Content);
@@ -115,7 +130,6 @@
         public override void OnRegister(Context context, string p1)
         {
             base.OnRegister(context, p1);
-            Utlis.WriteLine("JPushOnRegister: " + p1);
         }
 
         /// <summary>
@@ -148,15 +162,15 @@
                 Utlis.WriteLine("PushMes extras : " + pushMes.Extras);
                 Utlis.WriteLine("PushMes HomeId : " + pushMes.HomeId);
 
-                if (Shared.Application.Activity==null)
+                if (Shared.Application.Activity == null)
                 {
-                    Intent i = new Intent(context, typeof(SplashActivity));//Intent intent=new Intent( 璧峰缁勪欢瀵硅薄 , 鐩爣 Service.class);
+                    Intent i = new Intent(context, typeof(SplashActivity));
                     i.SetFlags(ActivityFlags.NewTask);
                     context.StartActivity(i);
                 }
                 else
                 {
-                    Intent i = new Intent(context, typeof(BaseActivity));//Intent intent=new Intent( 璧峰缁勪欢瀵硅薄 , 鐩爣 Service.class);
+                    Intent i = new Intent(context, typeof(BaseActivity));
                     i.SetFlags(ActivityFlags.NewTask);
                     context.StartActivity(i);
                 }
diff --git a/HDL-ON_Android/SplashActivity.cs b/HDL-ON_Android/SplashActivity.cs
index 6741136..c1bf37a 100644
--- a/HDL-ON_Android/SplashActivity.cs
+++ b/HDL-ON_Android/SplashActivity.cs
@@ -11,7 +11,6 @@
 using CN.Jpush.Android.Api;
 //using Android.Widget;
 using HDL_ON;
-using Java.Util;
 using Shared;
 
 namespace HDL_ON_Android
diff --git a/HDL-ON_iOS/AppDelegate.cs b/HDL-ON_iOS/AppDelegate.cs
index 003de6d..737cce7 100644
--- a/HDL-ON_iOS/AppDelegate.cs
+++ b/HDL-ON_iOS/AppDelegate.cs
@@ -6,6 +6,9 @@
 using HDL_ON.UI;
 using HDL_ON.DAL.Server;
 using System.Threading.Tasks;
+using UserNotifications;
+using Other;
+using AVFoundation;
 
 namespace SharedMethod
 {
@@ -50,18 +53,12 @@
             set;
         }
 
-        //public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
-        //{
-        //    // Override point for customization after application launch.
-        //    // If not required for your application you can safely delete this method
-        //    return true;
-        //}
         public static UINavigationController rootViewController;
 
-        public static void CleanApplicationIconBadgeNumber()
-        {
-            UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
-        }
+        //public static void CleanApplicationIconBadgeNumber()
+        //{
+        //    UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
+        //}
         
         [Export("application:shouldAllowExtensionPointIdentifier:")]
         public override bool ShouldAllowExtensionPointIdentifier(UIApplication application, NSString extensionPointIdentifier)
@@ -99,14 +96,7 @@
 
             // Get previous device token
             var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");
-            //new Alert("", DeviceToken, "鍙栨秷", "纭畾").Show();
 
-            //NSDictionary test = new NSDictionary(new NSString("123"), new NSString("test"));
-            //NSError error;
-            //NSData dicD = NSJsonSerialization.Serialize(test, NSJsonWritingOptions.PrettyPrinted,out error); ;
-            //NSString str = new NSString(dicD,NSStringEncoding.UTF8);
-
-            //new Alert("", str, "鍙栨秷", "纭畾").Show();
 
             // Has the token changed?
             if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
@@ -116,19 +106,12 @@
                 // Save new device token 
                 NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
 
-                //UserInfo.Current.PushDeviceToken = DeviceToken;
-                //UserInfo.Current.PhoneName = userPhoneName;
-                //UserInfo.Current.SaveUserInfo();
                 OnAppConfig.Instance.PushDeviceToken = DeviceToken;
                 OnAppConfig.Instance.PhoneName = UIDevice.CurrentDevice.Name;
                 OnAppConfig.Instance.SaveConfig();
             }
             if (OnAppConfig.Instance.PushDeviceToken != DeviceToken)
             {
-                //string userPhoneName = UIDevice.CurrentDevice.Name;
-                //UserInfo.Current.PushDeviceToken = DeviceToken;
-                //UserInfo.Current.PhoneName = userPhoneName;
-                //UserInfo.Current.SaveUserInfo();
                 OnAppConfig.Instance.PushDeviceToken = DeviceToken;
                 OnAppConfig.Instance.PhoneName = UIDevice.CurrentDevice.Name;
                 OnAppConfig.Instance.SaveConfig();
@@ -137,34 +120,16 @@
 
         public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
         {
-            Console.WriteLine("DidReceiveRemoteNotification:" + application.ApplicationState.ToString());
-
-            Console.WriteLine("鎺ㄩ�佹秷鎭細"+userInfo);
-            //var test = new NSDictionary();
-            //test.SetNilValueForKey(new NSString("test"));
-            //NSError error;
-            //NSData dicD = NSJsonSerialization.Serialize(userInfo, NSJsonWritingOptions.PrettyPrinted, out error); ;
-            //NSString str = new NSString(dicD, NSStringEncoding.UTF8);
-            //new Alert("", str, "鍙栨秷", "纭畾").Show();
-
-            //璇诲彇鎺ㄩ�佷俊鎭�
-            UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
-
             if (userInfo == null)
             {
                 return;
             }
 
-            Console.WriteLine(userInfo);
-            //HDLCommon.Current.ShowAlert("DidReceiveRemoteNotification:" + userInfo.ToString());
-
-
-            if (application.ApplicationState == UIApplicationState.Active || application.ApplicationState == UIApplicationState.Background)
-            {
-
-                HandleNotificationMessageUserInfo(userInfo, false);
-            }
-            else
+            //if (application.ApplicationState == UIApplicationState.Active || application.ApplicationState == UIApplicationState.Background)
+            //{
+            //    HandleNotificationMessageUserInfo(userInfo, false);
+            //}
+            //else
             {
                 //Inactive
                 HandleNotificationMessageUserInfo(userInfo, false);
@@ -187,10 +152,6 @@
             {
                 Console.WriteLine("ReceivedRemoteNotification3");
             }
-
-            //string extKey1 = "PushResType"; 
-            //NSString extValue1 = userInfo.ValueForKey ((NSString)extKey1);
-
         }
 
         public override void OnResignActivation(UIApplication application)
@@ -203,7 +164,7 @@
             //    Shared.IOS.HDLFVSDK.Video.FVapplicationWillResignActive(application);
             //}
             Console.WriteLine("OnResignActivation");
-            UserInfo.Current.unlockTime = DateTime.Now;
+            //UserInfo.Current.unlockTime = DateTime.Now;
         }
 
         public override void DidEnterBackground(UIApplication application)
@@ -310,14 +271,14 @@
             AppDomain.CurrentDomain.UnhandledException += (sender, e) => {
                 if(e.ExceptionObject is Exception exception)
                 {
-                    Console.WriteLine("鏈鐞嗙殑寮傚父锛�" + exception.Message);
+                    MainPage.Log("error", "鏈鐞嗙殑寮傚父锛�" + exception.Message + "\r\nStackTrace: " + exception.StackTrace);
                 }
             };
 
             TaskScheduler.UnobservedTaskException += (sender, e) => {
                 if (e.Exception is Exception exception)
                 {
-                    Console.WriteLine("鏈鐞嗙殑寮傚父锛�" + exception.Message);
+                    MainPage.Log("error", "鏈鐞嗙殑寮傚父锛�" + exception.Message + "\r\nStackTrace: " + exception.StackTrace);
                 }
             };
             #endregion
@@ -354,10 +315,6 @@
             // check for a notification
             DealWithPushMes(launchOptions);
 
-            //if (UIApplication.SharedApplication.ApplicationIconBadgeNumber > 0)
-            //{
-            //    //RemoteInfo.Current.ReadMsgList(true);
-            //}
             try
             {
                 UMSdk.HDLUMSDK.InitUMSDKWithAppKey("61d56642e0f9bb492bbc3e72", "IOS");
@@ -366,6 +323,14 @@
             {
                 Console.WriteLine("鍚姩鍙嬬洘SDK寮傚父锛�"+ex.Message);
             }
+
+            //// 娉ㄥ唽杩涘叆鍓嶅彴鐨勯�氱煡
+            //NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.WillEnterForegroundNotification, (notification) =>
+            //{
+            //    // 鍋滄鎾斁閾冨0
+            //    UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
+            //    UNUserNotificationCenter.Current.RemoveAllDeliveredNotifications();
+            //});
 
             Console.WriteLine("FinishedLaunching");
             return true;
@@ -438,11 +403,6 @@
                     Utlis.WriteLine("PushMes title : " + pushMes.Title);
                     Utlis.WriteLine("PushMes message : " + pushMes.Content);
                     Utlis.WriteLine("PushMes extras : " + pushMes.Extras);
-                    if (!string.IsNullOrEmpty(pushMes.spk))//鑷爺鍙瀵硅闇�瑕佽褰曟椂闂村弽鍛�
-                    {
-                        UserInfo.Current.pushMessageInfo = pushMes;
-                        UserInfo.Current.inCall = DateTime.Now;
-                    }
 
                     if (bFinishedLaunching)
                     {
@@ -546,7 +506,7 @@
             HDL_ON.DAL.Mqtt.MqttClient.InitState();
 
 
-            new AppUnlockPage().LoadPage();
+            //new AppUnlockPage().LoadPage();
             UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
             HDL_ON.DriverLayer.Control.Ins.SearchLoaclGateway();
         }
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index 3747f4d..7bf23ac 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -27,7 +27,7 @@
         <MtouchDebug>true</MtouchDebug>
         <CodesignKey>iPhone Developer</CodesignKey>
         <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC"</MtouchExtraArgs>
-        <CodesignProvision>OnPro2307291-Dev</CodesignProvision>
+        <CodesignProvision>Automatic</CodesignProvision>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
         <MtouchI18n>cjk</MtouchI18n>
         <MtouchSdkVersion>17.5</MtouchSdkVersion>
@@ -61,7 +61,7 @@
         <MtouchEnableSGenConc>false</MtouchEnableSGenConc>
 <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
 <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-<CodesignProvision>0002-OnPro-240704-1-Dev</CodesignProvision>
+<CodesignProvision>0002-OnPro-240905-1-Dev</CodesignProvision>
 <MtouchSdkVersion>17.5</MtouchSdkVersion>
     </PropertyGroup>
     <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
@@ -101,9 +101,6 @@
         <Reference Include="HDL.Shared.IOS.ScanQRCode">
           <HintPath>..\DLL\IOS\HDL.Shared.IOS.ScanQRCode.dll</HintPath>
         </Reference>
-        <Reference Include="Shared.IOS.HDLLinphoneSDK">
-          <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath>
-        </Reference>
         <Reference Include="Shared.IOS.LCVideoOnSDK">
           <HintPath>..\DLL\LC\IOS\Shared.IOS.LCVideoOnSDK.dll</HintPath>
         </Reference>
@@ -124,6 +121,9 @@
         </Reference>
         <Reference Include="Aliyun.Api.LogService">
           <HintPath>..\DLL\Aliyun.Api.LogService.dll</HintPath>
+        </Reference>
+        <Reference Include="Shared.IOS.HDLLinphoneSDK">
+          <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath>
         </Reference>
     </ItemGroup>
     <ItemGroup>
@@ -517,6 +517,8 @@
         <Folder Include="Resources\Phone\FunctionIcon\Inverter\" />
         <Folder Include="Resources\Phone\FunctionIcon\Electrical\MechanicalArm\" />
         <Folder Include="Resources\Phone\FunctionIcon\GroupControl\" />
+        <Folder Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\" />
+        <Folder Include="Resources\Phone\FunctionIcon\Acst\Inverter\" />
     </ItemGroup>
     <ItemGroup>
         <InterfaceDefinition Include="LaunchScreen.storyboard" />
@@ -545,6 +547,7 @@
         <Compile Include="Other\JLCountrycode.cs" />
         <Compile Include="BlueWifi.cs" />
         <Compile Include="Other\SkipControl.cs" />
+        <Compile Include="Other\SoundPlayer.cs" />
     </ItemGroup>
     <ItemGroup>
       <BundleResource Include="Resources\Phone\LoginIcon\ShowPasswordIcon.png" />
@@ -1794,6 +1797,56 @@
       <BundleResource Include="Resources\Phone\LogicIcon\electricaltvhisense.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\EnvirSensor\Pm10Bg.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\EnvirSensor\Pm10Icon.png" />
+      <BundleResource Include="Resources\oldphone_mono.wav" />
+      <BundleResource Include="Resources\ic_esvideo_on_answer.png" />
+      <BundleResource Include="Resources\ic_esvideo_on_back.png" />
+      <BundleResource Include="Resources\ic_esvideo_on_hangup_all.png" />
+      <BundleResource Include="Resources\ic_esvideo_on_hangup.png" />
+      <BundleResource Include="Resources\ic_esvideo_on_takephoto_select.png" />
+      <BundleResource Include="Resources\ic_esvideo_on_takephoto_unselect.png" />
+      <BundleResource Include="Resources\ic_esvideo_on_unlock_select.png" />
+      <BundleResource Include="Resources\ic_esvideo_on_unlock_unselect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\grey\PowerOffIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\ModeFree_False.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\TempBg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\Mode_Economic_On.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\Mode_QuickHeat.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoBg_1.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoBg_2.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoBg_3.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoIcon_1.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoIcon_2.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\SocialContributionInfoIcon_3.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\NextIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\PreIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\ElectricityConsumptionBg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\ElectricityGenerationBg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\ElectricityConsumptionIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\ElectricityGenerationIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\BatteryIconCharg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\BatteryIconDischarg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\BatteryIconFault.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\BatteryIconShutdown.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\EsIconCharg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\EsIconDischarge.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\EsIconFault.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\EsIconShutdown.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\PvBgDischarge.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\PvBgRun.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\PvIconFault.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\PvIconRun.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\PvIconStandby.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\SocialContributionInfoBg_Coal.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\SocialContributionInfoIcon_Coal.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\EnergyStorageStatusBg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\Mode_Economic.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\Mode_QuickHeat_On.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\WaterHeater\ModeFree_True.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\FunctionBg\InverterJinmaoFunctionBg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\BatteryIconCharg100.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\BatteryIconDischarg100.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\BatteryIconFault100.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Acst\Inverter\BatteryIconShutdown100.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Info.plist b/HDL-ON_iOS/Info.plist
index 9837d4d..a30b196 100644
--- a/HDL-ON_iOS/Info.plist
+++ b/HDL-ON_iOS/Info.plist
@@ -11,7 +11,7 @@
 	<key>CFBundleName</key>
 	<string>On Pro</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.4.8</string>
+	<string>2.6.0</string>
 	<key>CFBundleURLTypes</key>
 	<array>
 		<dict>
@@ -36,7 +36,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>2.4.8</string>
+	<string>2.6.0</string>
 	<key>LSApplicationQueriesSchemes</key>
 	<array>
 		<string>weixinULAPI</string>
diff --git a/HDL-ON_iOS/Other/SoundPlayer.cs b/HDL-ON_iOS/Other/SoundPlayer.cs
new file mode 100644
index 0000000..2fc813a
--- /dev/null
+++ b/HDL-ON_iOS/Other/SoundPlayer.cs
@@ -0,0 +1,62 @@
+锘縰sing System;
+using AVFoundation;
+using Foundation;
+
+namespace Other
+{
+	public class SoundPlayer
+	{
+        public AVAudioPlayer player;
+
+        private static SoundPlayer _soundPlayer;
+        public static SoundPlayer Ins
+        {
+            get
+            {
+                if(_soundPlayer == null)
+                {
+                    _soundPlayer = new SoundPlayer();
+                    // 鑾峰彇闊抽鏂囦欢璺緞
+                    var soundUrl = NSUrl.FromFilename("oldphone_mono.wav");
+                    // 鍒濆鍖栨挱鏀惧櫒
+                    _soundPlayer.player = AVAudioPlayer.FromUrl(soundUrl);
+                    _soundPlayer.player.NumberOfLoops = -1; // 璁剧疆涓�-1琛ㄧず鏃犻檺寰幆
+                    _soundPlayer.player.PrepareToPlay();
+                }
+                return _soundPlayer;
+            }
+        }
+
+        public SoundPlayer()
+        {
+        }
+
+        public void PlaySound()
+        {
+            try
+            {
+                if (_soundPlayer.player.Playing)
+                {
+                    _soundPlayer.player.Stop();
+                }
+                _soundPlayer.player.Play();
+            }
+            catch (Exception ex)
+            {
+
+            }
+        }
+
+        public void StopSound()
+        {
+            if (_soundPlayer.player != null)
+            {
+                _soundPlayer.player.Stop();
+                _soundPlayer.player.Dispose();
+                _soundPlayer = null;
+            }
+        }
+
+    }
+}
+
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 96e7893..0a74118 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -685,7 +685,12 @@
 698=Break
 699=Choose automation
 700=Add execution action
-
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
 
 
 
@@ -2086,8 +2091,12 @@
 698=鏂紑
 699=閫夋嫨鑷姩鍖�
 700=娣诲姞鎵ц鐩爣
-
-
+701=杩炴帴鏂瑰紡
+702=閰嶇疆宸茬粡鏇存柊锛岄噸鍚箣鍚庣敓鏁堛��
+703=涓浗鐢ㄦ埛閫夋嫨
+704=闈炰腑鍥界敤鎴烽�夋嫨
+705=璇烽�夋嫨鏈嶅姟鍣�
+706=鏂拌兘婧�
 
 
 
@@ -3485,8 +3494,12 @@
 698=Break
 699=Choose automation
 700=Add execution action
-
-
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
 
 
 
@@ -4879,6 +4892,13 @@
 698=Break
 699=Choose automation
 700=Add execution action
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
+
 
 
 
@@ -6258,7 +6278,12 @@
 698=Break
 699=Choose automation
 700=Add execution action
-
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
 
 
 
@@ -7593,6 +7618,78 @@
 634=袪械泻芯屑械薪写芯胁邪薪芯
 635=袩芯褌芯褔薪懈泄 泻芯谢褨褉
 636=效懈褋谢芯 蟹薪邪褔械薪薪褟 泻芯谢褜芯褉褍 褋泻谢邪写邪褦褌褜褋褟 蟹 6 褑懈褎褉 (褋泻谢邪写邪褦褌褜褋褟 蟹 褔懈褋褌懈褏 褔懈褋械谢/褑懈褎褉+谢褨褌械褉)
+637=Delete
+638=User Management
+639=Closed
+640=Open
+641=Automatic Coloring
+642=LED Banner
+643=Unlock method
+644=Clear
+645=Digital password
+646=Card/NFC key
+647=Face key
+648=Delete user
+649=Activity detection
+650=Do you want to delete this user?
+651=Successfully deleted
+652=Unlock settings
+653=Face unlock settings
+654=Press the button to unlock twice
+655=To unlock indoors, press the unlock button twice to prevent children or pets from accidentally touching the lock
+656=Child lock mode
+657=After opening, the door cannot be unlocked through buttons, only the emergency knob can be used to unlock
+658=Anti lock mode
+659=After opening, ordinary users cannot unlock, while the main user can still unlock. After opening the door with the indoor button, the anti lock mode will automatically close
+660=Deployment mode
+661=It is recommended to change the mode when leaving home for a long time. It can also be activated by pressing the blue button that lights up on the door lock keyboard after closing the door
+662=Audio settings
+663=Battery management
+664=Face unlocking
+665=After opening, the device can perform facial recognition and unlock
+666=Trigger mode
+667=Face entry help
+668=Manual triggering
+669=Automatic triggering
+670=After entering the detection range, the door lock will automatically recognize the face and unlock it
+671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
+672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+678=Current user data has been cleared, about to return to the previous page.
+679=Group control
+680=Colorful switch
+681=Test
+682=Group
+683=The time is invalid
+684=Length out of range
+685=note: User management can only manage added users. If you need to add a new user, please go to the lock end for relevant operations.
+686=Total
+687=A-phase electricity data
+688=B-phase electricity data
+689=C-phase electricity data
+690=Voltage
+691=Current
+692=Real-time power
+693=Total electricity consumption (KW路h)
+694=Hourly electricity consumption in the past 24 hours
+695=Daily data of the past month
+696=Monthly data of the past year
+697=prompt: The closer the starting color selection is to the edge of the color ring, the more obvious the dazzling effect. The closer to the white center, the less noticeable the dazzling effect.
+698=Break
+699=Choose automation
+700=Add execution action
+701=Link method
+702=The configuration has been updated and will take effect after restarting.
+703=Chinese users choose
+704=Non Chinese users choose
+705=Please select a server
+706=NewEnergy
+
+
 
 
 
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg.png
new file mode 100644
index 0000000..be81759
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg100.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg100.png
new file mode 100644
index 0000000..6ab90fe
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconCharg100.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg.png
new file mode 100644
index 0000000..9220a3e
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg100.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg100.png
new file mode 100644
index 0000000..94e8d15
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconDischarg100.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault.png
new file mode 100644
index 0000000..2340d15
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault100.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault100.png
new file mode 100644
index 0000000..1ae7e24
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconFault100.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown.png
new file mode 100644
index 0000000..f100885
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown100.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown100.png
new file mode 100644
index 0000000..cf8f972
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/BatteryIconShutdown100.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionBg.png
new file mode 100644
index 0000000..601dc35
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionIcon.png
new file mode 100644
index 0000000..6294feb
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityConsumptionIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationBg.png
new file mode 100644
index 0000000..e5b8d1e
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationIcon.png
new file mode 100644
index 0000000..00d0d77
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/ElectricityGenerationIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EnergyStorageStatusBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EnergyStorageStatusBg.png
new file mode 100644
index 0000000..40e3ca0
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EnergyStorageStatusBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconCharg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconCharg.png
new file mode 100644
index 0000000..e307f25
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconCharg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconDischarge.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconDischarge.png
new file mode 100644
index 0000000..15ae7f0
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconDischarge.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconFault.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconFault.png
new file mode 100644
index 0000000..699d4ee
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconFault.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconShutdown.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconShutdown.png
new file mode 100644
index 0000000..e009295
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/EsIconShutdown.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvBgDischarge.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvBgDischarge.png
new file mode 100644
index 0000000..b00cac3
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvBgDischarge.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvBgRun.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvBgRun.png
new file mode 100644
index 0000000..4fe6422
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvBgRun.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconFault.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconFault.png
new file mode 100644
index 0000000..5b2ec16
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconFault.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconRun.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconRun.png
new file mode 100644
index 0000000..4b27c5c
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconRun.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconStandby.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconStandby.png
new file mode 100644
index 0000000..0f62825
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/PvIconStandby.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoBg_Coal.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoBg_Coal.png
new file mode 100644
index 0000000..e777f14
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoBg_Coal.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoIcon_Coal.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoIcon_Coal.png
new file mode 100644
index 0000000..b7b59ec
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/Inverter/SocialContributionInfoIcon_Coal.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_False.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_False.png
new file mode 100644
index 0000000..7ef209a
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_False.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_True.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_True.png
new file mode 100644
index 0000000..fe2947a
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/ModeFree_True.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic.png
new file mode 100644
index 0000000..f8aedd0
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png
new file mode 100644
index 0000000..b4c83f5
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png
new file mode 100644
index 0000000..f8820e4
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat_On.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat_On.png
new file mode 100644
index 0000000..a2f353d
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/Mode_QuickHeat_On.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/NextIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/NextIcon.png
new file mode 100644
index 0000000..689bea6
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/NextIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/PreIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/PreIcon.png
new file mode 100644
index 0000000..4b91428
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/PreIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_1.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_1.png
new file mode 100644
index 0000000..51199ba
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_1.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png
new file mode 100644
index 0000000..1b04c61
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png
new file mode 100644
index 0000000..ad44a95
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_1.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_1.png
new file mode 100644
index 0000000..c545256
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_1.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png
new file mode 100644
index 0000000..7ce8788
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png
new file mode 100644
index 0000000..43ddc5a
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/TempBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/TempBg.png
new file mode 100644
index 0000000..8b2adca
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/WaterHeater/TempBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/grey/PowerOffIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/grey/PowerOffIcon.png
new file mode 100644
index 0000000..56b8ee1
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Acst/grey/PowerOffIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/InverterJinmaoFunctionBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/InverterJinmaoFunctionBg.png
new file mode 100644
index 0000000..2ac2f2f
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/InverterJinmaoFunctionBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/ic_esvideo_on_answer.png b/HDL-ON_iOS/Resources/ic_esvideo_on_answer.png
new file mode 100644
index 0000000..173927f
--- /dev/null
+++ b/HDL-ON_iOS/Resources/ic_esvideo_on_answer.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/ic_esvideo_on_back.png b/HDL-ON_iOS/Resources/ic_esvideo_on_back.png
new file mode 100644
index 0000000..c14f703
--- /dev/null
+++ b/HDL-ON_iOS/Resources/ic_esvideo_on_back.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/ic_esvideo_on_hangup.png b/HDL-ON_iOS/Resources/ic_esvideo_on_hangup.png
new file mode 100644
index 0000000..01258fc
--- /dev/null
+++ b/HDL-ON_iOS/Resources/ic_esvideo_on_hangup.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/ic_esvideo_on_hangup_all.png b/HDL-ON_iOS/Resources/ic_esvideo_on_hangup_all.png
new file mode 100644
index 0000000..5acc23b
--- /dev/null
+++ b/HDL-ON_iOS/Resources/ic_esvideo_on_hangup_all.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/ic_esvideo_on_takephoto_select.png b/HDL-ON_iOS/Resources/ic_esvideo_on_takephoto_select.png
new file mode 100644
index 0000000..2cb103f
--- /dev/null
+++ b/HDL-ON_iOS/Resources/ic_esvideo_on_takephoto_select.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/ic_esvideo_on_takephoto_unselect.png b/HDL-ON_iOS/Resources/ic_esvideo_on_takephoto_unselect.png
new file mode 100644
index 0000000..e4a4555
--- /dev/null
+++ b/HDL-ON_iOS/Resources/ic_esvideo_on_takephoto_unselect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/ic_esvideo_on_unlock_select.png b/HDL-ON_iOS/Resources/ic_esvideo_on_unlock_select.png
new file mode 100644
index 0000000..8f5af24
--- /dev/null
+++ b/HDL-ON_iOS/Resources/ic_esvideo_on_unlock_select.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/ic_esvideo_on_unlock_unselect.png b/HDL-ON_iOS/Resources/ic_esvideo_on_unlock_unselect.png
new file mode 100644
index 0000000..e84d330
--- /dev/null
+++ b/HDL-ON_iOS/Resources/ic_esvideo_on_unlock_unselect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/oldphone_mono.wav b/HDL-ON_iOS/Resources/oldphone_mono.wav
new file mode 100644
index 0000000..f34cb0d
--- /dev/null
+++ b/HDL-ON_iOS/Resources/oldphone_mono.wav
Binary files differ
diff --git a/HDL_ON/Common/ApiUtlis.cs b/HDL_ON/Common/ApiUtlis.cs
index 8ae0cfb..8ca313c 100644
--- a/HDL_ON/Common/ApiUtlis.cs
+++ b/HDL_ON/Common/ApiUtlis.cs
@@ -300,8 +300,7 @@
                             if (deviceResult.Code == StateCode.SUCCESS)
                             {
                                 FunctionList.List.ClearDatas();
-                                //MainPage.Log($"============璁惧============寮�濮�" + FunctionList.List.Functions.Count);
-                                //MainPage.Log($"璇诲彇璁惧淇℃伅鎴愬姛");
+                                MainPage.Log($"璇诲彇璁惧淇℃伅鎴愬姛");
                                 MainPage.Log($"sid鍒楄〃鑾峰彇====\r\n" , deviceResult.Data.ToString());
                                 var deviceList = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
                                 if (deviceList == null)
diff --git a/HDL_ON/Common/FileUtlis.cs b/HDL_ON/Common/FileUtlis.cs
index d0a8977..2f38709 100644
--- a/HDL_ON/Common/FileUtlis.cs
+++ b/HDL_ON/Common/FileUtlis.cs
@@ -125,7 +125,7 @@
                 fs = new FileStream(Path.Combine(RegionPath, fileName), FileMode.Create, FileAccess.Write);
                 fs.Write(bytes, 0, bytes.Length);
                 fs.Flush();
-                MainPage.Log($"SaveFile:{fileName}");//Path:{RegionPath}
+                //MainPage.Log($"SaveFile:{fileName}");//Path:{RegionPath}
                 return true;
             }
             catch (Exception ex)
diff --git a/HDL_ON/Common/HDLCommon.cs b/HDL_ON/Common/HDLCommon.cs
index f8f204d..5a6979b 100644
--- a/HDL_ON/Common/HDLCommon.cs
+++ b/HDL_ON/Common/HDLCommon.cs
@@ -7,6 +7,10 @@
 using HDL_ON.Entity;
 using System.Threading;
 using HDL_ON.DriverLayer;
+#if __IOS__
+using Other;
+using Shared.IOS.HDLLinphoneSDK;
+#endif
 namespace HDL_ON
 {
     /// <summary>
@@ -341,6 +345,7 @@
             switch (UserInfo.Current.AccountString)
             {
                 case "464027401@qq.com":
+                case "649362315@qq.com":
                 case "13580507523":
                 case "15626203746":
                 case "18316672920":
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index f9705af..b0e0a67 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -1,9 +1,34 @@
 using System;
+using com.hdl.on;
 
 namespace HDL_ON
 {
     public static class StringId
     {
+        /// <summary>
+        /// 鏂拌兘婧�
+        /// </summary>
+        public const int NewEnergy = 706;
+        /// <summary>
+        /// 璇烽�夋嫨鏈嶅姟鍣�
+        /// </summary>
+        public const int PlsSelectServer = 705;
+        /// <summary>
+        /// 闈炰腑鍥芥湇鍔″櫒鎻愮ず
+        /// </summary>
+        public const int NonChineseServerPrompt = 704;
+        /// <summary>
+        /// 涓浗鏈嶅姟鍣ㄦ彁绀�
+        /// </summary>
+        public const int ChineseServerPrompt = 703;
+        /// <summary>
+        /// 杩炴帴鏂瑰紡鏇存敼鎻愮ず
+        /// </summary>
+        public const int ConnectionModeChangeTip = 702;
+        /// <summary>
+        /// 杩炴帴鏂瑰紡
+        /// </summary>
+        public const int ConnectionMode = 701;
         /// <summary>
         /// 娣诲姞鎵ц鍔ㄤ綔
         /// </summary>
@@ -3831,7 +3856,7 @@
         /// <summary>
         /// 璇烽�夋嫨鍥藉/鍖哄煙
         /// </summary>
-        public const int PleaseSelectCountryOrRegion = 9018;
+        //public const int PleaseSelectCountryOrRegion = 9018;
         /// <summary>
         /// 绔嬪嵆鏇存柊
         /// </summary>
diff --git a/HDL_ON/Common/UserInfo.cs b/HDL_ON/Common/UserInfo.cs
index 1e53ae7..df2d66b 100644
--- a/HDL_ON/Common/UserInfo.cs
+++ b/HDL_ON/Common/UserInfo.cs
@@ -174,7 +174,7 @@
         {
             get
             {
-                return (DateTime.Now - LastTime).TotalDays < 7;
+                return (DateTime.Now - LastTime).TotalDays < 90;
             }
         }
 
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index 10b0a31..e66c1c3 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -111,7 +111,7 @@
                     {
                         //淇敼涓婚〉杩炴帴鐘舵��
                         HomePage.LoadEvent_CheckLinkStatus();
-                        MainPage.Log($"缃戝叧灞�鍩熺綉鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
+                        //MainPage.Log($"缃戝叧灞�鍩熺綉鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
                         new System.Threading.Thread(() =>
                         {
                             System.Threading.Thread.Sleep(1000);
@@ -127,7 +127,7 @@
                 }
                 else
                 {
-                    MainPage.Log($"鐘舵�佷竴鑷达紝涓嶆洿鏂版暟鎹�(鏈湴)");
+                    //MainPage.Log($"鐘舵�佷竴鑷达紝涓嶆洿鏂版暟鎹�(鏈湴)");
                 }
             }
         }
@@ -404,7 +404,7 @@
                     }
                     asd.status = status1;
                     upDataObj.objects.Add(asd);
-                    revString = Newtonsoft.Json.JsonConvert.SerializeObject(upDataObj);
+                    revString = JsonConvert.SerializeObject(upDataObj);
                     UpdataFunctionStatus(revString, null, true);
                 }
                 return;
@@ -480,12 +480,12 @@
                 }
                 asd.status = status1;
                 upDataObj.objects.Add(asd);
-                revString = Newtonsoft.Json.JsonConvert.SerializeObject(upDataObj);
+                revString = JsonConvert.SerializeObject(upDataObj);
                 UpdataFunctionStatus(revString, null, true);
                 return true;
             }
 
-            //MainPage.Log($"鍙戦�佹暟鎹�:{Newtonsoft.Json.JsonConvert.SerializeObject(commandDictionary)}");
+            //MainPage.Log($"鍙戦�佹暟鎹�:{JsonConvert.SerializeObject(commandDictionary)}");
 
             ///绗笁鏂规秱楦﹁澶囩粺涓�浣跨敤杩滅▼鎺у埗
             switch (function.spk)
@@ -532,7 +532,7 @@
                     else
                     {
                         var functionControlDataObj = function.GetGatewayAlinkControlData(commandDictionary);
-                        var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
+                        var functionControlDataJson = JsonConvert.SerializeObject(functionControlDataObj);
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson);
                         new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, resend);
                         MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
@@ -664,7 +664,7 @@
             if (pack != null && pack.Data != null)
             {
                 //寰呮祴璇�2021-03-04
-                var ddd = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AlinkStatusData>>(pack.Data.ToString());
+                var ddd = JsonConvert.DeserializeObject<List<AlinkStatusData>>(pack.Data.ToString());
                 if (ddd != null)
                 {
                     foreach (var function in ddd)
@@ -724,7 +724,7 @@
                                         },
                             time_stamp = Utlis.GetTimestamp()
                         };
-                        var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+                        var functionControlDataJson = JsonConvert.SerializeObject(readDataObj);
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
                         MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
                         new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
@@ -806,7 +806,7 @@
                             objects = objects,
                             time_stamp = Utlis.GetTimestamp()
                         };
-                        var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+                        var functionControlDataJson = JsonConvert.SerializeObject(readDataObj);
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
                         MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
                         new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
@@ -850,7 +850,7 @@
                         },
                     time_stamp = Utlis.GetTimestamp()
                 };
-                var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData);
+                var aLinkJson = JsonConvert.SerializeObject(aLinkData);
                 var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlSeurity, aLinkJson);
                 new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id);
             }
@@ -904,7 +904,7 @@
                     objects = objects,
                     time_stamp = Utlis.GetTimestamp()
                 };
-                var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+                var functionControlDataJson = JsonConvert.SerializeObject(readDataObj);
                 var sendBytes = Ins.ConvertSendBodyData($"/base/{DB_ResidenceData.Instance.HomeGateway.gatewayId}/thing/service/MusicPlayGroupListGet/down", functionControlDataJson);
                 MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
                 new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
@@ -922,7 +922,7 @@
             var sendId = Ins.msg_id.ToString();
             var sendObj = new { objects = objects1, id = sendId, time_stamp = Utlis.GetTimestamp() };
 
-            var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(sendObj);
+            var aLinkJson = JsonConvert.SerializeObject(sendObj);
             var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.AuthGateway, aLinkJson);
             new Control_Udp().SendLocalHdlLinkData(sendBytes, Ins.msg_id.ToString());
         }
@@ -1073,19 +1073,19 @@
                     }
                     else
                     {
-                        MainPage.Log($"灞�鍩熺綉淇℃伅: 鏄庢枃锛�" + receiveObj.BodyDataString);
+                        //MainPage.Log($"灞�鍩熺綉淇℃伅: 鏄庢枃锛�" + receiveObj.BodyDataString);
                     }
                 }
 
                 try
                 {
-                    var idMsg = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]);
+                    var idMsg = JsonConvert.DeserializeObject<ResponsePack>(res[1]);
                     var hasProcess = hasItBeenProcessed(idMsg.id);
                     if (hasProcess)
                     {
                         return null;
                     }
-                    MainPage.Log($"澶勭悊灞�鍩熺綉鏁版嵁id:{idMsg.id}");
+                    //MainPage.Log($"澶勭悊灞�鍩熺綉鏁版嵁id:{idMsg.id}");
 
                 }
                 catch (Exception ex)
@@ -1096,16 +1096,16 @@
                 if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply || receiveObj.Topic == CommunicationTopic.GatewayBroadcast)
                 {
 
-                    var bodyJObj = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]);
+                    var bodyJObj = JsonConvert.DeserializeObject<ResponsePack>(res[1]);
                     if (bodyJObj == null)
                     {
                         return receiveObj;
                     }
 
-                    var device = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString());
+                    var device = JsonConvert.DeserializeObject<DeviceModule>(bodyJObj.objects.ToString());
                     if (device.device_mac.ToUpper() == DB_ResidenceData.Instance.HomeGateway.mac.ToUpper())
                     {
-                        MainPage.Log("鏈湴鎼滅储缃戝叧鎴愬姛");
+                        MainPage.Log("鏈湴鎼滅储缃戝叧鎴愬姛锛�"+ receiveObj.Topic);
                         Ins.IsSearchLocalGatewaySuccessful = true;
                         Ins.GatewayOnline_Local = true;
                         if (!string.IsNullOrEmpty(device.gatewayId))
@@ -1150,7 +1150,7 @@
                         var tt = "";
                         lock (tt)
                         {
-                            var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString);
+                            var temp = JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString);
                             if (temp != null)
                             {
                                 Control_Udp.ReceiveRepeatManager(temp.id, null);
@@ -1175,7 +1175,7 @@
                 }
                 else if (receiveObj.Topic == $"/user/{GatewayId}/custom/gateway/login_reply")
                 {
-                    var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(receiveObj.BodyDataString);
+                    var temp = JsonConvert.DeserializeObject<JObject>(receiveObj.BodyDataString);
                     if (temp.GetValue("objects").ToString().Contains("success"))
                     {
                         LocalTcpClientLogin = true;
@@ -1359,6 +1359,13 @@
                                 AcstParentPage.UpdateAcstSubInfo(localFunction);
                                 AcstSubPage.UpdateStatus(localFunction);
                                 break;
+                            case SPK.WaterHeaterJinmao:
+                                AcstParentPage.UpdateAcstSubInfo(localFunction);
+                                WaterHeaterJinmaoPage.UpdateStatus();
+                                break;
+                            case SPK.InverterJinmao:
+                                InverterJinmaoPage.UpdateStatus(localFunction);
+                                break;
                             case SPK.AirSwitch:
                                 AirSwitchPage.UpdataState(localFunction);
                                 if (localFunction.GetAttribute(FunctionAttributeKey.Power) != null)//濡傛灉鏄甫鐢甸噺鐨勭┖寮�涔熻鏇存柊鑳芥簮鐣岄潰
@@ -1467,7 +1474,7 @@
 
                                 }
                                 break;
-                            case SPK.HvacFloorHeat:
+                            case SPK.HvacFloorHeat:case SPK.HvacFloorHeatPanel:
                             case SPK.FloorHeatStandard:
                                 localFunction.lastState = "";
                                 switch (localFunction.GetAttrState(FunctionAttributeKey.Mode))
@@ -1635,7 +1642,7 @@
                                 var status = new Dictionary<string, object> { ["method"] = "status", ["data"] = temp.objects };
                                 Application.RunOnMainThread(() =>
                                 {
-                                    Inverter.Ins.H5Page.CallJS($"nativeToJs(\'{Newtonsoft.Json.JsonConvert.SerializeObject(status)}\')");
+                                    Inverter.Ins.H5Page.CallJS($"nativeToJs(\'{JsonConvert.SerializeObject(status)}\')");
                                 });
                                 break;
                         }
@@ -1668,7 +1675,7 @@
             {
                 Dictionary<string, string> dic = new Dictionary<string, string>();
                 var functionControlDataObj = doorlock.GetGatewayAlinkDoorlockData(UserInfo.Current.ID, extStr);
-                var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
+                var functionControlDataJson = JsonConvert.SerializeObject(functionControlDataObj);
                 var sendBytes = Ins.ConvertSendBodyData($"/base/{Control.Ins.GatewayId}/thing/service/doorRemoteOpen/down", functionControlDataJson);
                 new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, 0);
             }
@@ -1701,7 +1708,7 @@
                     var pack = HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/pwdConfirm", requestJson);
                     if (pack.Code == StateCode.SUCCESS)
                     {
-                        Newtonsoft.Json.Linq.JObject pairs = Newtonsoft.Json.Linq.JObject.Parse(pack.Data.ToString());
+                        JObject pairs = JObject.Parse(pack.Data.ToString());
                         var scrip = pairs.GetValue("scrip");
 
                         d = new Dictionary<string, object>();
diff --git a/HDL_ON/DAL/DriverLayer/Control_Udp.cs b/HDL_ON/DAL/DriverLayer/Control_Udp.cs
index 5f3e595..6ad5775 100644
--- a/HDL_ON/DAL/DriverLayer/Control_Udp.cs
+++ b/HDL_ON/DAL/DriverLayer/Control_Udp.cs
@@ -302,7 +302,7 @@
                             break;
                         case SPK.LightRGB:
                             break;
-                        case SPK.HvacFloorHeat:
+                        case SPK.HvacFloorHeat:case SPK.HvacFloorHeatPanel:
                         case SPK.FloorHeatStandard:
                             if (f.status.Find((obj)=>obj.key ==FunctionAttributeKey.Mode) == null)
                             {
@@ -735,7 +735,7 @@
                         0,0,0,0,0,0,0,onoff,mode,fan,temp,sanfan});
 
                         break;
-                    case SPK.HvacFloorHeat:case SPK.FloorHeatStandard:
+                    case SPK.HvacFloorHeat:case SPK.FloorHeatStandard:case SPK.HvacFloorHeatPanel:
                         var fhTemp = new FloorHeating();
                         if (function.Fh_Mode_Temp.Count == 4)
                         {
@@ -960,7 +960,7 @@
                     case SPK.HvacAC:
                         ControlBytesSend(Command.ReadACMode, subnetId, deviceId, new byte[] { function.bus.LoopId });
                         break;
-                    case SPK.HvacFloorHeat:case SPK.FloorHeatStandard:
+                    case SPK.HvacFloorHeat:case SPK.FloorHeatStandard:case SPK.HvacFloorHeatPanel:
                         ControlBytesSend(Command.ReadFloorHeat, subnetId, deviceId, new byte[] { function.bus.LoopId });
                         break;
                     case SPK.HvacFan:
@@ -1218,6 +1218,7 @@
         /// </summary>
         public void SearchLocalGateway(bool broadcast = false)
         {
+            //MainPage.Log("SearchLocalGateway");
             try
             {
                 var sendJob = new JObject { { "id", Control.Ins.msg_id.ToString() }, { "time_stamp", Utlis.GetTimestamp ()} };
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 731c865..d818a1c 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -22,13 +22,10 @@
             var sss = Newtonsoft.Json.Linq.JObject.FromObject("sss");
             var xxx = homeJsonStr.GetValue("xxx").ToString(),
 
-            
-                    Dictionary<string, object> d = new Dictionary<string, object>();
-                    d.Add("Id", fId);
-                    var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d);
-
-
-              */
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("Id", fId);
+            var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(d);
+         */
 
 
         string severAddress = "https://global.hdlcontrol.com/ProposedProductionApi";
@@ -41,7 +38,7 @@
         /// <summary>
         /// 鑾峰彇浼犳劅鍣ㄥ巻鍙叉暟鎹�
         /// </summary>
-        /// <param name="qType">鏃堕棿鏌ヨ绫诲瀷锛歨our=杩�24灏忔椂銆亀eek=杩戜竴鍛ㄣ�乵onth = 杩戜竴鏈� </param>
+        /// <param name="qType">鏃堕棿鏌ヨ绫诲瀷锛歨our=杩�24灏忔椂銆乨ay_hour =鏌愭棩24灏忔椂銆亀eek=杩戜竴鍛ㄣ�乵onth = 杩戜竴鏈堛�乧ustom_month=鏌愬勾鏌愭湀 y/M銆乧ustom_year=鏌愬勾 y</param>
         /// <param name="deviceId">璁惧ID</param>
         /// <param name="deviceKey">鍔熻兘鏌ヨ绫诲瀷锛歱m25</param>
         /// <param name="time">鍏蜂綋鏌ヨ鐨勬棩鏈燂紝閲戣寕娓╂帶鍣ㄤ娇鐢�</param>
@@ -1202,7 +1199,6 @@
                     deviceName = OnAppConfig.Instance.PhoneName,
                     deviceType = deviceType,
                     produce = isProduce,
-
                 };
                 mAddpushinfoObj.languageType = Utlis.GetPostLanguageType();
 
@@ -1229,7 +1225,6 @@
                             return true;
                         }
                     }
-
                 }
                 else
                 {
diff --git a/HDL_ON/DAL/Server/HttpUtil.cs b/HDL_ON/DAL/Server/HttpUtil.cs
index 8cadb5d..bac48c5 100644
--- a/HDL_ON/DAL/Server/HttpUtil.cs
+++ b/HDL_ON/DAL/Server/HttpUtil.cs
@@ -22,11 +22,9 @@
         public const string APP_KEY = "HDL-HOME-APP";
         public const string SECRET_KEY = "CPL345bn28gHnvi9G4tYbq3cTYkiHC";
 
-
         //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";
         //public const string APP_KEY = "HDL-HOME-APP-TEST";
         //public const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss";
-
 
         //public const string GlobalRequestHttpsHost = "http://59.41.255.150:7777";//mmmm
         //const string APP_KEY = "CPEVRLRT";
diff --git a/HDL_ON/DAL/Server/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index fbbad8b..230eaf2 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -884,6 +884,12 @@
         /// </summary>
         public const string API_POST_VideoDevice_UpdateCallStatus = "/home-wisdom/platform/imou/updateCallStatus";
         /// <summary>
+        /// 鎷掓帴锛堟寕娈垫墍鏈夊懠鍙級
+        /// </summary>
+        public const string API_POST_VideoDevice_RejectCallIn = "/home-wisdom/platform/imou/callAllRejection";
+
+        
+        /// <summary>
         /// 鑾峰彇閫氳瘽璁板綍
         /// </summary>
         public const string API_POST_FL_GetCallList = "/home-wisdom/platform/imou/listCallRecords";
diff --git a/HDL_ON/Entity/DB_ResidenceData.cs b/HDL_ON/Entity/DB_ResidenceData.cs
index ef43e8a..d61b4b0 100644
--- a/HDL_ON/Entity/DB_ResidenceData.cs
+++ b/HDL_ON/Entity/DB_ResidenceData.cs
@@ -74,7 +74,7 @@
                                     ShowFunction.FreshAir,ShowFunction.DoorLock,
                                     ShowFunction.Panel,
                                     ShowFunction.Sensor,ShowFunction.VideoIntercom,
-                                    ShowFunction.SecurityCenter,ShowFunction.Acst,
+                                    ShowFunction.SecurityCenter,ShowFunction.Acst,ShowFunction.InverterJinmao,
                                     ShowFunction.MechanicalArm ,
                                     ShowFunction.Series,
                     };
@@ -510,5 +510,17 @@
         /// </summary>
         public bool CheckGPS_IsFirst = true;
 
+        /// <summary>
+        /// 鍙瀵硅杩炴帴鏂瑰紡
+        /// TCP/UDP
+        /// </summary>
+        public LinphoneConnectType linphoneConnectType = LinphoneConnectType.UDP;
+
+    }
+
+    public enum LinphoneConnectType
+    {
+        UDP,
+        TCP,
     }
 }
diff --git a/HDL_ON/Entity/Enumerative/MyEnum.cs b/HDL_ON/Entity/Enumerative/MyEnum.cs
index 83cea42..cc528b4 100644
--- a/HDL_ON/Entity/Enumerative/MyEnum.cs
+++ b/HDL_ON/Entity/Enumerative/MyEnum.cs
@@ -197,6 +197,10 @@
         /// 褰遍煶涓帶
         /// </summary>
         //Aks = 0x28,
+        /// <summary>
+        /// 閲戣寕浠夸經鍌ㄨ兘
+        /// </summary>
+        InverterJinmao=0x29,
 
 
     }
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 2a77f7e..04b4104 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -204,7 +204,7 @@
                     case SPK.HvacFan:
                         iconPath = "electricalfan";
                         break;
-                    case SPK.HvacFloorHeat:
+                    case SPK.HvacFloorHeat:case SPK.HvacFloorHeatPanel:
                         iconPath = "floorHeatstandard";
                         break;
                     case SPK.ElectricTuyaFan2:
@@ -296,6 +296,11 @@
         /// 璁惧spk
         /// </summary>
         public string spk = "";
+        /// <summary>
+        /// 鎵╁睍淇℃伅
+        /// 瀛楃涓�
+        /// </summary>
+        public string extend = "";
 
         private string _SpkCategory = string.Empty;
         /// <summary>
@@ -1751,6 +1756,16 @@
         /// 瀛愭帶
         /// </summary>
         public const string AcstSub = "acst.sub";
+        /// <summary>
+        /// 鐑按鍣�
+        /// 閲戣寕
+        /// </summary>
+        public const string WaterHeaterJinmao = "electrical.water_heater.jinmao";
+        /// <summary>
+        /// 閫嗗彉鍣�/鏂拌兘婧�
+        /// 閲戣寕
+        /// </summary>
+        public const string InverterJinmao = "energy.inverter.jinmao";
 
         /// <summary>
         /// 闂ㄩ攣
@@ -1945,6 +1960,10 @@
         /// 鍦版殩
         /// </summary>
         public const string HvacFloorHeat = "hvac.floorHeat";
+        /// <summary>
+        /// 闈㈡澘鍦版殩
+        /// </summary>
+        public const string HvacFloorHeatPanel = "hvac.floorHeat_panel";
 
         /// <summary>
         /// 鍦扮儹spk鍒楄〃
@@ -1954,7 +1973,7 @@
         {
             var spkList = new List<string>();
             spkList.Add(FloorHeatStandard);
-            spkList.Add(HvacFloorHeat);
+            spkList.Add(HvacFloorHeat); spkList.Add(HvacFloorHeatPanel);
             return spkList;
         }
         #endregion
diff --git a/HDL_ON/Entity/Function/InverterJinmao.cs b/HDL_ON/Entity/Function/InverterJinmao.cs
new file mode 100644
index 0000000..3dd2f1a
--- /dev/null
+++ b/HDL_ON/Entity/Function/InverterJinmao.cs
@@ -0,0 +1,123 @@
+锘縰sing System;
+namespace HDL_ON.Entity
+{
+    /// <summary>
+    /// 閲戣寕閫嗗彉鍣�
+    /// </summary>
+    public class InverterJinmao
+    {
+        public InverterJinmao()
+        {
+        }
+    }
+
+
+    public enum InverterJinmao_AttrEnum
+    {
+        /// <summary>
+        /// 鍙戠數鍔熺巼
+        /// </summary>
+        pv_power,
+        /// <summary>
+        /// 浠婃棩鍙戠數閲�
+        /// </summary>
+        pv_electricity_today,
+        /// <summary>
+        /// 鏈湀鍙戠數閲�
+        /// </summary>
+        pv_electricity_month,
+        /// <summary>
+        /// 鎬诲彂鐢甸噺
+        /// </summary>
+        pv_electricity,
+        /// <summary>
+        /// 鍏変紡杩愯鐘舵��
+        /// </summary>
+        system_status,
+        /// <summary>
+        /// 鍌ㄨ兘鐘舵��
+        /// </summary>
+        ess_status,
+        /// <summary>
+        /// 鍌ㄨ兘鍏呯數鍔熺巼
+        /// </summary>
+        ess_charge_power,
+        /// <summary>
+        /// 鍌ㄨ兘鏀剧數鍔熺巼
+        /// </summary>
+        ess_discharg_power,
+        /// <summary>
+        /// 褰撳墠鐢垫睜瀹归噺
+        /// </summary>
+        battery_soc,
+        /// <summary>
+        /// 鐢ㄧ數鍔熺巼
+        /// </summary>
+        load_active_power,
+        /// <summary>
+        /// 浠婃棩鐢ㄧ數閲�
+        /// </summary>
+        load_electricity_today,
+        /// <summary>
+        /// 鏈湀鐢ㄧ數閲�
+        /// </summary>
+        load_electricity_month,
+        /// <summary>
+        /// 鎬荤敤鐢甸噺
+        /// </summary>
+        load_electricity,
+        /// <summary>
+        /// 鑺傜害鏍囧噯鐓�
+        /// </summary>
+        coal,
+        /// <summary>
+        /// //CO2鍑忔帓
+        /// </summary>
+        co2,
+        /// <summary>
+        /// 绛夋晥妞嶆爲閲� 
+        /// </summary>
+        trees,
+    }
+    /// <summary>
+    /// 鍏変紡杩愯鐘舵��
+    /// </summary>
+    public enum InverterJinmao_Attr_SystemStatusEnum
+    {
+        /// <summary>
+        /// 杩愯锛�
+        /// </summary>
+        run,
+        /// <summary>
+        /// 鏁呴殰锛�
+        /// </summary>
+        fault,
+        /// <summary>
+        /// 寰呮満锛�
+        /// </summary>
+        standby
+    }
+    /// <summary>
+    /// 鍌ㄨ兘鐘舵��
+    /// </summary>
+    public enum InverterJinmao_Attr_EssStatusEnum
+    {
+        /// <summary>
+        /// 鍏呯數锛�
+        /// </summary>
+        charge,
+        /// <summary>
+        /// 鏀剧數锛�
+        /// </summary>
+        discharge,
+        /// <summary>
+        /// 鍋滄満锛�
+        /// </summary>
+        shutdown,
+        /// <summary>
+        /// 鏁呴殰锛�
+        /// </summary>
+        fault
+    }
+}
+
diff --git a/HDL_ON/Entity/Function/Sensor.cs b/HDL_ON/Entity/Function/Sensor.cs
index b86e111..c36ed6e 100644
--- a/HDL_ON/Entity/Function/Sensor.cs
+++ b/HDL_ON/Entity/Function/Sensor.cs
@@ -32,6 +32,12 @@
                 case SPK.SensorHumidity:
                     nameId = StringId.Humidity;
                     break;
+                case SPK.SensorHcho:
+                    nameId = StringId.Formaldehyde;
+                    break;
+                case SPK.SensorLight:
+                    nameId = StringId.guangzhao;
+                    break;
             }
             return nameId;
         }
@@ -181,7 +187,7 @@
                     unit = "掳C";
                     break;
                 case SPK.SensorTVOC:
-                    unit = "PPB";
+                    unit = "mg/m鲁";
                     break;
                 case SPK.SensorCO2:
                     unit = "PPM";
diff --git a/HDL_ON/Entity/Function/WaterHeaterJinmao.cs b/HDL_ON/Entity/Function/WaterHeaterJinmao.cs
new file mode 100644
index 0000000..dc1bcc4
--- /dev/null
+++ b/HDL_ON/Entity/Function/WaterHeaterJinmao.cs
@@ -0,0 +1,75 @@
+锘縰sing System;
+namespace HDL_ON.Entity
+{
+    /// <summary>
+    /// 閲戣寕鐑按鍣�
+    /// </summary>
+    public class WaterHeaterJinmao
+    {
+        public WaterHeaterJinmao()
+        {
+        }
+
+
+
+
+    }
+
+    public enum WaterHeaterJinmao_AttrEnum
+    {
+        /// <summary>
+        /// 寮�鍏�  WR  string on/off
+        /// </summary>
+        on_off,
+        /// <summary>
+        ///  鐑按娓╁害 掳C R   float	%d
+        /// </summary>
+        temp,
+        /// <summary>
+        ///    鐑按娓╁害璁剧疆 掳C WR  float	%d	35-60
+        /// </summary>
+        set_temp,
+        /// <summary>
+        /// 鐑按妯″紡璁剧疆  WR string 鑺傝兘锛歟conomic 閫熺儹锛歲uick_heat
+        /// </summary>
+        mode,
+        /// <summary>
+        ///   鍏嶈垂鐑按鐘舵�� R   boolean		true/false
+        /// </summary>
+        mode_free,
+        /// <summary>
+        /// 鐑按娴侀噺 L/min R   float	%d
+        /// </summary>
+        flow,
+        /// <summary>
+        ///   鐑洖鏀剁儹姘撮噺 t   R float	%d
+        /// </summary>
+        recycl_volume,
+        /// <summary>
+        ///  鎬荤儹姘撮噺 t   R float	%d
+        /// </summary>
+        volume,
+        /// <summary>
+        ///  鐑洖鏀惰妭鐢甸噺 kwh R float	%d
+        /// </summary>
+        energy_electricity,
+        /// <summary>
+        /// CO2鍑忔帓閲� R   float	%d
+        /// </summary>
+        co2,
+        /// <summary>
+        ///   绛夋晥妞嶆爲閲� R   float	%d
+        /// </summary>
+        trees,
+
+    }
+    /// <summary>
+    /// 鐑按妯″紡璁剧疆
+    /// </summary>
+    public enum WaterHeaterJinmao_Attr_ModeEnum
+    {
+        economic,//鑺傝兘
+        quick_heat,//閫熺儹
+    }
+}
+
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index f8d3798..9b3858a 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -111,7 +111,7 @@
         /// <returns></returns>
         public List<Function> GetAcstParentList()
         {
-            return Functions.FindAll((obj) => obj.spk == SPK.AcstParent);//.OrderByDescending(o=>o.controlCounter).ToList()
+            return Functions.FindAll((obj) => obj.spk == SPK.AcstParent);
         }
 
         /// <summary>
@@ -122,6 +122,28 @@
         public List<Function> GetAcstSubList()
         {
             return Functions.FindAll((obj) => obj.spk == SPK.AcstSub);
+        }
+        /// <summary>
+        /// 缁垮缓绉戞妧绯荤粺
+        /// 鐑按鍣ㄥ垪琛�
+        /// </summary>
+        /// <returns></returns>
+        public List<Function> GetWaterHeaterJinmaoList()
+        {
+            return Functions.FindAll((obj) => obj.spk == SPK.WaterHeaterJinmao);
+        }
+        /// <summary>
+        /// 閲戣寕鍏変紡鍌ㄨ兘
+        /// </summary>
+        /// <returns></returns>
+        public List<Function> GetInverterJinmaoList()
+        {
+            var tempList = Functions.FindAll((obj) => obj.spk == SPK.InverterJinmao);
+            foreach(var device in tempList)
+            {
+                device.collect = true;
+            }
+            return tempList;
         }
 
         /// <summary>
@@ -209,11 +231,11 @@
         /// </summary>
         public List<Function> GetElectricals()
         {
-        var spkList = SPK.ElectricalSpkList();
+            var spkList = SPK.ElectricalSpkList();
             return Functions.FindAll((obj) => spkList.Contains(obj.spk));
         }
-    
-      
+
+
         /// <summary>
         /// 绾㈠瀹濆垪琛�
         /// </summary>
@@ -221,7 +243,7 @@
         {
             return Functions.FindAll((obj) => obj.spk == SPK.IrModule);
         }
-#endregion
+        #endregion
 
         /// <summary>
         /// 闊充箰鍒楄〃
@@ -285,7 +307,7 @@
         {
             get
             {
-                if(_OtherBrandFunction == null)
+                if (_OtherBrandFunction == null)
                 {
                     _OtherBrandFunction = new List<Function>();
                     var spkList = SPK.GetAll3tySPK();
@@ -353,9 +375,9 @@
                     {
                         //妫�娴嬮噸澶�
                         var same = Functions.FindAll((obj) => obj.deviceId == tempFunction.deviceId);
-                        if(same!= null)
+                        if (same != null)
                         {
-                            foreach(var sameTemp in same)
+                            foreach (var sameTemp in same)
                             {
                                 Functions.Remove(sameTemp);
                             }
@@ -427,7 +449,7 @@
             {
             }
             else
-            { 
+            {
                 switch (brandType)
                 {
                     case SPK.BrandType.Hdl:
@@ -494,11 +516,11 @@
         /// <summary>
         /// 鍔熻兘缁戝畾鎴块棿
         /// </summary>
-        public string FunctionsBindRooms(List<string> roomIds,List<string> deviceIds)
+        public string FunctionsBindRooms(List<string> roomIds, List<string> deviceIds)
         {
             var pm = new HttpServerRequest();
             var pack = pm.BindDeviceToRoom(deviceIds, roomIds);
-            if(pack.Code == StateCode.SUCCESS)
+            if (pack.Code == StateCode.SUCCESS)
             {
 
             }
@@ -512,7 +534,7 @@
         /// <summary>
         /// 鍒犻櫎鍦烘櫙
         /// </summary>
-        public void DeleteScene(Scene scene,bool upSevser)
+        public void DeleteScene(Scene scene, bool upSevser)
         {
             if (upSevser)
             {
@@ -599,7 +621,7 @@
                 {
                     Read3tyFunctionStatus();
 
-                    if(DriverLayer.Control.Ins.GatewayOnline_Local)
+                    if (DriverLayer.Control.Ins.GatewayOnline_Local)
                     {
 
                         //List<Function> functions = GetDeviceFunctionList(SPK.BrandType.Hdl);
@@ -663,12 +685,12 @@
                     MainPage.Log($"缁撴潫--璇诲彇");
                 }
 
-                
+
             })
             { IsBackground = true }.Start();
         }
 
-#region 鍦烘櫙鐩稿叧
+        #region 鍦烘櫙鐩稿叧
         /// <summary>
         /// 娣诲姞鍦烘櫙
         /// </summary>
@@ -700,10 +722,10 @@
             }
             return revPack.Code;
         }
-#endregion
+        #endregion
 
-#region 鏀惰棌鍔熻兘
-     
+        #region 鏀惰棌鍔熻兘
+
         /// <summary>
         /// 鏀惰棌鍦烘櫙
         /// </summary>
@@ -728,14 +750,14 @@
             return result;
         }
 
-#endregion
+        #endregion
 
 
-#region 
-       
+        #region 
 
 
-#endregion
+
+        #endregion
     }
 
 }
diff --git a/HDL_ON/Entity/Room.cs b/HDL_ON/Entity/Room.cs
index 2516c3e..28a8ab6 100644
--- a/HDL_ON/Entity/Room.cs
+++ b/HDL_ON/Entity/Room.cs
@@ -285,7 +285,7 @@
                     }
                     catch (Exception ex)
                     {
-                        MainPage.Log($"鍔熻兘鏁版嵁鍒濆鍖栧け璐ワ細{ex.Message}");
+                        MainPage.Log("Error",$"鍔熻兘鏁版嵁鍒濆鍖栧け璐ワ細{ex.StackTrace}");
                     }
                 }
                 return rooms;
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 404ac05..fb87cb4 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -543,6 +543,13 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Scene\SceneTargetTypeChoosePage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Common\AliyunLog\AliyunLogClient.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Common\AliyunLog\AliyunLogInvokeAsync.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Entity\Function\WaterHeaterJinmao.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Acst\WaterHeaterJinmaoPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Acst\WetarHeaterJinmaoHistoryPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\EnvironmentalScience\EchartsOption_Histogram.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Entity\Function\InverterJinmao.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Acst\InverterJinmaoPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Acst\InverterJinmaoHistroyPage.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
diff --git a/HDL_ON/UI/MainPage.cs b/HDL_ON/UI/MainPage.cs
index a80cb79..f9fb909 100644
--- a/HDL_ON/UI/MainPage.cs
+++ b/HDL_ON/UI/MainPage.cs
@@ -26,7 +26,7 @@
         /// <summary>
         /// 鐗堟湰鍙�
         /// </summary>
-        public static string VersionString = "2.4.8";
+        public static string VersionString = "2.6.0";
         ///// <summary>
         ///// 瀹㈡埛绔被鍨�
         ///// </summary>
@@ -116,7 +116,7 @@
             SPK.LightCCT,SPK.LightDimming,SPK.LightSwitch,SPK.LightRGB,
             SPK.CurtainRoller,SPK.CurtainSwitch,SPK.CurtainTrietex,SPK.CurtainDream,
             SPK.AcIr,SPK.AcStandard,SPK.HvacAC,
-            SPK.FloorHeatStandard,SPK.HvacFloorHeat,
+            SPK.FloorHeatStandard,SPK.HvacFloorHeat,SPK.HvacFloorHeatPanel,
             SPK.AirFreshStandard,SPK.HvacAirFresh,
             SPK.AirSwitch,
             SPK.PanelSocket,SPK.ElectricSocket,
@@ -148,6 +148,10 @@
                     _RoomNotSupportFunctionList.Add(SPK.ElectricEnergy);
                     _RoomNotSupportFunctionList.Add(SPK.OtherCommon);
                     _RoomNotSupportFunctionList.Add(SPK.SensorLight);
+                    _RoomNotSupportFunctionList.Add(SPK.AcstParent);
+                    _RoomNotSupportFunctionList.Add(SPK.AcstSub);
+                    _RoomNotSupportFunctionList.Add(SPK.WaterHeaterJinmao);
+                    _RoomNotSupportFunctionList.Add(SPK.InverterJinmao);
                     _RoomNotSupportFunctionList.AddRange(SPK.EnvironDeviceSpkList());
                     //_RoomNotSupportFunctionList.AddRange(SPK.ArmSensorSpkList());
                 }
@@ -491,11 +495,11 @@
                         UserBasePage.LoadPage();
                         BasePageView.PageIndex = 0;
 
-                        if (isFirstOpen)
-                        {
-                            //鍚姩瀵嗙爜楠岃瘉
-                            new AppUnlockPage().LoadPage(isFirstOpen);
-                        }
+                        //if (isFirstOpen)
+                        //{
+                        //    //鍚姩瀵嗙爜楠岃瘉
+                        //    new AppUnlockPage().LoadPage(isFirstOpen);
+                        //}
                         //涓婚〉鍔犺浇瀹屾垚,鍥炶皟浜嬩欢
                         pageShowEvent?.Invoke();
                         pageShowEvent = null;
diff --git a/HDL_ON/UI/UI0-Public/AppUnlockPage.cs b/HDL_ON/UI/UI0-Public/AppUnlockPage.cs
index ccdeeb4..a76aee8 100644
--- a/HDL_ON/UI/UI0-Public/AppUnlockPage.cs
+++ b/HDL_ON/UI/UI0-Public/AppUnlockPage.cs
@@ -1,444 +1,443 @@
-锘縰sing System;
-using Shared;
-namespace HDL_ON.UI
-{
-    /// <summary>
-	/// app瑙i攣鐣岄潰
-	/// </summary>
-    public class AppUnlockPage
-    {
-        void LoadOption()
-        {
-            //2020-12-12 鏈櫥褰曟垨鑰匒PP鏈惎鍔ㄩ兘杩斿洖锛岃В鍐抽棯閫�闂
-            if (UserInfo.Current == null || !UserInfo.Current.IsLogin || MainPage.BasePageView == null)
-            {
-                return;
-            }
-            Action action = () =>
-            {
-                UserInfo.Current.unlockTime = DateTime.Now;
-            };
-            //1:楠岃瘉鎸囩汗
-            if (UserInfo.Current.appUnlockType.Contains("3"))
-            {
-                TouchIDVerification();
-            }
-            else if (UserInfo.Current.appUnlockType.Contains("4"))
-            {
-                //Face ID楠岃瘉
-                //2020-12-11 寰呭鍔犻潰瀹瑰け璐ラ獙璇侀〉闈紝涓嶇劧浼氬鑷撮攣灞忓姞瀵嗘棤鏁�
-                FaceIDVerification();
-            }
-            else if (UserInfo.Current.appUnlockType.Contains("1"))
-            {
-                var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, action);
-                MainPage.BasePageView.AddChidren(page);
-                page.LoadPage("7");
-            }
-            else if (UserInfo.Current.appUnlockType.Contains("2"))
-            {
-                var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, action);
-                MainPage.BasePageView.AddChidren(page);
-                page.LoadPage("7");
-            }
-#if __ANDROID__
-            new System.Threading.Thread(() =>
-            {
-                int i = 0;
-                while (i > 1)
-                {
-                    MainPage.Log($"鍊掕鏃讹細{i} sec");
-                    System.Threading.Thread.Sleep(1000);
-                    i++;
-                }
-                Application.RunOnMainThread(() =>
-                {
-                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                });
-            })
-            { IsBackground = true }.Start();
-#else
-            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-#endif
+锘�//using System;
+//using Shared;
+//namespace HDL_ON.UI
+//{
+//    /// <summary>
+//	/// app瑙i攣鐣岄潰
+//	/// </summary>
+//    public class AppUnlockPage
+//    {
+//        void LoadOption()
+//        {
+//            //2020-12-12 鏈櫥褰曟垨鑰匒PP鏈惎鍔ㄩ兘杩斿洖锛岃В鍐抽棯閫�闂
+//            if (UserInfo.Current == null || !UserInfo.Current.IsLogin || MainPage.BasePageView == null)
+//            {
+//                return;
+//            }
+//            Action action = () =>
+//            {
+//                UserInfo.Current.unlockTime = DateTime.Now;
+//            };
+//            //1:楠岃瘉鎸囩汗
+//            if (UserInfo.Current.appUnlockType.Contains("3"))
+//            {
+//                TouchIDVerification();
+//            }
+//            else if (UserInfo.Current.appUnlockType.Contains("4"))
+//            {
+//                //Face ID楠岃瘉
+//                //2020-12-11 寰呭鍔犻潰瀹瑰け璐ラ獙璇侀〉闈紝涓嶇劧浼氬鑷撮攣灞忓姞瀵嗘棤鏁�
+//                FaceIDVerification();
+//            }
+//            else if (UserInfo.Current.appUnlockType.Contains("1"))
+//            {
+//                var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, action);
+//                MainPage.BasePageView.AddChidren(page);
+//                page.LoadPage("7");
+//            }
+//            else if (UserInfo.Current.appUnlockType.Contains("2"))
+//            {
+//                var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, action);
+//                MainPage.BasePageView.AddChidren(page);
+//                page.LoadPage("7");
+//            }
+//#if __ANDROID__
+//            new System.Threading.Thread(() =>
+//            {
+//                int i = 0;
+//                while (i > 1)
+//                {
+//                    MainPage.Log($"鍊掕鏃讹細{i} sec");
+//                    System.Threading.Thread.Sleep(1000);
+//                    i++;
+//                }
+//                Application.RunOnMainThread(() =>
+//                {
+//                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                });
+//            })
+//            { IsBackground = true }.Start();
+//#else
+//            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//#endif
 
-        }
+//        }
 
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="isFirstOpen">濡傛灉鏄涓�娆″惎鍔ㄧ洿鎺ュ脊绐楅獙璇佸瘑鐮�</param>
-        public void LoadPage(bool isFirstOpen = false)
-        {
-            try
-            {
-                if (!isFirstOpen)
-                {
-                    if (UserInfo.Current.unlockTime.AddMinutes(5) > DateTime.Now || UserInfo.Current.appUnlockPasswrod == "" || UserInfo.Current.appUnlockPage.Count == 0)
-                    {
-                        if (UserInfo.Current.inCall.AddMinutes(30) > DateTime.Now ||
-                            UserInfo.Current.inVideo)
-                        {
-                            //UserInfo.Current.PushMesLogTime = DateTime.MinValue;
+//        /// <summary>
+//        /// 
+//        /// </summary>
+//        /// <param name="isFirstOpen">濡傛灉鏄涓�娆″惎鍔ㄧ洿鎺ュ脊绐楅獙璇佸瘑鐮�</param>
+//        public void LoadPage(bool isFirstOpen = false)
+//        {
+//            try
+//            {
+//                if (!isFirstOpen)
+//                {
+//                    //if (UserInfo.Current.unlockTime.AddMinutes(5) > DateTime.Now || UserInfo.Current.appUnlockPasswrod == "" || UserInfo.Current.appUnlockPage.Count == 0)
+//                    {
+//                        if ( UserInfo.Current.inVideo)
+//                        {
+//                            //UserInfo.Current.PushMesLogTime = DateTime.MinValue;
 
-                            //var pushMes = new JPushMessageInfo()
-                            //{
-                            //    Title = UserInfo.Current.PushMesTitle,
-                            //    Content = UserInfo.Current.PushMesMessage,
-                            //    Extras = UserInfo.Current.PushMesExtras,
-                            //    messageType = UserInfo.Current.pushMesMessageType,
-                            //    expantContent = UserInfo.Current.pushMesExpantContent,
-                            //    HomeId = UserInfo.Current.PushMesHomeId,
-                            //};
-                            Shared.Application.RunOnMainThread(() =>
-                            {
-                                HDLCommon.Current.AdjustPushMessage(UserInfo.Current.pushMessageInfo);
-                            });
-                        }
+//                            //var pushMes = new JPushMessageInfo()
+//                            //{
+//                            //    Title = UserInfo.Current.PushMesTitle,
+//                            //    Content = UserInfo.Current.PushMesMessage,
+//                            //    Extras = UserInfo.Current.PushMesExtras,
+//                            //    messageType = UserInfo.Current.pushMesMessageType,
+//                            //    expantContent = UserInfo.Current.pushMesExpantContent,
+//                            //    HomeId = UserInfo.Current.PushMesHomeId,
+//                            //};
+//                            Shared.Application.RunOnMainThread(() =>
+//                            {
+//                                HDLCommon.Current.AdjustPushMessage(UserInfo.Current.pushMessageInfo);
+//                            });
+//                        }
 
-                        return;
-                    }
-                }
-                LoadOption();
-            }
-            catch
-            {
-                Utlis.WriteLine("AppUnlockPage error");
-            }
-        }
+//                        return;
+//                    }
+//                }
+//                LoadOption();
+//            }
+//            catch
+//            {
+//                Utlis.WriteLine("AppUnlockPage error");
+//            }
+//        }
 
-        /// <summary>
-        /// 鎸囩汗楠岃瘉
-        /// </summary>
-        void TouchIDVerification()
-        {
-            //楠岃瘉鎴愬姛Action
-            Action successAction = () =>
-            {
-                UserInfo.Current.unlockTime = DateTime.Now;
-            };
+//        /// <summary>
+//        /// 鎸囩汗楠岃瘉
+//        /// </summary>
+//        void TouchIDVerification()
+//        {
+//            //楠岃瘉鎴愬姛Action
+//            Action successAction = () =>
+//            {
+//                UserInfo.Current.unlockTime = DateTime.Now;
+//            };
 
-            //鎻愮ず鏁板瓧瀵嗙爜楠岃瘉杩樻槸缁樺埗鎵嬪娍楠岃瘉
-            string verificationTitleString = GetVerificationTitleString();
+//            //鎻愮ず鏁板瓧瀵嗙爜楠岃瘉杩樻槸缁樺埗鎵嬪娍楠岃瘉
+//            string verificationTitleString = GetVerificationTitleString();
 
-            //寮瑰嚭鎸囩汗楠岃瘉瀵硅瘽妗�
-            Action fingerAction = () =>
-            {
-                TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
-            };
-            //鍔犺浇UI椤甸潰
-            LoadGesturePage("7", fingerAction, null);
+//            //寮瑰嚭鎸囩汗楠岃瘉瀵硅瘽妗�
+//            Action fingerAction = () =>
+//            {
+//                TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
+//            };
+//            //鍔犺浇UI椤甸潰
+//            LoadGesturePage("7", fingerAction, null);
 
-            TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
-            TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
-            {
-                if (e == TouchIDUtils.TouchIDState.Success)
-                {
-                    MainPage.Log("KK:TouchID楠岃瘉鎴愬姛");
-                    UserInfo.Current.unlockTime = DateTime.Now;
-                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
-                }
-                else
-                {
-                    ///灏嗛獙璇佹寚绾圭殑椤甸潰绉婚櫎
-                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
-                    if (UserInfo.Current.appUnlockType.Contains("1"))
-                    {
-                        var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, successAction);
-                        MainPage.BasePageView.AddChidren(page);
-                        page.LoadPage("7");
-                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                    }
-                    else if (UserInfo.Current.appUnlockType.Contains("2"))
-                    {
-                        var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, successAction);
-                        MainPage.BasePageView.AddChidren(page);
-                        page.LoadPage("7");
-                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                    }
+//            TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.PleaseVerifyTheFingerprint));
+//            TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
+//            {
+//                if (e == TouchIDUtils.TouchIDState.Success)
+//                {
+//                    MainPage.Log("KK:TouchID楠岃瘉鎴愬姛");
+//                    UserInfo.Current.unlockTime = DateTime.Now;
+//                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
+//                }
+//                else
+//                {
+//                    ///灏嗛獙璇佹寚绾圭殑椤甸潰绉婚櫎
+//                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
+//                    if (UserInfo.Current.appUnlockType.Contains("1"))
+//                    {
+//                        var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, successAction);
+//                        MainPage.BasePageView.AddChidren(page);
+//                        page.LoadPage("7");
+//                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                    }
+//                    else if (UserInfo.Current.appUnlockType.Contains("2"))
+//                    {
+//                        var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, successAction);
+//                        MainPage.BasePageView.AddChidren(page);
+//                        page.LoadPage("7");
+//                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                    }
 
-                }
-            };
-        }
+//                }
+//            };
+//        }
 
-        /// <summary>
-        /// 鍔犺浇鎸囩汗楠岃瘉鐣岄潰
-        /// </summary>
-        /// <param name="optionType"></param>
-        /// <param name="fingerAction"></param>
-        /// <param name="successAction"></param>
-        public void LoadGesturePage(string optionType, Action fingerAction, Action successAction)
-        {
-            var bodyView = new FrameLayout()
-            {
-                BackgroundColor = CSS.CSS_Color.MainBackgroundColor
-            };
-            MainPage.BasePageView.AddChidren(bodyView);
+//        /// <summary>
+//        /// 鍔犺浇鎸囩汗楠岃瘉鐣岄潰
+//        /// </summary>
+//        /// <param name="optionType"></param>
+//        /// <param name="fingerAction"></param>
+//        /// <param name="successAction"></param>
+//        public void LoadGesturePage(string optionType, Action fingerAction, Action successAction)
+//        {
+//            var bodyView = new FrameLayout()
+//            {
+//                BackgroundColor = CSS.CSS_Color.MainBackgroundColor
+//            };
+//            MainPage.BasePageView.AddChidren(bodyView);
 
-            bodyView.AddChidren(new Button()
-            {
-                Height = Application.GetRealHeight(64),
-                BackgroundColor = CSS.CSS_Color.BackgroundColor,
-            });
+//            bodyView.AddChidren(new Button()
+//            {
+//                Height = Application.GetRealHeight(64),
+//                BackgroundColor = CSS.CSS_Color.BackgroundColor,
+//            });
 
-            bodyView.AddChidren(new Button()
-            {
-                Y = Application.GetRealHeight(196),
-                Height = Application.GetRealHeight(42),
-                TextAlignment = TextAlignment.Center,
-                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
-                TextSize = CSS.CSS_FontSize.SubheadingFontSize,
-                TextID = StringId.PleaseVerifyTheFingerprint,
-            });
+//            bodyView.AddChidren(new Button()
+//            {
+//                Y = Application.GetRealHeight(196),
+//                Height = Application.GetRealHeight(42),
+//                TextAlignment = TextAlignment.Center,
+//                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS.CSS_FontSize.SubheadingFontSize,
+//                TextID = StringId.PleaseVerifyTheFingerprint,
+//            });
 
-            var btnFingerIcon = new Button()
-            {
-                Y = Application.GetRealHeight(260),
-                Gravity = Gravity.CenterHorizontal,
-                Width = Application.GetRealWidth(102),
-                Height = Application.GetRealWidth(102),
-                UnSelectedImagePath = "PersonalCenter/AppUnlockSetting/FingerIconBlue.png",
-            };
-            bodyView.AddChidren(btnFingerIcon);
+//            var btnFingerIcon = new Button()
+//            {
+//                Y = Application.GetRealHeight(260),
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(102),
+//                Height = Application.GetRealWidth(102),
+//                UnSelectedImagePath = "PersonalCenter/AppUnlockSetting/FingerIconBlue.png",
+//            };
+//            bodyView.AddChidren(btnFingerIcon);
 
-            btnFingerIcon.MouseUpEventHandler = (sender, e) =>
-            {
-                fingerAction();
-            };
+//            btnFingerIcon.MouseUpEventHandler = (sender, e) =>
+//            {
+//                fingerAction();
+//            };
 
-            var btnOtherVerify = new Button()
-            {
-                Y = Application.GetRealHeight(527),
-                Height = Application.GetRealHeight(40),
-                TextAlignment = TextAlignment.Center,
-                TextColor = CSS.CSS_Color.MainColor,
-                TextSize = CSS.CSS_FontSize.TextFontSize,
-                TextID = UserInfo.Current.appUnlockType.Contains("1") ? StringId.VerifyDigitalPassword : StringId.VerifyGesturePassword,
-            };
-            bodyView.AddChidren(btnOtherVerify);
+//            var btnOtherVerify = new Button()
+//            {
+//                Y = Application.GetRealHeight(527),
+//                Height = Application.GetRealHeight(40),
+//                TextAlignment = TextAlignment.Center,
+//                TextColor = CSS.CSS_Color.MainColor,
+//                TextSize = CSS.CSS_FontSize.TextFontSize,
+//                TextID = UserInfo.Current.appUnlockType.Contains("1") ? StringId.VerifyDigitalPassword : StringId.VerifyGesturePassword,
+//            };
+//            bodyView.AddChidren(btnOtherVerify);
 
-            btnOtherVerify.MouseUpEventHandler = (sender, e) =>
-            {
-                ///灏嗛獙璇佹寚绾圭殑椤甸潰绉婚櫎
-                MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
-                //Action action = () =>
-                //{
-                //    UserInfo.Current.unlockTime = DateTime.Now;
-                //};
-                //if (UserInfo.Current.appUnlockType.Contains("1"))
-                //{
-                //    var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, action);
-                //    MainPage.BasePageView.AddChidren(page);
-                //    page.LoadPage(optionType);
-                //    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                //}
-                //else if (UserInfo.Current.appUnlockType.Contains("2"))
-                //{
-                //    var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, action);
-                //    MainPage.BasePageView.AddChidren(page);
-                //    page.LoadPage(optionType);
-                //    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                //}
+//            btnOtherVerify.MouseUpEventHandler = (sender, e) =>
+//            {
+//                ///灏嗛獙璇佹寚绾圭殑椤甸潰绉婚櫎
+//                MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
+//                //Action action = () =>
+//                //{
+//                //    UserInfo.Current.unlockTime = DateTime.Now;
+//                //};
+//                //if (UserInfo.Current.appUnlockType.Contains("1"))
+//                //{
+//                //    var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, action);
+//                //    MainPage.BasePageView.AddChidren(page);
+//                //    page.LoadPage(optionType);
+//                //    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                //}
+//                //else if (UserInfo.Current.appUnlockType.Contains("2"))
+//                //{
+//                //    var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, action);
+//                //    MainPage.BasePageView.AddChidren(page);
+//                //    page.LoadPage(optionType);
+//                //    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                //}
 
-                if (successAction == null)
-                {
-                    Action action = () =>
-                    {
-                        UserInfo.Current.unlockTime = DateTime.Now;
-                    };
-                    GotogoToVerifyPasswordPage(optionType, action);
-                }
-                else
-                {
-                    GotogoToVerifyPasswordPage(optionType, successAction);
-                }
-            };
+//                if (successAction == null)
+//                {
+//                    Action action = () =>
+//                    {
+//                        UserInfo.Current.unlockTime = DateTime.Now;
+//                    };
+//                    GotogoToVerifyPasswordPage(optionType, action);
+//                }
+//                else
+//                {
+//                    GotogoToVerifyPasswordPage(optionType, successAction);
+//                }
+//            };
 
-            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
 
-            //dialog.Show();
-            //Console.WriteLine("-0987654321");
-        }
+//            //dialog.Show();
+//            //Console.WriteLine("-0987654321");
+//        }
 
-        /// <summary>
-        /// 闈㈠ID楠岃瘉
-        /// </summary>
-        void FaceIDVerification()
-        {
-            //楠岃瘉鎴愬姛Action
-            Action successAction = () =>
-            {
-                UserInfo.Current.unlockTime = DateTime.Now;
-            };
+//        /// <summary>
+//        /// 闈㈠ID楠岃瘉
+//        /// </summary>
+//        void FaceIDVerification()
+//        {
+//            //楠岃瘉鎴愬姛Action
+//            Action successAction = () =>
+//            {
+//                UserInfo.Current.unlockTime = DateTime.Now;
+//            };
 
-            //鎻愮ず鏁板瓧瀵嗙爜楠岃瘉杩樻槸缁樺埗鎵嬪娍楠岃瘉
-            string verificationTitleString = GetVerificationTitleString();
+//            //鎻愮ず鏁板瓧瀵嗙爜楠岃瘉杩樻槸缁樺埗鎵嬪娍楠岃瘉
+//            string verificationTitleString = GetVerificationTitleString();
 
-            //寮瑰嚭鎸囩汗楠岃瘉瀵硅瘽妗�
-            Action faceIDAction = () =>
-            {
-                TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.VerifyFaceID));
-            };
-            //鍔犺浇UI椤甸潰
-            LoadFaceIDGesturePage("7", faceIDAction, null);
+//            //寮瑰嚭鎸囩汗楠岃瘉瀵硅瘽妗�
+//            Action faceIDAction = () =>
+//            {
+//                TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.VerifyFaceID));
+//            };
+//            //鍔犺浇UI椤甸潰
+//            LoadFaceIDGesturePage("7", faceIDAction, null);
 
-            TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.VerifyFaceID));
-            TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
-            {
-                if (e == TouchIDUtils.TouchIDState.Success)
-                {
-                    MainPage.Log("KK:TouchID楠岃瘉鎴愬姛");
-                    UserInfo.Current.unlockTime = DateTime.Now;
-                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
-                }
-                else
-                {
-                    ///灏嗛獙璇佹寚绾圭殑椤甸潰绉婚櫎
-                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
-                    if (UserInfo.Current.appUnlockType.Contains("1"))
-                    {
-                        var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, successAction);
-                        MainPage.BasePageView.AddChidren(page);
-                        page.LoadPage("7");
-                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                    }
-                    else if (UserInfo.Current.appUnlockType.Contains("2"))
-                    {
-                        var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, successAction);
-                        MainPage.BasePageView.AddChidren(page);
-                        page.LoadPage("7");
-                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                    }
+//            TouchIDUtils.Instance.showTouchIDWithDescribe(verificationTitleString, Language.StringByID(StringId.VerifyFaceID));
+//            TouchIDUtils.Instance.OnHDLTouchIDStateBackEvent = (sender1, e) =>
+//            {
+//                if (e == TouchIDUtils.TouchIDState.Success)
+//                {
+//                    MainPage.Log("KK:TouchID楠岃瘉鎴愬姛");
+//                    UserInfo.Current.unlockTime = DateTime.Now;
+//                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
+//                }
+//                else
+//                {
+//                    ///灏嗛獙璇佹寚绾圭殑椤甸潰绉婚櫎
+//                    MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
+//                    if (UserInfo.Current.appUnlockType.Contains("1"))
+//                    {
+//                        var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, successAction);
+//                        MainPage.BasePageView.AddChidren(page);
+//                        page.LoadPage("7");
+//                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                    }
+//                    else if (UserInfo.Current.appUnlockType.Contains("2"))
+//                    {
+//                        var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, successAction);
+//                        MainPage.BasePageView.AddChidren(page);
+//                        page.LoadPage("7");
+//                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//                    }
 
-                }
-            };
-        }
+//                }
+//            };
+//        }
 
-        /// <summary>
-        ///  鍔犺浇闈㈠ID楠岃瘉鐣岄潰
-        /// </summary>
-        /// <param name="optionType"></param>
-        /// <param name="faceIDAction"></param>
-        /// <param name="successAction">鎸囧畾鎴愬姛鐨勪簨浠跺洖璋�</param>
-        public void LoadFaceIDGesturePage(string optionType, Action faceIDAction, Action successAction)
-        {
-            var bodyView = new FrameLayout()
-            {
-                BackgroundColor = CSS.CSS_Color.MainBackgroundColor
-            };
-            MainPage.BasePageView.AddChidren(bodyView);
+//        /// <summary>
+//        ///  鍔犺浇闈㈠ID楠岃瘉鐣岄潰
+//        /// </summary>
+//        /// <param name="optionType"></param>
+//        /// <param name="faceIDAction"></param>
+//        /// <param name="successAction">鎸囧畾鎴愬姛鐨勪簨浠跺洖璋�</param>
+//        public void LoadFaceIDGesturePage(string optionType, Action faceIDAction, Action successAction)
+//        {
+//            var bodyView = new FrameLayout()
+//            {
+//                BackgroundColor = CSS.CSS_Color.MainBackgroundColor
+//            };
+//            MainPage.BasePageView.AddChidren(bodyView);
 
-            bodyView.AddChidren(new Button()
-            {
-                Height = Application.GetRealHeight(64),
-                BackgroundColor = CSS.CSS_Color.BackgroundColor,
-            });
+//            bodyView.AddChidren(new Button()
+//            {
+//                Height = Application.GetRealHeight(64),
+//                BackgroundColor = CSS.CSS_Color.BackgroundColor,
+//            });
 
-            bodyView.AddChidren(new Button()
-            {
-                Y = Application.GetRealHeight(196),
-                Height = Application.GetRealHeight(42),
-                TextAlignment = TextAlignment.Center,
-                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
-                TextSize = CSS.CSS_FontSize.SubheadingFontSize,
-                TextID = StringId.VerifyFaceID,
-            });
+//            bodyView.AddChidren(new Button()
+//            {
+//                Y = Application.GetRealHeight(196),
+//                Height = Application.GetRealHeight(42),
+//                TextAlignment = TextAlignment.Center,
+//                TextColor = CSS.CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS.CSS_FontSize.SubheadingFontSize,
+//                TextID = StringId.VerifyFaceID,
+//            });
 
-            var btnFaceIdIcon = new Button()
-            {
-                Y = Application.GetRealHeight(260),
-                Gravity = Gravity.CenterHorizontal,
-                Width = Application.GetRealWidth(102),
-                Height = Application.GetRealWidth(102),
-                UnSelectedImagePath = "PersonalCenter/AppUnlockSetting/FaceIdIconBig.png",
-            };
-            bodyView.AddChidren(btnFaceIdIcon);
+//            var btnFaceIdIcon = new Button()
+//            {
+//                Y = Application.GetRealHeight(260),
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(102),
+//                Height = Application.GetRealWidth(102),
+//                UnSelectedImagePath = "PersonalCenter/AppUnlockSetting/FaceIdIconBig.png",
+//            };
+//            bodyView.AddChidren(btnFaceIdIcon);
 
-            btnFaceIdIcon.MouseUpEventHandler = (sender, e) =>
-            {
-                faceIDAction();
-            };
+//            btnFaceIdIcon.MouseUpEventHandler = (sender, e) =>
+//            {
+//                faceIDAction();
+//            };
 
-            var btnOtherVerify = new Button()
-            {
-                Y = Application.GetRealHeight(527),
-                Height = Application.GetRealHeight(40),
-                TextAlignment = TextAlignment.Center,
-                TextColor = CSS.CSS_Color.MainColor,
-                TextSize = CSS.CSS_FontSize.TextFontSize,
-                TextID = UserInfo.Current.appUnlockType.Contains("1") ? StringId.VerifyDigitalPassword : StringId.VerifyGesturePassword,
-            };
-            bodyView.AddChidren(btnOtherVerify);
+//            var btnOtherVerify = new Button()
+//            {
+//                Y = Application.GetRealHeight(527),
+//                Height = Application.GetRealHeight(40),
+//                TextAlignment = TextAlignment.Center,
+//                TextColor = CSS.CSS_Color.MainColor,
+//                TextSize = CSS.CSS_FontSize.TextFontSize,
+//                TextID = UserInfo.Current.appUnlockType.Contains("1") ? StringId.VerifyDigitalPassword : StringId.VerifyGesturePassword,
+//            };
+//            bodyView.AddChidren(btnOtherVerify);
 
-            btnOtherVerify.MouseUpEventHandler = (sender, e) =>
-            {
-                ///灏嗛獙璇侀潰瀹笽D鐨勯〉闈㈢Щ闄�
-                MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
+//            btnOtherVerify.MouseUpEventHandler = (sender, e) =>
+//            {
+//                ///灏嗛獙璇侀潰瀹笽D鐨勯〉闈㈢Щ闄�
+//                MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1).RemoveFromParent();
                
-                if (successAction == null)
-                {
-                    Action action = () =>
-                    {
-                        UserInfo.Current.unlockTime = DateTime.Now;
-                    };
-                    GotogoToVerifyPasswordPage(optionType, action);
-                }
-                else
-                {
-                    GotogoToVerifyPasswordPage(optionType, successAction);
-                }
+//                if (successAction == null)
+//                {
+//                    Action action = () =>
+//                    {
+//                        UserInfo.Current.unlockTime = DateTime.Now;
+//                    };
+//                    GotogoToVerifyPasswordPage(optionType, action);
+//                }
+//                else
+//                {
+//                    GotogoToVerifyPasswordPage(optionType, successAction);
+//                }
 
-            };
+//            };
 
-            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
 
-        }
+//        }
 
-        /// <summary>
-        /// 璺宠浆鎵嬪娍鎴栬�呭瘑鐮侀獙璇佺晫闈�
-        /// </summary>
-        /// <param name="optionType">1:璁剧疆瀵嗙爜锛�2:楠岃瘉瀵嗙爜;3:鍏抽棴瀵嗙爜;4:鍏抽棴瑙i攣璁剧疆;5:鎸囩汗ID寮�鍏筹紱6:闈㈠ID寮�鍏�;7:瑙i攣楠岃瘉</param>
-        /// <param name="successAction"></param>
-        void GotogoToVerifyPasswordPage(string optionType, Action successAction)
-        {
-            if (UserInfo.Current.appUnlockType.Contains("1"))
-            {
-                var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, successAction);
-                MainPage.BasePageView.AddChidren(page);
-                page.LoadPage(optionType);
-                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-            }
-            else if (UserInfo.Current.appUnlockType.Contains("2"))
-            {
-                var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, successAction);
-                MainPage.BasePageView.AddChidren(page);
-                page.LoadPage(optionType);
-                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-            }
-        }
+//        /// <summary>
+//        /// 璺宠浆鎵嬪娍鎴栬�呭瘑鐮侀獙璇佺晫闈�
+//        /// </summary>
+//        /// <param name="optionType">1:璁剧疆瀵嗙爜锛�2:楠岃瘉瀵嗙爜;3:鍏抽棴瀵嗙爜;4:鍏抽棴瑙i攣璁剧疆;5:鎸囩汗ID寮�鍏筹紱6:闈㈠ID寮�鍏�;7:瑙i攣楠岃瘉</param>
+//        /// <param name="successAction"></param>
+//        void GotogoToVerifyPasswordPage(string optionType, Action successAction)
+//        {
+//            if (UserInfo.Current.appUnlockType.Contains("1"))
+//            {
+//                var page = new AppUnlockPasswordPage(UserInfo.Current.appUnlockPasswrod, successAction);
+//                MainPage.BasePageView.AddChidren(page);
+//                page.LoadPage(optionType);
+//                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//            }
+//            else if (UserInfo.Current.appUnlockType.Contains("2"))
+//            {
+//                var page = new AppUnlockGesturePage(UserInfo.Current.appUnlockPasswrod, successAction);
+//                MainPage.BasePageView.AddChidren(page);
+//                page.LoadPage(optionType);
+//                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+//            }
+//        }
 
-        /// <summary>
-        /// 鍒ゆ柇鏄惁鏁板瓧楠岃瘉銆佸惁鍒欑粯鍒舵墜鍔块獙璇�
-        /// </summary>
-        /// <returns></returns>
-        bool CheckIfUnlockPassword()
-        {
-            return UserInfo.Current.appUnlockType.Contains("1");
-        }
+//        /// <summary>
+//        /// 鍒ゆ柇鏄惁鏁板瓧楠岃瘉銆佸惁鍒欑粯鍒舵墜鍔块獙璇�
+//        /// </summary>
+//        /// <returns></returns>
+//        bool CheckIfUnlockPassword()
+//        {
+//            return UserInfo.Current.appUnlockType.Contains("1");
+//        }
 
-        /// <summary>
-        /// 鍒ゆ柇鏄惁鏁板瓧楠岃瘉銆佸惁鍒欑粯鍒舵墜鍔块獙璇�
-        /// </summary>
-        /// <returns></returns>
-        string GetVerificationTitleString()
-        {
-            if (CheckIfUnlockPassword())
-            {
-                return Language.StringByID(StringId.PasswordVerification);
-            }
-            else
-            {
-                return Language.StringByID(StringId.GestureVerification);
-            }
-        }
-    }
-}
\ No newline at end of file
+//        /// <summary>
+//        /// 鍒ゆ柇鏄惁鏁板瓧楠岃瘉銆佸惁鍒欑粯鍒舵墜鍔块獙璇�
+//        /// </summary>
+//        /// <returns></returns>
+//        string GetVerificationTitleString()
+//        {
+//            if (CheckIfUnlockPassword())
+//            {
+//                return Language.StringByID(StringId.PasswordVerification);
+//            }
+//            else
+//            {
+//                return Language.StringByID(StringId.GestureVerification);
+//            }
+//        }
+//    }
+//}
\ No newline at end of file
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmebly.cs b/HDL_ON/UI/UI0-Public/PublicAssmebly.cs
index 151ee2f..ef20fb3 100644
--- a/HDL_ON/UI/UI0-Public/PublicAssmebly.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmebly.cs
@@ -793,311 +793,6 @@
                     action(curItemKey);
                 }
             };
-
-
-
-            return;
-
-            //    Button lastButton = new Button();
-            //Dialog dialog = new Dialog();
-            //var pView = new FrameLayout()
-            //{
-            //    BackgroundColor = CSS_Color.DialogTransparentColor1,
-            //};
-            //dialog.AddChidren(pView);
-
-            //var itemCount = items.Count;
-            //var optionBaseViewHeight = ((itemCount > 3 ? itemCount : 3) + 1) * Application.GetRealHeight(50);
-            //var optionBaseView = new FrameLayout()
-            //{
-            //    //Y = Application.GetRealHeight(439),
-            //    Y = Application.GetRealHeight(647) - optionBaseViewHeight,
-            //    Gravity = Gravity.CenterHorizontal,
-            //    Width = Application.GetRealWidth(343),
-            //    //Height = Application.GetRealHeight(208),
-            //    Height = optionBaseViewHeight,
-            //    //AnimateSpeed = 0.3f,
-            //    //Animate = Animate.DownToUp,
-            //    BackgroundColor = CSS_Color.MainBackgroundColor,
-            //    Radius = (uint)Application.GetRealWidth(12),
-            //};
-            //pView.AddChidren(optionBaseView);
-
-            //var topView = new FrameLayout()
-            //{
-            //    Gravity = Gravity.CenterHorizontal,
-            //    Width = Application.GetRealWidth(343),
-            //    Height = Application.GetRealHeight(50),
-            //    BackgroundColor = CSS_Color.MainBackgroundColor,
-            //    Radius = (uint)Application.GetRealWidth(12),
-            //};
-            //optionBaseView.AddChidren(topView);
-
-            //var btnTitle = new Button()
-            //{
-            //    Gravity = Gravity.CenterHorizontal,
-            //    TextAlignment = TextAlignment.Center,
-            //    Width = Application.GetRealWidth(100),
-            //    TextID = StringId.SceneDelay,
-            //    IsBold = true,
-            //    TextColor = CSS_Color.FirstLevelTitleColor,
-            //    TextSize = CSS_FontSize.SubheadingFontSize,
-            //};
-            //topView.AddChidren(btnTitle);
-
-            //var btnCancel = new Button()
-            //{
-            //    X = Application.GetRealWidth(21),
-            //    Width = Application.GetRealWidth(100),
-            //    TextAlignment = TextAlignment.CenterLeft,
-            //    TextColor = CSS_Color.PromptingColor1,
-            //    TextSize = CSS_FontSize.TextFontSize,
-            //    TextID = StringId.Cancel,
-            //};
-            //topView.AddChidren(btnCancel);
-
-            //var btnConfrim = new Button()
-            //{
-            //    X = Application.GetRealWidth(160),
-            //    Width = Application.GetRealWidth(160),
-            //    TextAlignment = TextAlignment.CenterRight,
-            //    TextColor = CSS_Color.MainColor,
-            //    TextSize = CSS_FontSize.TextFontSize,
-            //    TextID = StringId.Confirm,
-            //};
-            //topView.AddChidren(btnConfrim);
-
-            //var itemsView = new VerticalScrolViewLayout()
-            //{
-            //    Y = topView.Bottom,
-            //    Height = optionBaseViewHeight - Application.GetRealHeight(50),
-            //    ScrollEnabled = itemCount > 4,
-            //};
-            //optionBaseView.AddChidren(itemsView);
-
-            //bool isFrist = true;
-            //Button btnLastSelectedTip = null;
-
-            //foreach (var item in items)
-            //{
-            //    if (isFrist)
-            //    {
-            //        isFrist = false;
-            //    }
-            //    else
-            //    {
-            //        itemsView.AddChidren(new Button() { Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
-            //    }
-            //    var row = new FrameLayout()
-            //    {
-            //        Height = Application.GetRealHeight(50),
-            //    };
-            //    itemsView.AddChidren(row);
-
-            //    var btnTipSelected = new Button()
-            //    {
-            //        X = Application.GetRealWidth(303),
-            //        Gravity = Gravity.CenterVertical,
-            //        Width = Application.GetRealWidth(28),
-            //        Height= Application.GetRealWidth(28),
-            //        UnSelectedImagePath = "Public/ChooseIcon.png",
-            //        SelectedImagePath = "Public/ChooseOnIcon.png",
-            //    };
-            //    row.AddChidren(btnTipSelected);
-            //    if( item.Key == curItemKey)
-            //    {
-            //        btnTipSelected.IsSelected = true;
-            //        btnLastSelectedTip = btnTipSelected;
-            //    }
-
-
-            //    var btnRowTitle = new Button()
-            //    {
-            //        X = Application.GetRealWidth(16),
-            //        Text = item.Value,
-            //        TextSize = CSS_FontSize.TextFontSize,
-            //        TextColor = CSS_Color.FirstLevelTitleColor,
-            //        TextAlignment = TextAlignment.CenterLeft,
-            //    };
-            //    row.AddChidren(btnRowTitle);
-
-            //    btnRowTitle.MouseUpEventHandler = (sender, e) =>
-            //    {
-            //        if (btnTipSelected.IsSelected)
-            //        {
-            //            curItemKey = "0";
-            //            btnTipSelected.IsSelected = false;
-            //            btnLastSelectedTip = null;
-            //        }
-            //        else
-            //        {
-            //            curItemKey = item.Key;
-            //            if (btnLastSelectedTip != null)
-            //            {
-            //                btnLastSelectedTip.IsSelected = false;
-            //            }
-            //            btnTipSelected.IsSelected = true;
-            //            btnLastSelectedTip = btnTipSelected;
-            //        }
-            //    };
-
-            //}
-
-            //Button btn1 = new Button()
-            //{
-            //    Width = Application.GetRealWidth(128),
-            //    Height = Application.GetRealWidth(44),
-            //    TextAlignment = TextAlignment.Center,
-            //    TextSize = CSS_FontSize.SubheadingFontSize,
-            //    TextColor = CSS_Color.FirstLevelTitleColor,
-            //    Text = "30s",
-            //    BorderColor = CSS_Color.PromptingColor1,
-            //    BorderWidth = 1,
-            //    Radius = (uint)Application.GetRealWidth(8),
-            //    SelectedTextColor = CSS_Color.MainBackgroundColor,
-            //    SelectedBackgroundColor = CSS_Color.MainColor,
-            //    X = Application.GetRealWidth(20),
-            //    Y = Application.GetRealHeight(80),
-            //    IsSelected = curItemKey == "30"
-            //};
-            //optionBaseView.AddChidren(btn1);
-
-
-            //Button btn2 = new Button()
-            //{
-            //    Width = Application.GetRealWidth(128),
-            //    Height = Application.GetRealWidth(44),
-            //    TextAlignment = TextAlignment.Center,
-            //    TextSize = CSS_FontSize.SubheadingFontSize,
-            //    TextColor = CSS_Color.FirstLevelTitleColor,
-            //    Text = "1min",
-            //    BorderColor = CSS_Color.PromptingColor1,
-            //    BorderWidth = 1,
-            //    Radius = (uint)Application.GetRealWidth(8),
-            //    SelectedTextColor = CSS_Color.MainBackgroundColor,
-            //    SelectedBackgroundColor = CSS_Color.MainColor,
-            //    X = Application.GetRealWidth(195),
-            //    Y = Application.GetRealHeight(80),
-            //    IsSelected = curItemKey == "60"
-            //};
-            //optionBaseView.AddChidren(btn2);
-
-
-            //Button btn3 = new Button()
-            //{
-            //    Width = Application.GetRealWidth(128),
-            //    Height = Application.GetRealWidth(44),
-            //    TextAlignment = TextAlignment.Center,
-            //    TextSize = CSS_FontSize.SubheadingFontSize,
-            //    TextColor = CSS_Color.FirstLevelTitleColor,
-            //    Text = "2min",
-            //    BorderColor = CSS_Color.PromptingColor1,
-            //    BorderWidth = 1,
-            //    Radius = (uint)Application.GetRealWidth(8),
-            //    SelectedTextColor = CSS_Color.MainBackgroundColor,
-            //    SelectedBackgroundColor = CSS_Color.MainColor,
-            //    X = Application.GetRealWidth(20),
-            //    Y = Application.GetRealHeight(140),
-            //    IsSelected = curItemKey == "120"
-            //};
-            //optionBaseView.AddChidren(btn3);
-
-
-            //Button btn4 = new Button()
-            //{
-            //    Width = Application.GetRealWidth(128),
-            //    Height = Application.GetRealWidth(44),
-            //    TextAlignment = TextAlignment.Center,
-            //    TextSize = CSS_FontSize.SubheadingFontSize,
-            //    TextColor = CSS_Color.FirstLevelTitleColor,
-            //    Text = "5min",
-            //    BorderColor = CSS_Color.PromptingColor1,
-            //    BorderWidth = 1,
-            //    Radius = (uint)Application.GetRealWidth(8),
-            //    SelectedTextColor = CSS_Color.MainBackgroundColor,
-            //    SelectedBackgroundColor = CSS_Color.MainColor,
-            //    X = Application.GetRealWidth(195),
-            //    Y = Application.GetRealHeight(140),
-            //    IsSelected = curItemKey == "300"
-            //};
-            //optionBaseView.AddChidren(btn4);
-
-
-
-
-            //dialog.Show();
-
-            //pView.MouseUpEventHandler = (sender, e) =>
-            //{
-            //    dialog.Close();
-            //};
-
-            //btnCancel.MouseUpEventHandler = (sender, e) =>
-            //{
-            //    dialog.Close();
-            //};
-            //btnConfrim.MouseUpEventHandler = (sender, e) =>
-            //{
-            //    action(curItemKey);
-            //    dialog.Close();
-            //};
-            //btn1.MouseUpEventHandler = (sender, e) => {
-            //    btn1.IsSelected = !btn1.IsSelected;
-            //    btn2.IsSelected = false;
-            //    btn3.IsSelected = false;
-            //    btn4.IsSelected = false;
-            //    if(btn1.IsSelected)
-            //    {
-            //        curItemKey = "30";
-            //    }
-            //    else
-            //    {
-            //        curItemKey = "0";
-            //    }       
-            //};
-            //btn2.MouseUpEventHandler = (sender, e) => {
-            //    btn2.IsSelected = !btn2.IsSelected;
-            //    btn1.IsSelected = false;
-            //    btn3.IsSelected = false;
-            //    btn4.IsSelected = false;
-            //    if (btn2.IsSelected)
-            //    {
-            //        curItemKey = "60";
-            //    }
-            //    else
-            //    {
-            //        curItemKey = "0";
-            //    }
-            //};
-            //btn3.MouseUpEventHandler = (sender, e) => {
-            //    btn3.IsSelected = !btn3.IsSelected;
-            //    btn2.IsSelected = false;
-            //    btn1.IsSelected = false;
-            //    btn4.IsSelected = false;
-            //    if (btn3.IsSelected)
-            //    {
-            //        curItemKey = "120";
-            //    }
-            //    else
-            //    {
-            //        curItemKey = "0";
-            //    }
-            //};
-            //btn4.MouseUpEventHandler = (sender, e) => {
-            //    btn4.IsSelected = !btn4.IsSelected;
-            //    btn2.IsSelected = false;
-            //    btn3.IsSelected = false;
-            //    btn1.IsSelected = false;
-            //    if (btn4.IsSelected)
-            //    {
-            //        curItemKey = "300";
-            //    }
-            //    else
-            //    {
-            //        curItemKey = "0";
-            //    }
-            //};
-
         }
 
     }
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
index 890027e..49f5304 100644
--- a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -12,7 +12,7 @@
         /// <summary>
         /// 鍔熻兘鎺у埗鐣岄潰璺宠浆浜嬩欢
         /// </summary>
-        public EventHandler<MouseEventArgs> LoadEvent_SkipFunctionControlPage(Function function, Button btnCollectionIcon, Button btnName, Button btnFromFloor, Comerom comerom,Action action
+        public EventHandler<MouseEventArgs> LoadEvent_SkipFunctionControlPage(Function function, Button btnCollectionIcon, Button btnName, Button btnFromFloor, Comerom comerom, Action action
             )
         {
             EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
@@ -28,9 +28,9 @@
                         MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                         break;
                     case SPK.GroupControl:
-                         //var dialog = new GroupControlPage(FunctionList.List.groupControls.Find((obj) => obj.sid == function.sid));
-                         //dialog.ShowDialog();
-                         var groupControlPage = new GroupControlPage_V2(FunctionList.List.groupControls.Find((obj) => obj.sid == function.sid));
+                        //var dialog = new GroupControlPage(FunctionList.List.groupControls.Find((obj) => obj.sid == function.sid));
+                        //dialog.ShowDialog();
+                        var groupControlPage = new GroupControlPage_V2(FunctionList.List.groupControls.Find((obj) => obj.sid == function.sid));
                         MainPage.BasePageView.AddChidren(groupControlPage);
                         groupControlPage.LoadPage(btnCollectionIcon, btnName, btnFromFloor);
                         MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
@@ -102,7 +102,7 @@
                         MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                         break;
                     case SPK.FloorHeatStandard:
-                    case SPK.HvacFloorHeat:
+                    case SPK.HvacFloorHeat:case SPK.HvacFloorHeatPanel:
                         var fhView = new FloorHeatingPage(function);
                         MainPage.BasePageView.AddChidren(fhView);
                         fhView.LoadPage(btnCollectionIcon, btnName, btnFromFloor);
@@ -140,27 +140,27 @@
                         var stbView = new StbPage(function);
                         MainPage.BasePageView.AddChidren(stbView);
                         stbView.LoadPage(btnCollectionIcon, btnName, btnFromFloor);
-                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                        break;
+                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                        break;
                     case SPK.ElectricTuyaAirCleaner:
                     case SPK.ElectricTuyaAirCleaner2:
                         var airCleaner = new TuyaAirCleanerPage();
                         airCleaner.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
-                        break;
+                        break;
                     case SPK.ElectricTuyaFan:
                     case SPK.ElectricTuyaFan2:
                         var tuyaFan = new TuyaFanPage();
                         tuyaFan.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                         break;
-                    case SPK.ElectricTuyaWaterValve:
-                    case SPK.ElectricTuyaWaterValve2:
-                        var tyWaterValve = new TuyaWaterValvePage();
-                        tyWaterValve.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
+                    case SPK.ElectricTuyaWaterValve:
+                    case SPK.ElectricTuyaWaterValve2:
+                        var tyWaterValve = new TuyaWaterValvePage();
+                        tyWaterValve.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                         break;
-                    case SPK.MechanicalArm:
-                        var mechanicalArmPage = new MechanicalArmPage();
-                        mechanicalArmPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
-                        break;
+                    case SPK.MechanicalArm:
+                        var mechanicalArmPage = new MechanicalArmPage();
+                        mechanicalArmPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
+                        break;
                     case SPK.ElectricTuyaWeepRobot:
                     case SPK.ElectricTuyaWeepRobot2:
                         var weepRobot = new TuyaWeepRobotPage();
@@ -168,12 +168,12 @@
                         break;
                     case SPK.MusicStandard:
                     case SPK.AvMusic:
-                        Music.A31MusicModel.Current = new Music.A31MusicModel { functionMusic = function ,LastDateTime = DateTime.Now};//褰撳墠鎾斁鍣�
+                        Music.A31MusicModel.Current = new Music.A31MusicModel { functionMusic = function, LastDateTime = DateTime.Now };//褰撳墠鎾斁鍣�
                         var a31PlayMusicPage = new Music.A31PlayMusicPage();
                         MainPage.BasePageView.AddChidren(a31PlayMusicPage);
                         a31PlayMusicPage.Show();
                         MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                        break;
+                        break;
                     case SPK.LightCCT:
                         var TureView = new ColorTureLampPage(function);
                         MainPage.BasePageView.AddChidren(TureView);
@@ -238,7 +238,7 @@
                     case SPK.IrLearn:
                         var irLearinPage = new IrLearnPage();
                         irLearinPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
-                        break;
+                        break;
                     case SPK.AirFreshJinmao:
                     case SPK.HvacAirFreshJinmao:
                         var airFresh1 = new AirFreshControlPage();
@@ -289,7 +289,8 @@
                                                 new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), Language.StringByID(StringId.huoqushujushibao));
                                             });
                                         }
-                                        Application.RunOnMainThread(() =>{
+                                        Application.RunOnMainThread(() =>
+                                        {
                                             try
                                             {
 
diff --git a/HDL_ON/UI/UI0-Public/TopViewDiv.cs b/HDL_ON/UI/UI0-Public/TopViewDiv.cs
index 0bf2eb4..a98c233 100644
--- a/HDL_ON/UI/UI0-Public/TopViewDiv.cs
+++ b/HDL_ON/UI/UI0-Public/TopViewDiv.cs
@@ -11,7 +11,7 @@
         /// <summary>
         /// 鐖剁獥浣�
         /// </summary>
-        FrameLayout baseView;
+        public FrameLayout baseView;
         /// <summary>
         /// 鐖剁獥浣揇ialog
         /// </summary>
@@ -19,7 +19,7 @@
         /// <summary>
         /// 鍐呭鍖哄煙
         /// </summary>
-        FrameLayout contentView;
+        public FrameLayout contentView;
 
         /// <summary>
         /// 鍚庨��鎸夐挳
@@ -228,6 +228,29 @@
             };
         }
 
+        public void LoadTopView_Linphone()
+        {
+            LoadTopView();
+
+            var btnSetting = new Button()
+            {
+                X = Application.GetRealWidth(337),
+                Y = Application.GetRealHeight(28 + maginY),
+                Width = Application.GetMinRealAverage(32),
+                Height = Application.GetMinRealAverage(32),
+                UnSelectedImagePath = "Public/FuncInfoSetIcon.png",
+            };
+            contentView.AddChidren(btnSetting);
+
+            btnSetting.MouseUpEventHandler = (sender, e) =>
+            {
+                var infoView = new FunctionBaseInfoSetPage();
+                MainPage.BasePageView.AddChidren(infoView);
+                infoView.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+        }
+
 
 
         /// <summary>
diff --git a/HDL_ON/UI/UI1-Login/LoginPage.cs b/HDL_ON/UI/UI1-Login/LoginPage.cs
index b1bcab9..0800f63 100644
--- a/HDL_ON/UI/UI1-Login/LoginPage.cs
+++ b/HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -18,12 +18,14 @@
             //AddChidren(bodyView);
             bodyView = this;
             //2020-12-22 澧炲姞鐐瑰嚮闅愯棌閿洏浜嬩欢
-            bodyView.MouseDownEventHandler += (sender, e) => {
+            bodyView.MouseDownEventHandler += (sender, e) =>
+            {
                 Application.HideSoftInput();
             };
             pm = new HttpServerRequest();
 #if __ANDROID__
-            BaseActivity.HideKeyboardEvent = () => {
+            BaseActivity.HideKeyboardEvent = () =>
+            {
                 if (this.Y != 0)
                 {
                     Application.RunOnMainThread(() =>
@@ -36,12 +38,13 @@
                     });
                 }
             };
-            BaseActivity.ShowKeyboardEvent = () => {
+            BaseActivity.ShowKeyboardEvent = () =>
+            {
                 try
                 {
                     if (etPassword.Foucs)
                     {
-                     
+
                         new Thread(() =>
                         {
                             Thread.Sleep(100);
@@ -67,8 +70,9 @@
                 }
                 catch { }
             };
-            BaseActivity.SmsAction = (message) => {
-                Console.WriteLine($"鎺ユ敹鍒扮煭淇★細"+ message);
+            BaseActivity.SmsAction = (message) =>
+            {
+                Console.WriteLine($"鎺ユ敹鍒扮煭淇★細" + message);
 
                 string pattern = @"銆怘DL銆�.*(\d{6}).*";
 
@@ -80,7 +84,7 @@
                 {
                     string code = match.Groups[1].Value;
                     Console.WriteLine("楠岃瘉鐮佷负锛�" + code);
-                    if(loginType==0 && logintMode == 1)
+                    if (loginType == 0 && logintMode == 1)
                     {
                         etPassword.Text = code;
                     }
@@ -104,7 +108,8 @@
             }
 
 #if __ANDROID__
-            BaseActivity.HideKeyboardEvent = () => {
+            BaseActivity.HideKeyboardEvent = () =>
+            {
 
             };
             BaseActivity.ShowKeyboardEvent = () => { };
@@ -116,7 +121,7 @@
             //Application.HideSoftInput();
         }
 
-#region 灞�閮ㄥ彉閲�
+        #region 灞�閮ㄥ彉閲�
         /// <summary>
         /// 鐧诲綍绫诲瀷
         /// 0:鎵嬫満
@@ -135,9 +140,9 @@
         /// 鐭俊楠岃瘉鐮�
         /// </summary>
         string smsCode = "";
-#endregion
+        #endregion
 
-#region 鎺т欢鍒楄〃
+        #region 鎺т欢鍒楄〃
         /// <summary>
         /// 绛夊緟鎻愮ず
         /// </summary>
@@ -230,7 +235,7 @@
         /// 鏈嶅姟鍣ㄨ姹傚璞�
         /// </summary>
         HttpServerRequest pm;
-#endregion
+        #endregion
 
         string verAccount = "";
 
@@ -273,7 +278,8 @@
                 UnSelectedImagePath = "Public/Logo-bg.png"
             };
             bodyView.AddChidren(btnIcon_bg);
-            btnIcon_bg.MouseDownEventHandler += (sender, e) => {
+            btnIcon_bg.MouseDownEventHandler += (sender, e) =>
+            {
                 Application.HideSoftInput();
             };
 
@@ -281,7 +287,7 @@
             btnIcon_bg.MouseUpEventHandler += (sender, e) =>
             {
                 return;
-                
+
             };
 
             bool b = false;
@@ -309,9 +315,12 @@
                     //etAccount.Text = "13922115008";//鍒樻��
                     //etAccount.Text = "support7@hdlautomation.com";
                     etAccount.Text = "13336018868";
-                    etAccount.Text = "13435693712";
-
-
+                    etAccount.Text = "649362315@qq.com";//钄℃窇濞�
+                    //etAccount.Text = "18402017839";
+                    //etAccount.Text = "18620993214";
+                    //etAccount.Text = "13414984501";//鍚存檽鑱�
+                    etAccount.Text = "13580507523";
+                    etAccount.Text = "18475593023";
                 }
                 else
                 {
@@ -330,31 +339,34 @@
                 }
                 b = !b;
                 etPassword.Text = "123456";
-                if(etAccount.Text == "13336018868")
+                if (etAccount.Text == "18620993214")
                 {
-                    etPassword.Text = "zzy20020928";
+                    etPassword.Text = "hdl1985.";
                 }
-                else if(etAccount.Text == "13435693712")
+                else if (etAccount.Text == "18475593023")
                 {
                     etPassword.Text = "a123456";
-                }else if(etAccount.Text == "13288623489")
+                }
+                else if (etAccount.Text == "13288623489")
                 {
                     etPassword.Text = "luoxiaodong";
-                }else if(etAccount.Text == "15014291819")
+                }
+                else if (etAccount.Text == "15014291819")
                 {
                     etPassword.Text = "hdl123456";
-                }else if (etAccount.Text == "15262988048")
+                }
+                else if (etAccount.Text == "15262988048")
                 {
                     etPassword.Text = "15262988048";
                 }
                 else if (etAccount.Text == "649362315@qq.com")
                 {
                     etPassword.Text = "aa123456";
-                }else if(etAccount.Text == "dcai.assist@gmail.com")
-                {
-                    etPassword.Text = "GraniteTileS57";
                 }
-                //etPassword.Text = "Hdl85521566";
+                else if (etAccount.Text == "13580507523")
+                {
+                    etPassword.Text = "a123456";
+                }
                 btnLogin.IsSelected = true;
             };
 #endif
@@ -375,7 +387,7 @@
 
             btnEmailLogin = new Button()
             {
-                X = btnPhoneLogin.Right ,//+ Application.GetRealWidth(20),
+                X = btnPhoneLogin.Right,//+ Application.GetRealWidth(20),
                 Y = Application.GetRealHeight(177),
                 Width = Application.GetRealWidth(140),
                 Height = Application.GetRealHeight(40),
@@ -385,9 +397,9 @@
                 TextSize = CSS_FontSize.TextFontSize,
             };
             bodyView.AddChidren(btnEmailLogin);
-#endregion
+            #endregion
 
-#region 璐﹀彿濉啓
+            #region 璐﹀彿濉啓
             accountView = new FrameLayout()
             {
                 X = Application.GetRealWidth(28),
@@ -478,9 +490,9 @@
                 accountView.AddChidren(btnAccountIcon);
             }
 
-#endregion
+            #endregion
 
-#region 瀵嗙爜濉啓
+            #region 瀵嗙爜濉啓
             passwordView = new FrameLayout()
             {
                 X = Application.GetRealWidth(28),
@@ -521,10 +533,11 @@
                 PlaceholderText = Language.StringByID(StringId.PlsEntryPassword),
                 SecureTextEntry = true,
                 TextAlignment = TextAlignment.CenterLeft,
+
             };
             passwordView.AddChidren(etPassword);
 
-#region 瀵嗙爜鐧诲綍-鎺т欢鍔犺浇
+            #region 瀵嗙爜鐧诲綍-鎺т欢鍔犺浇
             btnVisiblePassword = new Button()
             {
                 X = Application.GetRealWidth(223),
@@ -556,9 +569,9 @@
                 TextSize = 12,
             };
             passwordView.AddChidren(btnForgetPassword);
-#endregion
+            #endregion
 
-#region 楠岃瘉鐮佺櫥褰�-鎺т欢鍔犺浇
+            #region 楠岃瘉鐮佺櫥褰�-鎺т欢鍔犺浇
             btnGetVerificationCode = new Button()
             {
                 X = Application.GetRealWidth(219),
@@ -572,7 +585,7 @@
                 IsSelected = false,
             };
             passwordView.AddChidren(btnGetVerificationCode);
-#endregion
+            #endregion
 
             btnPasswordViewBottomLine = new Button()
             {
@@ -583,9 +596,9 @@
             };
             passwordView.AddChidren(btnPasswordViewBottomLine);
 
-#endregion
+            #endregion
 
-#region 娉ㄥ唽涓庡揩鎹风櫥褰�
+            #region 娉ㄥ唽涓庡揩鎹风櫥褰�
             btnRegister = new Button()
             {
                 X = Application.GetRealWidth(28),
@@ -612,7 +625,7 @@
             };
             bodyView.AddChidren(btnSwitchLoginMode);
 
-#endregion
+            #endregion
 
             btnLogin = new Button()
             {
@@ -654,7 +667,8 @@
                 }
             }
 
-            btnDomeLogin.MouseUpEventHandler = (sender, e) => {
+            btnDomeLogin.MouseUpEventHandler = (sender, e) =>
+            {
 
                 MainPage.NoLoginMode = true;
 #if DEBUG
@@ -664,13 +678,13 @@
                 //妤煎眰鎴块棿鍒楄〃
                 var floor1 = new SpatialInfo("FLOOR") { roomName = "F1", parentId = DB_ResidenceData.Instance.CurrentRegion.id };
                 floor1.SaveRoomFile();
-#region 鎴块棿涓� -- 瀹㈠巺
+                #region 鎴块棿涓� -- 瀹㈠巺
                 //澶勭悊鎴块棿鍒楄〃
 
                 var room1 = new Room()
                 {
                     roomId = "1405771366041378818",
-                    roomName = Language.CurrentLanguage == "Chinese"? "娲楁墜闂�" : "Restroom",
+                    roomName = Language.CurrentLanguage == "Chinese" ? "娲楁墜闂�" : "Restroom",
                     roomImage = "Classification/Room/Roombg.png",
                     uid = "47c98953-6fd4-4379-88b9-4b748963504f",
                     roomType = "ROOM",
@@ -698,7 +712,7 @@
                 var room3 = new Room()
                 {
                     roomId = "1405771193802285057",
-                    roomName = Language.CurrentLanguage == "Chinese"? "椁愬巺" : "Restaurant",
+                    roomName = Language.CurrentLanguage == "Chinese" ? "椁愬巺" : "Restaurant",
                     roomImage = "Classification/Room/Roombg.png",
                     uid = "ed7fc784-aace-44b8-97a3-bc3e727e598b",
                     roomType = "ROOM",
@@ -712,7 +726,7 @@
                 var room4 = new Room()
                 {
                     roomId = "1405771024583090178",
-                    roomName = Language.CurrentLanguage == "Chinese"? "瀹㈠巺" : "Drawing room",
+                    roomName = Language.CurrentLanguage == "Chinese" ? "瀹㈠巺" : "Drawing room",
                     roomImage = "Classification/Room/Roombg.png",
                     uid = "9191a3a2-026f-4667-a0b1-e3af699e7295",
                     roomType = "ROOM",
@@ -744,15 +758,15 @@
                 SpatialInfo.CurrentSpatial.RoomList.Add(room4);
 
 
-#region 瀹㈠巺
-#region 鍔熻兘
+                #region 瀹㈠巺
+                #region 鍔熻兘
                 var lightRgb1 = new Function()
                 {
                     sid = "light10000000000",
                     deviceId = "light10000000000",
-                    name = Language.CurrentLanguage == "Chinese"?  "瀹㈠巺姘涘洿鐏�1": "RGB light 1",
+                    name = Language.CurrentLanguage == "Chinese" ? "瀹㈠巺姘涘洿鐏�1" : "RGB light 1",
                     spk = SPK.LightRGB,
-                    roomIds = new List<string>() { "1405771024583090178"},
+                    roomIds = new List<string>() { "1405771024583090178" },
                     collect = true,
                     attributes = new List<FunctionAttributes>()
                     {
@@ -774,7 +788,7 @@
                     deviceId = "light2",
                     name = Language.CurrentLanguage == "Chinese" ? "瀹㈠巺姘涘洿鐏�2" : "RGB light 2",
                     spk = SPK.LightRGB,
-                    roomIds = new List<string>() { "1405771024583090178"},
+                    roomIds = new List<string>() { "1405771024583090178" },
                     attributes = new List<FunctionAttributes>()
                     {
                         new FunctionAttributes() { key = "on_off",value =new List<string>(){ "on","off" }, curValue="on",state = "on"   },
@@ -791,7 +805,7 @@
                     deviceId = "light3",
                     name = Language.CurrentLanguage == "Chinese" ? "闃呰鐏�" : "CCT light",
                     spk = SPK.LightCCT,
-                    roomIds = new List<string>() { "1405771024583090178"},
+                    roomIds = new List<string>() { "1405771024583090178" },
                     attributes = new List<FunctionAttributes>()
                     {
                         new FunctionAttributes() { key = "on_off",value =new List<string>(){ "on","off" }, curValue="on",state = "on"   },
@@ -823,7 +837,7 @@
                     deviceId = "light5",
                     name = Language.CurrentLanguage == "Chinese" ? "寮�鍏崇伅" : "light 2",
                     spk = SPK.LightSwitch,
-                    roomIds = new List<string>() { "1405771024583090178"},
+                    roomIds = new List<string>() { "1405771024583090178" },
                     attributes = new List<FunctionAttributes>()
                     {
                         new FunctionAttributes() { key = "on_off",value =new List<string>(){ "on","off" }, curValue="on",state = "on"   },
@@ -837,7 +851,7 @@
                     deviceId = "curtain1",
                     name = Language.CurrentLanguage == "Chinese" ? "寮�鍚堝笜" : "Curtain 1",
                     spk = SPK.CurtainTrietex,
-                    roomIds = new List<string>() { "1405771024583090178"},
+                    roomIds = new List<string>() { "1405771024583090178" },
                     attributes = new List<FunctionAttributes>()
                     {
                         new FunctionAttributes() { key = "on_off",value =new List<string>(){ "on","off" }, curValue="on",state = "on"   },
@@ -851,7 +865,7 @@
                     deviceId = "curtain2",
                     name = Language.CurrentLanguage == "Chinese" ? "鍗峰笜" : "Curtain 2",
                     spk = SPK.CurtainRoller,
-                    roomIds = new List<string>() { "1405771024583090178"},
+                    roomIds = new List<string>() { "1405771024583090178" },
                     attributes = new List<FunctionAttributes>()
                     {
                         new FunctionAttributes() { key = "on_off",value =new List<string>(){ "on","off" }, curValue="on",state = "on"   },
@@ -884,7 +898,7 @@
                     deviceId = "floorheat1",
                     name = Language.CurrentLanguage == "Chinese" ? "鍦版殩" : "Floorheat 1",
                     spk = SPK.FloorHeatStandard,
-                    roomIds = new List<string>() { "1405771024583090178"},
+                    roomIds = new List<string>() { "1405771024583090178" },
                     attributes = new List<FunctionAttributes>()
                     {
                         new FunctionAttributes() { key = "on_off",value =new List<string>(){ "on","off" }, curValue="on",state = "on"   },
@@ -1034,11 +1048,39 @@
 
                 FunctionList.List.Functions.Add(new Function
                 {
+                    name = "娴嬭瘯-閲戣寕鍏変紡鍌ㄨ兘",
+                    extend = "jinmaot1rue",
+                    spk = SPK.InverterJinmao,
+                    collect = true,
+                    attributes = new List<FunctionAttributes>()
+                    {
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.pv_power.ToString(),value =new List<string>(){ "on","off" }, curValue="28",state = "28" },
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.pv_electricity_today.ToString(),value = new List<string>(){ "0" },curValue ="20",state = "20"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.pv_electricity_month.ToString(),value = new List<string>(){ "0" },curValue ="500",state = "500"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.pv_electricity.ToString(),value = new List<string>(){ "0" },curValue ="2100",state = "2100"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.system_status.ToString(),value = new List<string>(){ "0" },curValue = InverterJinmao_Attr_SystemStatusEnum.run.ToString(),state = InverterJinmao_Attr_SystemStatusEnum.run.ToString()},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.ess_status.ToString(),value = new List<string>(){ "0" },curValue = InverterJinmao_Attr_EssStatusEnum.charge.ToString(),state = InverterJinmao_Attr_EssStatusEnum.charge.ToString()},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.ess_charge_power.ToString(),value = new List<string>(){ "0" },curValue ="100",state = "100"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.ess_discharg_power.ToString(),value = new List<string>(){ "0" },curValue ="100",state = "100"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.battery_soc.ToString(),value = new List<string>(){ "0" },curValue ="100",state = "100"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.load_active_power.ToString(),value = new List<string>(){ "0" },curValue ="100",state = "100"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.load_electricity_today.ToString(),value = new List<string>(){ "0" },curValue ="100",state = "100"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.load_electricity_month.ToString(),value = new List<string>(){ "0" },curValue ="200",state = "200"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.load_electricity.ToString(),value = new List<string>(){ "0" },curValue ="1000",state = "1000"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.coal.ToString(),value = new List<string>(){ "0" },curValue ="1021210",state = "1021210"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.co2.ToString(),value = new List<string>(){ "0" },curValue ="1031300",state = "1031300"},
+                        new FunctionAttributes(){key = InverterJinmao_AttrEnum.trees.ToString(),value = new List<string>(){ "0" },curValue ="121310",state = "121310"},
+                    }
+                });
+
+                FunctionList.List.Functions.Add(new Function
+                {
                     name = "娴嬭瘯-绌鸿皟绉戞妧绯荤粺鎬绘帶",
                     spk = SPK.AcstParent,
-                    //collect = true,
+                    extend = "jinmaotrue",
+                    collect = true,
                     attributes = new List<FunctionAttributes>()
-                {
+                    {
                     new FunctionAttributes(){ key = FunctionAttributeKey.OnOff ,curValue = "on",state = "on" },
                     new FunctionAttributes(){ key = AcstParent_AttrEnum.mode.ToString(),curValue = AcstParent_Attr_ModeValueEnum.cool.ToString(),state = AcstParent_Attr_ModeValueEnum.cool.ToString(),
                          value = new List<string>
@@ -1063,17 +1105,17 @@
                     new FunctionAttributes(){ key = AcstParent_AttrEnum.month_electricity.ToString(),curValue = "999",state = "999"},
                     new FunctionAttributes(){ key = AcstParent_AttrEnum.total_electricity.ToString(),curValue = "9999",state = "9999"},
                     new FunctionAttributes(){ key = AcstParent_AttrEnum.active_power.ToString(),curValue = "9999",state = "9999"},
-                    //new FunctionAttributes(){ key = AcstParent_AttrEnum.room_temp.ToString(),curValue = "26",state = "26"},
-                    //new FunctionAttributes(){ key = AcstParent_AttrEnum.room_humidity.ToString(),curValue = "66",state = "66"},
-                    //new FunctionAttributes(){ key = AcstParent_AttrEnum.co2.ToString(),curValue = "266",state = "266"},
-                    //new FunctionAttributes(){ key = AcstParent_AttrEnum.tvoc.ToString(),curValue = "666",state = "666"},
-                    //new FunctionAttributes(){ key = AcstParent_AttrEnum.pm25.ToString(),curValue = "36",state = "36"},
-                }
+                    new FunctionAttributes(){ key = AcstParent_AttrEnum.room_temp.ToString(),curValue = "26",state = "26"},
+                    new FunctionAttributes(){ key = AcstParent_AttrEnum.room_humidity.ToString(),curValue = "66",state = "66"},
+                    new FunctionAttributes(){ key = AcstParent_AttrEnum.co2.ToString(),curValue = "266",state = "266"},
+                    new FunctionAttributes(){ key = AcstParent_AttrEnum.tvoc.ToString(),curValue = "666",state = "666"},
+                    new FunctionAttributes(){ key = AcstParent_AttrEnum.pm25.ToString(),curValue = "36",state = "36"},
+                    }
                 });
 
                 FunctionList.List.Functions.Add(new Function
                 {
-                    name = "娴嬭瘯-绌鸿皟绉戞妧绯荤粺瀛愭帶-1",
+                    name = "瀛愭帶-1",
                     spk = SPK.AcstSub,
                     sid = "0000001",
                     attributes = new List<FunctionAttributes>()
@@ -1086,7 +1128,7 @@
                 });
                 FunctionList.List.Functions.Add(new Function
                 {
-                    name = "娴嬭瘯-绌鸿皟绉戞妧绯荤粺瀛愭帶-2",
+                    name = "瀛愭帶-2",
                     spk = SPK.AcstSub,
                     sid = "0000002",
                     attributes = new List<FunctionAttributes>()
@@ -1099,7 +1141,7 @@
                 });
                 FunctionList.List.Functions.Add(new Function
                 {
-                    name = "娴嬭瘯-绌鸿皟绉戞妧绯荤粺瀛愭帶-3",
+                    name = "瀛愭帶-3",
                     spk = SPK.AcstSub,
                     sid = "0000003",
                     attributes = new List<FunctionAttributes>()
@@ -1112,7 +1154,7 @@
                 });
                 FunctionList.List.Functions.Add(new Function
                 {
-                    name = "娴嬭瘯-绌鸿皟绉戞妧绯荤粺瀛愭帶-4",
+                    name = "瀛愭帶-4",
                     spk = SPK.AcstSub,
                     sid = "0000004",
                     attributes = new List<FunctionAttributes>()
@@ -1123,18 +1165,41 @@
                     new FunctionAttributes(){ key = AcstSub_AttrEnum.room_humidity.ToString(),curValue = "66",state = "66"},
                 }
                 });
+                
                 FunctionList.List.Functions.Add(new Function
                 {
-                    name = "娴嬭瘯-绌鸿皟绉戞妧绯荤粺瀛愭帶-5",
+                    name = "瀛愭帶-5",
                     spk = SPK.AcstSub,
                     sid = "0000005",
                     attributes = new List<FunctionAttributes>()
+                    {
+                        new FunctionAttributes(){ key = FunctionAttributeKey.OnOff ,curValue = "on",state = "on" },
+                        new FunctionAttributes(){ key = AcstSub_AttrEnum.set_temp.ToString(),curValue = "26",state = "26"},
+                        new FunctionAttributes(){ key = AcstSub_AttrEnum.room_temp.ToString(),curValue = "26",state = "26"},
+                        new FunctionAttributes(){ key = AcstSub_AttrEnum.room_humidity.ToString(),curValue = "66",state = "66"},
+                    }
+                });
+
+                FunctionList.List.Functions.Add(new Function
                 {
-                    new FunctionAttributes(){ key = FunctionAttributeKey.OnOff ,curValue = "on",state = "on" },
-                    new FunctionAttributes(){ key = AcstSub_AttrEnum.set_temp.ToString(),curValue = "26",state = "26"},
-                    new FunctionAttributes(){ key = AcstSub_AttrEnum.room_temp.ToString(),curValue = "26",state = "26"},
-                    new FunctionAttributes(){ key = AcstSub_AttrEnum.room_humidity.ToString(),curValue = "66",state = "66"},
-                }
+                    name = "鐑按鍣�-1",
+                    spk = SPK.WaterHeaterJinmao,
+                    sid = "0000000001",
+                    attributes = new List<FunctionAttributes>()
+                    {
+                        new FunctionAttributes(){ key = FunctionAttributeKey.OnOff ,curValue = "on",state = "on" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.co2.ToString(),curValue = "522222",state = "522222" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.energy_electricity.ToString(),curValue = "144400",state = "144400" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.flow.ToString(),curValue = "2",state = "2" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.mode.ToString(),curValue = "economic",state = "economic" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.mode_free.ToString(),curValue = "true",state = "true" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.recycl_volume.ToString(),curValue = "10",state = "10" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.set_temp.ToString(),curValue = "25",state = "25" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.temp.ToString(),curValue = "23",state = "23" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.trees.ToString(),curValue = "11228",state = "11228" },
+                        new FunctionAttributes(){ key = WaterHeaterJinmao_AttrEnum.volume.ToString(),curValue = "100",state = "100" },
+
+                    },
                 });
 
 
@@ -1172,6 +1237,7 @@
                 {
                     name = "娴嬭瘯娓╂帶鍣�",
                     spk = SPK.HvacCac,
+                    collect = true,
                     attributes = new List<FunctionAttributes>
                 {
                     new FunctionAttributes(){ key = "on_off",curValue = "on",state = "on" },
@@ -1627,9 +1693,9 @@
 
                 };
                 scene2.SaveSceneFile();
-#endregion
-#endregion
-#region 椁愬巺
+                #endregion
+                #endregion
+                #region 椁愬巺
                 var lightSwitch3 = new Function()
                 {
                     sid = "light6",
@@ -1733,8 +1799,8 @@
                     }
                 };
                 scene4.SaveSceneFile();
-#endregion
-#region 鍗у
+                #endregion
+                #region 鍗у
                 var ac = new Function()
                 {
                     sid = "ac1",
@@ -1796,7 +1862,7 @@
                 //    collect = false,
                 //};
                 //scene6.SaveSceneFile();
-#endregion
+                #endregion
 
 
                 var lightSwitch6 = new Function()
@@ -1814,12 +1880,12 @@
                 };
                 lightSwitch6.SaveFunctionFile();
 
-#endregion
+                #endregion
 
                 var fileList = Common.FileUtlis.Files.ReadFiles();
-                foreach(var file in fileList)
+                foreach (var file in fileList)
                 {
-                    FunctionList.List.IniFunctionList(file,true);
+                    FunctionList.List.IniFunctionList(file, true);
                 }
                 Room.CurrentSpatial.InitRoomListFunctions();
 
@@ -1834,13 +1900,13 @@
             account = etAccount.Text.Trim();
 
 
-#region 闅愮鏀跨瓥
+            #region 闅愮鏀跨瓥
             AddServiceAgreementControl(bodyView);
-#endregion
+            #endregion
 
         }
 
-#region 鈻� 鏈嶅姟鍗忚___________________________
+        #region 鈻� 鏈嶅姟鍗忚___________________________
         bool isAgreePrivacyPolicy = false;
         /// <summary>
         /// 娣诲姞鏈嶅姟鍗忚鎺т欢
@@ -1870,7 +1936,7 @@
                 X = Application.GetRealWidth(22),
             };
             frameRow.AddChidren(agreeView);
-            if(Language.CurrentLanguage == "Chinese")
+            if (Language.CurrentLanguage == "Chinese")
             {
                 agreeView.X = Application.GetRealWidth(52);
             }
@@ -1990,7 +2056,7 @@
 #if DEBUG
             return true;
 #endif
-            if(HttpUtil.GlobalRequestHttpsHost == "https://test-gz.hdlcontrol.com")
+            if (HttpUtil.GlobalRequestHttpsHost == "https://test-gz.hdlcontrol.com")
             {
                 return true;
             }
@@ -2003,6 +2069,6 @@
             return true;
         }
 
-#endregion
+        #endregion
     }
 }
\ No newline at end of file
diff --git a/HDL_ON/UI/UI1-Login/LoginPageBLL.cs b/HDL_ON/UI/UI1-Login/LoginPageBLL.cs
index 90e8660..096ad5c 100644
--- a/HDL_ON/UI/UI1-Login/LoginPageBLL.cs
+++ b/HDL_ON/UI/UI1-Login/LoginPageBLL.cs
@@ -637,6 +637,7 @@
                             {
                                 //璺宠浆椤甸潰----
                                 MainPage.GoUserPage(true);
+                                this.RemoveFromParent();
                                 return;
                             }
                         });
@@ -671,6 +672,7 @@
                                 Common.ApiUtlis.Ins.DownloadDataComplete = false;
                                 //璺宠浆椤甸潰----
                                 MainPage.GoUserPage(true);
+                                this.RemoveFromParent();
                             });
                         }
                         else
diff --git a/HDL_ON/UI/UI1-Login/RegisterPage.cs b/HDL_ON/UI/UI1-Login/RegisterPage.cs
index a52fe5e..8bcf14a 100644
--- a/HDL_ON/UI/UI1-Login/RegisterPage.cs
+++ b/HDL_ON/UI/UI1-Login/RegisterPage.cs
@@ -233,12 +233,22 @@
             AddChidren(bodyView);
 
             //2020-12-22 澧炲姞鐐瑰嚮闅愯棌閿洏浜嬩欢
-            bodyView.MouseDownEventHandler += (sender, e) => {
+            bodyView.MouseDownEventHandler += (sender, e) =>
+            {
                 Application.HideSoftInput();
             };
 
             pm = new HttpServerRequest();
-
+            try
+            {
+                if (OnAppConfig.Instance.GlobalRegion != null)
+                {
+                    OnAppConfig.Instance.GlobalRegion.regionUrl = "";
+                }
+            }catch(Exception ex)
+            {
+                MainPage.Log("Error", "杩涘叆娉ㄥ唽鐣岄潰AppConfig寮傚父锛�" + ex.Message);
+            }
         }
 
         //public RegisterPage(Action action)
@@ -290,7 +300,7 @@
                 TextSize = CSS_FontSize.TextFontSize,
             };
             bodyView.AddChidren(btnEmailLogin);
-            if(Language.CurrentLanguage!= "Chinese")
+            if (Language.CurrentLanguage != "Chinese")
             {
                 btnPhoneLogin.Width = Application.GetRealWidth(180);
                 btnEmailLogin.Width = Application.GetRealWidth(180);
@@ -325,7 +335,7 @@
                 TextAlignment = TextAlignment.CenterLeft,
                 TextColor = CSS_Color.PromptingColor1,
                 TextSize = CSS_FontSize.TextFontSize,
-                TextID = StringId.PleaseSelectCountryOrRegion,
+                TextID = StringId.PlsSelectServer,
             };
             serverView.AddChidren(btnServerText);
 
@@ -373,8 +383,10 @@
             };
 
             //璺宠浆鍥藉鍖哄彿閫夋嫨鐣岄潰
-            EventHandler<MouseEventArgs> eHandler = (sender, e) => {
-                JLCountrycode.CountryCodeView.Current.Show((countryName, code) => {
+            EventHandler<MouseEventArgs> eHandler = (sender, e) =>
+            {
+                JLCountrycode.CountryCodeView.Current.Show((countryName, code) =>
+                {
                     if (!string.IsNullOrEmpty(code))
                     {
                         phoneZoneCode = code;
diff --git a/HDL_ON/UI/UI1-Login/RegisterPageBLL.cs b/HDL_ON/UI/UI1-Login/RegisterPageBLL.cs
index de7d890..cb6abf2 100644
--- a/HDL_ON/UI/UI1-Login/RegisterPageBLL.cs
+++ b/HDL_ON/UI/UI1-Login/RegisterPageBLL.cs
@@ -628,7 +628,6 @@
             //鍒ゆ柇涔嬪墠鏄惁閫夋嫨杩�
             if (OnAppConfig.Instance.GlobalRegion != null && !string.IsNullOrEmpty(OnAppConfig.Instance.GlobalRegion.regionUrl))
             {
-
                 SetServerText();
             }
 
@@ -656,7 +655,7 @@
             if (isSelectServer == false)
             {
                 //璇峰厛閫夋嫨鍥藉/鍖哄煙
-                Utlis.ShowTip(Language.StringByID(StringId.PleaseSelectCountryOrRegion));
+                Utlis.ShowTip(Language.StringByID(StringId.PlsSelectServer));
                 ShowServerBottomLineState(true);
                 return false;
             }
diff --git a/HDL_ON/UI/UI1-Login/SelectServerDialog.cs b/HDL_ON/UI/UI1-Login/SelectServerDialog.cs
index f2c8271..6d71973 100644
--- a/HDL_ON/UI/UI1-Login/SelectServerDialog.cs
+++ b/HDL_ON/UI/UI1-Login/SelectServerDialog.cs
@@ -22,6 +22,10 @@
         /// </summary>
         Action selectAction;
 
+        Button btnConfrim;
+
+        GlobalRegionListRes selectedRegion;
+
         /// <summary>
         /// 
         /// </summary>
@@ -40,7 +44,7 @@
             bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
             this.AddChidren(bodyView);
             //鍔犺浇椤堕儴鑿滃崟鏍�
-            new TopViewDiv(this, bodyView, Language.StringByID(StringId.PleaseSelectCountryOrRegion)).LoadTopView();
+            new TopViewDiv(this, bodyView, Language.StringByID(StringId.PlsSelectServer)).LoadTopView();
             //鍔犺浇鏈嶅姟鍣ㄥ尯鍩熼�夋嫨
             AddRegionalSelectionView();
             //Show
@@ -56,8 +60,9 @@
 
             VerticalScrolViewLayout VerticalScrolViewMiddle = new VerticalScrolViewLayout()
             {
-                Y = Application.GetRealHeight(64),
-                Height = bodyView.Height - Application.GetRealHeight(64),
+                Y = Application.GetRealHeight(74),
+                Height = bodyView.Height - Application.GetRealHeight(74),
+                ScrollEnabled = false,
             };
             bodyView.AddChidren(VerticalScrolViewMiddle);
 
@@ -86,6 +91,13 @@
                                     {
                                         AddRowView(data, VerticalScrolViewMiddle);
                                     }
+                                    //if (string.IsNullOrEmpty(OnAppConfig.Instance.RequestHttpsHost))
+                                    //{
+                                    //    if (Language.CurrentLanguage != "Chinese")
+                                    //    {
+                                    //        OnAppConfig.Instance.RequestHttpsHost = dataList.Find((obj)=>obj.regionUrl.Contains)
+                                    //    }
+                                    //}
                                 }
                             }
                         });
@@ -113,6 +125,35 @@
                 }
             });
 
+            //var bottomView = new FrameLayout()
+            //{
+            //    Y = Application.GetRealHeight(591),
+            //    Height = Application.GetRealHeight(76) + Application.GetRealWidth(44),
+            //    Radius = (uint)Application.GetRealWidth(22),
+            //    BackgroundColor = CSS_Color.MainBackgroundColor,
+            //};
+            //bodyView.AddChidren(bottomView);
+
+
+            //btnConfrim = new Button()
+            //{
+            //    Gravity = Gravity.CenterHorizontal,
+            //    Y = Application.GetRealHeight(603),
+            //    Width = Application.GetRealWidth(220),
+            //    Height = Application.GetRealWidth(44),
+            //    Radius = (uint)Application.GetRealWidth(22),
+            //    BackgroundColor = CSS_Color.MainColor,
+            //    TextColor = CSS_Color.MainBackgroundColor,
+            //    TextSize = CSS_FontSize.SubheadingFontSize,
+            //    TextAlignment = TextAlignment.Center,
+            //    IsBold = true,
+            //    TextID = StringId.ConfirmAdd,
+            //};
+            //bodyView.AddChidren(btnConfrim);
+
+            //btnConfrim.MouseUpEventHandler = (sender, e) => {
+
+            //};
         }
 
         /// <summary>
@@ -124,27 +165,59 @@
         {
             var rowView = new FrameLayout()
             {
-                Height = Application.GetRealHeight(44),
+                Height = Application.GetRealHeight(60),
             };
             VerticalScrolViewMiddle.AddChidren(rowView);
+
+            rowView.AddChidren(new Button()
+            {
+                Y = Application.GetRealHeight(50 - 1),
+                Height = Application.GetRealHeight(1),
+                BackgroundColor = CSS_Color.DividingLineColor,
+            });
 
             var urlBtn = new Button()
             {
                 X = Application.GetRealWidth(16),
-                Height = rowView.Height,
-                Width = Application.GetRealWidth(200),
+                Width = Application.GetRealWidth(300),
+                Height = Application.GetRealHeight(30),
                 TextSize = CSS_FontSize.SubheadingFontSize,
                 TextColor = CSS_Color.FirstLevelTitleColor,
-                TextAlignment = TextAlignment.CenterLeft
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = mGlobalRegion.regionName,
             };
             rowView.AddChidren(urlBtn);
 
-            //var lineView = new LineView();
-            //rowView.AddChidren(lineView);
-            //lineView.Y = rowView.Height - lineView.Height;
+            var btnTip = new Button()
+            {
+                Y = Application.GetRealHeight(20),
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(300),
+                Height = Application.GetRealHeight(20),
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                TextColor = CSS_Color.PromptingColor1,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            rowView.AddChidren(btnTip);
+            if (mGlobalRegion.regionName.ToLower().Contains("china"))
+            {
+                btnTip.TextID = StringId.ChineseServerPrompt;
+                //if(Language.CurrentLanguage == "Chinese")
+                //{
+                //    selectedRegion = mGlobalRegion;
+                //    urlBtn.TextColor = CSS_Color.MainColor;
+                //}
+            }
+            else
+            {
+                btnTip.TextID = StringId.NonChineseServerPrompt;
+            }
 
             EventHandler<MouseEventArgs> eHandler = (sender, e) =>
             {
+                //selectedRegion = mGlobalRegion;
+                //urlBtn.TextColor = CSS_Color.MainColor;
+
                 OnAppConfig.Instance.RequestHttpsHost = mGlobalRegion.regionUrl;
                 OnAppConfig.Instance.GlobalRegion = mGlobalRegion;
                 OnAppConfig.Instance.SaveConfig();
@@ -155,12 +228,10 @@
             rowView.MouseUpEventHandler += eHandler;
             urlBtn.MouseUpEventHandler += eHandler;
 
-            urlBtn.Text = mGlobalRegion.regionName;
-
-            if (mGlobalRegion.regionUrl == OnAppConfig.Instance.RequestHttpsHost)
-            {
-                urlBtn.TextColor = CSS_Color.MainColor;
-            }
+            //if (mGlobalRegion.regionUrl == OnAppConfig.Instance.RequestHttpsHost)
+            //{
+            //    urlBtn.TextColor = CSS_Color.MainColor;
+            //}
         }
     }
 }
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index 272794a..dbe2dc1 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -1,19 +1,13 @@
 锘縰sing System;
 using System.Collections.Generic;
-using System.Text;
-using HDL_ON.DAL;
-using HDL_ON.DAL.Server;
-using HDL_ON.DriverLayer;
 using HDL_ON.Entity;
 using HDL_ON.UI.CSS;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
 using Shared;
 
 namespace HDL_ON.UI
 {
 #if __IOS__
-    public partial class HomePage :  VerticalRefreshLayout
+    public partial class HomePage : VerticalRefreshLayout
 #else
     public partial class HomePage : VerticalScrolViewLayout
 #endif
@@ -104,9 +98,9 @@
         /// 鍔熻兘鍖哄煙闆嗗悎
         /// </summary>
         List<FrameLayout> functionViews;
-#endregion
+        #endregion
 
-#region 鍖哄煙鍙橀噺
+        #region 鍖哄煙鍙橀噺
         /// <summary>
         /// 褰撳墠鏄剧ず瀵规帶鍒剁被鍨嬫槸鍚︽槸璁惧鍔熻兘鎺у埗
         /// 0 鍔熻兘
@@ -114,9 +108,9 @@
         /// 2 缇ゆ帶
         /// </summary>
         int CurShowTypeContent = 0;
-#endregion
+        #endregion
 
-#region 鎶ヨ淇℃伅
+        #region 鎶ヨ淇℃伅
         //Button btnMsgBg;
         //Button btnMsgTime;
         //Button btnMsg;
@@ -250,7 +244,7 @@
                 topView.AddChidren(environmentalView);
                 CheckLinkStatus();//2020-12-22
 
-#region 鐜鏁版嵁
+                #region 鐜鏁版嵁
                 var tempSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorTemperature);
                 var humiSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorHumidity);
                 var enviList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => SPK.EvironmentSensorList().Contains(obj.spk));
@@ -282,7 +276,8 @@
                     }
                 }
 
-                var btnEnvirValuesTitle = new Button() {
+                var btnEnvirValuesTitle = new Button()
+                {
                     X = Application.GetRealWidth(12),
                     Gravity = Gravity.CenterVertical,
                     TextColor = CSS_Color.MainBackgroundColor,
@@ -348,7 +343,7 @@
                     }
                     if (tempTotalValues > 0)
                     {
-                        btnIndoorTempValues.Text = "/" + (tempTotalValues/ tempTotalCount).ToString("0.0") + "掳";
+                        btnIndoorTempValues.Text = "/" + (tempTotalValues / tempTotalCount).ToString("0.0") + "掳";
                     }
                 }
                 btnIndoorTempValues.Width = btnIndoorTempValues.GetTextWidth();
@@ -446,7 +441,7 @@
                 };
                 if (DB_ResidenceData.Instance.GatewayType == 1 && !DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
                 {
-                        
+
                     topView.AddChidren(btnSecurityStatus);
                     foreach (var temp in FunctionList.List.securities)
                     {
@@ -465,7 +460,8 @@
                         }
                     }
 
-                    btnSecurityStatus.MouseUpEventHandler = (sender, e) => {
+                    btnSecurityStatus.MouseUpEventHandler = (sender, e) =>
+                    {
                         var page = new ArmCenterPage();
                         MainPage.BasePageView.AddChidren(page);
                         page.LoadPage();
@@ -474,7 +470,7 @@
                 }
 
 
-#region msg
+                #region msg
                 //FrameLayout msgView;
                 //msgView = new FrameLayout()
                 //{
@@ -502,7 +498,7 @@
                     UnSelectedImagePath = "Collection/MsgIcon.png",
                     SelectedImagePath = "Collection/MsgIconTip.png",
                 };
-                if(btnSecurityStatus.Parent == null)
+                if (btnSecurityStatus.Parent == null)
                 {
                     btnMsgIcon.X = Application.GetRealWidth(329);
                 }
@@ -533,11 +529,11 @@
 
                 LoadEvent_GotoMessageCenterPage();
 
-#endregion
+                #endregion
 
-#endregion
+                #endregion
 
-#region 鍔熻兘鍦烘櫙鍒囨崲
+                #region 鍔熻兘鍦烘櫙鍒囨崲
 
                 bodyView.AddChidren(new Button() { Height = Application.GetRealHeight(20), BackgroundColor = 0x00000000 });
 
@@ -555,13 +551,34 @@
                 #endregion
 
 #if DEBUG
-                btnResidenceName.MouseUpEventHandler = (envent, ee) => {
+                btnResidenceName.MouseUpEventHandler = (envent, ee) =>
+                {
                     MainPage.Log("sss");
-                    new System.Threading.Thread(async() =>
-                    {
-                        await Common.AliyunLog.AliyunLogClient.PostLogs("鍛婅娴嬭瘯", "娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅");
-                    })
-                    { IsBackground = true }.Start();
+
+#if __ANDROID__
+                    //HDLLinphoneKit.Instance.MediaPlayerLooping(true);
+                    Com.Hdl.Hdllinphonesdk.HDLLinphoneKit.Instance.PlayRingtone();
+#elif __IOS__
+
+                    //if (isPlay)
+                    //{
+                    //    isPlay = false;
+                    //    soundPlayer.StopSound();
+                    //}
+                    //else
+                    //{
+                    //    isPlay = true;
+                    //    soundPlayer.PlaySound();
+                    //}
+
+#endif
+                    //PlaySystemRingtone playSystemRingtone = new PlaySystemRingtone();
+                    //playSystemRingtone.Play();
+                    //new System.Threading.Thread(async() =>
+                    //{
+                    //    await Common.AliyunLog.AliyunLogClient.PostLogs("鍛婅娴嬭瘯", "娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅娴嬭瘯淇℃伅");
+                    //})
+                    //{ IsBackground = true }.Start();
                 };
 #endif
             }
@@ -575,7 +592,7 @@
 
         void loadNavView()
         {
-            if(changeBaseView == null)
+            if (changeBaseView == null)
             {
                 changeBaseView = new FrameLayout()
                 {
@@ -671,7 +688,8 @@
 
 
 
-                btnChangeGroupControl.MouseUpEventHandler = (sender, e) => {
+                btnChangeGroupControl.MouseUpEventHandler = (sender, e) =>
+                {
                     btnChangeFunction.IsSelected = false;
                     btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                     btnChangeFunction.IsBold = false;
@@ -685,7 +703,8 @@
                     contentView.PageIndex = 2;
                 };
 
-                btnChangeFunction.MouseUpEventHandler = (sender, e) => {
+                btnChangeFunction.MouseUpEventHandler = (sender, e) =>
+                {
                     btnChangeFunction.IsSelected = true;
                     btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                     btnChangeFunction.IsBold = true;
@@ -699,7 +718,8 @@
                     btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                     btnChangeGroupControl.IsBold = false;
                 };
-                btnChangeScene.MouseUpEventHandler = (sender, e) => {
+                btnChangeScene.MouseUpEventHandler = (sender, e) =>
+                {
                     btnChangeScene.IsSelected = true;
                     btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                     btnChangeScene.IsBold = true;
@@ -866,7 +886,7 @@
         /// </summary>
         void LoadContentView()
         {
-           
+
             if (!Common.ApiUtlis.Ins.DownloadDataComplete && !MainPage.NoLoginMode)
             {
                 var waitPage = new Loading();
@@ -917,7 +937,8 @@
                             }
                         });
                     }
-                    catch (Exception ex) {
+                    catch (Exception ex)
+                    {
                         MainPage.Log($"鍒锋柊涓婚〉寮傚父:{ex.Message}");
                     }
                     finally { }
@@ -976,7 +997,7 @@
                     //}
                     //else
                     {
-                        if (!function.collect)
+                        if (!function.collect&& function.spk != SPK.InverterJinmao)
                             continue;
                     }
                     if (index % 2 == 0)
@@ -1002,8 +1023,8 @@
                     };
                     rowView.AddChidren(functionView);
                     functionViews.Add(functionView);
-                    //缁垮缓浜哄眳鐜锛岀鎶�绯荤粺
-                    if (function.spk == SPK.AcstParent)
+                    //缁垮缓浜哄眳鐜锛岀鎶�绯荤粺,閲戣寕鍏変紡鍌ㄨ兘
+                    if (function.spk == SPK.AcstParent || function.spk == SPK.InverterJinmao)
                     {
                         LoadAcstDiv(functionView, function);
                     }
@@ -1100,14 +1121,14 @@
                     };
                     rowView.AddChidren(functionView);
                     functionViews.Add(functionView);
-                        var btnbg = new Button()
-                        {
-                            UnSelectedImagePath = "Collection/Functionbg.png",
-                            SelectedImagePath = "Collection/FunctionOnbg.png",
-                            Tag = function.sid
-                        };
-                        functionView.AddChidren(btnbg);
-                        LoadDeviceFunctionDiv(functionView, function);
+                    var btnbg = new Button()
+                    {
+                        UnSelectedImagePath = "Collection/Functionbg.png",
+                        SelectedImagePath = "Collection/FunctionOnbg.png",
+                        Tag = function.sid
+                    };
+                    functionView.AddChidren(btnbg);
+                    LoadDeviceFunctionDiv(functionView, function);
 
                     index++;
                 }
@@ -1191,7 +1212,7 @@
                     //2020-12-03 淇敼鍥剧墖鍔犺浇鏂规硶
                     ImageUtlis.Current.LoadLocalOrNetworkImages((scene as Scene).ImagePath, functionView);
 
-                    LoadSceneFunctionDiv( functionView, scene);
+                    LoadSceneFunctionDiv(functionView, scene);
                     index++;
                 }
 
@@ -1370,7 +1391,7 @@
 
                 }
 
-                else if(function.spk == SPK.SensorDryContact || function.spk == SPK.SensorDryContact2)
+                else if (function.spk == SPK.SensorDryContact || function.spk == SPK.SensorDryContact2)
                 {
                     btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                     btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
@@ -1442,7 +1463,7 @@
                         SelectedImagePath = "FunctionIcon/Curtain/CurtainCloseWhiteIcon_Shadow.png",
                     };
                     view.AddChidren(btnCurtainClose);
-                   
+
 
                     Button btnCurtainOpen;
                     btnCurtainOpen = new Button()
@@ -1607,11 +1628,13 @@
                         view.AddChidren(btnClose);
 
 
-                        btnClose.MouseDownEventHandler = (sender, e) => {
+                        btnClose.MouseDownEventHandler = (sender, e) =>
+                        {
                             btnClose.IsSelected = true;
                         };
 
-                        btnClose.MouseUpEventHandler = (sender, e) => {
+                        btnClose.MouseUpEventHandler = (sender, e) =>
+                        {
                             btnClose.IsSelected = false;
                             if (function.spk == SPK.GroupControl)
                             {
@@ -1620,10 +1643,12 @@
                                 (function as GroupControl).Control(d);
                             }
                         };
-                        btnOpen.MouseDownEventHandler = (sender, e) => {
+                        btnOpen.MouseDownEventHandler = (sender, e) =>
+                        {
                             btnOpen.IsSelected = true;
                         };
-                        btnOpen.MouseUpEventHandler = (sender, e) => {
+                        btnOpen.MouseUpEventHandler = (sender, e) =>
+                        {
                             btnOpen.IsSelected = false;
                             if (function.spk == SPK.GroupControl)
                             {
@@ -1658,7 +1683,8 @@
                     LoadEvent_SwitchFunction(function, btnSwitch);
                 }
                 //鍙栨秷鏀惰棌浜嬩欢
-                Action cannelCollect = () => {
+                Action cannelCollect = () =>
+                {
                     function.collect = false;
                     //if (SPK.MusicSpkList().Contains(function.spk))//澶勭悊闊充箰涓讳粠鍏崇郴
                     //{
@@ -1682,7 +1708,7 @@
                 btnIcon.MouseUpEventHandler = skipControlPageEvent;
                 btnState.MouseUpEventHandler = skipControlPageEvent;
                 //涓嶉渶瑕佹洿鏂扮姸鎬佺殑鍔熻兘鍒楄〃
-                if(!SPK.NotStatusSpkList.Contains(function.spk) || function.spk != SPK.IpCam_Imou)
+                if (!SPK.NotStatusSpkList.Contains(function.spk) || function.spk != SPK.IpCam_Imou)
                 {
                     UpdataFunctionStates(function);
                 }
@@ -1728,7 +1754,8 @@
             {
                 X = Application.GetRealWidth(11),
                 Y = Application.GetRealWidth(10),
-                TextID = StringId.Acst,
+                Text = function.name,
+                //TextID = StringId.Acst,
                 IsBold = true,
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 TextSize = CSS_FontSize.TextFontSize,
@@ -1748,20 +1775,51 @@
             };
             view.AddChidren(btnLogo);
 
+            try
+            {
+                if (function.extend.Contains("jinmao") && function.extend.Contains("true"))
+                {
+                    btnLogo.Visible = true;
+                }
+                else
+                {
+                    btnLogo.Visible = false;
+                }
+            }
+            catch (Exception ex)
+            {
+                MainPage.Log("Error", $"閲戣寕logo鏄剧ず澶勭悊寮傚父锛歿ex.Message}");
+            }
+
             Button btnFunctionViewBg;
             btnFunctionViewBg = new Button()
             {
                 Height = Application.GetRealWidth(100),
                 Width = Application.GetRealWidth(102),
-                UnSelectedImagePath = "FunctionIcon/FunctionBg/AcstFunctionBg.png",
+                UnSelectedImagePath = function.spk == SPK.AcstParent ? "FunctionIcon/FunctionBg/AcstFunctionBg.png" : "FunctionIcon/FunctionBg/InverterJinmaoFunctionBg.png",
             };
             view.AddChidren(btnFunctionViewBg);
-            btnFunctionViewBg.MouseUpEventHandler = (sender, e) => {
-                var page = new AcstParentPage();
-                MainPage.BasePageView.AddChidren(page);
-                page.LoadPage();
-                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-            };
+            if (function.spk == SPK.AcstParent)
+            {
+                btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
+                {
+                    var page = new AcstParentPage();
+                    MainPage.BasePageView.AddChidren(page);
+                    page.LoadPage();
+                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                };
+            }
+            else if (function.spk == SPK.InverterJinmao)
+            {
+                //btnName.TextID = StringId.NewEnergy;
+                btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
+                {
+                    var page = new InverterJinmaoPage();
+                    MainPage.BasePageView.AddChidren(page);
+                    page.LoadPage();
+                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                };
+            }
 
 
             //Button btnAcstPower = new Button()
@@ -1789,7 +1847,7 @@
             //    })
             //    { IsBackground = true }.Start();
             //};
-           
+
 
 
 
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
index 609c480..bf4e54f 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -1,5 +1,6 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.Security.Cryptography;
 using HDL_ON.DAL.Server;
 using HDL_ON.DriverLayer;
 using HDL_ON.Entity;
@@ -759,7 +760,11 @@
                         break;
                     case ShowFunction.Acst:
                         functionCount = FunctionList.List.GetAcstParentList().Count;
-                        functionOnCount = FunctionList.List.GetAcstParentList().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
+                        functionOnCount = 0;
+                        break;
+                    case ShowFunction.InverterJinmao:
+                        functionCount = FunctionList.List.GetInverterJinmaoList().Count;
+                        functionOnCount = 0;
                         break;
                    
                 }
@@ -824,7 +829,7 @@
                     && item != ShowFunction.Music
                     && item != ShowFunction.EnergyMonitoring
                     && item != ShowFunction.SecurityCenter
-                    && item != ShowFunction.Acst && item != ShowFunction.IpCam
+                    && item != ShowFunction.Acst && item != ShowFunction.IpCam && item != ShowFunction.InverterJinmao
                     && functionCount != 0)
                 {
                     btnFunctionCount = new Button()
@@ -1133,8 +1138,14 @@
                         };
                         break;
                     case ShowFunction.Acst:
-                        btnName.TextID = StringId.Acst;
-
+                    case ShowFunction.InverterJinmao:
+                        //if(item == ShowFunction.Acst)
+                        //{
+                        //    btnFunctionViewBg.UnSelectedImagePath = "FunctionIcon/FunctionBg/SecurityMonitoringFunctionBg.png";
+                        //}else if (item == ShowFunction.InverterJinmao)
+                        //{
+                        //    btnFunctionViewBg.UnSelectedImagePath = "FunctionIcon/FunctionBg/SecurityMonitoringFunctionBg.png";
+                        //}
                         Button btnJMLogo = new Button()
                         {
                             Y = specialList.Contains(index) ? Application.GetRealWidth(147) : Application.GetRealWidth(104),
@@ -1143,39 +1154,65 @@
                             Height = Application.GetRealWidth(57),
                         };
                         functionView.AddChidren(btnJMLogo);
+                        
 
-                        //Button btnAcstPower = new Button()
-                        //{
-                        //    X = Application.GetRealWidth(120),
-                        //    Y = specialList.Contains(index) ? Application.GetRealWidth(160) : Application.GetRealWidth(117),
-                        //    Width = Application.GetRealWidth(32),
-                        //    Height = Application.GetRealWidth(32),
-                        //    SelectedImagePath = "Public/PowerOpen.png",
-                        //    UnSelectedImagePath = "Public/PowerClose.png",
-                        //    IsSelected = functionOnCount > 0,
-                        //    Tag = item + "_AllControl",
-                        //};
-                        //functionView.AddChidren(btnAcstPower);
-                        //btnAcstPower.MouseUpEventHandler = (sender, e) =>
-                        //{
-                        //    btnAcstPower.IsSelected = !btnAcstPower.IsSelected;
-                        //    string onoff = btnAcstPower.IsSelected ? "on" : "off";
-                        //    Dictionary<string, string> d = new Dictionary<string, string>();
-                        //    d.Add(FunctionAttributeKey.OnOff, onoff);
-                        //    foreach (var temp in FunctionList.List.GetAcstParentList())
-                        //    {
-                        //        Control.Ins.SendWriteCommand(temp, d);
-                        //    }
-                        //};
-
-
-                        btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
+                        if (item == ShowFunction.Acst)
                         {
-                            var page = new AcstParentPage();
-                            MainPage.BasePageView.AddChidren(page);
-                            page.LoadPage();
-                            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-                        };
+                            btnName.TextID = StringId.Acst;
+                            try
+                            {
+                                var acstFunction = FunctionList.List.GetAcstParentList()[0];
+                                btnName.Text = acstFunction.name;
+                                if (acstFunction.extend.Contains("jinmao") && acstFunction.extend.Contains("true"))
+                                {
+                                    btnJMLogo.Visible = true;
+                                }
+                                else
+                                {
+                                    btnJMLogo.Visible = false;
+                                }
+
+                            }
+                            catch (Exception ex)
+                            {
+                                MainPage.Log("Error", $"鍔犺浇閲戣寕绉戞妧绯荤粺涓绘帶鍚嶇О寮傚父:{ex.Message}");
+                            }
+                            btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
+                            {
+                                var page = new AcstParentPage();
+                                MainPage.BasePageView.AddChidren(page);
+                                page.LoadPage();
+                                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                            };
+                        }
+                        else if (item == ShowFunction.InverterJinmao)
+                        {
+                            btnName.TextID = StringId.NewEnergy;
+                            try
+                            {
+                                var jinmaoInverterFunction = FunctionList.List.GetInverterJinmaoList()[0];
+                                btnName.Text = jinmaoInverterFunction.name;
+                                if (jinmaoInverterFunction.extend.Contains("jinmao") && jinmaoInverterFunction.extend.Contains("true"))
+                                {
+                                    btnJMLogo.Visible = true;
+                                }
+                                else
+                                {
+                                    btnJMLogo.Visible = false;
+                                }
+                            }
+                            catch (Exception ex)
+                            {
+                                MainPage.Log("Error", $"鍔犺浇閲戣寕鍌ㄨ兘鍚嶇О寮傚父:{ex.Message}");
+                            }
+                            btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
+                            {
+                                var page = new InverterJinmaoPage();
+                                MainPage.BasePageView.AddChidren(page);
+                                page.LoadPage();
+                                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                            };
+                        }
                         break;
 
                 }
@@ -1186,7 +1223,7 @@
                     && ShowFunction.VideoIntercom != item
                     && ShowFunction.SecurityCenter != item
                     && ShowFunction.Series != item
-                    && ShowFunction.Acst != item)
+                    && ShowFunction.Acst != item && ShowFunction.InverterJinmao != item)
                 {
                     btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
                     {
diff --git a/HDL_ON/UI/UI2/2-Classification/RoomPage.cs b/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
index 7bbf394..902fe8c 100644
--- a/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
@@ -104,9 +104,6 @@
                 {
                     continue;
                 }
-#if DEBUG
-                //throw new ArgumentNullException();
-#endif
 
                 functionListView.AddChidren(new Button() { Height = Application.GetRealHeight(12) });
 
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
index 6dbb73c..55a905f 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -103,7 +103,7 @@
                 case SPK.AcIr:
                 //鍦扮儹
                 case SPK.FloorHeatStandard:
-                case SPK.HvacFloorHeat:
+                case SPK.HvacFloorHeat:case SPK.HvacFloorHeatPanel:
                 //鏂伴
                 case SPK.AirFreshStandard:
                 case SPK.HvacAirFresh:
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
index 486fd90..ea5c8f9 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -164,7 +164,7 @@
                                 case SPK.HvacAC:
                                 case SPK.AcIr:
                                 //鍦扮儹
-                                case SPK.HvacFloorHeat:
+                                case SPK.HvacFloorHeat:case SPK.HvacFloorHeatPanel:
                                 case SPK.FloorHeatStandard:
                                 //鏂伴
                                 case SPK.AirFreshStandard:
@@ -1360,7 +1360,7 @@
                                     }
                                     break;
                                 case SPK.FloorHeatStandard:
-                                case SPK.HvacFloorHeat:
+                                case SPK.HvacFloorHeat:case SPK.HvacFloorHeatPanel:
                                     {
                                         string on_off = GetKeyValue("on_off", dicList);
                                         string set_temp = GetKeyValue("set_temp", dicList);
@@ -2059,7 +2059,7 @@
 
                     }
                     break;
-                case SPK.FloorHeatStandard:
+                case SPK.FloorHeatStandard:case SPK.HvacFloorHeatPanel:
                 case SPK.HvacFloorHeat:
                     {
 
@@ -2691,7 +2691,7 @@
                                 case SPK.AcStandard:
                                 case SPK.HvacAC:
                                 case SPK.AcIr:
-                                case SPK.FloorHeatStandard:
+                                case SPK.FloorHeatStandard:case SPK.HvacFloorHeatPanel:
                                 case SPK.HvacFloorHeat:
                                     {
                                         string value = this.GetValue(dicList);
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
index efdb8d6..9f3f1d2 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -424,7 +424,7 @@
                 deviceStrTypeList.Add(Language.StringByID(StringId.AC));
             }
             ///鍦版殩绫�
-            var floorHeating = deviceList.Find((device) => device.spk == SPK.FloorHeatStandard || device.spk == SPK.HvacFloorHeat);
+            var floorHeating = deviceList.Find((device) => device.spk == SPK.FloorHeatStandard || device.spk == SPK.HvacFloorHeat || device.spk == SPK.HvacFloorHeatPanel);
             if (floorHeating != null)
             {
                 deviceStrTypeList.Add(Language.StringByID(StringId.FloorHeating));
@@ -559,7 +559,7 @@
             ///鍦版殩绫�
             else if (deviceType == Language.StringByID(StringId.FloorHeating))
             {
-                functionTypeList.Add(SPK.FloorHeatStandard); functionTypeList.Add(SPK.HvacFloorHeat);
+                functionTypeList.Add(SPK.FloorHeatStandard); functionTypeList.Add(SPK.HvacFloorHeat); functionTypeList.Add(SPK.HvacFloorHeatPanel);
             }
             ///鏂伴绫�
             else if (deviceType == Language.StringByID(StringId.AirFresh))
@@ -651,7 +651,7 @@
                 functionTypeList.Add(SPK.HvacAC);
                 functionTypeList.Add(SPK.AcIr);
                 functionTypeList.Add(SPK.FloorHeatStandard);
-                functionTypeList.Add(SPK.HvacFloorHeat);
+                functionTypeList.Add(SPK.HvacFloorHeat); functionTypeList.Add(SPK.HvacFloorHeatPanel);
                 functionTypeList.Add(SPK.AirFreshStandard);
                 functionTypeList.Add(SPK.HvacAirFresh);
                 functionTypeList.Add(SPK.SensorSmoke);
@@ -722,7 +722,7 @@
                         deviceTypeList.Add(SPK.CurtainTrietex);
                         deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC);deviceTypeList.Add(SPK.AcIr);
                         deviceTypeList.Add(SPK.AirFreshStandard); deviceTypeList.Add(SPK.HvacAirFresh);
-                        deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat);
+                        deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat); deviceTypeList.Add(SPK.HvacFloorHeatPanel);
                         deviceTypeList.Add(SPK.SensorSmoke);
                         deviceTypeList.Add(SPK.SensorWater);
                         deviceTypeList.Add(SPK.SensorGas);
@@ -771,7 +771,7 @@
                         deviceTypeList.Add(SPK.CurtainRoller);
                         deviceTypeList.Add(SPK.CurtainTrietex);
                         deviceTypeList.Add(SPK.AcStandard); deviceTypeList.Add(SPK.HvacAC); deviceTypeList.Add(SPK.AcIr);
-                        deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat);
+                        deviceTypeList.Add(SPK.FloorHeatStandard); deviceTypeList.Add(SPK.HvacFloorHeat); deviceTypeList.Add(SPK.HvacFloorHeatPanel);
                         deviceTypeList.Add(SPK.AirFreshStandard); deviceTypeList.Add(SPK.HvacAirFresh);
                         deviceTypeList.Add(SPK.AirSwitch);
                         deviceTypeList.Add(SPK.PanelSocket);
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/TemperatureView.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/TemperatureView.cs
index f8b7a85..db3e0fe 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/TemperatureView.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicView/TemperatureView.cs
@@ -11,7 +11,7 @@
         /// <param name="frameLayout">寮圭獥鐖舵帶浠�</param>
         /// <param name="stateValue">涔嬪墠鐘舵�佸��</param>
         /// <param name="action">杩斿洖缁撴灉</param>
-        public void FLayoutView(FrameLayout frameLayout, string stateValue, Action<string> action,int min,int max,string unit)
+        public void FLayoutView(FrameLayout frameLayout, string stateValue, Action<string> action,int min,int max,string unit, string setTempAttr)
         {
             FrameLayout frame = new FrameLayout
             {
@@ -32,7 +32,10 @@
             {
                 //娣诲姞鏁版嵁
                 temperatureList.Add(i.ToString() + unit);
-                temperatureList.Add((i + 0.5).ToString() + unit);
+                if (setTempAttr == "0.5")
+                {
+                    temperatureList.Add((i + 0.5).ToString() + unit);
+                }
             }
             //鍔犺浇鏁版嵁鐣岄潰鐨勮缃柟娉�(鍒楄〃浜掍笉鑱斿姩)
             view.mUIPickerView.setNPicker(temperatureList, null, null);
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
index 22bad8a..9575c4f 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
@@ -492,6 +492,7 @@
                         int min = device.GetAttribute("set_temp") == null ? 16 : device.GetAttribute("set_temp").min;
                         int max = device.GetAttribute("set_temp") == null ? 32 : device.GetAttribute("set_temp").max;
                         string unit = InpOrOutLogicMethod.Current.GetTemperatureUnit(device);
+                        var setTempAttr = device.GetAttribute(FunctionAttributeKey.SetTemp);
                         ///娓╁害鐐瑰嚮浜嬩欢
                         temperatureView.btnClick.MouseUpEventHandler += (sender, e) =>
                         {
@@ -508,7 +509,7 @@
                                 string set_temp_value = stateStr.Replace(unit, "");
                                 //鏁版嵁灏佽
                                 AddDictionary(keyVlaue, set_temp_value);
-                            }, min, max, unit);
+                            }, min, max, unit, setTempAttr.step);
 
                         };
                         ///妯″紡鐐瑰嚮浜嬩欢
@@ -562,7 +563,7 @@
                     }
                     break;
                 case SPK.FloorHeatStandard:
-                case SPK.HvacFloorHeat:
+                case SPK.HvacFloorHeat:case SPK.HvacFloorHeatPanel:
                     {
                         #region 鐣岄潰
                         ///寮�鍏�
@@ -586,6 +587,7 @@
                         DelayView(fLayout, floorHeatingModehView.frameLayout.Bottom);
                         #endregion
                         #region 鐐瑰嚮浜嬩欢
+                        var setTempAttr = device.GetAttribute(FunctionAttributeKey.SetTemp);
                         ///寮�鍏崇偣鍑讳簨浠�
                         floorHeatingSwitchVie.btnClick.MouseUpEventHandler += (sender, e) =>
                         {
@@ -611,7 +613,7 @@
                                 //鏁版嵁灏佽
                                 AddDictionary(keyVlaue, set_temp_value);
 
-                            }, min, max, unit);
+                            }, min, max, unit, setTempAttr.step);
 
                         };
                         ///妯″紡鐐瑰嚮浜嬩欢
@@ -910,7 +912,7 @@
                         case SPK.AcIr:
                         case SPK.AcStandard:
                         case SPK.FloorHeatStandard:
-                        case SPK.HvacFloorHeat:
+                        case SPK.HvacFloorHeat:case SPK.HvacFloorHeatPanel:
                             {
                                 //鍋氫簡涓�涓壒娈婂鐞嗭紱
                                 bool _bool = false;
diff --git a/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs b/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs
index 4fdd6fa..8893874 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs
@@ -83,6 +83,7 @@
 
             //涓嶆槸A缃戝叧鎴栬�呮槸鎴愬憳 鍙厑璁告坊鍔犲満鏅殣钘忚嚜鍔ㄥ寲
             var HideAutoPage = DB_ResidenceData.Instance.CurrentRegion.isOtherShare;
+            bool hideSecurity = true;
             //鍒ゆ柇鏄惁闇�瑕侀殣钘忚嚜鍔ㄥ寲
             if (HideAutoPage)
             {
@@ -159,7 +160,6 @@
                     var otherWidth = (Application.GetRealWidth(375) - btnAutomationTitle.Width) / 2;
                     btnAutomationTitle.X = otherWidth;
 
-
                     btnSceneTilte = new Button()
                     {
                         Y = Application.GetRealHeight(40),
@@ -174,7 +174,6 @@
                     };
                     topView.AddChidren(btnSceneTilte);
 
-
                     btnSecurityTitle = new Button()
                     {
                         X = btnAutomationTitle.Right,
@@ -188,6 +187,7 @@
                         TextID = StringId.anfang,
                     };
                     topView.AddChidren(btnSecurityTitle);
+                    hideSecurity = false;
                 }
                 else
                 {
@@ -253,7 +253,10 @@
             {
                 LoadAutomationPageView();
             }
-            LoadSecurityPageView();
+            if (!hideSecurity)
+            {
+                LoadSecurityPageView();
+            }
             LoadEventList();
 
         }
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
index 575dadd..f602898 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs
@@ -279,11 +279,6 @@
                         scene.delay = obj;
                         btnSceneDelayInfo.Text = scene.GetDelayText();
                     };
-                    Dictionary<string, string> items = new Dictionary<string, string>();
-                    items.Add("30", "30s");
-                    items.Add("60", "1min");
-                    items.Add("120", "2min");
-                    items.Add("300", "5min");
                     new PublicAssmebly().SetSceneDelayDialog( action ,scene.delay);
 
 
@@ -938,7 +933,7 @@
                 {
                     CropImageCallBack(imagePath);
 
-                }, imageName, 4, 3);
+                }, imageName, 4, 3, 0);
 
                 //}
                 pictureOptionView.Parent.RemoveFromParent();
@@ -957,7 +952,7 @@
                 CropImage.SelectPicture((imagePath) =>
                 {
                     CropImageCallBack(imagePath);
-                }, imageName, 4, 3);
+                }, imageName, 4, 3,0);
 
 
                 //if (pageTitleId == StringId.EditScene)
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
index ae70c7a..a5020be 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
@@ -1030,7 +1030,7 @@
                 CropImage.TakePicture((imagePath) =>
                 {
                     CropImageCallBack(imagePath);
-                }, imageName, 4, 3);
+                }, imageName, 4, 3,0);
 
                 pictureOptionView.Parent.RemoveFromParent();
             };
@@ -1041,16 +1041,6 @@
             btnAlbum.MouseUpEventHandler = (sender, e) =>
             {
                 btnAlbum.IsSelected = false;
-                //var pid = Guid.NewGuid();
-                //CropImage.SelectPicture((imagePath) =>
-                //{
-                //    if (imagePath != null)
-                //    {
-                //        addSceneImageView.ImagePath = imagePath.ToString();
-                //        scene.ImagePath = addSceneImageView.ImagePath;
-                //        MainPage.Log("SelectPicture 瑁佸壀鍥剧墖杩斿洖璺緞: " + imagePath);
-                //    }
-                //}, pid.ToString(), 4, 3);
 
                 //浠庣浉鍐岄�夋嫨鍥剧墖瑁佸壀
                 var imageName = Guid.NewGuid().ToString();
@@ -1058,7 +1048,7 @@
                 CropImage.SelectPicture((imagePath) =>
                 {
                     CropImageCallBack(imagePath);
-                }, imageName, 4, 3);
+                }, imageName, 4, 3,0);
 
 
                 pictureOptionView.Parent.RemoveFromParent();
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
index a7cd03f..72e11f2 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -215,10 +215,10 @@
                 TextAlignment = TextAlignment.Center,
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 TextSize = CSS_FontSize.SubheadingFontSize,
-                Text = UserInfo.Current.userName// string.IsNullOrEmpty(UserInfo.Current.userName) ? Language.StringByID(StringId.UsersWhoNameIsEmpty) : UserInfo.Current.userName
+                Text = UserInfo.Current.userName // string.IsNullOrEmpty(UserInfo.Current.userName) ? Language.StringByID(StringId.UsersWhoNameIsEmpty) : UserInfo.Current.userName
             };
             personalInfoView.AddChidren(btnUserName);
-            if (!string.IsNullOrEmpty( UserInfo.Current.userName) && UserInfo.Current.userName == UserInfo.Current.AccountString)
+            if (!string.IsNullOrEmpty(UserInfo.Current.userName) && UserInfo.Current.userName == UserInfo.Current.AccountString)
             {
                 btnUserName.Text = Language.StringByID(StringId.UsersWhoNameIsEmpty);
             }
@@ -229,7 +229,7 @@
                 TextAlignment = TextAlignment.Center,
                 TextColor = CSS_Color.TextualColor,
                 TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                Text =  UserInfo.Current.AccountString
+                Text = UserInfo.Current.AccountString
             };
             personalInfoView.AddChidren(btnEmail);
 
@@ -240,7 +240,7 @@
                 Width = Application.GetMinRealAverage(84),
                 Height = Application.GetMinRealAverage(84),
                 Radius = (uint)Application.GetMinRealAverage(42),
-                ImagePath =  UserInfo.Current.headImagePagePath
+                ImagePath = UserInfo.Current.headImagePagePath
             };
             bodyView.AddChidren(userHeadImageView);
             //if (  UserInfo.Current.headImagePageBytes==null)
@@ -254,7 +254,7 @@
             #endregion
 
             //浣撻獙妯″紡
-            if(MainPage.NoLoginMode)
+            if (MainPage.NoLoginMode)
             {
                 Button btnExit = new Button()
                 {
@@ -271,7 +271,7 @@
                     BackgroundColor = CSS_Color.MainBackgroundColor,
                     SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
                 };
-                if(Language.CurrentLanguage =="Chinese")
+                if (Language.CurrentLanguage == "Chinese")
                 {
                     btnExit.Text = "閫�鍑�";
                 }
@@ -376,7 +376,7 @@
                 BackgroundImagePath = "PersonalCenter/UserTypebg.png",
             };
             residenceInfoView.AddChidren(userTypeView);
-            if (Language.CurrentLanguage != "Chinese" )//&& !DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
+            if (Language.CurrentLanguage != "Chinese")//&& !DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
             {
                 userTypeView.X = Application.GetRealWidth(200);
                 userTypeView.Width = Application.GetRealWidth(180);
@@ -603,7 +603,8 @@
                     residenceAddFunctionView.AddChidren(btnResidenceAddFunctionText);
                     #endregion
 
-                    if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
+                    bool needShow = false;
+                    if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl || needShow)
                     {
                         residenceFunctionCount++;
                         #region ---缁勫悎璋冨厜
@@ -932,7 +933,7 @@
             #endregion
 
             #region Siri
-            #if __IOS__
+#if __IOS__
             //if (Application.PhoneType >= 12)
             {
                 supportViewCellCount++;
@@ -965,10 +966,11 @@
                     TextAlignment = TextAlignment.CenterLeft,
                     TextSize = CSS_FontSize.TextFontSize
                 };
-                if(Language.CurrentLanguage == "Chinese")
+                if (Language.CurrentLanguage == "Chinese")
                 {
                     btnSiriText.Text = "Siri蹇嵎鏂瑰紡";
-                }else
+                }
+                else
                 {
                     btnSiriText.Text = "Siri Shortcut";
                 }
@@ -976,8 +978,9 @@
                 siriView.AddChidren(btnSiriText);
 
 
-                btnSiriText.MouseUpEventHandler = (sender, e) => {
-                    var ddd =new Other.SkipControl();
+                btnSiriText.MouseUpEventHandler = (sender, e) =>
+                {
+                    var ddd = new Other.SkipControl();
                     ddd.SkipSiriView();
                 };
 
@@ -1001,7 +1004,7 @@
                 };
                 siriView.AddChidren(btnSmartSpeakerViewLine);
             }
-            #endif
+#endif
             #endregion
 
             #region 鑾峰彇鏀寔
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/AddRoom/AddRoomPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/AddRoom/AddRoomPage.cs
index 5e20a72..bb71db5 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/AddRoom/AddRoomPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/AddRoom/AddRoomPage.cs
@@ -616,7 +616,7 @@
                 {
                     CropImageCallBack(imagePath);
 
-                }, imageName, 16, 9);
+                }, imageName, 16, 9,0);
 
                 baseView.RemoveFromParent();
             };
@@ -637,7 +637,7 @@
                 {
                     CropImageCallBack(imagePath);
 
-                }, imageName, 16, 9);
+                }, imageName, 16, 9,0);
 
                 baseView.RemoveFromParent();
 
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/RoomEditPageBLL.cs b/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/RoomEditPageBLL.cs
index 6ac07bb..b939a61 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/RoomEditPageBLL.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/RoomEditPageBLL.cs
@@ -224,7 +224,7 @@
                 {
                     CropImageCallBack(imagePath);
 
-                }, imageName, 16, 9);
+                }, imageName, 16, 9,0);
 
                 baseView.RemoveFromParent();
             };
@@ -245,7 +245,7 @@
                 {
                     CropImageCallBack(imagePath);
 
-                }, imageName, 16, 9);
+                }, imageName, 16, 9,0);
 
                 baseView.RemoveFromParent();
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs
index 4553294..2668f25 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacDayHistoryPage.cs
@@ -31,12 +31,14 @@
         /// </summary>
         public void InitView()
         {
-            new TopViewDiv(bodyView, Language.StringByID(StringId.StatisticalChart24Hour)).LoadTopView();
+            var topview = new TopViewDiv(bodyView, Language.StringByID(StringId.StatisticalChart24Hour));
+            topview.maginY = 10;
+            topview.LoadTopView();
             bodyView.BackgroundColor = CSS_Color.BackgroundColor;
 
             var contentView = new FrameLayout()
             {
-                Y = Application.GetRealHeight(64),
+                Y = Application.GetRealHeight(74),
                 Height = Application.GetRealHeight(603),
             };
             bodyView.AddChidren(contentView);
@@ -80,38 +82,38 @@
 
 #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();
+            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);
+            myEchartsView_Line.ShowWithOptionJsonString(opString);
 
 #endif
-            LoadMothed_GetHistoryData();
+            //LoadMothed_GetHistoryData();
         }
 
         /// <summary>
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacHistoryChoosePage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacHistoryChoosePage.cs
index d9514ef..f46c646 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacHistoryChoosePage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacHistoryChoosePage.cs
@@ -19,12 +19,12 @@
 
         public void InitView()
         {
-            new TopViewDiv(bodyView, Language.StringByID(StringId.Data)).LoadTopView();
+            new TopViewDiv(bodyView, Language.StringByID(StringId.Data)) { maginY = 10 }.LoadTopView();
             bodyView.BackgroundColor = CSS_Color.BackgroundColor;
 
             FrameLayout tempView = new FrameLayout()
             {
-                Y = Application.GetRealHeight(64),
+                Y = Application.GetRealHeight(74),
                 Height = Application.GetRealHeight(50),
                 BackgroundColor = CSS_Color.MainBackgroundColor,
             };
@@ -59,7 +59,8 @@
                 TextID = StringId.TemperatureStatistics
             };
             tempView.AddChidren(btnTempName);
-            btnTempName.MouseUpEventHandler = (sender, e) => {
+            btnTempName.MouseUpEventHandler = (sender, e) =>
+            {
                 var page = new CacWeekHistoryPage(device, "room_temp");
                 MainPage.BasePageView.AddChidren(page);
                 page.InitView();
@@ -70,7 +71,7 @@
 
             FrameLayout humidityView = new FrameLayout()
             {
-                Y = Application.GetRealHeight(64 + 50),
+                Y = Application.GetRealHeight(74 + 50),
                 Height = Application.GetRealHeight(50),
                 BackgroundColor = CSS_Color.MainBackgroundColor,
             };
@@ -95,7 +96,8 @@
                 TextID = StringId.HumidityStatistics
             };
             humidityView.AddChidren(btnHumidityName);
-            btnHumidityName.MouseUpEventHandler = (sender, e) => {
+            btnHumidityName.MouseUpEventHandler = (sender, e) =>
+            {
                 var page = new CacWeekHistoryPage(device, "room_humidity");
                 MainPage.BasePageView.AddChidren(page);
                 page.InitView();
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacWeekHistoryPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacWeekHistoryPage.cs
index c5084de..5a064b9 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacWeekHistoryPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/CacWeekHistoryPage.cs
@@ -34,11 +34,15 @@
         {
             if (showType == "room_temp")
             {
-                new TopViewDiv(bodyView, Language.StringByID(StringId.Temp)).LoadTopView();
+                var topView = new TopViewDiv(bodyView, Language.StringByID(StringId.Temp));
+                topView.maginY = 10;
+                topView.LoadTopView();
             }
             else
             {
-                new TopViewDiv(bodyView, Language.StringByID(StringId.Humidity)).LoadTopView();
+                var topView = new TopViewDiv(bodyView, Language.StringByID(StringId.Humidity));
+                topView.maginY = 10;
+                topView.LoadTopView();
             }
 
 
@@ -51,7 +55,7 @@
         {
             FrameLayout contentView = new FrameLayout()
             {
-                Y = Application.GetRealHeight(80),
+                Y = Application.GetRealHeight(90),
                 Gravity = Gravity.CenterHorizontal,
                 Width = Application.GetRealWidth(343),
                 Height = Application.GetRealHeight(482),
@@ -99,18 +103,18 @@
             }
             else
             {
-                btnUnit.Text = Language.StringByID(StringId.Uint) + "%";
+                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", 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);
@@ -176,7 +180,17 @@
 
             new System.Threading.Thread(() =>
             {
-
+#if DEBUG
+                if (MainPage.NoLoginMode)
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        RefrshDataView(dataDic, dataShowView);
+                        RefreshXtext();
+                    });
+                    return;
+                }
+#endif
                 var revertObj = new HttpServerRequest().GetSensorHistory("week", device.deviceId, showType);
                 if (revertObj.Code == StateCode.SUCCESS)
                 {
@@ -254,14 +268,9 @@
                 cv.InitView();
                 dataShowView.AddChidren(cv);
                 cv.Clicker();
-
-
                 valueIndex++;
             }
         }
-
-
-
     }
 
     class DataItemView : FrameLayout
@@ -281,7 +290,7 @@
 
             Button btnValue = new Button()
             {
-                Width = Application.GetRealWidth(18),
+                Width = Application.GetRealWidth(24),
                 Height = Application.GetRealHeight(30),
                 TextAlignment = TextAlignment.CenterRight,
                 TextColor = 0xFF43425D,
@@ -356,6 +365,8 @@
             }
             Width = Application.GetRealWidth(39);
             Height = Application.GetRealHeight((int)(value * 3 + 30));
+
+            ScrollEnabled = false;
         }
 
         public void InitView()
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs
index 97c577b..61c562f 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs
@@ -6,7 +6,25 @@
 
 namespace HDL_ON.UI
 {
-
+    public class VerticalScrolViewLayoutJinmao : VerticalScrolViewLayout
+    {
+        public VerticalScrolViewLayoutJinmao()
+        {
+#if __IOS__
+            try
+            {
+                //鑷姩鍋忕Щ鍙栨秷
+                if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
+                {
+                    (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never;
+                }
+            }catch(Exception ex)
+            {
+                MainPage.Log("error", "閲戣寕iOS 婊氬姩瀹瑰櫒鍋忕Щ鍊艰缃紓甯革細" + ex.Message);
+            }
+#endif
+        }
+    }
 
     /// <summary>
 	/// 缁垮缓绉戞妧绯荤粺
@@ -16,7 +34,7 @@
     {
         static AcstParentPage basePage;
 
-        VerticalScrolViewLayout contentView;
+        VerticalScrolViewLayoutJinmao contentView;
 
         string helloText = "涓婂崍濂�";
 
@@ -42,9 +60,7 @@
         /// </summary>
         Dictionary<string, AcstSubControlView> subViewList;
 
-
         Button btnWorkSceneControl;
-
         Button btnModeControl;
         Button btnPowerControl;
 
@@ -105,10 +121,14 @@
             this.function = FunctionList.List.GetAcstParentList()[0];
             this.BackgroundColor = CSS.CSS_Color.BackgroundColor;
             //this.AddChidren(new Button() { Height = Application.GetRealHeight(50), BackgroundColor = curColor });
-            contentView = new VerticalScrolViewLayout() {
+            contentView = new VerticalScrolViewLayoutJinmao()
+            {
                 Height = Application.GetRealHeight(667 - 56),
+                VerticalScrollBarEnabled = false,
             };
-            this.AddChidren(contentView);
+            basePage.AddChidren(contentView);
+
+
             subViewList = new Dictionary<string, AcstSubControlView>();
         }
         /// <summary>
@@ -164,53 +184,53 @@
                     switch (temp.GetAttrState("mode"))
                     {
                         case "cool"://鍒跺喎
-                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeCoolIcon2.png";
+                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeCoolIcon2.png";
                             basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeCoolIcon2.png";
                             break;
                         case "heat"://鍒剁儹
-                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHeatIcon2.png";
+                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHeatIcon2.png";
                             basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeHeatIcon2.png";
                             break;
                         case "fan"://閫氶
-                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeFanIcon2.png";
+                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeFanIcon2.png";
                             basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeFanIcon2.png";
                             break;
                         case "dry"://闄ゆ箍
-                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeDeHumiIcon2.png";
+                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeDeHumiIcon2.png";
                             basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeDeHumiIcon2.png";
                             break;
                         case "humidity"://鍔犳箍
-                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHumiIcon2.png";
+                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHumiIcon2.png";
                             basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeHumiIcon2.png";
                             break;
                         case "heat_humidity"://鍒剁儹鍔犳箍
-                        basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHeatHumiIcon2.png";
+                            basePage.btnModeControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/ModeHeatHumiIcon2.png";
                             basePage.btnModeControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/ModeHeatHumiIcon2.png";
                             break;
                     }
                     switch (temp.GetAttrState("scene"))
                     {
                         case "at_home"://鍦ㄥ
-                        basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneAtHome2.png";
+                            basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneAtHome2.png";
                             basePage.btnWorkSceneControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/SceneAtHome2.png";
                             break;
                         case "leave_home"://绂诲
-                        basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneAwayHomeIcon2.png";
+                            basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneAwayHomeIcon2.png";
                             basePage.btnWorkSceneControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/SceneAwayHomeIcon2.png";
                             break;
                         case "sleep"://鐫$湢
-                        basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneSleepIcon2.png";
+                            basePage.btnWorkSceneControl.UnSelectedImagePath = "FunctionIcon/Acst/grey/SceneSleepIcon2.png";
                             basePage.btnWorkSceneControl.SelectedImagePath = $"FunctionIcon/Acst/{basePage.imageFolder}/SceneSleepIcon2.png";
                             break;
                     }
                     basePage.btnModeControl.IsSelected = basePage.btnWorkSceneControl.IsSelected = basePage.btnPowerControl.IsSelected = temp.GetAttrState("on_off") == "on";
                 });
-            }catch (Exception ex)
+            }
+            catch (Exception ex)
             {
-                MainPage.Log("绉戞妧绯荤粺鏇存柊鏁版嵁澶辫触");
+                MainPage.Log("绉戞妧绯荤粺鏇存柊鏁版嵁澶辫触:" + ex.Message);
             }
         }
-
 
         /// <summary>
         /// 鏇存柊瀛愭帶淇℃伅
@@ -232,12 +252,21 @@
                         basePage.subViewList.TryGetValue(temp.sid, out view);
                         if (view != null)
                         {
-                            view.btnSubHumidityValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString()) + "%";
-                            view.btnSubTempValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_temp.ToString()) + "掳";
-                            view.btnSubPower.IsSelected = temp.GetAttrState(AcstSub_AttrEnum.on_off.ToString()) == "on";
+                            if (temp.spk == SPK.AcstSub)
+                            {
+                                view.btnSubHumidityValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString()) + "%";
+                                view.btnSubTempValues.Text = temp.GetAttrState(AcstSub_AttrEnum.room_temp.ToString()) + "掳";
+                                view.btnSubPower.IsSelected = temp.GetAttrState(AcstSub_AttrEnum.on_off.ToString()) == "on";
+                            }
+                            else if (temp.spk == SPK.WaterHeaterJinmao)
+                            {
+                                view.btnSubTempValues.Text = temp.GetAttrState(WaterHeaterJinmao_AttrEnum.temp.ToString()) + "掳";
+                                view.btnSubPower.IsSelected = temp.GetAttrState(WaterHeaterJinmao_AttrEnum.on_off.ToString()) == "on";
+                            }
                         }
                     }
-                    catch (Exception ex ) {
+                    catch (Exception ex)
+                    {
                         MainPage.Log($"绉戞妧绯荤粺鏇存柊寮傚父1:{ex.Message}");
                     }
                 });
@@ -278,7 +307,8 @@
             Button btnBackClick = new Button();
             backView.AddChidren(btnBackClick);
 
-            btnBackClick.MouseUpEventHandler = (sender, e) => {
+            btnBackClick.MouseUpEventHandler = (sender, e) =>
+            {
                 this.RemoveFromParent();
             };
 
@@ -437,7 +467,7 @@
             {
                 var infoView = new FrameLayout()
                 {
-                    Y = topView.Bottom,
+                    //Y = topView.Bottom,
                     Height = Application.GetRealHeight(104),
                     BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
                 };
@@ -471,7 +501,7 @@
                     {
                         tempValues = tempValues.Remove(tempValues.IndexOf('.'), tempValues.Length - tempValues.IndexOf('.'));
                     }
-                    sensorDiyView_Temp = new SensorDiyView(sensorListView, curColor, tempValues, "掳","", Language.StringByID(StringId.Temp));
+                    sensorDiyView_Temp = new SensorDiyView(sensorListView, curColor, tempValues, "掳", "", Language.StringByID(StringId.Temp));
                 }
                 if (humiObj != null)
                 {
@@ -480,7 +510,7 @@
                     {
                         humiValues = humiValues.Remove(humiValues.IndexOf('.'), humiValues.Length - humiValues.IndexOf('.'));
                     }
-                    sensorDiyView_Humi = new SensorDiyView(sensorListView, curColor, humiValues , "%", "", Language.StringByID(StringId.Humidity));
+                    sensorDiyView_Humi = new SensorDiyView(sensorListView, curColor, humiValues, "%", "", Language.StringByID(StringId.Humidity));
                 }
                 if (pm25Obj != null)
                 {
@@ -568,7 +598,7 @@
 
             var subTitleView = new FrameLayout()
             {
-                Height = Application.GetRealHeight(54-11),
+                Height = Application.GetRealHeight(54 - 11),
             };
             contentView.AddChidren(subTitleView);
 
@@ -584,7 +614,8 @@
             };
             subTitleView.AddChidren(btnCollection);
             //鏀惰棌
-            btnCollection.MouseUpEventHandler = (sender, e) => {
+            btnCollection.MouseUpEventHandler = (sender, e) =>
+            {
                 function.collect = !function.collect;
                 btnCollection.IsSelected = function.collect;
 
@@ -623,8 +654,9 @@
 #if DEBUG
                     System.Threading.Thread.Sleep(200);
 #endif
-
-                    foreach (var sub in FunctionList.List.GetAcstSubList())
+                    var showList = FunctionList.List.GetAcstSubList();
+                    showList.AddRange(FunctionList.List.GetWaterHeaterJinmaoList());
+                    foreach (var sub in showList)
                     {
                         if (subViewList.ContainsKey(sub.sid))
                         {
@@ -638,6 +670,7 @@
                                 subFunctionListView = new HorizontalScrolViewLayout()
                                 {
                                     Height = Application.GetRealHeight(93),
+                                    ScrollEnabled = false,
                                 };
                                 contentView.AddChidren(subFunctionListView);
                                 subFunctionListView.AddChidren(new Button { Width = Application.GetRealWidth(9) });
@@ -653,26 +686,29 @@
                                 })
                                 { IsBackground = true }.Start();
                             }
-                        subFunctionCount++;
+                            subFunctionCount++;
                         });
 
                         System.Threading.Thread.Sleep(10);
                     }
                 }
                 catch { }
-                finally{
-             
+                finally
+                {
+
                 }
             }).Start();
             #endregion
 
-
             #region 搴曢儴鎺у埗鏍�
             var bottomView = new FrameLayout()
             {
-                Y = Application.GetRealHeight(667 - 56),
-                Height = Application.GetRealHeight(56),
+                Y = Application.GetRealHeight(667 - 66),
+                Height = Application.GetRealHeight(66+16),
                 BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealHeight(16),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
             };
             this.AddChidren(bottomView);
 
@@ -698,11 +734,13 @@
 
                 var dialogView = new FrameLayout();
                 dialog.AddChidren(dialogView);
-                dialogView.MouseUpEventHandler = (sender, e) => {
+                dialogView.MouseUpEventHandler = (sender, e) =>
+                {
                     dialog.Close();
                 };
 
-                var dialogContentView = new VerticalScrolViewLayout() {
+                var dialogContentView = new VerticalScrolViewLayout()
+                {
                     X = Application.GetRealWidth(34),
                     Y = Application.GetRealHeight(291),
                     Width = Application.GetRealWidth(148),
@@ -711,7 +749,8 @@
                 };
                 dialogView.AddChidren(dialogContentView);
 
-                var titleView = new FrameLayout() {
+                var titleView = new FrameLayout()
+                {
                     X = Application.GetRealWidth(2),
                     Y = Application.GetRealHeight(3),
                     Width = Application.GetRealWidth(144),
@@ -988,15 +1027,12 @@
 
             btnWorkSceneControl.MouseUpEventHandler = (sender2, e2) =>
             {
-                //if (function.trait_on_off.state == "off")
-                //{
-                //    return;
-                //}
                 Dialog dialog = new Dialog();
 
                 var dialogView = new FrameLayout();
                 dialog.AddChidren(dialogView);
-                dialogView.MouseUpEventHandler = (sender, e) => {
+                dialogView.MouseUpEventHandler = (sender, e) =>
+                {
                     dialog.Close();
                 };
 
@@ -1176,7 +1212,7 @@
         public string Tag;
         public string unitString;
 
-        public SensorDiyView(HorizontalScrolViewLayout view,uint color,string value,string unitStr, string unitStr2, string text,int setWidth = 60)
+        public SensorDiyView(HorizontalScrolViewLayout view, uint color, string value, string unitStr, string unitStr2, string text, int setWidth = 60)
         {
             unitString = unitStr;
             if (string.IsNullOrEmpty(value))
@@ -1212,11 +1248,11 @@
                 TextAlignment = TextAlignment.Center,
                 TextColor = 0xFF949AA5,
                 TextSize = 12,
-                Text = text ,
+                Text = text,
             };
             contentView.AddChidren(btnText);
 
-            if(!string.IsNullOrEmpty(unitStr2))
+            if (!string.IsNullOrEmpty(unitStr2))
             {
                 btnText.Text += "(" + unitStr2 + ")";
             }
@@ -1224,7 +1260,7 @@
 
         }
 
-        public void UpdateValue(string value,bool isInt)
+        public void UpdateValue(string value, bool isInt)
         {
             if (value.Contains(".") && isInt)
             {
@@ -1244,7 +1280,7 @@
         public Button btnSubPower;
         public string Tag;
 
-        public AcstSubControlView(Function sub, HorizontalScrolViewLayout subFunctionListView,string imageFolder)
+        public AcstSubControlView(Function sub, HorizontalScrolViewLayout subFunctionListView, string imageFolder)
         {
             Tag = sub.sid;
 
@@ -1260,6 +1296,7 @@
             {
                 X = Application.GetRealWidth(18 + 7),
                 Y = Application.GetRealHeight(11),
+                Width = Application.GetRealWidth(120),
                 Height = Application.GetRealHeight(40),
                 TextAlignment = TextAlignment.CenterLeft,
                 TextColor = 0xFF1b3053,
@@ -1286,33 +1323,9 @@
                 Width = Application.GetRealWidth(35),
                 TextColor = 0xFF1b3035,
                 TextSize = 10,
-                Text = sub.GetAttrState(AcstSub_AttrEnum.room_temp.ToString()) + "掳C",
                 TextAlignment = TextAlignment.CenterLeft,
             };
             subFunctionView.AddChidren(btnSubTempValues);
-
-            Button btnSubHumidityIcon = new Button()
-            {
-                X = btnSubTempValues.Right + Application.GetRealWidth(5),
-                Y = Application.GetRealHeight(47 + 11),
-                Width = Application.GetMinRealAverage(11),
-                Height = Application.GetMinRealAverage(11),
-                UnSelectedImagePath = "FunctionIcon/CAC/HvacCacHumidityIcon.png",
-            };
-            subFunctionView.AddChidren(btnSubHumidityIcon);
-
-            btnSubHumidityValues = new TextButton()
-            {
-                X = btnSubHumidityIcon.Right,
-                Y = Application.GetRealHeight(45 + 11),
-                Height = Application.GetRealHeight(14),
-                Width = Application.GetRealWidth(35),
-                TextColor = 0xFF1b3053,
-                TextSize = 10,
-                Text = sub.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString()) + "%",
-                TextAlignment = TextAlignment.CenterLeft,
-            };
-            subFunctionView.AddChidren(btnSubHumidityValues);
 
             btnSubPower = new Button()
             {
@@ -1325,7 +1338,8 @@
                 TextAlignment = TextAlignment.Center,
             };
             subFunctionView.AddChidren(btnSubPower);
-            btnSubPower.MouseUpEventHandler = (sender, e) => {
+            btnSubPower.MouseUpEventHandler = (sender, e) =>
+            {
                 btnSubPower.IsSelected = !btnSubPower.IsSelected;
                 string onoff = btnSubPower.IsSelected ? "on" : "off";
                 Dictionary<string, string> d = new Dictionary<string, string>();
@@ -1333,21 +1347,71 @@
                 Control.Ins.SendWriteCommand(sub, d);
             };
 
-            EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
-                var page = new AcstSubPage(sub,imageFolder);
-                MainPage.BasePageView.AddChidren(page);
-                page.LoadPage(()=> {
-                    btnRoomInfo.Text = sub.name;
-                });
-                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-            };
+            if (sub.spk == SPK.AcstSub)
+            {
+                btnSubTempValues.Text = sub.GetAttrState(AcstSub_AttrEnum.room_temp.ToString()) + "掳C";
+                Button btnSubHumidityIcon = new Button()
+                {
+                    X = btnSubTempValues.Right + Application.GetRealWidth(5),
+                    Y = Application.GetRealHeight(47 + 11),
+                    Width = Application.GetMinRealAverage(11),
+                    Height = Application.GetMinRealAverage(11),
+                    UnSelectedImagePath = "FunctionIcon/CAC/HvacCacHumidityIcon.png",
+                };
+                subFunctionView.AddChidren(btnSubHumidityIcon);
 
-            btnRoomInfo.MouseUpEventHandler = eventHandler;
-            btnSubHumidityIcon.MouseUpEventHandler = eventHandler;
-            btnSubHumidityValues.MouseUpEventHandler = eventHandler;
-            btnSubTempIcon.MouseUpEventHandler = eventHandler;
-            btnSubTempValues.MouseUpEventHandler = eventHandler;
-            subFunctionView.MouseUpEventHandler = eventHandler;
+                btnSubHumidityValues = new TextButton()
+                {
+                    X = btnSubHumidityIcon.Right,
+                    Y = Application.GetRealHeight(45 + 11),
+                    Height = Application.GetRealHeight(14),
+                    Width = Application.GetRealWidth(35),
+                    TextColor = 0xFF1b3053,
+                    TextSize = 10,
+                    Text = sub.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString()) + "%",
+                    TextAlignment = TextAlignment.CenterLeft,
+                };
+                subFunctionView.AddChidren(btnSubHumidityValues);
+
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+                {
+                    var page = new AcstSubPage(sub, imageFolder);
+                    MainPage.BasePageView.AddChidren(page);
+                    page.LoadPage(() =>
+                    {
+                        btnRoomInfo.Text = sub.name;
+                    });
+                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                };
+
+                btnRoomInfo.MouseUpEventHandler = eventHandler;
+                btnSubTempIcon.MouseUpEventHandler = eventHandler;
+                btnSubTempValues.MouseUpEventHandler = eventHandler;
+                subFunctionView.MouseUpEventHandler = eventHandler;
+                btnSubHumidityIcon.MouseUpEventHandler = eventHandler;
+                btnSubHumidityValues.MouseUpEventHandler = eventHandler;
+            }
+            else if (sub.spk == SPK.WaterHeaterJinmao)
+            {
+                btnSubTempValues.Width = Application.GetRealWidth(45);
+                btnSubTempValues.Text = sub.GetAttrState(WaterHeaterJinmao_AttrEnum.temp.ToString()) + "掳C";
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+                {
+                    var page = new WaterHeaterJinmaoPage(sub);
+                    MainPage.BasePageView.AddChidren(page);
+                    page.LoadPage(() =>
+                    {
+                        btnRoomInfo.Text = sub.name;
+                    });
+                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                };
+
+                btnRoomInfo.MouseUpEventHandler = eventHandler;
+                btnSubTempIcon.MouseUpEventHandler = eventHandler;
+                btnSubTempValues.MouseUpEventHandler = eventHandler;
+                subFunctionView.MouseUpEventHandler = eventHandler;
+
+            }
         }
     }
 
@@ -1360,7 +1424,7 @@
 
         public Button btnText;
 
-        public IconButton(string iconPath,string iconPath2,string text,uint color,bool isSelect)
+        public IconButton(string iconPath, string iconPath2, string text, uint color, bool isSelect)
         {
             view = this;
             view.Width = Application.GetRealWidth(144);
@@ -1391,19 +1455,22 @@
             };
             view.AddChidren(btnText);
 
-            
+
         }
 
 
         public void Click(Action action)
         {
-            view.MouseUpEventHandler = (sender, e) => {
+            view.MouseUpEventHandler = (sender, e) =>
+            {
                 action();
             };
-            btnText.MouseUpEventHandler = (sender, e) => {
+            btnText.MouseUpEventHandler = (sender, e) =>
+            {
                 action();
             };
-            btnIcon.MouseUpEventHandler = (sender, e) => {
+            btnIcon.MouseUpEventHandler = (sender, e) =>
+            {
                 action();
             };
         }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubHistoryPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubHistoryPage.cs
index bd1070c..786666a 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubHistoryPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubHistoryPage.cs
@@ -49,7 +49,10 @@
         /// </summary>
         public void LoadPage()
         {
-            new TopViewDiv(bodyView, function.name).LoadTopView();
+            var topView = new TopViewDiv(bodyView, function.name);
+            topView.maginY = 10;
+            topView.LoadTopView();
+
             bodyView.BackgroundColor = CSS_Color.BackgroundColor;
 
             //var contentView = new FrameLayout()
@@ -181,59 +184,59 @@
 
 #if DEBUG
 
-            //List<string> vs = new List<string>() {
-            //            "1","2","3","4","5","6","7","8","9","10","11","12","13","14"
-            //        };
-            //tempEchartOption.InitXdataText(vs);
-            //tempEchartOption.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");
-            //tempEchartOption.yTitle = "娓╁害 (掳)";
-            //tempEchartOption.xTitle = "";
-            //var opString = tempEchartOption.InitOption();
-            //tempEchartsView.ShowWithOption(opString);
+            List<string> vs = new List<string>() {
+                        "1","2","3","4","5","6","7","8","9","10","11","12","13","14"
+                    };
+            tempEchartOption.InitXdataText(vs);
+            tempEchartOption.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");
+            tempEchartOption.yTitle = "娓╁害 (掳)";
+            tempEchartOption.xTitle = "";
+            var opString = tempEchartOption.InitOption();
+            tempEchartsView.ShowWithOption(opString);
 
 
 
 
-            //List<string> vs2 = new List<string>() {
-            //            "1","2","3","4","5","6","7","8","9","10","11","12","13","14"
-            //        };
-            //humiEchartsOption.InitXdataText(vs2);
-            //humiEchartsOption.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");
-            //humiEchartsOption.yTitle = "婀垮害 (%)";
-            //humiEchartsOption.xTitle = "";
-            //var opString2 = humiEchartsOption.InitOption();
+            List<string> vs2 = new List<string>() {
+                        "1","2","3","4","5","6","7","8","9","10","11","12","13","14"
+                    };
+            humiEchartsOption.InitXdataText(vs2);
+            humiEchartsOption.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");
+            humiEchartsOption.yTitle = "婀垮害 (%)";
+            humiEchartsOption.xTitle = "";
+            var opString2 = humiEchartsOption.InitOption();
 
-            //humiEchartsView.ShowWithOption(opString2);
+            humiEchartsView.ShowWithOption(opString2);
 
 #endif
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubPage.cs
index 6669399..deace59 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstSubPage.cs
@@ -174,7 +174,12 @@
                 Text = function.GetAttrState(AcstSub_AttrEnum.room_humidity.ToString(),"---"),
                 TextAlignment = TextAlignment.TopRight,
             };
+
+#if __IOS__
+            btnHumiValues.Width = btnTempValues.GetTextWidth() + Application.GetRealWidth(10);
+#else
             btnHumiValues.Width = btnTempValues.GetTextWidth();
+#endif
             btnHumiValues.Gravity = Gravity.CenterHorizontal;
             humiValuesView.AddChidren(btnHumiValues);
             var btnHumiValuesUint = new Button()
@@ -226,6 +231,8 @@
             contentView.AddChidren(btnSetTempValues);
 #if __IOS__
             bodyView.btnSetTempValues.Width = bodyView.btnSetTempValues.GetTextWidth() + Application.GetRealWidth(10);
+#else
+            bodyView.btnSetTempValues.Width = bodyView.btnSetTempValues.GetTextWidth() + Application.GetRealWidth(5);
 #endif
 
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Acst/InverterJinmaoHistroyPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Acst/InverterJinmaoHistroyPage.cs
new file mode 100644
index 0000000..504de37
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Acst/InverterJinmaoHistroyPage.cs
@@ -0,0 +1,1561 @@
+锘�
+
+using 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 InverterJinmaoHistroyPage : FrameLayout
+    {
+        InverterJinmaoHistroyPage bodyView;
+        Function function;
+        FrameLayout infoView1;
+        EchartsOption_Histogram echartOption1;
+        MyEchartsViewOn infoView1_EchartsView;
+        Button infoView1_Date_Day;
+        Button infoView1_Date_Month;
+        Button infoView1_Date_Year;
+        Button infoView1_DateInfo_PreClickButton;
+        Button infoView1_DateInfo_DateTextButton;
+        Button infoView1_DateInfo_NextClickButton;
+        Button infoView1_DateInfo_NextIconButton;
+        Button infoView1_DateInfo_PreIconButton;
+        QueryType queryType1 = QueryType.day_hour;
+        int queryTime_Day1 = DateTime.Now.Day;
+        int queryTime_Month1 = DateTime.Now.Month;
+        int queryTime_Year1 = DateTime.Now.Year;
+        string queryTimeString1 = DateTime.Now.ToString("yyyy/MM/dd");
+
+
+        FrameLayout infoView2;
+        MyEchartsViewOn infoView2_EchartsView;
+        EchartsOption_Histogram echartOption2;
+        Button infoView2_Date_Day;
+        Button infoView2_Date_Month;
+        Button infoView2_Date_Year;
+        Button infoView2_DateInfo_PreClickButton;
+        Button infoView2_DateInfo_DateTextButton;
+        Button infoView2_DateInfo_NextClickButton;
+        Button infoView2_DateInfo_NextIconButton;
+        Button infoView2_DateInfo_PreIconButton;
+        QueryType queryType2 = QueryType.day_hour;
+        int queryTime_Day2 = DateTime.Now.Day;
+        int queryTime_Month2 = DateTime.Now.Month;
+        int queryTime_Year2 = DateTime.Now.Year;
+        string queryTimeString2 = DateTime.Now.ToString("yyyy/MM/dd");
+
+
+        public InverterJinmaoHistroyPage(Function deviceFunction)
+        {
+            bodyView = this;
+            function = deviceFunction;
+            BackgroundColor = CSS_Color.BackgroundColor;
+        }
+
+        public void LoadPage()
+        {
+            var topView = new TopViewDiv(bodyView, "鑳芥簮鍒嗘瀽");
+            topView.maginY = 10;
+            topView.LoadTopView();
+
+            var contentView = new VerticalScrolViewLayout()
+            {
+                Y = Application.GetRealHeight(74 + 16),
+                Height = Application.GetRealHeight(Application.DesignHeight - 74),
+            };
+            bodyView.AddChidren(contentView);
+
+            #region 鍙戠數閲�
+            infoView1 = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealWidth(382),
+                Gravity = Gravity.CenterHorizontal,
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            contentView.AddChidren(infoView1);
+
+            #region 鏃堕棿鏉′欢閫夋嫨
+            var infoView1_DateView = new HorizontalScrolViewLayout()
+            {
+                Width = Application.GetRealWidth(343 - 34),
+                Height = Application.GetRealWidth(26),
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(17),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+                ScrollEnabled = false,
+            };
+            infoView1.AddChidren(infoView1_DateView);
+
+            infoView1_Date_Day = new Button()
+            {
+                Width = Application.GetRealWidth(103),
+                Height = Application.GetRealWidth(26),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = CSS_Color.BackgroundColor,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                Text = "鏃�",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                IsSelected = true,
+            };
+            infoView1_DateView.AddChidren(infoView1_Date_Day);
+
+
+            infoView1_Date_Month = new Button()
+            {
+                Width = Application.GetRealWidth(103),
+                Height = Application.GetRealWidth(26),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = CSS_Color.BackgroundColor,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                Text = "鏈�",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                IsSelected = false,
+            };
+            infoView1_DateView.AddChidren(infoView1_Date_Month);
+
+
+            infoView1_Date_Year = new Button()
+            {
+                Width = Application.GetRealWidth(103),
+                Height = Application.GetRealWidth(26),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = CSS_Color.BackgroundColor,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                Text = "骞�",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                IsSelected = false,
+            };
+            infoView1_DateView.AddChidren(infoView1_Date_Year);
+
+            var infoView1_DateInfoView = new FrameLayout()
+            {
+                Y = Application.GetRealWidth(43),
+                Height = Application.GetRealWidth(55),
+            };
+            infoView1.AddChidren(infoView1_DateInfoView);
+
+            infoView1_DateInfo_PreIconButton = new Button()
+            {
+                X = Application.GetRealWidth(18),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetRealWidth(6),
+                Height = Application.GetRealWidth(10),
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/PreIcon.png",
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_PreIconButton);
+
+            infoView1_DateInfo_PreClickButton = new Button()
+            {
+                Width = Application.GetRealWidth(32 + 6),
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_PreClickButton);
+
+            infoView1_DateInfo_DateTextButton = new Button()
+            {
+                Gravity = Gravity.Center,
+                Width = Application.GetRealWidth(200),
+                TextAlignment = TextAlignment.Center,
+                Text = DateTime.Now.ToString("yyyy-MM-dd"),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                IsBold = true,
+                TextSize = 16,
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_DateTextButton);
+
+
+            infoView1_DateInfo_NextIconButton = new Button()
+            {
+                X = Application.GetRealWidth(343 - 18 - 6),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetRealWidth(6),
+                Height = Application.GetRealWidth(10),
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/NextIcon.png",
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_NextIconButton);
+
+            infoView1_DateInfo_NextClickButton = new Button()
+            {
+                X = Application.GetRealWidth(343 - 18 - 6 - 32),
+                Width = Application.GetRealWidth(32 + 6),
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_NextClickButton);
+
+            #endregion
+
+            #region 鏁版嵁鍥捐〃
+            infoView1_EchartsView = new MyEchartsViewOn()
+            {
+                Y = Application.GetRealWidth(101),
+                Height = Application.GetRealWidth(246),
+            };
+            infoView1.AddChidren(infoView1_EchartsView);
+
+            echartOption1 = new EchartsOption_Histogram();
+            echartOption1.xTitle = "鏃堕棿";
+            echartOption1.yTitle = "鐢甸噺锛坘wh锛�";
+            //echartOption.InitXdataText(new List<string>()
+            //{
+            //    "21","22","23","24","25","26","26","27","28","29",
+            //    "21","22","23","24","25","26","26","27","28","29",
+            //    "21","22","23","24"
+            //});
+            //echartOption.InitYdataText(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"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "15", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "16", fieldValue= "22"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "17", fieldValue= "11"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "18", fieldValue= "21"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "19", fieldValue= "41"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "20", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "21", fieldValue= "31"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "22", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "23", fieldValue= "11"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "24", fieldValue= "21"  },
+            //});
+            //var ddd = echartOption.InitOption();
+            //infoView1_EchartsView.ShowWithOption(ddd);
+
+            infoView1.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(35),
+                Y = Application.GetRealWidth(340),
+                Text = "鍙戠數閲�",
+                TextSize = 14,
+                TextAlignment = TextAlignment.Center,
+                TextColor = 0xFFC0C7D4
+            });
+
+            #endregion
+
+            #endregion
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(16)
+            });
+
+            #region 鐢ㄧ數閲�
+            infoView2 = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealWidth(382),
+                Y = Application.GetRealHeight(16) + infoView1.Bottom,
+                Gravity = Gravity.CenterHorizontal,
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            contentView.AddChidren(infoView2);
+
+            #region 鏃堕棿鏉′欢閫夋嫨
+            var infoView2_DateView = new HorizontalScrolViewLayout()
+            {
+                Width = Application.GetRealWidth(343 - 34),
+                Height = Application.GetRealWidth(26),
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(17),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+                ScrollEnabled = false,
+            };
+            infoView2.AddChidren(infoView2_DateView);
+
+            infoView2_Date_Day = new Button()
+            {
+                Width = Application.GetRealWidth(103),
+                Height = Application.GetRealWidth(26),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = CSS_Color.BackgroundColor,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                Text = "鏃�",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                IsSelected = true,
+            };
+            infoView2_DateView.AddChidren(infoView2_Date_Day);
+
+
+            infoView2_Date_Month = new Button()
+            {
+                Width = Application.GetRealWidth(103),
+                Height = Application.GetRealWidth(26),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = CSS_Color.BackgroundColor,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                Text = "鏈�",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                IsSelected = false,
+            };
+            infoView2_DateView.AddChidren(infoView2_Date_Month);
+
+
+            infoView2_Date_Year = new Button()
+            {
+                Width = Application.GetRealWidth(103),
+                Height = Application.GetRealWidth(26),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = CSS_Color.BackgroundColor,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                Text = "骞�",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                IsSelected = false,
+            };
+            infoView2_DateView.AddChidren(infoView2_Date_Year);
+
+            var infoView2_DateInfoView = new FrameLayout()
+            {
+                Y = Application.GetRealWidth(43),
+                Height = Application.GetRealWidth(55),
+            };
+            infoView2.AddChidren(infoView2_DateInfoView);
+
+            infoView2_DateInfo_PreIconButton = new Button()
+            {
+                X = Application.GetRealWidth(18),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetRealWidth(6),
+                Height = Application.GetRealWidth(10),
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/PreIcon.png",
+            };
+            infoView2_DateInfoView.AddChidren(infoView2_DateInfo_PreIconButton);
+
+            infoView2_DateInfo_PreClickButton = new Button()
+            {
+                Width = Application.GetRealWidth(32 + 6),
+            };
+            infoView2_DateInfoView.AddChidren(infoView2_DateInfo_PreClickButton);
+
+            infoView2_DateInfo_DateTextButton = new Button()
+            {
+                Gravity = Gravity.Center,
+                Width = Application.GetRealWidth(200),
+                TextAlignment = TextAlignment.Center,
+                Text = DateTime.Now.ToString("yyyy-MM-dd"),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                IsBold = true,
+                TextSize = 16,
+            };
+            infoView2_DateInfoView.AddChidren(infoView2_DateInfo_DateTextButton);
+
+
+            infoView2_DateInfo_NextIconButton = new Button()
+            {
+                X = Application.GetRealWidth(343 - 18 - 6),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetRealWidth(6),
+                Height = Application.GetRealWidth(10),
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/NextIcon.png",
+            };
+            infoView2_DateInfoView.AddChidren(infoView2_DateInfo_NextIconButton);
+
+            infoView2_DateInfo_NextClickButton = new Button()
+            {
+                X = Application.GetRealWidth(343 - 18 - 6 - 32),
+                Width = Application.GetRealWidth(32 + 6),
+            };
+            infoView2_DateInfoView.AddChidren(infoView2_DateInfo_NextClickButton);
+
+            #endregion
+
+            #region 鏁版嵁鍥捐〃
+            infoView2_EchartsView = new MyEchartsViewOn()
+            {
+                Y = Application.GetRealWidth(101),
+                Height = Application.GetRealWidth(246),
+            };
+            infoView2.AddChidren(infoView2_EchartsView);
+
+            echartOption2 = new EchartsOption_Histogram();
+            echartOption2.xTitle = "鏃堕棿";
+            echartOption2.yTitle = "鐢甸噺锛坘wh锛�";
+            //echartOption2.InitXdataText(new List<string>()
+            //{
+            //    "21","22","23","24","25","26","26","27","28","29",
+            //    "21","22","23","24","25","26","26","27","28","29",
+            //    "21","22","23","24"
+            //});
+            //echartOption2.InitYdataText(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"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "15", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "16", fieldValue= "22"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "17", fieldValue= "11"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "18", fieldValue= "21"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "19", fieldValue= "41"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "20", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "21", fieldValue= "31"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "22", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "23", fieldValue= "11"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "24", fieldValue= "21"  },
+            //});
+            //infoView2_EchartsView.ShowWithOption(echartOption2.InitOption());
+
+            infoView2.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(35),
+                Y = Application.GetRealWidth(340),
+                Text = "鐢ㄧ數閲�",
+                TextSize = 14,
+                TextAlignment = TextAlignment.Center,
+                TextColor = 0xFFC0C7D4
+            });
+
+            #endregion
+
+
+            #endregion
+
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(26)
+            });
+
+            initQueryButton();
+
+            getPvElectricityHistory();
+            getLoadElectricityHistory();
+        }
+
+
+
+        /// <summary>
+        /// 璇诲彇鍙戠數閲忓巻鍙叉暟鎹�
+        /// hour=杩�24灏忔椂銆乨ay_hour =鏌愭棩24灏忔椂銆亀eek=杩戜竴鍛ㄣ�乵onth = 杩戜竴鏈堛�乧ustom_month=鏌愬勾鏌愭湀 y/M銆乧ustom_year=鏌愬勾 y
+        /// </summary>
+        private void getPvElectricityHistory()
+        {
+            if (MainPage.NoLoginMode)
+            {
+                return;
+            }
+
+            var loadPage = new Loading()
+            {
+                LodingBackgroundColor = 0x88888888,
+                BackgroundColor = 0x00FFFFFF,
+            };
+            infoView1.AddChidren(loadPage);
+
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Start();
+                    });
+
+                    switch (queryType1)
+                    {
+                        case QueryType.day_hour:
+                            queryTimeString1 = queryTime_Year1.ToString() + "/" + queryTime_Month1 + "/" + queryTime_Day1;
+                            break;
+                        case QueryType.custom_month:
+                            queryTimeString1 = queryTime_Year1.ToString() + "/" + queryTime_Month1;
+                            break;
+                        case QueryType.custom_year:
+                            queryTimeString1 = queryTime_Year1.ToString();
+                            break;
+                    }
+
+                    var revertObj = new HttpServerRequest().GetSensorHistory(queryType1.ToString(), function.deviceId, InverterJinmao_AttrEnum.pv_electricity.ToString(), queryTimeString1);
+                    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>();
+                            foreach (var data in revertData)
+                            {
+                                vs.Add(data.fieldName);
+                            }
+                            echartOption1.InitXdataText(vs);
+                            echartOption1.InitYdataText(revertData);
+
+                            Application.RunOnMainThread(() =>
+                            {
+                                infoView1_EchartsView.ShowWithOption(echartOption1.InitOption());
+                            });
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log($"history error : {ex.Message}");
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Hide();
+                    });
+                }
+            })
+            { IsBackground = true }.Start();
+
+        }
+        /// <summary>
+        /// 鑾峰彇鐢ㄧ數閲忓巻鍙茶褰�
+        /// </summary>
+        private void getLoadElectricityHistory()
+        {
+            if (MainPage.NoLoginMode)
+            {
+                return;
+            }
+            var loadPage = new Loading()
+            {
+                LodingBackgroundColor = 0x88888888,
+                BackgroundColor = 0x00FFFFFF,
+            };
+            infoView2.AddChidren(loadPage);
+
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Start();
+                    });
+                    switch (queryType2)
+                    {
+                        case QueryType.day_hour:
+                            queryTimeString2 = queryTime_Year2.ToString() + "/" + queryTime_Month2 + "/" + queryTime_Day2;
+                            break;
+                        case QueryType.custom_month:
+                            queryTimeString2 = queryTime_Year2.ToString() + "/" + queryTime_Month2;
+                            break;
+                        case QueryType.custom_year:
+                            queryTimeString2 = queryTime_Year2.ToString();
+                            break;
+                    }
+
+                    var revertObj = new HttpServerRequest().GetSensorHistory(queryType2.ToString(), function.deviceId, InverterJinmao_AttrEnum.load_electricity.ToString(), queryTimeString2);
+                    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>();
+                            foreach (var data in revertData)
+                            {
+                                vs.Add(data.fieldName);
+                            }
+                            echartOption2.InitXdataText(vs);
+                            echartOption2.InitYdataText(revertData);
+
+                            Application.RunOnMainThread(() =>
+                            {
+                                var ddd = echartOption2.InitOption();
+                                infoView2_EchartsView.ShowWithOption(echartOption2.InitOption());
+                            });
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log($"history 2 error : {ex.Message}");
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Hide();
+                    });
+                }
+            })
+            { IsBackground = true }.Start();
+
+        }
+
+        private void initQueryButton()
+        {
+            infoView1_DateInfo_DateTextButton.MouseUpEventHandler = (sender, e) =>
+            {
+                SetTempQureyDateDialog();
+            };
+            infoView1_DateInfo_PreClickButton.MouseUpEventHandler = (sender, e) =>
+            {
+                var pvElecQueryDate = new DateTime(queryTime_Year1, queryTime_Month1, queryTime_Day1);
+                if (queryType1 == QueryType.day_hour)
+                {
+                    if (pvElecQueryDate.Year <= 2023 && pvElecQueryDate.Month == 1 && pvElecQueryDate.Day == 1)
+                    {
+                        return;
+                    }
+                    pvElecQueryDate = pvElecQueryDate.AddDays(-1);
+                    infoView1_DateInfo_DateTextButton.Text = pvElecQueryDate.ToString("yyyy-MM-dd");
+                }
+                else if (queryType1 == QueryType.custom_month)
+                {
+                    if (pvElecQueryDate.Year <= 2023 && pvElecQueryDate.Month == 1)
+                    {
+                        return;
+                    }
+                    pvElecQueryDate = pvElecQueryDate.AddMonths(-1);
+                    queryTime_Day1 = pvElecQueryDate.Day;
+                    infoView1_DateInfo_DateTextButton.Text = pvElecQueryDate.ToString("yyyy-MM");
+                }
+                else if (queryType1 == QueryType.custom_year)
+                {
+                    if (pvElecQueryDate.Year <= 2023)
+                    {
+                        return;
+                    }
+                    pvElecQueryDate = pvElecQueryDate.AddYears(-1);
+                    infoView1_DateInfo_DateTextButton.Text = pvElecQueryDate.ToString("yyyy");
+                }
+                queryTime_Year1 = pvElecQueryDate.Year;
+                queryTime_Month1 = pvElecQueryDate.Month;
+                queryTime_Day1 = pvElecQueryDate.Day;
+                getPvElectricityHistory();
+            };
+            infoView1_DateInfo_NextClickButton.MouseUpEventHandler = (sender, e) =>
+            {
+                var pvElecQueryDate = new DateTime(queryTime_Year1, queryTime_Month1, queryTime_Day1);
+                if (queryType1 == QueryType.day_hour)
+                {
+                    if (pvElecQueryDate.Year == DateTime.Now.Year && pvElecQueryDate.Month == DateTime.Now.Month && pvElecQueryDate.Day == DateTime.Now.Day)
+                    {
+                        return;
+                    }
+                    pvElecQueryDate = pvElecQueryDate.AddDays(1);
+                    infoView1_DateInfo_DateTextButton.Text = pvElecQueryDate.ToString("yyyy-MM-dd");
+                }
+                else if (queryType1 == QueryType.custom_month)
+                {
+                    if (pvElecQueryDate.Year == DateTime.Now.Year && pvElecQueryDate.Month == DateTime.Now.Month)
+                    {
+                        return;
+                    }
+                    pvElecQueryDate = pvElecQueryDate.AddMonths(1);
+                    queryTime_Day1 = pvElecQueryDate.Day;
+                    infoView1_DateInfo_DateTextButton.Text = pvElecQueryDate.ToString("yyyy-MM");
+                }
+                else if (queryType1 == QueryType.custom_year)
+                {
+                    if (pvElecQueryDate.Year >= DateTime.Now.Year)
+                    {
+                        return;
+                    }
+                    pvElecQueryDate = pvElecQueryDate.AddYears(1);
+                    infoView1_DateInfo_DateTextButton.Text = pvElecQueryDate.ToString("yyyy");
+                }
+                queryTime_Year1 = pvElecQueryDate.Year;
+                queryTime_Month1 = pvElecQueryDate.Month;
+                queryTime_Day1 = pvElecQueryDate.Day;
+                getPvElectricityHistory();
+            };
+
+            infoView1_Date_Day.MouseUpEventHandler = (sender, e) =>
+            {
+                if (infoView1_Date_Day.IsSelected)
+                {
+                    return;
+                }
+                infoView1_Date_Day.IsSelected = true;
+                infoView1_Date_Month.IsSelected = false;
+                infoView1_Date_Year.IsSelected = false;
+                queryType1 = QueryType.day_hour;
+                if (DateTime.Now.Date < new DateTime(queryTime_Year1, queryTime_Month1, queryTime_Day1))
+                {
+                    queryTime_Year1 = DateTime.Now.Year;
+                    queryTime_Month1 = DateTime.Now.Month;
+                    queryTime_Day1 = DateTime.Now.Day;
+                }
+                infoView1_DateInfo_DateTextButton.Text = new DateTime(queryTime_Year1, queryTime_Month1, queryTime_Day1).ToString("yyyy-MM-dd");
+                getPvElectricityHistory();
+            };
+            infoView1_Date_Month.MouseUpEventHandler = (sender, e) =>
+            {
+                if (infoView1_Date_Month.IsSelected)
+                {
+                    return;
+                }
+                infoView1_Date_Day.IsSelected = false;
+                infoView1_Date_Month.IsSelected = true;
+                infoView1_Date_Year.IsSelected = false;
+                queryType1 = QueryType.custom_month;
+                if (DateTime.Now.Date < new DateTime(queryTime_Year1, queryTime_Month1, queryTime_Day1))
+                {
+                    queryTime_Year1 = DateTime.Now.Year;
+                    queryTime_Month1 = DateTime.Now.Month;
+                }
+                infoView1_DateInfo_DateTextButton.Text = new DateTime(queryTime_Year1, queryTime_Month1, queryTime_Day1).ToString("yyyy-MM");
+                getPvElectricityHistory();
+            };
+            infoView1_Date_Year.MouseUpEventHandler = (sender, e) =>
+            {
+                if (infoView1_Date_Year.IsSelected)
+                {
+                    return;
+                }
+                infoView1_Date_Day.IsSelected = false;
+                infoView1_Date_Month.IsSelected = false;
+                infoView1_Date_Year.IsSelected = true;
+                queryType1 = QueryType.custom_year;
+                infoView1_DateInfo_DateTextButton.Text = queryTime_Year1.ToString();
+                getPvElectricityHistory();
+            };
+            //-----------鐢ㄦ按
+            infoView2_DateInfo_DateTextButton.MouseUpEventHandler = (sender, e) =>
+            {
+                SetWaterQureyDateDialog();
+            };
+            infoView2_DateInfo_PreClickButton.MouseUpEventHandler = (sender, e) =>
+            {
+                var waterQueryDate = new DateTime(queryTime_Year2, queryTime_Month2, queryTime_Day2);
+                if (queryType2 == QueryType.day_hour)
+                {
+                    if (waterQueryDate.Year <= 2023 && waterQueryDate.Month == 1 && waterQueryDate.Day == 1)
+                    {
+                        return;
+                    }
+                    waterQueryDate = waterQueryDate.AddDays(-1);
+                    infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy-MM-dd");
+                }
+                else if (queryType2 == QueryType.custom_month)
+                {
+                    if (waterQueryDate.Year <= 2023 && waterQueryDate.Month == 1)
+                    {
+                        return;
+                    }
+                    waterQueryDate = waterQueryDate.AddMonths(-1);
+                    queryTime_Day2 = waterQueryDate.Day;
+                    infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy-MM");
+                }
+                else if (queryType2 == QueryType.custom_year)
+                {
+                    if (waterQueryDate.Year <= 2023)
+                    {
+                        return;
+                    }
+                    waterQueryDate = waterQueryDate.AddYears(-1);
+                    infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy");
+                }
+                queryTime_Year2 = waterQueryDate.Year;
+                queryTime_Month2 = waterQueryDate.Month;
+                queryTime_Day2 = waterQueryDate.Day;
+                getLoadElectricityHistory();
+            };
+            infoView2_DateInfo_NextClickButton.MouseUpEventHandler = (sender, e) =>
+            {
+                var waterQueryDate = new DateTime(queryTime_Year2, queryTime_Month2, queryTime_Day2);
+                if (queryType2 == QueryType.day_hour)
+                {
+                    if (waterQueryDate.Year == DateTime.Now.Year && waterQueryDate.Month == DateTime.Now.Month && waterQueryDate.Day == DateTime.Now.Day)
+                    {
+                        return;
+                    }
+                    waterQueryDate = waterQueryDate.AddDays(1);
+                    infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy-MM-dd");
+                }
+                else if (queryType2 == QueryType.custom_month)
+                {
+                    if (waterQueryDate.Year == DateTime.Now.Year && waterQueryDate.Month == DateTime.Now.Month)
+                    {
+                        return;
+                    }
+                    waterQueryDate = waterQueryDate.AddMonths(1);
+                    queryTime_Day2 = waterQueryDate.Day;
+                    infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy-MM");
+                }
+                else if (queryType2 == QueryType.custom_year)
+                {
+                    if (waterQueryDate.Year >= DateTime.Now.Year)
+                    {
+                        return;
+                    }
+                    waterQueryDate = waterQueryDate.AddYears(1);
+                    infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy");
+                }
+                queryTime_Year2 = waterQueryDate.Year;
+                queryTime_Month2 = waterQueryDate.Month;
+                queryTime_Day2 = waterQueryDate.Day;
+                getLoadElectricityHistory();
+            };
+            infoView2_Date_Day.MouseDownEventHandler = (sender, e) =>
+            {
+                if (infoView2_Date_Day.IsSelected)
+                {
+                    return;
+                }
+                infoView2_Date_Day.IsSelected = true;
+                infoView2_Date_Month.IsSelected = false;
+                infoView2_Date_Year.IsSelected = false;
+                queryType2 = QueryType.day_hour;
+                if (DateTime.Now.Date < new DateTime(queryTime_Year2, queryTime_Month2, queryTime_Day2))
+                {
+                    queryTime_Year2 = DateTime.Now.Year;
+                    queryTime_Month2 = DateTime.Now.Month;
+                    queryTime_Day2 = DateTime.Now.Day;
+                }
+                infoView2_DateInfo_DateTextButton.Text = new DateTime(queryTime_Year2, queryTime_Month2, queryTime_Day2).ToString("yyyy-MM-dd");
+                getLoadElectricityHistory();
+            };
+            infoView2_Date_Month.MouseDownEventHandler = (sender, e) =>
+            {
+                if (infoView2_Date_Month.IsSelected)
+                {
+                    return;
+                }
+                infoView2_Date_Day.IsSelected = false;
+                infoView2_Date_Month.IsSelected = true;
+                infoView2_Date_Year.IsSelected = false;
+                queryType2 = QueryType.custom_month;
+                if (DateTime.Now.Date < new DateTime(queryTime_Year2, queryTime_Month2, queryTime_Day2))
+                {
+                    queryTime_Year2 = DateTime.Now.Year;
+                    queryTime_Month2 = DateTime.Now.Month;
+                }
+                infoView2_DateInfo_DateTextButton.Text = new DateTime(queryTime_Year2, queryTime_Month2, queryTime_Day2).ToString("yyyy-MM");
+                getLoadElectricityHistory();
+            };
+            infoView2_Date_Year.MouseDownEventHandler = (sender, e) =>
+            {
+                if (infoView2_Date_Year.IsSelected)
+                {
+                    return;
+                }
+                infoView2_Date_Day.IsSelected = false;
+                infoView2_Date_Month.IsSelected = false;
+                infoView2_Date_Year.IsSelected = true;
+                queryType2 = QueryType.custom_year;
+                infoView2_DateInfo_DateTextButton.Text = queryTime_Year2.ToString();
+                getLoadElectricityHistory();
+            };
+
+        }
+
+        /// <summary>
+        /// </summary>
+        public void SetTempQureyDateDialog()
+        {
+            var pickerItems_Year = new List<string>();
+            List<string> pickerItems_Month = null;
+            List<string> pickerItems_Day = null;
+
+            int item1 = queryTime_Year1;
+            int item2 = queryTime_Month1;
+            int item3 = queryTime_Day1;
+
+            pickerItems_Year.Add("2023");
+            while (DateTime.Now.Year > 2022 + pickerItems_Year.Count)
+            {
+                pickerItems_Year.Add((2023 + pickerItems_Year.Count).ToString());
+            }
+
+            if (queryType1 == QueryType.custom_month || queryType1 == QueryType.day_hour)
+            {
+                pickerItems_Month = new List<string>();
+                if (queryTime_Year1 == DateTime.Now.Year)
+                {
+                    int addMonth = 0;
+                    while (DateTime.Now.Month > addMonth)
+                    {
+                        addMonth++;
+                        pickerItems_Month.Add(addMonth.ToString());
+                    }
+                }
+                else
+                {
+                    for (var i = 1; i < 13; i++)
+                    {
+                        pickerItems_Month.Add(i.ToString());
+                    }
+                }
+                if (queryType1 == QueryType.day_hour)
+                {
+                    pickerItems_Day = new List<string>();
+                    if (queryTime_Month1 == DateTime.Now.Month)
+                    {
+                        int addDay = 0;
+                        while (DateTime.Now.Day > addDay)
+                        {
+                            addDay++;
+                            pickerItems_Day.Add(addDay.ToString());
+                        }
+                    }
+                    else
+                    {
+                        for (var i = 1; i <= DateTime.DaysInMonth(queryTime_Year1, queryTime_Month1); i++)
+                        {
+                            pickerItems_Day.Add(i.ToString());
+                        }
+                    }
+                }
+            }
+
+            Dialog dialog = new Dialog();
+
+            var pView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(pView);
+
+            var optionBaseView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(456 - 60),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(260),
+                AnimateSpeed = 0.3f,
+                Animate = Animate.DownToUp,
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            pView.AddChidren(optionBaseView);
+
+            var topView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(40),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            optionBaseView.AddChidren(topView);
+            topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
+
+            var btnCancel = new Button()
+            {
+                X = Application.GetRealWidth(21),
+                Width = Application.GetRealWidth(100),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Cancel,
+            };
+            topView.AddChidren(btnCancel);
+
+            var btnConfrim = new Button()
+            {
+                X = Application.GetRealWidth(160),
+                Width = Application.GetRealWidth(160),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Confirm,
+            };
+            topView.AddChidren(btnConfrim);
+
+            var btnToday = new Button()
+            {
+                X = Application.GetRealWidth(160 - 32) - btnConfrim.GetTextWidth(),
+                Width = Application.GetRealWidth(160),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                Visible = false,
+                Enable = false,
+                Text = "浠婃棩",
+            };
+            topView.AddChidren(btnToday);
+
+            UIPickerView uIPickerView = new UIPickerView()
+            {
+                Y = Application.GetRealHeight(40),
+                Height = Application.GetRealHeight(210),
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            optionBaseView.AddChidren(uIPickerView);
+            uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+            uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(queryTime_Year1.ToString()),
+                pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(queryTime_Month1.ToString()),
+                pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(queryTime_Day1.ToString()));
+
+            dialog.Show();
+
+            pView.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+            };
+
+            btnCancel.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+            };
+            uIPickerView.OnSelectChangeEvent = (int1, int2, int3) =>
+            {
+                try
+                {
+                    if (int1 < 0)
+                    {
+                        int1 = 1;
+                    }
+                    if (pickerItems_Year[int1] != item1.ToString())
+                    {
+                        int.TryParse(pickerItems_Year[int1], out item1);
+                        if (queryType1 == QueryType.custom_month || queryType1 == QueryType.day_hour)
+                        {
+                            pickerItems_Month = new List<string>();
+                            if (item1 == DateTime.Now.Year)
+                            {
+                                int addMonth = 0;
+                                while (DateTime.Now.Month > addMonth)
+                                {
+                                    addMonth++;
+                                    pickerItems_Month.Add(addMonth.ToString());
+                                }
+                            }
+                            else
+                            {
+                                for (var i = 1; i < 13; i++)
+                                {
+                                    pickerItems_Month.Add(i.ToString());
+                                }
+                            }
+                            if (queryType1 == QueryType.day_hour)
+                            {
+                                pickerItems_Day = new List<string>();
+                                if (item1 == DateTime.Now.Year && item2 == DateTime.Now.Month)
+                                {
+                                    int addDay = 0;
+                                    while (DateTime.Now.Day > addDay)
+                                    {
+                                        addDay++;
+                                        pickerItems_Day.Add(addDay.ToString());
+                                    }
+                                }
+                                else
+                                {
+                                    for (var i = 1; i <= DateTime.DaysInMonth(item1, item2); i++)
+                                    {
+                                        pickerItems_Day.Add(i.ToString());
+                                    }
+                                }
+                            }
+                        }
+                        uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                        uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(item1.ToString()),
+                            pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(item2.ToString()),
+                            pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(item3.ToString()));
+
+                    }
+                    if (pickerItems_Month != null)
+                    {
+                        if (int2 >= pickerItems_Month.Count || int2 < 0)
+                        {
+                            int2 = 0;
+                        }
+                        if (pickerItems_Month[int2] != item2.ToString())
+                        {
+                            int.TryParse(pickerItems_Month[int2], out item2);
+                            if (queryType1 == QueryType.day_hour)
+                            {
+                                pickerItems_Day = new List<string>();
+                                if (item1 == DateTime.Now.Year && item2 == DateTime.Now.Month)
+                                {
+                                    int addDay = 0;
+                                    while (DateTime.Now.Day > addDay)
+                                    {
+                                        addDay++;
+                                        pickerItems_Day.Add(addDay.ToString());
+                                    }
+                                }
+                                else
+                                {
+                                    for (var i = 1; i <= DateTime.DaysInMonth(item1, item2); i++)
+                                    {
+                                        pickerItems_Day.Add(i.ToString());
+                                    }
+                                }
+                            }
+                            try
+                            {
+                                uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                                uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(item1.ToString()),
+                                    pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(item2.ToString()),
+                                    pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(item3.ToString()));
+                            }
+                            catch (Exception ex)
+                            {
+                                MainPage.Log("Error", $"閲戣寕鍘嗗彶鏁版嵁鎺т欢寮傚父:{ex.Message}");
+                            }
+                        }
+                    }
+                    if (pickerItems_Day != null)
+                    {
+                        if (int3 >= pickerItems_Day.Count || int3 < 0)
+                        {
+                            int3 = 0;
+                        }
+                        if (pickerItems_Day[int3] != item3.ToString())
+                        {
+                            int.TryParse(pickerItems_Day[int3], out item3);
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鍣ㄦ棩鏈熼�夋嫨寮傚父锛歿ex.StackTrace}");
+                }
+            };
+            btnConfrim.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+                queryTime_Year1 = item1;
+                infoView1_DateInfo_DateTextButton.Text = queryTime_Year1.ToString();
+                if (queryType1 == QueryType.custom_month || queryType1 == QueryType.day_hour)
+                {
+                    if (item2 != queryTime_Month1)
+                    {
+                        queryTime_Month1 = item2;
+                    }
+                    infoView1_DateInfo_DateTextButton.Text = new DateTime(queryTime_Year1, queryTime_Month1, 1).ToString("yyyy-MM");
+                    if (queryType1 == QueryType.day_hour)
+                    {
+                        if (item3 != queryTime_Day1)
+                        {
+                            queryTime_Day1 = item3;
+                        }
+                        infoView1_DateInfo_DateTextButton.Text = new DateTime(queryTime_Year1, queryTime_Month1, queryTime_Day1).ToString("yyyy-MM-dd");
+                    }
+                }
+                getPvElectricityHistory();
+            };
+
+
+            if (queryType1 == QueryType.day_hour)
+            {
+                try
+                {
+                    btnToday.Visible = btnToday.Enable = true;
+                    btnToday.MouseUpEventHandler = (sender, e) =>
+                    {
+                        item3 = queryTime_Day1 = DateTime.Now.Day;
+                        item2 = queryTime_Month1 = DateTime.Now.Month;
+                        item1 = queryTime_Year1 = DateTime.Now.Year;
+                        pickerItems_Year = new List<string>();
+                        pickerItems_Year.Add("2023");
+                        while (DateTime.Now.Year > 2022 + pickerItems_Year.Count)
+                        {
+                            pickerItems_Year.Add((2023 + pickerItems_Year.Count).ToString());
+                        }
+
+                        pickerItems_Month = new List<string>();
+                        int addMonth = 0;
+                        while (DateTime.Now.Month > addMonth)
+                        {
+                            addMonth++;
+                            pickerItems_Month.Add(addMonth.ToString());
+                        }
+                        pickerItems_Day = new List<string>();
+                        int addDay = 0;
+                        while(DateTime.Now.Day > addDay)
+                        {
+                            addDay++;
+                            pickerItems_Day.Add(addDay.ToString());
+                        }
+
+                        uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                        uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(queryTime_Year1.ToString()),
+                            pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(queryTime_Month1.ToString()),
+                            pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(queryTime_Day1.ToString()));
+                    };
+                }
+                catch { }
+            }
+        }
+
+        public void SetWaterQureyDateDialog()
+        {
+            var pickerItems_Year = new List<string>();
+            List<string> pickerItems_Month = null;
+            List<string> pickerItems_Day = null;
+
+            int item1 = queryTime_Year2;
+            int item2 = queryTime_Month2;
+            int item3 = queryTime_Day2;
+
+            pickerItems_Year.Add("2023");
+            while (DateTime.Now.Year > 2022 + pickerItems_Year.Count)
+            {
+                pickerItems_Year.Add((2023 + pickerItems_Year.Count).ToString());
+            }
+
+            if (queryType2 == QueryType.custom_month || queryType2 == QueryType.day_hour)
+            {
+                pickerItems_Month = new List<string>();
+                if (queryTime_Year2 == DateTime.Now.Year)
+                {
+                    int addMonth = 0;
+                    while (DateTime.Now.Month > addMonth)
+                    {
+                        addMonth++;
+                        pickerItems_Month.Add(addMonth.ToString());
+                    }
+                }
+                else
+                {
+                    for (var i = 1; i < 13; i++)
+                    {
+                        pickerItems_Month.Add(i.ToString());
+                    }
+                }
+                if (queryType2 == QueryType.day_hour)
+                {
+                    pickerItems_Day = new List<string>();
+                    if (queryTime_Month2 == DateTime.Now.Month)
+                    {
+                        int addDay = 0;
+                        while (DateTime.Now.Day > addDay)
+                        {
+                            addDay++;
+                            pickerItems_Day.Add(addDay.ToString());
+                        }
+                    }
+                    else
+                    {
+                        for (var i = 1; i <= DateTime.DaysInMonth(queryTime_Year2, queryTime_Month2); i++)
+                        {
+                            pickerItems_Day.Add(i.ToString());
+                        }
+                    }
+                }
+            }
+
+            Dialog dialog = new Dialog();
+
+            var pView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(pView);
+
+            var optionBaseView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(456 - 60),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(260),
+                AnimateSpeed = 0.3f,
+                Animate = Animate.DownToUp,
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            pView.AddChidren(optionBaseView);
+
+            var topView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(40),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            optionBaseView.AddChidren(topView);
+            topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
+
+            var btnCancel = new Button()
+            {
+                X = Application.GetRealWidth(21),
+                Width = Application.GetRealWidth(100),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Cancel,
+            };
+            topView.AddChidren(btnCancel);
+
+            var btnConfrim = new Button()
+            {
+                X = Application.GetRealWidth(160),
+                Width = Application.GetRealWidth(160),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Confirm,
+            };
+            topView.AddChidren(btnConfrim);
+
+            UIPickerView uIPickerView = new UIPickerView()
+            {
+                Y = Application.GetRealHeight(40),
+                Height = Application.GetRealHeight(210),
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            optionBaseView.AddChidren(uIPickerView);
+            uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+            uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(queryTime_Year2.ToString()),
+                pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(queryTime_Month2.ToString()),
+                pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(queryTime_Day2.ToString()));
+
+            dialog.Show();
+
+            pView.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+            };
+
+            btnCancel.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+            };
+            uIPickerView.OnSelectChangeEvent = (int1, int2, int3) =>
+            {
+                try
+                {
+                    if (int1 < 0)
+                    {
+                        int1 = 0;
+                    }
+                    if (pickerItems_Year[int1] != item1.ToString())
+                    {
+                        int.TryParse(pickerItems_Year[int1], out item1);
+                        if (queryType2 == QueryType.custom_month || queryType2 == QueryType.day_hour)
+                        {
+                            pickerItems_Month = new List<string>();
+                            if (item1 == DateTime.Now.Year)
+                            {
+                                int addMonth = 0;
+                                while (DateTime.Now.Month > addMonth)
+                                {
+                                    addMonth++;
+                                    pickerItems_Month.Add(addMonth.ToString());
+                                }
+                            }
+                            else
+                            {
+                                for (var i = 1; i < 13; i++)
+                                {
+                                    pickerItems_Month.Add(i.ToString());
+                                }
+                            }
+                            if (queryType2 == QueryType.day_hour)
+                            {
+                                pickerItems_Day = new List<string>();
+                                if (item1 == DateTime.Now.Year && item2 == DateTime.Now.Month)
+                                {
+                                    int addDay = 0;
+                                    while (DateTime.Now.Day > addDay)
+                                    {
+                                        addDay++;
+                                        pickerItems_Day.Add(addDay.ToString());
+                                    }
+                                }
+                                else
+                                {
+                                    for (var i = 1; i <= DateTime.DaysInMonth(item1, item2); i++)
+                                    {
+                                        pickerItems_Day.Add(i.ToString());
+                                    }
+                                }
+                            }
+                        }
+                        uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                        uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(item1.ToString()),
+                            pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(item2.ToString()),
+                            pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(item3.ToString()));
+
+                    }
+                    if (pickerItems_Month != null)
+                    {
+                        if (int2 > pickerItems_Month.Count || int2 < 0)
+                        {
+                            int2 = 0;
+                        }
+                        if (pickerItems_Month[int2] != item2.ToString())
+                        {
+                            int.TryParse(pickerItems_Month[int2], out item2);
+                            if (queryType2 == QueryType.day_hour)
+                            {
+                                pickerItems_Day = new List<string>();
+                                if (item1 == DateTime.Now.Year && item2 == DateTime.Now.Month)
+                                {
+                                    int addDay = 0;
+                                    while (DateTime.Now.Day > addDay)
+                                    {
+                                        addDay++;
+                                        pickerItems_Day.Add(addDay.ToString());
+                                    }
+                                }
+                                else
+                                {
+                                    for (var i = 1; i <= DateTime.DaysInMonth(item1, item2); i++)
+                                    {
+                                        pickerItems_Day.Add(i.ToString());
+                                    }
+                                }
+                            }
+
+                            uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                            uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(item1.ToString()),
+                                pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(item2.ToString()),
+                                pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(item3.ToString()));
+                        }
+                    }
+                    if (pickerItems_Day != null)
+                    {
+                        if (int3 >= pickerItems_Day.Count || int3 < 0)
+                        {
+                            int3 = 0;
+                        }
+                        if (pickerItems_Day[int3] != item3.ToString())
+                        {
+                            int.TryParse(pickerItems_Day[int3], out item3);
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鍏変紡鏃ユ湡2閫夋嫨寮傚父锛歿ex.StackTrace}");
+                }
+            };
+            btnConfrim.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+                queryTime_Year2 = item1;
+                infoView2_DateInfo_DateTextButton.Text = queryTime_Year2.ToString();
+                if (queryType2 == QueryType.custom_month || queryType2 == QueryType.day_hour)
+                {
+                    if (item2 != queryTime_Month2)
+                    {
+                        queryTime_Month2 = item2;
+                    }
+                    infoView2_DateInfo_DateTextButton.Text = new DateTime(queryTime_Year2, queryTime_Month2, 1).ToString("yyyy-MM");
+                    if (queryType2 == QueryType.day_hour)
+                    {
+                        if (item3 != queryTime_Day2)
+                        {
+                            queryTime_Day2 = item3;
+                        }
+                        infoView2_DateInfo_DateTextButton.Text = new DateTime(queryTime_Year2, queryTime_Month2, queryTime_Day2).ToString("yyyy-MM-dd");
+                    }
+                }
+                getLoadElectricityHistory();
+            };
+
+            var btnToday = new Button()
+            {
+                X = Application.GetRealWidth(160 - 32) - btnConfrim.GetTextWidth(),
+                Width = Application.GetRealWidth(160),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                Visible = false,
+                Enable = false,
+                Text = "浠婃棩",
+            };
+            topView.AddChidren(btnToday);
+
+
+            if (queryType2 == QueryType.day_hour)
+            {
+                try
+                {
+                    btnToday.Visible = btnToday.Enable = true;
+                    btnToday.MouseUpEventHandler = (sender, e) =>
+                    {
+                        item3 = queryTime_Day2 = DateTime.Now.Day;
+                        item2 = queryTime_Month2 = DateTime.Now.Month;
+                        item1 = queryTime_Year2 = DateTime.Now.Year;
+
+                        pickerItems_Year = new List<string>();
+                        pickerItems_Year.Add("2023");
+                        while (DateTime.Now.Year > 2022 + pickerItems_Year.Count)
+                        {
+                            pickerItems_Year.Add((2023 + pickerItems_Year.Count).ToString());
+                        }
+
+                        pickerItems_Month = new List<string>();
+                        int addMonth = 0;
+                        while (DateTime.Now.Month > addMonth)
+                        {
+                            addMonth++;
+                            pickerItems_Month.Add(addMonth.ToString());
+                        }
+                        pickerItems_Day = new List<string>();
+                        int addDay = 0;
+                        while (DateTime.Now.Day > addDay)
+                        {
+                            addDay++;
+                            pickerItems_Day.Add(addDay.ToString());
+                        }
+
+                        uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                        uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(queryTime_Year2.ToString()),
+                            pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(queryTime_Month2.ToString()),
+                            pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(queryTime_Day2.ToString()));
+                    };
+                }
+                catch { }
+            }
+
+        }
+
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Acst/InverterJinmaoPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Acst/InverterJinmaoPage.cs
new file mode 100644
index 0000000..02bbf02
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Acst/InverterJinmaoPage.cs
@@ -0,0 +1,1541 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.DAL.Server;
+using HDL_ON.DriverLayer;
+using HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI
+{
+    public class InverterJinmaoPage : FrameLayout
+    {
+        static InverterJinmaoPage bodyView;
+        Function function;
+        /// <summary>
+        /// 浠婃棩鍙戠數閲忔暟鎹寜閽�
+        /// </summary>
+        Button pvGenerate_TodayValuesButton;
+        /// <summary>
+        /// 浠婃棩鍙戠數閲忓崟浣嶆寜閽�
+        /// </summary>
+        Button pvGenerate_todayUintButton;
+        /// <summary>
+        /// 绱鍙戠數閲忔暟鎹寜閽�
+        /// </summary>
+        Button pvGenerate_TotalValuesButton;
+        /// <summary>
+        /// 浠婃棩鐢ㄧ數閲忔暟鎹寜閽�
+        /// </summary>
+        Button pvLoad_TodayValuesButton;
+        /// <summary>
+        /// 浠婃棩鐢ㄧ數閲忓崟浣嶆寜閽�
+        /// </summary>
+        Button loadEle_TodayUintButton;
+        /// <summary>
+        /// 绱鐢ㄧ數閲忔暟鎹寜閽�
+        /// </summary>
+        Button pvLoad_TotalValuesButton;
+        /// <summary>
+        /// 鍏変紡杩愯鐘舵�佷俊鎭尯鍩�
+        /// </summary>
+        FrameLayout pvRunStatusInfoView;
+        /// <summary>
+        /// 鍏変紡杩愯鐘舵�佸浘鏍囨寜閽�
+        /// </summary>
+        Button pvRunStatus_IconButton;
+        /// <summary>
+        /// 鍏変紡杩愯鐘舵�佹枃鏈寜閽�
+        /// </summary>
+        Button pvRunStatus_TextButton;
+        /// <summary>
+        /// 鍏変紡鍙戠數鍔熻兘鏁版嵁鎸夐挳
+        /// </summary>
+        Button pvPower_ValuesButton;
+        /// <summary>
+        /// 鍏変紡浠婃棩鍙戠數閲忔暟鎹寜閽�
+        /// </summary>
+        Button pvGeneration_TodayValuesButton;
+        /// <summary>
+        /// 鍏変紡鏈湀鍙戠數閲忔暟鎹寜閽�
+        /// </summary>
+        Button pvGeneration_MonthValuesButton;
+        /// <summary>
+        /// 鍏変紡瀹炴椂鐢ㄧ數鍔熺巼鏁版嵁鎸夐挳
+        /// </summary>
+        Button loadElec_ValuesButton;
+        /// <summary>
+        /// 鍏変紡鐘舵�佷粖鏃ョ敤鐢甸噺鏁版嵁鎸夐挳
+        /// </summary>
+        Button powerUsage_TodayValuesButton;
+        /// <summary>
+        /// 鍏変紡鐘舵�佹湰鏈堢敤鐢甸噺鏁版嵁鎸夐挳
+        /// </summary>
+        Button loadElec_MonthValuesButton;
+        /// <summary>
+        /// 鍌ㄨ兘杩愯鐘舵�佷俊鎭尯鍩�
+        /// </summary>
+        FrameLayout esStatus_InfoView;
+        /// <summary>
+        /// 鍌ㄨ兘杩愯鐘舵�佸浘鏍囨寜閽�
+        /// </summary>
+        Button esRunStatus_Info_IconButton;
+        /// <summary>
+        /// 鍌ㄨ兘杩愯鐘舵�佹枃鏈寜閽�
+        /// </summary>
+        Button esRunStatus_Info_TextButton;
+        /// <summary>
+        /// 鍌ㄨ兘鐢垫睜鐘舵�佸浘鏍囨寜閽�
+        /// </summary>
+        Button esRunStatus_BatteryIconButton;
+        /// <summary>
+        /// 鍌ㄨ兘鐢垫睜鐘舵�佺櫨鍒嗘瘮鎸夐挳
+        /// </summary>
+        Button esRunStatus_BatteryValuesButton;
+        /// <summary>
+        /// 鍌ㄨ兘瀹炴椂鍏呯數鍔熺巼
+        /// </summary>
+        Button esRunStatus_ChargeValuesButton;
+        /// <summary>
+        /// 鍌ㄨ兘瀹炴椂鏀剧數鍔熺巼
+        /// </summary>
+        Button esRunStatus_DischargeValuesButton;
+
+        /// <summary>
+        /// </summary>
+        Button socialContribution_Info1_ValuesButton;
+        /// <summary>
+        /// </summary>
+        Button socialContribution_Info1_UintButton;
+        /// <summary>
+        /// </summary>
+        Button socialContribution_Info2_ValuesButton;
+        /// <summary>
+        /// </summary>
+        Button socialContribution_Info2_UintButton;
+        /// <summary>
+        /// </summary>
+        Button socialContribution_Info3_UintButton;
+        /// <summary>
+        /// </summary>
+        Button socialContribution_Info3_ValuesButton;
+
+
+        public InverterJinmaoPage()
+        {
+            bodyView = this;
+            try
+            {
+                function = FunctionList.List.GetInverterJinmaoList()[0];
+            }
+            catch (Exception ex)
+            {
+                MainPage.Log($"{ex.Message}");
+                this.RemoveFromParent();
+            }
+            BackgroundColor = CSS_Color.BackgroundColor;
+        }
+
+        public void LoadPage()
+        {
+            new TopViewDiv(bodyView, Language.StringByID(StringId.NewEnergy)) { maginY = 10 }.LoadTopView();
+
+            var contentView = new VerticalScrolViewLayout()
+            {
+                Y = Application.GetRealHeight(74),
+                Height = Application.GetRealHeight(Application.DesignHeight - 74),
+            };
+            bodyView.AddChidren(contentView);
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(16),
+            });
+
+            #region 鍙戠數閲�  鐢ㄧ數閲�
+            var electricityQuantityView = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealWidth(99),
+                Gravity = Gravity.CenterHorizontal,
+            };
+            contentView.AddChidren(electricityQuantityView);
+
+            #region 鍙戠數閲� Electricity generation
+            var electricityGenerationView = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(181),
+                Height = Application.GetRealWidth(99),
+                BackgroundImagePath = "FunctionIcon/Acst/Inverter/ElectricityGenerationBg.png"
+            };
+            electricityQuantityView.AddChidren(electricityGenerationView);
+
+            var pv_IconButton = new Button()
+            {
+                X = Application.GetRealWidth(14),
+                Y = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(12),
+                Height = Application.GetRealWidth(12),
+                UnSelectedImagePath = "FunctionIcon/Acst/Inverter/ElectricityGenerationIcon.png"
+            };
+            electricityQuantityView.AddChidren(pv_IconButton);
+
+            var pv_TextButton = new Button()
+            {
+                X = Application.GetRealWidth(32),
+                Y = Application.GetRealWidth(12),
+                Width = Application.GetRealWidth(140),
+                Height = Application.GetRealWidth(20),
+                Text = "浠婃棩鍙戠數閲�",
+                TextSize = CSS_FontSize.TextFontSize,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.MainBackgroundColor,
+            };
+            electricityGenerationView.AddChidren(pv_TextButton);
+
+            pvGenerate_TodayValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(34),
+                Height = Application.GetRealWidth(24),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.pv_electricity_today.ToString()),
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextSize = 18,
+                IsBold = true,
+            };
+            electricityGenerationView.AddChidren(pvGenerate_TodayValuesButton);
+
+#if __IOS__
+            pvGenerate_TodayValuesButton.TextAlignment = TextAlignment.TopLeft;
+            pvGenerate_TodayValuesButton.Width = pvGenerate_TodayValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+#else
+            pvGenerate_TodayValuesButton.TextAlignment = TextAlignment.BottomLeft;
+            pvGenerate_TodayValuesButton.Y = Application.GetRealWidth(37);
+            pvGenerate_TodayValuesButton.Width = pvGenerate_TodayValuesButton.GetTextWidth() + Application.GetRealWidth(4);
+#endif
+            pvGenerate_todayUintButton = new Button()
+            {
+                Y = Application.GetRealWidth(43),
+                Height = Application.GetRealWidth(17),
+                Text = "kwh",
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextSize = 12,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            pvGenerate_todayUintButton.X = pvGenerate_TodayValuesButton.Right - Application.GetRealWidth(2);
+            electricityGenerationView.AddChidren(pvGenerate_todayUintButton);
+
+            pvGenerate_TotalValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(69),
+                Height = Application.GetRealWidth(18),
+                Text = "绱鍙戠數閲忥細" + function.GetAttrState(InverterJinmao_AttrEnum.pv_electricity.ToString()),
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextSize = 12,
+                TextAlignment = TextAlignment.CenterLeft,
+                //IsBold = true,
+            };
+            electricityGenerationView.AddChidren(pvGenerate_TotalValuesButton);
+
+
+
+            #endregion
+
+            #region 鐢ㄧ數閲� Electricity consumption
+            var loadEleView = new FrameLayout()
+            {
+                X = Application.GetRealWidth(178 - 16),
+                Width = Application.GetRealWidth(181),
+                Height = Application.GetRealWidth(99),
+                BackgroundImagePath = "FunctionIcon/Acst/Inverter/ElectricityConsumptionBg.png"
+            };
+            electricityQuantityView.AddChidren(loadEleView);
+
+            var loadEle_IconButton = new Button()
+            {
+                X = Application.GetRealWidth(155),
+                Y = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(12),
+                Height = Application.GetRealWidth(12),
+                UnSelectedImagePath = "FunctionIcon/Acst/Inverter/ElectricityConsumptionIcon.png"
+            };
+            loadEleView.AddChidren(loadEle_IconButton);
+
+            var loadEle_TodayTextButton = new Button()
+            {
+                //X = Application.GetRealWidth(181 - 32),
+                Y = Application.GetRealWidth(12),
+                Width = Application.GetRealWidth(181 - 32),
+                Height = Application.GetRealWidth(20),
+                Text = "浠婃棩鐢ㄧ數閲�",
+                TextSize = CSS_FontSize.TextFontSize,
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainBackgroundColor,
+            };
+            loadEleView.AddChidren(loadEle_TodayTextButton);
+
+
+            loadEle_TodayUintButton = new Button()
+            {
+                Y = Application.GetRealWidth(43),
+                Height = Application.GetRealWidth(17),
+                Text = "kwh",
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextSize = 12,
+                TextAlignment = TextAlignment.CenterRight,
+            };
+            loadEleView.AddChidren(loadEle_TodayUintButton);
+#if __IOS__
+            loadEle_TodayUintButton.Width = loadEle_TodayUintButton.GetTextWidth() + Application.GetRealWidth(8);
+#else
+            loadEle_TodayUintButton.Width = loadEle_TodayUintButton.GetTextWidth();
+#endif
+            loadEle_TodayUintButton.X = Application.GetRealWidth(181 - 12) - loadEle_TodayUintButton.Width;
+
+            pvLoad_TodayValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(81 - 12) - loadEle_TodayUintButton.Width,
+                Y = Application.GetRealWidth(34),
+                Height = Application.GetRealWidth(53),
+                Width = Application.GetRealWidth(100),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.load_electricity_today.ToString()),
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextSize = 18,
+                TextAlignment = TextAlignment.TopRight,
+                IsBold = true,
+            };
+#if __IOS__
+            pvLoad_TodayValuesButton.Y = Application.GetRealWidth(34);
+            pvLoad_TodayValuesButton.X = Application.GetRealWidth(81 - 12) - loadEle_TodayUintButton.Width;
+#else
+            pvLoad_TodayValuesButton.Y = Application.GetRealWidth(37);
+            pvLoad_TodayValuesButton.X = Application.GetRealWidth(81 - 16) - loadEle_TodayUintButton.Width;
+#endif
+            loadEleView.AddChidren(pvLoad_TodayValuesButton);
+
+            pvLoad_TotalValuesButton = new Button()
+            {
+                Y = Application.GetRealWidth(69),
+                Height = Application.GetRealWidth(18),
+                Width = Application.GetRealWidth(181 - 12),
+                Text = "绱鐢ㄧ數閲忥細" + function.GetAttrState(InverterJinmao_AttrEnum.load_electricity.ToString()),
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextSize = 12,
+                TextAlignment = TextAlignment.CenterRight,
+                //IsBold = true,
+            };
+            loadEleView.AddChidren(pvLoad_TotalValuesButton);
+
+            #endregion
+
+            var goHistroyButton = new Button();
+            electricityQuantityView.AddChidren(goHistroyButton);
+            goHistroyButton.MouseUpEventHandler = (sender, e) =>
+            {
+                var page = new InverterJinmaoHistroyPage(function);
+                MainPage.BasePageView.AddChidren(page);
+                page.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
+            #endregion
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(8),
+            });
+            #region 鍏変紡杩愯鐘舵��
+            var pvRunStatus_TitleButton = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Height = Application.GetRealWidth(47),
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = "鍏変紡杩愯鐘舵��",
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 16,
+                IsBold = true,
+            };
+            contentView.AddChidren(pvRunStatus_TitleButton);
+
+            var pvEleGenerationInfoView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealWidth(253),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealHeight(12),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            contentView.AddChidren(pvEleGenerationInfoView);
+
+            #region 鍏変紡杩愯鐘舵��
+            pvRunStatusInfoView = new FrameLayout()
+            {
+                X = 0 - Application.GetRealWidth(14),
+                Y = Application.GetRealWidth(12),
+                Width = Application.GetRealWidth(68 + 14),
+                Height = Application.GetRealWidth(28),
+                BackgroundColor = 0x154484F4,
+                Radius = (uint)Application.GetRealHeight(14),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            pvEleGenerationInfoView.AddChidren(pvRunStatusInfoView);
+
+            pvRunStatus_IconButton = new Button()
+            {
+                X = Application.GetRealWidth(8 + 14),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetRealWidth(12),
+                Height = Application.GetRealWidth(12),
+                UnSelectedImagePath = "FunctionIcon/Acst/Inverter/PvIconRun.png",
+            };
+            pvRunStatusInfoView.AddChidren(pvRunStatus_IconButton);
+
+            pvRunStatus_TextButton = new Button()
+            {
+                X = Application.GetRealWidth(8 + 14 + 4 + 12),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = 14,
+                TextColor = 0xFF4484F4,
+                Text = "杩愯",
+            };
+            pvRunStatusInfoView.AddChidren(pvRunStatus_TextButton);
+
+            var powerGenerationView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(20),
+                Width = Application.GetRealWidth(151),
+                Height = Application.GetRealWidth(151),
+            };
+            pvEleGenerationInfoView.AddChidren(powerGenerationView);
+
+            var powerGenerationBg = new Button()
+            {
+                UnSelectedImagePath = "FunctionIcon/Acst/Inverter/PvBgRun.png"
+            };
+            powerGenerationView.AddChidren(powerGenerationBg);
+
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    int index = 1;
+                    float pvPower = 0.00f;
+                    while (index < 361)
+                    {
+                        float.TryParse(function.GetAttrState(InverterJinmao_AttrEnum.pv_power.ToString()), out pvPower);
+                        if (pvPower > 0.00f)
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                powerGenerationBg.SetRotation(1f * index++);
+                            });
+                            System.Threading.Thread.Sleep(50);
+                            if (index == 361)
+                            {
+                                index = 1;
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕UI鎺т欢鏃嬭浆寮傚父:{ex.Message}");
+                }
+            })
+            { IsBackground = true }.Start();
+
+            #endregion
+
+            #region 鍏変紡鍙戠數閲�
+            #region 鍏変紡鍙戠數鍔熺巼
+            pvPower_ValuesButton = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(46),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(32),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.pv_power.ToString()),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 24,
+                IsBold = true,
+            };
+            powerGenerationView.AddChidren(pvPower_ValuesButton);
+
+            var powerGeneration_TextButton = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(78),
+                //Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(25),
+                Text = "瀹炴椂鍙戠數鍔熺巼 (kw)",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = 12,
+            };
+            powerGenerationView.AddChidren(powerGeneration_TextButton);
+            #endregion
+
+            #region 鍏変紡浠婃棩鍙戠數閲�
+            pvGeneration_TodayValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealWidth(191),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(24),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.pv_electricity_today.ToString()),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 18,
+                IsBold = true,
+            };
+            pvEleGenerationInfoView.AddChidren(pvGeneration_TodayValuesButton);
+
+            var powerGeneration_TodayTextButton = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealWidth(220),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(17),
+                Text = "浠婃棩鍙戠數閲� (kwh)",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = 12,
+            };
+            pvEleGenerationInfoView.AddChidren(powerGeneration_TodayTextButton);
+            #endregion
+
+            #region 鍏変紡鏈湀鍙戠數閲�
+            pvGeneration_MonthValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(16 + 105),
+                Y = Application.GetRealWidth(191),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(24),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.pv_electricity_month.ToString()),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 18,
+                IsBold = true,
+            };
+            pvEleGenerationInfoView.AddChidren(pvGeneration_MonthValuesButton);
+
+            var powerGeneration_MonthTextButton = new Button()
+            {
+                X = Application.GetRealWidth(16 + 105),
+                Y = Application.GetRealWidth(220),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(17),
+                Text = "鏈湀鍙戠數閲� (kwh)",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = 12,
+            };
+            pvEleGenerationInfoView.AddChidren(powerGeneration_MonthTextButton);
+            #endregion
+
+            #region 鍏変紡鏈勾鍙戠數閲�
+            var pvGeneration_YearValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(16 + 212),
+                Y = Application.GetRealWidth(191),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(24),
+                Text = "---",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 18,
+                IsBold = true,
+            };
+            pvEleGenerationInfoView.AddChidren(pvGeneration_YearValuesButton);
+
+            var powerGeneration_YearTextButton = new Button()
+            {
+                X = Application.GetRealWidth(16 + 212),
+                Y = Application.GetRealWidth(220),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(17),
+                Text = "鏈勾鍙戠數閲� (kwh)",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = 12,
+            };
+            pvEleGenerationInfoView.AddChidren(powerGeneration_YearTextButton);
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    var revertObj = new HttpServerRequest().GetSensorHistory("custom_year",
+                        function.deviceId, InverterJinmao_AttrEnum.pv_electricity.ToString(), DateTime.Now.Year.ToString());
+                    if (revertObj != null)
+                    {
+                        if (revertObj.Code == StateCode.SUCCESS)
+                        {
+                            var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<EnvironmentalSensorHistor>>(revertObj.Data.ToString());
+                            double totalValues = 0.0;
+                            double values = 0.0;
+                            foreach (var data in revertData)
+                            {
+                                double.TryParse(data.fieldValue, out values);
+                                totalValues += values;
+                            }
+                            Application.RunOnMainThread(() =>
+                            {
+                                pvGeneration_YearValuesButton.Text = totalValues.ToString();
+                                while (true)
+                                {
+                                    if (pvGeneration_YearValuesButton.Width < pvGeneration_YearValuesButton.GetTextWidth())
+                                    {
+                                        pvGeneration_YearValuesButton.TextSize--;
+                                    }
+                                    else
+                                    {
+                                        break;
+                                    }
+                                }
+                            });
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", "璇诲彇閲戣寕鏈勾鍙戠數閲忔暟鎹紓甯革細" + ex.Message);
+                }
+            })
+            { IsBackground = true }.Start();
+
+            #endregion
+           
+            #endregion
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(12),
+            });
+
+            #region 鐢ㄧ數閲忕姸鎬� electricity usage status
+            var electricityUsageStatusView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealWidth(253),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealHeight(12),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            contentView.AddChidren(electricityUsageStatusView);
+
+            var powerUsageView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(20),
+                Width = Application.GetRealWidth(151),
+                Height = Application.GetRealWidth(151),
+            };
+            electricityUsageStatusView.AddChidren(powerUsageView);
+
+            var powerUsageBg = new Button()
+            {
+                UnSelectedImagePath = "FunctionIcon/Acst/Inverter/PvBgDischarge.png"
+            };
+            powerUsageView.AddChidren(powerUsageBg);
+
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    int index = 1;
+                    float loadPower = 0.00f;
+                    while (index < 361)
+                    {
+                        float.TryParse(function.GetAttrState(InverterJinmao_AttrEnum.load_active_power.ToString()), out loadPower);
+                        if (loadPower > 0.00f)
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                powerUsageBg.SetRotation(1f * index++);
+                            });
+                            System.Threading.Thread.Sleep(50);
+                            if (index == 361)
+                            {
+                                index = 1;
+                            }
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕UI鎺т欢鏃嬭浆寮傚父2:{ex.Message}");
+                }
+            })
+            { IsBackground = true }.Start();
+
+            loadElec_ValuesButton = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(46),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(32),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.load_active_power.ToString()),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 24,
+                IsBold = true,
+            };
+            powerUsageView.AddChidren(loadElec_ValuesButton);
+
+            var powerUsage_TextButton = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(78),
+                //Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(25),
+                Text = "瀹炴椂鐢ㄧ數鍔熺巼 (kw)",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = 12,
+            };
+            powerUsageView.AddChidren(powerUsage_TextButton);
+
+
+            powerUsage_TodayValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealWidth(191),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(24),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.load_electricity_today.ToString()),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 18,
+                IsBold = true,
+            };
+            electricityUsageStatusView.AddChidren(powerUsage_TodayValuesButton);
+
+            var loadElec_TodayTextButton = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealWidth(220),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(17),
+                Text = "浠婃棩鐢ㄧ數閲� (kwh)",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = 12,
+            };
+            electricityUsageStatusView.AddChidren(loadElec_TodayTextButton);
+
+            loadElec_MonthValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(16 + 105),
+                Y = Application.GetRealWidth(191),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(24),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.load_electricity_month.ToString()),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 18,
+                IsBold = true,
+            };
+            electricityUsageStatusView.AddChidren(loadElec_MonthValuesButton);
+
+            var powerUsage_MonthTextButton = new Button()
+            {
+                X = Application.GetRealWidth(16 + 105),
+                Y = Application.GetRealWidth(220),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(17),
+                Text = "鏈湀鐢ㄧ數閲� (kwh)",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = 12,
+            };
+            electricityUsageStatusView.AddChidren(powerUsage_MonthTextButton);
+
+
+            var powerUsage_YearValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(16 + 212),
+                Y = Application.GetRealWidth(191),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(24),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.load_electricity.ToString()),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = 18,
+                IsBold = true,
+            };
+            electricityUsageStatusView.AddChidren(powerUsage_YearValuesButton);
+
+            var powerUsage_YearTextButton = new Button()
+            {
+                X = Application.GetRealWidth(16 + 212),
+                Y = Application.GetRealWidth(220),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(17),
+                Text = "鏈勾鐢ㄧ數閲� (kwh)",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = 12,
+            };
+            electricityUsageStatusView.AddChidren(powerUsage_YearTextButton);
+
+
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    var revertObj = new HttpServerRequest().GetSensorHistory("custom_year",
+                        function.deviceId, InverterJinmao_AttrEnum.load_electricity.ToString(), DateTime.Now.Year.ToString());
+                    if (revertObj != null)
+                    {
+                        if (revertObj.Code == StateCode.SUCCESS)
+                        {
+                            var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<EnvironmentalSensorHistor>>(revertObj.Data.ToString());
+                            double totalValues = 0.0;
+                            double values = 0.0;
+                            foreach (var data in revertData)
+                            {
+                                double.TryParse(data.fieldValue, out values);
+                                totalValues += values;
+                            }
+                            Application.RunOnMainThread(() =>
+                            {
+                                powerUsage_YearValuesButton.Text = totalValues.ToString();
+                                while (true)
+                                {
+                                    if (powerUsage_YearValuesButton.Width < powerUsage_YearValuesButton.GetTextWidth())
+                                    {
+                                        powerUsage_YearValuesButton.TextSize--;
+                                    }
+                                    else
+                                    {
+                                        break;
+                                    }
+                                }
+                            });
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", "璇诲彇閲戣寕鏈勾鍙戠數閲忔暟鎹紓甯革細" + ex.Message);
+                }
+            })
+            { IsBackground = true }.Start();
+
+            #endregion
+
+
+            #endregion
+
+            if (function.attributes.Find((obj) => obj.key == InverterJinmao_AttrEnum.ess_status.ToString()) != null)
+            {
+                contentView.AddChidren(new Button()
+                {
+                    Height = Application.GetRealWidth(8)
+                });
+
+                #region 鍌ㄨ兘杩愯鐘舵�� Energy storage
+                var esRunStatus_TitleButton = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Height = Application.GetRealWidth(47),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    Text = "鍌ㄨ兘杩愯鐘舵��",
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextSize = 16,
+                    IsBold = true,
+                };
+                contentView.AddChidren(esRunStatus_TitleButton);
+
+                #region 
+                var esStatusView = new FrameLayout()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Width = Application.GetRealWidth(343),
+                    Height = Application.GetRealWidth(194),
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                    Radius = (uint)Application.GetRealHeight(12),
+                    BorderColor = 0x00FFFFFF,
+                    BorderWidth = 0,
+                };
+                contentView.AddChidren(esStatusView);
+
+                esStatus_InfoView = new FrameLayout()
+                {
+                    X = 0 - Application.GetRealWidth(14),
+                    Y = Application.GetRealWidth(12),
+                    Width = Application.GetRealWidth(68 + 14),
+                    Height = Application.GetRealWidth(28),
+                    BackgroundColor = 0x1500C22D,
+                    Radius = (uint)Application.GetRealHeight(14),
+                    BorderColor = 0x00FFFFFF,
+                    BorderWidth = 0,
+                };
+                esStatusView.AddChidren(esStatus_InfoView);
+
+                esRunStatus_Info_IconButton = new Button()
+                {
+                    X = Application.GetRealWidth(8 + 14),
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetRealWidth(12),
+                    Height = Application.GetRealWidth(12),
+                    UnSelectedImagePath = "FunctionIcon/Acst/Inverter/EsIconCharg.png",
+                };
+                esStatus_InfoView.AddChidren(esRunStatus_Info_IconButton);
+
+                esRunStatus_Info_TextButton = new Button()
+                {
+                    X = Application.GetRealWidth(8 + 14 + 4 + 12),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = 14,
+                    TextColor = 0xFF00C22D,
+                    Text = "鍏呯數",
+                };
+                esStatus_InfoView.AddChidren(esRunStatus_Info_TextButton);
+
+                esRunStatus_BatteryValuesButton = new Button()
+                {
+                    Y = Application.GetRealWidth(18),
+                    Height = Application.GetRealWidth(17),
+                    TextAlignment = TextAlignment.CenterRight,
+                    Text = function.GetAttrState(InverterJinmao_AttrEnum.battery_soc.ToString()) + "%",
+                    TextSize = 12,
+                    TextColor = 0xFF00C22D,
+                };
+                esRunStatus_BatteryValuesButton.Width = esRunStatus_BatteryValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+                esRunStatus_BatteryValuesButton.X = Application.GetRealWidth(343 - 12) - esRunStatus_BatteryValuesButton.Width;
+                esStatusView.AddChidren(esRunStatus_BatteryValuesButton);
+
+                esRunStatus_BatteryIconButton = new Button()
+                {
+                    X = Application.GetRealWidth(343 - 12 - 20) - esRunStatus_BatteryValuesButton.Width,
+                    Y = Application.GetRealWidth(16),
+                    Width = Application.GetRealWidth(20),
+                    Height = Application.GetRealWidth(20),
+                    UnSelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconCharg.png",
+                    SelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconCharg100.png",
+                    IsSelected = esRunStatus_BatteryValuesButton.Text == "100%"
+                };
+                esStatusView.AddChidren(esRunStatus_BatteryIconButton);
+
+                var esRunStatus_ValuesInfoView = new FrameLayout()
+                {
+                    Width = Application.GetRealWidth(282),
+                    Height = Application.GetRealWidth(153),
+                    Gravity = Gravity.CenterHorizontal,
+                    Y = Application.GetRealWidth(40),
+                    BackgroundImagePath = "FunctionIcon/Acst/Inverter/EnergyStorageStatusBg.png",
+                };
+                esStatusView.AddChidren(esRunStatus_ValuesInfoView);
+
+                #region 瀹炴椂鍏呯數鍔熺巼
+                var esRunStatus_ChargeValuesView = new FrameLayout()
+                {
+                    X = Application.GetRealWidth(15),
+                    Width = Application.GetRealWidth(128),
+                    Height = Application.GetRealWidth(128),
+                };
+                esRunStatus_ValuesInfoView.AddChidren(esRunStatus_ChargeValuesView);
+
+                esRunStatus_ChargeValuesButton = new Button()
+                {
+                    Y = Application.GetRealWidth(36),
+                    Height = Application.GetRealWidth(32),
+                    TextAlignment = TextAlignment.Center,
+                    Text = function.GetAttrState(InverterJinmao_AttrEnum.ess_charge_power.ToString()),
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextSize = 24,
+                    IsBold = true,
+                };
+                esRunStatus_ChargeValuesView.AddChidren(esRunStatus_ChargeValuesButton);
+
+                var esRunStatus_ChargeTextButton = new Button()
+                {
+                    X = Application.GetRealWidth(1),
+                    Y = Application.GetRealWidth(76),
+                    Height = Application.GetRealWidth(17),
+                    TextAlignment = TextAlignment.Center,
+                    Text = "瀹炴椂鍏呯數鍔熺巼(kw)",
+                    TextColor = CSS_Color.TextualColor,
+                    TextSize = 12,
+                };
+                esRunStatus_ChargeValuesView.AddChidren(esRunStatus_ChargeTextButton);
+                #endregion
+
+                #region 瀹炴椂鐢ㄧ數鍔熺巼
+                var esRunStatus_DischargeValuesView = new FrameLayout()
+                {
+                    X = Application.GetRealWidth(132 + 13),
+                    Width = Application.GetRealWidth(128),
+                    Height = Application.GetRealWidth(128),
+                };
+                esRunStatus_ValuesInfoView.AddChidren(esRunStatus_DischargeValuesView);
+
+                esRunStatus_DischargeValuesButton = new Button()
+                {
+                    Y = Application.GetRealWidth(36),
+                    Height = Application.GetRealWidth(32),
+                    TextAlignment = TextAlignment.Center,
+                    Text = function.GetAttrState(InverterJinmao_AttrEnum.ess_discharg_power.ToString()),
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextSize = 24,
+                    IsBold = true,
+                };
+                esRunStatus_DischargeValuesView.AddChidren(esRunStatus_DischargeValuesButton);
+
+                var esRunStatus_DischargeTextButton = new Button()
+                {
+                    X = Application.GetRealWidth(1),
+                    Y = Application.GetRealWidth(76),
+                    Height = Application.GetRealWidth(17),
+                    TextAlignment = TextAlignment.Center,
+                    Text = "瀹炴椂鏀剧數鍔熺巼(kwh)",
+                    TextColor = CSS_Color.TextualColor,
+                    TextSize = 12,
+                };
+                esRunStatus_DischargeValuesView.AddChidren(esRunStatus_DischargeTextButton);
+                #endregion
+
+                #endregion
+
+                #endregion
+
+            }
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(8)
+            });
+
+            #region 绀句細璐$尞 Social contribution
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(46),
+                Width = Application.GetRealWidth(100),
+                X = Application.GetRealWidth(16),
+                Text = "绀句細璐$尞",
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = 16,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                IsBold = true
+            });
+
+            var socialContributionView = new HorizontalScrolViewLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(142),
+                ScrollEnabled = false,
+            };
+            contentView.AddChidren(socialContributionView);
+
+            #region 鑺傜害鏍囧噯鐓�
+            var socialContribution_InfoView_1 = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(109),
+                Height = Application.GetRealWidth(130),
+                BackgroundImagePath = "FunctionIcon/Acst/Inverter/SocialContributionInfoBg_Coal.png"
+            };
+            socialContributionView.AddChidren(socialContribution_InfoView_1);
+
+            var socialContribution_Info1_IconButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(36),
+                Height = Application.GetRealWidth(36),
+                UnSelectedImagePath = "FunctionIcon/Acst/Inverter/SocialContributionInfoIcon_Coal.png"
+            };
+            socialContribution_InfoView_1.AddChidren(socialContribution_Info1_IconButton);
+
+            socialContribution_Info1_ValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(68),
+                Width = Application.GetRealWidth(36),
+                Height = Application.GetRealWidth(25),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.coal.ToString()),
+                TextSize = 18,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.BottomLeft,
+                IsBold = true,
+            };
+            socialContribution_Info1_ValuesButton.Width = socialContribution_Info1_ValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+            socialContribution_InfoView_1.AddChidren(socialContribution_Info1_ValuesButton);
+
+            socialContribution_Info1_UintButton = new Button()
+            {
+                X = socialContribution_Info1_ValuesButton.Right - Application.GetRealWidth(4),
+                Y = Application.GetRealWidth(68),
+                Width = Application.GetRealWidth(50),
+                Height = Application.GetRealWidth(23),
+                Text = "鍚�",
+                TextSize = 12,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.BottomLeft,
+            };
+#if __IOS__
+            socialContribution_Info1_UintButton.Y = Application.GetRealWidth(66);
+#endif
+            socialContribution_InfoView_1.AddChidren(socialContribution_Info1_UintButton);
+
+            var socialContribution_Info1_TipButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(98),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(17),
+                Text = "鑺傜害鏍囧噯鐓�",
+                TextSize = 12,
+                TextColor = 0xFF798394,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            socialContribution_InfoView_1.AddChidren(socialContribution_Info1_TipButton);
+            #endregion
+
+            socialContributionView.AddChidren(new Button()
+            {
+                Width = Application.GetRealWidth(8),
+            });
+
+            #region CO2鍑忔帓閲�
+            var socialContribution_InfoView_2 = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(109),
+                Height = Application.GetRealWidth(130),
+                BackgroundImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png"
+            };
+            socialContributionView.AddChidren(socialContribution_InfoView_2);
+
+            var socialContribution_Info2_IconButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(36),
+                Height = Application.GetRealWidth(36),
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png"
+            };
+            socialContribution_InfoView_2.AddChidren(socialContribution_Info2_IconButton);
+
+            socialContribution_Info2_ValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(68),
+                Width = Application.GetRealWidth(36),
+                Height = Application.GetRealWidth(25),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.co2.ToString()),
+                TextSize = 18,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.BottomLeft,
+                IsBold = true,
+            };
+            socialContribution_Info2_ValuesButton.Width = socialContribution_Info2_ValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+            socialContribution_InfoView_2.AddChidren(socialContribution_Info2_ValuesButton);
+
+            socialContribution_Info2_UintButton = new Button()
+            {
+                X = socialContribution_Info2_ValuesButton.Right - Application.GetRealWidth(4),
+                Y = Application.GetRealWidth(68),
+                Width = Application.GetRealWidth(50),
+                Height = Application.GetRealWidth(23),
+                Text = "鍚�",
+                TextSize = 12,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.BottomLeft,
+            };
+#if __IOS__
+            socialContribution_Info2_UintButton.Y = Application.GetRealWidth(66);
+#endif
+            socialContribution_InfoView_2.AddChidren(socialContribution_Info2_UintButton);
+
+            var socialContribution_Info2_TipButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(98),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(17),
+                Text = "CO2鍑忔帓閲�",
+                TextSize = 12,
+                TextColor = 0xFF798394,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            socialContribution_InfoView_2.AddChidren(socialContribution_Info2_TipButton);
+            #endregion
+
+            socialContributionView.AddChidren(new Button()
+            {
+                Width = Application.GetRealWidth(8),
+            });
+
+            #region 绛夋晥妞嶆爲閲�
+            var socialContribution_InfoView_3 = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(109),
+                Height = Application.GetRealWidth(130),
+                BackgroundImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png"
+            };
+            socialContributionView.AddChidren(socialContribution_InfoView_3);
+
+            var socialContribution_Info3_IconButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(36),
+                Height = Application.GetRealWidth(36),
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png"
+            };
+            socialContribution_InfoView_3.AddChidren(socialContribution_Info3_IconButton);
+
+            socialContribution_Info3_ValuesButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(68),
+                Width = Application.GetRealWidth(36),
+                Height = Application.GetRealWidth(25),
+                Text = function.GetAttrState(InverterJinmao_AttrEnum.trees.ToString()),
+                TextSize = 18,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.BottomLeft,
+                IsBold = true,
+            };
+            socialContribution_Info3_ValuesButton.Width = socialContribution_Info3_ValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+            socialContribution_InfoView_3.AddChidren(socialContribution_Info3_ValuesButton);
+
+            socialContribution_Info3_UintButton = new Button()
+            {
+                X = socialContribution_Info3_ValuesButton.Right - Application.GetRealWidth(4),
+                Y = Application.GetRealWidth(68),
+                Width = Application.GetRealWidth(50),
+                Height = Application.GetRealWidth(23),
+                Text = "妫�",
+                TextSize = 12,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.BottomLeft,
+            };
+            #if __IOS__
+            socialContribution_Info3_UintButton.Y = Application.GetRealWidth(66);
+            #endif
+            socialContribution_InfoView_3.AddChidren(socialContribution_Info3_UintButton);
+
+            var socialContribution_Info3_TipButton = new Button()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealWidth(98),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(17),
+                Text = "绛夋晥妞嶆爲閲�",
+                TextSize = 12,
+                TextColor = 0xFF798394,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            socialContribution_InfoView_3.AddChidren(socialContribution_Info3_TipButton);
+            #endregion
+
+
+
+            #endregion
+
+            Control.Ins.SendReadCommand(function);
+        }
+        /// <summary>
+        /// 鏇存柊鐣岄潰鏁版嵁
+        /// </summary>
+        /// <param name="temp"></param>
+        public static void UpdateStatus(Function temp)
+        {
+            if (bodyView == null)
+            {
+                return;
+            }
+            Application.RunOnMainThread(() =>
+            {
+                try
+                {
+                    /// 鏇存柊浠婃棩鍙戠數閲�
+                    bodyView.upatePvGenerateTodayValues();
+                    /// 鏇存柊绱鍙戠數閲�
+                    bodyView.upatePvGenerateTotalValues();
+                    /// 鏇存柊浠婃棩鐢ㄧ數閲�
+                    bodyView.upatePvLoadTodayValues();
+                    /// 鏇存柊绱鐢ㄧ數閲�
+                    bodyView.upatePvLoadTotalValues();
+                    /// 鏇存柊鍏変紡杩愯鐘舵��
+                    bodyView.upatePvRunStatus();
+                    /// 鏇存柊鍏変紡鍙戠數鍔熺巼
+                    bodyView.updatePvPower();
+                    /// 鏇存柊鍏変紡鏈湀鍙戠數閲�
+                    bodyView.upatePvGenerateMonthValues();
+                    /// 鏇存柊鍏変紡鐢ㄧ數鍔熺巼
+                    bodyView.updateLoadElec();
+                    ///鏇存柊鍏変紡鐘舵�佹湰鏈堢敤鐢甸噺
+                    bodyView.updateLoadElecMonthValues();
+                    //鏇存柊鍌ㄨ兘杩愯鐘舵��
+                    bodyView.updateEsRunStates();
+                    //鏇存柊鍌ㄨ兘鐢垫睜鐧惧垎姣�
+                    bodyView.updateEsBatterySoc();
+                    //鏇存柊鍌ㄨ兘瀹炴椂鍏呯數鐘舵��
+                    bodyView.updateEsCharge();
+                    //鏇存柊鍌ㄨ兘瀹炴椂鏀剧數鐘舵��
+                    bodyView.updateEsDischarge();
+                    bodyView.updateSocialContribution1();
+                    bodyView.updateSocialContribution2();
+                    bodyView.updateSocialContribution3();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鍏変紡鏇存柊寮傚父:{ex.StackTrace}");
+                }
+            });
+        }
+
+        /// <summary>
+        /// 鏇存柊浠婃棩鍙戠數閲�
+        /// </summary>
+        private void upatePvGenerateTodayValues()
+        {
+            pvGenerate_TodayValuesButton.Text = pvGeneration_TodayValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.pv_electricity_today.ToString());
+
+#if __IOS__
+            pvGenerate_TodayValuesButton.TextAlignment = TextAlignment.TopLeft;
+            pvGenerate_TodayValuesButton.Width = pvGenerate_TodayValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+#else
+            pvGenerate_TodayValuesButton.TextAlignment = TextAlignment.BottomLeft;
+            pvGenerate_TodayValuesButton.Y = Application.GetRealWidth(37);
+            pvGenerate_TodayValuesButton.Width = pvGenerate_TodayValuesButton.GetTextWidth() + Application.GetRealWidth(4);
+#endif
+            pvGenerate_todayUintButton.X = pvGenerate_TodayValuesButton.Right;
+        }
+        /// <summary>
+        /// 鏇存柊鍏変紡鏈湀鍙戠數閲�
+        /// </summary>
+        private void upatePvGenerateMonthValues()
+        {
+            pvGeneration_MonthValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.pv_electricity_month.ToString());
+        }
+        /// <summary>
+        /// 鏇存柊绱鍙戠數閲�
+        /// </summary>
+        private void upatePvGenerateTotalValues()
+        {
+            pvGenerate_TotalValuesButton.Text = "绱鍙戠數閲�:" + function.GetAttrState(InverterJinmao_AttrEnum.pv_electricity.ToString());
+        }
+        /// <summary>
+        /// 鏇存柊浠婃棩鐢ㄧ數閲�
+        /// </summary>
+        private void upatePvLoadTodayValues()
+        {
+            pvLoad_TodayValuesButton.Text = powerUsage_TodayValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.load_electricity_today.ToString());
+
+#if __IOS__
+            pvLoad_TodayValuesButton.Y = Application.GetRealWidth(34);
+            pvLoad_TodayValuesButton.X = Application.GetRealWidth(81 - 12) - loadEle_TodayUintButton.Width;
+#else
+            pvLoad_TodayValuesButton.Y = Application.GetRealWidth(37);
+            pvLoad_TodayValuesButton.X = Application.GetRealWidth(81 - 16) - loadEle_TodayUintButton.Width;
+#endif
+        }
+        /// <summary>
+        /// 鏇存柊鏈湀鐢ㄧ數閲�
+        /// </summary>
+        private void updateLoadElecMonthValues()
+        {
+            loadElec_MonthValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.load_electricity_month.ToString());
+        }
+        /// <summary>
+        /// 鏇存柊绱鐢ㄧ數閲�
+        /// </summary>
+        private void upatePvLoadTotalValues()
+        {
+            pvLoad_TotalValuesButton.Text = "绱鐢ㄧ數閲忥細" + function.GetAttrState(InverterJinmao_AttrEnum.load_electricity.ToString());
+
+        }
+        /// <summary>
+        /// 鏇存柊鍏変紡杩愯鐘舵��
+        /// </summary>
+        private void upatePvRunStatus()
+        {
+            switch (function.GetAttrState(InverterJinmao_AttrEnum.system_status.ToString()))
+            {
+                case "run":
+                    pvRunStatusInfoView.BackgroundColor = 0x154484F4;
+                    pvRunStatus_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/PvIconRun.png";
+                    pvRunStatus_TextButton.Text = "杩愯";
+                    pvRunStatus_TextButton.TextColor = 0xFF4484F4;
+                    break;
+                case "fault":
+                    pvRunStatusInfoView.BackgroundColor = 0x15FF4747;
+                    pvRunStatus_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/PvIconFault.png";
+                    pvRunStatus_TextButton.Text = "鏁呴殰";
+                    pvRunStatus_TextButton.TextColor = 0xFFFF4747;
+                    break;
+                case "standby":
+                    pvRunStatusInfoView.BackgroundColor = 0x15798394;
+                    pvRunStatus_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/PvIconStandby.png";
+                    pvRunStatus_TextButton.Text = "寰呮満";
+                    pvRunStatus_TextButton.TextColor = 0xFF798394;
+                    break;
+            }
+
+        }
+        /// <summary>
+        /// 鏇存柊鍏変紡鍙戠數鍔熺巼
+        /// </summary>
+        private void updatePvPower()
+        {
+            pvPower_ValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.pv_power.ToString());
+        }
+        /// <summary>
+        /// 鏇存柊鍏変紡鐢ㄧ數鍔熺巼
+        /// </summary>
+        private void updateLoadElec()
+        {
+            loadElec_ValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.load_active_power.ToString());
+        }
+        /// <summary>
+        /// 鏇存柊鍌ㄨ兘杩愯鐘舵��
+        /// </summary>
+        private void updateEsRunStates()
+        {
+            if (function.attributes.Find((obj) => obj.key == InverterJinmao_AttrEnum.ess_status.ToString()) != null)
+            {
+                switch (function.GetAttrState(InverterJinmao_AttrEnum.ess_status.ToString()))
+                {
+                    case "charge":
+                        esStatus_InfoView.BackgroundColor = 0x1500C22D;
+                        esRunStatus_Info_TextButton.TextColor = esRunStatus_BatteryValuesButton.TextColor = 0xFF00C22D;
+                        esRunStatus_Info_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/EsIconCharg.png";
+                        esRunStatus_Info_TextButton.Text = "鍏呯數";
+                        esRunStatus_BatteryIconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconCharg.png";
+                        esRunStatus_BatteryIconButton.SelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconCharg100.png";
+                        break;
+                    case "discharge":
+                        esStatus_InfoView.BackgroundColor = 0x15FC9C04;
+                        esRunStatus_Info_TextButton.TextColor = esRunStatus_BatteryValuesButton.TextColor = 0xFFFC9C04;
+                        esRunStatus_Info_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/EsIconDischarge.png";
+                        esRunStatus_Info_TextButton.Text = "鏀剧數";
+                        esRunStatus_BatteryIconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconDischarg.png";
+                        esRunStatus_BatteryIconButton.SelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconDischarg100.png";
+                        break;
+                    case "shutdown":
+                        esStatus_InfoView.BackgroundColor = 0x15798394;
+                        esRunStatus_Info_TextButton.TextColor = esRunStatus_BatteryValuesButton.TextColor = 0xFF798394;
+                        esRunStatus_Info_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/EsIconShutdown.png";
+                        esRunStatus_Info_TextButton.Text = "鍋滄満";
+                        esRunStatus_BatteryIconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconShutdown.png";
+                        esRunStatus_BatteryIconButton.SelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconShutdown100.png";
+                        break;
+                    case "fault":
+                        esStatus_InfoView.BackgroundColor = 0x15FF4747;
+                        esRunStatus_Info_TextButton.TextColor = esRunStatus_BatteryValuesButton.TextColor = 0xFFFF4747;
+                        esRunStatus_Info_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/EsIconFault.png";
+                        esRunStatus_Info_TextButton.Text = "鏁呴殰";
+                        esRunStatus_BatteryIconButton.UnSelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconFault.png";
+                        esRunStatus_BatteryIconButton.SelectedImagePath = "FunctionIcon/Acst/Inverter/BatteryIconFault100.png";
+                        break;
+                }
+            }
+        }
+        /// <summary>
+        /// 鏇存柊鍌ㄨ兘鐢垫睜鐧惧垎姣旂姸鎬�
+        /// </summary>
+        private void updateEsBatterySoc()
+        {
+            if (function.attributes.Find((obj) => obj.key == InverterJinmao_AttrEnum.ess_status.ToString()) != null)
+            {
+                esRunStatus_BatteryValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.battery_soc.ToString()) + "%";
+                if (esRunStatus_BatteryIconButton.Text == "100%")
+                {
+                    esRunStatus_BatteryIconButton.IsSelected = true;
+                }
+            }
+        }
+        /// <summary>
+        /// 鏇存柊鍌ㄨ兘瀹炴椂鍏呯數鐘舵��
+        /// </summary>
+        private void updateEsCharge()
+        {
+            if (function.attributes.Find((obj) => obj.key == InverterJinmao_AttrEnum.ess_status.ToString()) != null)
+            {
+                esRunStatus_ChargeValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.ess_charge_power.ToString());
+            }
+        }
+        /// <summary>
+        /// 鏇存柊鍌ㄨ兘瀹炴椂鏀剧數鐘舵��
+        /// </summary>
+        private void updateEsDischarge()
+        {
+            if (function.attributes.Find((obj) => obj.key == InverterJinmao_AttrEnum.ess_status.ToString()) != null)
+            {
+                esRunStatus_DischargeValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.ess_discharg_power.ToString());
+            }
+        }
+        /// <summary>
+        /// 鏇存柊绀句細璐$尞1鏁版嵁UI
+        /// </summary>
+        private void updateSocialContribution1()
+        {
+            socialContribution_Info1_ValuesButton.Text = function.GetAttrState(InverterJinmao_AttrEnum.coal.ToString());
+            socialContribution_Info1_ValuesButton.Width = socialContribution_Info1_ValuesButton.GetTextWidth();
+            if (socialContribution_Info1_ValuesButton.Width > Application.GetRealWidth(61))
+            {
+                socialContribution_Info1_ValuesButton.TextSize = 14;
+                socialContribution_Info1_ValuesButton.Width = socialContribution_Info1_ValuesButton.GetTextWidth();
+                socialContribution_Info1_UintButton.Height = Application.GetRealWidth(25);
+            }
+#if __IOS__
+            socialContribution_Info1_ValuesButton.Width += Application.GetRealWidth(6);
+            socialContribution_Info1_UintButton.X = socialContribution_Info1_ValuesButton.Right - Application.GetRealWidth(4);
+#else
+            socialContribution_Info1_UintButton.X = socialContribution_Info1_ValuesButton.Right +Application.GetRealWidth(2);
+#endif
+        }
+        /// <summary>
+        /// 鏇存柊绀句細璐�2鐚暟鎹甎I
+        /// </summary>
+        private void updateSocialContribution2()
+        {
+            socialContribution_Info2_ValuesButton.Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.co2.ToString());
+            socialContribution_Info2_ValuesButton.Width = socialContribution_Info2_ValuesButton.GetTextWidth();
+            if (socialContribution_Info2_ValuesButton.Width > Application.GetRealWidth(61))
+            {
+                socialContribution_Info2_ValuesButton.TextSize = 14;
+                socialContribution_Info2_ValuesButton.Width = socialContribution_Info2_ValuesButton.GetTextWidth();
+            }
+#if __IOS__
+            socialContribution_Info2_ValuesButton.Width += Application.GetRealWidth(6);
+            socialContribution_Info2_UintButton.X = socialContribution_Info2_ValuesButton.Right - Application.GetRealWidth(4);
+#else
+            socialContribution_Info2_UintButton.X = socialContribution_Info2_ValuesButton.Right +Application.GetRealWidth(2);
+#endif
+
+        }
+        /// <summary>
+        /// 鏇存柊绀句細璐�3鐚暟鎹甎I
+        /// </summary>
+        private void updateSocialContribution3()
+        {
+            socialContribution_Info3_ValuesButton.Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.trees.ToString());
+            socialContribution_Info3_ValuesButton.Width = socialContribution_Info3_ValuesButton.GetTextWidth();
+            if (socialContribution_Info3_ValuesButton.Width > Application.GetRealWidth(61))
+            {
+                socialContribution_Info3_ValuesButton.TextSize = 14;
+                socialContribution_Info3_ValuesButton.Width = socialContribution_Info3_ValuesButton.GetTextWidth();
+                socialContribution_Info3_UintButton.Height = Application.GetRealWidth(25);
+            }
+#if __IOS__
+            socialContribution_Info3_ValuesButton.Width += Application.GetRealWidth(6);
+            socialContribution_Info3_UintButton.X = socialContribution_Info3_ValuesButton.Right - Application.GetRealWidth(4);
+#else
+            socialContribution_Info3_UintButton.X = socialContribution_Info3_ValuesButton.Right +Application.GetRealWidth(2);
+#endif
+        }
+    }
+}
+
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Acst/WaterHeaterJinmaoPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Acst/WaterHeaterJinmaoPage.cs
new file mode 100644
index 0000000..fe07f72
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Acst/WaterHeaterJinmaoPage.cs
@@ -0,0 +1,1380 @@
+锘縰sing System;
+using System.Collections.Generic;
+using com.hdl.on;
+using HDL_ON.DriverLayer;
+using HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI
+{
+    public class WaterHeaterJinmaoPage : FrameLayout
+    {
+        static WaterHeaterJinmaoPage bodyView;
+        VerticalScrolViewLayout contentView;
+        FrameLayout bottomView;
+        Function function;
+
+
+        /// <summary>
+        /// 鐑按妯″紡鐘舵�佸尯鍩�
+        /// </summary>
+        FrameLayout modeFreeView;
+        /// <summary>
+        /// 鐑按妯″紡鐘舵�佸浘鏍�
+        /// </summary>
+        Button modeFree_IconButton;
+        /// <summary>
+        /// 鐑按妯″紡鐘舵�佹枃鏈�
+        /// </summary>
+        Button modeFree_TextButton;
+        /// <summary>
+        /// 鐑按娓╁害鍊�
+        /// </summary>
+        Button btnTempValues;
+        /// <summary>
+        /// 鐑按娓╁害鍗曚綅
+        /// </summary>
+        Button btnTempValuesUint;
+        /// <summary>
+        /// 鑺傝兘妯″紡鎺у埗鎸夐挳
+        /// </summary>
+        Button btnControlModeEconomic;
+        /// <summary>
+        /// 鑺傝兘妯″紡鎺у埗鍖哄煙
+        /// </summary>
+        FrameLayout mode_EconomicView;
+        /// <summary>
+        /// 鑺傝兘妯″紡鍥炬爣鎸夐挳
+        /// </summary>
+        Button mode_Economic_IconButton;
+        /// <summary>
+        /// 鑺傝兘妯″紡鏂囨湰鎸夐挳
+        /// </summary>
+        Button mode_Economic_TextButton;
+        /// <summary>
+        /// 閫熺儹妯″紡鎺у埗鎸夐挳
+        /// </summary>
+        Button btnControlModeQuickHeat;
+        /// <summary>
+        /// 閫熺儹妯″紡鎺у埗鍖哄煙
+        /// </summary>
+        FrameLayout mode_QuickHeatView;
+        /// <summary>
+        /// 閫熺儹妯″紡鍥炬爣鎸夐挳
+        /// </summary>
+        Button mode_QuickHeat_IconButton;
+        /// <summary>
+        /// 閫熺儹妯″紡鏂囨湰鎸夐挳
+        /// </summary>
+        Button mode_QuickHeat_TextButton;
+        /// <summary>
+        /// 璁剧疆娓╁害鏂囨湰鎸夐挳
+        /// </summary>
+        Button setTemp_ValuesButton;
+        /// <summary>
+        /// 璁剧疆娓╁害鍗曚綅鎸夐挳
+        /// </summary>
+        Button setTemp_UintButton;
+        /// <summary>
+        /// 璁剧疆娓╁害鎺у埗鎺т欢
+        /// </summary>
+        DiyImageSeekBar setTemp_Bar;
+        /// <summary>
+        /// 鐑按娴侀噺鏁版嵁鎸夐挳
+        /// </summary>
+        Button flow_ValuesButton;
+        /// <summary>
+        /// 鐑按鎬绘祦閲忔暟鎹寜閽�
+        /// </summary>
+        Button flow_VolumeButton;
+        /// <summary>
+        /// 鐑按娴侀噺姣旀帶浠�
+        /// </summary>
+        DiyImageSeekBar flow_ValuesBar;
+        /// <summary>
+        /// 鐑洖鏀剁櫨鍒嗘瘮鏁版嵁鎸夐挳
+        /// </summary>
+        Button flow_HeatRecoveryProgressButton;
+        /// <summary>
+        /// 鐑洖鏀舵暟鎹寜閽�
+        /// </summary>
+        Button flow_HeatRecoverytValuesButton;
+        /// <summary>
+        /// 鐢电洿椹辩櫨鍒嗘瘮鏁版嵁鎸夐挳
+        /// </summary>
+        Button flow_ElectricDriveProgressButton;
+        /// <summary>
+        /// 鐢电洿椹辨暟鎹寜閽�
+        /// </summary>
+        Button flow_ElectricDriveValuesButton;
+        string volumeString = string.Empty;
+        string recyclVolumeString = string.Empty;
+        double volume = 0.00;
+        double recyclVolume = 0.00;
+        int recyclVolumePercent = 0;
+
+        /// <summary>
+        /// 鐑洖鏀惰妭鐢甸噺鏁版嵁鎸夐挳
+        /// </summary>
+        Button socialContribution_Info1_ValuesButton;
+        /// <summary>
+        /// 鐑洖鏀惰妭鐢甸噺鍗曚綅鎸夐挳
+        /// </summary>
+        Button socialContribution_Info1_UintButton;
+        /// <summary>
+        /// CO2鍑忔帓閲忔暟鎹寜閽�
+        /// </summary>
+        Button socialContribution_Info2_ValuesButton;
+        /// <summary>
+        /// CO2鍑忔帓閲忓崟浣嶆寜閽�
+        /// </summary>
+        Button socialContribution_Info2_UintButton;
+        /// <summary>
+        /// 绛夋晥妞嶆爲閲忔暟鎹寜閽�
+        /// </summary>
+        Button socialContribution_Info3_UintButton;
+        /// <summary>
+        /// 绛夋晥妞嶆爲閲忓崟浣嶆寜閽�
+        /// </summary>
+        Button socialContribution_Info3_ValuesButton;
+        /// <summary>
+        /// 寮�鍏虫寜閽�
+        /// </summary>
+        Button btnPowerControl;
+
+        public WaterHeaterJinmaoPage(Function deviceFunction)
+        {
+            bodyView = this;
+            function = deviceFunction;
+            this.BackgroundColor = CSS_Color.BackgroundColor;
+        }
+
+        public void LoadPage(Action action)
+        {
+
+            var topView = new TopViewDiv(bodyView, function.name);
+            topView.LoadTopView_FunctionTop(function, action);
+
+            contentView = new VerticalScrolViewLayout()
+            {
+                Y = topView.contentView.Height,
+                Height = Application.GetRealHeight(Application.DesignHeight - 94 - 5) - topView.contentView.Height,
+            };
+            bodyView.AddChidren(contentView);
+
+            bottomView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(Application.DesignHeight - 94),
+                Height = Application.GetRealHeight(94 + 16),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealHeight(16),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            bodyView.AddChidren(bottomView);
+
+            initContentView();
+            initBottomView();
+            initControlEvent();
+
+            UpdateStatus();
+
+            Control.Ins.SendReadCommand(function);
+        }
+        /// <summary>
+        /// 鍔犺浇鍐呭鍖哄煙
+        /// </summary>
+        private void initContentView()
+        {
+            contentView.AddChidren(new Button() { Height = Application.GetRealHeight(16) });
+
+            #region 鐑按鍣ㄧ姸鎬�
+            FrameLayout infoView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(181),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealHeight(12),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            contentView.AddChidren(infoView);
+
+            modeFreeView = new FrameLayout()
+            {
+                X = 0 - Application.GetRealWidth(14),
+                Y = Application.GetRealWidth(12),
+                Width = Application.GetRealWidth(82 + 14),
+                Height = Application.GetRealWidth(28),
+                BackgroundColor = 0x15FC9C04,
+                Radius = (uint)Application.GetRealWidth(14),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            infoView.AddChidren(modeFreeView);
+
+            modeFree_IconButton = new Button()
+            {
+                X = Application.GetRealWidth(8 + 14),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetRealWidth(12),
+                Height = Application.GetRealWidth(12),
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/ModeFree_False.png",
+            };
+            modeFreeView.AddChidren(modeFree_IconButton);
+
+            modeFree_TextButton = new Button()
+            {
+                X = Application.GetRealWidth(8 + 14 + 4 + 12),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = 14,
+                TextColor = 0xFFFC9C04,
+                Text = "鐢ㄧ數",
+            };
+            modeFreeView.AddChidren(modeFree_TextButton);
+
+            var infoView_Temp_View = new FrameLayout()
+            {
+                Gravity = Gravity.Center,
+                Width = Application.GetRealWidth(133),
+                Height = Application.GetRealWidth(133),
+                BackgroundImagePath = "FunctionIcon/Acst/WaterHeater/TempBg.png"
+            };
+            infoView.AddChidren(infoView_Temp_View);
+
+            btnTempValues = new Button()
+            {
+                Y = Application.GetRealWidth(34),
+                Gravity = Gravity.CenterVertical,
+                Height = Application.GetRealWidth(43),
+                IsBold = true,
+                TextSize = 32,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.TopCenter,
+                Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.temp.ToString(), "---"),
+            };
+            btnTempValues.Width = btnTempValues.GetTextWidth() + Application.GetRealWidth(6);
+            if (btnTempValues.Width > Application.GetRealWidth(80))
+            {
+                btnTempValues.TextSize = 28;
+            }
+            btnTempValues.Gravity = Gravity.CenterHorizontal;
+
+            infoView_Temp_View.AddChidren(btnTempValues);
+
+            btnTempValuesUint = new Button()
+            {
+                X = btnTempValues.Right,
+                Y = Application.GetRealWidth(40),
+                Height = Application.GetRealWidth(66),
+                TextAlignment = TextAlignment.TopLeft,
+                Width = Application.GetRealWidth(30),
+                TextSize = 10,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Text = "掳C"
+            };
+            infoView_Temp_View.AddChidren(btnTempValuesUint);
+
+            var infoView_Temp_Text = new Button()
+            {
+                Y = Application.GetRealWidth(80),
+                Height = Application.GetRealWidth(23),
+                TextAlignment = TextAlignment.Center,
+                TextSize = 12,
+                TextColor = 0xFF798394,
+                Text = "鐑按娓╁害"
+            };
+            infoView_Temp_View.AddChidren(infoView_Temp_Text);
+
+            var infoView_HistoryButton = new Button();
+            infoView_Temp_View.AddChidren(infoView_HistoryButton);
+            infoView_HistoryButton.MouseUpEventHandler = (sender, e) =>
+            {
+                var page = new WetarHeaterJinmaoHistoryPage(function);
+                MainPage.BasePageView.AddChidren(page);
+                page.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
+
+            #endregion
+
+            #region 鐑按鍣ㄦā寮�
+            var modeView = new HorizontalScrolViewLayout()
+            {
+                Height = Application.GetRealHeight(76),
+                ScrollEnabled = false,
+            };
+            contentView.AddChidren(modeView);
+
+            modeView.AddChidren(new Button()
+            {
+                Width = Application.GetRealWidth(16),
+            });
+            //鑺傝兘
+            mode_EconomicView = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(165),
+                Height = Application.GetRealWidth(52),
+                Gravity = Gravity.CenterVertical,
+                Radius = (uint)Application.GetRealHeight(12),
+                BorderColor = 0xFF00C22D,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                BackgroundColor = 0xFFEBFAEE
+            };
+            modeView.AddChidren(mode_EconomicView);
+
+            mode_Economic_IconButton = new Button()
+            {
+                Width = Application.GetRealWidth(20),
+                Height = Application.GetRealWidth(20),
+                X = Application.GetRealWidth(53),
+                Gravity = Gravity.CenterVertical,
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png"
+            };
+            mode_EconomicView.AddChidren(mode_Economic_IconButton);
+
+            mode_Economic_TextButton = new Button()
+            {
+                Width = Application.GetRealWidth(80),
+                X = Application.GetRealWidth(73 + 8),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = 16,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Text = "鑺傝兘",
+            };
+            mode_EconomicView.AddChidren(mode_Economic_TextButton);
+
+            modeView.AddChidren(new Button()
+            {
+                Width = Application.GetRealWidth(13),
+            });
+
+            btnControlModeEconomic = new Button();
+            mode_EconomicView.AddChidren(btnControlModeEconomic);
+
+
+            //閫熺儹
+            mode_QuickHeatView = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(165),
+                Height = Application.GetRealWidth(52),
+                Gravity = Gravity.CenterVertical,
+                Radius = (uint)Application.GetRealHeight(12),
+                BorderColor = 0x0000C22D,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            modeView.AddChidren(mode_QuickHeatView);
+
+            mode_QuickHeat_IconButton = new Button()
+            {
+                Width = Application.GetRealWidth(20),
+                Height = Application.GetRealWidth(20),
+                X = Application.GetRealWidth(53),
+                Gravity = Gravity.CenterVertical,
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png"
+            };
+            mode_QuickHeatView.AddChidren(mode_QuickHeat_IconButton);
+
+
+            mode_QuickHeat_TextButton = new Button()
+            {
+                Width = Application.GetRealWidth(80),
+                X = Application.GetRealWidth(81),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = 16,
+                TextColor = CSS_Color.TextualColor,
+                Text = "閫熺儹"
+            };
+            mode_QuickHeatView.AddChidren(mode_QuickHeat_TextButton);
+
+            btnControlModeQuickHeat = new Button();
+            mode_QuickHeatView.AddChidren(btnControlModeQuickHeat);
+
+            #endregion
+
+            #region 娓╁害璁剧疆
+            var setTempView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealWidth(168),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealHeight(12),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            contentView.AddChidren(setTempView);
+
+            var setTemp_TextButtont = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(200),
+                Height = Application.GetRealHeight(23),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = 16,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                IsBold = true,
+                Text = "娓╁害璁剧疆",
+            };
+            setTempView.AddChidren(setTemp_TextButtont);
+
+            setTemp_ValuesButton = new Button()
+            {
+                Y = Application.GetRealWidth(34),
+                Gravity = Gravity.CenterVertical,
+                Height = Application.GetRealWidth(43),
+                IsBold = true,
+                TextSize = 32,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.TopCenter,
+                Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.set_temp.ToString(), "---"),
+            };
+            setTemp_ValuesButton.Width = setTemp_ValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+            setTemp_ValuesButton.Gravity = Gravity.CenterHorizontal;
+            setTempView.AddChidren(setTemp_ValuesButton);
+
+            setTemp_UintButton = new Button()
+            {
+                X = setTemp_ValuesButton.Right - Application.GetRealWidth(4),
+                Y = Application.GetRealWidth(40),
+                Height = Application.GetRealWidth(66),
+                TextAlignment = TextAlignment.TopLeft,
+                Width = Application.GetRealWidth(30),
+                TextSize = 10,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Text = "掳C"
+            };
+            setTempView.AddChidren(setTemp_UintButton);
+
+
+            int setTempValue = 0;
+            string setTempStr = "--";
+            double dd = 0;
+            double.TryParse(function.GetAttrState(WaterHeaterJinmao_AttrEnum.set_temp.ToString(), "--"), out dd);
+            setTempValue = Convert.ToInt32(dd);
+            setTemp_Bar = new DiyImageSeekBar()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(126 - 72),
+                Width = Application.GetRealWidth(Application.DesignWidth - 32),
+                Height = Application.GetRealHeight(72),
+                SeekBarViewHeight = Application.GetRealHeight(14),
+                ThumbImagePath = "FunctionIcon/Acst/ThumbImage.png",
+                ThumbImageHeight = Application.GetRealHeight(51),
+                ProgressBarColor =  0xFFFFB848 ,
+                MaxValue = 60,
+                MinValue = 35,
+                Progress = setTempValue,
+                SeekBarPadding = Application.GetRealWidth(20),
+                IsProgressTextShow = false,
+            };
+            setTemp_Bar.ProgressChangeDelayTime = 0;
+            setTempView.AddChidren(setTemp_Bar);
+
+            var setTemp_Temp_MinValuesTextButton = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealWidth(130),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(26),
+                Text = "35掳C",
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = 0xFF7C8590,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            };
+            setTempView.AddChidren(setTemp_Temp_MinValuesTextButton);
+
+            var setTemp_Temp_MaxValuesTextButton = new Button()
+            {
+                X = Application.GetRealWidth(343 - 116),
+                Y = Application.GetRealWidth(130),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealWidth(26),
+                Text = "60掳C",
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = 0xFF7C8590,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            };
+            setTempView.AddChidren(setTemp_Temp_MaxValuesTextButton);
+            #endregion
+
+
+            #region flow 鐑按娴侀噺
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.flow.ToString()) != null)
+            {
+                contentView.AddChidren(new Button()
+                {
+                    Height = Application.GetRealWidth(12),
+                });
+
+                #region flow 鐑按娴侀噺
+                var flowView = new FrameLayout()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Width = Application.GetRealWidth(343),
+                    Height = Application.GetRealWidth(186),
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                    Radius = (uint)Application.GetRealHeight(12),
+                    BorderColor = 0x00FFFFFF,
+                    BorderWidth = 0,
+                };
+                contentView.AddChidren(flowView);
+
+                flow_ValuesButton = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Y = Application.GetRealWidth(14),
+                    Width = Application.GetRealWidth(200),
+                    Height = Application.GetRealWidth(25),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = 16,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    Text = "鐑按娴侀噺锛�" + function.GetAttrState(WaterHeaterJinmao_AttrEnum.flow.ToString()) + "L/min",
+                    IsBold = true,
+                };
+                flowView.AddChidren(flow_ValuesButton);
+
+                var flow_HotWaterVolumeTextButton = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Y = Application.GetRealWidth(55),
+                    Width = Application.GetRealWidth(100),
+                    Height = Application.GetRealWidth(20),
+                    Text = "鐑按閲�",
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                flowView.AddChidren(flow_HotWaterVolumeTextButton);
+
+                string volumeString = function.GetAttrState(WaterHeaterJinmao_AttrEnum.volume.ToString());
+                string recyclVolumeString = function.GetAttrState(WaterHeaterJinmao_AttrEnum.recycl_volume.ToString());
+                double volume = 0;
+                double.TryParse(volumeString, out volume);
+                double recyclVolume = 0;
+                double.TryParse(recyclVolumeString, out recyclVolume);
+                int recyclVolumePercent = (int)(recyclVolume / volume * 100);
+
+
+                flow_VolumeButton = new Button()
+                {
+                    X = Application.GetRealWidth(343 - 116),
+                    Y = Application.GetRealWidth(55),
+                    Width = Application.GetRealWidth(100),
+                    Height = Application.GetRealWidth(26),
+                    Text = volumeString + "t",
+                    TextAlignment = TextAlignment.CenterRight,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                flowView.AddChidren(flow_VolumeButton);
+
+
+                flow_ValuesBar = new DiyImageSeekBar()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Y = Application.GetRealWidth(79),
+                    Width = Application.GetRealWidth(Application.DesignWidth - 64),
+                    Height = Application.GetRealHeight(8),
+                    SeekBarViewHeight = Application.GetRealHeight(8),
+                    ThumbImageHeight = Application.GetRealHeight(0),
+                    ProgressBarColor = 0xFF42D163,
+                    SeekBarBackgroundColor = 0xFFFFB848,
+                    MaxValue = 100,
+                    Progress = recyclVolumePercent,
+                    SeekBarPadding = Application.GetRealWidth(0),
+                    IsProgressTextShow = false,
+                    ProgressChangeDelayTime = 0,
+                    Enable = false,
+                    IsClickable = false,
+                };
+                flowView.AddChidren(flow_ValuesBar);
+
+                var flow_HeatRecoveryCapacitytTextButton = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Y = Application.GetRealWidth(103),
+                    Width = Application.GetRealWidth(100),
+                    Height = Application.GetRealWidth(20),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = 14,
+                    TextColor = 0xFF00C22D,
+                    Text = "鐑洖鏀堕噺"
+                };
+                flowView.AddChidren(flow_HeatRecoveryCapacitytTextButton);
+
+                flow_HeatRecoveryProgressButton = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Y = Application.GetRealWidth(125),
+                    Width = Application.GetRealWidth(100),
+                    Height = Application.GetRealWidth(22),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = 14,
+                    TextColor = 0xFF00C22D,
+                    Text = recyclVolumePercent + "%"
+                };
+                flowView.AddChidren(flow_HeatRecoveryProgressButton);
+
+                flow_HeatRecoverytValuesButton = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Y = Application.GetRealWidth(148),
+                    Width = Application.GetRealWidth(100),
+                    Height = Application.GetRealWidth(22),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = 14,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    Text = recyclVolume + "t"
+                };
+                flowView.AddChidren(flow_HeatRecoverytValuesButton);
+
+                var flow_ElectricDriveTextButton = new Button()
+                {
+                    X = Application.GetRealWidth(343 - 116),
+                    Y = Application.GetRealWidth(103),
+                    Width = Application.GetRealWidth(100),
+                    Height = Application.GetRealWidth(20),
+                    TextAlignment = TextAlignment.CenterRight,
+                    TextSize = 14,
+                    TextColor = 0xFFFC9C04,
+                    Text = "鐢电洿椹遍噺",
+                };
+                flowView.AddChidren(flow_ElectricDriveTextButton);
+
+                flow_ElectricDriveProgressButton = new Button()
+                {
+                    X = Application.GetRealWidth(343 - 116),
+                    Y = Application.GetRealWidth(125),
+                    Width = Application.GetRealWidth(100),
+                    Height = Application.GetRealWidth(22),
+                    TextAlignment = TextAlignment.CenterRight,
+                    TextSize = 14,
+                    TextColor = 0xFFFC9C04,
+                    Text = "0%"
+                };
+                if (volume > 0)
+                {
+                    flow_ElectricDriveProgressButton.Text = (100 - recyclVolumePercent) + "%";
+                }
+                flowView.AddChidren(flow_ElectricDriveProgressButton);
+
+                flow_ElectricDriveValuesButton = new Button()
+                {
+                    X = Application.GetRealWidth(343 - 116),
+                    Y = Application.GetRealWidth(148),
+                    Width = Application.GetRealWidth(100),
+                    Height = Application.GetRealWidth(22),
+                    TextAlignment = TextAlignment.CenterRight,
+                    TextSize = 14,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    Text = (volume - recyclVolume) + "t"
+                };
+                flowView.AddChidren(flow_ElectricDriveValuesButton);
+
+                #endregion
+            }
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(8)
+            });
+            #endregion
+
+            #region 绀句細璐$尞 Social contribution
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.energy_electricity.ToString()) != null
+                && function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.co2.ToString()) != null
+                && function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.trees.ToString()) != null)
+            {
+                contentView.AddChidren(new Button()
+                {
+                    Height = Application.GetRealWidth(46),
+                    Width = Application.GetRealWidth(100),
+                    X = Application.GetRealWidth(16),
+                    Text = "绀句細璐$尞",
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = 16,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    IsBold = true
+                });
+
+                var socialContributionView = new HorizontalScrolViewLayout()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Width = Application.GetRealWidth(343),
+                    Height = Application.GetRealHeight(142),
+                    ScrollEnabled = false,
+                };
+                contentView.AddChidren(socialContributionView);
+                if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.energy_electricity.ToString()) != null)
+                {
+                    #region 鐑洖鏀惰妭鐢甸噺
+                    var socialContribution_InfoView_1 = new FrameLayout()
+                    {
+                        Width = Application.GetRealWidth(109),
+                        Height = Application.GetRealWidth(130),
+                        BackgroundImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_1.png"
+                    };
+                    socialContributionView.AddChidren(socialContribution_InfoView_1);
+
+                    var socialContribution_Info1_IconButton = new Button()
+                    {
+                        X = Application.GetRealWidth(12),
+                        Y = Application.GetRealWidth(16),
+                        Width = Application.GetRealWidth(36),
+                        Height = Application.GetRealWidth(36),
+                        UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_1.png"
+                    };
+                    socialContribution_InfoView_1.AddChidren(socialContribution_Info1_IconButton);
+
+                    socialContribution_Info1_ValuesButton = new Button()
+                    {
+                        X = Application.GetRealWidth(12),
+                        Y = Application.GetRealWidth(68),
+                        Width = Application.GetRealWidth(36),
+                        Height = Application.GetRealWidth(25),
+                        Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.energy_electricity.ToString()),
+                        TextSize = 18,
+                        TextColor = CSS_Color.FirstLevelTitleColor,
+                        TextAlignment = TextAlignment.BottomLeft,
+                        IsBold = true,
+                    };
+                    socialContribution_Info1_ValuesButton.Width = socialContribution_Info1_ValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+                    socialContribution_InfoView_1.AddChidren(socialContribution_Info1_ValuesButton);
+
+                    socialContribution_Info1_UintButton = new Button()
+                    {
+                        X = socialContribution_Info1_ValuesButton.Right,
+                        Y = Application.GetRealWidth(68),
+                        Width = Application.GetRealWidth(50),
+                        Height = Application.GetRealWidth(23),
+                        Text = "kwh",
+                        TextSize = 12,
+                        TextColor = CSS_Color.FirstLevelTitleColor,
+                        TextAlignment = TextAlignment.BottomLeft,
+                    };
+                    socialContribution_InfoView_1.AddChidren(socialContribution_Info1_UintButton);
+
+                    var socialContribution_Info1_TipButton = new Button()
+                    {
+                        X = Application.GetRealWidth(12),
+                        Y = Application.GetRealWidth(98),
+                        Width = Application.GetRealWidth(100),
+                        Height = Application.GetRealWidth(17),
+                        Text = "鐑洖鏀惰妭鐢甸噺",
+                        TextSize = 12,
+                        TextColor = 0xFF798394,
+                        TextAlignment = TextAlignment.CenterLeft,
+                    };
+                    socialContribution_InfoView_1.AddChidren(socialContribution_Info1_TipButton);
+                    #endregion
+
+                    socialContributionView.AddChidren(new Button()
+                    {
+                        Width = Application.GetRealWidth(8),
+                    });
+                }
+                if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.co2.ToString()) != null)
+                {
+                    #region CO2鍑忔帓閲�
+                    var socialContribution_InfoView_2 = new FrameLayout()
+                    {
+                        Width = Application.GetRealWidth(109),
+                        Height = Application.GetRealWidth(130),
+                        BackgroundImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_2.png"
+                    };
+                    socialContributionView.AddChidren(socialContribution_InfoView_2);
+
+                    var socialContribution_Info2_IconButton = new Button()
+                    {
+                        X = Application.GetRealWidth(12),
+                        Y = Application.GetRealWidth(16),
+                        Width = Application.GetRealWidth(36),
+                        Height = Application.GetRealWidth(36),
+                        UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_2.png"
+                    };
+                    socialContribution_InfoView_2.AddChidren(socialContribution_Info2_IconButton);
+
+                    socialContribution_Info2_ValuesButton = new Button()
+                    {
+                        X = Application.GetRealWidth(12),
+                        Y = Application.GetRealWidth(68),
+                        Width = Application.GetRealWidth(36),
+                        Height = Application.GetRealWidth(25),
+                        Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.co2.ToString()),
+                        TextSize = 18,
+                        TextColor = CSS_Color.FirstLevelTitleColor,
+                        TextAlignment = TextAlignment.BottomLeft,
+                        IsBold = true,
+                    };
+                    socialContribution_Info2_ValuesButton.Width = socialContribution_Info2_ValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+                    socialContribution_InfoView_2.AddChidren(socialContribution_Info2_ValuesButton);
+
+
+                    socialContribution_Info2_UintButton = new Button()
+                    {
+                        X = socialContribution_Info2_ValuesButton.Right,
+                        Y = Application.GetRealWidth(68),
+                        Width = Application.GetRealWidth(50),
+                        Height = Application.GetRealWidth(23),
+                        Text = "鍚�",
+                        TextSize = 12,
+                        TextColor = CSS_Color.FirstLevelTitleColor,
+                        TextAlignment = TextAlignment.BottomLeft,
+                    };
+#if __IOS__
+            socialContribution_Info2_UintButton.Y = Application.GetRealWidth(66);
+#endif
+                    socialContribution_InfoView_2.AddChidren(socialContribution_Info2_UintButton);
+
+                    var socialContribution_Info2_TipButton = new Button()
+                    {
+                        X = Application.GetRealWidth(12),
+                        Y = Application.GetRealWidth(98),
+                        Width = Application.GetRealWidth(100),
+                        Height = Application.GetRealWidth(17),
+                        Text = "CO2鍑忔帓閲�",
+                        TextSize = 12,
+                        TextColor = 0xFF798394,
+                        TextAlignment = TextAlignment.CenterLeft,
+                    };
+                    socialContribution_InfoView_2.AddChidren(socialContribution_Info2_TipButton);
+                    #endregion
+
+                    socialContributionView.AddChidren(new Button()
+                    {
+                        Width = Application.GetRealWidth(8),
+                    });
+                }
+                if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.trees.ToString()) != null)
+                {
+                    #region 绛夋晥妞嶆爲閲�
+                    var socialContribution_InfoView_3 = new FrameLayout()
+                    {
+                        Width = Application.GetRealWidth(109),
+                        Height = Application.GetRealWidth(130),
+                        BackgroundImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoBg_3.png"
+                    };
+                    socialContributionView.AddChidren(socialContribution_InfoView_3);
+
+                    var socialContribution_Info3_IconButton = new Button()
+                    {
+                        X = Application.GetRealWidth(12),
+                        Y = Application.GetRealWidth(16),
+                        Width = Application.GetRealWidth(36),
+                        Height = Application.GetRealWidth(36),
+                        UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/SocialContributionInfoIcon_3.png"
+                    };
+                    socialContribution_InfoView_3.AddChidren(socialContribution_Info3_IconButton);
+
+                    socialContribution_Info3_ValuesButton = new Button()
+                    {
+                        X = Application.GetRealWidth(12),
+                        Y = Application.GetRealWidth(68),
+                        Width = Application.GetRealWidth(36),
+                        Height = Application.GetRealWidth(25),
+                        Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.trees.ToString()),
+                        TextSize = 18,
+                        TextColor = CSS_Color.FirstLevelTitleColor,
+                        TextAlignment = TextAlignment.BottomLeft,
+                        IsBold = true,
+                    };
+                    socialContribution_Info3_ValuesButton.Width = socialContribution_Info3_ValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+                    socialContribution_InfoView_3.AddChidren(socialContribution_Info3_ValuesButton);
+
+                    socialContribution_Info3_UintButton = new Button()
+                    {
+                        X = socialContribution_Info3_ValuesButton.Right,
+                        Y = Application.GetRealWidth(68),
+                        Width = Application.GetRealWidth(50),
+                        Height = Application.GetRealWidth(23),
+                        Text = "妫�",
+                        TextSize = 12,
+                        TextColor = CSS_Color.FirstLevelTitleColor,
+                        TextAlignment = TextAlignment.BottomLeft,
+                    };
+#if __IOS__
+            socialContribution_Info3_UintButton.Y = Application.GetRealWidth(66);
+#endif
+                    socialContribution_InfoView_3.AddChidren(socialContribution_Info3_UintButton);
+
+                    var socialContribution_Info3_TipButton = new Button()
+                    {
+                        X = Application.GetRealWidth(12),
+                        Y = Application.GetRealWidth(98),
+                        Width = Application.GetRealWidth(100),
+                        Height = Application.GetRealWidth(17),
+                        Text = "绛夋晥妞嶆爲閲�",
+                        TextSize = 12,
+                        TextColor = 0xFF798394,
+                        TextAlignment = TextAlignment.CenterLeft,
+                    };
+                    socialContribution_InfoView_3.AddChidren(socialContribution_Info3_TipButton);
+                    #endregion
+                }
+            }
+
+
+            #endregion
+
+
+        }
+        /// <summary>
+        /// 鍔犺浇搴曢儴鍖哄煙
+        /// </summary>
+        private void initBottomView()
+        {
+            btnPowerControl = new Button()
+            {
+                Width = Application.GetRealWidth(50),
+                Height = Application.GetRealWidth(50),
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(16),
+                SelectedImagePath = "FunctionIcon/Acst/orange/PowerIcon.png",
+                UnSelectedImagePath = "FunctionIcon/Acst/grey/PowerOffIcon.png",
+                IsSelected = function.trait_on_off.curValue.ToString() == "on"
+            };
+            bottomView.AddChidren(btnPowerControl);
+
+            btnPowerControl.MouseUpEventHandler = (sender, e) =>
+            {
+                btnPowerControl.IsSelected = !btnPowerControl.IsSelected;
+
+                new System.Threading.Thread(() =>
+                {
+                    Dictionary<string, string> d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.OnOff, btnPowerControl.IsSelected ? "on" : "off");
+                    Control.Ins.SendWriteCommand(function, d);
+                })
+                { IsBackground = true }.Start();
+            };
+
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶鍒朵簨浠�
+        /// </summary>
+        private void initControlEvent()
+        {
+            //鑺傝兘妯″紡鎺у埗
+            btnControlModeEconomic.MouseUpEventHandler = (sender, e) =>
+            {
+                new System.Threading.Thread(() =>
+                {
+                    var dic = new Dictionary<string, string>();
+                    dic.Add(WaterHeaterJinmao_AttrEnum.mode.ToString(), WaterHeaterJinmao_Attr_ModeEnum.economic.ToString());
+                    Control.Ins.SendWriteCommand(function, dic);
+                    function.SetAttrState(WaterHeaterJinmao_AttrEnum.mode.ToString(), WaterHeaterJinmao_Attr_ModeEnum.economic.ToString());
+                    Application.RunOnMainThread(() =>
+                    {
+                        updateModeUI();
+                    });
+                })
+                { IsBackground = true }.Start();
+            };
+            //閫熺儹妯″紡鎺у埗
+            btnControlModeQuickHeat.MouseUpEventHandler = (sender, e) =>
+            {
+                new System.Threading.Thread(() =>
+                {
+                    var dic = new Dictionary<string, string>();
+                    dic.Add(WaterHeaterJinmao_AttrEnum.mode.ToString(), WaterHeaterJinmao_Attr_ModeEnum.quick_heat.ToString());
+                    Control.Ins.SendWriteCommand(function, dic);
+                    function.SetAttrState(WaterHeaterJinmao_AttrEnum.mode.ToString(), WaterHeaterJinmao_Attr_ModeEnum.quick_heat.ToString());
+                    Application.RunOnMainThread(() =>
+                    {
+                        updateModeUI();
+                    });
+                })
+                { IsBackground = true }.Start();
+            };
+            setTemp_Bar.OnStartTrackingTouchEvent = (sender, e) =>
+            {
+                contentView.ScrollEnabled = false;
+            };
+            //璁剧疆娓╁害璋冭妭
+            setTemp_Bar.OnStopTrackingTouchEvent = (sender, e) =>
+            {
+                contentView.ScrollEnabled = true;
+#if __IOS__
+                setTemp_ValuesButton.Width = setTemp_ValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+#else
+                setTemp_ValuesButton.Width = setTemp_ValuesButton.GetTextWidth();
+#endif
+                setTemp_ValuesButton.Gravity = Gravity.CenterHorizontal;
+
+#if __IOS__
+                setTemp_UintButton.X = setTemp_ValuesButton.Right - Application.GetRealWidth(4);
+#else
+                setTemp_UintButton.X = setTemp_ValuesButton.Right + Application.GetRealWidth(4);
+#endif
+                new System.Threading.Thread(() =>
+                {
+                    var dic = new Dictionary<string, string>();
+                    dic.Add(WaterHeaterJinmao_AttrEnum.set_temp.ToString(), setTemp_Bar.Progress.ToString());
+                    Control.Ins.SendWriteCommand(function, dic);
+                    function.SetAttrState(WaterHeaterJinmao_AttrEnum.set_temp.ToString(), setTemp_Bar.Progress.ToString());
+                })
+                { IsBackground = true }.Start();
+            };
+            setTemp_Bar.OnProgressChangedEvent = (sender, e) => {
+                setTemp_ValuesButton.Text = e.ToString();
+            };
+
+            //寮�鍏虫帶鍒�
+            btnPowerControl.MouseUpEventHandler = (sender, e) =>
+            {
+                btnPowerControl.IsSelected = !btnPowerControl.IsSelected;
+                function.SetAttrState(FunctionAttributeKey.OnOff.ToString(), btnPowerControl.IsSelected ? "on" : "off");
+
+                new System.Threading.Thread(() =>
+                {
+                    var dic = new Dictionary<string, string>();
+                    dic.Add(FunctionAttributeKey.OnOff.ToString(), function.GetAttrState(FunctionAttributeKey.OnOff.ToString()));
+                    Control.Ins.SendWriteCommand(function, dic);
+                })
+                { IsBackground = true }.Start();
+            };
+        }
+
+
+        /// <summary>
+        /// 鏇存柊鐣岄潰鐘舵��
+        /// </summary>
+        /// <param name="temp"></param>
+        public static void UpdateStatus()
+        {
+            if (bodyView == null)
+            {
+                return;
+            }
+            //鍏嶈垂鐑按
+            Application.RunOnMainThread(() =>
+            {
+                try
+                {
+                    bodyView.updateFreeMode();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+                try
+                {
+                    bodyView.updateTemp();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+                try
+                {
+                    bodyView.updateModeUI();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+                try
+                {
+                    bodyView.updateSetTemp();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+                try
+                {
+                    bodyView.updateFlow();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+                try
+                {
+                    bodyView.updateVolume();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+                try
+                {
+                    bodyView.updateSocialContribution1();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+                try
+                {
+                    bodyView.updateSocialContribution2();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+                try
+                {
+                    bodyView.updateSocialContribution3();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+                try
+                {
+                    bodyView.updatePowerButton();
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鎺т欢鏇存柊寮傚父锛歿ex.Message}");
+                }
+            });
+        }
+
+        /// <summary>
+        /// 鏇存柊鍏嶈垂鐑按妯″紡鐘舵�乁I
+        /// </summary>
+        private void updateFreeMode()
+        {
+            if (function.GetAttrState(WaterHeaterJinmao_AttrEnum.mode_free.ToString()) == "true")
+            {
+                modeFreeView.BackgroundColor = 0x1500C22D;
+                modeFree_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/ModeFree_True.png";
+                modeFree_TextButton.Text = "鐑洖鏀�";
+                modeFree_TextButton.TextColor = 0xFF00C22D;
+            }
+            else
+            {
+                modeFreeView.BackgroundColor = 0x15FC9C04;
+                modeFree_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/ModeFree_False.png";
+                modeFree_TextButton.Text = "鐢ㄧ數";
+                modeFree_TextButton.TextColor = 0xFFFC9C04;
+            }
+        }
+        /// <summary>
+        /// 鏇存柊鐑按娓╁害UI
+        /// </summary>
+        private void updateTemp()
+        {
+            btnTempValues.Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.temp.ToString(), "---");
+#if __IOS__
+            btnTempValues.Width = btnTempValues.GetTextWidth() + Application.GetRealWidth(6);
+#else
+            btnTempValues.Width = btnTempValues.GetTextWidth();
+#endif
+            if (btnTempValues.Width > Application.GetRealWidth(80))
+            {
+                btnTempValues.TextSize = 28;
+            }
+            btnTempValues.Gravity = Gravity.CenterHorizontal;
+#if __IOS__
+            btnTempValuesUint.X = btnTempValues.Right - Application.GetRealWidth(4);
+#else
+            btnTempValuesUint.X = btnTempValues.Right ;
+#endif
+        }
+
+        /// <summary>
+        /// 鏇存柊妯″紡UI
+        /// </summary>
+        private void updateModeUI()
+        {
+            if (function.GetAttrState(WaterHeaterJinmao_AttrEnum.mode.ToString()) == WaterHeaterJinmao_Attr_ModeEnum.economic.ToString())
+            {
+                //鑺傝兘
+                mode_EconomicView.BorderColor = 0xFF00C22D;
+                mode_EconomicView.BackgroundColor = 0xFFEBFAEE;
+                mode_Economic_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/Mode_Economic_On.png";
+                mode_Economic_TextButton.TextColor = CSS_Color.FirstLevelTitleColor;
+
+                //閫熺儹
+                mode_QuickHeatView.BorderColor = 0x0000C22D;
+                mode_QuickHeatView.BorderWidth = (uint)Application.GetRealWidth(1);
+                mode_QuickHeatView.BackgroundColor = CSS_Color.MainBackgroundColor;
+                mode_QuickHeat_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/Mode_QuickHeat.png";
+                mode_QuickHeat_TextButton.TextColor = CSS_Color.TextualColor;
+            }
+            else if (function.GetAttrState(WaterHeaterJinmao_AttrEnum.mode.ToString()) == WaterHeaterJinmao_Attr_ModeEnum.quick_heat.ToString())
+            {
+                //鑺傝兘
+                mode_EconomicView.BorderColor = 0x0000C22D;
+                mode_EconomicView.BackgroundColor = CSS_Color.MainBackgroundColor;
+                mode_Economic_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/Mode_Economic.png";
+                mode_Economic_TextButton.TextColor = CSS_Color.TextualColor;
+
+                //閫熺儹
+                mode_QuickHeatView.BorderColor = 0xFFFC9C04;
+                mode_QuickHeatView.BackgroundColor = 0xFFFFF7EB;
+                mode_QuickHeat_IconButton.UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/Mode_QuickHeat_On.png";
+                mode_QuickHeat_TextButton.TextColor = CSS_Color.FirstLevelTitleColor;
+            }
+        }
+
+        /// <summary>
+        /// 鏇存柊鐑按鍣ㄨ缃俯搴I
+        /// </summary>
+        private void updateSetTemp()
+        {
+            setTemp_ValuesButton.Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.set_temp.ToString(), "---");
+#if __IOS__
+            setTemp_ValuesButton.Width = setTemp_ValuesButton.GetTextWidth() + Application.GetRealWidth(8);
+#else
+            setTemp_ValuesButton.Width = setTemp_ValuesButton.GetTextWidth();
+#endif
+            setTemp_ValuesButton.Gravity = Gravity.CenterHorizontal;
+
+#if __IOS__
+            setTemp_UintButton.X = setTemp_ValuesButton.Right - Application.GetRealWidth(4);
+#else
+            setTemp_UintButton.X = setTemp_ValuesButton.Right + Application.GetRealWidth(4);
+#endif
+
+            double dd = 35;
+            double.TryParse(function.GetAttrState(WaterHeaterJinmao_AttrEnum.set_temp.ToString(), "0"), out dd);
+            setTemp_Bar.Progress = Convert.ToInt32(dd);
+
+        }
+
+        /// <summary>
+        /// 鏇存柊鐑按娴侀噺鏁版嵁UI
+        /// </summary>
+        private void updateFlow()
+        {
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.flow.ToString()) != null)
+            {
+                flow_ValuesButton.Text = "鐑按娴侀噺锛�" + function.GetAttrState(WaterHeaterJinmao_AttrEnum.flow.ToString()) + "L/min";
+            }
+        }
+
+        /// <summary>
+        /// 鏇存柊鐑按鎬婚噺鏁版嵁UI
+        /// </summary>
+        private void updateVolume()
+        {
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.volume.ToString()) == null)
+            {
+                return;
+            }
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.recycl_volume.ToString()) == null)
+            {
+                return;
+            }
+            volumeString = function.GetAttrState(WaterHeaterJinmao_AttrEnum.volume.ToString());
+            recyclVolumeString = function.GetAttrState(WaterHeaterJinmao_AttrEnum.recycl_volume.ToString());
+            volume = 0;
+            double.TryParse(volumeString, out volume);
+            double.TryParse(recyclVolumeString, out recyclVolume);
+            recyclVolumePercent = (int)(recyclVolume / volume * 100);
+
+            flow_VolumeButton.Text = volumeString + "t";
+            flow_ValuesBar.Progress = recyclVolumePercent;
+            flow_HeatRecoveryProgressButton.Text = recyclVolumePercent + "%";
+            flow_HeatRecoverytValuesButton.Text = recyclVolume + "t";
+            if (volume > 0)
+            {
+                flow_ElectricDriveProgressButton.Text = ((int)(100 - recyclVolumePercent)) + "%";
+            }
+            flow_ElectricDriveValuesButton.Text = (((int)(volume * 100) - (int)(recyclVolume * 100)) / 100.0) + "t";
+        }
+
+        /// <summary>
+        /// 鏇存柊绀句細璐$尞1鏁版嵁UI
+        /// </summary>
+        private void updateSocialContribution1()
+        {
+
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.energy_electricity.ToString()) != null)
+            {
+                try
+                {
+                    socialContribution_Info1_ValuesButton.Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.energy_electricity.ToString());
+                    socialContribution_Info1_ValuesButton.Width = socialContribution_Info1_ValuesButton.GetTextWidth();
+                    if (socialContribution_Info1_ValuesButton.Width > Application.GetRealWidth(61))
+                    {
+                        socialContribution_Info1_ValuesButton.TextSize = 14;
+                        socialContribution_Info1_ValuesButton.Width = socialContribution_Info1_ValuesButton.GetTextWidth();
+                        socialContribution_Info1_UintButton.Height = Application.GetRealWidth(25);
+                    }
+#if __IOS__
+            socialContribution_Info1_ValuesButton.Width += Application.GetRealWidth(6);
+            socialContribution_Info1_UintButton.X = socialContribution_Info1_ValuesButton.Right - Application.GetRealWidth(4);
+#else
+                    socialContribution_Info1_UintButton.X = socialContribution_Info1_ValuesButton.Right + Application.GetRealWidth(2);
+#endif
+                }
+                catch { }
+            }
+        }
+        /// <summary>
+        /// 鏇存柊绀句細璐�2鐚暟鎹甎I
+        /// </summary>
+        private void updateSocialContribution2()
+        {
+
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.co2.ToString()) != null)
+            {
+                try
+                {
+                    socialContribution_Info2_ValuesButton.Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.co2.ToString());
+                    socialContribution_Info2_ValuesButton.Width = socialContribution_Info2_ValuesButton.GetTextWidth();
+                    if (socialContribution_Info2_ValuesButton.Width > Application.GetRealWidth(61))
+                    {
+                        socialContribution_Info2_ValuesButton.TextSize = 14;
+                        socialContribution_Info2_ValuesButton.Width = socialContribution_Info2_ValuesButton.GetTextWidth();
+                    }
+#if __IOS__
+            socialContribution_Info2_ValuesButton.Width += Application.GetRealWidth(6);
+            socialContribution_Info2_UintButton.X = socialContribution_Info2_ValuesButton.Right - Application.GetRealWidth(4);
+#else
+                    socialContribution_Info2_UintButton.X = socialContribution_Info2_ValuesButton.Right + Application.GetRealWidth(2);
+#endif
+                }
+                catch { }
+            }
+        }
+        /// <summary>
+        /// 鏇存柊绀句細璐�3鐚暟鎹甎I
+        /// </summary>
+        private void updateSocialContribution3()
+        {
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.trees.ToString()) != null)
+            {
+                try
+                {
+                    socialContribution_Info3_ValuesButton.Text = function.GetAttrState(WaterHeaterJinmao_AttrEnum.trees.ToString());
+                    socialContribution_Info3_ValuesButton.Width = socialContribution_Info3_ValuesButton.GetTextWidth();
+                    if (socialContribution_Info3_ValuesButton.Width > Application.GetRealWidth(61))
+                    {
+                        socialContribution_Info3_ValuesButton.TextSize = 14;
+                        socialContribution_Info3_ValuesButton.Width = socialContribution_Info3_ValuesButton.GetTextWidth();
+                        //socialContribution_Info3_UintButton.Height = Application.GetRealWidth(23);
+                    }
+#if __IOS__
+            socialContribution_Info3_ValuesButton.Width += Application.GetRealWidth(6);
+            socialContribution_Info3_UintButton.X = socialContribution_Info3_ValuesButton.Right - Application.GetRealWidth(4);
+#else
+                    socialContribution_Info3_UintButton.X = socialContribution_Info3_ValuesButton.Right + Application.GetRealWidth(2);
+#endif
+                }
+                catch { }
+            }
+        }
+
+        /// <summary>
+        /// 鏇存柊寮�鍏虫寜閽姸鎬�
+        /// </summary>
+        private void updatePowerButton()
+        {
+            btnPowerControl.IsSelected = function.GetAttrState(FunctionAttributeKey.OnOff.ToString()) == "on";
+        }
+    }
+}
+
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Acst/WetarHeaterJinmaoHistoryPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Acst/WetarHeaterJinmaoHistoryPage.cs
new file mode 100644
index 0000000..3005623
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Acst/WetarHeaterJinmaoHistoryPage.cs
@@ -0,0 +1,1592 @@
+锘縰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 WetarHeaterJinmaoHistoryPage : FrameLayout
+    {
+        WetarHeaterJinmaoHistoryPage bodyView;
+        Function function;
+        FrameLayout infoView1;
+        EchartsOption_Histogram tempEchartOption;
+        MyEchartsViewOn infoView1_EchartsView;
+        Button infoView1_Date_Day;
+        Button infoView1_Date_Month;
+        Button infoView1_Date_Year;
+        Button infoView1_DateInfo_PreClickButton;
+        Button infoView1_DateInfo_DateTextButton;
+        Button infoView1_DateInfo_NextClickButton;
+        Button infoView1_DateInfo_NextIconButton;
+        Button infoView1_DateInfo_PreIconButton;
+        QueryType tempQueryType = QueryType.day_hour;
+        int tempQueryTime_Day = DateTime.Now.Day;
+        int tempQueryTime_Month = DateTime.Now.Month;
+        int tempQueryTime_Year = DateTime.Now.Year;
+        string tempQueryTimeString = DateTime.Now.ToString("yyyy/MM/dd");
+
+
+        FrameLayout infoView2;
+        MyEchartsViewOn infoView2_EchartsView;
+        EchartsOption_Histogram echartOption2;
+        Button infoView2_Date_Day;
+        Button infoView2_Date_Month;
+        Button infoView2_Date_Year;
+        Button infoView2_DateInfo_PreClickButton;
+        Button infoView2_DateInfo_DateTextButton;
+        Button infoView2_DateInfo_NextClickButton;
+        Button infoView2_DateInfo_NextIconButton;
+        Button infoView2_DateInfo_PreIconButton;
+        QueryType waterQueryType = QueryType.day_hour;
+        int waterQueryTime_Day = DateTime.Now.Day;
+        int waterQueryTime_Month = DateTime.Now.Month;
+        int waterQueryTime_Year = DateTime.Now.Year;
+        string waterQueryTimeString = DateTime.Now.ToString("yyyy/MM/dd");
+
+
+        public WetarHeaterJinmaoHistoryPage(Function deviceFunction)
+        {
+            bodyView = this;
+            function = deviceFunction;
+            this.BackgroundColor = CSS_Color.BackgroundColor;
+        }
+
+        public void LoadPage()
+        {
+            var topView = new TopViewDiv(bodyView, function.name);
+            topView.maginY = 10;
+            topView.LoadTopView();
+
+            var contentView = new VerticalScrolViewLayout()
+            {
+                Y = Application.GetRealHeight(74 + 16),
+                Height = Application.GetRealHeight(Application.DesignHeight - 74),
+            };
+            bodyView.AddChidren(contentView);
+
+            #region 娓╁害鍊�
+            infoView1 = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealWidth(382),
+                Gravity = Gravity.CenterHorizontal,
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+            };
+            contentView.AddChidren(infoView1);
+
+            #region 鏃堕棿鏉′欢閫夋嫨
+            var infoView1_DateView = new HorizontalScrolViewLayout()
+            {
+                Width = Application.GetRealWidth(343 - 34),
+                Height = Application.GetRealWidth(26),
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealWidth(17),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = 0x00FFFFFF,
+                BorderWidth = 0,
+                ScrollEnabled = false,
+            };
+            infoView1.AddChidren(infoView1_DateView);
+
+            infoView1_Date_Day = new Button()
+            {
+                Width = Application.GetRealWidth(103),
+                Height = Application.GetRealWidth(26),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = CSS_Color.BackgroundColor,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                Text = "鏃�",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                IsSelected = true,
+            };
+            infoView1_DateView.AddChidren(infoView1_Date_Day);
+
+            infoView1_Date_Month = new Button()
+            {
+                Width = Application.GetRealWidth(103),
+                Height = Application.GetRealWidth(26),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = CSS_Color.BackgroundColor,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                Text = "鏈�",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                IsSelected = false,
+            };
+            infoView1_DateView.AddChidren(infoView1_Date_Month);
+
+            infoView1_Date_Year = new Button()
+            {
+                Width = Application.GetRealWidth(103),
+                Height = Application.GetRealWidth(26),
+                BackgroundColor = CSS_Color.BackgroundColor,
+                SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(13),
+                BorderColor = CSS_Color.BackgroundColor,
+                BorderWidth = (uint)Application.GetRealWidth(1),
+                Text = "骞�",
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                IsSelected = false,
+            };
+            infoView1_DateView.AddChidren(infoView1_Date_Year);
+
+            var infoView1_DateInfoView = new FrameLayout()
+            {
+                Y = Application.GetRealWidth(43),
+                Height = Application.GetRealWidth(55),
+            };
+            infoView1.AddChidren(infoView1_DateInfoView);
+
+            infoView1_DateInfo_PreIconButton = new Button()
+            {
+                X = Application.GetRealWidth(18),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetRealWidth(6),
+                Height = Application.GetRealWidth(10),
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/PreIcon.png",
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_PreIconButton);
+
+            infoView1_DateInfo_PreClickButton = new Button()
+            {
+                Width = Application.GetRealWidth(32 + 6),
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_PreClickButton);
+
+            infoView1_DateInfo_DateTextButton = new Button()
+            {
+                Gravity = Gravity.Center,
+                Width = Application.GetRealWidth(200),
+                TextAlignment = TextAlignment.Center,
+                Text = DateTime.Now.ToString("yyyy-MM-dd"),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                IsBold = true,
+                TextSize = 16,
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_DateTextButton);
+
+
+            infoView1_DateInfo_NextIconButton = new Button()
+            {
+                X = Application.GetRealWidth(343 - 18 - 6),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetRealWidth(6),
+                Height = Application.GetRealWidth(10),
+                UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/NextIcon.png",
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_NextIconButton);
+
+            infoView1_DateInfo_NextClickButton = new Button()
+            {
+                X = Application.GetRealWidth(343 - 18 - 6 - 32),
+                Width = Application.GetRealWidth(32 + 6),
+            };
+            infoView1_DateInfoView.AddChidren(infoView1_DateInfo_NextClickButton);
+
+            #endregion
+
+            #region 鏁版嵁鍥捐〃
+            infoView1_EchartsView = new MyEchartsViewOn()
+            {
+                Y = Application.GetRealWidth(101),
+                Height = Application.GetRealWidth(246),
+            };
+            infoView1.AddChidren(infoView1_EchartsView);
+
+            tempEchartOption = new EchartsOption_Histogram();
+            tempEchartOption.xTitle = "鏃堕棿";
+            tempEchartOption.yTitle = "娓╁害锛堚剝锛�";
+            //tempEchartOption.InitXdataText(new List<string>()
+            //{
+            //    "21","22","23","24","25","26","26","27","28","29",
+            //    "21","22","23","24","25","26","26","27","28","29",
+            //    "21","22","23","24"
+            //});
+            //tempEchartOption.InitYdataText(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"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "15", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "16", fieldValue= "22"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "17", fieldValue= "11"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "18", fieldValue= "21"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "19", fieldValue= "41"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "20", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "21", fieldValue= "31"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "22", fieldValue= "23"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "23", fieldValue= "11"  },
+            //    new EnvironmentalSensorHistor{ fieldName = "24", fieldValue= "21"  },
+            //});
+            //var ddd = tempEchartOption.InitOption();
+            //infoView1_EchartsView.ShowWithOption(ddd);
+
+            infoView1.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(35),
+                Y = Application.GetRealWidth(340),
+                Text = "娓╁害鍊�",
+                TextSize = 14,
+                TextAlignment = TextAlignment.Center,
+                TextColor = 0xFFC0C7D4
+            });
+
+            #endregion
+
+            #endregion
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(16)
+            });
+
+
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.volume.ToString()) != null)
+            {
+                #region 鐢ㄦ按閲�
+
+                infoView2 = new FrameLayout()
+                {
+                    Width = Application.GetRealWidth(343),
+                    Height = Application.GetRealWidth(382),
+                    Y = Application.GetRealHeight(16) + infoView1.Bottom,
+                    Gravity = Gravity.CenterHorizontal,
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                    Radius = (uint)Application.GetRealWidth(12),
+                    BorderColor = 0x00FFFFFF,
+                    BorderWidth = 0,
+                };
+                contentView.AddChidren(infoView2);
+
+                #region 鏃堕棿鏉′欢閫夋嫨
+                var infoView2_DateView = new HorizontalScrolViewLayout()
+                {
+                    Width = Application.GetRealWidth(343 - 34),
+                    Height = Application.GetRealWidth(26),
+                    Gravity = Gravity.CenterHorizontal,
+                    Y = Application.GetRealWidth(17),
+                    BackgroundColor = CSS_Color.BackgroundColor,
+                    Radius = (uint)Application.GetRealWidth(13),
+                    BorderColor = 0x00FFFFFF,
+                    BorderWidth = 0,
+                    ScrollEnabled = false,
+                };
+                infoView2.AddChidren(infoView2_DateView);
+
+                infoView2_Date_Day = new Button()
+                {
+                    Width = Application.GetRealWidth(103),
+                    Height = Application.GetRealWidth(26),
+                    BackgroundColor = CSS_Color.BackgroundColor,
+                    SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                    Radius = (uint)Application.GetRealWidth(13),
+                    BorderColor = CSS_Color.BackgroundColor,
+                    BorderWidth = (uint)Application.GetRealWidth(1),
+                    Text = "鏃�",
+                    TextAlignment = TextAlignment.Center,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    IsSelected = true,
+                };
+                infoView2_DateView.AddChidren(infoView2_Date_Day);
+
+
+                infoView2_Date_Month = new Button()
+                {
+                    Width = Application.GetRealWidth(103),
+                    Height = Application.GetRealWidth(26),
+                    BackgroundColor = CSS_Color.BackgroundColor,
+                    SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                    Radius = (uint)Application.GetRealWidth(13),
+                    BorderColor = CSS_Color.BackgroundColor,
+                    BorderWidth = (uint)Application.GetRealWidth(1),
+                    Text = "鏈�",
+                    TextAlignment = TextAlignment.Center,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    IsSelected = false,
+                };
+                infoView2_DateView.AddChidren(infoView2_Date_Month);
+
+
+                infoView2_Date_Year = new Button()
+                {
+                    Width = Application.GetRealWidth(103),
+                    Height = Application.GetRealWidth(26),
+                    BackgroundColor = CSS_Color.BackgroundColor,
+                    SelectedBackgroundColor = CSS_Color.MainBackgroundColor,
+                    Radius = (uint)Application.GetRealWidth(13),
+                    BorderColor = CSS_Color.BackgroundColor,
+                    BorderWidth = (uint)Application.GetRealWidth(1),
+                    Text = "骞�",
+                    TextAlignment = TextAlignment.Center,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    SelectedTextColor = CSS_Color.MainColor,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    IsSelected = false,
+                };
+                infoView2_DateView.AddChidren(infoView2_Date_Year);
+
+                var infoView2_DateInfoView = new FrameLayout()
+                {
+                    Y = Application.GetRealWidth(43),
+                    Height = Application.GetRealWidth(55),
+                };
+                infoView2.AddChidren(infoView2_DateInfoView);
+
+                infoView2_DateInfo_PreIconButton = new Button()
+                {
+                    X = Application.GetRealWidth(18),
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetRealWidth(6),
+                    Height = Application.GetRealWidth(10),
+                    UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/PreIcon.png",
+                };
+                infoView2_DateInfoView.AddChidren(infoView2_DateInfo_PreIconButton);
+
+                infoView2_DateInfo_PreClickButton = new Button()
+                {
+                    Width = Application.GetRealWidth(32 + 6),
+                };
+                infoView2_DateInfoView.AddChidren(infoView2_DateInfo_PreClickButton);
+
+                infoView2_DateInfo_DateTextButton = new Button()
+                {
+                    Gravity = Gravity.Center,
+                    Width = Application.GetRealWidth(200),
+                    TextAlignment = TextAlignment.Center,
+                    Text = DateTime.Now.ToString("yyyy-MM-dd"),
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    IsBold = true,
+                    TextSize = 16,
+                };
+                infoView2_DateInfoView.AddChidren(infoView2_DateInfo_DateTextButton);
+
+                infoView2_DateInfo_NextIconButton = new Button()
+                {
+                    X = Application.GetRealWidth(343 - 18 - 6),
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetRealWidth(6),
+                    Height = Application.GetRealWidth(10),
+                    UnSelectedImagePath = "FunctionIcon/Acst/WaterHeater/NextIcon.png",
+                };
+                infoView2_DateInfoView.AddChidren(infoView2_DateInfo_NextIconButton);
+
+                infoView2_DateInfo_NextClickButton = new Button()
+                {
+                    X = Application.GetRealWidth(343 - 18 - 6 - 32),
+                    Width = Application.GetRealWidth(32 + 6),
+                };
+                infoView2_DateInfoView.AddChidren(infoView2_DateInfo_NextClickButton);
+
+                #endregion
+
+                #region 鏁版嵁鍥捐〃
+                infoView2_EchartsView = new MyEchartsViewOn()
+                {
+                    Y = Application.GetRealWidth(101),
+                    Height = Application.GetRealWidth(246),
+                };
+                infoView2.AddChidren(infoView2_EchartsView);
+
+                echartOption2 = new EchartsOption_Histogram();
+                echartOption2.xTitle = "鏃堕棿";
+                echartOption2.yTitle = "鐢ㄦ按閲忥紙t锛�";
+                //echartOption2.InitXdataText(new List<string>()
+                //{
+                //    "21","22","23","24","25","26","26","27","28","29",
+                //    "21","22","23","24","25","26","26","27","28","29",
+                //    "21","22","23","24"
+                //});
+                //echartOption2.InitYdataText(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"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "15", fieldValue= "23"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "16", fieldValue= "22"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "17", fieldValue= "11"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "18", fieldValue= "21"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "19", fieldValue= "41"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "20", fieldValue= "23"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "21", fieldValue= "31"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "22", fieldValue= "23"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "23", fieldValue= "11"  },
+                //    new EnvironmentalSensorHistor{ fieldName = "24", fieldValue= "21"  },
+                //});
+                //infoView2_EchartsView.ShowWithOption(echartOption2.InitOption());
+
+                infoView2.AddChidren(new Button()
+                {
+                    Height = Application.GetRealWidth(35),
+                    Y = Application.GetRealWidth(340),
+                    Text = "鐢ㄦ按閲�",
+                    TextSize = 14,
+                    TextAlignment = TextAlignment.Center,
+                    TextColor = 0xFFC0C7D4
+                });
+
+                #endregion
+
+
+                #endregion
+            }
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(26)
+            });
+
+            initQueryButton();
+            getTempHistory();
+            getWaterHistory();
+        }
+
+
+        /// <summary>
+        /// 璇诲彇娓╁害鍊煎巻鍙叉暟鎹�
+        /// hour=杩�24灏忔椂銆乨ay_hour =鏌愭棩24灏忔椂銆亀eek=杩戜竴鍛ㄣ�乵onth = 杩戜竴鏈堛�乧ustom_month=鏌愬勾鏌愭湀 y/M銆乧ustom_year=鏌愬勾 y
+        /// </summary>
+        private void getTempHistory()
+        {
+            if (MainPage.NoLoginMode)
+            {
+                return;
+            }
+
+            var loadPage = new Loading()
+            {
+                LodingBackgroundColor = 0x88888888,
+                BackgroundColor = 0x00FFFFFF,
+            };
+            infoView1.AddChidren(loadPage);
+
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Start();
+                    });
+
+                    switch (tempQueryType)
+                    {
+                        case QueryType.day_hour:
+                            tempQueryTimeString = tempQueryTime_Year.ToString() + "/" + tempQueryTime_Month + "/" + tempQueryTime_Day;
+                            break;
+                        case QueryType.custom_month:
+                            tempQueryTimeString = tempQueryTime_Year.ToString() + "/" + tempQueryTime_Month;
+                            break;
+                        case QueryType.custom_year:
+                            tempQueryTimeString = tempQueryTime_Year.ToString();
+                            break;
+                    }
+
+                    var revertObj = new HttpServerRequest().GetSensorHistory(tempQueryType.ToString(), function.deviceId, WaterHeaterJinmao_AttrEnum.temp.ToString(), tempQueryTimeString);
+                    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>();
+                            foreach (var data in revertData)
+                            {
+                                vs.Add(data.fieldName);
+                            }
+                            tempEchartOption.InitXdataText(vs);
+                            tempEchartOption.InitYdataText(revertData);
+
+                            Application.RunOnMainThread(() =>
+                            {
+                                infoView1_EchartsView.ShowWithOption(tempEchartOption.InitOption());
+                            });
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log($"history error : {ex.Message}");
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Hide();
+                    });
+                }
+            })
+            { IsBackground = true }.Start();
+
+        }
+        /// <summary>
+        /// 鑾峰彇鐢ㄦ按閲忓巻鍙茶褰�
+        /// </summary>
+        private void getWaterHistory()
+        {
+            if (MainPage.NoLoginMode)
+            {
+                return;
+            }
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.volume.ToString()) == null)
+            {
+                return;
+            }
+            var loadPage = new Loading()
+            {
+                LodingBackgroundColor = 0x88888888,
+                BackgroundColor = 0x00FFFFFF,
+            };
+            infoView2.AddChidren(loadPage);
+
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Start();
+                    });
+                    switch (waterQueryType)
+                    {
+                        case QueryType.day_hour:
+                            waterQueryTimeString = waterQueryTime_Year.ToString() + "/" + waterQueryTime_Month + "/" + waterQueryTime_Day;
+                            break;
+                        case QueryType.custom_month:
+                            waterQueryTimeString = waterQueryTime_Year.ToString() + "/" + waterQueryTime_Month;
+                            break;
+                        case QueryType.custom_year:
+                            waterQueryTimeString = waterQueryTime_Year.ToString();
+                            break;
+                    }
+
+                    var revertObj = new HttpServerRequest().GetSensorHistory(waterQueryType.ToString(), function.deviceId, WaterHeaterJinmao_AttrEnum.volume.ToString(), waterQueryTimeString);
+                    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>();
+                            foreach (var data in revertData)
+                            {
+                                vs.Add(data.fieldName);
+                            }
+                            echartOption2.InitXdataText(vs);
+                            echartOption2.InitYdataText(revertData);
+
+                            Application.RunOnMainThread(() =>
+                            {
+                                infoView2_EchartsView.ShowWithOption(echartOption2.InitOption());
+                            });
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log($"history 2 error : {ex.Message}");
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loadPage.Hide();
+                    });
+                }
+            })
+            { IsBackground = true }.Start();
+
+        }
+
+        private void initQueryButton()
+        {
+            infoView1_DateInfo_DateTextButton.MouseUpEventHandler = (sender, e) =>
+            {
+                SetTempQureyDateDialog();
+            };
+            infoView1_DateInfo_PreClickButton.MouseUpEventHandler = (sender, e) =>
+            {
+                var tempQueryDate = new DateTime(tempQueryTime_Year, tempQueryTime_Month, tempQueryTime_Day);
+                if (tempQueryType == QueryType.day_hour)
+                {
+                    if (tempQueryDate.Year == 2023 && tempQueryDate.Month == 1 && tempQueryDate.Day == 1)
+                    {
+                        return;
+                    }
+                    tempQueryDate = tempQueryDate.AddDays(-1);
+                    infoView1_DateInfo_DateTextButton.Text = tempQueryDate.ToString("yyyy-MM-dd");
+                }
+                else if (tempQueryType == QueryType.custom_month)
+                {
+                    if (tempQueryDate.Year == 2023 && tempQueryDate.Month == 1)
+                    {
+                        return;
+                    }
+                    tempQueryDate = tempQueryDate.AddMonths(-1);
+                    tempQueryTime_Day = tempQueryDate.Day;
+                    infoView1_DateInfo_DateTextButton.Text = tempQueryDate.ToString("yyyy-MM");
+                }
+                else if (tempQueryType == QueryType.custom_year)
+                {
+                    if (tempQueryDate.Year <= 2023)
+                    {
+                        return;
+                    }
+                    tempQueryDate = tempQueryDate.AddYears(-1);
+                    infoView1_DateInfo_DateTextButton.Text = tempQueryDate.ToString("yyyy");
+                }
+                tempQueryTime_Year = tempQueryDate.Year;
+                tempQueryTime_Month = tempQueryDate.Month;
+                tempQueryTime_Day = tempQueryDate.Day;
+                getTempHistory();
+            };
+            infoView1_DateInfo_NextClickButton.MouseUpEventHandler = (sender, e) =>
+            {
+                var tempQueryDate = new DateTime(tempQueryTime_Year, tempQueryTime_Month, tempQueryTime_Day);
+                if (tempQueryType == QueryType.day_hour)
+                {
+                    if (tempQueryDate.Year >= DateTime.Now.Year && tempQueryDate.Month >= DateTime.Now.Month && tempQueryDate.Day >= DateTime.Now.Day)
+                    {
+                        return;
+                    }
+                    tempQueryDate = tempQueryDate.AddDays(1);
+                    infoView1_DateInfo_DateTextButton.Text = tempQueryDate.ToString("yyyy-MM-dd");
+                }
+                else if (tempQueryType == QueryType.custom_month)
+                {
+                    if (tempQueryDate.Year >= DateTime.Now.Year && tempQueryDate.Month >= DateTime.Now.Month)
+                    {
+                        return;
+                    }
+                    tempQueryDate = tempQueryDate.AddMonths(1);
+                    tempQueryTime_Day = tempQueryDate.Day;
+                    infoView1_DateInfo_DateTextButton.Text = tempQueryDate.ToString("yyyy-MM");
+                }
+                else if (tempQueryType == QueryType.custom_year)
+                {
+                    if (tempQueryDate.Year >= DateTime.Now.Year)
+                    {
+                        return;
+                    }
+                    tempQueryDate = tempQueryDate.AddYears(1);
+                    infoView1_DateInfo_DateTextButton.Text = tempQueryDate.ToString("yyyy");
+                }
+                tempQueryTime_Year = tempQueryDate.Year;
+                tempQueryTime_Month = tempQueryDate.Month;
+                tempQueryTime_Day = tempQueryDate.Day;
+                getTempHistory();
+            };
+
+            infoView1_Date_Day.MouseUpEventHandler = (sender, e) =>
+            {
+                if (infoView1_Date_Day.IsSelected)
+                {
+                    return;
+                }
+                infoView1_Date_Day.IsSelected = true;
+                infoView1_Date_Month.IsSelected = false;
+                infoView1_Date_Year.IsSelected = false;
+                tempQueryType = QueryType.day_hour;
+                if (DateTime.Now.Date < new DateTime(tempQueryTime_Year, tempQueryTime_Month, tempQueryTime_Day))
+                {
+                    tempQueryTime_Year = DateTime.Now.Year;
+                    tempQueryTime_Month = DateTime.Now.Month;
+                    tempQueryTime_Day = DateTime.Now.Day;
+                }
+                infoView1_DateInfo_DateTextButton.Text = new DateTime(tempQueryTime_Year, tempQueryTime_Month, tempQueryTime_Day).ToString("yyyy-MM-dd");
+                getTempHistory();
+            };
+            infoView1_Date_Month.MouseUpEventHandler = (sender, e) =>
+            {
+                if (infoView1_Date_Month.IsSelected)
+                {
+                    return;
+                }
+                infoView1_Date_Day.IsSelected = false;
+                infoView1_Date_Month.IsSelected = true;
+                infoView1_Date_Year.IsSelected = false;
+                tempQueryType = QueryType.custom_month;
+                if (DateTime.Now.Date < new DateTime(tempQueryTime_Year, tempQueryTime_Month, tempQueryTime_Day))
+                {
+                    tempQueryTime_Year = DateTime.Now.Year;
+                    tempQueryTime_Month = DateTime.Now.Month;
+                }
+                infoView1_DateInfo_DateTextButton.Text = new DateTime(tempQueryTime_Year, tempQueryTime_Month, tempQueryTime_Day).ToString("yyyy-MM");
+                getTempHistory();
+            };
+            infoView1_Date_Year.MouseUpEventHandler = (sender, e) =>
+            {
+                if (infoView1_Date_Year.IsSelected)
+                {
+                    return;
+                }
+                infoView1_Date_Day.IsSelected = false;
+                infoView1_Date_Month.IsSelected = false;
+                infoView1_Date_Year.IsSelected = true;
+                tempQueryType = QueryType.custom_year;
+                infoView1_DateInfo_DateTextButton.Text = tempQueryTime_Year.ToString();
+                getTempHistory();
+            };
+            //-----------鐢ㄦ按
+            if (function.attributes.Find((obj) => obj.key == WaterHeaterJinmao_AttrEnum.volume.ToString()) != null)
+            {
+
+                infoView2_DateInfo_DateTextButton.MouseUpEventHandler = (sender, e) =>
+                {
+                    SetWaterQureyDateDialog();
+                };
+                infoView2_DateInfo_PreClickButton.MouseUpEventHandler = (sender, e) =>
+                {
+                    var waterQueryDate = new DateTime(waterQueryTime_Year, waterQueryTime_Month, waterQueryTime_Day);
+                    if (waterQueryType == QueryType.day_hour)
+                    {
+                        if (waterQueryDate.Year == 2023 && waterQueryDate.Month == 1 && waterQueryDate.Day == 1)
+                        {
+                            return;
+                        }
+                        waterQueryDate = waterQueryDate.AddDays(-1);
+                        infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy-MM-dd");
+                    }
+                    else if (waterQueryType == QueryType.custom_month)
+                    {
+                        if (waterQueryDate.Year == 2023 && waterQueryDate.Month == 1)
+                        {
+                            return;
+                        }
+                        waterQueryDate = waterQueryDate.AddMonths(-1);
+                        waterQueryTime_Day = waterQueryDate.Day;
+                        infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy-MM");
+                    }
+                    else if (waterQueryType == QueryType.custom_year)
+                    {
+                        if (waterQueryDate.Year <= 2023)
+                        {
+                            return;
+                        }
+                        waterQueryDate = waterQueryDate.AddYears(-1);
+                        infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy");
+                    }
+                    waterQueryTime_Year = waterQueryDate.Year;
+                    waterQueryTime_Month = waterQueryDate.Month;
+                    waterQueryTime_Day = waterQueryDate.Day;
+                    getWaterHistory();
+                };
+                infoView2_DateInfo_NextClickButton.MouseUpEventHandler = (sender, e) =>
+                {
+                    var waterQueryDate = new DateTime(waterQueryTime_Year, waterQueryTime_Month, waterQueryTime_Day);
+                    if (waterQueryType == QueryType.day_hour)
+                    {
+                        if (waterQueryDate.Year >= DateTime.Now.Year && waterQueryDate.Month >= DateTime.Now.Month && waterQueryDate.Day >= DateTime.Now.Day)
+                        {
+                            return;
+                        }
+                        waterQueryDate = waterQueryDate.AddDays(1);
+                        infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy-MM-dd");
+                    }
+                    else if (waterQueryType == QueryType.custom_month)
+                    {
+                        if (waterQueryDate.Year == DateTime.Now.Year && waterQueryDate.Month == DateTime.Now.Month)
+                        {
+                            return;
+                        }
+                        waterQueryDate = waterQueryDate.AddMonths(1);
+                        waterQueryTime_Day = waterQueryDate.Day;
+                        infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy-MM");
+                    }
+                    else if (waterQueryType == QueryType.custom_year)
+                    {
+                        if (waterQueryDate.Year >= DateTime.Now.Year)
+                        {
+                            return;
+                        }
+                        waterQueryDate = waterQueryDate.AddYears(1);
+                        infoView2_DateInfo_DateTextButton.Text = waterQueryDate.ToString("yyyy");
+                    }
+                    waterQueryTime_Year = waterQueryDate.Year;
+                    waterQueryTime_Month = waterQueryDate.Month;
+                    waterQueryTime_Day = waterQueryDate.Day;
+                    getWaterHistory();
+                };
+                infoView2_Date_Day.MouseDownEventHandler = (sender, e) =>
+                {
+                    if (infoView2_Date_Day.IsSelected)
+                    {
+                        return;
+                    }
+                    infoView2_Date_Day.IsSelected = true;
+                    infoView2_Date_Month.IsSelected = false;
+                    infoView2_Date_Year.IsSelected = false;
+                    waterQueryType = QueryType.day_hour;
+                    if (DateTime.Now.Date < new DateTime(waterQueryTime_Year, waterQueryTime_Month, waterQueryTime_Day))
+                    {
+                        waterQueryTime_Year = DateTime.Now.Year;
+                        waterQueryTime_Month = DateTime.Now.Month;
+                        waterQueryTime_Day = DateTime.Now.Day;
+                    }
+                    infoView2_DateInfo_DateTextButton.Text = new DateTime(waterQueryTime_Year, waterQueryTime_Month, waterQueryTime_Day).ToString("yyyy-MM-dd");
+                    getWaterHistory();
+                };
+                infoView2_Date_Month.MouseDownEventHandler = (sender, e) =>
+                {
+                    if (infoView2_Date_Month.IsSelected)
+                    {
+                        return;
+                    }
+                    infoView2_Date_Day.IsSelected = false;
+                    infoView2_Date_Month.IsSelected = true;
+                    infoView2_Date_Year.IsSelected = false;
+                    waterQueryType = QueryType.custom_month;
+                    if (DateTime.Now.Date < new DateTime(waterQueryTime_Year, waterQueryTime_Month, waterQueryTime_Day))
+                    {
+                        waterQueryTime_Year = DateTime.Now.Year;
+                        waterQueryTime_Month = DateTime.Now.Month;
+                    }
+                    infoView2_DateInfo_DateTextButton.Text = new DateTime(waterQueryTime_Year, waterQueryTime_Month, waterQueryTime_Day).ToString("yyyy-MM");
+                    getWaterHistory();
+                };
+                infoView2_Date_Year.MouseDownEventHandler = (sender, e) =>
+                {
+                    if (infoView2_Date_Year.IsSelected)
+                    {
+                        return;
+                    }
+                    infoView2_Date_Day.IsSelected = false;
+                    infoView2_Date_Month.IsSelected = false;
+                    infoView2_Date_Year.IsSelected = true;
+                    waterQueryType = QueryType.custom_year;
+                    infoView2_DateInfo_DateTextButton.Text = waterQueryTime_Year.ToString();
+                    getWaterHistory();
+                };
+            }
+        }
+
+        /// <summary>
+        /// </summary>
+        public void SetTempQureyDateDialog()
+        {
+            var pickerItems_Year = new List<string>();
+            List<string> pickerItems_Month = null;
+            List<string> pickerItems_Day = null;
+
+            int item1 = tempQueryTime_Year;
+            int item2 = tempQueryTime_Month;
+            int item3 = tempQueryTime_Day;
+
+            pickerItems_Year.Add("2023");
+            while (DateTime.Now.Year > 2022 + pickerItems_Year.Count)
+            {
+                pickerItems_Year.Add((2023 + pickerItems_Year.Count).ToString());
+            }
+
+            if (tempQueryType == QueryType.custom_month || tempQueryType == QueryType.day_hour)
+            {
+                pickerItems_Month = new List<string>();
+                if (tempQueryTime_Year == DateTime.Now.Year)
+                {
+                    int addMonth = 0;
+                    while (DateTime.Now.Month > addMonth)
+                    {
+                        addMonth++;
+                        pickerItems_Month.Add(addMonth.ToString());
+                    }
+                }
+                else
+                {
+                    for (var i = 1; i < 13; i++)
+                    {
+                        pickerItems_Month.Add(i.ToString());
+                    }
+                }
+                if (tempQueryType == QueryType.day_hour)
+                {
+                    pickerItems_Day = new List<string>();
+                    if (tempQueryTime_Month == DateTime.Now.Month)
+                    {
+                        int addDay = 0;
+                        while (DateTime.Now.Day > addDay)
+                        {
+                            addDay++;
+                            pickerItems_Day.Add(addDay.ToString());
+                        }
+                    }
+                    else
+                    {
+                        for (var i = 1; i <= DateTime.DaysInMonth(tempQueryTime_Year, tempQueryTime_Month); i++)
+                        {
+                            pickerItems_Day.Add(i.ToString());
+                        }
+                    }
+                }
+            }
+
+            Dialog dialog = new Dialog();
+
+            var pView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(pView);
+
+            var optionBaseView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(456 - 60),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(260),
+                AnimateSpeed = 0.3f,
+                Animate = Animate.DownToUp,
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            pView.AddChidren(optionBaseView);
+
+            var topView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(40),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            optionBaseView.AddChidren(topView);
+            topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
+
+            var btnCancel = new Button()
+            {
+                X = Application.GetRealWidth(21),
+                Width = Application.GetRealWidth(100),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Cancel,
+            };
+            topView.AddChidren(btnCancel);
+
+            var btnConfrim = new Button()
+            {
+                X = Application.GetRealWidth(160),
+                Width = Application.GetRealWidth(160),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Confirm,
+            };
+            topView.AddChidren(btnConfrim);
+
+            var btnToday = new Button()
+            {
+                X = Application.GetRealWidth(160 - 32) - btnConfrim.GetTextWidth(),
+                Width = Application.GetRealWidth(160),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                Visible = false,
+                Enable = false,
+                Text= "浠婃棩",
+            };
+            topView.AddChidren(btnToday);
+
+            UIPickerView uIPickerView = new UIPickerView()
+            {
+                Y = Application.GetRealHeight(40),
+                Height = Application.GetRealHeight(210),
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            optionBaseView.AddChidren(uIPickerView);
+            uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+            uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(tempQueryTime_Year.ToString()),
+                pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(tempQueryTime_Month.ToString()),
+                pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(tempQueryTime_Day.ToString()));
+
+            dialog.Show();
+
+            pView.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+            };
+
+            btnCancel.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+            };
+            uIPickerView.OnSelectChangeEvent = (int1, int2, int3) =>
+            {
+                try
+                {
+                    if (int1 < 0)
+                    {
+                        int1 = 1;
+                    }
+                    if (pickerItems_Year[int1] != item1.ToString())
+                    {
+                        int.TryParse(pickerItems_Year[int1], out item1);
+                        if (tempQueryType == QueryType.custom_month || tempQueryType == QueryType.day_hour)
+                        {
+                            pickerItems_Month = new List<string>();
+                            if (item1 == DateTime.Now.Year)
+                            {
+                                int addMonth = 0;
+                                while (DateTime.Now.Month > addMonth)
+                                {
+                                    addMonth++;
+                                    pickerItems_Month.Add(addMonth.ToString());
+                                }
+                            }
+                            else
+                            {
+                                for (var i = 1; i < 13; i++)
+                                {
+                                    pickerItems_Month.Add(i.ToString());
+                                }
+                            }
+                            if (tempQueryType == QueryType.day_hour)
+                            {
+                                pickerItems_Day = new List<string>();
+                                if (item1 == DateTime.Now.Year && item2 == DateTime.Now.Month)
+                                {
+                                    int addDay = 0;
+                                    while (DateTime.Now.Day > addDay)
+                                    {
+                                        addDay++;
+                                        pickerItems_Day.Add(addDay.ToString());
+                                    }
+                                }
+                                else
+                                {
+                                    for (var i = 1; i <= DateTime.DaysInMonth(item1, item2); i++)
+                                    {
+                                        pickerItems_Day.Add(i.ToString());
+                                    }
+                                }
+                            }
+                        }
+                        uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                        uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(item1.ToString()),
+                            pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(item2.ToString()),
+                            pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(item3.ToString()));
+
+                    }
+                    if (pickerItems_Month != null)
+                    {
+                        if (int2 >= pickerItems_Month.Count || int2 < 0)
+                        {
+                            int2 = 0;
+                        }
+                        if (pickerItems_Month[int2] != item2.ToString())
+                        {
+                            int.TryParse(pickerItems_Month[int2], out item2);
+                            if (tempQueryType == QueryType.day_hour)
+                            {
+                                pickerItems_Day = new List<string>();
+                                if (item1 == DateTime.Now.Year && item2 == DateTime.Now.Month)
+                                {
+                                    int addDay = 0;
+                                    while (DateTime.Now.Day > addDay)
+                                    {
+                                        addDay++;
+                                        pickerItems_Day.Add(addDay.ToString());
+                                    }
+                                }
+                                else
+                                {
+                                    for (var i = 1; i <= DateTime.DaysInMonth(item1, item2); i++)
+                                    {
+                                        pickerItems_Day.Add(i.ToString());
+                                    }
+                                }
+                            }
+                            try
+                            {
+                                uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                                uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(item1.ToString()),
+                                    pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(item2.ToString()),
+                                    pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(item3.ToString()));
+                            }
+                            catch (Exception ex)
+                            {
+                                MainPage.Log("Error", $"閲戣寕鍘嗗彶鏁版嵁鎺т欢寮傚父:{ex.Message}");
+                            }
+                        }
+                    }
+                    if (pickerItems_Day != null)
+                    {
+                        if (int3 >= pickerItems_Day.Count || int3 < 0)
+                        {
+                            int3 = 0;
+                        }
+                        if (pickerItems_Day[int3] != item3.ToString())
+                        {
+                            int.TryParse(pickerItems_Day[int3], out item3);
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鍣ㄦ棩鏈熼�夋嫨寮傚父锛歿ex.StackTrace}");
+                }
+            };
+            btnConfrim.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+                tempQueryTime_Year = item1;
+                infoView1_DateInfo_DateTextButton.Text = tempQueryTime_Year.ToString();
+                if (tempQueryType == QueryType.custom_month || tempQueryType == QueryType.day_hour)
+                {
+                    if (item2 != tempQueryTime_Month)
+                    {
+                        tempQueryTime_Month = item2;
+                    }
+                    infoView1_DateInfo_DateTextButton.Text = new DateTime(tempQueryTime_Year, tempQueryTime_Month, 1).ToString("yyyy-MM");
+                    if (tempQueryType == QueryType.day_hour)
+                    {
+                        if (item3 != tempQueryTime_Day)
+                        {
+                            tempQueryTime_Day = item3;
+                        }
+                        infoView1_DateInfo_DateTextButton.Text = new DateTime(tempQueryTime_Year, tempQueryTime_Month, tempQueryTime_Day).ToString("yyyy-MM-dd");
+                    }
+                }
+                getTempHistory();
+            };
+
+
+            if (tempQueryType == QueryType.day_hour)
+            {
+                try
+                {
+                    btnToday.Visible = btnToday.Enable = true;
+                    btnToday.MouseUpEventHandler = (sender, e) =>
+                    {
+                        item3 = tempQueryTime_Day = DateTime.Now.Day;
+                        item2 = tempQueryTime_Month = DateTime.Now.Month;
+                        item1 = tempQueryTime_Year = DateTime.Now.Year;
+
+                        pickerItems_Year = new List<string>();
+                        pickerItems_Year.Add("2023");
+                        while (DateTime.Now.Year > 2022 + pickerItems_Year.Count)
+                        {
+                            pickerItems_Year.Add((2023 + pickerItems_Year.Count).ToString());
+                        }
+
+                        pickerItems_Month = new List<string>();
+                        int addMonth = 0;
+                        while (DateTime.Now.Month > addMonth)
+                        {
+                            addMonth++;
+                            pickerItems_Month.Add(addMonth.ToString());
+                        }
+                        pickerItems_Day = new List<string>();
+                        int addDay = 0;
+                        while (DateTime.Now.Day > addDay)
+                        {
+                            addDay++;
+                            pickerItems_Day.Add(addDay.ToString());
+                        }
+
+                        uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                        uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(tempQueryTime_Year.ToString()),
+                            pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(tempQueryTime_Month.ToString()),
+                            pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(tempQueryTime_Day.ToString()));
+                    };
+                }
+                catch { }
+            }
+        }
+
+        public void SetWaterQureyDateDialog()
+        {
+            var pickerItems_Year = new List<string>();
+            List<string> pickerItems_Month = null;
+            List<string> pickerItems_Day = null;
+
+            int item1 = waterQueryTime_Year;
+            int item2 = waterQueryTime_Month;
+            int item3 = waterQueryTime_Day;
+
+            pickerItems_Year.Add("2023");
+            while (DateTime.Now.Year > 2022 + pickerItems_Year.Count)
+            {
+                pickerItems_Year.Add((2023 + pickerItems_Year.Count).ToString());
+            }
+
+            if (waterQueryType == QueryType.custom_month || waterQueryType == QueryType.day_hour)
+            {
+                pickerItems_Month = new List<string>();
+                if (waterQueryTime_Year == DateTime.Now.Year)
+                {
+                    int addMonth = 0;
+                    while (DateTime.Now.Month > addMonth)
+                    {
+                        addMonth++;
+                        pickerItems_Month.Add(addMonth.ToString());
+                    }
+                }
+                else
+                {
+                    for (var i = 1; i < 13; i++)
+                    {
+                        pickerItems_Month.Add(i.ToString());
+                    }
+                }
+                if (waterQueryType == QueryType.day_hour)
+                {
+                    pickerItems_Day = new List<string>();
+                    if (waterQueryTime_Month == DateTime.Now.Month)
+                    {
+                        int addDay = 0;
+                        while (DateTime.Now.Day > addDay)
+                        {
+                            addDay++;
+                            pickerItems_Day.Add(addDay.ToString());
+                        }
+                    }
+                    else
+                    {
+                        for (var i = 1; i <= DateTime.DaysInMonth(waterQueryTime_Year, waterQueryTime_Month); i++)
+                        {
+                            pickerItems_Day.Add(i.ToString());
+                        }
+                    }
+                }
+            }
+
+            Dialog dialog = new Dialog();
+
+            var pView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(pView);
+
+            var optionBaseView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(456 - 60),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(260),
+                AnimateSpeed = 0.3f,
+                Animate = Animate.DownToUp,
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            pView.AddChidren(optionBaseView);
+
+            var topView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(40),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            optionBaseView.AddChidren(topView);
+            topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
+
+            var btnCancel = new Button()
+            {
+                X = Application.GetRealWidth(21),
+                Width = Application.GetRealWidth(100),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Cancel,
+            };
+            topView.AddChidren(btnCancel);
+
+            var btnConfrim = new Button()
+            {
+                X = Application.GetRealWidth(160),
+                Width = Application.GetRealWidth(160),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Confirm,
+            };
+            topView.AddChidren(btnConfrim);
+
+            UIPickerView uIPickerView = new UIPickerView()
+            {
+                Y = Application.GetRealHeight(40),
+                Height = Application.GetRealHeight(210),
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            optionBaseView.AddChidren(uIPickerView);
+            uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+            uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(waterQueryTime_Year.ToString()),
+                pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(waterQueryTime_Month.ToString()),
+                pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(waterQueryTime_Day.ToString()));
+
+            dialog.Show();
+
+            pView.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+            };
+
+            btnCancel.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+            };
+            uIPickerView.OnSelectChangeEvent = (int1, int2, int3) =>
+            {
+                try
+                {
+                    if (int1 < 0)
+                    {
+                        int1 = 0;
+                    }
+                    if (pickerItems_Year[int1] != item1.ToString())
+                    {
+                        int.TryParse(pickerItems_Year[int1], out item1);
+                        if (waterQueryType == QueryType.custom_month || waterQueryType == QueryType.day_hour)
+                        {
+                            pickerItems_Month = new List<string>();
+                            if (item1 == DateTime.Now.Year)
+                            {
+                                int addMonth = 0;
+                                while (DateTime.Now.Month > addMonth)
+                                {
+                                    addMonth++;
+                                    pickerItems_Month.Add(addMonth.ToString());
+                                }
+                            }
+                            else
+                            {
+                                for (var i = 1; i < 13; i++)
+                                {
+                                    pickerItems_Month.Add(i.ToString());
+                                }
+                            }
+                            if (waterQueryType == QueryType.day_hour)
+                            {
+                                pickerItems_Day = new List<string>();
+                                if (item1 == DateTime.Now.Year && item2 == DateTime.Now.Month)
+                                {
+                                    int addDay = 0;
+                                    while (DateTime.Now.Day > addDay)
+                                    {
+                                        addDay++;
+                                        pickerItems_Day.Add(addDay.ToString());
+                                    }
+                                }
+                                else
+                                {
+                                    for (var i = 1; i <= DateTime.DaysInMonth(item1, item2); i++)
+                                    {
+                                        pickerItems_Day.Add(i.ToString());
+                                    }
+                                }
+                            }
+                        }
+                        uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                        uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(item1.ToString()),
+                            pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(item2.ToString()),
+                            pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(item3.ToString()));
+
+                    }
+                    if (pickerItems_Month != null)
+                    {
+                        if (int2 > pickerItems_Month.Count || int2 < 0)
+                        {
+                            int2 = 0;
+                        }
+                        if (pickerItems_Month[int2] != item2.ToString())
+                        {
+                            int.TryParse(pickerItems_Month[int2], out item2);
+                            if (waterQueryType == QueryType.day_hour)
+                            {
+                                pickerItems_Day = new List<string>();
+                                if (item1 == DateTime.Now.Year && item2 == DateTime.Now.Month)
+                                {
+                                    int addDay = 0;
+                                    while (DateTime.Now.Day > addDay)
+                                    {
+                                        addDay++;
+                                        pickerItems_Day.Add(addDay.ToString());
+                                    }
+                                }
+                                else
+                                {
+                                    for (var i = 1; i <= DateTime.DaysInMonth(item1, item2); i++)
+                                    {
+                                        pickerItems_Day.Add(i.ToString());
+                                    }
+                                }
+                            }
+
+                            uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                            uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(item1.ToString()),
+                                pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(item2.ToString()),
+                                pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(item3.ToString()));
+                        }
+                    }
+                    if (pickerItems_Day != null)
+                    {
+                        if (int3 >= pickerItems_Day.Count || int3 < 0)
+                        {
+                            int3 = 0;
+                        }
+                        if (pickerItems_Day[int3] != item3.ToString())
+                        {
+                            int.TryParse(pickerItems_Day[int3], out item3);
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log("Error", $"閲戣寕鐑按鍣ㄦ棩鏈�2閫夋嫨寮傚父锛歿ex.StackTrace}");
+                }
+            };
+            btnConfrim.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+                waterQueryTime_Year = item1;
+                infoView2_DateInfo_DateTextButton.Text = waterQueryTime_Year.ToString();
+                if (waterQueryType == QueryType.custom_month || waterQueryType == QueryType.day_hour)
+                {
+                    if (item2 != waterQueryTime_Month)
+                    {
+                        waterQueryTime_Month = item2;
+                    }
+                    infoView2_DateInfo_DateTextButton.Text = new DateTime(waterQueryTime_Year, waterQueryTime_Month, 1).ToString("yyyy-MM");
+                    if (waterQueryType == QueryType.day_hour)
+                    {
+                        if (item3 != waterQueryTime_Day)
+                        {
+                            waterQueryTime_Day = item3;
+                        }
+                        infoView2_DateInfo_DateTextButton.Text = new DateTime(waterQueryTime_Year, waterQueryTime_Month, waterQueryTime_Day).ToString("yyyy-MM-dd");
+                    }
+                }
+                getWaterHistory();
+            };
+
+            var btnToday = new Button()
+            {
+                X = Application.GetRealWidth(160 - 32) - btnConfrim.GetTextWidth(),
+                Width = Application.GetRealWidth(160),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                Visible = false,
+                Enable = false,
+                Text = "浠婃棩",
+            };
+            topView.AddChidren(btnToday);
+
+            if (waterQueryType == QueryType.day_hour)
+            {
+                try
+                {
+                    btnToday.Visible = btnToday.Enable = true;
+                    btnToday.MouseUpEventHandler = (sender, e) =>
+                    {
+                        item3 = waterQueryTime_Day = DateTime.Now.Day;
+                        item2 = waterQueryTime_Month = DateTime.Now.Month;
+                        item1 = waterQueryTime_Year = DateTime.Now.Year;
+
+                        pickerItems_Year = new List<string>();
+                        pickerItems_Year.Add("2023");
+                        while (DateTime.Now.Year > 2022 + pickerItems_Year.Count)
+                        {
+                            pickerItems_Year.Add((2023 + pickerItems_Year.Count).ToString());
+                        }
+                        pickerItems_Month = new List<string>();
+                        int addMonth = 0;
+                        while (DateTime.Now.Month > addMonth)
+                        {
+                            addMonth++;
+                            pickerItems_Month.Add(addMonth.ToString());
+                        }
+                        pickerItems_Day = new List<string>();
+                        int addDay = 0;
+                        while (DateTime.Now.Day > addDay)
+                        {
+                            addDay++;
+                            pickerItems_Day.Add(addDay.ToString());
+                        }
+
+                        uIPickerView.setNPicker(pickerItems_Year, pickerItems_Month, pickerItems_Day);
+                        uIPickerView.setCurrentItems(pickerItems_Year.IndexOf(waterQueryTime_Year.ToString()),
+                            pickerItems_Month == null ? 0 : pickerItems_Month.IndexOf(waterQueryTime_Month.ToString()),
+                            pickerItems_Day == null ? 0 : pickerItems_Day.IndexOf(waterQueryTime_Day.ToString()));
+                    };
+                }
+                catch { }
+            }
+
+        }
+
+
+
+
+    }
+
+    public enum QueryType
+    {
+        /// <summary>
+        /// 杩�24灏忔椂銆�
+        /// </summary>
+        hour,
+        /// <summary>
+        /// 鏌愭棩24灏忔椂銆�
+        /// </summary>
+        day_hour,
+        /// <summary>
+        /// 杩戜竴鍛ㄣ��
+        /// </summary>
+        week,
+        /// <summary>
+        /// 杩戜竴鏈堛��
+        /// </summary>
+        month,
+        /// <summary>
+        /// 鏌愬勾鏌愭湀 y/M銆�
+        /// </summary>
+        custom_month,
+        /// <summary>
+        /// 鏌愬勾 y
+        /// </summary>
+        custom_year,
+    }
+}
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainDreamPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainDreamPage.cs
index 1cbcd2b..a8a547d 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainDreamPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Curtain/CurtainDreamPage.cs
@@ -300,24 +300,19 @@
                     return;
                 if (updateTemp.spk == bodyView.function.spk && updateTemp.sid == bodyView.function.sid)
                 {
-                try
+                    try
                     {
-                        if (!bodyView.onCurtainAnimation)
+                        var percent = Convert.ToInt32(updateTemp.GetAttrState(FunctionAttributeKey.Percent));
+                        bodyView.curtainSeekBar.Progress = percent;
+                        bodyView.btnProgress.Text = percent + "%";
+
+                        var e = Convert.ToInt32(updateTemp.GetAttrState(FunctionAttributeKey.Angle));
+                        bodyView.angleBar.Progress = e;
+                        float angle = e - 90;
+                        bodyView.btnAngle.Text = (e - 0) + "掳";
+                        foreach (var btn in bodyView.buttons)
                         {
-                            var percent = Convert.ToInt32(updateTemp.GetAttrState(FunctionAttributeKey.Percent));
-                            bodyView.CurtainAnimation(percent);
-                            bodyView.btnProgress.Text = percent + "%";
-
-                            var e = Convert.ToInt32( updateTemp.GetAttrState(FunctionAttributeKey.Angle));
-                            bodyView.angleBar.Progress = e;
-                            float angle = e - 90;
-                            bodyView.btnAngle.Text = (e - 0) + "掳";
-                            foreach (var btn in bodyView.buttons)
-                            {
-                                btn.SetRotation(angle);
-                            }
-
-
+                            btn.SetRotation(angle);
                         }
                     }
                     catch { }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs
index a492590..a416394 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/A_EnvironmentalDataCenter.cs
@@ -896,7 +896,7 @@
                     btnTitle.Text = Language.StringByID(StringId.Temp) + "(掳C)";
                     break;
                 case SPK.SensorTVOC:
-                    btnTitle.Text = "TVOC(PPB)";
+                    btnTitle.Text = "TVOC(mg/m鲁)";
                     break;
                 case SPK.SensorCO2:
                     btnTitle.Text = "CO2(PPM)";
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_BrokenLine.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_BrokenLine.cs
index bb491d3..7378642 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_BrokenLine.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_BrokenLine.cs
@@ -271,7 +271,7 @@
                     grid: {
                          top: '15%',
                         left: '13%',
-                        right: '12%',
+                        right: '15%',
                         bottom: '10%',
                     },
                     xAxis: {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_Histogram.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_Histogram.cs
new file mode 100644
index 0000000..e64d59a
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EchartsOption_Histogram.cs
@@ -0,0 +1,226 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace HDL_ON.UI
+{
+    public class EchartsOption_Histogram
+    {
+        /// <summary>
+        /// x杞存暟鎹�
+        /// </summary>
+        private string XvalueText = "";
+
+        /// <summary>
+        /// Y杞存暟鎹�
+        /// </summary>
+        private string YvalueText = "";
+        /// <summary>
+        /// x杞存爣棰�
+        /// </summary>
+        public string xTitle = "";
+        /// <summary>
+        /// y杞存爣棰�
+        /// </summary>
+        public string yTitle = "";
+
+        public EchartsOption_Histogram()
+        {
+
+        }
+
+
+        /// <summary>
+        /// 缁勮Option鏁版嵁
+        /// </summary>
+        /// <returns></returns>
+        public string InitOption()
+        {
+            //缁勮Value
+            var newstring = optionString.Replace("{xData}", XvalueText);
+            newstring = newstring.Replace("{yData}", YvalueText);
+            newstring = newstring.Replace("{xName}", xTitle);
+            newstring = newstring.Replace("{yName}", yTitle);
+            newstring = newstring.Replace(",,", ",");
+            return newstring;
+        }
+
+        /// <summary>
+        /// 缁勮x杞存枃鏈�
+        /// </summary>
+        /// <param name="xData"></param>
+        public void InitXdataText(List<string> xData)
+        {
+            XvalueText = "";
+            foreach (var data in xData)
+            {
+                XvalueText += "'" + data + "',";
+            }
+        }
+
+        /// <summary>
+        /// 缁勮y杞存枃鏈�
+        /// </summary>
+        /// <param name="yData"></param>
+        public string InitYdataText(List<EnvironmentalSensorHistor> yData)
+        {
+            YvalueText = "";
+            foreach (var data in yData)
+            {
+                YvalueText += "'" + data.fieldValue + "',";
+            }
+
+            return YvalueText;
+        }
+
+#if __ANDROID__
+        public string optionString = @"{
+                              tooltip: {
+                                trigger: 'axis',
+                                axisPointer: {
+                                  crossStyle: {
+                                    color: '#999'
+                                  }
+                                }
+                              },
+                              grid: {
+                                    top: '10%',
+                                    left: '15%',
+                                    right: '15%',
+                                    bottom: '10%',
+                                    },
+                              xAxis: {
+                                data: [{xData}],
+                                axisTick: {
+                                  show: false
+                                },
+                                axisLine: {
+                                  show: false
+                                },
+                                name:'{xName}',
+                                nameGap:5,
+                                nameTextStyle:{
+                                  color:'#7C8590',
+                                  fontSize:10
+                                },
+                                axisLabel: {
+                                  color: '#7C8590',
+                                  fontSize:10
+                                }
+                              },
+                              yAxis: {
+                                name:'{yName}',
+                                nameGap:12,
+                                nameTextStyle:{
+                                  color:'#030D1C',
+                                  fontSize:10
+                                },
+                                axisLine: {
+                                  show: false
+                                },
+                                axisTick: {
+                                  show: false
+                                },
+                                axisLabel: {
+                                  color: '#7C8590',
+                                  fontSize:10
+                                }
+                              },
+                              dataZoom: [
+                                {
+                                  type: 'inside'
+                                }
+                              ],
+                              series: [
+                                {
+                                  type: 'bar',
+                                  showBackground: false,
+                                  itemStyle: {
+                                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+                                      { offset: 0, color: '#6AB7F9' },
+                                      { offset: 0.5, color: '#5AA6FF' },
+                                      { offset: 1, color: '#6B97F9' }
+                                    ])
+                                  },
+                                  data: [{yData}]
+                                }
+                              ]
+                            }";
+#else
+
+        public string optionString = @"{
+                              tooltip: {
+                                trigger: 'axis',
+                                axisPointer: {
+                                  crossStyle: {
+                                    color: '#999'
+                                  }
+                                }
+                              },
+                              grid: {
+                                    top: '10%',
+                                    left: '10%',
+                                    right: '10%',
+                                    bottom: '10%',
+                                    },
+                              xAxis: {
+                                data: [{xData}],
+                                axisTick: {
+                                  show: false
+                                },
+                                axisLine: {
+                                  show: false
+                                },
+                                name:'{xName}',
+                                nameTextStyle:{
+                                  color:'#7C8590',
+                                  fontSize:24
+                                },
+                                axisLabel: {
+                                  color: '#7C8590',
+                                  fontSize:20
+                                }
+                              },
+                              yAxis: {
+                                name:'{yName}',
+                                nameGap:35,
+                                nameTextStyle:{
+                                  color:'#030D1C',
+                                  fontSize:24
+                                },
+                                axisLine: {
+                                  show: false
+                                },
+                                axisTick: {
+                                  show: false
+                                },
+                                axisLabel: {
+                                  color: '#7C8590',
+                                  fontSize:20
+                                }
+                              },
+                              dataZoom: [
+                                {
+                                  type: 'inside'
+                                }
+                              ],
+                              series: [
+                                {
+                                  type: 'bar',
+                                  showBackground: false,
+                                  itemStyle: {
+                                    color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+                                      { offset: 0, color: '#6AB7F9' },
+                                      { offset: 0.5, color: '#5AA6FF' },
+                                      { offset: 1, color: '#6B97F9' }
+                                    ])
+                                  },
+                                  data: [{yData}]
+                                }
+                              ]
+                            }";
+#endif
+
+    }
+
+}
+
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs
index 9e31a22..07f386f 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs
@@ -598,7 +598,7 @@
                     btnTitle.Text = Language.StringByID(StringId.Temp) + "(掳C)";
                     break;
                 case SPK.SensorTVOC:
-                    btnTitle.Text = "TVOC(PPB)";
+                    btnTitle.Text = "TVOC(mg/m鲁)";
                     break;
                 case SPK.SensorCO2:
                     btnTitle.Text = "CO2(PPM)";
diff --git a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
index 7661e18..77219e2 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs
@@ -24,6 +24,7 @@
 
         Sensor sensorTemp = new Sensor();
 
+
         Function function;
         List<Function> showFunctions;
         List<Function> sensorList;
@@ -237,16 +238,6 @@
                         TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                     });
                     break;
-                //case SPK.SensorPm25:
-                //_intervalValue.Add("0 ~ 35");
-                //_intervalValue.Add("36 ~ 75");
-                //_intervalValue.Add("76 ~ 115");
-                //_intervalValue.Add("115 ~");
-                //_levelTextList.Add(StringId.Great);
-                //_levelTextList.Add(StringId.Good);
-                //_levelTextList.Add(StringId.MildPollution);
-                //_levelTextList.Add(StringId.HeavyPollution);
-                //break;
                 case SPK.SensorCO2:
                     tipValuesView.AddChidren(new Button()
                     {
@@ -503,7 +494,7 @@
                     tipTextView.AddChidren(new Button()
                     {
                         Width = Application.GetRealWidth(101),
-                        TextID = StringId.SensorReferenceHumidityTipLevel1,
+                        TextID = StringId.SensorReferenceHumidityTipLevel3,
                         TextAlignment = TextAlignment.Center,
                         TextColor = CSS_Color.FirstLevelTitleColor,
                         TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
@@ -519,7 +510,7 @@
                     tipTextView.AddChidren(new Button()
                     {
                         Width = Application.GetRealWidth(101),
-                        TextID = StringId.SensorReferenceHumidityTipLevel3,
+                        TextID = StringId.SensorReferenceHumidityTipLevel1,
                         TextAlignment = TextAlignment.Center,
                         TextColor = CSS_Color.FirstLevelTitleColor,
                         TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
@@ -918,11 +909,18 @@
 
                     Application.RunOnMainThread(() =>
                     {
-                        ebl.xTitle = "";
-                        ebl.yTitle = "";
+                        if (curQueryType == "hour")
+                        {
+                            ebl.xTitle = Language.StringByID(StringId.HourUint);
+                        }
+                        else
+                        {
+                            ebl.xTitle = Language.StringByID(StringId.Date);
+                        }
+                        ebl.yTitle = Language.StringByID(StringId.Uint) + "(" + sensorTemp.Unit(function) + ")";
+
                         myEchartsView.ShowWithOption(ebl.InitOption());
                     });
-
                 }
                 catch (Exception ex)
                 {
diff --git a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs
index 4f8edc6..ea84682 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPage.cs
@@ -197,7 +197,7 @@
                 Gravity = Gravity.CenterHorizontal,
                 Y = Application.GetRealHeight(200),
                 Width = Application.GetRealWidth(80),
-                Height = Application.GetRealWidth(60),
+                Height = Application.GetRealWidth(65),
                 TextColor = CSS_Color.FirstLevelTitleColor,
                 TextSize = 56,
                 IsBold = true,
@@ -240,7 +240,6 @@
             };
             controlView.AddChidren(btnIndoorTemp);
            
-
             btnMinus = new Button()
             {
                 X = Application.GetRealWidth(21),
diff --git a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
index 15d5264..a3888ee 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/FoolHeating/FloorHeatingPageBLL.cs
@@ -87,16 +87,14 @@
                         bodyView.arcBar.IsClickable = false;
                         bodyView.arcBar.ThumbImagePath = "FunctionIcon/AC/DiyThumbIcon.png";
                     }
-                    ////鑷姩妯″紡涓嶅厑璁歌皟娓╁害 2021-10-27 09:41:35 wxr 闄堢惓鍙嶉
-                    //if (updateTemp.GetAttrState(FunctionAttributeKey.Mode) == "auto" || updateTemp.GetAttrState(FunctionAttributeKey.Mode) == "timer")
-                    //{
-                    //    bodyView.btnPlus.Enable = false;
-                    //    bodyView.btnMinus.Enable = false;
-                    //    bodyView.arcBar.IsClickable = false;
-                    //    bodyView.arcBar.IsOffline = true;
-                    //}
-                    //鏇存柊涓嶅悓鐣岄潰鐘舵�� 2022骞�06鏈�09鏃�19:22:55 wjc 淇敼
-                    bodyView.updateStatusPage();
+                    //鑷姩妯″紡涓嶅厑璁歌皟娓╁害 2021-10-27 09:41:35 wxr 闄堢惓鍙嶉
+                    if (updateTemp.GetAttrState(FunctionAttributeKey.Mode) == "auto" || updateTemp.GetAttrState(FunctionAttributeKey.Mode) == "timer")
+                    {
+                        bodyView.btnPlus.Enable = false;
+                        bodyView.btnMinus.Enable = false;
+                        bodyView.arcBar.IsClickable = false;
+                        bodyView.arcBar.IsOffline = true;
+                    }
                 });
             }
             catch (Exception ex)
@@ -118,16 +116,14 @@
                 //function.SaveFunctionData(true);
             };
 
-            ////鑷姩妯″紡涓嶅厑璁歌皟娓╁害 2021-10-27 09:41:35 wxr 闄堢惓鍙嶉
-            //if (function.GetAttrState(FunctionAttributeKey.Mode) == "auto" || function.GetAttrState(FunctionAttributeKey.Mode) == "timer")
-            //{
-            //    btnPlus.Enable = false;
-            //    btnMinus.Enable = false;
-            //    arcBar.IsClickable = false;
-            //    arcBar.IsOffline = true;
-            //}
-            //鍒濆鍖栦笉鍚岀晫闈㈢姸鎬� 2022骞�06鏈�09鏃�19:22:55 wjc 淇敼
-            this.updateStatusPage();
+            //鑷姩妯″紡涓嶅厑璁歌皟娓╁害 2021-10-27 09:41:35 wxr 闄堢惓鍙嶉
+            if (function.GetAttrState(FunctionAttributeKey.Mode) == "auto" || function.GetAttrState(FunctionAttributeKey.Mode) == "timer")
+            {
+                btnPlus.Enable = false;
+                btnMinus.Enable = false;
+                arcBar.IsClickable = false;
+                arcBar.IsOffline = true;
+            }
         }
 
         /// <summary>
@@ -287,36 +283,6 @@
             dialogView.MouseUpEventHandler = eventHandler;
         }
 
-        /// <summary>
-        /// 鏇存柊涓嶅悓鐣岄潰鐘舵��
-        /// </summary>
-       private void updateStatusPage() 
-        {
-            btnPlus.Enable = true;
-            btnMinus.Enable = true;
-            arcBar.IsClickable = true;
-            arcBar.IsOffline = false;
-            switch (getModeValue)
-            {
-                case "auto"://鑷姩
-                case "timer"://
-                    btnPlus.Enable = false;
-                    btnMinus.Enable = false;
-                    arcBar.IsClickable = false;
-                    arcBar.IsOffline = true;
-                    break;
-
-            }
-        }
-        /// <summary>
-        /// 鑾峰彇妯″紡value鍊�
-        /// </summary>
-        private string getModeValue
-        {
-            get
-            {
-                return function.GetAttrState(FunctionAttributeKey.Mode);
-            }
-        }
+  
     }
-}
+}
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs b/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
index 95e5906..a92197f 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
@@ -52,6 +52,12 @@
             actionRefresh = action;
         }
 
+        public FunctionBaseInfoSetPage()
+        {
+            bodyView = this;
+
+        }
+
         public override void RemoveFromParent()
         {
             new System.Threading.Thread(() =>
@@ -83,6 +89,169 @@
                 ScrollEnabled = false,
             };
             bodyView.AddChidren(contentView);
+            //鍙瀵硅
+            if(function == null)
+            {
+
+                var linphoneConnectView = new FrameLayout()
+                {
+                    Height = Application.GetRealHeight(55),
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                };
+                contentView.AddChidren(linphoneConnectView);
+
+                var linphoneConnectTitle = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Width = Application.GetRealWidth(160),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextSize = CSS_FontSize.SubheadingFontSize,
+                    TextID = StringId.ConnectionMode,
+                };
+                linphoneConnectView.AddChidren(linphoneConnectTitle);
+
+                var linphoneConnectValues = new Button()
+                {
+                    X = Application.GetRealWidth(86),
+                    Width = Application.GetRealWidth(237),
+                    TextAlignment = TextAlignment.CenterRight,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    Text = DB_ResidenceData.Instance.linphoneConnectType.ToString()
+                };
+                linphoneConnectView.AddChidren(linphoneConnectValues);
+
+                var linphoneConnectRight = new Button()
+                {
+                    X = Application.GetRealWidth(339),
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetMinRealAverage(16),
+                    Height = Application.GetMinRealAverage(16),
+                    UnSelectedImagePath = "Public/RightIcon.png",
+                };
+                linphoneConnectView.AddChidren(linphoneConnectRight);
+
+                linphoneConnectView.AddChidren(
+                    new Button()
+                    {
+                        Gravity = Gravity.CenterHorizontal,
+                        BackgroundColor = CSS_Color.DividingLineColor,
+                        Width = Application.GetRealWidth(343),
+                        Height = Application.GetRealHeight(1)
+                    });
+
+                EventHandler<MouseEventArgs> linphoneHandler = (senderBase, senderBasee) =>
+                {
+
+                    Dialog dialog = new Dialog();
+
+                    var pView = new FrameLayout()
+                    {
+                        BackgroundColor = CSS_Color.DialogTransparentColor1,
+                    };
+                    dialog.AddChidren(pView);
+
+                    var optionBaseView = new FrameLayout()
+                    {
+                        Y = Application.GetRealHeight(500),
+                        Height = Application.GetRealHeight(160),
+                        AnimateSpeed = 0.3f,
+                        Animate = Animate.DownToUp,
+                    };
+                    pView.AddChidren(optionBaseView);
+
+                    var optionView = new VerticalScrolViewLayout()
+                    {
+                        Gravity = Gravity.CenterHorizontal,
+                        Width = Application.GetRealWidth(343),
+                        Height = Application.GetRealHeight(100),
+                        BackgroundColor = CSS_Color.MainBackgroundColor,
+                        Radius = (uint)Application.GetRealWidth(12),
+                        ScrollEnabled = false,
+                    };
+                    optionBaseView.AddChidren(optionView);
+
+                    var btnUdp = new Button()
+                    {
+                        Height = Application.GetRealHeight(50),
+                        TextAlignment = TextAlignment.Center,
+                        TextColor = CSS_Color.TextualColor,
+                        SelectedTextColor = CSS_Color.MainColor,
+                        TextSize = CSS_FontSize.SubheadingFontSize,
+                        Text = "UDP",
+                        IsSelected = DB_ResidenceData.Instance.linphoneConnectType == LinphoneConnectType.UDP
+                    };
+                    optionView.AddChidren(btnUdp);
+
+                    optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
+
+                    var btnTcp = new Button()
+                    {
+                        Height = Application.GetRealHeight(50),
+                        TextAlignment = TextAlignment.Center,
+                        TextColor = CSS_Color.TextualColor,
+                        SelectedTextColor = CSS_Color.MainColor,
+                        TextSize = CSS_FontSize.SubheadingFontSize,
+                        Text = "TCP",
+                        IsSelected = DB_ResidenceData.Instance.linphoneConnectType == LinphoneConnectType.TCP
+                    };
+                    optionView.AddChidren(btnTcp);
+
+                    var btnCancel = new Button()
+                    {
+                        Gravity = Gravity.CenterHorizontal,
+                        Y = Application.GetRealHeight(8) + optionView.Bottom,
+                        Width = Application.GetRealWidth(343),
+                        Height = Application.GetRealHeight(50),
+                        BackgroundColor = CSS_Color.MainBackgroundColor,
+                        Radius = (uint)Application.GetRealWidth(12),
+                        TextID = StringId.Cancel,
+                        TextColor = CSS_Color.WarningColor,
+                        TextSize = CSS_FontSize.SubheadingFontSize,
+                    };
+                    optionBaseView.AddChidren(btnCancel);
+
+                    dialog.Show();
+
+                    pView.MouseUpEventHandler = (sender, e) =>
+                    {
+                        dialog.Close();
+                    };
+
+                    btnCancel.MouseUpEventHandler = (sender, e) =>
+                    {
+                        dialog.Close();
+                    };
+                    btnUdp.MouseUpEventHandler = (sender, e) =>
+                    {
+                        DB_ResidenceData.Instance.linphoneConnectType = LinphoneConnectType.UDP;
+                        DB_ResidenceData.Instance.SaveResidenceData();
+                        linphoneConnectValues.Text = LinphoneConnectType.UDP.ToString();
+                        dialog.Close();
+                        new PublicAssmebly().TipMsg(StringId.Tip, StringId.ConnectionModeChangeTip);
+                    };
+
+                    btnTcp.MouseUpEventHandler = (sender, e) =>
+                    {
+                        DB_ResidenceData.Instance.linphoneConnectType = LinphoneConnectType.TCP;
+                        DB_ResidenceData.Instance.SaveResidenceData();
+                        linphoneConnectValues.Text = LinphoneConnectType.TCP.ToString();
+                        dialog.Close();
+                        new PublicAssmebly().TipMsg(StringId.Tip, StringId.ConnectionModeChangeTip);
+                    };
+
+
+                };
+
+                linphoneConnectValues.MouseUpEventHandler = linphoneHandler;
+                linphoneConnectRight.MouseUpEventHandler = linphoneHandler;
+
+                return;
+            }
+
+
+
 
             #region name view
             var nameView = new FrameLayout()
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/View/TopView.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/View/TopView.cs
index f92e78f..d219541 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/View/TopView.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/View/TopView.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using System.Drawing.Printing;
 using HDL_ON.UI.Music;
 using Shared;
 
@@ -12,6 +13,7 @@
         /// </summary>
         public FrameLayout fLayout = new FrameLayout
         {
+            Y = Application.GetRealHeight(10),
             BackgroundColor = MusicColor.TopViewColor,
             Height = Application.GetRealHeight(64),
             Width=Application.GetRealWidth(375),
@@ -90,6 +92,26 @@
             fLayout.AddChidren(setBtn);
             fLayout.AddChidren(clickBackBtn);
             fLayout.AddChidren(clickSetBtn);
+
+
+            var btnSetting = new Button()
+            {
+                X = Application.GetRealWidth(337),
+                Y = Application.GetRealHeight(28),
+                Width = Application.GetMinRealAverage(32),
+                Height = Application.GetMinRealAverage(32),
+                UnSelectedImagePath = "Public/FuncInfoSetIcon.png",
+            };
+            fLayout.AddChidren(btnSetting);
+
+            btnSetting.MouseUpEventHandler = (sender, e) =>
+            {
+                var infoView = new FunctionBaseInfoSetPage();
+                MainPage.BasePageView.AddChidren(infoView);
+                infoView.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
             return fLayout;
         }
         #endregion
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs b/HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs
index 57dae9c..5bdc129 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Video/VideoMainView.cs
@@ -27,6 +27,7 @@
             this.AddChidren(topView.TopFLayoutView());
             topView.topNameBtn.TextID = StringId.keshiduijiang;
 
+
             var pageView = new PageLayout()
             {
                 Y = Application.GetRealHeight(64),
diff --git a/SiriIntents/Server/HttpUtil.cs b/SiriIntents/Server/HttpUtil.cs
index 6abba29..1a66ef0 100644
--- a/SiriIntents/Server/HttpUtil.cs
+++ b/SiriIntents/Server/HttpUtil.cs
@@ -20,11 +20,9 @@
         const string APP_KEY = "HDL-HOME-APP";
         const string SECRET_KEY = "CPL345bn28gHnvi9G4tYbq3cTYkiHC";
 
-
         //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";
         //public const string APP_KEY = "HDL-HOME-APP-TEST";
         //public const string SECRET_KEY = "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss";
-
 
         //public const string GlobalRequestHttpsHost = "http://59.41.255.150:7777";//mmmm
         //const string APP_KEY = "CPEVRLRT";
diff --git a/SiriIntents/SiriIntents.csproj b/SiriIntents/SiriIntents.csproj
index bfb47a3..024994f 100644
--- a/SiriIntents/SiriIntents.csproj
+++ b/SiriIntents/SiriIntents.csproj
@@ -28,7 +28,7 @@
     <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
     <DeviceSpecificBuild>false</DeviceSpecificBuild>
     <MtouchVerbosity></MtouchVerbosity>
-    <CodesignProvision>OnProSiri230729-1-Dev</CodesignProvision>
+    <CodesignProvision>0002-OnProSiri-240905-1-Dev</CodesignProvision>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
     <DebugType>pdbonly</DebugType>
@@ -45,7 +45,7 @@
     <MtouchArch>ARM64</MtouchArch>
     <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
     <MtouchVerbosity></MtouchVerbosity>
-    <CodesignProvision>0002-OnProSiri-240703-1-Hoc</CodesignProvision>
+    <CodesignProvision>0002-OnProSiri-240905-1-Hoc</CodesignProvision>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
     <DebugType>pdbonly</DebugType>
@@ -81,7 +81,7 @@
     <MtouchArch>ARM64</MtouchArch>
     <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
     <MtouchVerbosity></MtouchVerbosity>
-    <CodesignProvision>OnProSiri230729-1-Dev</CodesignProvision>
+    <CodesignProvision>0002-OnProSiri-240905-1-Dev</CodesignProvision>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
diff --git a/SiriIntentsUI/SiriIntentsUI.csproj b/SiriIntentsUI/SiriIntentsUI.csproj
index f1c28c4..f21e5e4 100644
--- a/SiriIntentsUI/SiriIntentsUI.csproj
+++ b/SiriIntentsUI/SiriIntentsUI.csproj
@@ -29,7 +29,7 @@
     <DeviceSpecificBuild>false</DeviceSpecificBuild>
     <MtouchVerbosity></MtouchVerbosity>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodesignProvision>OnProSiriUI230729-1-Dev</CodesignProvision>
+    <CodesignProvision>0002-OnProSiriUI-240905-1-Dev</CodesignProvision>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
     <DebugType>pdbonly</DebugType>
@@ -47,7 +47,7 @@
     <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
     <MtouchVerbosity></MtouchVerbosity>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodesignProvision>0002-OnProSiriUI-240703-1-Hoc</CodesignProvision>
+    <CodesignProvision>0002-OnProSiriUI-240905-1-Hoc</CodesignProvision>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
     <DebugType>pdbonly</DebugType>
@@ -85,7 +85,7 @@
     <MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>
     <MtouchVerbosity></MtouchVerbosity>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodesignProvision>0002-OnProSiriUI-240704-1-Dev</CodesignProvision>
+    <CodesignProvision>0002-OnProSiriUI-240905-1-Dev</CodesignProvision>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />

--
Gitblit v1.8.0