From 84fa7c9665d9bed9aef79237be9c5eb57c49f13d Mon Sep 17 00:00:00 2001
From: hxb <hxb@hdlchina.com.cn>
Date: 星期五, 05 三月 2021 10:54:37 +0800
Subject: [PATCH] Merge branch 'CJL' into ez-test

---
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png         |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png        |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/air.png                                                        |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/delbuton.png                                                    |    0 
 HDL-ON_Android/Assets/Language.ini                                                                 |   61 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png      |    0 
 HDL-ON_iOS/HDL-ON_iOS.csproj                                                                       |   54 
 HDL_ON/Common/ApiUtlis.cs                                                                          |   50 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TopView.cs                                           |   87 +
 HDL-ON_Android/Assets/Phone/PirIcon/search.png                                                     |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png          |    0 
 HDL_ON/HDL_ON.projitems                                                                            |   22 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png   |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png      |    0 
 HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs                                                            |   64 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png       |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/projector.png                                                  |    0 
 HDL_ON/DAL/Server/NewApiRes.cs                                                                     |   17 
 HDL-ON_iOS/Resources/Phone/PirIcon/adddevice.png                                                   |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png       |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/failed.png                                                     |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png         |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png      |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png        |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/search.png                                                      |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png        |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png     |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png        |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/SaveView.cs                                          |   52 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png      |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png        |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/ReplicationView.cs                                   |   69 
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs                                            |    7 
 HDL_ON/Entity/DB_ResidenceData.cs                                                                  |    6 
 HDL-ON_Android/Assets/Phone/PirIcon/icon2.png                                                      |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png        |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png     |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/offline.png                                                    |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/next.png                                                       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/.DS_Store                                                  |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png       |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/dropdown.png                                                   |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/DeviceSet.cs                                              |  244 +++
 HDL_ON/UI/UI2/.DS_Store                                                                            |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/addlbuton.png                                                  |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/online.png                                                      |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/BrandListView.cs                                     |   43 
 HDL-ON_iOS/Resources/Phone/PirIcon/custom.png                                                      |    0 
 HDL-ON_Android/libs/.DS_Store                                                                      |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs                                                 |  101 +
 HDL-ON_iOS/Resources/Language.ini                                                                  |   27 
 HDL_ON/UI/CSS/CSS.cs                                                                               |    5 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png       |    0 
 HDL_ON/DAL/DriverLayer/Control.cs                                                                  |   19 
 HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs                                                |   26 
 HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorDoorWinwsPage.cs                                  |   34 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TipView.cs                                           |  179 ++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png         |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/stb.png                                                         |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png     |    0 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotHistoryPage.cs                            |    2 
 HDL_ON/Entity/Enumerative/ClothsHangerEnum.cs                                                      |    9 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/Buttons.cs                                           |  102 +
 HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings                                             |    2 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddButton.cs                                              |  179 ++
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControl.cs                                             |  279 +++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png        |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png           |    0 
 HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard                                               |    5 
 HDL_ON/.DS_Store                                                                                   |    0 
 HDL_ON/DAL/Server/HttpServerRequest.cs                                                             |   13 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/.DS_Store                                       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png          |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/PatchView.cs                                         |   96 +
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png      |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png   |    0 
 HDL-ON_Android/Properties/AndroidManifest.xml                                                      |    2 
 HDL-ON_Android/Assets/Phone/.DS_Store                                                              |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png     |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png         |    0 
 HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs                                  |   16 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png         |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png        |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png     |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png      |    0 
 HDL_ON/DAL/Mqtt/MqttClient.cs                                                                      |   18 
 HDL-ON_Android/HDL-ON_Android.csproj                                                               |   54 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png         |    0 
 HDL-ON_iOS/Info.plist                                                                              |    4 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs                                   |   32 
 HDL_ON/Common/HDLCommon.cs                                                                         |   92 +
 HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs                                           |   41 
 HDL_ON/UI/UI1-Login/LoginPage.cs                                                                   |    2 
 HDL-ON_Android/Assets/Phone/PirIcon/icon1.png                                                      |    0 
 HDL_ON/UI/.DS_Store                                                                                |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png        |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png        |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/priequipment.png                                                |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/del.png                                                         |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/projector.png                                                   |    0 
 HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs                                               |   33 
 HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorSmokePage.cs                                      |   31 
 HDL-ON_iOS/Resources/Phone/PirIcon/next.png                                                        |    0 
 HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard                                            |    5 
 HDL-ON_iOS/Resources/Phone/PirIcon/addlbuton.png                                                   |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/succeed.png                                                    |    0 
 HDL_ON/Entity/Function/Function.cs                                                                 |  273 ++-
 HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs                                              |  229 ++-
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png           |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/dropdown.png                                                    |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/delbuton.png                                                   |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMain.cs                                                |  339 ++++
 HDL_ON/Entity/Function/DeviceFunction.cs                                                           |   15 
 HDL-ON_Android/Assets/Phone/PirIcon/del.png                                                        |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/BrandList.cs                                              |   90 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png          |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png    |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/custom.png                                                     |    0 
 HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs                                                          |    4 
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                                                               |   32 
 HDL-ON_iOS/Resources/Phone/PirIcon/tv.png                                                          |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/online.png                                                     |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png     |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png  |    0 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs                                   |  464 ++++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png      |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png        |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/tv.png                                                         |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png      |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png         |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png        |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/Infraredtreasure.png                                            |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/Infraredtreasure.png                                           |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/offline.png                                                     |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/fan.png                                                        |    0 
 HDL_ON/UI/MainPage.cs                                                                              |    2 
 HDL-ON_Android/Application.cs                                                                      |    2 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png      |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/STB.png                                                        |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/dvd.png                                                        |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png    |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png    |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png          |    0 
 HDL-ON_iOS/Resources/Phone/LogicIcon/changesinoutdoor.png                                          |    0 
 HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorWaterImmersionPage.cs                             |   28 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png       |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Pir.cs                                                    |   48 
 DLL/IOS/EZSDK.IOS.dll                                                                              |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/air.png                                                         |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png         |    0 
 HDL_ON/Entity/FunctionList.cs                                                                      |   77 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png        |    0 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs                                          |    3 
 HDL-ON_iOS/Resources/Phone/PirIcon/dvd.png                                                         |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png         |    0 
 HDL-ON_iOS/Resources/Phone/PirIcon/fan.png                                                         |    0 
 HDL_ON/DAL/Server/NewAPI.cs                                                                        |   38 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControlComplete.cs                                     |  121 +
 HDL-ON_Android/Assets/Phone/PirIcon/priequipment.png                                               |    0 
 HDL_ON/UI/UI2/3-Intelligence/Automation/.DS_Store                                                  |    0 
 HDL-ON_Android/Assets/Phone/PirIcon/adddevice.png                                                  |    0 
 HDL_ON/Common/R.cs                                                                                 |   67 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs                                                |  175 ++
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/FailView.cs                                          |   65 
 170 files changed, 3,782 insertions(+), 474 deletions(-)

diff --git a/DLL/IOS/EZSDK.IOS.dll b/DLL/IOS/EZSDK.IOS.dll
index 7e18fc2..fdc491c 100644
--- a/DLL/IOS/EZSDK.IOS.dll
+++ b/DLL/IOS/EZSDK.IOS.dll
Binary files differ
diff --git a/HDL-ON_Android/Application.cs b/HDL-ON_Android/Application.cs
index cf6dae2..bb26507 100644
--- a/HDL-ON_Android/Application.cs
+++ b/HDL-ON_Android/Application.cs
@@ -57,7 +57,7 @@
             Manifest.Permission.Camera, Manifest.Permission.ProcessOutgoingCalls, Manifest.Permission.GetAccounts};
             //绂佹灞忓箷闀夸寒
             BaseActivity.KeepScreenON = false;
-            //闅愯棌杩嫓铏氭嫙鎸夐敭
+            //闅愯棌铏氭嫙鎸夐敭
             BaseActivity.IsHideVirualButtons = true;
             //瀹炵幇瀹夊崜杩斿洖鎸夐敭
             BaseActivity.BackKeyAction = () => {
diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index 8849016..dae92a1 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -1164,6 +1164,67 @@
 5047=浣犳墜鏈烘殏鏈畨瑁�"QQ闊充箰"{\r\n}璇峰墠寰�鎵嬫満鍟嗗満瀹夎
 
 
+
+6000=姝e父
+6001=璁惧鐘舵��
+6002=涓�
+6003=褰撳墠绾㈠閬ユ帶璁惧
+6004=宸叉坊鍔犻仴鎺у櫒
+6005=绌鸿皟
+6006=鐢佃
+6007=椋庢墖
+6008=鏈洪《鐩�
+6009=DVD/EVD/VCD
+6010=鎶曞奖浠�
+6011=鑷畾涔�
+6012=绾㈠閬ユ帶
+6013=璁惧绠$悊
+6014=娣诲姞閬ユ帶鍣�
+6015=鍦ㄧ嚎
+6016=绂荤嚎
+6017=鐗堟湰鍙�
+6018=璇疯緭鍏ラ仴鎺у櫒鍚嶇О
+6019=鎻愮ず锛氶仴鎺у櫒鍒涘缓鍚庡彲鍦ㄥ姛鑳�-鐢靛櫒鍒嗙被{\r\n}鏌ユ壘浣跨敤
+6020=鎺ㄨ崘鎸夐敭
+6021=璇疯緭鍏ユ寜閿悕绉�
+6022=涓嬩竴姝�
+6023=鐢垫簮
+6024=闊抽噺+
+6025=闊抽噺-
+6026=棰戦亾+
+6027=棰戦亾-
+6028=涓�
+6029=涓�
+6030=宸�
+6031=鍙�
+6032=闈欓煶
+6034=纭
+6035=鎾斁
+6037=閫�鍑�
+6038=鑿滃崟
+6039=鏆傚仠
+6040=杩斿洖
+6041=鍋滄
+6042=涓婚〉
+6043=蹇繘
+6044=蹇��
+6045=瀹氭椂
+6046=澶嶅埗閬ユ帶鍔熻兘
+6047=瀵瑰噯閬ユ帶鍣ㄤ腑蹇冩寜涓嬬浉鍚屾寜閿�
+6048=鏅鸿兘閬ユ帶鍣�
+6049=娣诲姞鎸夐敭
+6050=*闀挎寜鍙繘琛岃嚜瀹氫箟鎺掑簭
+6051=瀹屾垚
+6052=娣诲姞鎴愬姛
+6053=鍙埌鍒嗙被-鍔熻兘-鐢靛櫒鎿嶄綔浣跨敤
+6054=鎵�灞炲垎绫�
+6055=閬ユ帶鍣ㄥ悕绉�
+6056=鎵�灞炲尯鍩�
+6057=缁х画娣诲姞
+6058=鐢靛櫒
+6059=娣诲姞澶辫触
+6060=閲嶈瘯
+
 7000=鏂板缓鑷姩鍖�
 7001=缂栬緫鑷姩鍖�
 7002=濡傛灉
diff --git a/HDL-ON_Android/Assets/Phone/.DS_Store b/HDL-ON_Android/Assets/Phone/.DS_Store
new file mode 100644
index 0000000..48a1486
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/.DS_Store
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png
new file mode 100644
index 0000000..a841cde
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png
new file mode 100644
index 0000000..0b5383a
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png
new file mode 100644
index 0000000..532cd7b
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png
new file mode 100644
index 0000000..3703294
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png
new file mode 100644
index 0000000..23a07fb
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png
new file mode 100644
index 0000000..8556efe
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png
new file mode 100644
index 0000000..5c5be51
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png
new file mode 100644
index 0000000..7c0712b
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png
new file mode 100644
index 0000000..ef32e24
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png
new file mode 100644
index 0000000..c9229df
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png
new file mode 100644
index 0000000..d3239be
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png
new file mode 100644
index 0000000..5e5412c
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png
new file mode 100644
index 0000000..0058757
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png
new file mode 100644
index 0000000..ed43950
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png
new file mode 100644
index 0000000..76bf0d7
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png
new file mode 100644
index 0000000..7553f10
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png
new file mode 100644
index 0000000..9504757
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png
new file mode 100644
index 0000000..b40e615
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png
new file mode 100644
index 0000000..ca4fa27
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png
new file mode 100644
index 0000000..6135902
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png
new file mode 100644
index 0000000..894b3df
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png
new file mode 100644
index 0000000..1d697cd
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png
new file mode 100644
index 0000000..0054ffe
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png
new file mode 100644
index 0000000..10b8022
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png
new file mode 100644
index 0000000..d230e80
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png
new file mode 100644
index 0000000..0cd1b20
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png
new file mode 100644
index 0000000..d907ca3
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png
new file mode 100644
index 0000000..dd35a42
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png
new file mode 100644
index 0000000..6649024
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png
new file mode 100644
index 0000000..052a832
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/Infraredtreasure.png b/HDL-ON_Android/Assets/Phone/PirIcon/Infraredtreasure.png
new file mode 100755
index 0000000..8304df6
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/Infraredtreasure.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/STB.png b/HDL-ON_Android/Assets/Phone/PirIcon/STB.png
new file mode 100755
index 0000000..3cf8772
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/STB.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/adddevice.png b/HDL-ON_Android/Assets/Phone/PirIcon/adddevice.png
new file mode 100755
index 0000000..445d743
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/adddevice.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/addlbuton.png b/HDL-ON_Android/Assets/Phone/PirIcon/addlbuton.png
new file mode 100755
index 0000000..568abba
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/addlbuton.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/air.png b/HDL-ON_Android/Assets/Phone/PirIcon/air.png
new file mode 100755
index 0000000..87bc5af
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/air.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/custom.png b/HDL-ON_Android/Assets/Phone/PirIcon/custom.png
new file mode 100755
index 0000000..80001e0
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/custom.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/del.png b/HDL-ON_Android/Assets/Phone/PirIcon/del.png
new file mode 100755
index 0000000..6a93cad
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/del.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/delbuton.png b/HDL-ON_Android/Assets/Phone/PirIcon/delbuton.png
new file mode 100755
index 0000000..2421cd5
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/delbuton.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/dropdown.png b/HDL-ON_Android/Assets/Phone/PirIcon/dropdown.png
new file mode 100755
index 0000000..ad0f3b1
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/dropdown.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/dvd.png b/HDL-ON_Android/Assets/Phone/PirIcon/dvd.png
new file mode 100755
index 0000000..fea8fa9
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/dvd.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/failed.png b/HDL-ON_Android/Assets/Phone/PirIcon/failed.png
new file mode 100755
index 0000000..76dcfbe
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/failed.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/fan.png b/HDL-ON_Android/Assets/Phone/PirIcon/fan.png
new file mode 100755
index 0000000..a1d4ed6
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/fan.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/icon1.png b/HDL-ON_Android/Assets/Phone/PirIcon/icon1.png
new file mode 100755
index 0000000..2430b09
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/icon1.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/icon2.png b/HDL-ON_Android/Assets/Phone/PirIcon/icon2.png
new file mode 100755
index 0000000..a68738c
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/icon2.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/next.png b/HDL-ON_Android/Assets/Phone/PirIcon/next.png
new file mode 100755
index 0000000..df1fd5e
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/next.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/offline.png b/HDL-ON_Android/Assets/Phone/PirIcon/offline.png
new file mode 100755
index 0000000..e93d6e2
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/offline.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/online.png b/HDL-ON_Android/Assets/Phone/PirIcon/online.png
new file mode 100755
index 0000000..1df20e6
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/online.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/priequipment.png b/HDL-ON_Android/Assets/Phone/PirIcon/priequipment.png
new file mode 100755
index 0000000..b4dd756
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/priequipment.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/projector.png b/HDL-ON_Android/Assets/Phone/PirIcon/projector.png
new file mode 100755
index 0000000..74ae608
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/projector.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/search.png b/HDL-ON_Android/Assets/Phone/PirIcon/search.png
new file mode 100755
index 0000000..505b270
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/search.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/succeed.png b/HDL-ON_Android/Assets/Phone/PirIcon/succeed.png
new file mode 100755
index 0000000..61c36c2
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/succeed.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/PirIcon/tv.png b/HDL-ON_Android/Assets/Phone/PirIcon/tv.png
new file mode 100755
index 0000000..c4228d3
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/PirIcon/tv.png
Binary files differ
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index d7b61e5..d35a52a 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -205,6 +205,8 @@
     <Folder Include="Other\" />
     <Folder Include="Other\JPush\" />
     <Folder Include="Assets\Phone\FunctionIcon\Electrical\WaterValve\" />
+    <Folder Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\" />
+    <Folder Include="Assets\Phone\PirIcon\" />
   </ItemGroup>
   <ItemGroup>
     <PackageReference Include="Xamarin.Android.Support.Design" Version="28.0.0.3" />
@@ -753,6 +755,58 @@
     <AndroidAsset Include="Assets\Phone\FunctionIcon\ArmSensor\ArmSensorDoorIcon.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\ArmSensor\ArmSensorPirStateBgIconOn.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\ArmSensor\ArmSensorWaterImmersionStateBgIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerAnionIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerAnionIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBgIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBgIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBlueIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDisinfectIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDisinfectIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon1.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon1On.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon2.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon2On.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerGrayIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerHotDryIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerHotDryIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerLightIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerLightIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerStopIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerStopIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerTimeIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerTimeIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon1.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon1On.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon2.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon2On.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerWindDryIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerWindDryIconOn.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\air.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\custom.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\dvd.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\fan.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\Infraredtreasure.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\projector.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\search.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\tv.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\stb.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\offline.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\online.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\priequipment.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\addlbuton.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\del.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\delbuton.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\dropdown.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\adddevice.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\next.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\failed.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\icon1.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\icon2.png" />
+    <AndroidAsset Include="Assets\Phone\PirIcon\succeed.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidNativeLibrary Include="libs\armeabi-v7a\libelianjni.so" />
diff --git a/HDL-ON_Android/Properties/AndroidManifest.xml b/HDL-ON_Android/Properties/AndroidManifest.xml
index 43c8919..e4ba9f9 100644
--- a/HDL-ON_Android/Properties/AndroidManifest.xml
+++ b/HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202102231" android:versionName="1.1.202102231" package="com.hdl.onpro">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202102252" android:versionName="1.1.202102252" package="com.hdl.onpro">
 	<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="26" />
 	<!--  瀹氫綅鏉冮檺-->
 	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
diff --git a/HDL-ON_Android/libs/.DS_Store b/HDL-ON_Android/libs/.DS_Store
new file mode 100644
index 0000000..ae45fc3
--- /dev/null
+++ b/HDL-ON_Android/libs/.DS_Store
Binary files differ
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index 248888f..defd46e 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -47,14 +47,14 @@
         <ErrorReport>prompt</ErrorReport>
         <WarningLevel>4</WarningLevel>
         <MtouchArch>ARM64</MtouchArch>
-        <CodesignKey>iPhone Developer</CodesignKey>
+        <CodesignKey>Apple Development: xuebiao huang (4P32GXQWWK)</CodesignKey>
         <MtouchDebug>true</MtouchDebug>
         <MtouchI18n>cjk</MtouchI18n>
         <MtouchLink>SdkOnly</MtouchLink>
         <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC"</MtouchExtraArgs>
         <MtouchEnableSGenConc>false</MtouchEnableSGenConc>
 <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
-        <CodesignProvision>ComHdlOnProDevelopment20210116-2</CodesignProvision>
+        <CodesignProvision>ComHdlOnProDevelopment20210225-1</CodesignProvision>
     </PropertyGroup>
     <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
         <DebugType>none</DebugType>
@@ -443,6 +443,7 @@
         <Folder Include="Resources\zh-Hans.lproj\" />
         <Folder Include="Resources\Phone\FunctionIcon\Electrical\WaterValve\" />
         <Folder Include="Resources\Phone\FunctionIcon\ArmSensor\" />
+        <Folder Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\" />
     </ItemGroup>
     <ItemGroup>
         <InterfaceDefinition Include="LaunchScreen.storyboard" />
@@ -1007,6 +1008,55 @@
       <BundleResource Include="Resources\Phone\FunctionIcon\ArmSensor\ArmSensorWaterImmersionStateBgIcon.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\ArmSensor\ArmSensorWaterImmersionStateBgIconOn.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\ArmSensor\PowerLowIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerAnionIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerAnionIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBgIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBgIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDisinfectIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDisinfectIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerHotDryIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerHotDryIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerLightIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerLightIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerStopIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerStopIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerTimeIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerTimeIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerWindDryIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerWindDryIconOn.png" />
+      <BundleResource Include="Resources\Phone\LogicIcon\changesinoutdoor.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerBlueIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerGrayIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon1.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon1On.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon2.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerDownIcon2On.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon1.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon1On.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon2.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\ClothesHanger\ClothesHangerUpIcon2On.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\fan.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\dvd.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\stb.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\tv.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\projector.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\air.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\custom.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\priequipment.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\offline.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\search.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\del.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\dropdown.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\addlbuton.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\delbuton.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\Infraredtreasure.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\online.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\adddevice.png" />
+      <BundleResource Include="Resources\Phone\PirIcon\next.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Info.plist b/HDL-ON_iOS/Info.plist
index a59d3e6..4e55362 100644
--- a/HDL-ON_iOS/Info.plist
+++ b/HDL-ON_iOS/Info.plist
@@ -102,9 +102,9 @@
 	<key>UIStatusBarStyle</key>
 	<string>UIStatusBarStyleLightContent</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.1.202102231</string>
+	<string>1.1.202102242</string>
 	<key>CFBundleVersion</key>
-	<string>202102231</string>
+	<string>202102242</string>
 	<key>NSLocationWhenInUseUsageDescription</key>
 	<string>Use geographic location to provide services such as weather</string>
 	<key>NSAppleMusicUsageDescription</key>
diff --git a/HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard b/HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard
index bf1eb84..284eeed 100644
--- a/HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard
+++ b/HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard
@@ -141,6 +141,7 @@
                                 <constraints>
                                     <constraint firstAttribute="height" constant="40" id="vLh-9U-8RO"/>
                                 </constraints>
+                                <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                 <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
                                 <connections>
@@ -165,6 +166,7 @@
                                 <constraints>
                                     <constraint firstAttribute="height" constant="40" id="DjM-dg-5en"/>
                                 </constraints>
+                                <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                 <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
                                 <connections>
@@ -450,6 +452,7 @@
                                 <constraints>
                                     <constraint firstAttribute="height" constant="34" id="FPO-BB-N1L"/>
                                 </constraints>
+                                <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                 <textInputTraits key="textInputTraits" secureTextEntry="YES"/>
                             </textField>
@@ -912,7 +915,7 @@
     <inferredMetricsTieBreakers>
         <segue reference="9TP-S2-hhI"/>
         <segue reference="MFl-yy-ZsP"/>
-        <segue reference="VYk-37-nb6"/>
+        <segue reference="ikM-Zn-H8f"/>
     </inferredMetricsTieBreakers>
     <resources>
         <image name="addDevice_success" width="320" height="185"/>
diff --git a/HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard b/HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard
index 73d04bc..0db5c3a 100644
--- a/HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard
+++ b/HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard
@@ -2025,10 +2025,11 @@
                         <subviews>
                             <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="璇疯緭鍏ヨ澶囧悕绉�" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="r1W-d8-Rg7">
                                 <rect key="frame" x="0.0" y="94" width="375" height="40"/>
-                                <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="40" id="NLX-OK-XZ7"/>
                                 </constraints>
+                                <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                 <textInputTraits key="textInputTraits"/>
                             </textField>
@@ -2471,7 +2472,7 @@
     <inferredMetricsTieBreakers>
         <segue reference="Qls-Y0-o2u"/>
         <segue reference="X3Q-o5-p8V"/>
-        <segue reference="q2I-Q5-CUY"/>
+        <segue reference="9Tu-UR-Cms"/>
         <segue reference="vdt-wN-aOY"/>
     </inferredMetricsTieBreakers>
     <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 8cf1a58..b39aa8e 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -402,6 +402,11 @@
 417=Water Leakage
 418=In Alarm
 419=Normal
+420=Hot Dry
+421=Air Dry
+422=Disinfect
+423=Lighting
+
 	
 5000=Music
 5001=Group
@@ -1068,6 +1073,10 @@
 417=婕忔按
 418=鎶ヨ
 419=姝e父
+420=鐑樺共
+421=椋庡共
+422=娑堟瘨
+423=鐓ф槑
 
 
 1000=瀹ゅ唴婀垮害
@@ -1171,6 +1180,24 @@
 5047=浣犳墜鏈烘殏鏈畨瑁�"QQ闊充箰"{\r\n}璇峰墠寰�鎵嬫満鍟嗗満瀹夎
 
 
+6000=姝e父
+6001=璁惧鐘舵��
+6002=涓�
+6003=褰撳墠绾㈠閬ユ帶璁惧
+6004=宸叉坊鍔犻仴鎺у櫒
+6005=绌鸿皟
+6006=鐢佃
+6007=椋庢墖
+6008=鏈洪《鐩�
+6009=DVD/EVD/VCD
+6010=鎶曞奖浠�
+6011=鑷畾涔�
+6012=绾㈠閬ユ帶
+6013=璁惧绠$悊
+6014=娣诲姞閬ユ帶鍣�
+
+
+
 7000=鏂板缓鑷姩鍖�
 7001=缂栬緫鑷姩鍖�
 7002=濡傛灉
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/.DS_Store b/HDL-ON_iOS/Resources/Phone/FunctionIcon/.DS_Store
new file mode 100644
index 0000000..64aa0f2
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/.DS_Store
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/.DS_Store b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/.DS_Store
new file mode 100644
index 0000000..c84c9d0
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/.DS_Store
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png
new file mode 100644
index 0000000..a841cde
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png
new file mode 100644
index 0000000..0b5383a
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerAnionIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png
new file mode 100644
index 0000000..532cd7b
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png
new file mode 100644
index 0000000..3703294
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png
new file mode 100644
index 0000000..23a07fb
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png
new file mode 100644
index 0000000..8556efe
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png
new file mode 100644
index 0000000..5c5be51
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png
new file mode 100644
index 0000000..7c0712b
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png
new file mode 100644
index 0000000..ef32e24
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png
new file mode 100644
index 0000000..c9229df
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png
new file mode 100644
index 0000000..d3239be
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png
new file mode 100644
index 0000000..5e5412c
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png
new file mode 100644
index 0000000..0058757
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png
new file mode 100644
index 0000000..ed43950
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png
new file mode 100644
index 0000000..76bf0d7
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png
new file mode 100644
index 0000000..7553f10
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png
new file mode 100644
index 0000000..9504757
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png
new file mode 100644
index 0000000..b40e615
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png
new file mode 100644
index 0000000..ca4fa27
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png
new file mode 100644
index 0000000..6135902
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png
new file mode 100644
index 0000000..894b3df
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png
new file mode 100644
index 0000000..1d697cd
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerTimeIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png
new file mode 100644
index 0000000..0054ffe
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png
new file mode 100644
index 0000000..10b8022
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png
new file mode 100644
index 0000000..d230e80
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png
new file mode 100644
index 0000000..0cd1b20
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png
new file mode 100644
index 0000000..d907ca3
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png
new file mode 100644
index 0000000..dd35a42
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png
new file mode 100644
index 0000000..6649024
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png
new file mode 100644
index 0000000..052a832
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/LogicIcon/changesinoutdoor.png b/HDL-ON_iOS/Resources/Phone/LogicIcon/changesinoutdoor.png
new file mode 100644
index 0000000..32432d0
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/LogicIcon/changesinoutdoor.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/Infraredtreasure.png b/HDL-ON_iOS/Resources/Phone/PirIcon/Infraredtreasure.png
new file mode 100755
index 0000000..8304df6
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/Infraredtreasure.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/adddevice.png b/HDL-ON_iOS/Resources/Phone/PirIcon/adddevice.png
new file mode 100755
index 0000000..445d743
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/adddevice.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/addlbuton.png b/HDL-ON_iOS/Resources/Phone/PirIcon/addlbuton.png
new file mode 100755
index 0000000..568abba
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/addlbuton.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/air.png b/HDL-ON_iOS/Resources/Phone/PirIcon/air.png
new file mode 100755
index 0000000..87bc5af
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/air.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/custom.png b/HDL-ON_iOS/Resources/Phone/PirIcon/custom.png
new file mode 100755
index 0000000..80001e0
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/custom.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/del.png b/HDL-ON_iOS/Resources/Phone/PirIcon/del.png
new file mode 100755
index 0000000..6a93cad
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/del.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/delbuton.png b/HDL-ON_iOS/Resources/Phone/PirIcon/delbuton.png
new file mode 100755
index 0000000..2421cd5
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/delbuton.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/dropdown.png b/HDL-ON_iOS/Resources/Phone/PirIcon/dropdown.png
new file mode 100755
index 0000000..ad0f3b1
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/dropdown.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/dvd.png b/HDL-ON_iOS/Resources/Phone/PirIcon/dvd.png
new file mode 100755
index 0000000..fea8fa9
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/dvd.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/fan.png b/HDL-ON_iOS/Resources/Phone/PirIcon/fan.png
new file mode 100755
index 0000000..a1d4ed6
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/fan.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/next.png b/HDL-ON_iOS/Resources/Phone/PirIcon/next.png
new file mode 100755
index 0000000..df1fd5e
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/next.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/offline.png b/HDL-ON_iOS/Resources/Phone/PirIcon/offline.png
new file mode 100755
index 0000000..e93d6e2
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/offline.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/online.png b/HDL-ON_iOS/Resources/Phone/PirIcon/online.png
new file mode 100755
index 0000000..1df20e6
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/online.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/priequipment.png b/HDL-ON_iOS/Resources/Phone/PirIcon/priequipment.png
new file mode 100755
index 0000000..b4dd756
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/priequipment.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/projector.png b/HDL-ON_iOS/Resources/Phone/PirIcon/projector.png
new file mode 100755
index 0000000..74ae608
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/projector.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/search.png b/HDL-ON_iOS/Resources/Phone/PirIcon/search.png
new file mode 100755
index 0000000..505b270
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/search.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/stb.png b/HDL-ON_iOS/Resources/Phone/PirIcon/stb.png
new file mode 100755
index 0000000..3cf8772
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/stb.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/PirIcon/tv.png b/HDL-ON_iOS/Resources/Phone/PirIcon/tv.png
new file mode 100755
index 0000000..c4228d3
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/PirIcon/tv.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings b/HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings
index c2c7209..941dd22 100644
--- a/HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings
+++ b/HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings
@@ -23,7 +23,7 @@
 "ad_restart_tip"="闀挎寜璁惧涓婄殑reset閿�10绉掑悗鏉惧紑锛屽苟绛夊緟澶х害30绉掔洿鍒拌澶囧惎鍔ㄥ畬鎴�";
 "ad_restart_done"="鎴戝凡閲嶅惎濂�";
 "ad_get_device_info_msg"="姝e湪鏌ヨ璁惧淇℃伅锛岃绋嶅悗...";
-"ad_already_added"="鎮ㄥ凡娣诲姞杩囨璁惧";
+"ad_already_added"="姝よ澶囧凡琚坊鍔�";
 "ad_added_by_others"="姝よ澶囧凡琚埆浜烘坊鍔�";
 "get_info_fail"="鏌ヨ澶辫触锛岀綉缁滀笉缁欏姏";
 "ad_input_manual"="鎵嬪姩杈撳叆";
diff --git a/HDL_ON/.DS_Store b/HDL_ON/.DS_Store
new file mode 100644
index 0000000..369c06c
--- /dev/null
+++ b/HDL_ON/.DS_Store
Binary files differ
diff --git a/HDL_ON/Common/ApiUtlis.cs b/HDL_ON/Common/ApiUtlis.cs
index 605a3b4..3141f5d 100644
--- a/HDL_ON/Common/ApiUtlis.cs
+++ b/HDL_ON/Common/ApiUtlis.cs
@@ -159,6 +159,7 @@
                         {
                             deviceList = new DevcieApiPack();
                         }
+                        string delFile = "";
                         if (FunctionList.List.GetDeviceFunctionList().Count > 0)
                         {
 
@@ -171,34 +172,43 @@
                                     continue;
                                 }
                                 var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
-                                if (newFunction == null)//濡傛灉浜戠鏈�鏂版暟鎹病鏈夎鏉℃暟鎹紝鍒欐湰鍦伴渶瑕佸垹鎺夎鏁版嵁璁板綍
+                                //if (newFunction == null)//濡傛灉浜戠鏈�鏂版暟鎹病鏈夎鏉℃暟鎹紝鍒欐湰鍦伴渶瑕佸垹鎺夎鏁版嵁璁板綍
+                                //{
+                                //    FunctionList.List.DeleteFunction(localFunction);
+                                //}
+                                //else
+                                //{
+                                //    MainPage.Log($"deviceType:{localFunction.spk} local:{localFunction.modifyTime} server:{newFunction.modifyTime}");
+                                //    i++;
+                                //    //if (localFunction.modifyTime != newFunction.modifyTime)
+                                //    //{
+                                //    //    //鍙紭鍖�
+                                //    //    localFunction.name = newFunction.name;
+                                //    //    localFunction.collect = newFunction.collect;
+                                //    //    localFunction.modifyTime = newFunction.modifyTime;
+                                //    //    localFunction.roomIds = newFunction.roomIds;
+                                //    //    localFunction.bus = newFunction.bus;
+                                //    //    localFunction.SaveFunctionFile();
+                                //    //}
+                                //    localFunction = newFunction;
+                                //    localFunction.SaveFunctionFile();
+                                //    deviceList.list.Remove(newFunction);//鎿嶄綔瀹岀殑鏁版嵁娓呯悊鎺夛紝鍓╀笅鐨勫氨鏄柊澧炵殑鍔熻兘
+                                //}
+
+                                if (delFile == localFunction.savePath)
                                 {
-                                    FunctionList.List.DeleteFunction(localFunction);
-                                }
-                                else
-                                {
-                                    MainPage.Log($"deviceType:{localFunction.spk} local:{localFunction.modifyTime} server:{newFunction.modifyTime}");
                                     i++;
-                                    //if (localFunction.modifyTime != newFunction.modifyTime)
-                                    //{
-                                    //    //鍙紭鍖�
-                                    //    localFunction.name = newFunction.name;
-                                    //    localFunction.collect = newFunction.collect;
-                                    //    localFunction.modifyTime = newFunction.modifyTime;
-                                    //    localFunction.roomIds = newFunction.roomIds;
-                                    //    localFunction.bus = newFunction.bus;
-                                    //    localFunction.SaveFunctionFile();
-                                    //}
-                                    localFunction = newFunction;
-                                    localFunction.SaveFunctionFile();
-                                    deviceList.list.Remove(newFunction);//鎿嶄綔瀹岀殑鏁版嵁娓呯悊鎺夛紝鍓╀笅鐨勫氨鏄柊澧炵殑鍔熻兘
+                                    continue;
                                 }
+                                delFile = localFunction.savePath;
+                                FunctionList.List.DeleteFunction(localFunction);
+
                             }
 
 
                         }
                         //澶勭悊鍓╀笅鐨勬柊澧炲姛鑳�
