From b47f91b91bc5371bba0c8801dbd648772ab331fc Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期五, 11 十一月 2022 13:54:15 +0800
Subject: [PATCH] Merge branch 'Dev-Branch' into wjc

---
 HDL-ON_Android/Properties/AndroidManifest.xml                                             |    2 
 HDL-ON_Android/Assets/Language.ini                                                        |   29 +
 HDL-ON_iOS/HDL-ON_iOS.csproj                                                              |    8 
 HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs                         |    1 
 HDL_ON/Common/ApiUtlis.cs                                                                 |    6 
 HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/MechanicalArmPage.cs                        |  186 +++++++++++
 HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs                              |    1 
 HDL_ON/HDL_ON.projitems                                                                   |    1 
 HDL-ON_Android/HDL-ON_Android.csproj                                                      |    8 
 HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs                                                   |    2 
 HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs                               |    2 
 HDL_ON/DAL/Server/NewApiRes.cs                                                            |   29 +
 HDL_ON/Common/HDLCommon.cs                                                                |   29 
 HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs                                    |    7 
 HDL_ON/Entity/Enumerative/MyEnum.cs                                                       |    4 
 HDL_ON/UI/UI2/4-PersonalCenter/CancelAccountPage.cs                                       |  293 ++++++++++++++++++
 HDL_ON/UI/UI1-Login/LoginPage.cs                                                          |   21 +
 HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png           |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png  |    0 
 HDL_ON/Entity/DB_ResidenceData.cs                                                         |   35 +
 HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs                                      |   26 +
 HDL_ON/UI/UI0-Public/TopViewDiv.cs                                                        |    2 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png     |    0 
 HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorGasPage.cs                               |    6 
 HDL_ON/Entity/Function/Function.cs                                                        |    8 
 HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs                                     |   16 
 HDL_ON/UI/UI2/2-Classification/FunctionPage.cs                                            |    6 
 HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs                       |    2 
 HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs                                                 |    5 
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                                                      |    4 
 HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs                            |    2 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png   |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/sensormmv_pose.png                          |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/electricalmechanical_arm.png                |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs                               |    1 
 HDL-ON_iOS/Resources/Language.ini                                                         |   29 +
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png   |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/sensormmv_pose.png                           |    0 
 HDL_ON/UI/UI2/2-Classification/ClassificaitionPublicBLL.cs                                |   10 
 HDL_ON/DAL/DriverLayer/Control.cs                                                         |    2 
 HDL_ON/UI/MainPage.cs                                                                     |    1 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png    |    0 
 HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs                                   |   39 -
 HDL_ON/Entity/FunctionList.cs                                                             |    8 
 HDL_ON/DAL/Server/NewAPI.cs                                                               |   11 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png      |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/electricalmechanical_arm.png                 |    0 
 HDL_ON/Common/R.cs                                                                        |   16 +
 HDL_ON/DAL/Server/HttpServerRequest.cs                                                    |   90 +++-
 HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png  |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png            |    0 
 52 files changed, 816 insertions(+), 132 deletions(-)

diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index f171a66..c10bcf2 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -560,7 +560,10 @@
 573=At home
 574=Heating and dehumidification
 575=Select Mode
-
+576=Open
+577=Close
+578=Mechanical Arm
+579=Cancellation
 
 
 
@@ -1786,6 +1789,10 @@
 573=鍦ㄥ
 574=鍒剁儹闄ゆ箍
 575=閫夋嫨妯″紡
+576=闃�闂ㄥ凡鍏抽棴
+577=闃�闂ㄥ凡鎵撳紑
+578=鏈烘鎵�
+579=绔嬪嵆娉ㄩ攢
 
 
 
@@ -2988,7 +2995,10 @@
 573=At home
 574=Heating and dehumidification
 575=Select Mode
-
+576=袨褌泻褉褘褌褜
+577=袟邪泻褉褘褌褜
+578=Mechanical Arm
+579=Cancellation
 
 
 2532=Visitor Invitation Record
@@ -3753,7 +3763,7 @@
 115=Electrodom茅sticos
 116=Bloqueo inteligente 
 117=Calefacci贸n 
-118=Abrir 
+118=Abrir
 119=Refrigeraci贸n 
 120=Calefacci贸n 
 121=Deshumidificar
@@ -4198,9 +4208,10 @@
 573=At home
 574=Heating and dehumidification
 575=Select Mode
-
-
-
+576=Abrir
+577=Cerrar
+578=Mechanical Arm
+579=Cancellation
 
 2532=Visitor Invitation Record
 2533=Visitor management
@@ -5395,7 +5406,9 @@
 573=At home
 574=Heating and dehumidification
 575=Select Mode
-
+576=袨褌胁芯褉械薪芯
+577=袟邪褌胁芯褉懈
+579=Cancellation
 
 
 1000=袙谢邪卸薪芯褋褌 胁 褋褌邪褟褌邪
@@ -5412,7 +5425,7 @@
 1011=小懈薪褏褉芯薪懈蟹邪褑懈褟
 1012=袠蟹斜械褉械褌械 褋泻芯褉芯褋褌 薪邪 胁褟褌褗褉邪
 1013=褋褌械锌械薪
-1014=1014=袦芯谢褟, 锌芯褌胁褗褉写械褌械 写邪谢懈 褎懈谢褌褗褉薪懈褟褌 械谢械屑械薪褌 写械泄褋褌胁懈褌械谢薪芯 械 斜懈谢 薪褍谢懈褉邪薪 懈 褉邪斜芯褌械褌械 褋 芯斜芯褉褍写胁邪薪械褌芯 褋褗谐谢邪褋薪芯 懈薪褋褌褉褍泻褑懈懈褌械 薪邪 {0}, 蟹邪 写邪 锌褉械薪邪褋褌褉芯懈褌械 卸懈胁芯褌邪 薪邪 褎懈谢褌褗褉薪懈褟 械谢械屑械薪褌 {0}
+1014=袦芯谢褟, 锌芯褌胁褗褉写械褌械 写邪谢懈 褎懈谢褌褗褉薪懈褟褌 械谢械屑械薪褌 写械泄褋褌胁懈褌械谢薪芯 械 斜懈谢 薪褍谢懈褉邪薪 懈 褉邪斜芯褌械褌械 褋 芯斜芯褉褍写胁邪薪械褌芯 褋褗谐谢邪褋薪芯 懈薪褋褌褉褍泻褑懈懈褌械 薪邪 {0}, 蟹邪 写邪 锌褉械薪邪褋褌褉芯懈褌械 卸懈胁芯褌邪 薪邪 褎懈谢褌褗褉薪懈褟 械谢械屑械薪褌 {0}
 1015=袧懈褋泻邪 褋褌械锌械薪
 1016=小褉械写薪邪 褋褌械锌械薪
 1017=袙懈褋芯泻邪 褋褌械锌械薪
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png
new file mode 100644
index 0000000..0fe6726
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png
new file mode 100644
index 0000000..422e59f
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png
new file mode 100644
index 0000000..b1a0f69
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png
new file mode 100644
index 0000000..a63a48c
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png
new file mode 100644
index 0000000..350390c
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/electricalmechanical_arm.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/electricalmechanical_arm.png
new file mode 100644
index 0000000..46823b6
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/electricalmechanical_arm.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/sensormmv_pose.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/sensormmv_pose.png
new file mode 100644
index 0000000..958cf71
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/sensormmv_pose.png
Binary files differ
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index 8f20ccb..e5bbf10 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -389,6 +389,13 @@
     <AndroidAsset Include="Assets\h5\static\img\co2-reduction-ic.9c75228c.png" />
     <AndroidAsset Include="Assets\h5\static\img\equal-plant-ic.7ef6befa.png" />
     <AndroidAsset Include="Assets\h5\static\img\coal-save-ic.6c5fd125.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\sensormmv_pose.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\MechanicalArm\MechanicalArmBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\MechanicalArm\MechanicalArmOnBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\FunctionBg\MechanicalArmFunctionBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\electricalmechanical_arm.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\electricalmechanical_arm_blue.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\HomeIcon\electricalmechanical_arm_white.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidResource Include="Resources\values\colors.xml" />
@@ -1598,6 +1605,7 @@
     <Folder Include="Assets\Phone\FunctionIcon\CAC\" />
     <Folder Include="Assets\Phone\FunctionIcon\Panel\" />
     <Folder Include="Assets\Phone\FunctionIcon\Inverter\" />
+    <Folder Include="Assets\Phone\FunctionIcon\Electrical\MechanicalArm\" />
   </ItemGroup>
   <Import Project="..\HDL_ON\HDL_ON.projitems" Label="Shared" Condition="Exists('..\HDL_ON\HDL_ON.projitems')" />
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
diff --git a/HDL-ON_Android/Properties/AndroidManifest.xml b/HDL-ON_Android/Properties/AndroidManifest.xml
index 2edb0de..ea9ea00 100644
--- a/HDL-ON_Android/Properties/AndroidManifest.xml
+++ b/HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.6.2" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202211041">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.6.2" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202211081">
 	<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
 	<!--鍙嬬洘-->
 	<!--<uses-sdk android:minSdkVersion="8"></uses-sdk>-->
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index 1953591..5094f83 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -490,6 +490,7 @@
         <Folder Include="Resources\Phone\FunctionIcon\CAC\" />
         <Folder Include="Resources\Phone\FunctionIcon\Panel\" />
         <Folder Include="Resources\Phone\FunctionIcon\Inverter\" />
+        <Folder Include="Resources\Phone\FunctionIcon\Electrical\MechanicalArm\" />
     </ItemGroup>
     <ItemGroup>
         <InterfaceDefinition Include="LaunchScreen.storyboard" />
@@ -1547,6 +1548,13 @@
       <BundleResource Include="Resources\h5\static\img\co2-reduction-ic.9c75228c.png" />
       <BundleResource Include="Resources\h5\static\img\equal-plant-ic.7ef6befa.png" />
       <BundleResource Include="Resources\h5\static\img\coal-save-ic.6c5fd125.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\sensormmv_pose.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\MechanicalArm\MechanicalArmBg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\MechanicalArm\MechanicalArmOnBg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\FunctionBg\MechanicalArmFunctionBg.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\electricalmechanical_arm.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\electricalmechanical_arm_blue.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\electricalmechanical_arm_white.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index f171a66..c10bcf2 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -560,7 +560,10 @@
 573=At home
 574=Heating and dehumidification
 575=Select Mode
-
+576=Open
+577=Close
+578=Mechanical Arm
+579=Cancellation
 
 
 
@@ -1786,6 +1789,10 @@
 573=鍦ㄥ
 574=鍒剁儹闄ゆ箍
 575=閫夋嫨妯″紡
+576=闃�闂ㄥ凡鍏抽棴
+577=闃�闂ㄥ凡鎵撳紑
+578=鏈烘鎵�
+579=绔嬪嵆娉ㄩ攢
 
 
 
@@ -2988,7 +2995,10 @@
 573=At home
 574=Heating and dehumidification
 575=Select Mode
-
+576=袨褌泻褉褘褌褜
+577=袟邪泻褉褘褌褜
+578=Mechanical Arm
+579=Cancellation
 
 
 2532=Visitor Invitation Record
@@ -3753,7 +3763,7 @@
 115=Electrodom茅sticos
 116=Bloqueo inteligente 
 117=Calefacci贸n 
-118=Abrir 
+118=Abrir
 119=Refrigeraci贸n 
 120=Calefacci贸n 
 121=Deshumidificar
@@ -4198,9 +4208,10 @@
 573=At home
 574=Heating and dehumidification
 575=Select Mode
-
-
-
+576=Abrir
+577=Cerrar
+578=Mechanical Arm
+579=Cancellation
 
 2532=Visitor Invitation Record
 2533=Visitor management
@@ -5395,7 +5406,9 @@
 573=At home
 574=Heating and dehumidification
 575=Select Mode
-
+576=袨褌胁芯褉械薪芯
+577=袟邪褌胁芯褉懈
+579=Cancellation
 
 
 1000=袙谢邪卸薪芯褋褌 胁 褋褌邪褟褌邪
@@ -5412,7 +5425,7 @@
 1011=小懈薪褏褉芯薪懈蟹邪褑懈褟
 1012=袠蟹斜械褉械褌械 褋泻芯褉芯褋褌 薪邪 胁褟褌褗褉邪
 1013=褋褌械锌械薪
-1014=1014=袦芯谢褟, 锌芯褌胁褗褉写械褌械 写邪谢懈 褎懈谢褌褗褉薪懈褟褌 械谢械屑械薪褌 写械泄褋褌胁懈褌械谢薪芯 械 斜懈谢 薪褍谢懈褉邪薪 懈 褉邪斜芯褌械褌械 褋 芯斜芯褉褍写胁邪薪械褌芯 褋褗谐谢邪褋薪芯 懈薪褋褌褉褍泻褑懈懈褌械 薪邪 {0}, 蟹邪 写邪 锌褉械薪邪褋褌褉芯懈褌械 卸懈胁芯褌邪 薪邪 褎懈谢褌褗褉薪懈褟 械谢械屑械薪褌 {0}
+1014=袦芯谢褟, 锌芯褌胁褗褉写械褌械 写邪谢懈 褎懈谢褌褗褉薪懈褟褌 械谢械屑械薪褌 写械泄褋褌胁懈褌械谢薪芯 械 斜懈谢 薪褍谢懈褉邪薪 懈 褉邪斜芯褌械褌械 褋 芯斜芯褉褍写胁邪薪械褌芯 褋褗谐谢邪褋薪芯 懈薪褋褌褉褍泻褑懈懈褌械 薪邪 {0}, 蟹邪 写邪 锌褉械薪邪褋褌褉芯懈褌械 卸懈胁芯褌邪 薪邪 褎懈谢褌褗褉薪懈褟 械谢械屑械薪褌 {0}
 1015=袧懈褋泻邪 褋褌械锌械薪
 1016=小褉械写薪邪 褋褌械锌械薪
 1017=袙懈褋芯泻邪 褋褌械锌械薪
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png
new file mode 100644
index 0000000..0fe6726
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png
new file mode 100644
index 0000000..422e59f
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png
new file mode 100644
index 0000000..b1a0f69
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/MechanicalArmFunctionBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png
new file mode 100644
index 0000000..a63a48c
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_blue.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png
new file mode 100644
index 0000000..350390c
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/HomeIcon/electricalmechanical_arm_white.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/electricalmechanical_arm.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/electricalmechanical_arm.png
new file mode 100644
index 0000000..46823b6
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/electricalmechanical_arm.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/sensormmv_pose.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/sensormmv_pose.png
new file mode 100644
index 0000000..958cf71
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/sensormmv_pose.png
Binary files differ
diff --git a/HDL_ON/Common/ApiUtlis.cs b/HDL_ON/Common/ApiUtlis.cs
index ce80e93..00f630a 100644
--- a/HDL_ON/Common/ApiUtlis.cs
+++ b/HDL_ON/Common/ApiUtlis.cs
@@ -322,7 +322,7 @@
 
                     //===================璇诲彇閫昏緫鍒楄〃==========================
                     Logic.LogicList.Clear();//涓婚〉涓嬫媺寮哄埗鍒锋柊鑷姩鍖栧垪琛�
-                    UI.UI2.Intelligence.Automation.MainView.GetLogicList();
+                    //UI.UI2.Intelligence.Automation.MainView.GetLogicList();
 
                     //===================璇诲彇鍙瀵硅鏁版嵁==========================
                     //鍒ゆ柇鏄惁鏈夊彲瑙嗗璁叉暟鎹紝鏈夊垯鏄剧ず鍙瀵硅icon
@@ -352,10 +352,10 @@
                                 DB_ResidenceData.Instance.SaveResidenceData();
 
                                 Entity.DB_ResidenceData.Instance.SupportFVDevice = true;
-
                             }
                             else if (video.interphoneType == InterphoneType.FREEVIEW.ToString())