-                        foreach (var newFunction in deviceList.list)
+                        foreach (var newFunction in deviceList.list) 
                         {
                             newFunction.SaveFunctionFile();
                             FunctionList.List.IniFunctionList(newFunction.savePath);
diff --git a/HDL_ON/Common/HDLCommon.cs b/HDL_ON/Common/HDLCommon.cs
index 0480e9f..a19d240 100644
--- a/HDL_ON/Common/HDLCommon.cs
+++ b/HDL_ON/Common/HDLCommon.cs
@@ -278,7 +278,7 @@
                             ShowAlarmPushMessage(jpushMessageInfo);
                             //new Alert(jpushMessageInfo.Title, jpushMessageInfo.Content, Language.StringByID(StringId.Close)).Show();
                         }
-                       
+
                     });
                     return;
                 }
@@ -310,6 +310,7 @@
                 case "13375012446":
                 case "13602944661":
                 case "18778381374":
+                case "18316672920":
                     return;
             }
 
@@ -383,8 +384,9 @@
             {
                 //Dialog
                 alarmPushConfirmDialog = null;
-                Action backAction = () => {
-                   
+                Action backAction = () =>
+                {
+
                 };
                 var skipPage = new MessageCenterPage();
                 MainPage.BasePageView.AddChidren(skipPage);
@@ -479,7 +481,7 @@
             {
                 MainPage.InternetStatus = 1;
                 Control.Ins.SearchLoaclGateway();
-                
+
             }
             else if (internetStatus == 2)//WiFi缃戠粶
             {
@@ -488,5 +490,87 @@
             }
         }
         #endregion
+
+        #region 璺宠浆鎵撳紑钀ょ煶浜戞柟娉�
+
+        /// <summary>
+        /// 鑾峰彇瀛愯处鍙穞oken骞惰烦杞澶囧垪琛ㄩ〉闈�
+        /// </summary>
+        /// <param name="bodyView"></param>
+        public void Go2EZvizMonitor(FrameLayout bodyView)
+        {
+            var waitPage = new Loading();
+            bodyView.AddChidren(waitPage);
+            waitPage.Start(Language.StringByID(StringId.PleaseWait));
+
+            new Thread(() =>
+            {
+                try
+                {
+                    //鍏堣幏鍙栬悿鐭充簯瀛愯处鍙穞oken
+                    var result = new HttpServerRequest().EZGetChildToken();
+                    if (result.Code == StateCode.SUCCESS)
+                    {
+                        var ezChildAccessToken = Newtonsoft.Json.JsonConvert.DeserializeObject<EZChildAccessToken>(result.Data.ToString());
+                        Application.RunOnMainThread(() =>
+                        {
+                            if (!string.IsNullOrEmpty(ezChildAccessToken.accessToken))
+                            {
+#if __IOS__
+                                //iOS
+
+                                //1.璁剧疆鎵�闇�娌充笢鐨凙ccessToken鍜孯efreshToken銆佸煙鍚嶅湴鍧�
+                                EZSDK.IOS.EZSDK.SetHDlAccessToken(UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken);
+                                EZSDK.IOS.EZSDK.SetRequestHttpsHost(OnAppConfig.Instance.RequestHttpsHost);
+                                //2.璁剧疆钀ょ煶瀛愯处鍙风殑AccessToken鍒癝DK
+                                EZSDK.IOS.EZSDK.SetEZAccessToken(ezChildAccessToken.accessToken);
+                                //3.鎵撳紑鎽勫儚澶磋澶囧垪琛ㄩ〉闈�
+                                EZSDK.IOS.EZSDK.Go2EZvizMonitor();
+
+#else
+                                //Android
+                                //1.璁剧疆鎵�闇�娌充笢鐨則oken銆佸煙鍚嶅湴鍧�
+                                //2.璁剧疆钀ょ煶瀛愯处鍙风殑token
+                                //3.鎵撳紑鎽勫儚澶磋澶囧垪琛ㄩ〉闈�
+                                ((BaseActivity)Shared.Application.Activity).SetCamera(b =>
+                                {
+                                    if (b)
+                                    {
+                                        Android.Content.Intent intent = new Android.Content.Intent();
+                                        intent.SetComponent(new Android.Content.ComponentName(Shared.Application.Activity, "com.videogo.MainActivity"));
+                                        Shared.Application.Activity.StartActivity(intent);
+                                    }
+                                });
+#endif
+
+
+                            }
+
+                        });
+                    }
+                    else
+                    {
+                        IMessageCommon.Current.ShowErrorInfoAlter(result.Code);
+                    }
+                }
+                catch (Exception ex)
+                {
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        if (waitPage != null)
+                        {
+                            waitPage.RemoveFromParent();
+                            waitPage = null;
+                        }
+                    });
+                }
+            })
+            { IsBackground = true }.Start();
+        }
+
+        #endregion
     }
 }
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index 13504f2..b756090 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -4,6 +4,10 @@
 {
     public static class StringId
     {
+        public const int Lightint = 433;
+        public const int Disinfect = 422;
+        public const int WindDry = 421;
+        public const int HotDry = 420;
         public const int SensorNormalState = 419;
         public const int InAlarm = 418;
         public const int WaterLeakage = 417;
@@ -665,6 +669,69 @@
         public const int qqMsuicTip = 5047;
 
 
+        public const int zhengchang = 6000;
+        public const int shebeizhuangtai = 6001;
+        public const int ge = 6002;
+        public const int dangqianhongwaishebei = 6003;
+        public const int yitianjiayaokongqi = 6004;
+        public const int kongtiao = 6005;
+        public const int dianshi = 6006;
+        public const int fengshan = 6007;
+        public const int jidinghe = 6008;
+        public const int dvd = 6009;
+        public const int touyingyi = 6010;
+        public const int zidingyi = 6011;
+        public const int hongwaiyaokong = 6012;
+        public const int shebeigaunli = 6013;
+        public const int tianjiayaokongqi = 6014;
+        public const int zaixianhwb= 6015;
+        public const int lixian = 6016;
+        public const int banbenhao = 6017;
+        public const int shuruyaokongqimingcheng = 6018;
+        public const int fengleichazhao = 6019;
+        public const int tuijiananjian = 6020;
+        public const int anjianmingcheng = 6021;
+        public const int xiayibu= 6022;
+        public const int dianyuan = 6023;
+        public const int yinliangjia = 6024;
+        public const int yinliangjian = 6025;
+        public const int pindaojia = 6026;
+        public const int pindaojian = 6027;
+        public const int shang = 6028;
+        public const int xia = 6029;
+        public const int zuo = 6030;
+        public const int you = 6031;
+        public const int jingyin = 6032;
+        public const int queren = 6034;
+        public const int bofang = 6035;
+        public const int tuichu = 6037;
+        public const int caidan = 6038;
+        public const int zanting = 6039;
+        public const int fanhui = 6040;
+        public const int tingzhi = 6041;
+        public const int zhuye = 6042;
+        public const int kuaijin = 6043;
+        public const int kuaitui = 6044;
+        public const int dingshi = 6045;
+        public const int fuzhiyaokonggongnneg = 6046;
+        public const int duizhunanxiaanniu = 6047;
+        public const int zhinengyaokongqi = 6048;
+        public const int tianjiaanniu = 6049;
+        public const int paixu = 6050;
+        public const int wancheng = 6051;
+        public const int tianjiachenggong = 6052;
+        public const int kedaofenlei = 6053;
+        public const int suoshufenlei = 6054;
+        public const int yaokongqimingcheng = 6055;
+        public const int suoshuquyu = 6056;
+        public const int jixutianjia = 6057;
+        public const int dianqi = 6058;
+        public const int tianjiashibai = 6059;
+        public const int chongshii = 6060;
+
+
+
+
         public const int newAutomation = 7000;
         public const int editAutomation = 7001;
         public const int ifCondition = 7002;
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index e8827a2..58821fd 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -141,7 +141,7 @@
                     {
                         //淇敼涓婚〉杩炴帴鐘舵��
                         HomePage.LoadEvent_CheckLinkStatus();
-                        MainPage.Log($"缃戝叧鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
+                        MainPage.Log($"缃戝叧灞�鍩熺綉鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
                         new System.Threading.Thread(() =>
                         {
                             System.Threading.Thread.Sleep(1000);
@@ -195,7 +195,7 @@
                         }
                         //淇敼涓婚〉杩炴帴鐘舵��
                         HomePage.LoadEvent_CheckLinkStatus();
-                        MainPage.Log($"缃戝叧鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
+                        MainPage.Log($"缃戝叧浜戠鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
                         new System.Threading.Thread(() =>
                         {
                             System.Threading.Thread.Sleep(1000);
@@ -682,7 +682,7 @@
                     }
                 }
 
-                MainPage.Log($"time 1 :{receiveObj.Topic}");
+                MainPage.Log($"灞�鍩熺綉淇℃伅: {receiveObj.Topic}");
 
 
                 //楠岃瘉鏈夋晥鏁版嵁闀垮害
@@ -749,14 +749,6 @@
                         var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid);
                         if (localFunction != null)
                         {
-                            //var updateInfoString = $"鏇存柊璁惧:{localFunction.name}";
-                            //foreach (var attr in updateTemp.status)
-                            //{
-                            //    updateInfoString += $"  key:{attr.key};value:{attr.value}";
-                            //}
-                            //MainPage.Log(updateInfoString);
-
-
                             //鏇存柊鐣岄潰鐘舵��
                             Function localObj = null;
                             switch (localFunction.spk)
@@ -1029,6 +1021,11 @@
                                 case SPK.ElectricTuyaFan:
                                 case SPK.ElectricTuyaWeepRobot:
                                 case SPK.ElectricTuyaWaterValve:
+                                case SPK.SensorPir:
+                                case SPK.SensorDoorWindow:
+                                case SPK.SensorSmoke:
+                                case SPK.SensorWater:
+                                case SPK.ClothesHanger:
                                     //璁惧鐘舵�佹帹閫�
                                     var myDevice = Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid,updateTemp.status);
                                     if (myDevice != null)
diff --git a/HDL_ON/DAL/Mqtt/MqttClient.cs b/HDL_ON/DAL/Mqtt/MqttClient.cs
index 9524d02..9cded85 100644
--- a/HDL_ON/DAL/Mqtt/MqttClient.cs
+++ b/HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -323,6 +323,7 @@
                         RemoteMqttClient.UseConnectedHandler(async (e) =>
                         {
                             IfNeedReadAllDeviceStatus = true;
+                            Control.Ins.GatewayOnline_Cloud = true;
                             Utlis.WriteLine($"============>Mqtt杩滅▼杩炴帴鎴愬姛");
                             SendPushSignOut();
                         });
@@ -531,6 +532,23 @@
         static void ReceiveNotifySqueezeAsync(string mMes)
         {
             if (mMes == PushSignStr ) return;//鏄嚜宸辩殑鐧诲綍鎺ㄩ�佷笉澶勭悊//鎴栬�呭綋鍓嶄笉鏄繙绋嬮摼鎺ョ姸鎬�
+            //娴嬭瘯璐﹀彿锛屼笉鎸や笅绾�
+            switch (UserInfo.Current.AccountString)
+            {
+                case "13415629083":
+                case "18316120654":
+                case "15622703419":
+                case "18824864143":
+                case "464027401@qq.com":
+                case "2791308028@qq.com":
+                case "13697499568":
+                case "18666455392":
+                case "13375012446":
+                case "13602944661":
+                case "18778381374":
+                case "18316672920":
+                    return;
+            }
 
             if (!UserInfo.Current.IsLogin)
             {
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 60aacf0..9776765 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -2146,5 +2146,18 @@
 
         #endregion
 
+        #region 钀ょ煶浜慡DK鐩稿叧鎺ュ彛
+        /// <summary>
+        /// 娌充笢鑾峰彇钀ょ煶浜戝瓙璐﹀彿token鐨勬帴鍙�
+        /// </summary>
+        public ResponsePackNew EZGetChildToken()
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            //d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_EZ_GetChildToken, requestJson);
+        }
+        #endregion
+
     }
 }
\ No newline at end of file
diff --git a/HDL_ON/DAL/Server/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index 58ab186..3ff5853 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -469,6 +469,44 @@
         /// </summary>
         public const string Api_Post_GetBrandList = "/home-wisdom/app/product/brand/list";
 
+        #region 鈻�  -- 绾㈠瀹濇帴鍙__________________________
+        /// <summary>
+        /// 绾㈠瀹濊澶囧畾浣�
+        /// </summary>
+        public const string API_POST_Ir_DeviceFind = "/home-wisdom/app/device/ir/deviceFind";
+        /// <summary>
+        /// 绾㈠瀹濅笅鐨勯仴鎺у櫒鍒楄〃
+        /// </summary>
+        public const string API_POST_Ir_List = ":/home-wisdom/app/device/ir/list";
+        /// <summary>
+        /// 閬ユ帶鍣ㄧ孩澶栫爜瀛︿範
+        /// </summary>
+        public const string API_POST_Ir_CodeStudy = "/home-wisdom/app/device/ir/codeStudy";
+        /// <summary>
+        ///绾㈠瀹濈孩澶栫爜搴撹瘯鐮�
+        /// </summary>
+        public const string API_POST_Ir_CodeTest = "/home-wisdom/app/device/ir/codeTest";
+        /// <summary>
+        /// 绾㈠瀹濋仴鎺у櫒娣诲姞
+        /// </summary>
+        public const string API_POST_Ir_Add = "/home-wisdom/app/device/ir/add";
+        /// <summary>
+        /// 閬ユ帶鍣ㄨ嚜瀛︽寜閿垹闄�
+        /// </summary>
+        public const string API_POST_Ir_CodeRemove = "/home-wisdom/app/device/ir/codeRemove";
+
+        #endregion
+
+        #endregion
+
+
+        #region 鈻�  -- 钀ょ煶SDK鐩稿叧鎺ュ彛___________________________
+        /// <summary>
+        /// 娌充笢鑾峰彇钀ょ煶浜戝瓙璐﹀彿token鐨勬帴鍙�
+        /// </summary>
+        public const string API_POST_EZ_GetChildToken = "/home-wisdom/platform/childToken";
+        
+
         #endregion
 
         #endregion
diff --git a/HDL_ON/DAL/Server/NewApiRes.cs b/HDL_ON/DAL/Server/NewApiRes.cs
index 91d22eb..e30c1fb 100644
--- a/HDL_ON/DAL/Server/NewApiRes.cs
+++ b/HDL_ON/DAL/Server/NewApiRes.cs
@@ -1466,6 +1466,23 @@
         public string messageType;
     }
 
+    /// <summary>
+    /// 钀ょ煶浜戝瓙璐﹀彿token
+    /// </summary>
+    [System.Serializable]
+    public class EZChildAccessToken
+    {
+        /// <summary>
+        /// token
+        /// </summary>
+        public string accessToken;
+        /// <summary>
+        ///  杩囨湡鏃堕棿
+        /// </summary>
+        public string expireTime;
+    }
+    
+
     //#region 鏃ф帴鍙�
     ///// <summary>
     ///// 
diff --git a/HDL_ON/Entity/DB_ResidenceData.cs b/HDL_ON/Entity/DB_ResidenceData.cs
index 7efc81b..8cbd2a2 100644
--- a/HDL_ON/Entity/DB_ResidenceData.cs
+++ b/HDL_ON/Entity/DB_ResidenceData.cs
@@ -91,9 +91,9 @@
                                     ShowFunction.Light,ShowFunction.AC,ShowFunction.Curtain,
                                     ShowFunction.FloorHeating,ShowFunction.Music,
                                     ShowFunction.Electric,ShowFunction.Environmental,
-                                    //ShowFunction.EnergyMonitoring,
-                                    //ShowFunction.FreshAir,ShowFunction.DoorLock,
-                                    //ShowFunction.Panel,ShowFunction.SecurityMonitoring,
+                                    ShowFunction.EnergyMonitoring,
+                                    ShowFunction.FreshAir,ShowFunction.DoorLock,
+                                    ShowFunction.Panel,ShowFunction.SecurityMonitoring,
                                     ShowFunction.Sensor,ShowFunction.VideoIntercom
                                 });
                             instance.SaveResidenceData();
diff --git a/HDL_ON/Entity/Enumerative/ClothsHangerEnum.cs b/HDL_ON/Entity/Enumerative/ClothsHangerEnum.cs
new file mode 100644
index 0000000..64f6198
--- /dev/null
+++ b/HDL_ON/Entity/Enumerative/ClothsHangerEnum.cs
@@ -0,0 +1,9 @@
+锘縰sing System;
+namespace HDL_ON.Entity
+{
+    public enum ClothsHangerEnum
+    {
+
+
+    }
+}
diff --git a/HDL_ON/Entity/Function/DeviceFunction.cs b/HDL_ON/Entity/Function/DeviceFunction.cs
new file mode 100644
index 0000000..7638ed0
--- /dev/null
+++ b/HDL_ON/Entity/Function/DeviceFunction.cs
@@ -0,0 +1,15 @@
+锘縰sing System;
+namespace HDL_ON.Entity
+{
+    /// <summary>
+    /// 璁惧鍔熻兘
+    /// </summary>
+    public class DeviceFunction : Function
+    {
+        public DeviceFunction()
+        {
+        }
+
+
+    }
+}
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 59a077a..35e790f 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -23,6 +23,36 @@
         public string pageSize = "0";
 
     }
+    /// <summary>
+    /// 灞炴�х姸鎬�
+    /// </summary>
+    public class AttrState
+    {
+        /// <summary>
+        /// 灞炴�ч敭鍚�
+        /// </summary>
+        public string key;
+        /// <summary>
+        /// 灞炴�х殑鍊煎垪琛�
+        /// </summary>
+        public List<string> value = new List<string>();
+        /// <summary>
+        /// 鏈�澶у��
+        /// </summary>
+        public int max = 100;
+        /// <summary>
+        /// 鏈�灏忓��
+        /// </summary>
+        public int min = 0;
+        /// <summary>
+        /// 鏁版嵁绫诲瀷
+        /// </summary>
+        public string data_type = "";
+        /// <summary>
+        /// 褰撳墠鍊�
+        /// </summary>
+        public string curValue = "";
+    }
 
     /// <summary>
     /// 鍔熻兘绫昏兘婊¤冻鏁版嵁浣跨敤瑕佹眰锛屽瓙绫诲彧鏄负浜嗘柟渚夸娇鐢ㄥ睘鎬�
@@ -32,6 +62,68 @@
         public Function()
         {
         }
+
+        #region 浼樺寲鍖哄煙 2021-02-25
+        /// <summary>
+        /// 鑾峰彇灞炴�у垪琛�
+        /// </summary>
+        /// <returns></returns>
+        public List<string> GetAttributes()
+        {
+            var attrs = new List<string>();
+
+            foreach(var attr in  attributes)
+            {
+                attrs.Add(attr.key);
+            }
+            return attrs;
+        }
+        /// <summary>
+        /// 鑾峰彇鍒跺畾灞炴��
+        /// </summary>
+        /// <returns></returns>
+        public FunctionAttributes GetAttribute(string key)
+        {
+            var attr = attributes.Find((a) => a.key == key);
+            return attr;
+        }
+
+        /// <summary>
+        /// 鑾峰彇灞炴�х姸鎬�
+        /// </summary>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        public string GetAttrState(string key)
+        {
+            var attrState = status.Find((s) => s.key == key.ToString());
+            if(attrState == null)
+            {
+                return "";
+            }
+            return attrState.value;
+        }
+        /// <summary>
+        /// 璁剧疆灞炴�х姸鎬�
+        /// </summary>
+        /// <param name="key"></param>
+        /// <param name="value"></param>
+        /// <returns>淇敼缁撴灉</returns>
+        public bool SetAttrState(string key, string value)
+        {
+            var attrState = status.Find((s) => s.key == key.ToString());
+            if (attrState == null)
+            {
+                return false;
+            }
+            else
+            {
+                attrState.value = value;
+            }
+            return true;
+        }
+
+        #endregion
+
 
         #region base info
         /// <summary>
@@ -55,7 +147,7 @@
         ///     09	瀹夐槻
         /// 澶х被鍒�	1bytes	锛堥鐣欙級
         /// 灏忕被鍒�	1byte	锛堥鐣欙級
-        /// </summary>
+        /// </summary>      鈥�0001021599F98A04050300010000鈥�
         public string sid = "0301011234567801012301230123";
         /// <summary>
         /// 澶囨敞
@@ -70,39 +162,6 @@
         /// 璁惧spk
         /// </summary>
         public string spk = "";
-        ///// <summary>
-        ///// 鍔熻兘绫诲埆
-        ///// 濡傦細绌鸿皟绫汇�佺伅鍏夌被銆佺獥甯樼被
-        ///// </summary>
-        //public FunctionCategory Spk_Prefix
-        //{
-        //    get
-        //    {
-        //        try
-        //        {
-        //            var _functionCategoryString = sid.Substring(16, 2);
-        //            var _functionCategory = Convert.ToInt32(_functionCategoryString, 16);
-        //            return (FunctionCategory)Enum.ToObject(typeof(FunctionCategory), _functionCategory);
-        //        }
-        //        catch (Exception ex)
-        //        {
-        //            MainPage.Log($"get FunctionCategory error : {ex.Message}");
-        //            return FunctionCategory.UnKown;
-        //        }
-        //    }
-        //}
-
-        ///// <summary>
-        ///// 鍔熻兘绫诲瀷
-        ///// </summary>
-        //public FunctionType spk
-        //{
-        //    get
-        //    {
-        //        var _functionTypeString = sid.Substring(16, 4);
-        //        return (FunctionType)Enum.ToObject(typeof(FunctionType), Convert.ToInt32(_functionTypeString, 16));
-        //    }
-        //}
 
         string spk_Prefix;
         /// <summary>
@@ -122,31 +181,6 @@
                 return spk_Prefix;
             }
         }
-        string spk_Suffix;
-        ///// <summary>
-        ///// spk鍚庣紑
-        ///// 灏忕被
-        ///// 鍔熻兘绫诲瀷
-        ///// </summary>
-        //public string spk
-        //{
-        //    get
-        //    {
-        //        if (string.IsNullOrEmpty(spk_Suffix))
-        //        {
-        //            try
-        //            {
-        //                spk_Suffix = spk.Split(".")[1];
-        //            }
-        //            catch
-        //            {
-        //                spk_Suffix = "";
-        //            }
-        //        }
-        //        return spk_Suffix;
-        //    }
-        //}
-
         /// <summary>
         /// A鍗忚鍔熻兘鐨勭壒鎬�
         /// 濡傦細鏄疉C鍔熻兘锛氱壒鎬э細on_off,mode,fan,temperature
@@ -198,12 +232,6 @@
         /// 浜戠鏁版嵁淇敼鐨勬渶鍚庢椂闂�
         /// </summary>
         public string modifyTime = "";
-        /// <summary>
-        /// 鍒犻櫎鏍囪
-        /// 闇�瑕佸垹闄ゆ暟鎹椂锛屾爣璁颁负锛歵rue
-        /// 鐢变簯绔垹闄ゆ垚鍔熶箣鍚庯紝杩斿洖鏁版嵁鍐嶆竻闄ゆ湰鍦版暟鎹�
-        /// </summary>
-        public bool DeleteSign = false;
 
         #endregion
         /// <summary>
@@ -441,36 +469,6 @@
             })
             { IsBackground = true }.Start();
         }
-        /// <summary>
-        /// 淇濆瓨鍔熻兘鏁版嵁
-        /// </summary>
-        //public void SaveFunctionData(bool upSevser)
-        //{
-        //    if (upSevser)
-        //    {
-        //        new System.Threading.Thread(() =>
-        //        {
-        //            var pm = new HttpServerRequest();
-        //            var pack = pm.UpdataDevcieInfo(this);
-        //            if (pack.Code == StateCode.SUCCESS)
-        //            {
-        //                var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
-        //                FileUtlis.Files.WriteFileByBytes(savePath, ssd);
-        //            }
-        //            else
-        //            {
-        //                IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
-        //            }
-        //        })
-        //        { IsBackground = true }.Start();
-        //    }
-        //    else
-        //    {
-        //        var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
-        //        FileUtlis.Files.WriteFileByBytes(savePath, ssd);
-        //    }
-        //}
-
 
         /// <summary>
         /// 杞崲鎴愬満鏅姛鑳藉璞�
@@ -666,19 +664,6 @@
         /// 褰撳墠鍊�
         /// </summary>
         public object curValue = new object();
-        ///// <summary>
-        ///// curValue鐨勭炕璇戝��,鏈�鍧忕殑缁撴灉涔熷彧浼氳繑鍥瀞tring.Empty
-        ///// </summary>
-        //public string realValue
-        //{
-        //    get
-        //    {
-        //        var myValue = curValue.ToString();
-        //        //娌欓洉瀹氫箟鐨刼bject绫诲瀷
-        //        if (myValue.Contains("{") == true) { return string.Empty; }
-        //        return myValue;
-        //    }
-        //}
     }
     /// <summary>
     /// 鍔熻兘灞炴�ч敭鍚嶅垪琛�
@@ -738,6 +723,56 @@
         /// 鐘舵��,浼犳劅鍣�
         /// </summary>
         public const string Status = "status";
+        /// <summary>
+        /// 鐢甸噺鐘舵��
+        /// </summary>
+        public const string BatteryState = "battery_state";
+        /// <summary>
+        /// 鐑樺共
+        /// </summary>
+        public const string HotDry = "hot_dry";
+        /// <summary>
+        /// 椋庡共
+        /// </summary>
+        public const string WindDry = "wind_dry";
+        /// <summary>
+        /// 娑堟瘨
+        /// </summary>
+        public const string Disinfect = "disinfect";
+        /// <summary>
+        /// 涓婂崌涓嬮檷
+        /// </summary>
+        public const string Position = "position";
+        /// <summary>
+        /// 杩涘害
+        /// </summary>
+        public const string PositionPercent = "position_percent";
+        /// <summary>
+        /// 鐑樺共鏃堕棿
+        /// </summary>
+        public const string HotDryTime = "hot_dry_time";
+        /// <summary>
+        /// 鐑樺共鍓╀綑鏃堕棿
+        /// </summary>
+        public const string HotDryTimeLeft = "hot_dry_time_surplus";
+        /// <summary>
+        /// 椋庡共鏃堕棿
+        /// </summary>
+        public const string WindDryTime = "wind_dry_time";
+        /// <summary>
+        /// 椋庡共鍓╀綑鏃堕棿
+        /// </summary>
+        public const string WindDryTimeLeft = "wind_dry_time_surplus";
+        /// <summary>
+        /// 娑堟瘨鏃堕棿
+        /// </summary>
+        public const string DisinfectTime = "disinfect_time";
+        /// <summary>
+        /// 娑堟瘨鍓╀綑鏃堕棿
+        /// </summary>
+        public const string DisinfectTimeLeft = "disinfect_time_surplus";
+
+
 
         #region tuya
         /// <summary>
@@ -745,6 +780,8 @@
         /// </summary>
         public const string TuyaWaterTime = "countdown_1";
         #endregion
+
+
     }
     /// <summary>
     /// 璁惧鍔熻兘oid
@@ -855,14 +892,6 @@
         /// </summary>
         public const string SensorTemperature = "sensor.temperature";
         /// <summary>
-        /// (绾㈠绉诲姩浼犳劅鍣�)
-        /// </summary>
-        public const string SensorPir = "sensor.pir";
-        /// <summary>
-        /// 锛堥棬绐椾紶鎰熷櫒锛�
-        /// </summary>
-        public const string SensorDoorWindow = "sensor.doorwindow";
-        /// <summary>
         /// 锛圥M2.5浼犳劅鍣級
         /// </summary>
         public const string SensorPm25 = "sensor.pm25";
@@ -879,6 +908,14 @@
         /// </summary>
         public const string SensorHumidity = "sensor.humidity";
 
+        /// <summary>
+        /// (绾㈠绉诲姩浼犳劅鍣�)
+        /// </summary>
+        public const string SensorPir = "sensor.pir";
+        /// <summary>
+        /// 锛堥棬绐椾紶鎰熷櫒锛�
+        /// </summary>
+        public const string SensorDoorWindow = "sensor.doorwindow";
         /// <summary>
         /// 鐑熼浘浼犳劅鍣�
         /// </summary>
@@ -936,6 +973,10 @@
         /// 瀹剁數銆佹秱楦︽按闃�
         /// </summary>
         public const string ElectricTuyaWaterValve = "electrical.koiGhMKwLf2ZP81g";
+        /// <summary>
+        /// 鍑夐湼
+        /// </summary>
+        public const string ClothesHanger = "electrical.racks";
 
 
         /// <summary>
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index e9376a3..0395d89 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -79,6 +79,10 @@
                 {
                     waterValveList = new List<Function>();
                 }
+                if(clothesHangerList == null)
+                {
+                    clothesHangerList = new List<Function>();
+                }
                 var list = new List<Function>();
                 list.AddRange(fans);
                 list.AddRange(switchSockets);
@@ -86,6 +90,7 @@
                 list.AddRange(airCleaners);
                 list.AddRange(weepRobots);
                 list.AddRange(waterValveList);
+                list.AddRange(clothesHangerList);
                 return list;
             }
         }
@@ -113,6 +118,10 @@
         /// 姘撮榾鍒楄〃
         /// </summary>
         public List<Function> waterValveList = new List<Function>();
+        /// <summary>
+        /// 鍑夐湼鍒楄〃
+        /// </summary>
+        public List<Function> clothesHangerList = new List<Function>();
 
         #endregion
         /// <summary>
@@ -157,14 +166,9 @@
                 var tempFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(functionDataString);
                 if (tempFunction == null)
                 {
-                    Common.FileUtlis.Files.DeleteFile(filePath);
+                    FileUtlis.Files.DeleteFile(filePath);
                     return;
                 }
-                if (tempFunction.DeleteSign)
-                {
-                    //todo 鍒犻櫎浜戠鏁版嵁 20201203--App涓嶈兘鍒犻櫎鍔熻兘鏁版嵁
-                }
-                else
                 {
                     switch (tempFunction.spk)
                     {
@@ -247,6 +251,11 @@
                             List.sensorsArm.Add(ser);
                             deviceFunctionList.Add(ser);
                             break;
+                        case SPK.ClothesHanger:
+                            var ch = Newtonsoft.Json.JsonConvert.DeserializeObject<Function>(functionDataString);
+                            List.clothesHangerList.Add(ch);
+                            deviceFunctionList.Add(ch);
+                            break;
                     }
                 }
             }
@@ -328,12 +337,19 @@
             List.lights = new List<Light>();
             List.curtains = new List<Curtain>();
             List.floorHeatings = new List<FloorHeating>();
-            List.tVs = new List<TV>();
-            List.switchSockets = new List<SwitchSocket>();
-            List.fans = new List<Fan>();
             List.sensorsEnvironmentalScience = new List<Sensor>();
+            #region 瀹剁數
+            List.fans = new List<Fan>();
+            List.switchSockets = new List<SwitchSocket>();
+            List.tVs = new List<TV>();
+            List.airCleaners = new List<AirCleaner>();
+            List.weepRobots = new List<WeepRobot>();
+            List.waterValveList = new List<Function>();
+            List.clothesHangerList = new List<Function>();
+            #endregion
+
             List.scenes = new List<Scene>();
-            List.deviceFunctionList = null;
+            List.deviceFunctionList = new List<Function>();
             _FunctionList = null;
         }
 
@@ -554,7 +570,26 @@
                     List.tVs.Remove(List.tVs.Find((obj) => obj.deviceId == delTemp.deviceId));
                     break;
                 case SPK.ElectricFan:
+                case SPK.ElectricTuyaFan:
                     List.fans.Remove(List.fans.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.ElectricTuyaAirCleaner:
+                    List.airCleaners.Remove(List.airCleaners.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.ElectricTuyaWaterValve:
+                    List.waterValveList.Remove(List.waterValveList.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.ElectricTuyaWeepRobot:
+                    List.weepRobots.Remove(List.weepRobots.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.ClothesHanger:
+                    List.clothesHangerList.Remove(List.clothesHangerList.Find((obj) => obj.deviceId == delTemp.deviceId));
+                    break;
+                case SPK.SensorSmoke:
+                case SPK.SensorWater:
+                case SPK.SensorDoorWindow:
+                case SPK.SensorPir:
+                    List.sensorsArm.Remove(List.sensorsArm.Find((obj)=>obj.deviceId == delTemp.deviceId));
                     break;
             }
             var removeTemp = deviceFunctionList.Find((obj) => obj.deviceId == delTemp.deviceId);
@@ -622,14 +657,22 @@
                         {
                             switch (function.Spk_Prefix)
                             {
-                                case FunctionCategory.Light:
-                                case FunctionCategory.Electric:
-                                case FunctionCategory.Curtain:
-                                case FunctionCategory.AC:
-                                case FunctionCategory.FloorHeat:
-                                    DriverLayer.Control.Ins.SendReadCommand(function);
-                                    break;
+                                case FunctionCategory.Music:
+                                case FunctionCategory.DryContact:
+                                    continue;
                             }
+                            DriverLayer.Control.Ins.SendReadCommand(function);
+                            //switch (function.Spk_Prefix)
+                            //{
+                            //    case FunctionCategory.Light:
+                            //    case FunctionCategory.Electric:
+                            //    case FunctionCategory.Curtain:
+                            //    case FunctionCategory.AC:
+                            //    case FunctionCategory.FloorHeat:
+                            //    case FunctionCategory.Sensor:
+                            //        DriverLayer.Control.Ins.SendReadCommand(function);
+                            //        break;
+                            //}
                         }
                     }
                     else
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 2b18933..116127b 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -275,7 +275,6 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\WeatherCondition.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\1-test-\TestDialog.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\ThirdPartyBrandListPage.cs" />
-    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\EmptyClass.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\AddThirdPartyBrandListpage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Entity\Integratedbrand\IntegratedBrand.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Entity\Function\AirCleaner.cs" />
@@ -337,6 +336,25 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmSensor\SensorWaterImmersionPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmSensor\SensorDoorWinwsPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmSensor\SensorSmokePage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Entity\Function\DeviceFunction.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Entity\Enumerative\ClothsHangerEnum.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\PirMain.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\TopView.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\BrandList.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\BrandListView.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\DeviceSet.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\TipView.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\AddButton.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\SaveView.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\Buttons.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\AddControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\Pir.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\PirSend.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\AddControlComplete.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\PatchView.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\Method.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\FailView.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\ReplicationView.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)UI\" />
@@ -374,5 +392,7 @@
     <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\" />
     <Folder Include="$(MSBuildThisFileDirectory)Entity\Integratedbrand\" />
     <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmSensor\" />
+    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\" />
+    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\PirDevice\View\" />
   </ItemGroup>
 </Project>
diff --git a/HDL_ON/UI/.DS_Store b/HDL_ON/UI/.DS_Store
new file mode 100644
index 0000000..bdfddd3
--- /dev/null
+++ b/HDL_ON/UI/.DS_Store
Binary files differ
diff --git a/HDL_ON/UI/CSS/CSS.cs b/HDL_ON/UI/CSS/CSS.cs
index 665a74c..7ce6015 100644
--- a/HDL_ON/UI/CSS/CSS.cs
+++ b/HDL_ON/UI/CSS/CSS.cs
@@ -83,10 +83,9 @@
         public const uint TipBgColor1 = 0xE6FFFFFF;
         /// <summary>
         /// 杩炴帴鐘舵�佹彁绀�
-        /// 杩滅▼鐘舵��
         /// 0xFF67D569
         /// </summary>
-        public const uint LinkTipRemote = 0xFF67D569;
+        public const uint LinkTipLocal = 0xFF67D569;
         /// <summary>
         /// 杩炴帴鐘舵�佹彁绀�
         /// 杩炴帴澶辫触
@@ -111,6 +110,8 @@
         public const uint viewTrans60lucence = 0x60000000;
         public const uint viewTranslucence = 0x00000000;
         public const uint textTipColor = 0XFF798394;
+        public const uint text1Color = 0XFF4E586A;
+
         #endregion
 
         #endregion
diff --git a/HDL_ON/UI/MainPage.cs b/HDL_ON/UI/MainPage.cs
index 2d35284..dbd6cdf 100644
--- a/HDL_ON/UI/MainPage.cs
+++ b/HDL_ON/UI/MainPage.cs
@@ -26,7 +26,7 @@
         /// <summary>
         /// 鐗堟湰鍙�
         /// </summary>
-        public static string VersionString = "1.1.0223";
+        public static string VersionString = "1.1.0225";
         ///// <summary>
         ///// 瀹㈡埛绔被鍨�
         ///// </summary>
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
index 5b11b49..5f12ec0 100644
--- a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -144,6 +144,10 @@
                         doorwindowPage.ShowColltionButton = false;
                         doorwindowPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                         break;
+                    case SPK.ClothesHanger:
+                        var clothesHangerpage = new ClothesHangerPage();
+                        clothesHangerpage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
+                        break;
                 }
             };
             return eventHandler;
diff --git a/HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs b/HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs
index 84feeb0..8dc9425 100644
--- a/HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs
+++ b/HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs
@@ -44,13 +44,25 @@
             if (localDevice != null)
             {
                 foreach (var attr in updateData)
-                {
-                    var localAttr = localDevice.status.Find((obj) => obj.key == attr.key);
-                    if (localAttr != null)
-                    {
-                        //鏇存敼灞炴�у��
-                        localAttr.value = attr.value;
-                    }
+                {
+                    var localAttr2 = localDevice.attributes.Find((obj) => obj.key == attr.key);
+                    if (localAttr2 == null)
+                    {
+                        //鏈韩瀹冨氨娌℃湁杩欎釜灞炴��,鍒欎笉澶勭悊
+                        continue;
+                    }
+                    //鏇存敼灞炴�у��
+                    localAttr2.curValue = attr.value;
+
+                    var localAttr = localDevice.status.Find((obj) => obj.key == attr.key);
+                    if (localAttr == null)
+                    {
+                        //status鏄綋鍓嶈澶囦笂鎶ヨ繃鐨勫睘鎬ф墠浼氬瓨鍦�,涔熷氨鏄畠鐨勪釜鏁版湁鍙兘鍜宎ttributes涓嶄竴鑷�
+                        localAttr = new AttributesStatus() { key = attr.key, value = attr.value };
+                        localDevice.status.Add(localAttr);
+                    }
+                    //鏇存敼灞炴�у��
+                    localAttr.value = attr.value;
                 }
                 //鍏ㄩ儴鐣岄潰鎺ㄩ��
                 HdlFormLogic.Current.DeviceStatuPush(localDevice);
diff --git a/HDL_ON/UI/UI1-Login/LoginPage.cs b/HDL_ON/UI/UI1-Login/LoginPage.cs
index 232f107..3850ad8 100644
--- a/HDL_ON/UI/UI1-Login/LoginPage.cs
+++ b/HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -192,7 +192,7 @@
                 //return;
                 if (b)
                 {
-                    etAccount.Text = "13415629083";//tujie"18316120654";// "15622703419";// "18824864143";//"464027401@qq.com"; //"2791308028@qq.com";//13697499568 
+                    etAccount.Text = "18316672920";//hzx;// "13415629083"//cf;//tujie"18316120654";// "15622703419";// "18824864143";//"464027401@qq.com"; //"2791308028@qq.com";//13697499568 
                 }
                 else
                 {
diff --git a/HDL_ON/UI/UI2/.DS_Store b/HDL_ON/UI/UI2/.DS_Store
new file mode 100644
index 0000000..249ba1d
--- /dev/null
+++ b/HDL_ON/UI/UI2/.DS_Store
Binary files differ
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index a7fbccd..687bc60 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -831,6 +831,38 @@
                     };
                 }
 
+                else if (function.spk == SPK.ClothesHanger)
+                {
+                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png";
+                    btnIcon.SelectedImagePath = "FunctionIcon/Electrical/Curtain/ClothesHangerBlueIcon.png";
+                    Button btnUp;
+                    btnUp = new Button()
+                    {
+                        X = Application.GetRealWidth(84+3),
+                        Y = Application.GetRealWidth(89),
+                        Width = Application.GetRealWidth(38),
+                        Height = Application.GetRealWidth(38),
+                        UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png",
+                        SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png",
+                    };
+                    view.AddChidren(btnUp);
+
+                    Button btnDown;
+                    btnDown = new Button()
+                    {
+                        X = btnUp.Right + Application.GetRealWidth(3),
+                        Y = Application.GetRealWidth(89),
+                        Width = Application.GetRealWidth(38),
+                        Height = Application.GetRealWidth(38),
+                        UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png",
+                        SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png",
+                    };
+                    view.AddChidren(btnDown);
+
+
+                    LoadEvent_ControlClothesHanger(function, btnUp, btnDown);
+
+                }
 
                 else
                 {
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
index 54e8af9..2122e54 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -33,13 +33,13 @@
             }
             else
             {
-                if (Control.Ins.GatewayOnline_Cloud)
+                if (Control.Ins.GatewayOnline_Local)
                 {
-                    bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.MainColor;
+                    bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.LinkTipLocal;
                 }
                 else
                 {
-                    bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.LinkTipRemote;
+                    bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.MainColor;
                 }
             }
         }
@@ -56,28 +56,6 @@
                     bodyView.CheckLinkStatus();
                 }
             });
-
-            //if (bodyView != null)
-            //{
-            //    Application.RunOnMainThread(() =>
-            //    {
-            //        if (Control.Ins.GatewayOnline)
-            //        {
-            //            if (Control.Ins.IsRemote)
-            //            {
-            //                bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.MainColor;
-            //            }
-            //            else
-            //            {
-            //                bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.LinkTipRemote;
-            //            }
-            //        }
-            //        else
-            //        {
-            //            bodyView.btnLinkStateTip.BackgroundColor = CSS.CSS_Color.LinkTipFail;
-            //        }
-            //    });
-            //}
         }
 
         /// <summary>
@@ -356,7 +334,7 @@
                 btnClose.IsSelected = false;
                 curtain.trait_on_off.curValue = "off";
                 curtain.percent = 0;
-                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                Dictionary<string, string> d = new Dictionary<string, string>();
                 d.Add("on_off", curtain.trait_on_off.curValue.ToString());
                 Control.Ins.SendWriteCommand(curtain, d);
             };
@@ -370,13 +348,45 @@
                 btnOpen.IsSelected = false;
                 curtain.trait_on_off.curValue = "on";
                 curtain.percent = 100;
-                System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
+                Dictionary<string, string> d = new Dictionary<string, string>();
                 d.Add("on_off", curtain.trait_on_off.curValue.ToString());
                 Control.Ins.SendWriteCommand(curtain, d);
             };
         }
 
         /// <summary>
+        /// 鍔犺浇鏅捐。鏋舵帶鍒朵簨浠�
+        /// </summary>
+        void LoadEvent_ControlClothesHanger(Function function,Button btnUp,Button btnDown)
+        {
+            btnUp.MouseDownEventHandler = (sender, e) =>
+            {
+                btnUp.IsSelected = true;
+            };
+            btnUp.MouseUpEventHandler = (sender, e) =>
+            {
+                btnUp.IsSelected = false;
+                function.SetAttrState(FunctionAttributeKey.Position, "up");
+                Dictionary<string, string> d = new Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.Position, "up");
+                Control.Ins.SendWriteCommand(function, d);
+            };
+
+            btnDown.MouseDownEventHandler = (sender, e) =>
+            {
+                btnDown.IsSelected = true;
+            };
+            btnDown.MouseUpEventHandler = (sender, e) =>
+            {
+                btnDown.IsSelected = false;
+                function.SetAttrState(FunctionAttributeKey.Position, "down");
+                Dictionary<string, string> d = new Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.Position, "down");
+                Control.Ins.SendWriteCommand(function, d);
+            };
+        }
+
+        /// <summary>
         /// 鍔犺浇璺宠浆淇℃伅涓績椤甸潰
         /// </summary>
         void LoadEvent_GotoMessageCenterPage()
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
index 02640b2..8c9a157 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -488,13 +488,12 @@
                     case ShowFunction.Panel:
                         break;
                     case ShowFunction.SecurityMonitoring:
+                        functionCount = 1;
                         break;
                     case ShowFunction.Sensor:
                         functionCount = FunctionList.List.sensorsArm.Count;
-                        //functionOnCount = FunctionList.List.aCs.FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
                         break;
                     case ShowFunction.VideoIntercom:
-                        functionCount = 1;
                         break;
 
                 }