-                            {//涓哄叏瑙嗛�氬彲瑙嗗璁�
+                            {
+                                //涓哄叏瑙嗛�氬彲瑙嗗璁�
                                 DB_ResidenceData.Instance.SupportFacePass = true;
                                 Entity.DB_ResidenceData.Instance.SupportVisitorManage = true;
                                 Entity.DB_ResidenceData.Instance.SupportFVDevice = true;
diff --git a/HDL_ON/Common/HDLCommon.cs b/HDL_ON/Common/HDLCommon.cs
index 1a42157..b7df610 100644
--- a/HDL_ON/Common/HDLCommon.cs
+++ b/HDL_ON/Common/HDLCommon.cs
@@ -91,7 +91,7 @@
                     {
                         if (revertObj.Data != null)
                         {
-                            var appVersionRes = Newtonsoft.Json.JsonConvert.DeserializeObject<AppVersionRes>(revertObj.Data.ToString());
+                            var appVersionRes = Newtonsoft.Json.JsonConvert.DeserializeObject<AppVersionResNew>(revertObj.Data.ToString());
                             if (appVersionRes != null)
                             {
 
@@ -99,24 +99,25 @@
                                 {
                                     UpdateType = appVersionRes.isEnforce ? 2 : 1,
                                     NewVersion = appVersionRes.version,
-                                    NewVersionUrl = appVersionRes.androidUrl
+                                    NewVersionUrl = appVersionRes.packageUrl
                                 };
 #if __IOS__
                                 mForceUpdateInfo.NewVersionUrl = appVersionRes.iosUrl;
 #endif
                                 //瑙f瀽鏇存柊鍐呭璇︽儏
-                                var reasonStrJson = GetReasonStrJson(appVersionRes.updateDescription);
-                                if (reasonStrJson != null)
-                                {
-                                    if (Language.CurrentLanguage == "Chinese")
-                                    {
-                                        mForceUpdateInfo.ReasonStr = reasonStrJson.Chinese;
-                                    }
-                                    else
-                                    {
-                                        mForceUpdateInfo.ReasonStr = reasonStrJson.English;
-                                    }
-                                }
+                                //var reasonStrJson = GetReasonStrJson(appVersionRes.remark);
+                                //if (reasonStrJson != null)
+                                //{
+                                //    if (Language.CurrentLanguage == "Chinese")
+                                //    {
+                                //        mForceUpdateInfo.ReasonStr = reasonStrJson.Chinese;
+                                //    }
+                                //    else
+                                //    {
+                                //        mForceUpdateInfo.ReasonStr = reasonStrJson.English;
+                                //    }
+                                //}
+                                mForceUpdateInfo.ReasonStr = appVersionRes.remark;
 
                                 Application.RunOnMainThread(() =>
                                 {
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index cff6cb8..afc49c6 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -5,6 +5,22 @@
     public static class StringId
     {
         /// <summary>
+        /// 娉ㄩ攢
+        /// </summary>
+        public const int Cancellation = 579;
+        /// <summary>
+        /// 鏈烘鑷�
+        /// </summary>
+        public const int MechanicalArm = 578;
+        /// <summary>
+        /// 闃�闂ㄥ凡鎵撳紑
+        /// </summary>
+        public const int ValveOpened = 577;
+        /// <summary>
+        /// 闃�闂ㄥ凡鍏抽棴
+        /// </summary>
+        public const int ValveClosed = 576;
+        /// <summary>
         /// 閫夋嫨妯″紡
         /// </summary>
         public const int SelectMode = 575;
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index d8c7d1d..f7110c8 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -1438,12 +1438,14 @@
                             case SPK.SensorGas:
                             case SPK.HvacCac:
                             case SPK.SensorHelp:
+                            case SPK.MechanicalArm:
                                 //璁惧鐘舵�佹帹閫�
                                 //鐘舵�佹洿鏂�
                                 Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
                                 break;
                             case SPK.SenesorMegahealth:
                             case SPK.SenesorMegahealth2:
+                            case SPK.SensorMmvPose:
 
                                 var tempStatus = localFunction.attributes.Find((sta) => sta.key == FunctionAttributeKey.TargetStatus);
                                 if (tempStatus != null)
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index e39af1d..9726771 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -1354,18 +1354,52 @@
         {
             var requestObj = new AppVersionCheckObj()
             {
-
+                
             };
+            #if __IOS__
+            requestObj.releaseSystem = "IOS";
+            #else
+            requestObj.releaseSystem = "Android";
+            #endif
 
             var requestJson = HttpUtil.GetSignRequestJson(requestObj);
             return HttpUtil.RequestHttpsPost(NewAPI.API_POST_CheckAppVersion, requestJson);
         }
-
-
-
         #endregion
 
-        #region 鑾峰彇澶╂皵閮ㄥ垎
+        #region 娉ㄩ攢璐﹀彿
+        /// <summary>
+        /// 鑾峰彇褰撳墠鐗堟湰娉ㄩ攢璐﹀彿妯″紡
+        /// </summary>
+        /// <returns></returns>
+        public ResponsePackNew GetUnregisterModel()
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("version", MainPage.VersionString);
+            d.Add("appCode", "1588071238036582401");
+#if __IOS__
+            d.Add("releaseSystem", "IOS");
+#else
+            d.Add("releaseSystem", "Android");
+#endif
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            return HttpUtil.RequestHttpsPost(NewAPI.Api_Post_GetUnregisterModel, requestJson);
+        }
+        /// <summary>
+        /// 娉ㄩ攢璐﹀彿
+        /// </summary>
+        /// <returns></returns>
+        public ResponsePackNew Unregister(string pwd)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("userId", UserInfo.Current.ID);
+            d.Add("pwd", pwd);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            return HttpUtil.RequestHttpsPost(NewAPI.Api_Post_Unregister, requestJson);
+        }
+#endregion
+
+#region 鑾峰彇澶╂皵閮ㄥ垎
         /// <summary>
         /// 鑾峰彇鎸囧畾缁忕含搴︾殑鍩庡競淇℃伅澶╂皵淇℃伅
         /// </summary>
@@ -1489,10 +1523,10 @@
         //}
 
 
-        #endregion
+#endregion
 
 
-        #region 澶囦唤閮ㄥ垎
+#region 澶囦唤閮ㄥ垎
         ///// <summary>
         ///// 鑾峰彇浣忓畢澶囦唤鍒楄〃
         ///// </summary>
@@ -1963,10 +1997,10 @@
         }
         */
 
-        #endregion
+#endregion
 
 
-        #region Kaede --璁惧鍔熻兘鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��
+#region Kaede --璁惧鍔熻兘鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��
         /// <summary>
         /// 鑾峰彇璁惧鍒楄〃
         /// </summary>
@@ -2246,9 +2280,9 @@
         }
 
 
-        #endregion
+#endregion
 
-        #region Kaede --鍦烘櫙鍔熻兘--------------------------
+#region Kaede --鍦烘櫙鍔熻兘--------------------------
         /// <summary>
         /// 鑾峰彇鍦烘櫙鍒楄〃
         /// 鎴块棿ID鍙┖锛岄粯璁ゆ煡璇綇瀹呬笅鎵�鏈夋埧闂�
@@ -2380,9 +2414,9 @@
             var requestJson = HttpUtil.GetSignRequestJson(d);
             return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_CancelCollectScene, requestJson).Code;
         }
-        #endregion
+#endregion
 
-        #region Kaede --鎴块棿鍔熻兘--------------------------
+#region Kaede --鎴块棿鍔熻兘--------------------------
         /// <summary>
         /// 鑾峰彇鎴块棿鍒楄〃
         /// </summary>
@@ -2457,10 +2491,10 @@
             return pack;
         }
 
-        #endregion
+#endregion
 
 
-        #region Kaede -- 瀹夐槻鎺ュ彛____________________________
+#region Kaede -- 瀹夐槻鎺ュ彛____________________________
         /// <summary>
         /// 鑾峰彇瀹夐槻鍒楄〃
         /// </summary>
@@ -2624,10 +2658,10 @@
             return pack;
         }
 
-        #endregion
+#endregion
 
 
-        #region Kaede --绗笁鏂瑰搧鐗屽姛鑳�--------------------------
+#region Kaede --绗笁鏂瑰搧鐗屽姛鑳�--------------------------
         /// <summary>
         /// 鑾峰彇绗笁鏂瑰搧鐗屽垪琛�
         /// </summary>
@@ -2739,9 +2773,9 @@
             return pack;
         }
 
-        #endregion
+#endregion
 
-        #region 鈻� 钀ょ煶浜慡DK鐩稿叧鎺ュ彛_________________________
+#region 鈻� 钀ょ煶浜慡DK鐩稿叧鎺ュ彛_________________________
         /// <summary>
         /// 娌充笢鑾峰彇钀ょ煶浜戝瓙璐﹀彿token鐨勬帴鍙�
         /// 2021-07-07 鏂版柟妗堟帴鍙h皟鏁村鎺�
@@ -2754,10 +2788,10 @@
             var requestJson = HttpUtil.GetSignRequestJson(d);
             return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_EZ_GetChildToken, requestJson);
         }
-        #endregion
+#endregion
 
 
-        #region 鈻� 鍙瀵硅_________________________
+#region 鈻� 鍙瀵硅_________________________
         /// <summary>
         /// 妫�鏌ヤ綇瀹呮槸鍚︾粦瀹氫赴鏋�
         /// </summary>
@@ -2789,9 +2823,9 @@
 
         }
 
-        #endregion
+#endregion
 
-        #region 鈻� 闂ㄩ攣鐩稿叧____________________________
+#region 鈻� 闂ㄩ攣鐩稿叧____________________________
 
         /// <summary>
         /// 鑾峰彇闂ㄩ攣鍘嗗彶璁板綍(鎸夋棩鏈熼檷搴�)
@@ -2860,8 +2894,8 @@
             return listSortLog;
         }
 
-        #endregion
-        #region 鈻� 闊崇璇█鎺у埗鐩稿叧_________________________
+#endregion
+#region 鈻� 闊崇璇█鎺у埗鐩稿叧_________________________
         /// <summary>
         /// 鑾峰彇宸叉巿鏉冪殑闊崇鍒楄〃
         /// </summary>