@@ -552,6 +551,7 @@
                 functionView.AddChidren(btnName);
 
                 if (item != ShowFunction.Environmental && item != ShowFunction.Sensor && item != ShowFunction.VideoIntercom
+                    && item != ShowFunction.SecurityMonitoring
                     && functionCount != 0)
                 {
                     Button btnFunctionCount = new Button()
@@ -765,6 +765,10 @@
                         break;
                     case ShowFunction.SecurityMonitoring:
                         btnName.TextID = StringId.SecurityMonitoring;
+                        btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
+                        {
+                            HDLCommon.Current.Go2EZvizMonitor(bodyView);
+                        };
                         break;
                     case ShowFunction.Sensor:
                         btnName.TextID = StringId.Sensor;
@@ -772,34 +776,11 @@
                         break;
                     case ShowFunction.VideoIntercom:
                         btnName.TextID = StringId.VideoIntercom;
-                        btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
-                        {
-#if __IOS__
-                            EZSDK.IOS.EZSDK.Go2EZvizMonitor();
-#else  //瀹夊崜鎽勫儚澶�
-                            ((BaseActivity)Shared.Application.Activity).SetCamera(b =>
-                            {
-                                if (b)
-                                {
-                                    Android.Content.Intent intent = new Android.Content.Intent();
-                                    var bundle = new Android.OS.Bundle();
-                                    //浼犻�抧ame鍙傛暟涓簍inyphp
-                                    //bundle.PutString("Token", ezChileAccessToken.accessToken);
-                                    bundle.PutString("Token", "ra.aamy8d1gabcnrz0jbbj4gjkpcpy55g0s-8z529x82uz-0jzly2o-g30muwagq");
-                                    bundle.PutString("HdlToken", UserInfo.Current.LoginTokenString);
-                                    intent.PutExtras(bundle);
-                                    intent.SetComponent(new Android.Content.ComponentName(Shared.Application.Activity, "com.videogo.MainActivity"));
-                                    Shared.Application.Activity.StartActivity(intent);
-                                }
-                            });
-
-#endif
-                        };
                         break;
 
                 }
                 //鐣岄潰璺宠浆--闊充箰璺宠浆鑷繁鐨勭晫闈�--鐜璺宠浆鑷繁鐨勭晫闈�
-                if (item != ShowFunction.Music && item != ShowFunction.Environmental && item != ShowFunction.VideoIntercom)
+                if (item != ShowFunction.Music && item != ShowFunction.Environmental && item != ShowFunction.SecurityMonitoring)
                 {
                     btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
                     {
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
index 8464dfc..1a88c32 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -98,8 +98,28 @@
                             case SPK.SensorDoorWindow:
                                 btnIcon.UnSelectedImagePath = "FunctionIcon/ArmSensor/ArmSensorDoorIcon.png";
                                 break;
+                            default:
 
+                                break;
                         }
+                        var powerLowTipAttr = function.status.Find((obj) => obj.key == FunctionAttributeKey.BatteryState);
+                        if (powerLowTipAttr != null)
+                        {
+                            if (powerLowTipAttr.value.ToLower() == "low")
+                            {
+                                Button btnTipPowerLow = new Button()
+                                {
+                                    X = Application.GetRealWidth(307),
+                                    Y = Application.GetRealHeight(25),
+                                    Width = Application.GetRealWidth(24),
+                                    Height = Application.GetRealWidth(24),
+                                    UnSelectedImagePath = "FunctionIcon/ArmSensor/PowerLowIcon.png",
+                                    SelectedImagePath = "FunctionIcon/ArmSensor/PowerLowIcon.png",
+                                };
+                                this.AddChidren(btnTipPowerLow);
+                            }
+                        }
+
                         break;
                     case FunctionCategory.Music:
                         btnIcon.UnSelectedImagePath = "FunctionIcon/Music/MusicThinIcon.png";
@@ -110,98 +130,107 @@
             }
             else
             {
-                #region 鍔犺浇寮�鍏虫寜閽�
-                /// <summary>
-                /// 寮�鍏虫寜閽�
-                /// </summary>
-                Button btnSwitch;
-                if (function.spk == SPK.LightRGB || function.spk == SPK.LightDimming)
+                if (function.spk == SPK.ClothesHanger)//鏅捐。鏋�
                 {
-                    btnSwitch = new Button()
-                    {
-                        X = Application.GetRealWidth(303),
-                        Y = Application.GetRealHeight(78),
-                        Width = Application.GetMinRealAverage(32),
-                        Height = Application.GetMinRealAverage(32),
-                        UnSelectedImagePath = "Public/PowerClose.png",
-                        SelectedImagePath = "Public/PowerOpen.png",
-                        IsSelected = function.trait_on_off.curValue.ToString() == "on",
-                        Tag = function.sid + "_Switch",
-                    };
-                    bodyDiv.AddChidren(btnSwitch);
-                    //鍔犺浇寮�鍏虫寜閽簨浠�
-                    LoadEvent_SwitchFunction(btnSwitch, function.attributes.Find((obj) => obj.key == FunctionAttributeKey.FadeTime));
+                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerGrayIcon.png";
+                    ClothesHangerFragment();
                 }
                 else
                 {
-                    btnSwitch = new Button()
-                    {
-                        X = Application.GetRealWidth(303),
-                        Y = Application.GetRealHeight(58),
-                        Width = Application.GetMinRealAverage(32),
-                        Height = Application.GetMinRealAverage(32),
-                        UnSelectedImagePath = "Public/PowerClose.png",
-                        SelectedImagePath = "Public/PowerOpen.png",
-                        IsSelected = function.trait_on_off.curValue.ToString() == "on",
-                        Tag = function.sid + "_Switch",
-                    };
-                    bodyDiv.AddChidren(btnSwitch);
-                    //鍔犺浇寮�鍏虫寜閽簨浠�
-                    LoadEvent_SwitchFunction(btnSwitch);
-                }
+                    #region 鍔犺浇寮�鍏虫寜閽�
 
-                switch (function.Spk_Prefix)
-                {
-                    case FunctionCategory.AC:
-                        switch (function.spk)
+                    /// <summary>
+                    /// 寮�鍏虫寜閽�
+                    /// </summary>
+                    Button btnSwitch;
+                    if (function.spk == SPK.LightRGB || function.spk == SPK.LightDimming)
+                    {
+                        btnSwitch = new Button()
                         {
-                            case SPK.AcStandard:
-                                btnIcon.UnSelectedImagePath = "FunctionIcon/AC/AcThinIcon1.png";
-                                LoadLastStatesButton();
-                                break;
-                        }
-                        break;
-                    case FunctionCategory.FloorHeat:
-                        switch (function.spk)
+                            X = Application.GetRealWidth(303),
+                            Y = Application.GetRealHeight(78),
+                            Width = Application.GetMinRealAverage(32),
+                            Height = Application.GetMinRealAverage(32),
+                            UnSelectedImagePath = "Public/PowerClose.png",
+                            SelectedImagePath = "Public/PowerOpen.png",
+                            IsSelected = function.trait_on_off.curValue.ToString() == "on",
+                            Tag = function.sid + "_Switch",
+                        };
+                        bodyDiv.AddChidren(btnSwitch);
+                        //鍔犺浇寮�鍏虫寜閽簨浠�
+                        LoadEvent_SwitchFunction(btnSwitch, function.attributes.Find((obj) => obj.key == FunctionAttributeKey.FadeTime));
+                    }
+                    else
+                    {
+                        btnSwitch = new Button()
                         {
-                            case SPK.FloorHeatStandard:
-                                btnIcon.UnSelectedImagePath = "FunctionIcon/FloorHeating/FloorHeatingThinIcon.png";
-                                LoadLastStatesButton();
-                                break;
-                        }
-                        break;
-                    case FunctionCategory.Light:
-                        btnIcon.UnSelectedImagePath = "FunctionIcon/Light/LightThinIcon.png";
-                        btnSwitch.IsSelected = function.trait_on_off.curValue.ToString() == "on";
-                        LoadLightControl();
-                        break;
-                    case FunctionCategory.Electric:
-                        switch (function.spk)
-                        {
-                            case SPK.ElectricSocket:
-                                btnIcon.UnSelectedImagePath = "FunctionIcon/Socket/SocketThinIcon.png";
-                                break;
-                            case SPK.ElectricFan:
-                            case SPK.ElectricTuyaFan:
-                                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/FanThinIcon.png";
-                                break;
-                            case SPK.ElectricTV:
-                                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/TVThinIcon.png";
-                                break;
-                            case SPK.ElectricTuyaAirCleaner:
-                                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/AirCleanerThiinIcon.png";
-                                break;
-                            case SPK.ElectricTuyaWeepRobot:
-                                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobotThinIcon.png";
-                                break;
-                            case SPK.ElectricTuyaWaterValve:
-                                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WaterValve/WaterValveIcon.png";
-                                break;
-                        }
-                        btnSwitch.IsSelected = function.trait_on_off.curValue.ToString() == "on";
-                        break;
+                            X = Application.GetRealWidth(303),
+                            Y = Application.GetRealHeight(58),
+                            Width = Application.GetMinRealAverage(32),
+                            Height = Application.GetMinRealAverage(32),
+                            UnSelectedImagePath = "Public/PowerClose.png",
+                            SelectedImagePath = "Public/PowerOpen.png",
+                            IsSelected = function.trait_on_off.curValue.ToString() == "on",
+                            Tag = function.sid + "_Switch",
+                        };
+                        bodyDiv.AddChidren(btnSwitch);
+                        //鍔犺浇寮�鍏虫寜閽簨浠�
+                        LoadEvent_SwitchFunction(btnSwitch);
+                    }
+
+                    switch (function.Spk_Prefix)
+                    {
+                        case FunctionCategory.AC:
+                            switch (function.spk)
+                            {
+                                case SPK.AcStandard:
+                                    btnIcon.UnSelectedImagePath = "FunctionIcon/AC/AcThinIcon1.png";
+                                    LoadLastStatesButton();
+                                    break;
+                            }
+                            break;
+                        case FunctionCategory.FloorHeat:
+                            switch (function.spk)
+                            {
+                                case SPK.FloorHeatStandard:
+                                    btnIcon.UnSelectedImagePath = "FunctionIcon/FloorHeating/FloorHeatingThinIcon.png";
+                                    LoadLastStatesButton();
+                                    break;
+                            }
+                            break;
+                        case FunctionCategory.Light:
+                            btnIcon.UnSelectedImagePath = "FunctionIcon/Light/LightThinIcon.png";
+                            btnSwitch.IsSelected = function.trait_on_off.curValue.ToString() == "on";
+                            LoadLightControl();
+                            break;
+                        case FunctionCategory.Electric:
+                            switch (function.spk)
+                            {
+                                case SPK.ElectricSocket:
+                                    btnIcon.UnSelectedImagePath = "FunctionIcon/Socket/SocketThinIcon.png";
+                                    break;
+                                case SPK.ElectricFan:
+                                case SPK.ElectricTuyaFan:
+                                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/FanThinIcon.png";
+                                    break;
+                                case SPK.ElectricTV:
+                                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/TVThinIcon.png";
+                                    break;
+                                case SPK.ElectricTuyaAirCleaner:
+                                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/AirCleanerThiinIcon.png";
+                                    break;
+                                case SPK.ElectricTuyaWeepRobot:
+                                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobotThinIcon.png";
+                                    break;
+                                case SPK.ElectricTuyaWaterValve:
+                                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WaterValve/WaterValveIcon.png";
+                                    break;
+                            }
+                            btnSwitch.IsSelected = function.trait_on_off.curValue.ToString() == "on";
+                            break;
+                    }
+                    #endregion
                 }
-                #endregion
             }
 
             LoadEvent_DivSkipEvent();
@@ -374,6 +403,38 @@
             LoadEvent_ControlCurtain(btnCurtainStop, btnCurtainOpen, btnCurtainClose, function as Curtain);
             #endregion
         }
+        /// <summary>
+        /// 鍔犺浇鏅捐。鏋跺姛鑳芥帶鍒跺崱鐗�
+        /// </summary>
+        void ClothesHangerFragment()
+        {
+            #region ClothesHanger
+            var btnClothesHangerUp = new Button()
+            {
+                X = Application.GetRealWidth(233),
+                Y = Application.GetRealHeight(58),
+                Width = Application.GetMinRealAverage(32),
+                Height = Application.GetMinRealAverage(32),
+                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1.png",
+                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon1On.png",
+            };
+            bodyDiv.AddChidren(btnClothesHangerUp);
+
+            var btnClothesHangerDown = new Button()
+            {
+                X = Application.GetRealWidth(303),
+                Y = Application.GetRealHeight(58),
+                Width = Application.GetMinRealAverage(32),
+                Height = Application.GetMinRealAverage(32),
+                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1.png",
+                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon1On.png",
+            };
+            bodyDiv.AddChidren(btnClothesHangerDown);
+            LoadEvent_ControlClothesHanger(function, btnClothesHangerDown, btnClothesHangerUp);
+            #endregion
+
+
+        }
 
         /// <summary>
         /// 鍔犺浇闊充箰鍔熻兘鎺у埗鍗$墖
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
index 531d926..e6e56cb 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using System.Collections.Generic;
 using HDL_ON.DriverLayer;
 using HDL_ON.Entity;
 using HDL_ON.UI.Music;
@@ -196,12 +197,6 @@
                 Control.Ins.SendWriteCommand(curtain, d);
             };
 
-            //btnStop.MouseDownEventHandler = (sender, e) =>
-            //{
-            //    btnStop.IsSelected = true;
-            //    btnClose.IsSelected = false;
-            //    btnOpen.IsSelected = false;
-            //};
             btnStop.MouseUpEventHandler = (sender, e) =>
             {
                 btnStop.IsSelected = true;
@@ -227,6 +222,40 @@
         }
         #endregion
 
+
+        /// <summary>
+        /// 鍔犺浇鏅捐。鏋舵帶鍒朵簨浠�
+        /// </summary>
+        void LoadEvent_ControlClothesHanger(Function function, Button btnUp, Button btnDown)
+        {
+            btnUp.MouseDownEventHandler = (sender, e) =>
+            {
+                btnUp.IsSelected = true;
+            };
+            btnUp.MouseUpEventHandler = (sender, e) =>
+            {
+                btnUp.IsSelected = false;
+                function.SetAttrState(FunctionAttributeKey.Position, "up");
+                Dictionary<string, string> d = new Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.Position, "up");
+                Control.Ins.SendWriteCommand(function, d);
+            };
+
+            btnDown.MouseDownEventHandler = (sender, e) =>
+            {
+                btnDown.IsSelected = true;
+            };
+            btnDown.MouseUpEventHandler = (sender, e) =>
+            {
+                btnDown.IsSelected = false;
+                function.SetAttrState(FunctionAttributeKey.Position, "down");
+                Dictionary<string, string> d = new Dictionary<string, string>();
+                d.Add(FunctionAttributeKey.Position, "down");
+                Control.Ins.SendWriteCommand(function, d);
+            };
+        }
+
+
         #region 绌鸿皟浜嬩欢
         #endregion
 
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/.DS_Store b/HDL_ON/UI/UI2/3-Intelligence/Automation/.DS_Store
new file mode 100644
index 0000000..b2074c1
--- /dev/null
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/.DS_Store
Binary files differ
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
index df31fec..cd334f8 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -281,16 +281,22 @@
                             value = "off";
                         }
                         break;