@@ -2925,7 +2959,7 @@
             var requestJson = HttpUtil.GetSignRequestJson(updateSpeakerDeviceListObj);
             return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Speaker_DeviceList_Update, requestJson);
         }
-        #endregion
+#endregion
 
         /// <summary>
         /// 缁戝畾source闈㈡澘
@@ -2993,7 +3027,7 @@
 
 
 
-        #region 鍏変紡鍌ㄨ兘
+#region 鍏変紡鍌ㄨ兘
         /// <summary>
         /// 鑾峰彇浣忓畢涓嬮�嗗彉鍣ㄥ垪琛�
         /// </summary>
@@ -3018,7 +3052,7 @@
             var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetInverter_StatisticsInfo, requestJson);
             return pack;
         }
-        #endregion
+#endregion
 
     }
 }
\ No newline at end of file
diff --git a/HDL_ON/DAL/Server/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index d4b49a3..4943403 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -348,13 +348,20 @@
         /// <summary>
         /// 妫�娴嬫洿鏂�,鏄惁闇�瑕佸己鍒舵洿鏂�
         /// </summary>
-        public const string API_POST_CheckAppVersion = "/smart-footstone/app/appVersion/check";
+        public const string API_POST_CheckAppVersion = "/basis-footstone/app/appVersion/check";
         ///// <summary>
         ///// 鏌ヨAPP鏈�鏂扮増鏈�
         ///// </summary>
         //public const string API_POST_GetAppVersion = "/smart-footstone/app/getAppVersion";
         #endregion
-
+        /// <summary>
+        /// 鑾峰彇褰撳墠鐗堟湰娉ㄩ攢璐﹀彿妯″紡
+        /// </summary>
+        public const string Api_Post_GetUnregisterModel = "/basis-footstone/app/appVersion/unregisterModel";
+        /// <summary>
+        /// 娉ㄩ攢璐﹀彿
+        /// </summary>
+        public const string Api_Post_Unregister = "/basis-footstone/member/unregister";
 
 
         #region 鈻�  -- 鎴块棿鍦烘櫙鑳屾櫙鍥剧墖涓婁紶涓嬭浇鎺ュ彛___________________________
diff --git a/HDL_ON/DAL/Server/NewApiRes.cs b/HDL_ON/DAL/Server/NewApiRes.cs
index 1f2c5b9..1878cab 100644
--- a/HDL_ON/DAL/Server/NewApiRes.cs
+++ b/HDL_ON/DAL/Server/NewApiRes.cs
@@ -585,7 +585,7 @@
         /// <summary>
         /// 缃戝叧ID
         /// </summary>
-        public string gatewayId ="";
+        public string gatewayId = "";
         /// <summary>
         /// 缃戝叧snID
         /// </summary>
@@ -994,7 +994,7 @@
 
     }
 
-    
+
     #endregion
 
     #region 鏁版嵁鍒嗕韩
@@ -1220,10 +1220,31 @@
         /// 
         /// </summary>
         public string version = MainPage.VersionString;
+        ///// <summary>
+        ///// 杞欢鏉ユ簮锛孍voyo銆丱N銆丱N_Plus
+        ///// </summary>
+        //public string appName = SoftwareType.ON_Plus.ToString();
+
+        public string appCode = "1588071238036582401";
         /// <summary>
-        /// 杞欢鏉ユ簮锛孍voyo銆丱N銆丱N_Plus
+        /// IOS銆丄ndroid
         /// </summary>
-        public string appName = SoftwareType.ON_Plus.ToString();
+        public string releaseSystem = "";
+    }
+
+    /// <summary>
+    /// 
+    /// </summary>
+    [System.Serializable]
+    public class AppVersionResNew
+    {
+        public string version;
+        public string appName;
+        public string appCode;
+        public bool isEnforce;
+        public string releaseSystem;
+        public string packageUrl;//": "http://hdl-hz-test.oss-cn-hangzhou.aliyuncs.com/20/2022/11/51b8b0b2-0ebc-4632-a3b5-0be1e5d104e4.apk",
+        public string remark;
     }
 
     /// <summary>
diff --git a/HDL_ON/Entity/DB_ResidenceData.cs b/HDL_ON/Entity/DB_ResidenceData.cs
index cd346ad..d3df31b 100644
--- a/HDL_ON/Entity/DB_ResidenceData.cs
+++ b/HDL_ON/Entity/DB_ResidenceData.cs
@@ -54,11 +54,33 @@
             }
         }
 
+        [Newtonsoft.Json.JsonIgnore]
+        private List<ShowFunction> showFunctions;
+
         /// <summary>
         /// 鍔熻兘绫诲瀷鍒楄〃
         /// </summary>
         [Newtonsoft.Json.JsonIgnore]
-        public List<ShowFunction> functionTypeList = new List<ShowFunction>();
+        public List<ShowFunction> functionTypeList
+        {
+            get
+            {
+                if (showFunctions == null)
+                {
+                    showFunctions = new List<ShowFunction> {
+                                    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.Sensor,ShowFunction.VideoIntercom,
+                                    ShowFunction.SecurityCenter,ShowFunction.Acst,
+                                    ShowFunction.MechanicalArm };
+                }
+                return showFunctions;
+            }
+        }
 
         static DB_ResidenceData instance;
         public static DB_ResidenceData Instance
@@ -70,16 +92,6 @@
                     if(MainPage.NoLoginMode)
                     {
                         instance = new DB_ResidenceData();
-                        instance.functionTypeList.AddRange(new List<ShowFunction> {
-                                    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.Sensor,ShowFunction.VideoIntercom,
-                                    ShowFunction.SecurityCenter,ShowFunction.Acst,
-                                });
                         instance.SaveResidenceData();
                         instance.residenceImage = "Classification/Room/Roombg.png";
                         instance.HomeGateway = new HomeGatewayInfo()
@@ -120,6 +132,7 @@
                                     ShowFunction.Panel,ShowFunction.SecurityMonitoring,
                                     ShowFunction.Sensor,ShowFunction.VideoIntercom,
                                     ShowFunction.SecurityCenter,ShowFunction.Acst,
+                                    ShowFunction.MechanicalArm
                                 });
                         instance.SupportFacePass = false;
                         instance.SaveResidenceData();
diff --git a/HDL_ON/Entity/Enumerative/MyEnum.cs b/HDL_ON/Entity/Enumerative/MyEnum.cs
index 8e4c806..0edd947 100644
--- a/HDL_ON/Entity/Enumerative/MyEnum.cs
+++ b/HDL_ON/Entity/Enumerative/MyEnum.cs
@@ -177,6 +177,10 @@
         /// 缁垮缓绉戞妧绯荤粺
         /// </summary>
         Acst = 0x23,
+        /// <summary>
+        /// 鏈烘鑷�
+        /// </summary>
+        MechanicalArm=0x24,
 
 
     }
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 961046d..8737837 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -1617,6 +1617,10 @@
         public const string SenesorMegahealth = "sensor.megahealth";
         public const string SenesorMegahealth2 = "sensor.megahealth.zg";
         /// <summary>
+        /// 姣背娉紶鎰熷櫒锛堝Э鎬佺増锛�
+        /// </summary>
+        public const string SensorMmvPose = "sensor.mmv_pose";
+        /// <summary>
         /// 绱ф�ュ懠鍙�
         /// </summary>
         public const string SensorHelp = "sensor.help";
@@ -1641,6 +1645,7 @@
             spkList.Add(SensorDryContact2);
             spkList.Add(SenesorMegahealth);
             spkList.Add(SenesorMegahealth2);
+            spkList.Add(SensorMmvPose);
             return spkList;
         }
         #endregion
@@ -1912,6 +1917,7 @@
             spkList.Add(ElectricTuyaWaterValve2);
             spkList.Add(ElectricTuyaWeepRobot);
             spkList.Add(ElectricTuyaWeepRobot2);
+            spkList.Add(SensorMmvPose);
             spkList.Add(SenesorMegahealth);
             spkList.Add(SenesorMegahealth2);
             return spkList;
@@ -1937,7 +1943,7 @@
                     list.Add(ElectricTuyaWeepRobot2);
                     break;
                 case BrandType.All3tyBrand:
-                    list.Add(SenesorMegahealth);//鍏嗚
+                    list.Add(SenesorMegahealth2);//鍏嗚
                     break;
             }
             return list;
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index 398fb08..8ca1efc 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -39,6 +39,14 @@
         /// 鍔熻兘鍒楄〃
         /// </summary>
         public List<Function> Functions = new List<Function>();