-                    case StringId.youren:
-                    case StringId.kaiqi:
-                        {
+                    case StringId.youren: {
                             value = "true";
                         }
                         break;
-                    case StringId.wuren:
+                    case StringId.wuren: {
+                            value = "false";
+                        }
+                        break;
+                    case StringId.kaiqi:
+                        {
+                            value = "open";
+                        }
+                        break;
                     case StringId.bihe:
                         {
-                            value = "false";
+                            value = "close";
                         }
                         break;
                     case StringId.zaixian: {
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs
index 7569dc4..99458f3 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs
@@ -260,9 +260,12 @@
         {
             EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
             {
-                var page = new ThirdPartyBrandListPage();
+                // var page = new ThirdPartyBrandListPage();
+                // MainPage.BasePageView.AddChidren(page);
+                // page.LoadPage();
+                var page = new UI2.PersonalCenter.PirDevice.PirMain();
                 MainPage.BasePageView.AddChidren(page);
-                page.LoadPage();
+                page.Show();
                 MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
             };
             btnResidenceAddFunctionIcon.MouseUpEventHandler = eventHandler;
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddButton.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddButton.cs
new file mode 100644
index 0000000..4f2aec5
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddButton.cs
@@ -0,0 +1,179 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
+{
+    public class AddButton : FrameLayout
+    {
+        public AddButton()
+        {
+            Tag = "Pir";
+        }
+        public void Show(Control control)
+        {
+            #region 鐣岄潰甯冨眬
+            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
+            PirDevice.View.TopView topView = new View.TopView();
+            topView.topNameBtn.TextID = StringId.tianjiayaokongqi;
+            this.AddChidren(topView.FLayoutView());
+            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); };
+
+            FrameLayout editfLayout = new FrameLayout
+            {
+                Y = topView.frameLayout.Bottom,
+                BackgroundColor = CSS.CSS_Color.textWhiteColor,
+                Height = Application.GetRealHeight(152),
+                Width = Application.GetRealWidth(375),
+            };
+            this.AddChidren(editfLayout);
+            //绾�
+            Button lineBtn = new Button
+            {
+                Y = Application.GetRealHeight(43),
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(375 - 16 * 2),
+                Height = 1,
+                BackgroundColor = CSS.CSS_Color.viewLine,
+            };
+            editfLayout.AddChidren(lineBtn);
+            //璇疯緭鍏ユ寜閿悕绉�
+            EditText editText = new EditText()
+            {
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(375 - 16 * 2),
+                Height = Application.GetRealHeight(44),
+                PlaceholderText = Language.StringByID(StringId.anjianmingcheng),
+                PlaceholderTextColor = CSS.CSS_Color.textCancelColor,
+                TextColor = CSS.CSS_Color.textColor,
+                TextSize = TextSize.text14,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            editfLayout.AddChidren(editText);
+            //涓嬩竴姝�
+            Button saveBtn = new Button
+            {
+                Width = Application.GetRealWidth(220),
+                Height = Application.GetRealHeight(44),
+                Y = Application.GetRealHeight(92),
+                X = Application.GetRealWidth(78),
+                TextID = StringId.xiayibu,
+                TextSize = TextSize.text16,
+                TextColor = CSS.CSS_Color.textWhiteColor,
+                TextAlignment = TextAlignment.Center,
+                BackgroundColor = CSS.CSS_Color.btnSaveBackgroundColor,
+                Radius = (uint)Application.GetRealHeight(22),
+            };
+            editfLayout.AddChidren(saveBtn);
+
+            FrameLayout fLayout = new FrameLayout
+            {
+                Y = editfLayout.Bottom + Application.GetRealHeight(8),
+                Height = Application.GetRealHeight(667 - 64 - 152 - 8),
+                Width = Application.GetRealWidth(375),
+                BackgroundColor = CSS.CSS_Color.textWhiteColor,
+            };
+            this.AddChidren(fLayout);
+            //鎺ㄨ崘鎸夐敭
+            Button titleBtn = new Button
+            {
+                Y = Application.GetRealHeight(12),
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(220),
+                Height = Application.GetRealHeight(20),
+                TextID = StringId.tuijiananjian,
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.text1Color,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            fLayout.AddChidren(titleBtn);
+            //鍔ㄦ�佸姞杞紹utton鎸夐挳鐖舵帶浠�
+            FrameLayout buttonFLayout = new FrameLayout
+            {
+                Y = Application.GetRealHeight(32),
+                Height = Application.GetRealHeight(667 - 64 - 152 - 8 - 12 - 20),
+                Width = Application.GetRealWidth(375),
+            };
+            fLayout.AddChidren(buttonFLayout);
+            #endregion
+            View.Buttons buttons = new View.Buttons();
+            var buttonNameList = buttons.GetList("榛樿鎸夐挳");
+            buttons.AddButton(buttonFLayout, buttonNameList, (s) =>
+            {
+                editText.Text = s;
+#if __Android__
+                editText.SetSelectionEnd();
+#endif
+            });
+            ///涓嬩竴姝ョ殑鐐瑰嚮浜嬩欢
+            saveBtn.MouseUpEventHandler += (sender, e) =>
+            {
+                var texts = editText.Text.Trim();
+                if (string.IsNullOrEmpty(editText.Text))
+                {
+                    //鍚嶇О涓嶈兘涓虹┖
+                    return;
+                }
+                var butName = Pir.BuottonList.Find((c) => c.value == texts);
+                if (butName != null)
+                {
+                    //鍚嶇О宸茬粡瀛樺湪
+                    return;
+                }
+                //new寮曞鐣岄潰
+                View.ReplicationView replication = new View.ReplicationView();
+                replication.Show();
+
+                //娣诲姞鏁版嵁瀵硅薄
+                ButtonObj buttonObj = new ButtonObj();
+                buttonObj.Key = "key" + Pir.BuottonList.Count.ToString();
+                buttonObj.value = texts;
+
+                PirSend.CodeStudy(buttonObj, (responsePackNew) =>
+                {
+                    ///杩欓噷锛氱洃鍚琈TTP鎺ㄩ�佷笅鏉ヤ富棰橈紝鎵嶇煡閬撴槸鍚︽坊鍔犳垚鍔�
+                    ///
+                    //浼戠湢鏄负鏄剧ず寮曞鐣岄潰
+                      System.Threading.Thread.Sleep(5000);
+                    //绉婚櫎娣诲姞鎸夐挳寮曞鐣岄潰
+                    replication.RemView();
+                    //if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
+                    //{
+                    var buttonName = Pir.BuottonList.Find((c) => c.value == buttonObj.value);
+                    if (buttonName == null)
+                    {
+                        //娣诲姞鏁版嵁
+                        Pir.BuottonList.Add(buttonObj);
+                    }
+                    //绉婚櫎娣诲姞鎸夐挳鐣岄潰
+                    this.RemoveFromParent();
+
+                    for (int i = MainPage.BasePageView.ChildrenCount - 1; 0 <= i; i--)
+                    {
+                        var view = MainPage.BasePageView.GetChildren(i);
+                        if (view.GetType() == typeof(AddControl))
+                        {
+                            view.RemoveFromParent();
+                        }
+                        
+                    }
+                  
+                    //鍔犺浇鏁版嵁鐣岄潰
+                    AddControl addControl = new AddControl();
+                    MainPage.BasePageView.AddChidren(addControl);
+                    addControl.Show(control);
+                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                    //}
+                    //else
+                    //{
+                    //    PirSend.Error(responsePackNew);
+                    //}
+
+                });
+
+
+            };
+
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControl.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControl.cs
new file mode 100644
index 0000000..97af281
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControl.cs
@@ -0,0 +1,279 @@
+锘縰sing System;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+using System.Collections.Generic;
+using System.Text;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
+{
+    public class AddControl : FrameLayout
+    {
+        public AddControl()
+        {
+            Tag = "Pir";
+        }
+        public void Show(Control control)
+        {
+
+            #region 鐣岄潰甯冨眬
+
+            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
+            PirDevice.View.TopView topView = new View.TopView();
+            topView.topNameBtn.TextID = StringId.zhinengyaokongqi;
+            topView.topIconBtn.Visible = true;
+            topView.topIconBtn.UnSelectedImagePath = "PirIcon/del.png";
+            this.AddChidren(topView.FLayoutView());
+            topView.clickBackBtn.MouseUpEventHandler += (sender, e) =>
+            {
+                
+                this.RemoveFromParent();
+
+            };
+
+            #region 娣诲姞鎸夐挳
+            FrameLayout addLayout = new FrameLayout
+            {
+                Y = Application.GetRealHeight(64),
+                Height = Application.GetRealHeight(84),
+                Width = Application.GetRealWidth(TextSize.view375),
+            };
+            this.AddChidren(addLayout);
+
+            Button addBtn = new Button
+            {
+                Width = Application.GetRealWidth(344),
+                Height = Application.GetRealHeight(44),
+                Y = Application.GetRealHeight(24),
+                X = Application.GetRealWidth(16),
+                TextID = StringId.tianjiaanniu,
+                TextSize = TextSize.text16,
+                TextColor = CSS.CSS_Color.btnSaveBackgroundColor,
+                BorderColor = CSS.CSS_Color.btnSaveBackgroundColor,
+                BorderWidth = 1,
+                Radius = (uint)Application.GetRealHeight(22),
+            };
+            addLayout.AddChidren(addBtn);
+            #endregion
+            FrameLayout frameLayout = new FrameLayout
+            {
+                Y = Application.GetRealHeight(64 + 84),
+                Height = Application.GetRealHeight(667 - 64 - 84),
+                Width = Application.GetRealWidth(TextSize.view375),
+            };
+            this.AddChidren(frameLayout);
+
+            #region 淇濆瓨
+            FrameLayout saveLayout = new FrameLayout
+            {
+                Y = Application.GetRealHeight(667 - 104),
+                Height = Application.GetRealHeight(104),
+                Width = Application.GetRealWidth(TextSize.view375),
+                BackgroundColor = CSS.CSS_Color.viewLine,
+            };
+            this.AddChidren(saveLayout);
+            saveLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
+
+            Button paixuBtn = new Button
+            {
+                Width = Application.GetRealWidth(375 - 16 * 2),
+                Height = Application.GetRealHeight(20),
+                Y = Application.GetRealHeight(12),
+                X = Application.GetRealWidth(16),
+                TextID = StringId.paixu,
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.textTipColor,
+            };
+            saveLayout.AddChidren(paixuBtn);
+
+            Button saveBtn = new Button
+            {
+                Width = Application.GetRealWidth(220),
+                Height = Application.GetRealHeight(44),
+                Y = paixuBtn.Bottom + Application.GetRealHeight(12),
+                X = Application.GetRealWidth(78),
+                TextID = StringId.save,
+                TextSize = TextSize.text16,
+                TextColor = CSS.CSS_Color.textWhiteColor,
+                TextAlignment = TextAlignment.Center,
+                BackgroundColor = CSS.CSS_Color.btnSaveBackgroundColor,
+                Radius = (uint)Application.GetRealHeight(22),
+
+            };
+            saveLayout.AddChidren(saveBtn);
+            #endregion
+
+            VerticalScrolViewLayout vv = new VerticalScrolViewLayout();
+            frameLayout.AddChidren(vv);
+            RefreshView(vv, false);
+            #endregion
+
+            #region  鐣岄潰鐐瑰嚮浜嬩欢
+            //鍒犻櫎鐐瑰嚮浜嬩欢
+            topView.clickSetBtn.MouseUpEventHandler += (sender, e) =>
+            {
+                topView.clickSetBtn.IsSelected = !topView.clickSetBtn.IsSelected;
+                if (topView.clickSetBtn.IsSelected)
+                {
+                    topView.topIconBtn.UnSelectedImagePath = "";
+                    topView.topIconBtn.Text = Language.StringByID(StringId.wancheng);
+                    topView.topIconBtn.TextSize = TextSize.text14;
+                    topView.topIconBtn.TextColor = CSS.CSS_Color.textColor;
+                    RefreshView(vv, true);
+                }
+                else
+                {
+                    topView.topIconBtn.UnSelectedImagePath = "PirIcon/del.png";
+                    topView.topIconBtn.Text = "";
+                    RefreshView(vv, false);
+                }
+
+
+
+            };
+            //娣诲姞鎸夐挳鐐瑰嚮浜嬩欢
+            addBtn.MouseUpEventHandler += (sender, e) =>
+            {
+                AddButton addButton = new AddButton();
+                MainPage.BasePageView.AddChidren(addButton);
+                addButton.Show(control);
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+            //淇濆瓨鐐瑰嚮浜嬩欢
+            saveBtn.MouseUpEventHandler += (sender, e) =>
+            {
+               //绉婚櫎褰撳墠鐣岄潰
+                this.RemoveFromParent();
+                //鍙兘涔嬪墠宸茬粡瀛樺湪璇ョ晫闈�
+                for (int i = MainPage.BasePageView.ChildrenCount - 1; 0 <= i; i--)
+                {
+                    var view = MainPage.BasePageView.GetChildren(i);
+                    if (view.GetType() == typeof(AddControlComplete))
+                    {
+                        view.RemoveFromParent();
+                    }
+                }
+                //MainPage.BasePageView.RemoveViewByTag("Pir");
+                AddControlComplete addControlComplete = new AddControlComplete();
+                MainPage.BasePageView.AddChidren(addControlComplete);
+                addControlComplete.Show(control);
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+            #endregion
+        }
+        /// <summary>
+        /// 鍔犺浇鎸夐挳鎺т欢View鐨勬柟娉�
+        /// </summary>
+        /// <param name="vv">涓婁笅婊戝姩鎺т欢</param>
+        /// <param name="if_bool">琛ㄧず鏄惁鏄剧ず鍒犻櫎鍥炬爣</param>
+        void RefreshView(VerticalScrolViewLayout vv, bool if_bool)
+        {
+            vv.RemoveAll();
+            //瀹氫箟涓�涓彉閲忚褰曡鏁�
+            int sum = 0;
+            if (Pir.BuottonList.Count % 3 == 0)
+            {
+                sum = Pir.BuottonList.Count / 3;
+            }
+            else
+            {
+                sum = Pir.BuottonList.Count / 3 + 1;
+            }
+            //璁$畻鍔犺浇鍑烘潵鐨勬暟鎹渶瑕佺殑楂樺害
+            int h = 16 + sum * (16 + 44) + 104 + 76;
+            int line = 0;
+            //鎸夐挳鐨勭埗鎺т欢
+            var FLayout = new FrameLayout
+            {
+                Height = Application.GetRealWidth(h),
+            };
+            vv.AddChidren(FLayout);
+            for (int i = 1, j = 0; i <= Pir.BuottonList.Count; i++, j++)
+            {
+                var nameObj = Pir.BuottonList[i - 1];
+                //鎸夐挳
+                var buttonNameBtn = new Button
+                {
+
+                    Y = Application.GetRealHeight(16 + line * (16 + 44)),
+                    X = Application.GetRealWidth(16 + (16 + 104) * j),
+                    Width = Application.GetRealWidth(104),
+                    Height = Application.GetRealHeight(44),
+                    Text = nameObj.value,
+                    TextSize = TextSize.text16,
+                    TextColor = CSS.CSS_Color.textColor,
+                    TextAlignment = TextAlignment.Center,
+                    Radius = (uint)Application.GetRealHeight(18),
+                    BorderWidth = 1,
+                    BorderColor = CSS.CSS_Color.textCancelColor,
+                };
+                FLayout.AddChidren(buttonNameBtn);
+                //鍒犻櫎鍥炬爣
+                var delIconBtn = new Button
+                {
+                    UnSelectedImagePath = "PirIcon/delbuton.png",
+                    Y = Application.GetRealHeight(12 + line * (16 + 44)),
+                    X = Application.GetRealWidth((16 + 92) + (104 + 16) * j),
+                    Width = Application.GetRealWidth(16),
+                    Height = Application.GetRealWidth(16),
+                    Tag = nameObj,
+                };
+                if (if_bool)
+                {
+                    FLayout.AddChidren(delIconBtn);
+                }
+                //鍒犻櫎鍥炬爣鐨勭偣鍑讳簨浠�
+                delIconBtn.MouseUpEventHandler += (sender, e) =>
+                {
+                    var obj = delIconBtn.Tag as ButtonObj;
+                    //鍔犺浇log
+                    Loading loading = new Loading();
+                    this.AddChidren(loading);
+                    HDL_ON.DAL.Server.ResponsePackNew responsePackNew = null;
+                    loading.Start();
+                    new System.Threading.Thread(() =>
+                    {
+                        try
+                        {
+                            //鍙戦�佹寜閿垹闄わ紱
+                            responsePackNew = PirSend.CodeRemove(obj);
+                        }
+                        catch { }
+                        finally
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                loading.Hide();
+                                if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
+                                {
+                                    ///杩欓噷锛氱洃鍚琈TTP鎺ㄩ�佷笅鏉ヤ富棰橈紝鎵嶇煡閬撴槸鍚︽坊鍔犳垚鍔�
+                                    var buttonObj = Pir.BuottonList.Find((c) => c.value == obj.value);
+                                    if (buttonObj != null)
+                                    {
+                                        Pir.BuottonList.Remove(buttonObj);
+                                    }
+                                    RefreshView(vv, true);
+                                }
+                                else {
+                                    Method method = new Method();
+                                    method.ErrorShow(responsePackNew);
+                                }
+
+                            });
+                        }
+
+                    })
+                    { IsBackground = true }.Start();
+
+
+                };
+                if (i % 3 == 0)
+                {
+                    //婊′竴琛岄噸缃甹=0鍊�;
+                    j = -1;
+                    line += 1;
+                }
+
+            }
+
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControlComplete.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControlComplete.cs
new file mode 100644
index 0000000..5a50897
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/AddControlComplete.cs
@@ -0,0 +1,121 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
+{
+    public class AddControlComplete:FrameLayout
+    {
+        public AddControlComplete()
+        {
+            Tag = "Pir";
+        }
+        public void Show(Control control) {
+            #region 鐣岄潰甯冨眬
+            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
+            PirDevice.View.TopView topView = new View.TopView();
+            topView.topNameBtn.TextID = StringId.tianjiayaokongqi;
+            this.AddChidren(topView.FLayoutView());
+            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); };
+
+            FrameLayout fLayout = new FrameLayout 
+            {
+                Y =Application.GetRealHeight(64),
+                BackgroundColor = CSS.CSS_Color.textWhiteColor,
+                Height = Application.GetRealHeight(224),
+                Width = Application.GetRealWidth(375),
+            };
+            this.AddChidren(fLayout);
+            //
+            Button iconBtn = new Button 
+            {
+                Y = Application.GetRealHeight(28),
+                X = Application.GetRealWidth(137),
+                Width = Application.GetRealWidth(102),
+                Height = Application.GetRealWidth(102),
+                UnSelectedImagePath = "PirIcon/succeed.png",
+            };
+            fLayout.AddChidren(iconBtn);
+
+            //娣诲姞鎴愬姛
+            Button text1Btn = new Button
+            {
+                Width = Application.GetRealWidth(375-32),
+                Height = Application.GetRealHeight(22),
+                Y = Application.GetRealHeight(158),
+                X = Application.GetRealWidth(16),
+                TextID = StringId.tianjiachenggong,
+                TextSize = TextSize.text16,
+                TextColor = CSS.CSS_Color.btnSaveBackgroundColor,
+                TextAlignment = TextAlignment.Center,
+            };
+            fLayout.AddChidren(text1Btn);
+            //鍙埌鍒嗙被-鍔熻兘-鐢靛櫒鎿嶄綔浣跨敤
+            Button text2Btn = new Button
+            {
+                Width = Application.GetRealWidth(375 - 32),
+                Height = Application.GetRealHeight(22),
+                Y = Application.GetRealHeight(188),
+                X = Application.GetRealWidth(16),
+                TextID = StringId.kedaofenlei,
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.textTipColor,
+                TextAlignment = TextAlignment.Center,
+            };
+            fLayout.AddChidren(text2Btn);
+            //鎵�灞炲垎绫�
+            View.PatchView fenlei = new View.PatchView();
+            fenlei.frameLayout.Y = fLayout.Bottom+ Application.GetRealHeight(8);
+            this.AddChidren(fenlei.FLayoutView(false));
+            fenlei.btnText1.TextID = StringId.suoshufenlei;
+            fenlei.btnText2.TextID = StringId.dianqi;
+            //閬ユ帶鍣ㄥ悕绉�
+            View.PatchView namePatchView = new View.PatchView();
+            namePatchView.frameLayout.Y = fenlei.frameLayout.Bottom;
+            this.AddChidren(namePatchView.FLayoutView());
+            namePatchView.btnText1.TextID = StringId.yaokongqimingcheng;
+            namePatchView.btnText2.Text = control.name;
+            //鎵�灞炲尯鍩�
+            View.PatchView quyuPatchView = new View.PatchView();
+            quyuPatchView.frameLayout.Y = namePatchView.frameLayout.Bottom;
+            this.AddChidren(quyuPatchView.FLayoutView());
+            quyuPatchView.btnText1.TextID = StringId.suoshuquyu;
+            quyuPatchView.btnText2.TextID = StringId.dianqi;
+
+            //缁х画娣诲姞
+            Button addBtn = new Button
+            {
+                Y = quyuPatchView.frameLayout.Bottom + Application.GetRealHeight(125),
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(375-32),
+                Height = Application.GetRealHeight(20),
+                TextID = StringId.jixutianjia,
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.textConfirmColor,
+                TextAlignment = TextAlignment.Center,
+            };
+            this.AddChidren(addBtn);
+            //瀹屾垚
+            View.SaveView saveView = new View.SaveView();
+            this.AddChidren(saveView.FLayoutView());
+            saveView.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
+            #endregion
+            #region  鐣岄潰鐐瑰嚮浜嬩欢
+            //閬ユ帶鍣ㄥ悕绉扮偣鍑讳簨浠�
+            namePatchView.btnClick.MouseUpEventHandler += (sender,e) => { };
+            //鎵�灞炲尯鍩熺偣鍑讳簨浠�
+            quyuPatchView.btnClick.MouseUpEventHandler += (sender, e) => { };
+            //缁х画娣诲姞鐐瑰嚮浜嬩欢
+            addBtn.MouseUpEventHandler += (sender, e) => {
+                Method method = new Method();
+                method.AddControl();
+            };
+            //瀹屾垚鐐瑰嚮浜嬩欢
+            saveView.btnClick.MouseUpEventHandler += (sender, e) => {
+                MainPage.BasePageView.RemoveViewByTag("AddControl");
+                MainPage.BasePageView.RemoveViewByTag("Pir");
+            };
+            #endregion
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/EmptyClass.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/BrandList.cs
similarity index 83%
copy from HDL_ON/UI/UI2/3-Intelligence/Automation/EmptyClass.cs
copy to HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/BrandList.cs
index 2293a25..06e00f9 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/EmptyClass.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/BrandList.cs
@@ -4,20 +4,21 @@
 using System.Collections.Generic;
 using System.Text;
 
-namespace HDL_ON.UI.UI2.Intelligence.Automation
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
 {
-    public class EmptyClass : FrameLayout
+    public class BrandList : FrameLayout
     {
+        public BrandList()
+        {
+            Tag = "PirView";
+        }
         /// <summary>
         /// 
         /// </summary>
         /// <param name="list">琛ㄧず璇ュ垪琛ㄥ厓绱燗-Z瀛楁瘝绛涢�夋樉绀哄嚭鏉�</param>
         /// <param name="list6">琛ㄧず璇ュ垪琛ㄥ厓绱犳樉绀哄湪list鍓嶉潰(璇ュ垪琛ㄥ厓绱犱笉鍋欰-Z瀛楁瘝绛涢��),娌℃湁鍙互涓簂ist6=null</param>
-        /// <param name="action">杩斿洖閫変腑鏂囨湰</param>
-        public void Show(List<string> list, List<string> list6, Action<string> action) 
+        public void Show(List<string> list, List<string> list6)
         {
-
-
             //string text = "30";
             //byte[] bytes = new byte[text.Length / 2];
             //for (int i = 0, j = 0; i < bytes.Length; j += 2, i++)
@@ -27,8 +28,6 @@
             //}
             ////鎶奲yte鏁扮粍杞崲鎴愭枃瀛�
             //string str = System.Text.Encoding.UTF8.GetString(bytes);
-
-
             var frameLayout = new FrameLayout
             {
                 BackgroundColor = CSS.CSS_Color.viewTop,
@@ -59,7 +58,14 @@
                 UnSelectedImagePath = "LogicIcon/back.png",
             };
             frameLayout.AddChidren(backBtn);
-            backBtn.MouseUpEventHandler += (sen, e) =>
+            var clickBackBtn = new Button
+            {
+                Width = Application.GetRealWidth(12+16+20),
+                Height = Application.GetRealWidth(20+20),
+                Y = Application.GetRealHeight(32),
+            };
+            frameLayout.AddChidren(clickBackBtn);
+            clickBackBtn.MouseUpEventHandler += (sen, e) =>
             {
                 this.RemoveFromParent();
             };
@@ -86,16 +92,7 @@
             };
             this.AddChidren(fram);
 
-
-            //var list11 = new List<string> {
-            //   "鐖变綘", "鍝庡懄","鍩冨強","鍝堝紬鎹㈠3鍝堝紬", "鐖卞痉鍗庡v","淇哄嚑涓柉浜�",
-            //    "鎷滀簡", "宸村+", "鐧惧か",  "鐧惧悎鍦扮悊璇句綘鎵撶畻", "涓嶅害鑰侀浼忔灔", "姣斿埌涔濈偣",
-            //    "杞︾珯","娴嬭瘯","姝ゅ湴", "鎵嶇湅瑙佸ソ寰楀揩","鍚冭蒋楗�","浠庣湅瑙佷簩鍗佸",
-            //   "绛夊緟鏈轰細鍚�","鐨勫鎴�", "澶氬枬鐐�", "鐧昏鍝︾劧鍚�", "鎵撶數璇�",
-            //     "鎭╄偆闇滅湅灏辩湅浜�", "楗挎os","鎭堕瓟鍩�","鍎跨鑱斿姩", "鎭╁叚棰楀瓙寮规媺鎷夎¥娲楁尽浜�","鍙戝ぇ瀛︾敓鍙戝彂",
-            //    "鐪熷帀瀹砳鍙戝灏�", "鐭ラ亾浣犱粯娆句簡鍙�", "灏厭鍥炲",  "鏀硅繘鐨勮瘽", "澶╁ぉ閫熷害鍥炵瓟", "澶ソ浜嗗紑杞�",
-            //    "鍑忚偉鐨勭湅杩�","妗″嚭鍙e閭�","濡傛灉瑙夊緱", "寰堣垝鏈嶇殑","鍚冭蒋楗�","浠庣湅瑙佷簩鍗佸",
-            //   "榫欏嵎椋庝簭澶у彂","鍘诲ソ鐪�", "澶氬枬鐐�", "濂芥氮璐瑰ソ", "鎵撶數璇�"};
+           
             if (list == null)
             {
                 list = new List<string>();
@@ -105,10 +102,7 @@
                 list6 = new List<string>();
             }
             var list1 = GetDateList(list);
-            list1.Add("1");
             list1.InsertRange(0, list6);
-
-
 
             var vv = new VerticalScrolViewLayout();
             fram.AddChidren(vv);
@@ -125,10 +119,9 @@
                         listStr.Add(s);
                     }
                 }
-                RefreshLayout(vv, listStr, action);
+                RefreshLayout(vv, listStr);
 
             };
-
             #region A-Z
 
 
@@ -140,7 +133,7 @@
                 Width = Application.GetRealWidth(10 + 6),
             };
             fram.AddChidren(a_zFra);
-            var list2 = GetList();  
+            var list2 = GetList();
             for (int i = 0; i < list2.Count; i++)
             {
 
@@ -183,11 +176,7 @@
             }
             #endregion
 
-            RefreshLayout(vv, list1,action);
-
-
-
-
+            RefreshLayout(vv, list1);
 
         }
         /// <summary>
@@ -195,7 +184,7 @@
         /// </summary>
         /// <param name="vv">鐖舵帶浠�</param>
         /// <param name="list">鏄剧ず鍒楄〃</param>
-        private void RefreshLayout(VerticalScrolViewLayout vv, List<string> list,Action<string> action)
+        private void RefreshLayout(VerticalScrolViewLayout vv, List<string> list)
         {
             vv.RemoveAll();
             foreach (var str in list)
@@ -235,10 +224,10 @@
                 vv.AddChidren(rowLayout);
                 clickBtn.MouseUpEventHandler += (sen, e) =>
                 {
-                    //鎵惧埌绱㈠紩鍊�
-                    var index = list.IndexOf(clickBtn.Tag.ToString());
+                    ////鎵惧埌绱㈠紩鍊�
+                    //var index = list.IndexOf(clickBtn.Tag.ToString());
 
-                    this.RemoveFromParent();
+                    //this.RemoveFromParent();
                 };
 
             }
@@ -261,7 +250,6 @@
                 return false;
             }
         }
-
         /// <summary>
         /// 鑾峰彇鏄剧ず鍒楄〃
         /// </summary>
@@ -300,7 +288,6 @@
             }
             return list;
         }
-
         /// <summary>
         /// 鑾峰彇A-Z瀛楁瘝鍒楄〃
         /// </summary>
@@ -321,7 +308,6 @@
             }
             return list;
         }
-
         /// <summary>
         /// 鑾峰彇姹夊瓧棣栧瓧姣�
         /// </summary>
@@ -346,34 +332,7 @@
                 iCnChar = i1 * 256 + i2;
             }
 
-            //expresstion 
-            //table of the constant list 
-            // 'A'; //45217..45252 
-            // 'B'; //45253..45760 
-            // 'C'; //45761..46317 
-            // 'D'; //46318..46825 
-            // 'E'; //46826..47009 
-            // 'F'; //47010..47296 
-            // 'G'; //47297..47613 
-
-            // 'H'; //47614..48118 
-            // 'J'; //48119..49061 
-            // 'K'; //49062..49323 
-            // 'L'; //49324..49895 
-            // 'M'; //49896..50370 
-            // 'N'; //50371..50613 
-            // 'O'; //50614..50621 
-            // 'P'; //50622..50905 
-            // 'Q'; //50906..51386 
-
-            // 'R'; //51387..51445 
-            // 'S'; //51446..52217 
-            // 'T'; //52218..52697 
-            //娌℃湁U,V 
-            // 'W'; //52698..52979 
-            // 'X'; //52980..53640 
-            // 'Y'; //53689..54480 
-            // 'Z'; //54481..55289 
+           
 
             // iCnChar match the constant 
             if ((iCnChar >= 45217) && (iCnChar <= 45252))
@@ -473,3 +432,4 @@
         }
     }
 }