+        /// <summary>
+        /// 鏈烘鑷傚垪琛�
+        /// </summary>
+        /// <returns></returns>
+        public List<Function> GetMechanicalArmList()
+        {
+            return Functions.FindAll((obj) => obj.spk == SPK.MechanicalArm);
+        }
 
         /// <summary>
         /// 缁垮缓绉戞妧绯荤粺
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 3e74880..47b415d 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -525,6 +525,7 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Curtain\VenetianBlindsPageBLL.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\ChooseIocate.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\LogicView\ColorTemperature.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\1ContorlPage\MechanicalArmPage.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
diff --git a/HDL_ON/UI/MainPage.cs b/HDL_ON/UI/MainPage.cs
index 4fd5acb..e48a361 100644
--- a/HDL_ON/UI/MainPage.cs
+++ b/HDL_ON/UI/MainPage.cs
@@ -116,6 +116,7 @@
             SPK.AirFreshStandard,SPK.HvacAirFresh,
             SPK.AirSwitch,
             SPK.PanelSocket,SPK.ElectricSocket,
+            SPK.MechanicalArm,
         };
 
 
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
index 732abb2..f3e5160 100644
--- a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -135,6 +135,10 @@
                     case SPK.ElectricTuyaWaterValve2:
                         var tyWaterValve = new TuyaWaterValvePage();
                         tyWaterValve.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
+                        break;
+                    case SPK.MechanicalArm:
+                        var mechanicalArmPage = new MechanicalArmPage();
+                        mechanicalArmPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                         break;
                     case SPK.ElectricTuyaWeepRobot:
                     case SPK.ElectricTuyaWeepRobot2:
@@ -180,6 +184,7 @@
                         doorwindowPage.ShowColltionButton = false;
                         doorwindowPage.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                         break;
+                    case SPK.SensorMmvPose:
                     case SPK.SenesorMegahealth:
                     case SPK.SenesorMegahealth2:
                         var smPage = new SenesorMegahealthPage();
diff --git a/HDL_ON/UI/UI0-Public/TopViewDiv.cs b/HDL_ON/UI/UI0-Public/TopViewDiv.cs
index 8fcc613..2d7de2c 100644
--- a/HDL_ON/UI/UI0-Public/TopViewDiv.cs
+++ b/HDL_ON/UI/UI0-Public/TopViewDiv.cs
@@ -173,7 +173,7 @@
                 Y = Application.GetRealHeight(10),
                 Width = Application.GetMinRealAverage(28+37),
                 Height = Application.GetMinRealAverage(28+19),
-                Text = "缁勫悎璋冨厜",
+                TextID = StringId.CombinedDimming,
                 TextSize = CSS_FontSize.TextFontSize,
                 TextColor = CSS_Color.MainColor,
                 IsMoreLines = true
diff --git a/HDL_ON/UI/UI1-Login/LoginPage.cs b/HDL_ON/UI/UI1-Login/LoginPage.cs
index 5a67121..0f88e47 100644
--- a/HDL_ON/UI/UI1-Login/LoginPage.cs
+++ b/HDL_ON/UI/UI1-Login/LoginPage.cs
@@ -219,7 +219,7 @@
                     etAccount.Text = "tf@smarttech.com.ua";
                     etAccount.Text = "13288623489";
                     etAccount.Text = "455740454@qq.com";
-                    etAccount.Text = "13799777637";
+                    etAccount.Text = "13335135632";
                 }
                 else
                 {
@@ -253,9 +253,9 @@
                 }
                 b = !b;
                 etPassword.Text = "123456";
-                if(etAccount.Text == "13799777637")
+                if(etAccount.Text == "13335135632")
                 {
-                    etPassword.Text = "xiamen1990";
+                    etPassword.Text = "borui1123";
                 }
                 //etPassword.Text = "Hdl85521566";
                 btnLogin.IsSelected = true;
@@ -794,6 +794,21 @@
 
 
 #if DEBUG
+                var mechanicalArm = new Function()
+                {
+                    sid = "mechanicalArm1",
+                    deviceId = "mechanicalArm1",
+                    name = Language.CurrentLanguage == "Chinese" ? "鏈烘鎵�" : "Mechanical Arm",
+                    spk = SPK.MechanicalArm,
+                    roomIds = new List<string>() { "1405771024583090178" },
+                    attributes = new List<FunctionAttributes>()
+                    {
+                        new FunctionAttributes() { key = "on_off",value =new List<string>(){ "on","off" }, curValue="on",state = "on"   },
+                    },
+                };
+                mechanicalArm.SaveFunctionFile();
+
+
                 var lightRgbw1 = new Function()
                 {
                     sid = "light11",
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index f593fa1..064bc66 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -903,7 +903,7 @@
                 };
 
 
-                if (function.spk == SPK.SenesorMegahealth)
+                if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
                 {
                     btnIcon.UnSelectedImagePath = "FunctionIcon/Icon/HomeIcon/sensormegahealth.png";
                     btnIcon.SelectedImagePath = "FunctionIcon/Icon/HomeIcon/sensormegahealth.png";
@@ -1116,7 +1116,7 @@
 
                 }
                 
-                else if (function.spk == SPK.SenesorMegahealth)
+                else if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
                 {
                     //btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}.png";
                     //btnIcon.SelectedImagePath = "FunctionIcon/Icon/HomeIcon/sensormegahealth.png";
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
index afe7efb..850ab99 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -408,7 +408,7 @@
                                         state = function.trait_on_off.curValue.ToString() == "on";
                                     }
                                 }