+
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/DeviceSet.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/DeviceSet.cs
new file mode 100644
index 0000000..8ba618f
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/DeviceSet.cs
@@ -0,0 +1,244 @@
+锘縰sing System;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+using System.Collections.Generic;
+using System.Text;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
+{
+    public class DeviceSet : FrameLayout
+    {
+        public DeviceSet()
+        {
+            Tag = "PirView";
+        }
+        public void Show() {
+            #region 鐣岄潰甯冨眬
+            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
+            PirDevice.View.TopView topView = new View.TopView();
+            topView.topNameBtn.TextID = StringId.shebeigaunli;
+            topView.topIconBtn.Visible = true;
+            this.AddChidren(topView.FLayoutView());
+            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); };
+            VerticalScrolViewLayout vv = new VerticalScrolViewLayout();
+            vv.Height = Application.GetRealHeight(667 - 64);
+            vv.Y = Application.GetRealHeight(64);
+            this.AddChidren(vv);
+            #endregion
+            int a = 3;
+            int b = 3;
+            for (int i = 0; i < b; i++)
+            {
+                #region 绾㈠瀹濆浘鏍� 鐗堟湰鍙� 鍚嶇О 鐘舵��
+                FrameLayout fLayout = new FrameLayout
+                {
+                    Width = Application.GetRealWidth(375),
+                    Height = Application.GetRealHeight(12+92+(50* a)),
+                };
+                vv.AddChidren(fLayout);
+               
+                //绾㈠瀹濇樉绀虹埗鎺т欢
+                FrameLayout devfLayout = new FrameLayout
+                {
+                    Y = Application.GetRealHeight(12),
+                    X = Application.GetRealWidth(16),
+                    Width = Application.GetRealWidth(375-16*2),
+                    Height = Application.GetRealHeight(92 + (50 * a)),
+                    BackgroundColor = CSS.CSS_Color.view,
+                    Radius = (uint)Application.GetRealHeight(12),
+                };
+                fLayout.AddChidren(devfLayout);
+                //绾㈠瀹濆浘鏍�
+                Button priequipmentBtn = new Button
+                {
+                    Y=Application.GetRealHeight(16),
+                    X = Application.GetRealWidth(5),
+                    Width = Application.GetRealWidth(60),
+                    Height = Application.GetRealWidth(60),
+                    UnSelectedImagePath = "PirIcon/priequipment.png",
+                    TextAlignment = TextAlignment.Center,
+                };
+                devfLayout.AddChidren(priequipmentBtn);
+                //绾㈠瀹濆悕绉�
+                Button deviceNameBtn = new Button
+                {
+                    Y=Application.GetRealHeight(16),
+                    X = priequipmentBtn.Right + Application.GetRealWidth(7),
+                    Width = Application.GetRealWidth(120),
+                    Height = Application.GetRealHeight(20),
+                    Text = "绾㈠瀹滱"+i.ToString(),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = TextSize.text14,
+                    TextColor = CSS.CSS_Color.textColor,
+                    IsBold = true,
+                };
+                devfLayout.AddChidren(deviceNameBtn);
+                //鐗堟湰鍙�
+                Button versionBtn = new Button
+                {
+                    Y = deviceNameBtn.Bottom+ Application.GetRealHeight(4),
+                    X = priequipmentBtn.Right + Application.GetRealWidth(7),
+                    Width = Application.GetRealWidth(120),
+                    Height = Application.GetRealHeight(17),
+                    Text = "鐗堟湰鍙穠1.3.5",
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = TextSize.text12,
+                    TextColor = CSS.CSS_Color.textCancelColor,
+                };
+                devfLayout.AddChidren(versionBtn);
+                // 5/10
+                Button geBtn = new Button
+                {
+                    Y = versionBtn.Bottom + Application.GetRealHeight(2),
+                    X = priequipmentBtn.Right + Application.GetRealWidth(7),
+                    Width = Application.GetRealWidth(120),
+                    Height = Application.GetRealHeight(17),
+                    Text = "2",
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = TextSize.text12,
+                    TextColor = CSS.CSS_Color.textConfirmColor,
+                };
+                devfLayout.AddChidren(geBtn);
+                geBtn.Width = geBtn.GetTextWidth();
+                // 5/10
+                Button sumBtn = new Button
+                {
+                    Y = versionBtn.Bottom + Application.GetRealHeight(2),
+                    X = geBtn.Right,
+                    Width = Application.GetRealWidth(20),
+                    Height = Application.GetRealHeight(17),
+                    Text ="/10",
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = TextSize.text12,
+                    TextColor = CSS.CSS_Color.textCancelColor,
+                };
+                devfLayout.AddChidren(sumBtn);
+                //鐘舵�佸浘鏍�
+                Button stateIconBtn = new Button
+                {
+                    Y =Application.GetRealHeight(23),
+                    X = Application.GetRealWidth(291),
+                    Width = Application.GetRealWidth(8),
+                    Height = Application.GetRealWidth(8),
+                    UnSelectedImagePath = "PirIcon/online.png",
+                };
+                devfLayout.AddChidren(stateIconBtn);
+                //绾㈠瀹濈姸鎬侊紙鍦ㄧ嚎-绂荤嚎锛�
+                Button stateTextBtn = new Button
+                {
+                    Y = Application.GetRealHeight(18),
+                    X = Application.GetRealWidth(303),
+                    Width = Application.GetRealWidth(30),
+                    Height = Application.GetRealHeight(17),
+                    TextID=StringId.zaixianhwb,
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextSize = TextSize.text12,
+                    TextColor = 0xFF67D569,// CSS.CSS_Color.textColor,
+                    IsBold=true,
+                };
+                devfLayout.AddChidren(stateTextBtn);
+                //绾�
+                Button lineBtn = new Button
+                {
+                    Y = Application.GetRealHeight(92)-1,
+                    X = Application.GetRealWidth(16),
+                    Width = Application.GetRealWidth(343-16*2),
+                    Height =1,
+                    BackgroundColor = CSS.CSS_Color.viewLine,
+                };
+                devfLayout.AddChidren(lineBtn);
+
+                if (b - 1 == i)
+                {
+                    //鏈�鍚庝竴涓悗闈㈠鍔犻棿闅旇儗鏅�
+                    vv.AddChidren(new FrameLayout { Height = Application.GetRealHeight(20) });
+                }
+                #endregion
+
+                for (int j = 0; j < a; j++) {
+                    RowLayout funControlRow = new RowLayout
+                    {
+                        Y = Application.GetRealHeight(92 + (50 * j)),
+                        Width = Application.GetRealWidth(375 - 16 * 2),
+                        Height = Application.GetRealHeight(50),
+                        LineColor = CSS.CSS_Color.textWhiteColor,
+                        SubViewWidth=Application.GetRealWidth(68),
+                    };
+                    devfLayout.AddChidren(funControlRow);
+                    //閬ユ帶鍣ㄥ悕绉�
+                    Button nameBtn = new Button
+                    {
+                        X = Application.GetRealWidth(16),
+                        Width = Application.GetRealWidth(150),
+                        Height = Application.GetRealHeight(20),
+                        Text =j.ToString(),
+                        TextAlignment=TextAlignment.CenterLeft,
+                        TextSize = TextSize.text14,
+                        TextColor = CSS.CSS_Color.textColor,
+                        Gravity=Gravity.CenterVertical,
+                    };
+                    funControlRow.AddChidren(nameBtn);
+                    //閬ユ帶鍣ㄥ尯鍩�
+                    Button areaBtn = new Button
+                    {
+                        X=Application.GetRealWidth(311+16-(40+100)),
+                        Width = Application.GetRealWidth(100),
+                        Height = Application.GetRealHeight(17),
+                        Text = j.ToString(),
+                        TextAlignment = TextAlignment.CenterRight,
+                        TextSize = TextSize.text12,
+                        TextColor = CSS.CSS_Color.textCancelColor,
+                        Gravity =Gravity.CenterVertical,
+                    };
+                    funControlRow.AddChidren(areaBtn);
+                    //涓嬩竴绾у浘鏍�
+                    Button nextIconBtn = new Button
+                    {
+                        X = Application.GetRealWidth(295+16),
+                        Width = Application.GetRealWidth(16),
+                        Height = Application.GetRealWidth(16),
+                        UnSelectedImagePath = "PirIcon/next.png",
+                        Gravity = Gravity.CenterVertical,
+                    };
+                    funControlRow.AddChidren(nextIconBtn);
+                    //鍒犻櫎
+                    Button delBtn = new Button
+                    {
+                        Width = Application.GetRealWidth(50),
+                        Height = Application.GetRealHeight(22),
+                        TextID = StringId.Del,
+                        TextAlignment = TextAlignment.Center,
+                        TextSize = TextSize.text16,
+                        TextColor = CSS.CSS_Color.textWhiteColor,
+                        IsBold=true,
+                        BackgroundColor= CSS.CSS_Color.textRedColor,
+                    };
+                    funControlRow.AddRightView(delBtn);
+                    //绾�
+                    Button line1Btn = new Button
+                    {
+                        Y = Application.GetRealHeight(50 - 2),
+                        X = Application.GetRealWidth(16),
+                        Width = Application.GetRealWidth(311),
+                        Height = 1,
+                        BackgroundColor = CSS.CSS_Color.viewLine,
+                    };
+                    funControlRow.AddChidren(line1Btn);
+                    if (j == a - 1)
+                    {
+                        //鏈�鍚庢敼鍙樹竴涓嚎鐨勯鑹�
+                        line1Btn.BackgroundColor = CSS.CSS_Color.viewTranslucence;
+                        funControlRow.LineColor = CSS.CSS_Color.viewTranslucence;
+                    }
+                    delBtn.MouseUpEventHandler += (sender,e) => {
+
+
+                    };
+                }
+
+               
+
+            }
+
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs
new file mode 100644
index 0000000..0c7d14f
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs
@@ -0,0 +1,101 @@
+锘縰sing System;
+using HDL_ON.DAL.Server;
+using Shared;
+
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
+{
+    public class Method
+    {
+        /// <summary>
+        /// 娣诲姞閬ユ帶鍣ㄧ殑鏂规硶
+        /// </summary>
+        public void AddControl()
+        {
+            View.TipView tipView = new View.TipView();
+            tipView.InputBox("", (s, dialog) =>
+            {
+                ///娓呴櫎涔嬪墠鍒楄〃鏁版嵁
+                Pir.BuottonList.Clear();
+                if (!string.IsNullOrEmpty(s))
+                {
+                    Control control = new Control();
+                    control.name = s;
+                    control.type = "learn";
+
+                    ThreadAddControl(control,dialog);
+
+
+
+                }
+            },false);
+
+        }
+        /// <summary>
+        /// 鍙戦�侀仴鎺у櫒鍛戒护鏂规硶
+        /// </summary>
+        /// <param name="control"></param>
+        /// <param name="dialog"></param>
+        public void ThreadAddControl(Control control, Dialog dialog) {
+
+            DAL.Server.ResponsePackNew responsePackNew = null;
+            Loading loading = new Loading();
+            dialog.AddChidren(loading);
+            loading.Start();
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    responsePackNew = PirSend.Add(control);
+                }
+                catch { }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loading.Hide();
+                        //if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
+                        //{
+                            ///杩欓噷锛氱洃鍚琈TTP鎺ㄩ�佷笅鏉ヤ富棰橈紝鎵嶇煡閬撴槸鍚︽坊鍔犳垚鍔�
+                            dialog.Close();//娣诲姞鎴愬姛鍏抽棴寮圭獥
+                            AddButton addButton = new AddButton();
+                            MainPage.BasePageView.AddChidren(addButton);
+                            addButton.Show(control);
+                            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+
+                            //鐩戝惉Mqtt鎺ㄩ�佷笅鏉ョ姸鎬佺爜鍋氭彁绀�
+                            //View.FailView failView = new View.FailView();
+                            //failView.ShouError((view) => {
+                            //    view.Close();
+                            //    ThreadAddControl(control, dialog);
+                            //});
+                        //}
+                        //else
+                        //{
+                        //    ErrorShow(responsePackNew);
+                        //}
+                    });
+                }
+            })
+            { IsBackground = true }.Start();
+
+        }
+        /// <summary>
+        /// 閿欒鐮佹彁绀�
+        /// </summary>
+        /// <param name="responsePackNew"></param>
+        public  void ErrorShow(ResponsePackNew responsePackNew)
+        {
+
+            if (responsePackNew != null && responsePackNew.Code == "14005")
+            {
+                new Intelligence.Automation.LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.gatewayNotOnline));
+
+            }
+            else
+            {
+                new Intelligence.Automation.LogicView.TipPopView().FlashingBox(Language.StringByID(StringId.saveFail));
+
+            }
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Pir.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Pir.cs
new file mode 100644
index 0000000..23d3c91
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Pir.cs
@@ -0,0 +1,48 @@
+锘縰sing System;
+using System.Collections.Generic;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
+{
+    public class Pir
+    {
+        /// <summary>
+        /// 娣诲姞鎸夐敭鍒楄〃
+        /// </summary>
+        public static List<ButtonObj> BuottonList = new List<ButtonObj>();
+
+    }
+    public class ButtonObj
+    {
+        public string Key = string.Empty;
+        /// <summary>
+        /// #app 鏄剧ず鐨勬枃瀛�
+        /// </summary>
+        public string value = string.Empty;
+    }
+    public class Control
+    {
+        /// <summary>
+        /// 绾㈠瀹濊澶嘔d
+        /// </summary>
+        public string deviceId = "0";
+        /// <summary>
+        /// 绾㈠閬ユ帶鍣ㄥ悕绉�
+        /// </summary>
+        public string name = "0";
+        /// <summary>
+        /// 绾㈠閬ユ帶鍣╯pk
+        /// </summary>
+        public string spk = "ir.module";
+        /// <summary>
+        /// library=搴撶被鍨�, learn=涓嶉渶瑕侀澶栬拷鍔犲睘鎬�
+        /// </summary>
+        public string type = "learn";
+        /// <summary>
+        /// 鐮佺粍鍙�
+        /// </summary>
+        public string group_id = "12";
+        /// <summary>
+        /// 绾㈠鐮�
+        /// </summary>
+        public List<string> library = new List<string>();
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMain.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMain.cs
new file mode 100644
index 0000000..9da222a
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirMain.cs
@@ -0,0 +1,339 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
+{
+    public class PirMain : FrameLayout
+    {
+        public PirMain()
+        {
+            Tag = "PirView";
+        }
+        public void Show()
+        {
+            #region 鐣岄潰甯冨眬
+            this.BackgroundColor = CSS.CSS_Color.viewMiddle;
+            PirDevice.View.TopView topView = new View.TopView();
+            topView.topNameBtn.TextID = StringId.hongwaiyaokong;
+            this.AddChidren(topView.FLayoutView());
+            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); };
+            FrameLayout middFLayout = new FrameLayout();
+            middFLayout.Y = Application.GetRealHeight(64);
+            middFLayout.Height = Application.GetRealHeight(667 - 64);
+            this.AddChidren(middFLayout);
+
+            FrameLayout pirDeviceFLayout = new FrameLayout();
+            pirDeviceFLayout.Y = Application.GetRealHeight(12);
+            pirDeviceFLayout.X = Application.GetRealWidth(16);
+            pirDeviceFLayout.Width = Application.GetRealWidth(343);
+            pirDeviceFLayout.Height = Application.GetRealHeight(187);
+            pirDeviceFLayout.BackgroundColor = CSS.CSS_Color.view;
+            pirDeviceFLayout.Radius = (uint)Application.GetRealHeight(12);
+            middFLayout.AddChidren(pirDeviceFLayout);
+
+            //璁惧绠$悊
+            Button text1Btn = new Button
+            {
+                Y = Application.GetRealHeight(11),
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(120),
+                Height = Application.GetRealHeight(20),
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.textConfirmColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextID = StringId.shebeigaunli,
+                IsBold=true,
+            };
+            pirDeviceFLayout.AddChidren(text1Btn); 
+
+
+            Button pirIcon = new Button
+            {
+                Y = Application.GetRealHeight(47),
+                X = Application.GetRealWidth(28),
+                Width = Application.GetRealWidth(66),
+                Height = Application.GetRealWidth(66),
+                UnSelectedImagePath = "PirIcon/Infraredtreasure.png",
+            };
+            pirDeviceFLayout.AddChidren(pirIcon);
+
+            //mini鏅鸿兘閬ユ帶鍣�
+            Button text2Btn = new Button
+            {
+                Y = Application.GetRealHeight(70),
+                X = Application.GetRealWidth(112),
+                Width = Application.GetRealWidth(120),
+                Height = Application.GetRealHeight(20),
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.textTipColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = "mini鏅鸿兘閬ユ帶鍣�",
+            };
+            pirDeviceFLayout.AddChidren(text2Btn);
+
+            //
+            Button numberDeviceBtn = new Button
+            {
+                Y = Application.GetRealHeight(137),
+                X = Application.GetRealWidth(32),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealHeight(20),
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.textColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = "1" + Language.StringByID(StringId.ge),
+                IsBold = true,
+            };
+            pirDeviceFLayout.AddChidren(numberDeviceBtn);
+            //褰撳墠绾㈠閬ユ帶璁惧
+            Button numberDeviceTextBtn = new Button
+            {
+                Y = numberDeviceBtn.Bottom + Application.GetRealHeight(4),
+                X = Application.GetRealWidth(32),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealHeight(14),
+                TextSize = TextSize.text10,
+                TextColor = CSS.CSS_Color.textCancelColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextID = StringId.dangqianhongwaishebei,
+            };
+            pirDeviceFLayout.AddChidren(numberDeviceTextBtn);
+            //
+            Button currDeviceNumberControlBtn = new Button
+            {
+                Y = Application.GetRealHeight(137),
+                X = Application.GetRealWidth(198),
+                Width = Application.GetRealWidth(80),
+                Height = Application.GetRealHeight(20),
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.textColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = "1" + Language.StringByID(StringId.ge),
+                IsBold = true,
+            };
+            pirDeviceFLayout.AddChidren(currDeviceNumberControlBtn);
+            //宸叉坊鍔犻仴鎺у櫒
+            Button currDeviceNumberControlTextBtn = new Button
+            {
+                Y = currDeviceNumberControlBtn.Bottom + Application.GetRealHeight(4),
+                X = Application.GetRealWidth(198),
+                Width = Application.GetRealWidth(80),
+                Height = Application.GetRealHeight(14),
+                TextSize = TextSize.text10,
+                TextColor = CSS.CSS_Color.textCancelColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextID = StringId.yitianjiayaokongqi,
+            };
+            pirDeviceFLayout.AddChidren(currDeviceNumberControlTextBtn);
+            ///绾㈠瀹濈偣鍑讳簨浠�
+            FrameLayout clickFLayout = new FrameLayout();
+            pirDeviceFLayout.AddChidren(clickFLayout);
+            clickFLayout.MouseUpEventHandler += (sender,e) => {
+
+                DeviceSet deviceSet = new DeviceSet();
+                MainPage.BasePageView.AddChidren(deviceSet);
+                deviceSet.Show();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
+            FrameLayout deviceListFLayout = new FrameLayout();
+            deviceListFLayout.Y = pirDeviceFLayout.Bottom + Application.GetRealHeight(12);
+            deviceListFLayout.X = Application.GetRealWidth(16);
+            deviceListFLayout.Width = Application.GetRealWidth(343);
+            deviceListFLayout.Height = Application.GetRealHeight(328);
+            deviceListFLayout.BackgroundColor = CSS.CSS_Color.view;
+            deviceListFLayout.Radius = (uint)Application.GetRealHeight(12);
+            middFLayout.AddChidren(deviceListFLayout);
+            ///娣诲姞閬ユ帶鍣�
+            Button text3Btn = new Button
+            {
+                Y = Application.GetRealHeight(11),
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealHeight(20),
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.textConfirmColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextID = StringId.tianjiayaokongqi,
+                IsBold = true,
+            };
+            deviceListFLayout.AddChidren(text3Btn);
+            ///绾㈠瀹濆悕绉�
+            Button deviceNameBtn= new Button
+            {
+                Y = Application.GetRealHeight(13),
+                X = Application.GetRealWidth(161),
+                Width = Application.GetRealWidth(150),
+                Height = Application.GetRealHeight(17),
+                TextSize = TextSize.text12,
+                TextColor = CSS.CSS_Color.textColor,
+                TextAlignment = TextAlignment.CenterRight,
+                Text = "mini鏅鸿兘閬ユ帶鍣�",
+            };
+            deviceListFLayout.AddChidren(deviceNameBtn);
+
+            //涓嬫媺鍥炬爣
+            var dropdownIconBtn = new Button
+            {
+                Y = Application.GetRealHeight(13),
+                X = Application.GetRealWidth(343-8-16),
+                Width = Application.GetRealWidth(16),
+                Height = Application.GetRealWidth(16),
+                UnSelectedImagePath = "PirIcon/dropdown.png",
+            };
+            deviceListFLayout.AddChidren(dropdownIconBtn);
+
+            #endregion
+            int line = 0;
+            for (int i = 1, j = 0; i <= 7; i++, j++)
+            {
+                var currpirdeviceFLayout = new FrameLayout
+                {
+                    Width = Application.GetRealWidth(80),
+                    Height = Application.GetRealWidth(80),
+                    X = Application.GetRealWidth(26 + (80 + 25) * j),
+                    Y = Application.GetRealHeight(52 + (80 + 12) * line),
+
+                };
+                deviceListFLayout.AddChidren(currpirdeviceFLayout);
+                var deviceIconBtn = new Button
+                {
+                    Y = Application.GetRealHeight(8),
+                    X = Application.GetRealWidth(20),
+                    Width = Application.GetRealWidth(40),
+                    Height = Application.GetRealWidth(40),
+                    UnSelectedImagePath = "PirIcon/Infraredtreasure.png",
+                };
+                currpirdeviceFLayout.AddChidren(deviceIconBtn);
+                var iconNameBtn = new Button  
+                {
+                    Y = deviceIconBtn.Bottom+Application.GetRealHeight(8),
+                    Width = Application.GetRealWidth(80),
+                    Height = Application.GetRealHeight(17),
+                    TextSize = TextSize.text12,
+                    TextColor = CSS.CSS_Color.TextualColor,
+                    TextAlignment = TextAlignment.Center,
+                };
+                currpirdeviceFLayout.AddChidren(iconNameBtn);
+                var clickBtn = new Button { Tag = i };
+                currpirdeviceFLayout.AddChidren(clickBtn);
+                if (i % 3 == 0)
+                {
+                    //婊′竴琛岄噸缃甹=0鍊�;
+                    j = -1;
+                    line += 1;
+                }
+                GetIconAndText(i, deviceIconBtn, iconNameBtn);
+                clickBtn.MouseUpEventHandler += (sender, e) =>
+                {
+                    //1=绌鸿皟;2=鐢佃;3=椋庢墖;4=鏈洪《鐩�;5=DVD/EVD/VCD;6=鎶曞奖浠�;7=鑷畾涔�;
+                    int if_value =int.Parse(clickBtn.Tag.ToString());
+                    var list11 = new List<string> {
+                       "鐖变綘", "鍝庡懄","鍩冨強","鍝堝紬鎹㈠3鍝堝紬", "鐖卞痉鍗庡v","淇哄嚑涓柉浜�",
+                        "鎷滀簡", "宸村+", "鐧惧か",  "鐧惧悎鍦扮悊璇句綘鎵撶畻", "涓嶅害鑰侀浼忔灔", "姣斿埌涔濈偣",
+                        "杞︾珯","娴嬭瘯","姝ゅ湴", "鎵嶇湅瑙佸ソ寰楀揩","鍚冭蒋楗�","浠庣湅瑙佷簩鍗佸",
+                       "绛夊緟鏈轰細鍚�","鐨勫鎴�", "澶氬枬鐐�", "鐧昏鍝︾劧鍚�", "鎵撶數璇�",
+                         "鎭╄偆闇滅湅灏辩湅浜�", "楗挎os","鎭堕瓟鍩�","鍎跨鑱斿姩", "鎭╁叚棰楀瓙寮规媺鎷夎¥娲楁尽浜�","鍙戝ぇ瀛︾敓鍙戝彂",
+                        "鐪熷帀瀹砳鍙戝灏�", "鐭ラ亾浣犱粯娆句簡鍙�", "灏厭鍥炲",  "鏀硅繘鐨勮瘽", "澶╁ぉ閫熷害鍥炵瓟", "澶ソ浜嗗紑杞�",
+                        "鍑忚偉鐨勭湅杩�","妗″嚭鍙e閭�","濡傛灉瑙夊緱", "寰堣垝鏈嶇殑","鍚冭蒋楗�","浠庣湅瑙佷簩鍗佸",
+                       "榫欏嵎椋庝簭澶у彂","鍘诲ソ鐪�", "澶氬枬鐐�", "濂芥氮璐瑰ソ", "鎵撶數璇�"};
+                    System.Threading.Tasks.Task.Run(() =>
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            switch (if_value)
+                            {
+                                case 1:
+                                    {
+                                    }
+                                    break;
+                                case 2:
+                                    {
+                                    }
+                                    break;
+                                case 3:
+                                    {
+                                    }
+                                    break;
+                                case 4:
+                                    {
+                                    }
+                                    break;
+                                case 5:
+                                    {
+                                    }
+                                    break;
+                                case 6:
+                                    {
+                                    }
+                                    break;
+                                case 7:
+                                    {
+                                        Method method = new Method();
+                                        method.AddControl();
+                                       
+                                    }
+                                    break;
+
+                            }
+                            
+
+                            //BrandList brandList = new BrandList();
+                            //MainPage.BasePageView.AddChidren(brandList);
+                            //brandList.Show(list11, null);
+                            //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                        });
+                    });
+                };
+
+            }
+
+        }
+        /// <summary>
+        /// 璁剧疆鍥剧墖鍜屽娉�
+        /// </summary>
+        /// <param name="index">绱㈠紩鍊�</param>
+        /// <param name="deviceIconBtn">鍥炬爣Btn</param>
+        /// <param name="deviceNameBtn">璁惧澶囨敞Btn</param>
+        private void GetIconAndText(int index,Button deviceIconBtn, Button deviceNameBtn) {
+            string iconPath = "";  
+            int deviceNameIndex=0;
+            switch (index)
+            {
+                case 1: {
+                        iconPath = "PirIcon/air.png";
+                        deviceNameIndex = StringId.kongtiao;
+                    } break;
+                case 2: {
+                        iconPath = "PirIcon/tv.png";
+                        deviceNameIndex = StringId.dianshi;
+                    } break;
+                case 3: {
+                        iconPath = "PirIcon/fan.png";
+                        deviceNameIndex = StringId.fengshan;
+                    } break;
+                case 4: {
+                        iconPath = "PirIcon/stb.png";
+                        deviceNameIndex = StringId.jidinghe;
+                    } break;
+                case 5: {
+                        iconPath = "PirIcon/dvd.png";
+                        deviceNameIndex = StringId.dvd;
+                    } break;
+                case 6: {
+                        iconPath = "PirIcon/projector.png";
+                        deviceNameIndex = StringId.touyingyi;
+                    } break;
+                case 7: {
+                        iconPath = "PirIcon/custom.png";
+                        deviceNameIndex = StringId.zidingyi;
+                    } break;
+
+            }
+            deviceIconBtn.UnSelectedImagePath = iconPath;
+            deviceNameBtn.TextID = deviceNameIndex;
+        }
+        
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs
new file mode 100644
index 0000000..abb0874
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs
@@ -0,0 +1,175 @@
+锘縰sing System;
+using System.IO;
+using System.Net;
+using HDL_ON.DAL.Server;
+using Newtonsoft.Json.Linq;
+using System.Collections.Generic;
+using Shared;
+
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
+{
+
+    public class PirSend
+    {
+        /// <summary>
+        /// 浣忓畢ID
+        /// </summary>
+        public static string HomeId
+        {
+            get
+            {
+                return Entity.DB_ResidenceData.Instance.CurrentRegion.RegionID;
+            }
+        }
+        /// <summary>
+        /// 鏄惁涓哄叾浠栦富鐢ㄦ埛鍒嗕韩杩囨潵鐨勪綇瀹�
+        /// </summary>
+        public static bool IsOthreShare
+        {
+            get
+            {
+                return Entity.DB_ResidenceData.Instance.CurrentRegion.IsOthreShare;
+            }
+        }
+        /// <summary>
+        /// 閬ユ帶鍣ㄦ坊鍔�
+        /// </summary>
+        /// <returns></returns>
+        public static ResponsePackNew Add(Control control)
+        {
+            var jObject = new JObject { }; 
+            jObject.Add("homeId", HomeId);
+            jObject.Add("deviceId", control.deviceId);
+            jObject.Add("name", control.name);
+            jObject.Add("spk", "ir.module");
+            jObject.Add("type", control.type);
+            if (control.type == "library")
+            {
+                //jObject.Add("group_id", "123");
+                var libraryjay = new JArray { };
+                for (int i = 0; i < control.library.Count; i++)
+                {
+                    libraryjay.Add(control.library[i]);
+                }
+                jObject.Add("library", libraryjay);
+            }
+            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Ir_Add);
+            return responsePackNew;
+        }
+        /// <summary>
+        /// 绾㈠鐮佸涔�
+        /// </summary>
+        /// <returns></returns>
+        public static void CodeStudy(ButtonObj buttonObj, Action<ResponsePackNew> action)
+        {
+            //var whichDayJson = jay["whichDay"].ToString();
+            //var whichDayAry = Newtonsoft.Json.Linq.JArray.Parse(whichDayJson);
+            //for (int b = 0; b < whichDayAry.Count; b++)
+            //{
+            //    var days = whichDayAry[b].ToString();
+            //    timer.whichDay.Add(int.Parse(days));
+            //}
+            var job = new JObject { };
+            job.Add("key", buttonObj.Key);
+            job.Add("data_type", "string");
+            var valuejArray = new JArray { };
+            valuejArray.Add(buttonObj.value);
+            job.Add("value", valuejArray);
+            var jArray = new JArray { };
+            jArray.Add(job);
+            var jObject = new JObject { { "homeId", HomeId }, { "deviceId", "0" }, { "attributes", jArray } };
+            ResponsePackNew responsePackNew = null;
+            new System.Threading.Thread(() =>
+            {
+
+                try
+                {
+                    //鍙戦�佺孩澶栫爜瀛︿範鍛戒护
+                    responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Ir_CodeStudy);
+                }
+                catch { }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        action(responsePackNew);
+                    });
+                }
+
+            })
+            { IsBackground = true }.Start();
+        }
+        /// <summary>
+        /// 鑷鎸夐敭鍒犻櫎
+        /// </summary>
+        /// <returns></returns>
+        public static ResponsePackNew CodeRemove(ButtonObj buttonObj)
+        {
+            var job = new JObject { };
+            job.Add("key", buttonObj.Key);
+            job.Add("data_type", "string");
+            var valuejArray = new JArray { };
+            valuejArray.Add(buttonObj.value);
+            job.Add("value", valuejArray);
+            var jArray = new JArray { };
+            jArray.Add(job);
+            var jObject = new JObject { { "homeId", HomeId }, { "deviceId", "0" }, { "attributes", jArray } };
+            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Ir_CodeRemove);
+            return responsePackNew;
+        }
+        /// <summary>
+        /// 鑾峰彇閫昏緫
+        /// </summary>
+        /// <param name="listIdList">閫昏緫ID鍒楄〃</param>
+        /// <returns></returns>
+        public static ResponsePackNew GetLogic(List<string> listIdList)
+        {
+            var jArray = new JArray { };
+            for (int i = 0; i < listIdList.Count; i++)
+            {
+                jArray.Add(listIdList[i]);
+            }
+            var jObject = new JObject { { "userLogicIds", jArray } };
+            var responsePackNew = RequestServerhomeId(jObject, NewAPI.API_POST_Logic_Info);
+            //濡傛灉鏄痶oken杩囨湡鍒欏埛鏂皌oken
+            if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
+            {
+                RefreshToken();
+                GetLogic(listIdList);
+            }
+            return responsePackNew;
+        }
+
+       
+
+        /// <summary>
+        ///璇锋眰鏈嶅姟鍣紙涓庝綇瀹呮湁鍏�:渚嬪锛沨omeId锛� 
+        /// </summary>
+        /// <returns></returns>
+        public static ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 20)
+        {
+            var requestJson = HttpUtil.GetSignRequestJson(o);
+            return HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
+
+        }
+        /// <summary>
+        /// 璇锋眰鏈嶅姟鍣�
+        /// </summary>
+        /// <returns></returns>
+        public static ResponsePackNew RequestServer(object o, string api_Url)
+        {
+            var requestJson = HttpUtil.GetSignRequestJson(o);
+            return HttpUtil.RequestHttpsPost(api_Url, requestJson);
+
+        }
+        /// <summary>
+        /// 鍒锋柊Token
+        /// </summary>
+        public static void RefreshToken()
+        {
+            IMessageCommon.Current.StartRefreshToken();
+        }
+
+    }
+
+}
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/EmptyClass.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/BrandListView.cs
similarity index 90%
rename from HDL_ON/UI/UI2/3-Intelligence/Automation/EmptyClass.cs
rename to HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/BrandListView.cs
index 2293a25..1d0bfe1 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/EmptyClass.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/BrandListView.cs
@@ -4,9 +4,9 @@
 using System.Collections.Generic;
 using System.Text;
 