-                                else if (function.spk == SPK.SenesorMegahealth)
+                                else if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
                                 {
 
                                     var tempStatus = function.attributes.Find((sta) => sta.key == FunctionAttributeKey.TargetStatus);
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificaitionPublicBLL.cs b/HDL_ON/UI/UI2/2-Classification/ClassificaitionPublicBLL.cs
index 04c68ec..69e0702 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificaitionPublicBLL.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificaitionPublicBLL.cs
@@ -112,10 +112,10 @@
                                     {
                                         #region 绐楀笜鏇存柊
                                         var onoffString = updataFunction.GetAttrState(FunctionAttributeKey.OnOff);
-                                        if (onoffString == "stop")
-                                        {
-                                            return;
-                                        }
+                                        //if (onoffString == "stop")
+                                        //{
+                                        //    return;
+                                        //}
                                         var percent = onoffString == "off" ? 0 : 100;
                                         if (updataFunction.GetAttributes().Contains(FunctionAttributeKey.Percent))
                                         {
@@ -172,7 +172,7 @@
                                         #endregion
                                     }
                                     //鏇存柊姣背娉紶鎰熷櫒鐘舵��
-                                    else if(SPK.SenesorMegahealth == updataFunction.spk)
+                                    else if(SPK.SenesorMegahealth == updataFunction.spk || SPK.SensorMmvPose == updataFunction.spk)
                                     {
                                         if (cTag == updataFunction.sid + "_SenesorMegahealth_Status")
                                         {
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
index ac508a3..6c21dc8 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -655,6 +655,10 @@
                 int functionOnCount = 0;
                 switch (item)
                 {
+                    case ShowFunction.MechanicalArm:
+                        functionCount = FunctionList.List.GetMechanicalArmList().Count;
+                        functionOnCount = FunctionList.List.GetMechanicalArmList().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
+                        break;
                     case ShowFunction.Light:
                         #region Light
                         functionCount = FunctionList.List.GetLightList().Count;
@@ -863,6 +867,28 @@
 
                         #endregion
                         break;
+                    case ShowFunction.MechanicalArm:
+                        btnName.TextID = StringId.MechanicalArm;
+                        Button btnMaPower = new Button()
+                        {
+                            X = Application.GetRealWidth(120),
+                            Y = specialList.Contains(index) ? Application.GetRealWidth(160) : Application.GetRealWidth(117),
+                            Width = Application.GetRealWidth(32),
+                            Height = Application.GetRealWidth(32),
+                            SelectedImagePath = "Public/PowerOpen.png",
+                            UnSelectedImagePath = "Public/PowerClose.png",
+                            IsSelected = functionOnCount > 0,
+                            Tag = item + "_AllControl",
+                        };
+                        functionView.AddChidren(btnMaPower);
+
+                        btnMaPower.MouseUpEventHandler = (sender, e) =>
+                        {
+                            LoadEvent_SwitchFunction(btnMaPower, item, functionView);
+                        };
+                        functionPageTitleId = StringId.MechanicalArm;
+
+                        break;
                     case ShowFunction.AC:
                         #region AC
                         btnName.TextID = StringId.AC;
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
index 4c33ddf..8f8440a 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -98,7 +98,7 @@
 
 
 
-                else if (function.spk == SPK.SenesorMegahealth)
+                else if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose  )
                 {
                     var btnStatus = new Button()
                     {
@@ -375,7 +375,7 @@
                 bodyDiv.AddChidren(btnCollectionIcon);
             }
 
-            if(function.spk == SPK.SenesorMegahealth)
+            if(function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
             {
                 bodyDiv.AddChidren(btnCollectionIcon);
             }
@@ -464,6 +464,14 @@
         /// </summary>
         void CurtainFragment()
         {
+            var onoffString = function.GetAttrState(FunctionAttributeKey.OnOff);
+            var percent = onoffString == "off" ? 0 : 100;
+            if (function.GetAttributes().Contains(FunctionAttributeKey.Percent))
+            {
+                string percentString = function.GetAttrState(FunctionAttributeKey.Percent);
+                int.TryParse(percentString, out percent);
+            }
+
             #region Curtain
             var btnCurtainClose = new Button()
             {
@@ -473,7 +481,7 @@
                 Height = Application.GetMinRealAverage(32),
                 UnSelectedImagePath = "FunctionIcon/Curtain/CurtainCloseIcon.png",
                 SelectedImagePath = "FunctionIcon/Curtain/CurtainCloseOnIcon.png",
-                IsSelected = function.GetAttrState(FunctionAttributeKey.OnOff) == "off",
+                IsSelected = percent == 0,
                 Tag = function.sid + "_off"
             };
             bodyDiv.AddChidren(btnCurtainClose);
@@ -504,7 +512,7 @@
                 UnSelectedImagePath = "FunctionIcon/Curtain/CurtainOpenIcon.png",
                 SelectedImagePath = "FunctionIcon/Curtain/CurtainOpenOnIcon.png",
                 Tag = function.sid + "_on",
-                IsSelected = function.GetAttrState(FunctionAttributeKey.OnOff) == "on",
+                IsSelected = percent != 0,
             };
             bodyDiv.AddChidren(btnCurtainOpen);
             if (function.spk == SPK.CurtainRoller)
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs b/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
index 23f59f9..dcff62d 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
@@ -182,7 +182,11 @@
             {
                 functionList.AddRange(FunctionList.List.GetAirFreshList());
             }
-            functionList.OrderByDescending(o => o.controlCounter).ToList();
+            else if(titleId == StringId.MechanicalArm)
+            {
+                functionList.AddRange(FunctionList.List.GetMechanicalArmList());
+            }
+            functionList = functionList.OrderByDescending(o => o.controlCounter).ToList();
 
             ShowFunctionRow(functionList);
 
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
index ec4c085..7554d49 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -264,6 +264,7 @@
                     break;
                 //姣背娉紶鎰熷櫒(鑷爺鍖楅偖)
                 case SPK.SenesorMegahealth:
+                    case SPK.SensorMmvPose:
                     {
 
                         LogicView.FunTypeView view1 = new LogicView.FunTypeView();
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
index 14e387d..2a295ff 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -281,6 +281,7 @@
                                     }
                                     break;
                                 case SPK.SenesorMegahealth:
+                                case SPK.SensorMmvPose:
                                     {
                                         string key = this.GetKey(dicList);
                                         string value = this.GetValue(dicList);
@@ -2020,6 +2021,7 @@
                     }
                     break;
                 case SPK.SenesorMegahealth:
+                case SPK.SensorMmvPose:
                     {
                         foreach (var dic in dicList)
                         {
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
index d135b77..4c0e435 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
@@ -187,7 +187,7 @@
             var list2 = this.GetVideoDeviceList();
             list.AddRange(list1);
             list.AddRange(list2);
-            this.GetTestDevice(ref list, false);
+            GetTestDevice(ref list, false);
             return list;
         }
         /// <summary>
@@ -423,6 +423,7 @@
                 case SPK.SensorPir:
                 case SPK.SensorDoorWindow:
                 case SPK.SensorUtrasonic:
+                case SPK.SensorMmvPose:
                 case SPK.SenesorMegahealth:
                 case SPK.SenesorMegahealth2:
                 case SPK.SensorEnvironment:
@@ -516,6 +517,7 @@
             || device.spk == SPK.SensorPir
             || device.spk == SPK.SensorDoorWindow
             || device.spk == SPK.SensorUtrasonic
+            || device.spk == SPK.SensorMmvPose
             || device.spk == SPK.SenesorMegahealth
             || device.spk == SPK.SenesorMegahealth2
             || device.spk == SPK.SensorEnvironment
@@ -629,6 +631,7 @@
                 functionTypeList.Add(SPK.SensorPir);
                 functionTypeList.Add(SPK.SensorDoorWindow);
                 functionTypeList.Add(SPK.SensorUtrasonic);
+                functionTypeList.Add(SPK.SensorMmvPose);
                 functionTypeList.Add(SPK.SenesorMegahealth);
                 functionTypeList.Add(SPK.SenesorMegahealth2);
                 functionTypeList.Add(SPK.SensorEnvironment);
@@ -701,6 +704,7 @@
                 functionTypeList.Add(SPK.SensorPir);
                 functionTypeList.Add(SPK.SensorDoorWindow);
                 functionTypeList.Add(SPK.SensorUtrasonic);
+                functionTypeList.Add(SPK.SensorMmvPose);
                 functionTypeList.Add(SPK.SenesorMegahealth);
                 functionTypeList.Add(SPK.SenesorMegahealth2);
                 functionTypeList.Add(SPK.SensorEnvironment);
@@ -761,6 +765,7 @@
                         deviceTypeList.Add(SPK.SensorPir);
                         deviceTypeList.Add(SPK.SensorDoorWindow);
                         deviceTypeList.Add(SPK.SensorUtrasonic);
+                        deviceTypeList.Add(SPK.SensorMmvPose);
                         deviceTypeList.Add(SPK.SenesorMegahealth);
                         deviceTypeList.Add(SPK.SenesorMegahealth2);
                         deviceTypeList.Add(SPK.SensorEnvironment);
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs
index cc9e0f0..802c094 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs
@@ -155,6 +155,7 @@
                             break;
                         case SPK.SenesorMegahealth:
                         case SPK.SenesorMegahealth2:
+                        case SPK.SensorMmvPose:
                             var form1 = new AddSenesorMegahealthDirection1Page();
                             form1.AddForm(device);
                             form1.AddDeviceEvent = (functionObj) => {
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs
index f6824e8..048ce36 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs
@@ -171,6 +171,7 @@
                                 contentView.BeginHeaderRefreshing();
                             });
                             break;
+                        case SPK.SensorMmvPose:
                         case SPK.SenesorMegahealth:
                         case SPK.SenesorMegahealth2:
                             var smPage = new SenesorMegahealthManagerPage();
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/CancelAccountPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/CancelAccountPage.cs
index 30a5652..c64c35c 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/CancelAccountPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/CancelAccountPage.cs
@@ -2,6 +2,7 @@
 using Shared;
 using HDL_ON.UI.CSS;
 using Xamarin.Essentials;
+using HDL_ON.DAL.Server;
 
 namespace HDL_ON.UI
 {
@@ -24,7 +25,277 @@
         /// <summary>
         /// 
         /// </summary>
-        public void LoadPage()
+        public void LoadPage() {
+            var loading = new Loading();
+            this.AddChidren(loading);
+            loading.Start("");
+            new System.Threading.Thread(() => {
+                try
+                {
+                    var pack = new HttpServerRequest().GetUnregisterModel();
+                    if (pack.Code == StateCode.SUCCESS)
+                    {
+                        var data = Newtonsoft.Json.JsonConvert.DeserializeObject<UMode>(pack.Data.ToString());
+                        Application.RunOnMainThread(() =>
+                        {
+                            if (data != null)
+                            {
+                                if (data.model == "APP")
+                                {
+                                    InitView_PreRelease();
+                                }
+                                else
+                                {
+                                    InitView_Release();
+                                }
+                            }
+                            else
+                            {
+                                InitView_PreRelease();
+                            }
+                        });
+                    }
+                    else
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            InitView_PreRelease();
+                        });
+                    }
+                }
+                catch
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        InitView_PreRelease();
+                    });
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        if (loading != null)
+                        {
+                            loading.Hide();
+                            loading.RemoveFromParent();
+                            loading = null;
+                        }
+                    });
+                }
+            }) { IsBackground = true }.Start();
+        }
+
+        public void InitView_PreRelease()
+        {
+            new TopViewDiv(bodyView, Language.StringByID(StringId.CancelAccount)).LoadTopView(CSS_Color.MainBackgroundColor);
+            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+
+            var textView = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(64 + 16),
+                Height = Application.GetRealHeight(90),
+                Width = Application.GetRealWidth(343),
+                Padding = new Padding(Application.GetRealWidth(16), Application.GetRealWidth(16), Application.GetRealWidth(16), Application.GetRealWidth(16)),
+                IsMoreLines = true,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextAlignment = TextAlignment.TopLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Radius = (uint)Application.GetRealHeight(14),
+                BackgroundColor = 0x174484F4,
+            };
+
+            if (Language.CurrentLanguage == "Chinese")
+            {
+                textView.Text = "*娉ㄩ攢璐︽埛鏄笉鍙仮澶嶇殑鎿嶄綔锛屾敞閿�璐︽埛涔嬪悗锛屾偍App鎵�鏈夎处鎴锋暟鎹紙鍖呮嫭鏄电О銆佸ご鍍忋�佷簩缁寸爜鐓х墖绛夛級閮戒細琚垹闄わ紝涓旀棤娉曞啀鎵惧洖銆�";
+            }
+            else
+            {
+                textView.Text = "*Account cancellation is an irreversible operation. After account cancellation, all account data (including nickname, avatar, QR code photo, etc.) of your app will be deleted and cannot be retrieved.";
+            }
+            bodyView.AddChidren(textView);
+
+
+            #region 璐﹀彿濉啓
+            var accountView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(132 + 50),
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealHeight(25),
+            };
+            bodyView.AddChidren(accountView);
+
+            var etAccount = new EditText()
+            {
+                X = Application.GetRealWidth(58),
+                Width = Application.GetRealWidth(343 - 68),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                PlaceholderTextColor = CSS_Color.PromptingColor1,
+                PlaceholderText = Language.StringByID(StringId.PlsEntryPhoneNumber),
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            accountView.AddChidren(etAccount);
+
+            var btnAccountIcon = new Button()
+            {
+                X = Application.GetRealWidth(26),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetMinRealAverage(20),
+                Height = Application.GetMinRealAverage(20),
+                UnSelectedImagePath = "LoginIcon/AccountIcon.png",
+            };
+            accountView.AddChidren(btnAccountIcon);
+
+            #endregion
+
+            #region 瀵嗙爜濉啓
+            var passwordView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(211 + 40),
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(50),
+                Radius = (uint)Application.GetRealHeight(25),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            bodyView.AddChidren(passwordView);
+
+
+            var btnPasswordIcon = new Button()
+            {
+                X = Application.GetRealWidth(26),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetMinRealAverage(20),
+                Height = Application.GetMinRealAverage(20),
+                UnSelectedImagePath = "LoginIcon/PasswordIcon.png",
+            };
+            passwordView.AddChidren(btnPasswordIcon);
+
+            var etPassword = new EditText()
+            {
+                X = Application.GetRealWidth(58),
+                Width = Application.GetRealWidth(343 - 68),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                PlaceholderTextColor = CSS_Color.PromptingColor1,
+                PlaceholderText = Language.StringByID(StringId.PlsEntryPassword),
+                SecureTextEntry = true,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            passwordView.AddChidren(etPassword);
+
+
+            #endregion
+
+
+
+            var btnLogin = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(403),
+                Width = Application.GetRealWidth(220),
+                Height = Application.GetRealWidth(44),
+                Radius = (uint)Application.GetRealWidth(22),
+                SelectedBackgroundColor = CSS_Color.MainColor,
+                BackgroundColor = CSS_Color.PromptingColor1,
+                TextID = StringId.Cancellation,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextAlignment = TextAlignment.Center,
+            };
+            bodyView.AddChidren(btnLogin);
+
+            string account = "";
+            etAccount.TextChangeEventHandler = (sender, e) =>
+            {
+                account = etAccount.Text.Trim();
+                if (account.Length > 0 && etPassword.Text.Trim().Length > 0)
+                {
+                    btnLogin.IsSelected = true;
+                }
+                else
+                {
+                    btnLogin.IsSelected = false;
+                }
+            };
+            etPassword.TextChangeEventHandler += (sender, e) =>
+            {
+                if (etAccount.Text.Trim().Length > 0 && etPassword.Text.Trim().Length > 0)
+                {
+                    btnLogin.IsSelected = true;
+                }
+                else
+                {
+                    btnLogin.IsSelected = false;
+                }
+            };
+
+            btnLogin.MouseUpEventHandler = (sender,e) =>{
+                if (btnLogin.IsSelected)
+                {
+                    var tipMsg = "*鎮ㄥ綋鍓嶆鍦ㄦ敞閿�璐︽埛锛屾敞閿�瀹屾垚鍚庯紝鎮ㄥ湪On Pro App鐨勬墍鏈夋暟鎹潎浼氳鍒犻櫎锛岃璋ㄦ厧鎿嶄綔銆�";
+                    Action action = () => {
+                        var loading = new Loading();
+                        this.AddChidren(loading);
+                        loading.Start("");
+                        var pwd = etPassword.Text.Trim();
+                        new System.Threading.Thread(() => {
+                            try
+                            {
+                                var pack = new HttpServerRequest().Unregister(pwd);
+                                Application.RunOnMainThread(() =>
+                                {
+                                    if (pack.Code == StateCode.SUCCESS)
+                                    {
+                                        //Action okAction = () =>
+                                        //{
+                                            HDLCommon.Current.Logout();
+                                        //};
+                                        //new ConfirmDialog().ShowDialog(StringId.Tip, StringId.IfConfirmLogout, okAction);
+                                    }
+                                    else
+                                    {
+                                        var tip = new Tip()
+                                        {
+                                            Text = pack.message,
+                                            CloseTime = 3,
+                                            Direction = AMPopTipDirection.None
+                                        };
+                                        tip.Show(bodyView);
+                                    }
+                                });
+                            }
+                            catch
+                            {
+                            }
+                            finally
+                            {
+                                Application.RunOnMainThread(() =>
+                                {
+                                    if (loading != null)
+                                    {
+                                        loading.Hide();
+                                        loading.RemoveFromParent();
+                                        loading = null;
+                                    }
+                                });
+                            }
+                        })
+                        { IsBackground = true }.Start();
+
+
+                    };
+                    new PublicAssmebly().TipOptionMsg(StringId.CancelAccount, tipMsg, action, 20);
+
+                }
+            };
+
+        }
+        public void InitView_Release()
         {
             new TopViewDiv(bodyView, Language.StringByID(StringId.CancelAccount)).LoadTopView();
 
@@ -196,6 +467,26 @@
             Utlis.ShowTip(text + "\n" + Language.StringByID(StringId.CopySuccess));
         }
 