-namespace HDL_ON.UI.UI2.Intelligence.Automation
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
 {
-    public class EmptyClass : FrameLayout
+    public class BrandListView : FrameLayout
     {
         /// <summary>
         /// 
@@ -14,10 +14,8 @@
         /// <param name="list">琛ㄧず璇ュ垪琛ㄥ厓绱燗-Z瀛楁瘝绛涢�夋樉绀哄嚭鏉�</param>
         /// <param name="list6">琛ㄧず璇ュ垪琛ㄥ厓绱犳樉绀哄湪list鍓嶉潰(璇ュ垪琛ㄥ厓绱犱笉鍋欰-Z瀛楁瘝绛涢��),娌℃湁鍙互涓簂ist6=null</param>
         /// <param name="action">杩斿洖閫変腑鏂囨湰</param>
-        public void Show(List<string> list, List<string> list6, Action<string> action) 
+        public void Show(List<string> list, List<string> list6, Action<string> action)
         {
-
-
             //string text = "30";
             //byte[] bytes = new byte[text.Length / 2];
             //for (int i = 0, j = 0; i < bytes.Length; j += 2, i++)
@@ -27,8 +25,6 @@
             //}
             ////鎶奲yte鏁扮粍杞崲鎴愭枃瀛�
             //string str = System.Text.Encoding.UTF8.GetString(bytes);
-
-
             var frameLayout = new FrameLayout
             {
                 BackgroundColor = CSS.CSS_Color.viewTop,
@@ -59,7 +55,14 @@
                 UnSelectedImagePath = "LogicIcon/back.png",
             };
             frameLayout.AddChidren(backBtn);
-            backBtn.MouseUpEventHandler += (sen, e) =>
+            var clickBackBtn = new Button
+            {
+                Width = Application.GetRealWidth(12 + 16 + 20),
+                Height = Application.GetRealWidth(20 + 20),
+                Y = Application.GetRealHeight(32),
+            };
+            frameLayout.AddChidren(clickBackBtn);
+            clickBackBtn.MouseUpEventHandler += (sen, e) =>
             {
                 this.RemoveFromParent();
             };
@@ -86,16 +89,6 @@
             };
             this.AddChidren(fram);
 
-
-            //var list11 = new List<string> {
-            //   "鐖变綘", "鍝庡懄","鍩冨強","鍝堝紬鎹㈠3鍝堝紬", "鐖卞痉鍗庡v","淇哄嚑涓柉浜�",
-            //    "鎷滀簡", "宸村+", "鐧惧か",  "鐧惧悎鍦扮悊璇句綘鎵撶畻", "涓嶅害鑰侀浼忔灔", "姣斿埌涔濈偣",
-            //    "杞︾珯","娴嬭瘯","姝ゅ湴", "鎵嶇湅瑙佸ソ寰楀揩","鍚冭蒋楗�","浠庣湅瑙佷簩鍗佸",
-            //   "绛夊緟鏈轰細鍚�","鐨勫鎴�", "澶氬枬鐐�", "鐧昏鍝︾劧鍚�", "鎵撶數璇�",
-            //     "鎭╄偆闇滅湅灏辩湅浜�", "楗挎os","鎭堕瓟鍩�","鍎跨鑱斿姩", "鎭╁叚棰楀瓙寮规媺鎷夎¥娲楁尽浜�","鍙戝ぇ瀛︾敓鍙戝彂",
-            //    "鐪熷帀瀹砳鍙戝灏�", "鐭ラ亾浣犱粯娆句簡鍙�", "灏厭鍥炲",  "鏀硅繘鐨勮瘽", "澶╁ぉ閫熷害鍥炵瓟", "澶ソ浜嗗紑杞�",
-            //    "鍑忚偉鐨勭湅杩�","妗″嚭鍙e閭�","濡傛灉瑙夊緱", "寰堣垝鏈嶇殑","鍚冭蒋楗�","浠庣湅瑙佷簩鍗佸",
-            //   "榫欏嵎椋庝簭澶у彂","鍘诲ソ鐪�", "澶氬枬鐐�", "濂芥氮璐瑰ソ", "鎵撶數璇�"};
             if (list == null)
             {
                 list = new List<string>();
@@ -105,7 +98,6 @@
                 list6 = new List<string>();
             }
             var list1 = GetDateList(list);
-            list1.Add("1");
             list1.InsertRange(0, list6);
 
 
@@ -140,7 +132,7 @@
                 Width = Application.GetRealWidth(10 + 6),
             };
             fram.AddChidren(a_zFra);
-            var list2 = GetList();  
+            var list2 = GetList();
             for (int i = 0; i < list2.Count; i++)
             {
 
@@ -183,7 +175,7 @@
             }
             #endregion
 
-            RefreshLayout(vv, list1,action);
+            RefreshLayout(vv, list1, action);
 
 
 
@@ -195,7 +187,7 @@
         /// </summary>
         /// <param name="vv">鐖舵帶浠�</param>
         /// <param name="list">鏄剧ず鍒楄〃</param>
-        private void RefreshLayout(VerticalScrolViewLayout vv, List<string> list,Action<string> action)
+        private void RefreshLayout(VerticalScrolViewLayout vv, List<string> list, Action<string> action)
         {
             vv.RemoveAll();
             foreach (var str in list)
@@ -236,8 +228,8 @@
                 clickBtn.MouseUpEventHandler += (sen, e) =>
                 {
                     //鎵惧埌绱㈠紩鍊�
-                    var index = list.IndexOf(clickBtn.Tag.ToString());
-
+                    //var index = list.IndexOf();
+                    action(clickBtn.Tag.ToString());
                     this.RemoveFromParent();
                 };
 
@@ -261,7 +253,6 @@
                 return false;
             }
         }
-
         /// <summary>
         /// 鑾峰彇鏄剧ず鍒楄〃
         /// </summary>
@@ -300,7 +291,6 @@
             }
             return list;
         }
-
         /// <summary>
         /// 鑾峰彇A-Z瀛楁瘝鍒楄〃
         /// </summary>
@@ -321,7 +311,6 @@
             }
             return list;
         }
-
         /// <summary>
         /// 鑾峰彇姹夊瓧棣栧瓧姣�
         /// </summary>
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/Buttons.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/Buttons.cs
new file mode 100644
index 0000000..db38adc
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/Buttons.cs
@@ -0,0 +1,102 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
+{
+    public class Buttons
+    {
+        /// <summary>
+        /// 鍔ㄦ�佸姞杞芥寜閽垪琛�
+        /// </summary>
+        /// <param name="buttonFLayout">鐖舵帶浠�</param>
+        /// <param name="buttonList">鏁版嵁鍒楄〃</param>
+        /// <param name="action">鍥炶皟</param>
+        /// <param name="line">琛ㄧず澶氬皯琛�</param>
+        /// <param name="line">琛ㄧず涓�琛屽姞杞藉灏戜釜鎸夐挳</param>
+        public void AddButton(FrameLayout buttonFLayout, List<string> buttonList, Action<string> action, int line = 7, int sum = 3)
+        {
+            VerticalScrolViewLayout vv = new VerticalScrolViewLayout();
+            buttonFLayout.AddChidren(vv);
+            for (int i = 0; i < line; i++)
+            {
+                var currFLayout = new FrameLayout { Height = Application.GetRealHeight(16 + 44) };
+                vv.AddChidren(currFLayout);
+                for (int a = i * sum + 1, b = 0; a <= buttonList.Count; a++, b++)
+                {
+                    var name = buttonList[a - 1];
+                    var nameBtn = new Button
+                    {
+                        Y = Application.GetRealHeight(16),
+                        X = Application.GetRealWidth(24 + (98 + 16) * b),
+                        // Gravity=Gravity.CenterVertical,
+                        Width = Application.GetRealWidth(98),
+                        Height = Application.GetRealHeight(44),
+                        Text = name,
+                        TextSize = TextSize.text16,
+                        TextColor = CSS.CSS_Color.textColor,
+                        TextAlignment = TextAlignment.Center,
+                        Radius = (uint)Application.GetRealHeight(8),
+                        BorderWidth = 1,
+                        BorderColor = CSS.CSS_Color.textCancelColor,
+                    };
+                    currFLayout.AddChidren(nameBtn);
+                    nameBtn.MouseUpEventHandler += (sender, e) =>
+                    {
+                        action(nameBtn.Text);
+                    };
+                    if (a % sum == 0)
+                    {
+                        break;
+                    }
+                }
+                if (i == line - 1)
+                {
+                    //鏈�鍚庝竴涓厓绱犲悗闈㈠姞涓�涓�20楂樺害闂撮殧
+                    vv.AddChidren(new FrameLayout { Height = Application.GetRealHeight(20) });
+                }
+            }
+
+        }
+        /// <summary>
+        /// 鑾峰彇鍒楄〃
+        /// </summary>
+        /// <param name="tag">鏍囪鍊�</param>
+        /// <returns></returns>
+        public List<string> GetList(string tag)
+        {
+            List<string> list = new List<string>();
+            switch (tag)
+            {
+                case "榛樿鎸夐挳":
+                    {
+                        list.Add(Language.StringByID(StringId.dianyuan));
+                        list.Add(Language.StringByID(StringId.yinliangjia));
+                        list.Add(Language.StringByID(StringId.yinliangjian));
+                        list.Add(Language.StringByID(StringId.pindaojia));
+                        list.Add(Language.StringByID(StringId.pindaojian));
+                        list.Add(Language.StringByID(StringId.shang));
+                        list.Add(Language.StringByID(StringId.xia));
+                        list.Add(Language.StringByID(StringId.zuo));
+                        list.Add(Language.StringByID(StringId.you));
+                        list.Add(Language.StringByID(StringId.jingyin));
+                        list.Add(Language.StringByID(StringId.queren));
+                        list.Add(Language.StringByID(StringId.bofang));
+                        list.Add(Language.StringByID(StringId.xiayibu));
+                        list.Add(Language.StringByID(StringId.tuichu));
+                        list.Add(Language.StringByID(StringId.caidan));
+                        list.Add(Language.StringByID(StringId.zanting));
+                        list.Add(Language.StringByID(StringId.fanhui));
+                        list.Add(Language.StringByID(StringId.tingzhi));
+                        list.Add(Language.StringByID(StringId.zhuye));
+                        list.Add(Language.StringByID(StringId.kuaijin));
+                        list.Add(Language.StringByID(StringId.kuaitui));
+                        list.Add(Language.StringByID(StringId.dingshi));
+
+                    }
+                    break;
+            }
+            return list;
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/FailView.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/FailView.cs
new file mode 100644
index 0000000..f224e9d
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/FailView.cs
@@ -0,0 +1,65 @@
+锘縰sing System;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
+{
+    public class FailView
+    {
+        public void ShouError(Action<Dialog> action)
+        {
+            Dialog dialog = new Dialog();
+            #region 鐣岄潰甯冨眬
+            dialog.BackgroundColor = CSS.CSS_Color.viewMiddle;
+            PirDevice.View.TopView topView = new View.TopView();
+            topView.topNameBtn.TextID = StringId.tianjiayaokongqi;
+            dialog.AddChidren(topView.FLayoutView());
+            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { dialog.Close(); };
+
+            FrameLayout fLayout = new FrameLayout
+            {
+                Y = Application.GetRealHeight(64),
+                BackgroundColor = CSS.CSS_Color.textWhiteColor,
+                Height = Application.GetRealHeight(667-64),
+                Width = Application.GetRealWidth(375),
+            };
+            dialog.AddChidren(fLayout);
+
+            //鍥炬爣
+            Button iconBtn = new Button
+            {
+                Y = Application.GetRealHeight(106),
+                X = Application.GetRealWidth(98),
+                Width = Application.GetRealWidth(180),
+                Height = Application.GetRealWidth(180),
+                UnSelectedImagePath = "PirIcon/failed.png",
+            };
+            fLayout.AddChidren(iconBtn);
+
+            //娣诲姞澶辫触
+            Button text1Btn = new Button
+            {
+                Width = Application.GetRealWidth(375 - 32),
+                Height = Application.GetRealHeight(22),
+                Y = Application.GetRealHeight(302),
+                X = Application.GetRealWidth(16),
+                TextID = StringId.tianjiashibai,
+                TextSize = TextSize.text16,
+                TextColor = CSS.CSS_Color.textRedColor,
+                TextAlignment = TextAlignment.Center,
+            };
+            fLayout.AddChidren(text1Btn);
+            //閲嶈瘯
+            View.SaveView saveView = new View.SaveView();
+            dialog.AddChidren(saveView.FLayoutView());
+            saveView.btnSave.TextID = StringId.chongshii;
+            saveView.frameLayout.BackgroundColor = CSS.CSS_Color.viewLine;
+            saveView.frameLayout.SetCornerWithSameRadius(Application.GetRealHeight(24), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
+            dialog.Show();
+            saveView.btnClick.MouseUpEventHandler += (sender,e) => {
+                action(dialog);
+            };
+            #endregion
+
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/PatchView.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/PatchView.cs
new file mode 100644
index 0000000..48f3c25
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/PatchView.cs
@@ -0,0 +1,96 @@
+锘縰sing System;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
+{
+
+    public class PatchView
+    {
+        /// <summary>
+        /// 涓绘帶浠禫iew
+        /// </summary>
+        public FrameLayout frameLayout = new FrameLayout
+        {
+            Height = Application.GetRealHeight(44),
+            BackgroundColor = CSS.CSS_Color.textWhiteColor,
+        };
+
+        /// <summary>
+        /// 鏂囨湰鎻忚堪1
+        /// </summary>
+        public Button btnText1 = new Button
+        {
+            X = Application.GetRealWidth(16),
+            Width = Application.GetRealWidth(300),
+            Height = Application.GetRealHeight(20),
+            TextColor = CSS.CSS_Color.textColor,
+            TextSize = TextSize.text14,
+            Gravity = Gravity.CenterVertical,
+            TextAlignment = TextAlignment.CenterLeft,
+        };
+
+        /// <summary>
+        /// 鏂囨湰鎻忚堪2
+        /// </summary>
+        public Button btnText2 = new Button
+        {
+            X = Application.GetRealWidth(375 - 40 - 150),
+            Width = Application.GetRealWidth(150),
+            Height = Application.GetRealHeight(20),
+            TextColor = CSS.CSS_Color.textTipColor,
+            TextSize = TextSize.text14,
+            Gravity = Gravity.CenterVertical,
+            TextAlignment = TextAlignment.CenterRight,
+        };
+        /// <summary>
+        /// 鍥炬爣
+        /// </summary> 
+        public Button btnNextIcon = new Button
+        {
+            Width = Application.GetRealWidth(16),
+            Height = Application.GetRealWidth(16),
+            UnSelectedImagePath = "PirIcon/next.png",
+            X = Application.GetRealWidth(343),
+            Gravity = Gravity.CenterVertical,
+        };
+
+        /// <summary>
+        /// 绾�
+        /// </summary>
+        public Button btnLine = new Button
+        {
+            Width = Application.GetRealWidth(343),
+            X = Application.GetRealWidth(16),
+            Height = 1,
+            BackgroundColor = CSS.CSS_Color.viewLine,
+
+        };
+
+        public Button btnClick = new Button
+        {
+            Height = Application.GetRealHeight(44),
+        };
+        /// <summary>
+        /// View鐨勬柟娉�
+        /// </summary>
+        /// <returns></returns>
+        public FrameLayout FLayoutView(bool if_bool = true)
+        {
+            frameLayout.AddChidren(btnText1);
+            frameLayout.AddChidren(btnText2);
+            if (if_bool)
+            {
+                btnText2.X = Application.GetRealWidth(375 - 40 - 150);
+                frameLayout.AddChidren(btnNextIcon);
+            }
+            else
+            {
+                btnText2.X = Application.GetRealWidth(375 - 16 - 150);
+            }
+            btnLine.Y = frameLayout.Height - 1;
+            frameLayout.AddChidren(btnLine);
+            frameLayout.AddChidren(btnClick);
+            return frameLayout;
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/ReplicationView.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/ReplicationView.cs
new file mode 100644
index 0000000..fbebc91
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/ReplicationView.cs
@@ -0,0 +1,69 @@
+锘縰sing System;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+using System.Collections.Generic;
+using System.Text;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
+{
+    public class ReplicationView
+    {
+        Dialog dialog = new Dialog();
+        /// <summary>
+        /// 
+        /// </summary>
+        public void Show()
+        {
+            #region 鐣岄潰甯冨眬
+            dialog.BackgroundColor = CSS.CSS_Color.viewMiddle;
+            PirDevice.View.TopView topView = new View.TopView();
+            topView.topNameBtn.TextID = StringId.fuzhiyaokonggongnneg;
+            dialog.AddChidren(topView.FLayoutView());
+            topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { dialog.Close();};
+            FrameLayout frameLayout = new FrameLayout();
+            frameLayout.Height = Application.GetRealHeight(667 - 64);
+            frameLayout.Y = Application.GetRealHeight(64);
+           // frameLayout.BackgroundColor = CSS.CSS_Color.textWhiteColor;
+            dialog.AddChidren(frameLayout);
+            var textBtn = new Button
+            {
+                Y = Application.GetRealHeight(24),
+                X = Application.GetRealWidth(10),
+                Width = Application.GetRealWidth(375 - 20),
+                Height = Application.GetRealHeight(20),
+                TextSize = TextSize.text14,
+                TextColor = CSS.CSS_Color.textColor,
+                TextAlignment = TextAlignment.Center,
+                TextID = StringId.duizhunanxiaanniu,
+            };
+            frameLayout.AddChidren(textBtn);
+
+            var icon1Btn = new Button
+            {
+                Y = Application.GetRealHeight(91),
+                X = Application.GetRealWidth((375 - 149) / 2),
+                Width = Application.GetRealWidth(149),
+                Height = Application.GetRealHeight(95),
+                UnSelectedImagePath = "PirIcon/icon1.png",
+            };
+            frameLayout.AddChidren(icon1Btn);
+            var icon2Btn = new Button
+            {
+                Y = Application.GetRealHeight(289),
+                X = Application.GetRealWidth(122),
+                Width = Application.GetRealWidth(182),
+                Height = Application.GetRealHeight(314),
+                UnSelectedImagePath = "PirIcon/icon2.png",
+            };
+            frameLayout.AddChidren(icon2Btn);
+            dialog.Show();
+            #endregion
+
+        }
+        /// <summary>
+        /// 绉婚櫎褰撳墠鐣岄潰
+        /// </summary>
+        public void RemView() {
+            dialog.Close();
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/SaveView.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/SaveView.cs
new file mode 100644
index 0000000..37e24d9
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/SaveView.cs
@@ -0,0 +1,52 @@
+锘縰sing System;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
+{
+    public class SaveView
+    {
+        /// <summary>
+        /// 涓绘帶浠禫iew
+        /// </summary>
+        public FrameLayout frameLayout = new FrameLayout
+        {
+            Y = Application.GetRealHeight(TextSize.view667 - 76),
+            Height = Application.GetRealHeight(76),
+            Width = Application.GetRealWidth(TextSize.view375),
+            Gravity = Gravity.BottomCenter,//缃簳鐨勫睘鎬�
+            BackgroundColor = CSS.CSS_Color.view,
+
+        };
+        /// <summary>
+        /// 淇濆瓨
+        /// </summary>
+        public Button btnSave = new Button
+        {
+            Width = Application.GetRealWidth(220),
+            Height = Application.GetRealHeight(44),
+            Y = Application.GetRealHeight(12),
+            X = Application.GetRealWidth(78),
+            TextID = StringId.save,
+            TextSize = TextSize.text16,
+            TextColor = CSS.CSS_Color.textWhiteColor,
+            TextAlignment = TextAlignment.Center,
+            BackgroundColor = CSS.CSS_Color.btnSaveBackgroundColor,
+            Radius = (uint)Application.GetRealHeight(22),
+
+        };
+        public Button btnClick = new Button
+        {
+            Height = Application.GetRealHeight(76),
+        };
+        /// <summary>
+        /// 淇濆瓨
+        /// </summary>
+        /// <returns></returns>
+        public FrameLayout FLayoutView()
+        {
+            frameLayout.AddChidren(btnSave);
+            frameLayout.AddChidren(btnClick);
+            return frameLayout;
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TipView.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TipView.cs
new file mode 100644
index 0000000..5d70028
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TipView.cs
@@ -0,0 +1,179 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.UI.CSS;
+using HDL_ON.UI.Music;
+using Shared;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
+{
+    public class TipView
+    {
+        /// <summary>
+        /// 澶ф鍦嗚鍊�
+        /// </summary>
+        public int RradiusFrameLayout = 15;
+        /// <summary>
+        /// 灏忔鍦嗚鍊�
+        /// </summary>
+        public int radiusEditFrameLayout = 4;
+
+        /// <summary>
+        /// 杈撳叆妗�
+        /// </summary>
+        /// <param name="confirmAction">鍥炶皟鍑芥暟</param>
+        public void InputBox(string tnputEditTxet, Action<string, Dialog> confirmAction,bool if_bool=true)
+        {
+            Dialog dialog = new Dialog()
+            {
+                BackgroundColor = MusicColor.PopupBackgroundColor,
+            };
+
+            FrameLayout whiteView = new FrameLayout()
+            {
+                //Gravity = Gravity.Center,
+                X = Application.GetRealWidth(53),
+                Y = Application.GetRealHeight(264),
+                Width = Application.GetRealWidth(270),
+                Height = Application.GetRealHeight(201),
+                BackgroundColor = MusicColor.WhiteColor,
+                BorderColor = 0x00000000,
+                BorderWidth = 0,
+                Radius = (uint)Application.GetRealHeight(RradiusFrameLayout),
+            };
+            dialog.AddChidren(whiteView);
+
+            Button btnTitle = new Button()
+            {
+                Y = Application.GetRealHeight(20),
+                X = Application.GetRealWidth(35),
+                Height = Application.GetRealHeight(22),
+                Width = Application.GetRealWidth(200),
+                TextColor = MusicColor.SelectedColor,
+                TextSize = TextSize.Text16,
+                TextAlignment = TextAlignment.Center,
+                TextID = StringId.shuruyaokongqimingcheng,
+
+            };
+            whiteView.AddChidren(btnTitle);
+
+            FrameLayout editBjView = new FrameLayout()
+            {
+                // Gravity = Gravity.CenterHorizontal,
+                Y = btnTitle.Bottom + Application.GetRealHeight(16),
+                X = Application.GetRealWidth(24),
+                Width = Application.GetRealWidth(222),
+                Height = Application.GetRealHeight(40),
+                BackgroundColor = MusicColor.ViewColor,
+                BorderColor = 0x00000000,
+                BorderWidth = 0,
+                Radius = (uint)Application.GetMinRealAverage(radiusEditFrameLayout),
+            };
+            whiteView.AddChidren(editBjView);
+
+            EditText editText = new EditText()
+            {
+                X = Application.GetRealWidth(12),
+                Y = Application.GetRealHeight(10),
+                Width = Application.GetRealWidth(160),
+                Height = Application.GetRealHeight(20),
+                Text = tnputEditTxet,
+                TextColor = MusicColor.TextColor,
+                TextSize = TextSize.Text14,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            editBjView.AddChidren(editText);
+
+            Button clearIconBtn = new Button
+            {
+                X = Application.GetRealWidth(194),
+                Y = Application.GetRealHeight(8),
+                Width = Application.GetRealWidth(24),
+                Height = Application.GetRealWidth(24),
+                UnSelectedImagePath = "MusicIcon/clear.png",
+            };
+            editBjView.AddChidren(clearIconBtn);
+            clearIconBtn.MouseUpEventHandler += (sender, e) =>
+            {
+                editText.Text = "";
+            };
+
+
+            Button btnTipText = new Button
+            {
+                X = Application.GetRealWidth(24),
+                Y = editBjView.Bottom + Application.GetRealHeight(12),
+                Width = Application.GetRealWidth(211),
+                Height = Application.GetRealHeight(35),
+                Text = Language.StringByID(StringId.fengleichazhao).Replace("{\\r\\n}", "\r\n"),
+                IsMoreLines = true,
+                TextColor = MusicColor.MusicNoTxetColor,
+                TextSize = TextSize.Text12,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            whiteView.AddChidren(btnTipText);
+
+             Button btnLine = new Button()
+            {
+                Y = whiteView.Height -Application.GetRealHeight(44 + 1),
+                Height = Application.GetRealHeight(1),
+                BackgroundColor = MusicColor.LineColor,
+            };
+            whiteView.AddChidren(btnLine);
+
+            Button btnCancel = new Button()
+            {
+                Y = btnLine.Bottom,
+                Width = Application.GetRealWidth(135),
+                Height = Application.GetRealHeight(44),
+                TextAlignment = TextAlignment.Center,
+                TextColor = MusicColor.TextCancelColor,
+                TextSize = TextSize.Text16,
+                TextID = StringId.cancelMusic,
+                Gravity = Gravity.BottomLeft,
+            };
+            whiteView.AddChidren(btnCancel);
+            btnCancel.SetCornerWithSameRadius(Application.GetRealHeight(RradiusFrameLayout), HDLUtils.RectCornerBottomLeft);
+
+            Button btnConfirm = new Button()
+            {
+                X = btnCancel.Right,
+                Y = btnLine.Bottom,
+                Width = Application.GetRealWidth(135),
+                Height = Application.GetRealHeight(44),
+                TextAlignment = TextAlignment.Center,
+                TextColor = MusicColor.WhiteColor,
+                IsBold = true,
+                TextSize = TextSize.Text16,
+                TextID = StringId.confirmMusic,
+                BackgroundColor = MusicColor.SelectedColor,
+                Gravity = Gravity.BottomRight,
+            };
+            whiteView.AddChidren(btnConfirm);
+            btnConfirm.SetCornerWithSameRadius(Application.GetRealHeight(RradiusFrameLayout), HDLUtils.RectCornerBottomRight);
+            dialog.Show();
+            btnCancel.MouseUpEventHandler += (sender, e) =>
+            {
+                dialog.Close();
+            };
+
+
+
+            btnConfirm.MouseUpEventHandler += (sender, e) =>
+            {
+                if (string.IsNullOrEmpty(editText.Text.Trim()))
+                {
+                    return;
+                }
+                confirmAction(editText.Text.Trim(), dialog);
+                if (if_bool) {
+                    dialog.Close();
+                }
+            };
+
+        }
+
+
+       
+
+
+    }
+}
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TopView.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TopView.cs
new file mode 100644
index 0000000..65015f8
--- /dev/null
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/View/TopView.cs
@@ -0,0 +1,87 @@
+锘縰sing System;
+using HDL_ON.UI.UI2.Intelligence.Automation.LogicView;
+using Shared;
+namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice.View
+{
+    public class TopView
+    {
+        #region 鏈�涓婇潰閭e潡鎺т欢
+        /// <summary>
+        /// 鏈�涓婇潰鍧梀iew
+        /// </summary>
+        public FrameLayout frameLayout = new FrameLayout
+        {
+            BackgroundColor = CSS.CSS_Color.viewTop,
+            Height = Application.GetRealHeight(64),
+            Width = Application.GetRealWidth(375),
+        };
+        /// <summary>
+        /// 鏍囬Btn
+        /// </summary>
+        public Button topNameBtn = new Button
+        {
+            TextSize = TextSize.text18,
+            TextColor = CSS.CSS_Color.textColor,
+            Width = Application.GetRealWidth(TextSize.view375 - 60 - 60),
+            Height = Application.GetRealHeight(25),
+            Y = Application.GetRealHeight(30),
+            X = Application.GetRealWidth(60)
+        };
+        /// <summary>
+        /// 鍚庨��Btn
+        /// </summary>
+        public Button backBtn = new Button
+        {
+            Width = Application.GetRealWidth(12),
+            Height = Application.GetRealWidth(20),
+            X = Application.GetRealWidth(TextSize.left16),
+            Y = Application.GetRealHeight(32),
+            UnSelectedImagePath = "LogicIcon/back.png",
+
+        };
+        /// <summary>
+        /// 鍥炬爣Btn
+        /// </summary>
+        public Button topIconBtn = new Button 
+        {
+            Y = Application.GetRealHeight(29),
+            X = Application.GetRealWidth(337),
+            Width = Application.GetRealWidth(28),
+            Height = Application.GetRealWidth(28),
+            UnSelectedImagePath = "PirIcon/adddevice.png",
+            Visible = false,
+        };
+        /// <summary>
+        /// 澧炲姞鐑敭澶у皬Btn
+        /// </summary>
+        public Button clickBackBtn = new Button
+        {
+            Width = Application.GetRealWidth(16 + 12 + 16),
+            Height = Application.GetRealHeight(64),
+        };
+        /// <summary>
+        /// 璁剧疆鍥炬爣澧炲姞鐑敭澶у皬
+        /// </summary>
+        public Button clickSetBtn = new Button
+        {
+            X = Application.GetRealWidth(337 - 37),
+            Width = Application.GetRealWidth(28 + 37),
+            Height = Application.GetRealWidth(28 + 7 + 29),
+        };
+        /// <summary>
+        /// 鏈�涓婇潰鐨勯偅鍧楁柟娉�
+        /// </summary>
+        /// <returns></returns>
+        public FrameLayout FLayoutView()
+        {
+            frameLayout.AddChidren(topNameBtn);
+            frameLayout.AddChidren(backBtn);
+            frameLayout.AddChidren(topIconBtn);
+            frameLayout.AddChidren(clickBackBtn);
+            frameLayout.AddChidren(clickSetBtn);
+            return frameLayout;
+        }
+        #endregion
+    }
+}
+
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorDoorWinwsPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorDoorWinwsPage.cs
index e6ae4b0..65c7aa3 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorDoorWinwsPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorDoorWinwsPage.cs
@@ -40,6 +40,12 @@
             this.RefreshNowDeviceStatuMemory(this.device);
             //鍒锋柊鐣岄潰鐘舵��
             this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            new System.Threading.Thread(() =>
+            {
+                DriverLayer.Control.Ins.SendReadCommand(device);
+            })
+            { IsBackground = true }.Start();
         }
 
         /// <summary>
@@ -111,7 +117,7 @@
                 var temp = device.status.Find((sta) => sta.key == FunctionAttributeKey.Status);
                 if (temp != null)
                 {
-                    if (temp.value == "true")
+                    if (temp.value == "open")
                     {
                         btnIcon.IsSelected = true;
                         btnSuctionView.TextID = StringId.Open;
@@ -136,11 +142,27 @@
         /// </summary>
         private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
         {
-            foreach (var data in i_LocalDevice.status)
-            {
-                //寮�鍏�
-                //if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
-            }
+            //foreach (var data in i_LocalDevice.status)
+            //{
+            //    if (data.key == FunctionAttributeKey.Status)
+            //    {
+            //        Application.RunOnMainThread(() =>
+            //        {
+            //            if (data.value.ToLower() == "open")
+            //            {
+            //                this.btnIcon.IsSelected = true;
+            //                this.btnSuctionView.IsSelected = true;
+            //                this.btnSuctionView.TextID = StringId.Open;
+            //            }
+            //            else
+            //            {
+            //                this.btnIcon.IsSelected = false;
+            //                this.btnSuctionView.IsSelected = false;
+            //                this.btnSuctionView.TextID = StringId.Close;
+            //            }
+            //        });
+            //    }
+            //}
         }
 
         #endregion
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorSmokePage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorSmokePage.cs
index b2906df..c1fbef7 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorSmokePage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorSmokePage.cs
@@ -40,6 +40,12 @@
             this.RefreshNowDeviceStatuMemory(this.device);
             //鍒锋柊鐣岄潰鐘舵��
             this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            new System.Threading.Thread(() =>
+            {
+                DriverLayer.Control.Ins.SendReadCommand(device);
+            })
+            { IsBackground = true }.Start();
         }
 
         /// <summary>
@@ -111,7 +117,7 @@
                 var temp = device.status.Find((sta) => sta.key == FunctionAttributeKey.Status);
                 if (temp != null)
                 {
-                    if (temp.value == "true")
+                    if (temp.value == "alarm")
                     {
                         btnIcon.IsSelected = true;
                         btnSuctionView.TextID = StringId.InAlarm;
@@ -136,11 +142,24 @@
         /// </summary>
         private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
         {
-            foreach (var data in i_LocalDevice.status)
-            {
-                //寮�鍏�
-                //if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
-            }
+            //foreach (var data in i_LocalDevice.status)
+            //{
+            //    if (data.key == "status")
+            //    {
+            //        if (data.value.ToLower() == "alarm")
+            //        {
+            //            this.btnIcon.IsSelected = true;
+            //            this.btnSuctionView.IsSelected = true;
+            //            this.btnSuctionView.TextID = StringId.InAlarm;
+            //        }
+            //        else
+            //        {
+            //            this.btnIcon.IsSelected = false;
+            //            this.btnSuctionView.IsSelected = false;
+            //            this.btnSuctionView.TextID = StringId.SensorNormalState;
+            //        }
+            //    }
+            //}
         }
 
         #endregion
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorWaterImmersionPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorWaterImmersionPage.cs
index 9fec246..6c1071e 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorWaterImmersionPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorWaterImmersionPage.cs
@@ -40,6 +40,12 @@
             this.RefreshNowDeviceStatuMemory(this.device);
             //鍒锋柊鐣岄潰鐘舵��
             this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            new System.Threading.Thread(() =>
+            {
+                DriverLayer.Control.Ins.SendReadCommand(device);
+            })
+            { IsBackground = true }.Start();
         }
 
         /// <summary>
@@ -111,7 +117,7 @@
                 var temp = device.status.Find((sta) => sta.key == FunctionAttributeKey.Status);
                 if (temp != null)
                 {
-                    if (temp.value == "true")
+                    if (temp.value == "alarm")
                     {
                         btnIcon.IsSelected = true;
                         btnSuctionView.TextID = StringId.WaterLeakage;
@@ -136,11 +142,21 @@
         /// </summary>
         private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
         {
-            foreach (var data in i_LocalDevice.status)
-            {
-                //寮�鍏�
-                //if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
-            }
+            //foreach (var data in i_LocalDevice.status)
+            //{
+            //    if (data.value.ToLower() == "alarm")
+            //    {
+            //        this.btnIcon.IsSelected = true;
+            //        this.btnSuctionView.IsSelected = true;
+            //        this.btnSuctionView.TextID = StringId.WaterLeakage;
+            //    }
+            //    else
+            //    {
+            //        this.btnIcon.IsSelected = false;
+            //        this.btnSuctionView.IsSelected = false;
+            //        this.btnSuctionView.TextID = StringId.SensorNormalState;
+            //    }
+            //}
         }
 
         #endregion
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs
index 96b2b0f..3e848e6 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/ClothesHangerPage.cs
@@ -1,21 +1,475 @@
-锘縰sing System;
-using Shared;
+锘縰sing Shared;
+using HDL_ON.Stan;
 using HDL_ON.UI.CSS;
+using HDL_ON.Entity;
+using System.Collections.Generic;
+using System;
+using HDL_ON.DriverLayer;
 
 namespace HDL_ON.UI
 {
     /// <summary>
     /// 鏅捐。鏋剁晫闈�
     /// </summary>
-    public class ClothesHangerPage : FrameLayout
+    public class ClothesHangerPage : DeviceFunctionCardCommonForm
     {
-        public ClothesHangerPage()
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鍥炬爣
+        /// </summary>
+        private Button btnIcon = null;
+        /// <summary>
+        /// 涓婂崌
+        /// </summary>
+        Button btnUp;
+        /// <summary>
+        /// 鍋滄
+        /// </summary>
+        Button btnStop;
+        /// <summary>
+        /// 涓嬮檷
+        /// </summary>
+        Button btnDown;
+        /// <summary>
+        /// 鐑樺共鎺т欢
+        /// </summary>
+        ClothesHangerControl hotDryView;
+        /// <summary>
+        /// 椋庡共鎺т欢
+        /// </summary>
+        ClothesHangerControl windDryView;
+        /// <summary>
+        /// 娑堟瘨鎺т欢
+        /// </summary>
+        ClothesHangerControl disinfectView;
+        /// <summary>
+        /// 鐓ф槑鎺т欢
+        /// </summary>
+        ClothesHangerControl lightingView;
+
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public override void InitFrameWhiteContent()
         {
+            base.ShowColltionButton = false;
+            base.SetTitleText(Language.StringByID(StringId.Electric));
+
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent1();
+
+            //鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+            this.RefreshNowDeviceStatuMemory(this.device);
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            new System.Threading.Thread(() =>
+            {
+                Control.Ins.SendReadCommand(device);
+            })
+            { IsBackground = true }.Start();
         }
 
-        public void LoadPage()
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent1()
         {
+            btnIcon = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(85),
+                Width = Application.GetRealWidth(195),
+                Height = Application.GetRealHeight(121),
+                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIcon.png",
+                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerBgIconOn.png",
+            };
+            FrameWhiteCentet1.AddChidren(btnIcon);
 
+            #region 涓婂崌 鍋滄 涓嬮檷
+            btnUp = new Button()
+            {
+                X = Application.GetRealWidth(42),
+                Y = Application.GetRealHeight(236),
+                Width = Application.GetRealWidth(28),
+                Height = Application.GetRealWidth(28),
+                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon.png",
+                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIconOn.png",
+            };
+            FrameWhiteCentet1.AddChidren(btnUp);
+
+            btnStop = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(236),
+                Width = Application.GetRealWidth(28),
+                Height = Application.GetRealWidth(28),
+                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIcon.png",
+                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerStopIconOn.png",
+            };
+            FrameWhiteCentet1.AddChidren(btnStop);
+
+            btnDown = new Button()
+            {
+                X = Application.GetRealWidth(257),
+                Y = Application.GetRealHeight(236),
+                Width = Application.GetRealWidth(28),
+                Height = Application.GetRealWidth(28),
+                UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon.png",
+                SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIconOn.png",
+            };
+            FrameWhiteCentet1.AddChidren(btnDown);
+
+            #endregion
+
+            #region 鑿滃崟
+            var menu = new List<string>() {
+                FunctionAttributeKey.HotDry,
+                FunctionAttributeKey.WindDry,
+                FunctionAttributeKey.Disinfect,
+                FunctionAttributeKey.OnOff
+            };
+
+            int index = 0;
+            List<string> attrs = device.GetAttributes();
+
+            hotDryView = new ClothesHangerControl(
+                            "FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIcon.png",
+                            "FunctionIcon/Electrical/ClothesHanger/ClothesHangerHotDryIconOn.png",
+                            Language.StringByID(StringId.HotDry),
+                            device.GetAttrState(FunctionAttributeKey.HotDryTimeLeft));
+            hotDryView.X = 0;
+            hotDryView.Y = Application.GetRealHeight(304);
+            hotDryView.Width = Application.GetRealWidth(96);
+            hotDryView.Height = Application.GetRealHeight(74);//28 29 14 3
+            if (attrs.Contains(menu[0]))
+            {
+                FrameWhiteCentet1.AddChidren(hotDryView);
+
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
+                    device.SetAttrState(FunctionAttributeKey.HotDry, "true");
+                    Dictionary<string, string> d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.HotDry, "true");
+                    Control.Ins.SendWriteCommand(device, d);
+                };
+                hotDryView.SetThouchEvent(eventHandler);
+
+                index++;
+            }
+
+            windDryView = new ClothesHangerControl(
+                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIcon.png",
+                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerWindDryIconOn.png",
+                                Language.StringByID(StringId.WindDry),
+                                device.GetAttrState(FunctionAttributeKey.WindDryTimeLeft));
+            windDryView.Y = Application.GetRealHeight(304);
+            windDryView.Width = Application.GetRealWidth(96);
+            windDryView.Height = Application.GetRealHeight(74);
+            if (attrs.Contains(menu[1]))
+            {
+                if(index == 1)
+                {
+                    windDryView.Gravity = Gravity.CenterHorizontal;
+                }
+                FrameWhiteCentet1.AddChidren(windDryView);
+
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
+                    device.SetAttrState(FunctionAttributeKey.WindDry, "true");
+                    Dictionary<string, string> d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.WindDry, "true");
+                    Control.Ins.SendWriteCommand(device, d);
+                };
+                windDryView.SetThouchEvent(eventHandler);
+
+                index++;
+            }
+
+            
+
+            disinfectView = new ClothesHangerControl(
+                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIcon.png",
+                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDisinfectIconOn.png",
+                                Language.StringByID(StringId.Disinfect),
+                                device.GetAttrState(FunctionAttributeKey.DisinfectTimeLeft));
+            disinfectView.Y = Application.GetRealHeight(304);
+            disinfectView.Width = Application.GetRealWidth(96);
+            disinfectView.Height = Application.GetRealHeight(74);
+            if (attrs.Contains(menu[2]))
+            {
+                if(index == 1)
+                {
+                    disinfectView.Gravity = Gravity.CenterHorizontal;
+                }
+                else if (index == 2)
+                {
+                    disinfectView.X = Application.GetRealWidth(266 - 33);
+                }
+                FrameWhiteCentet1.AddChidren(disinfectView);
+
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
+                    device.SetAttrState(FunctionAttributeKey.Disinfect, "true");
+                    Dictionary<string, string> d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.Disinfect, "true");
+                    Control.Ins.SendWriteCommand(device, d);
+                };
+                disinfectView.SetThouchEvent(eventHandler);
+
+                index++;
+            }
+
+            lightingView = new ClothesHangerControl(
+                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIcon.png",
+                                "FunctionIcon/Electrical/ClothesHanger/ClothesHangerLightIconOn.png",
+                                Language.StringByID(StringId.Lighting),
+                                "");
+            lightingView.Width = Application.GetRealWidth(96);
+            lightingView.Height = Application.GetRealHeight(74);
+            if (attrs.Contains(menu[3]))
+            {
+                if(index >2)
+                {
+                    lightingView.Y = Application.GetRealHeight(409);
+                }else
+                {
+                    lightingView.Y = Application.GetRealHeight(304);
+                    if (index == 1)
+                    {
+                        lightingView.Gravity = Gravity.CenterHorizontal;
+                    }
+                    else if (index == 2)
+                    {
+                        lightingView.X = Application.GetRealWidth(266 - 33);
+                    }
+                }
+                FrameWhiteCentet1.AddChidren(lightingView);
+
+                EventHandler<MouseEventArgs> eventHandler = (sender, e) => {
+                    string onoff = lightingView.Lighting ? "off" : "on";
+                    device.SetAttrState(FunctionAttributeKey.OnOff, onoff);
+                    Dictionary<string, string> d = new Dictionary<string, string>();
+                    d.Add(FunctionAttributeKey.OnOff, onoff);
+                    Control.Ins.SendWriteCommand(device, d);
+                };
+                lightingView.SetThouchEvent(eventHandler);
+
+                index++;
+            }
+
+            #endregion
         }
+        #endregion
+
+        #region 鈻� 璁惧鐘舵�佸弽棣坃______________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佸弽棣�
+        /// </summary>
+        /// <param name="i_LocalDevice"></param>
+        public override void DeviceStatuPush(Function i_LocalDevice)
+        {
+            //涓嶆槸鍚屼竴涓笢瑗�
+            if (this.device.sid != i_LocalDevice.sid) { return; }
+
+            //鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+            this.RefreshNowDeviceStatuMemory(i_LocalDevice);
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+        }
+
+        #endregion
+
+        #region 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        private void RefreshFormStatu()
+        {
+            Application.RunOnMainThread(() => {
+                btnIcon.IsSelected = true;
+                #region 鐐逛寒鏂囨湰
+                var hotDryTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.HotDry);
+                if (hotDryTemp != null)
+                {
+                    hotDryView.SetViewStatus(hotDryTemp.value == "true");
+                }
+                var windDryTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.WindDry);
+                if (windDryTemp != null)
+                {
+                    windDryView.SetViewStatus(windDryTemp.value == "true");
+                }
+                var disinfectTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.Disinfect);
+                if (disinfectTemp != null)
+                {
+                    disinfectView.SetViewStatus(disinfectTemp.value == "true");
+                }
+                var lightTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.OnOff);
+                if (lightTemp != null)
+                {
+                    lightingView.SetViewStatus(lightTemp.value == "on");
+                }
+                #endregion
+
+                #region 淇敼鏃堕棿
+                var hotDryTimeLeftTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.HotDryTimeLeft);
+                if (hotDryTimeLeftTemp != null)
+                {
+                    hotDryView.ChangeTime(hotDryTimeLeftTemp.value);
+                }
+                var windDryTimeLeftTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.WindDryTimeLeft);
+                if (windDryTimeLeftTemp != null)
+                {
+                    windDryView.ChangeTime(windDryTimeLeftTemp.value);
+                }
+                var disinfectTimeLeftTemp = device.status.Find((sta) => sta.key == FunctionAttributeKey.DisinfectTimeLeft);
+                if (disinfectTimeLeftTemp != null)
+                {
+                    disinfectView.ChangeTime(disinfectTimeLeftTemp.value);
+                }
+                #endregion
+
+
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+        /// </summary>
+        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
+        {
+            foreach (var data in i_LocalDevice.status)
+            {
+                //寮�鍏�
+                //if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
+            }
+        }
+
+        #endregion
+    }
+
+    public class ClothesHangerControl : FrameLayout
+    {
+        private Button btnIcon;
+        private Button btnTitle;
+        private Button btnTime;
+        /// <summary>
+        /// 鎺т欢鏄惁鐐逛寒
+        /// </summary>
+        public bool Lighting = false;
+
+        public ClothesHangerControl(string iconPath1, string iconPath2,string title,string time)
+        {
+            btnIcon = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(28),
+                Height = Application.GetRealWidth(28),
+                UnSelectedImagePath = iconPath1,
+                SelectedImagePath = iconPath2,
+            };
+            this.AddChidren(btnIcon);
+
+            btnTitle = new Button()
+            {
+                Gravity = Gravity.Center,
+                Text = title,
+                Height = Application.GetRealHeight(42),
+                TextColor = CSS_Color.TextualColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            };
+            this.AddChidren(btnTitle);
+
+            btnTime = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = btnTitle.Bottom,
+                Height = Application.GetRealHeight(32),
+                Text = time,
+                TextColor = 0x00000000,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+            };
+            this.AddChidren(btnTime);
+        }
+        /// <summary>
+        /// 淇敼鏄剧ず鏃堕棿
+        /// </summary>
+        /// <param name="newTime"></param>
+        public void ChangeTime (string newTime)
+        {
+            if(newTime == "0")
+            {
+                newTime = "";
+            }
+
+            int time = 0;
+            int.TryParse(newTime, out time);
+            time = time * 60;
+
+            if (countdownThread == null)
+            {
+                countdownThread = new System.Threading.Thread(() => {
+                    while(true)
+                    {
+                        if(time>1)
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                btnTime.Text = new TimeSpan(0, 0, time).ToString();
+                            });
+                            System.Threading.Thread.Sleep(1000);
+                            time--;
+                        }else
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                btnTime.Text = "";
+                            });
+                        }
+                    }
+                }) { IsBackground = true };
+                countdownThread.Start();
+            }
+        }
+
+        public void SetViewStatus(bool state)
+        {
+            btnIcon.IsSelected = btnTitle.IsSelected = btnTime.IsSelected = Lighting = state;
+        }
+
+        public bool GetViewState()
+        {
+            return Lighting;
+        }
+
+        /// <summary>
+        /// 璁剧疆鐐瑰嚮浜嬩欢
+        /// </summary>
+        public void SetThouchEvent(EventHandler<MouseEventArgs> eventHandler)
+        {
+            btnIcon.MouseUpEventHandler = eventHandler;
+            btnTime.MouseUpEventHandler = eventHandler;
+            btnTitle.MouseUpEventHandler = eventHandler;
+        }
+
+        /// <summary>
+        /// 鍊掕鏃剁嚎绋�
+        /// </summary>
+        System.Threading.Thread countdownThread;
     }
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs
index 11f6b3b..f6bf791 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/FanPageBLL.cs
@@ -70,6 +70,7 @@
                     //Control.Send(CommandType_A.write, this.fan);
                     System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                     d.Add("on_off", fan.trait_on_off.curValue.ToString());
+                    d.Add("fan_speed_percent", fan.openLevel.ToString());
                     Control.Ins.SendWriteCommand(fan, d);
                 })
                 { IsBackground = true }.Start();
@@ -84,6 +85,7 @@
                     //Control.Send(CommandType_A.write, this.fan);
                     System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                     d.Add("on_off", fan.trait_on_off.curValue.ToString());
+                    d.Add("fan_speed_percent", fan.openLevel.ToString());
                     Control.Ins.SendWriteCommand(fan, d);
                 })
                 { IsBackground = true }.Start();
@@ -97,6 +99,7 @@
                     //Control.Send(CommandType_A.write, this.fan);
                     System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                     d.Add("on_off", fan.trait_on_off.curValue.ToString());
+                    d.Add("fan_speed_percent", fan.openLevel.ToString());
                     Control.Ins.SendWriteCommand(fan, d);
                 })
                 { IsBackground = true }.Start();
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotHistoryPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotHistoryPage.cs
old mode 100755
new mode 100644
index 865a154..6c12477
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotHistoryPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotHistoryPage.cs
@@ -42,7 +42,7 @@
             frameBack.AddChidren(rowTime);
             btnCaption = rowTime.AddLeftCaption(Language.StringByID(StringId.TotalCleaningTime), 200);
             btnCaption.TextColor = CSS.CSS_Color.FirstLevelTitleColor;
-            rowTime.AddMostRightView((robotData.CleanTime / 60) + "min", 100);
+            rowTime.AddMostRightView((robotData.CleanTime) + "min", 100);
         }
 
         #endregion
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs
index c08f7c4..6eb2862 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs
@@ -170,6 +170,7 @@
             btnVoiceIcon.X = btnChargeIcon.Right + Application.GetRealWidth(50);
             btnVoiceIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobot/Voice.png";
             btnVoiceIcon.SelectedImagePath = "FunctionIcon/Electrical/WeepRobot/VoiceSelect.png";
+            btnVoiceIcon.IsSelected = true;
             FrameWhiteCentet1.AddChidren(btnVoiceIcon);
             btnVoiceIcon.ButtonClickEvent += (sender, e) =>
             {
@@ -280,7 +281,7 @@
 
             //鍚稿姏1妗�
             var iconPath = this.weepRobotData.Suction == "quiet" ? "FunctionIcon/Electrical/WeepRobot/SuctionSelect.png" : "FunctionIcon/Electrical/WeepRobot/Suction.png";
-            menuContr.AddRowMenu(Language.StringByID(StringId.SuctionOneGear), iconPath, this.weepRobotData.Suction == "strong", () =>
+            menuContr.AddRowMenu(Language.StringByID(StringId.SuctionOneGear), iconPath, this.weepRobotData.Suction == "quiet", () =>
             {
                 frameBack.Close();
                 //鍙戦�佸惛鍔涘懡浠�
@@ -298,7 +299,7 @@
 
             //鍚稿姏3妗�
             iconPath = this.weepRobotData.Suction == "strong" ? "FunctionIcon/Electrical/WeepRobot/SuctionSelect.png" : "FunctionIcon/Electrical/WeepRobot/Suction.png";
-            menuContr.AddRowMenu(Language.StringByID(StringId.SuctionThreeGear), iconPath, this.weepRobotData.Suction == "quiet", () =>
+            menuContr.AddRowMenu(Language.StringByID(StringId.SuctionThreeGear), iconPath, this.weepRobotData.Suction == "strong", () =>
             {
                 frameBack.Close();
                 //鍙戦�佸惛鍔涘懡浠�
@@ -476,12 +477,12 @@
             //濡傛灉鏄竻鎵姸鎬�
             if (this.weepRobotData.Cleaning == true)
             {
-                //鍚稿姏璋冭妭涓嶅彲鐢�
-                this.btnSuctionIcon.IsSelected = false;
-                this.btnSuctionIcon.CanClick = false;
+                //鍚稿姏璋冭妭鍙敤
+                this.btnSuctionIcon.IsSelected = true;
+                this.btnSuctionIcon.CanClick = true;
                 //澹伴煶涓嶅彲鐢�
-                this.btnVoiceIcon.IsSelected = false;
-                this.btnVoiceIcon.CanClick = false;
+                //this.btnVoiceIcon.IsSelected = false;
+                //this.btnVoiceIcon.CanClick = false;
                 //娓呮壂妯″紡涓嶅彲鐢�
                 this.btnModeIcon.IsSelected = false;
                 this.btnModeIcon.CanClick = false;
@@ -494,12 +495,12 @@
             }
             else
             {
-                //鍚稿姏璋冭妭鍙敤
-                this.btnSuctionIcon.IsSelected = true;
-                this.btnSuctionIcon.CanClick = true;
+                //鍚稿姏璋冭妭涓嶅彲鐢�
+                this.btnSuctionIcon.IsSelected = false;
+                this.btnSuctionIcon.CanClick = false;
                 //澹伴煶鍙敤
-                this.btnVoiceIcon.IsSelected = true;
-                this.btnVoiceIcon.CanClick = true;
+                //this.btnVoiceIcon.IsSelected = true;
+                //this.btnVoiceIcon.CanClick = true;
                 //娓呮壂妯″紡鍙敤
                 this.btnModeIcon.IsSelected = true;
                 this.btnModeIcon.CanClick = true;
@@ -560,8 +561,9 @@
         /// </summary>
         private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
         {
-            foreach (var data in i_LocalDevice.status)
+            for (int i = 0; i < i_LocalDevice.status.Count; i++)
             {
+                var data = i_LocalDevice.status[i];
                 //寮�鍏�
                 if (data.key == "on_off") { this.weepRobotData.Cleaning = data.value.ToLower() == "on"; }
                 //瀵绘壘鏈哄櫒
@@ -651,7 +653,7 @@
             /// <summary>
             /// 鏄惁澶勪簬娓呮壂涓�
             /// </summary>
-            public bool Cleaning = true;
+            public bool Cleaning = false;
             /// <summary>
             /// 瀵绘壘鏈哄櫒
             /// </summary>
@@ -705,7 +707,7 @@
             /// </summary>
             public int Filter = 0;
             /// <summary>
-            /// 娓呮壂鏃堕棿(0-432000)
+            /// 娓呮壂鏃堕棿(0-432000) 鍗曚綅涓哄垎閽�
             /// </summary>
             public int CleanTime = 0;
             /// <summary>

--
Gitblit v1.8.0