+
+        bool isPublishingMode()
+        {
+            DAL.Server.HttpServerRequest http = new DAL.Server.HttpServerRequest();
+            
+            return true;
+        }
+
+    }
+
+    class UMode
+    {
+        public string appCode;
+        public string version;
+        public string releaseSystem;
+        /// <summary>
+        /// APP 锛氱敤鎴峰湪app涓婅嚜鍔╂敞閿�
+        /// APPLY 锛� 鐢ㄦ埛鍙戦偖浠剁粰鍏徃鐢宠娉ㄩ攢
+        /// </summary>
+        public string model;
     }
 
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/MechanicalArmPage.cs b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/MechanicalArmPage.cs
new file mode 100644
index 0000000..d1060d2
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/MechanicalArmPage.cs
@@ -0,0 +1,186 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.DriverLayer;
+using HDL_ON.Entity;
+using HDL_ON.Stan;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI
+{
+    /// <summary>
+	/// 鏈烘鎵嬫帶鍒堕〉闈�
+	/// </summary>
+    public class MechanicalArmPage : DeviceFunctionCardCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+        /// <summary>
+        /// 鍥剧墖鎺т欢
+        /// </summary>
+        private PicViewControl btnPictrue = null;
+        /// <summary>
+        /// 寮�鍏崇姸鎬佹彁绀烘帶浠�
+        /// </summary>
+        private Button btnTipStatus = null;
+
+        /// <summary>
+        /// 寮�鍏虫帶浠�
+        /// </summary>
+        private IconViewControl btnSwitch = null;
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public override void InitFrameWhiteContent()
+        {
+            base.SetTitleText(Language.StringByID(StringId.WaterValve));
+
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent1();
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+            //璇诲彇鐘舵��
+            new System.Threading.Thread(() =>
+            {
+                Control.Ins.ReadFunctionsInfo(new List<string>() { device.deviceId });
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent1()
+        {
+            btnTipStatus = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(79),
+                Width = Application.GetRealWidth(100),
+                Height = Application.GetRealHeight(34),
+                BackgroundColor = 0x171B2D4D,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Radius = (uint)Application.GetRealHeight(17),
+                TextID = StringId.ValveClosed,
+            };
+            FrameWhiteCentet1.AddChidren(btnTipStatus);
+
+            //鍥剧墖鎺т欢
+            this.btnPictrue = new PicViewControl(327, 327);
+            btnPictrue.Y = Application.GetRealHeight(127);
+            btnPictrue.Gravity = Gravity.CenterHorizontal;
+            btnPictrue.UnSelectedImagePath = "FunctionIcon/Electrical/MechanicalArm/MechanicalArmBg.png";
+            btnPictrue.SelectedImagePath = "FunctionIcon/Electrical/MechanicalArm/MechanicalArmOnBg.png";
+            FrameWhiteCentet1.AddChidren(btnPictrue);
+            btnPictrue.ButtonClickEvent += (sender, e) =>
+            {
+                //鍙戦�佸紑鍏冲懡浠�
+                this.SendSwitchComand();
+            };
+
+            //寮�鍏冲浘鏍�
+            this.btnSwitch = new IconViewControl(40);
+            btnSwitch.Gravity = Gravity.CenterHorizontal;
+            btnSwitch.Y = Application.GetRealHeight(468);
+            btnSwitch.UnSelectedImagePath = "Public/PowerClose.png";
+            btnSwitch.SelectedImagePath = "Public/PowerOpen.png";
+            FrameWhiteCentet1.AddChidren(btnSwitch);
+            btnSwitch.ButtonClickEvent += (sender, e) =>
+            {
+                //鍙戦�佸紑鍏冲懡浠�
+                this.SendSwitchComand();
+            };
+
+            var pack = new DAL.Server.HttpServerRequest().GetDeviceInfoList(new List<string>() { base.device.deviceId });
+        }
+        #endregion
+
+        #region 鈻� 璁惧鐘舵�佸弽棣坃______________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佸弽棣�
+        /// </summary>
+        /// <param name="i_LocalDevice"></param>
+        public override void DeviceStatuPush(Function i_LocalDevice)
+        {
+            //涓嶆槸鍚屼竴涓笢瑗�
+            if (this.device.sid != i_LocalDevice.sid) { return; }
+
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+        }
+
+        #endregion
+
+        #region 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        /// <summary>
+        /// 鍙戦�佸紑鍏冲懡浠�
+        /// </summary>
+        private void SendSwitchComand()
+        {
+            //if (!device.online)
+            //{
+            //    new Tip()
+            //    {
+            //        CloseTime = 1,
+            //        Text = Language.StringByID(StringId.DeviceOfflineCannotOption),
+            //        Direction = AMPopTipDirection.None,
+            //    }.Show(MainPage.BaseView);
+            //    return;
+            //}
+            this.btnPictrue.CanClick = false;
+            this.btnSwitch.CanClick = false;
+
+            string statu = this.btnSwitch.IsSelected == true ? "off" : "on";
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                var dic = new Dictionary<string, string>();
+                dic.Add(FunctionAttributeKey.OnOff, statu);
+                Control.Ins.SendWriteCommand(this.device, dic, true);
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    this.btnPictrue.CanClick = true;
+                    this.btnSwitch.CanClick = true;
+                });
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        private void RefreshFormStatu()
+        {
+            Application.RunOnMainThread(() =>
+            {
+                var onoffStatu = device.attributes.Find((obj) => obj.key == FunctionAttributeKey.OnOff);
+
+                if (onoffStatu != null)
+                {
+                    if (onoffStatu.state == "on")
+                    {
+                        btnTipStatus.TextID = StringId.ValveOpened;
+                        btnTipStatus.TextColor = 0xFF4BC803;
+                        btnTipStatus.BackgroundColor = 0x174BC803;
+                    }
+                    else
+                    {
+                        btnTipStatus.TextID = StringId.ValveClosed;
+                        btnTipStatus.TextColor = CSS_Color.FirstLevelTitleColor;
+                        btnTipStatus.BackgroundColor = 0x171B2D4D;
+                    }
+                    this.btnSwitch.IsSelected = this.btnPictrue.IsSelected = onoffStatu.state.ToString() == "on";
+                }
+            });
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs
index 35898ed..cee8a68 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Acst/AcstParentPage.cs
@@ -100,21 +100,21 @@
             Application.RunOnMainThread(() =>
             {
                 if (basePage.sensorDiyView_Temp != null)
-                    basePage.sensorDiyView_Temp.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_temp.ToString()).state);
+                    basePage.sensorDiyView_Temp.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_temp.ToString()).state,true);
                 if (basePage.sensorDiyView_Humi != null)
-                    basePage.sensorDiyView_Humi.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_humidity.ToString()).state);
+                    basePage.sensorDiyView_Humi.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.room_humidity.ToString()).state, true);
                 if (basePage.sensorDiyView_Pm25 != null)
-                    basePage.sensorDiyView_Pm25.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.pm25.ToString()).state);
+                    basePage.sensorDiyView_Pm25.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.pm25.ToString()).state,false);
                 if (basePage.sensorDiyView_Co2 != null)
-                    basePage.sensorDiyView_Co2.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.co2.ToString()).state);
+                    basePage.sensorDiyView_Co2.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.co2.ToString()).state, false);
                 if (basePage.sensorDiyView_Tvoc != null)
-                    basePage.sensorDiyView_Tvoc.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.tvoc.ToString()).state);
+                    basePage.sensorDiyView_Tvoc.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.tvoc.ToString()).state, false);
                 if (basePage.sensorDiyView_EleDay != null)
-                    basePage.sensorDiyView_EleDay.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.day_electricity.ToString()).state);
+                    basePage.sensorDiyView_EleDay.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.day_electricity.ToString()).state, false);
                 if (basePage.sensorDiyView_EleMonth != null)
-                    basePage.sensorDiyView_EleMonth.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.month_electricity.ToString()).state);
+                    basePage.sensorDiyView_EleMonth.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.month_electricity.ToString()).state, false);
                 if (basePage.sensorDiyView_EleActivePower != null)
-                    basePage.sensorDiyView_EleActivePower.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.active_power.ToString()).state);
+                    basePage.sensorDiyView_EleActivePower.UpdateValue(temp.GetAttribute(AcstParent_AttrEnum.active_power.ToString()).state, false);
 
 
 
@@ -1149,7 +1149,7 @@
                 TextAlignment = TextAlignment.Center,
                 TextColor = color,
                 TextSize = 20,
-                Text = value + unitString,
+                Text = value,
             };
             contentView.AddChidren(btnValue);
 
@@ -1160,34 +1160,19 @@
                 TextAlignment = TextAlignment.Center,
                 TextColor = 0xFF949AA5,
                 TextSize = 12,
-                Text = text,
+                Text = text + "(" + unitString+")",
             };
             contentView.AddChidren(btnText);
 
 
-            if (btnValue.Text.Length > 7)
-            {
-                btnValue.TextSize = 16;
-            }
-            else if (btnValue.Text.Length > 9)
-            {
-                btnValue.TextSize = 12;
-            }
 
         }
 
-        public void UpdateValue(string value)
+        public void UpdateValue(string value,bool isInt)
         {
-            if (value.Contains("."))
+            if (value.Contains(".") && isInt)
             {
                 value = value.Remove(value.IndexOf('.'), value.Length - value.IndexOf('.'));
-            }
-            if (btnValue.Text.Length > 8)
-            {
-                btnValue.TextSize = 16;
-            }else if (btnValue.Text.Length > 10)
-            {
-                btnValue.TextSize = 12;
             }
             btnValue.Text = value + unitString;
         }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs
index fb835f5..1c21b73 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SenesorMegahealthPage.cs
@@ -50,7 +50,7 @@
             //璇诲彇鐘舵��
             new System.Threading.Thread(() =>
             {
-                if (device.spk == SPK.SenesorMegahealth|| device.spk == SPK.SenesorMegahealth2)
+                if (device.spk == SPK.SenesorMegahealth || device.spk == SPK.SensorMmvPose || device.spk == SPK.SenesorMegahealth2)
                 {
                     DriverLayer.Control.Ins.SendReadCommand(device, true);
                 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorGasPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorGasPage.cs
index 9057d0f..b17a09f 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorGasPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmSensor/SensorGasPage.cs
@@ -43,10 +43,8 @@
             //璇诲彇鐘舵��
             new System.Threading.Thread(() =>
             {
-                if (device.spk == SPK.SenesorMegahealth|| device.spk == SPK.SenesorMegahealth2)
-                {
-                    DriverLayer.Control.Ins.SendReadCommand(device, true);
-                }
+                DriverLayer.Control.Ins.SendReadCommand(device, true);
+
             })
             { IsBackground = true }.Start();
         }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs b/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
index 4f31eee..d58fb4b 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
@@ -658,7 +658,7 @@
 
             }
 
-            else if(function.spk == SPK.SenesorMegahealth)
+            else if(function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
             {
                 contentView.AddChidren(new Button
                 {

--
Gitblit v1.8.0