From 8407d6631ac8f5b65c4a14fa27babaa48026d4ca Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期四, 30 三月 2023 16:13:40 +0800
Subject: [PATCH] Merge branch 'wjc' into Dev-Branch

---
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorLockOpen.png          |    0 
 HDL-ON_Android/Assets/Language.ini                                              |   41 
 HDL-ON_iOS/HDL-ON_iOS.csproj                                                    |   34 
 HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs               |   87 +
 HDL_ON/Common/ApiUtlis.cs                                                       |    3 
 HDL_ON/UI/UI2/2-Classification/RoomPage.cs                                      |   35 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/HistoryList.png                |    0 
 HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs                    |   40 
 HDL_ON/HDL_ON.projitems                                                         |    6 
 HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs                            |   13 
 HDL-ON_Android/HDL-ON_Android.csproj                                            |   36 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/OneOpenLock.png                |    0 
 HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs                     |   63 +
 HDL_ON/Common/HDLCommon.cs                                                      |   93 +
 HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs                          |   22 
 HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPageBLL.cs                  |   42 
 HDL_ON/Entity/Enumerative/MyEnum.cs                                             |    4 
 HDL_ON/Entity/Room.cs                                                           |    3 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/UnLocking.png                 |    0 
 HDL_ON/UI/UI2/FuntionControlView/Music/View/SizeClass.cs                        |   85 
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs                              |    1 
 HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs                        |    2 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/ObjectClass.cs                   |  104 +
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorlockClose.png        |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/UnLocking.png                  |    0 
 HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs                                   |    1 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/securitydoorezviz.png             |    0 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs                  |  588 ++++++++++
 HDL_ON/Common/Constant.cs                                                       |    4 
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs                           |   17 
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs                         |    2 
 HDL_ON/Entity/DB_ResidenceData.cs                                               |    4 
 HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs                            |   62 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/history.png                   |    0 
 HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard                         |    9 
 HDL_ON/Entity/Function/Function.cs                                              |   17 
 HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs                           |   12 
 HDL_ON/UI/UI2/2-Classification/FunctionPage.cs                                  |    6 
 HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs                                 |   32 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs             |  540 +++++++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/securitydoorezviz.png              |    0 
 HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs                                           |   14 
 HDL-ON_iOS/BlueWifi.cs                                                          |    3 
 HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs                                         |   66 
 HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs                                       |   16 
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                                            |   22 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/HistoryList.png               |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/Cell.png                       |    0 
 HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs                  |   15 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/Cell.png                      |    0 
 HDL_ON/UI/UI2/UserPage.cs                                                       |    3 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/OneOpenLock.png               |    0 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideDoorLockSend.cs              |  237 ++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/UnLocked.png                   |    0 
 HDL_ON/UI/UI2/FuntionControlView/Video/View/ShowDialog.cs                       |  173 ++
 HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs                     |    8 
 HDL-ON_iOS/Resources/Language.ini                                               |   31 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorLockClose.png         |    0 
 HDL-ON_iOS/Resources/en.lproj/Localizable.strings                               |   43 
 HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothAndroidLogic.cs                            |    2 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockListPage.cs         |  222 ++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/VideoDoorLockFunctionBg.png  |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorLockClose.png        |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/RTV.png                        |    0 
 HDL_ON/DAL/DriverLayer/Control.cs                                               |   92 
 HDL_ON/Entity/ResponseEntity/ResidenceMemberInfo.cs                             |   22 
 HDL-ON_iOS/Resources/EZ/Base.lproj/EZVideoTalkViewcontroller.xib                |   20 
 HDL_APP_Project.sln                                                             |   14 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/RTV.png                       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/UnLocked.png                  |    0 
 DLL/IOS/EZSDK.IOS.dll                                                           |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorLockOpen.png         |    0 
 HDL_ON/Entity/FunctionList.cs                                                   |    9 
 HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings                          |    3 
 HDL_ON/DAL/Server/NewAPI.cs                                                     |   46 
 HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/VideoDoorLockFunctionBg.png |    0 
 HDL-ON_Android/Resources/drawable/dialog_background2.xml                        |    2 
 HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard                            |   22 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/StackTraceLog.cs                 |   58 +
 HDL_ON/Common/R.cs                                                              |   58 +
 HDL_ON/DAL/Server/HttpServerRequest.cs                                          |   20 
 HDL_ON/UI/UI2/3-Intelligence/Automation/TimeTpye.cs                             |   11 
 HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs                             |    4 
 DLL/EZvizMonitor/ys.dll                                                         |    0 
 HDL-ON_Android/Resources/drawable/btn_disagree.xml                              |    2 
 HDL-ON_Android/Other/JPush/JPushReceiver.cs                                     |    3 
 86 files changed, 2,929 insertions(+), 320 deletions(-)

diff --git a/DLL/EZvizMonitor/ys.dll b/DLL/EZvizMonitor/ys.dll
index 7c6eb30..8cfec92 100644
--- a/DLL/EZvizMonitor/ys.dll
+++ b/DLL/EZvizMonitor/ys.dll
Binary files differ
diff --git a/DLL/IOS/EZSDK.IOS.dll b/DLL/IOS/EZSDK.IOS.dll
index 5d1bcdc..0751c8a 100644
--- a/DLL/IOS/EZSDK.IOS.dll
+++ b/DLL/IOS/EZSDK.IOS.dll
Binary files differ
diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index 91e148e..6d53d64 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -1127,7 +1127,7 @@
 7155=Distress/Normal
 7156=Distress
 7157=whether to unlock
-7158=is
+7158=Is
 7159=Fall in the alarm
 7160=Someone called the police
 7161=Warning tone
@@ -1135,9 +1135,24 @@
 7163=Video call
 7164=Manipulator
 7165=Area intrusion alarm
-7166=camera
-7167=main switch
+7166=Camera
+7167=Main switch
 7168=PM10
+
+8501=Video door lock
+8502=Electric quantity
+8503=The door is now closed
+8504=The door is not closed
+8505=RVC
+8506=One click to open the lock
+8507=Temporary password
+8508=History
+8509=Fluorite video door lock
+8510=Call from the doorbell
+8511=User Education 
+  
+
+
 
 
 
@@ -2381,6 +2396,26 @@
 7168=PM10
 
 
+8501=瑙嗛闂ㄩ攣
+8502=鐢甸噺
+8503=褰撳墠闂ㄥ凡鍏�
+8504=褰撳墠闂ㄦ湭鍏�
+8505=瀹炴椂瑙嗛
+8506=涓�閿紑閿�
+8507=涓存椂瀵嗙爜
+8508=鍘嗗彶璁板綍
+8509=钀ょ煶瑙嗛闂ㄩ攣
+8510=鏉ヨ嚜鈥滈棬閾冣�濆懠鍙�
+8511=鐢ㄦ埛浜哄憳
+
+
+
+
+
+
+
+
+
 
  
 9000=璇蜂娇鐢ㄦ柊鐨勬墜鏈鸿处鍙风櫥褰旳PP
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/Cell.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/Cell.png
new file mode 100644
index 0000000..5ae517b
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/Cell.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/HistoryList.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/HistoryList.png
new file mode 100644
index 0000000..0ad1a69
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/HistoryList.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/OneOpenLock.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/OneOpenLock.png
new file mode 100644
index 0000000..779d661
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/OneOpenLock.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/RTV.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/RTV.png
new file mode 100644
index 0000000..002d330
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/RTV.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/UnLocked.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/UnLocked.png
new file mode 100644
index 0000000..058119f
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/UnLocked.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/UnLocking.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/UnLocking.png
new file mode 100644
index 0000000..6c15f4f
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/UnLocking.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorLockClose.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorLockClose.png
new file mode 100644
index 0000000..e4d40fb
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorLockClose.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorLockOpen.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorLockOpen.png
new file mode 100644
index 0000000..5d35a45
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorLockOpen.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorlockClose.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorlockClose.png
new file mode 100644
index 0000000..e4d40fb
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/VideoDoorlockClose.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/history.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/history.png
new file mode 100644
index 0000000..7609540
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/history.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/VideoDoorLockFunctionBg.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/VideoDoorLockFunctionBg.png
new file mode 100644
index 0000000..eeba7ab
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/FunctionBg/VideoDoorLockFunctionBg.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/securitydoorezviz.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/securitydoorezviz.png
new file mode 100644
index 0000000..e4d40fb
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Icon/securitydoorezviz.png
Binary files differ
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index ef8047f..dccad48 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -163,15 +163,6 @@
     <Reference Include="videophone">
       <HintPath>..\DLL\FL\Android\videophone.dll</HintPath>
     </Reference>
-    <Reference Include="Square.OkHttp3">
-      <HintPath>..\DLL\EZvizMonitor\Square.OkHttp3.dll</HintPath>
-    </Reference>
-    <Reference Include="Square.OkIO">
-      <HintPath>..\DLL\EZvizMonitor\Square.OkIO.dll</HintPath>
-    </Reference>
-    <Reference Include="ys">
-      <HintPath>..\DLL\EZvizMonitor\ys.dll</HintPath>
-    </Reference>
     <Reference Include="UMSdkDroid">
       <HintPath>..\DLL\UMeng\UMSdkDroid.dll</HintPath>
     </Reference>
@@ -421,6 +412,16 @@
     <AndroidAsset Include="Assets\h5\static\font\SourceHanSansCN-Normal.otf" />
     <AndroidAsset Include="Assets\Phone\MusicIcon\currentPlayList.png" />
     <AndroidAsset Include="Assets\Phone\PersonalCenter\CombinedDimmingIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\OneOpenLock.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\RTV.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\UnLocked.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\UnLocking.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\VideoDoorlockClose.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\VideoDoorLockOpen.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\History.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\Cell.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\FunctionBg\VideoDoorLockFunctionBg.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Icon\securitydoorezviz.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidResource Include="Resources\values\colors.xml" />
@@ -769,14 +770,17 @@
     <PackageReference Include="Xamarin.Android.Support.Constraint.Layout.Solver">
       <Version>1.1.0</Version>
     </PackageReference>
-    <PackageReference Include="Microsoft.AppCenter">
-      <Version>4.2.0</Version>
-    </PackageReference>
     <PackageReference Include="Microsoft.AppCenter.Crashes">
       <Version>4.2.0</Version>
     </PackageReference>
     <PackageReference Include="Microsoft.AppCenter.Analytics">
       <Version>4.2.0</Version>
+    </PackageReference>
+    <PackageReference Include="Microsoft.AppCenter">
+      <Version>4.2.0</Version>
+    </PackageReference>
+    <PackageReference Include="Square.OkHttp3">
+      <Version>3.14.4</Version>
     </PackageReference>
   </ItemGroup>
   <ItemGroup>
@@ -1618,7 +1622,7 @@
     <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\NormallyOpenIcon3.png" />
   </ItemGroup>
   <ItemGroup>
-    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\History.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\HistoryList.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\DoorLock.png" />
@@ -1632,6 +1636,12 @@
     <Folder Include="Assets\Phone\FunctionIcon\Inverter\" />
     <Folder Include="Assets\Phone\FunctionIcon\Electrical\MechanicalArm\" />
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\ys\ys.csproj">
+      <Project>{DF065E3F-C3A1-4908-9582-000974B7C290}</Project>
+      <Name>ys</Name>
+    </ProjectReference>
+  </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" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
diff --git a/HDL-ON_Android/Other/JPush/JPushReceiver.cs b/HDL-ON_Android/Other/JPush/JPushReceiver.cs
index 07f2fcb..e7cfbd3 100644
--- a/HDL-ON_Android/Other/JPush/JPushReceiver.cs
+++ b/HDL-ON_Android/Other/JPush/JPushReceiver.cs
@@ -36,7 +36,6 @@
         {
             //2020-12-23 瑙e喅鐐瑰嚮閫氱煡鏍忔墦寮�涓嶄簡APP闂
             //base.OnNotifyMessageOpened(context, notificationMessage);
-
             OpenNotification(context, notificationMessage);
         }
 
@@ -48,7 +47,7 @@
         public override void OnNotifyMessageArrived(Context context, NotificationMessage notificationMessage)
         {
             base.OnNotifyMessageArrived(context, notificationMessage);
-
+         
             var pushMes = new JPushMessageInfo()
             {
                 Title = notificationMessage.NotificationTitle,
diff --git a/HDL-ON_Android/Resources/drawable/btn_disagree.xml b/HDL-ON_Android/Resources/drawable/btn_disagree.xml
index c129eee..b6d14b6 100644
--- a/HDL-ON_Android/Resources/drawable/btn_disagree.xml
+++ b/HDL-ON_Android/Resources/drawable/btn_disagree.xml
@@ -8,7 +8,7 @@
 
     <!-- 濉厖棰滆壊 -->
     <solid
-        android:color="@color/white"        />
+        android:color="#FFFFFF"/>
 
     <!--    杈规棰滆壊-->
     <stroke
diff --git a/HDL-ON_Android/Resources/drawable/dialog_background2.xml b/HDL-ON_Android/Resources/drawable/dialog_background2.xml
index 47caf57..197bb29 100644
--- a/HDL-ON_Android/Resources/drawable/dialog_background2.xml
+++ b/HDL-ON_Android/Resources/drawable/dialog_background2.xml
@@ -8,6 +8,6 @@
 
     <!-- 濉厖棰滆壊 -->
     <solid
-        android:color="@color/white"        />
+        android:color="#FFFFFF"/>
 
 </shape>
\ No newline at end of file
diff --git a/HDL-ON_iOS/BlueWifi.cs b/HDL-ON_iOS/BlueWifi.cs
index aad7a0c..e0217f9 100644
--- a/HDL-ON_iOS/BlueWifi.cs
+++ b/HDL-ON_iOS/BlueWifi.cs
@@ -30,13 +30,14 @@
         //public string GetPer()
         //{
         //share.
-        //}
+        //}1
 
 
         /// <summary>
         /// 鎼滅储鍒拌摑鐗欒澶囦箣鍚庡埌浠g悊浜嬩欢
         /// </summary>
         FBYBleDeviceBackBlock getBlufiDeviceDelegate;
+
         /// <summary>
         /// 璁惧鎼滅储鍒拌摑鐗欒澶囦箣鍚庡埌浠g悊浜嬩欢
         /// </summary>
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index 2b904d6..60b6ad2 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -26,7 +26,7 @@
         <MtouchLink>Full</MtouchLink>
         <MtouchDebug>true</MtouchDebug>
         <CodesignKey>iPhone Developer</CodesignKey>
-        <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC";-w</MtouchExtraArgs>
+        <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC"</MtouchExtraArgs>
         <CodesignProvision>On+Dev-20210616-1</CodesignProvision>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     </PropertyGroup>
@@ -93,29 +93,29 @@
         <Reference Include="Shared.IOS.HDLSceneSiri">
           <HintPath>..\DLL\IOS\Shared.IOS.HDLSceneSiri.dll</HintPath>
         </Reference>
-        <Reference Include="Shared.IOS.HDLLinphoneSDK">
-          <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath>
-        </Reference>
         <Reference Include="HDL.Shared.IOS.ScanQRCode">
           <HintPath>..\DLL\IOS\HDL.Shared.IOS.ScanQRCode.dll</HintPath>
         </Reference>
         <Reference Include="Shared.IOS">
           <HintPath>..\DLL\Shared.IOS.dll</HintPath>
         </Reference>
-        <Reference Include="Shared.IOS.HDLFVSDK">
-          <HintPath>..\DLL\IOS\Shared.IOS.HDLFVSDK.dll</HintPath>
+        <Reference Include="Shared.IOS.HDLLinphoneSDK">
+          <HintPath>..\DLL\Linphone\iOS\Shared.IOS.HDLLinphoneSDK.dll</HintPath>
         </Reference>
-        <Reference Include="Shared.IOS.ESVideoOnSDK">
-          <HintPath>..\DLL\FL\iOS\Shared.IOS.ESVideoOnSDK.dll</HintPath>
-        </Reference>
-        <Reference Include="EZSDK.IOS">
-          <HintPath>..\DLL\IOS\EZSDK.IOS.dll</HintPath>
+        <Reference Include="Shared.IOS.LCVideoOnSDK">
+          <HintPath>..\DLL\LC\IOS\Shared.IOS.LCVideoOnSDK.dll</HintPath>
         </Reference>
         <Reference Include="Shared.IOS.HDLCNVRSDK">
           <HintPath>..\DLL\IOS\Shared.IOS.HDLCNVRSDK.dll</HintPath>
         </Reference>
-        <Reference Include="Shared.IOS.LCVideoOnSDK">
-          <HintPath>..\DLL\LC\IOS\Shared.IOS.LCVideoOnSDK.dll</HintPath>
+        <Reference Include="Shared.IOS.ESVideoOnSDK">
+          <HintPath>..\DLL\FL\iOS\Shared.IOS.ESVideoOnSDK.dll</HintPath>
+        </Reference>
+        <Reference Include="Shared.IOS.HDLFVSDK">
+          <HintPath>..\DLL\IOS\Shared.IOS.HDLFVSDK.dll</HintPath>
+        </Reference>
+        <Reference Include="EZSDK.IOS">
+          <HintPath>..\DLL\IOS\EZSDK.IOS.dll</HintPath>
         </Reference>
     </ItemGroup>
     <ItemGroup>
@@ -1597,10 +1597,6 @@
       <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\1024.png" />
     </ItemGroup>
     <ItemGroup>
-      <ProjectReference Include="..\HdlBluWi\Blufi.csproj">
-        <Project>{2DDF4C3C-6998-432E-9F43-6786D82F0630}</Project>
-        <Name>Blufi</Name>
-      </ProjectReference>
       <ProjectReference Include="..\SiriIntents\SiriIntents.csproj">
         <IsAppExtension>true</IsAppExtension>
         <Project>{760980F5-1CD3-4F4F-9134-34D87BECD790}</Project>
@@ -1615,6 +1611,10 @@
         <Project>{8B1652FA-5158-4D57-B90D-07BB91766625}</Project>
         <Name>SiriKit</Name>
       </ProjectReference>
+      <ProjectReference Include="..\HdlBluWi\Blufi.csproj">
+        <Project>{2DDF4C3C-6998-432E-9F43-6786D82F0630}</Project>
+        <Name>Blufi</Name>
+      </ProjectReference>
     </ItemGroup>
     <ItemGroup>
       <Content Include="Base.lproj\Intents.intentdefinition" />
diff --git a/HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard b/HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard
index f5af9fc..d802080 100644
--- a/HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard
+++ b/HDL-ON_iOS/Resources/EZ/Base.lproj/AddDevice.storyboard
@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19162" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="1Qq-y9-5Vr">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="1Qq-y9-5Vr">
     <device id="retina4_7" orientation="portrait" appearance="light"/>
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19144"/>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <scenes>
@@ -984,8 +985,8 @@
     </scenes>
     <inferredMetricsTieBreakers>
         <segue reference="9TP-S2-hhI"/>
-        <segue reference="9Lc-Kx-oZS"/>
-        <segue reference="ikM-Zn-H8f"/>
+        <segue reference="Lmt-j9-vhw"/>
+        <segue reference="VYk-37-nb6"/>
     </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 0db5c3a..63dec62 100644
--- a/HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard
+++ b/HDL-ON_iOS/Resources/EZ/Base.lproj/EZMain.storyboard
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17506" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="tPl-Go-Tmu">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="tPl-Go-Tmu">
     <device id="retina4_7" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment version="4352" identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17505"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -35,7 +35,7 @@
                         <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                         <prototypes>
                             <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="R2t-zM-WMl">
-                                <rect key="frame" x="0.0" y="28" width="375" height="44"/>
+                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="R2t-zM-WMl" id="a02-NK-SeS">
                                     <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -222,7 +222,7 @@
                         <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                         <prototypes>
                             <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EZDeviceCell" rowHeight="73" id="Xkg-Dw-w2X" customClass="DeviceListCell">
-                                <rect key="frame" x="0.0" y="28" width="375" height="73"/>
+                                <rect key="frame" x="0.0" y="44.5" width="375" height="73"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Xkg-Dw-w2X" id="Iet-JC-0rQ">
                                     <rect key="frame" x="0.0" y="0.0" width="375" height="73"/>
@@ -356,7 +356,7 @@
                     </tableView>
                     <navigationItem key="navigationItem" id="QiI-QE-qqY">
                         <rightBarButtonItems>
-                            <barButtonItem systemItem="add" id="yGh-cj-oPZ">
+                            <barButtonItem id="yGh-cj-oPZ">
                                 <connections>
                                     <action selector="go2AddDevice:" destination="PUV-T9-WXJ" id="D58-zZ-Ox4"/>
                                 </connections>
@@ -392,7 +392,7 @@
                         <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                         <prototypes>
                             <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EZCameraCell" id="7Im-ni-l3z">
-                                <rect key="frame" x="0.0" y="28" width="375" height="44"/>
+                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="7Im-ni-l3z" id="DdN-J1-0fa">
                                     <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -512,7 +512,7 @@
                         <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                         <prototypes>
                             <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="DemoAPICell" id="wpS-t4-02o">
-                                <rect key="frame" x="0.0" y="28" width="375" height="44"/>
+                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="wpS-t4-02o" id="8mM-ux-z21">
                                     <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -551,7 +551,7 @@
                         <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                         <prototypes>
                             <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="UVM-wN-ME4">
-                                <rect key="frame" x="0.0" y="28" width="375" height="44"/>
+                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="UVM-wN-ME4" id="PFk-ak-8nJ">
                                     <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -648,7 +648,7 @@
                         <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                         <prototypes>
                             <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="VhH-MZ-U0P">
-                                <rect key="frame" x="0.0" y="28" width="375" height="44"/>
+                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VhH-MZ-U0P" id="Kep-2I-4hb">
                                     <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
@@ -1809,7 +1809,7 @@
                         <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                         <prototypes>
                             <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="MessageCell" rowHeight="75" id="St6-kz-bZE" customClass="MessageListCell">
-                                <rect key="frame" x="0.0" y="28" width="375" height="75"/>
+                                <rect key="frame" x="0.0" y="44.5" width="375" height="75"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="St6-kz-bZE" id="gqt-AI-8vk">
                                     <rect key="frame" x="0.0" y="0.0" width="375" height="75"/>
@@ -1927,7 +1927,7 @@
                         <color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                         <prototypes>
                             <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EZSettingCell" id="Mk7-Ag-WW0">
-                                <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
+                                <rect key="frame" x="0.0" y="49.5" width="375" height="44"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Mk7-Ag-WW0" id="Pt3-DC-cCE">
                                     <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
diff --git a/HDL-ON_iOS/Resources/EZ/Base.lproj/EZVideoTalkViewcontroller.xib b/HDL-ON_iOS/Resources/EZ/Base.lproj/EZVideoTalkViewcontroller.xib
index 3d57751..904768e 100644
--- a/HDL-ON_iOS/Resources/EZ/Base.lproj/EZVideoTalkViewcontroller.xib
+++ b/HDL-ON_iOS/Resources/EZ/Base.lproj/EZVideoTalkViewcontroller.xib
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="15705" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina5_9" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment version="2304" identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15706"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -26,7 +27,7 @@
                         <rect key="frame" x="195" y="64" width="160" height="160"/>
                         <color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     </view>
-                    <button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9ko-k4-F0N">
+                    <button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9ko-k4-F0N">
                         <rect key="frame" x="20" y="302" width="85" height="30"/>
                         <color key="backgroundColor" red="0.80782043147208116" green="0.80782043147208116" blue="0.80782043147208116" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                         <state key="normal" title="鍒涘缓鎴块棿">
@@ -42,7 +43,7 @@
                             <action selector="createRoomAction:" destination="333-bP-4tK" eventType="touchUpInside" id="rAq-LO-B2O"/>
                         </connections>
                     </button>
-                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qiF-2z-Rwj">
+                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qiF-2z-Rwj">
                         <rect key="frame" x="145" y="302" width="85" height="30"/>
                         <color key="backgroundColor" red="0.80782043150000005" green="0.80782043150000005" blue="0.80782043150000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                         <state key="normal" title="鍔犲叆鎴块棿">
@@ -73,7 +74,7 @@
                         <fontDescription key="fontDescription" type="system" pointSize="14"/>
                         <textInputTraits key="textInputTraits"/>
                     </textField>
-                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YO9-MU-r4L">
+                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YO9-MU-r4L">
                         <rect key="frame" x="270" y="302" width="85" height="30"/>
                         <color key="backgroundColor" red="0.80782043150000005" green="0.80782043150000005" blue="0.80782043150000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                         <state key="normal" title="绂诲紑鎴块棿">
@@ -90,7 +91,8 @@
                         </connections>
                     </button>
                 </subviews>
-                <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
+                <viewLayoutGuide key="safeArea" id="gRk-Lv-awz"/>
+                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                 <constraints>
                     <constraint firstItem="YO9-MU-r4L" firstAttribute="height" secondItem="9ko-k4-F0N" secondAttribute="height" id="3hn-CA-7hn"/>
                     <constraint firstItem="3UU-E8-PbA" firstAttribute="leading" secondItem="gRk-Lv-awz" secondAttribute="leading" constant="20" id="4Rd-ZV-SEq"/>
@@ -116,7 +118,6 @@
                     <constraint firstItem="6Wf-7i-TE6" firstAttribute="centerY" secondItem="jc8-E1-NYw" secondAttribute="centerY" id="r2S-JH-0Bo"/>
                     <constraint firstItem="qiF-2z-Rwj" firstAttribute="leading" secondItem="9ko-k4-F0N" secondAttribute="trailing" constant="40" id="rkn-HZ-QQp"/>
                 </constraints>
-                <viewLayoutGuide key="safeArea" id="gRk-Lv-awz"/>
             </view>
             <connections>
                 <outlet property="localView" destination="3UU-E8-PbA" id="JEa-Cq-Kuk"/>
@@ -126,4 +127,9 @@
             <point key="canvasLocation" x="-143.19999999999999" y="131.52709359605913"/>
         </viewController>
     </objects>
+    <resources>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
 </document>
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 4b73348..e1a9b45 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -1120,7 +1120,7 @@
 7155=Distress/Normal
 7156=Distress
 7157=whether to unlock
-7158=is
+7158=Is
 7159=Fall in the alarm
 7160=Someone called the police
 7161=Warning tone
@@ -1128,9 +1128,22 @@
 7163=Video call
 7164=Manipulator
 7165=Area intrusion alarm
-7166=camera
-7167=main switch
+7166=Camera
+7167=Main switch
 7168=PM10
+
+8501=Video door lock
+8502=Electric quantity
+8503=The door is now closed
+8504=The door is not closed
+8505=RVC
+8506=One click to open the lock
+8507=Temporary password
+8508=History
+8509=Fluorite video door lock
+8510=Call from the doorbell
+8511=User Education 
+
 
 
 
@@ -2368,6 +2381,18 @@
 7167=鎬绘帶寮�鍏�
 7168=PM10
 
+8501=瑙嗛闂ㄩ攣
+8502=鐢甸噺
+8503=褰撳墠闂ㄥ凡鍏�
+8504=褰撳墠闂ㄦ湭鍏�
+8505=瀹炴椂瑙嗛
+8506=涓�閿紑閿�
+8507=涓存椂瀵嗙爜
+8508=鍘嗗彶璁板綍
+8509=钀ょ煶瑙嗛闂ㄩ攣
+8510=鏉ヨ嚜鈥滈棬閾冣�濆懠鍙�
+8511=鐢ㄦ埛浜哄憳
+
 
 
  
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/Cell.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/Cell.png
new file mode 100644
index 0000000..5ae517b
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/Cell.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/HistoryList.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/HistoryList.png
new file mode 100644
index 0000000..0ad1a69
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/HistoryList.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/OneOpenLock.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/OneOpenLock.png
new file mode 100644
index 0000000..779d661
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/OneOpenLock.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/RTV.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/RTV.png
new file mode 100644
index 0000000..002d330
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/RTV.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/UnLocked.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/UnLocked.png
new file mode 100644
index 0000000..058119f
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/UnLocked.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/UnLocking.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/UnLocking.png
new file mode 100644
index 0000000..6c15f4f
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/UnLocking.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorLockClose.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorLockClose.png
new file mode 100644
index 0000000..e4d40fb
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorLockClose.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorLockOpen.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorLockOpen.png
new file mode 100644
index 0000000..5d35a45
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/VideoDoorLockOpen.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/VideoDoorLockFunctionBg.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/VideoDoorLockFunctionBg.png
new file mode 100644
index 0000000..eeba7ab
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/FunctionBg/VideoDoorLockFunctionBg.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/securitydoorezviz.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/securitydoorezviz.png
new file mode 100644
index 0000000..e4d40fb
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Icon/securitydoorezviz.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/en.lproj/Localizable.strings b/HDL-ON_iOS/Resources/en.lproj/Localizable.strings
index 0e4e516..13d6889 100644
--- a/HDL-ON_iOS/Resources/en.lproj/Localizable.strings
+++ b/HDL-ON_iOS/Resources/en.lproj/Localizable.strings
@@ -28,6 +28,9 @@
 "get_info_fail"="Searching for failed. Poor network.";
 "ad_input_manual"="Manual Input";
 
+"ad_result_verify_local_lock"="Please verify the added primary user fingerprint, key or sensor card within 2 minutes. Click the Verified button after verification";
+"ad_verified"="Verified";
+
 "device_camera_list_title"="Device Channel List";
 "device_input_vierify_code"="Input the device verification code.";
 "device_verify_code_wrong"="Incorrect verification code.";
@@ -64,6 +67,46 @@
 "device_account_pw_empty"="The user name or password is required.";
 "device_lan_preview_title"="Live View via LAN";
 
+"device_open"="Open";
+"device_open_success"="Success to open the door!";
+"device_please_input_door_password"="Input the unlock password";
+"device_history"="History";
+"device_his_no_more_data"="No more data";
+"device_temp_pass"="Temporary password";
+"device_temp_year"=".";
+"device_temp_month"=".";
+"device_temp_date"=".";
+"device_temp_left"="Left";
+"device_temp_times"="times";
+"device_temp_save"="Save";
+"device_temp_valid_date"="Term of validity";
+"device_temp_valid_begin"="Begin";
+"device_temp_valid_end"="End";
+"device_temp_use_times"="Use times";
+"device_temp_user"="User";
+"device_temp_please_select"="Please select";
+"device_temp_unlimited_times"="Unlimited";
+"device_temp_sure"="Sure";
+"device_temp_cancle"="Cancle";
+"device_temp_please_input"="Please input";
+"device_temp_input_use_count_describe"="Enter an integer from 1 to 100. Null means unlimited times";
+"device_temp_input_pure_number"="Please enter a pure number";
+"device_temp_input_valid_number"="Please enter a number between 1-100";
+"device_temp_unit_year"="Y";
+"device_temp_unit_month"="M";
+"device_temp_unit_date"="D";
+"device_temp_unit_hour"="h";
+"device_temp_unit_minute"="m";
+"device_temp_please_input_user_name"="Please input a user name";
+"device_temp_please_select_begin_time"="Please select the start time";
+"device_temp_please_select_end_time"="Please select the end time";
+"device_temp_please_end_time_should_later"="The end time cannot be earlier than the start time";
+"device_temp_unlimited_use_times"="Unlimited times";
+"device_temp_total"="Total ";
+"device_temp_copied"="Copied";
+"device_temp_long_tap_copy"="Long press to copy";
+"device_temp_sure_to_delete"="Are you sure to delete the temporary password?";
+
 "dmessage_title"="Message";
 "message_read"="Mark as Read";
 "message_deleting"="Deleting. Please wait...";
diff --git a/HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings b/HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings
index 7eac42e..bd2e958 100644
--- a/HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings
+++ b/HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings
@@ -69,6 +69,9 @@
 
 "device_open"="寮�闂�";
 "device_open_success"="寮�闂ㄦ垚鍔燂紒";
+"device_please_input_door_password"="璇疯緭鍏ュ紑閿佸瘑鐮�";
+"device_history"="鍘嗗彶璁板綍";
+"device_his_no_more_data"="娌℃湁鏇村鏁版嵁";
 "device_temp_pass"="涓存椂瀵嗙爜";
 "device_temp_year"="骞�";
 "device_temp_month"="鏈�";
diff --git a/HDL_APP_Project.sln b/HDL_APP_Project.sln
index 84800828..3865cd5 100644
--- a/HDL_APP_Project.sln
+++ b/HDL_APP_Project.sln
@@ -18,6 +18,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UMSdk", "UMSdk\UMSdk.csproj", "{5CD1B2DE-1ABD-4B46-8C97-CCB6EA90346A}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ys", "..\ys\ys.csproj", "{DF065E3F-C3A1-4908-9582-000974B7C290}"
+EndProject
 Global
 	GlobalSection(SharedMSBuildProjectFiles) = preSolution
 		HDL_ON\HDL_ON.projitems*{09712674-2a38-407b-b1e2-560b2c352f9a}*SharedItemsImports = 4
@@ -119,6 +121,18 @@
 		{5CD1B2DE-1ABD-4B46-8C97-CCB6EA90346A}.Release|iPhone.Build.0 = Release|Any CPU
 		{5CD1B2DE-1ABD-4B46-8C97-CCB6EA90346A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{5CD1B2DE-1ABD-4B46-8C97-CCB6EA90346A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Release|iPhone.Build.0 = Release|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{DF065E3F-C3A1-4908-9582-000974B7C290}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/HDL_ON/Common/ApiUtlis.cs b/HDL_ON/Common/ApiUtlis.cs
index 0692981..1e28e4d 100644
--- a/HDL_ON/Common/ApiUtlis.cs
+++ b/HDL_ON/Common/ApiUtlis.cs
@@ -229,7 +229,7 @@
                                 foreach (var newFunction in deviceList.list)
                                 {
                                     newFunction.AssembleStatus();
-                                    newFunction.SaveFunctionFile();
+                                    newFunction.SaveFunctionFile(); 
                                     FunctionList.List.IniFunctionList(newFunction.savePath,true);
                                     MainPage.Log($"============璁惧============{iiii++}");
                                 }
@@ -314,6 +314,7 @@
                                 //======================鐧诲綍鍏ㄨ閫�====================
                                 if (isInterphoneType_FREEVIEW)
                                 {
+
 #if __IOS__
                                     List<VisitorTempPassword> dataList = new List<VisitorTempPassword>();
                                     Dictionary<string, object> dictionary = new Dictionary<string, object>();
diff --git a/HDL_ON/Common/Constant.cs b/HDL_ON/Common/Constant.cs
index 0dd7756..92b1527 100644
--- a/HDL_ON/Common/Constant.cs
+++ b/HDL_ON/Common/Constant.cs
@@ -309,6 +309,10 @@
         /// HDL鍙瀵硅
         /// </summary>
         HDL_INTERPHONE,
+        /// <summary>
+        /// 闂ㄩ搩鎺ㄩ��(钀ょ煶瑙嗛闂ㄩ攣)
+        /// </summary>
+        DOOR_BELL,
     }
 
     /// <summary>
diff --git a/HDL_ON/Common/HDLCommon.cs b/HDL_ON/Common/HDLCommon.cs
index afe7b93..800c3d2 100644
--- a/HDL_ON/Common/HDLCommon.cs
+++ b/HDL_ON/Common/HDLCommon.cs
@@ -7,7 +7,6 @@
 using HDL_ON.Entity;
 using System.Threading;
 using HDL_ON.DriverLayer;
-
 namespace HDL_ON
 {
     /// <summary>
@@ -278,6 +277,8 @@
                     {
                         //鎶ヨ鎺ㄩ�佸脊绐楁彁绀�
                         ShowAlarmPushMessage(jpushMessageInfo, true);
+                        //钀ょ煶闂ㄩ攣鎺ㄩ��
+                        HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.DoorLockPush(jpushMessageInfo);
                     }
                     else if (jpushMessageInfo.messageType.Contains(PushMessageType.FLCall.ToString()))
                     {
@@ -304,8 +305,9 @@
                     }
                     else if (jpushMessageInfo.messageType.Contains(PushMessageType.HDL_INTERPHONE.ToString()))
                     {
+
                         if (string.IsNullOrEmpty(jpushMessageInfo.expantContent)) return;
-                        
+
                         //瀛楁鍏煎闂锛屽彧鑳界洿鎺ュ彇鍊间簡
                         var json = Newtonsoft.Json.Linq.JObject.Parse(jpushMessageInfo.expantContent);
                         try
@@ -385,7 +387,15 @@
                     else if (jpushMessageInfo.messageType.Contains(PushMessageType.Prompt.ToString()))
                     {
                         ShowAlarmPushMessage(jpushMessageInfo, false);
+                        //钀ょ煶闂ㄩ攣鎺ㄩ��
+                        HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.DoorLockPush(jpushMessageInfo);
                     }
+                    else if (jpushMessageInfo.messageType.Contains(PushMessageType.DOOR_BELL.ToString()))
+                    {
+                        //钀ょ煶闂ㄩ攣鎺ㄩ��
+                        HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.DoorLockPush(jpushMessageInfo);
+                    }
+
                 }
             }
             catch (Exception EX)
@@ -395,12 +405,12 @@
         }
         //{"code":0,"data":{"list":[{"createTime":"1625798305115","modifyTime":"1625798305115","region":"100000000000000001","id":"1413326644794294273","alarmId":"20210709103818-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709103818-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T10:38:17","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"},{"createTime":"1625798057197","modifyTime":"1625798057197","region":"100000000000000001","id":"1413325604946640898","alarmId":"20210709103413-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709103413-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T10:34:12","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"},{ "createTime":"1625797973320","modifyTime":"1625797973320","region":"100000000000000001","id":"1413325253141004289","alarmId":"20210709103236-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709103236-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T10:32:31","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"},{ "createTime":"1625797782136","modifyTime":"1625797782136","region":"100000000000000001","id":"1413324451261382658","alarmId":"20210709102937-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709102937-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T10:29:37","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"},{ "createTime":"1625797668771","modifyTime":"1625797668771","region":"100000000000000001","id":"1413323975769915394","alarmId":"20210709102743-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709102743-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T10:27:42","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"},{ "createTime":"1625797539846","modifyTime":"1625797539846","region":"100000000000000001","id":"1413323435023466498","alarmId":"20210709102534-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709102534-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T10:25:34","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"},{ "createTime":"1625797530627","modifyTime":"1625797530627","region":"100000000000000001","id":"1413323396351983618","alarmId":"20210709102525-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709102525-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T10:25:25","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"},{ "createTime":"1625796028089","modifyTime":"1625796028089","region":"100000000000000001","id":"1413317094255034369","alarmId":"20210709100024-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709100024-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T10:00:23","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"},{ "createTime":"1625795974558","modifyTime":"1625795974558","region":"100000000000000001","id":"1413316869729746946","alarmId":"20210709095931-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709095931-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T09:59:31","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"},{ "createTime":"1625795966933","modifyTime":"1625795966933","region":"100000000000000001","id":"1413316837748178946","alarmId":"20210709095923-F41014762-1-10000","channelNo":1,"deviceSerial":"F41014762","alarmName":"浜轰綋鎰熷簲浜嬩欢","alarmPicUrl":"https://i.ys7.com/streamer/alarm/url/get?fileId=20210709095923-F41014762-1-10000-2-1&deviceSerialNo=F41014762&cn=1&isEncrypted=0&isCloudStored=0&ct=1&lc=7&bn=1_hikalarm&isDevVideo=0","alarmTime":"2021-07-09T09:59:22","homeId":"1396717478877241345","alarmType":"pir","isChecked":0,"isEncrypt":0,"deleted":0,"tenantId":"20"}],"totalCount":"13","totalPage":"2","pageNo":"1","pageSize":"10"},"timestamp":"1625807415164","isSuccess":true}
         //{"platform":"1","timestamp":"1625805660249","appKey":"HDL-HOME-APP-TEST","sign":"02e433c40485b30451ebdc5ca3cd959c","deviceSerial":"F41014762","homeId":"1396717478877241345"}
-    /// <summary>
-    /// 瑙f瀽涓版灄鍙瀵硅鎺ㄩ�佹暟鎹�
-    /// </summary>
-    /// <param name="jsonStr"></param>
-    /// <returns></returns>
-    ESVideoInfo GetESOnVideoJson(string jsonStr)
+        /// <summary>
+        /// 瑙f瀽涓版灄鍙瀵硅鎺ㄩ�佹暟鎹�
+        /// </summary>
+        /// <param name="jsonStr"></param>
+        /// <returns></returns>
+        ESVideoInfo GetESOnVideoJson(string jsonStr)
         {
             try
             {
@@ -467,7 +477,7 @@
                     //5.鍏ㄨ閫氱櫥鍑�
                     Shared.IOS.HDLFVSDK.Video.Logout();
                     //6.娓呯┖Siri鍏变韩鏁版嵁淇℃伅
-                    new Other.SkipControl().SetData(false, "", "", "","");
+                    new Other.SkipControl().SetData(false, "", "", "", "");
                     var sDM = new SiriKit.SceneDateManager();
                     Console.WriteLine($"IsLogin:{sDM.IsLgoin};accessToken:{sDM.AccessToken};refreshToken:{sDM.RefreshToken};RegionUrl:{sDM.RegionUrl};HomeId:{sDM.HomeId}");
 #endif
@@ -572,9 +582,9 @@
 
         }
 
-#endregion
+        #endregion
 
-#region 鈻� 甯哥敤鏂规硶_______________________
+        #region 鈻� 甯哥敤鏂规硶_______________________
         /// <summary>
         /// 璁剧疆涓嬪垝绾挎寜閽姸鎬�
         /// 缁熶竴灏佽璁剧疆鏂规硶
@@ -649,9 +659,9 @@
                 Control.Ins.SearchLoaclGateway();
             }
         }
-#endregion
+        #endregion
 
-#region 璺宠浆鎵撳紑钀ょ煶浜戞柟娉�
+        #region 璺宠浆鎵撳紑钀ょ煶浜戞柟娉�
 
         /// <summary>
         /// 鑾峰彇瀛愯处鍙穞oken骞惰烦杞澶囧垪琛ㄩ〉闈�
@@ -667,6 +677,7 @@
             {
                 try
                 {
+                    var list = UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.GetVideoDoorLockLockModelsList();
                     //鍏堣幏鍙栬悿鐭充簯瀛愯处鍙穞oken
                     var result = new HttpServerRequest().EZGetChildToken();
                     if (result.Code == StateCode.SUCCESS)
@@ -678,7 +689,9 @@
                         {
                             if (!string.IsNullOrEmpty(ezChildAccessToken))
                             {
+
 #if __IOS__
+
                                 //iOS
                                 //鍒濆鍖栬悿鐭充簯SDK锛屼腑鏂囧浗鍐卥ey銆佽嫳鏂囨捣澶杒ey 寮�鍙戣�呰处鍙蜂娇鐢ㄥ簲鐢ㄥ寘鍚嶇敵璇风殑APPKEY锛屼笉鍚屽寘鍚嶅簲鐢ㄩ渶閰嶇疆涓嶅悓鐨凙PPKEY
                                 EZSDK.IOS.EZSDK.SharedInstance().InitLibWithAppKey("1aa98a90489b4838b966b57018b4b04b", "1aa98a90489b4838b966b57018b4b04b");
@@ -687,16 +700,25 @@
                                 EZSDK.IOS.EZSDK.SharedInstance().SetRequestHttpsHostAndPlatform(OnAppConfig.Instance.RequestHttpsHost, 1, DB_ResidenceData.Instance.CurrentRegion.id);
                                 //2.璁剧疆钀ょ煶瀛愯处鍙风殑AccessToken鍒癝DK
                                 EZSDK.IOS.EZSDK.SharedInstance().SetEZAccessToken(ezChildAccessToken);
-                                //Console.WriteLine("loginToken锛�" + UserInfo.Current.LoginTokenString);
-                                //Console.WriteLine("refreshToken锛�" + UserInfo.Current.RefreshToken);
 
-
-                                ////3.鎵撳紑鎽勫儚澶磋澶囧垪琛ㄩ〉闈�
-                                EZSDK.IOS.EZSDK.SharedInstance().Go2EZvizMonitor();
+                                //////3.鎵撳紑鎽勫儚澶磋澶囧垪琛ㄩ〉闈�
+                                //EZSDK.IOS.EZSDK.SharedInstance().Go2EZvizMonitor();
 
                                 //EZSDK.IOS.EZDeviceInfo info = new EZSDK.IOS.EZDeviceInfo();
                                 //info.de
                                 //EZSDK.IOS.EZSDK.Play(info);
+
+                                //2023骞�03鏈�29鏃�13:08:35 淇敼
+                                Foundation.NSObject[] nSObject = new Foundation.NSObject[list.Count];
+                                for (int i = 0; i < list.Count; i++)
+                                {
+                                    string strValue = list[i];
+                                    nSObject[i] = new Foundation.NSString(strValue);
+                                }
+                                EZSDK.IOS.EZSDK.SharedInstance().ToEZDeviceListViewWithFilterTypes(nSObject);
+
+
+
 #else
                                 //Android
                                 //1.璁剧疆鎵�闇�娌充笢鐨則oken銆佸煙鍚嶅湴鍧�
@@ -708,21 +730,24 @@
                                     {
                                         ((BaseActivity)Shared.Application.Activity).SetPermission(result =>
                                         {
-                                            if(result)
-                                            { 
-                                            Android.Content.Intent intent = new Android.Content.Intent();
-                                            var bundle = new Android.OS.Bundle();
-                                            //浼犻�抧ame鍙傛暟涓簍inyphp
-                                            bundle.PutString("EzChildAccessToken", ezChildAccessToken);
-                                            bundle.PutString("HdlToken", UserInfo.Current.LoginTokenString);
-                                            bundle.PutString("Url", OnAppConfig.Instance.RequestHttpsHost);
-                                            bundle.PutString("EzvizAppKey", "1aa98a90489b4838b966b57018b4b04b");
-                                            bundle.PutInt("Platform", 1);
-                                            bundle.PutString("HomeId", DB_ResidenceData.Instance.CurrentRegion.id);
-                                            intent.PutExtras(bundle);
-                                            intent.SetComponent(new Android.Content.ComponentName(Shared.Application.Activity, "com.videogo.MainActivity"));
-                                            Shared.Application.Activity.StartActivity(intent);
-                                            }
+                                            //2023骞�03鏈�29鏃�13:08:35 淇敼
+                                            Com.Videogo.Hdl.HDLEzvizSdk.Instance.Init(Application.Activity.Application, ezChildAccessToken, UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken, OnAppConfig.Instance.RequestHttpsHost, "1aa98a90489b4838b966b57018b4b04b", 1, DB_ResidenceData.Instance.CurrentRegion.id);
+                                            Com.Videogo.Hdl.HDLEzvizSdk.Instance.JumpToCameraListActivity(Shared.Application.Activity, list);
+                                            //if (result)
+                                            //{
+                                            //    Android.Content.Intent intent = new Android.Content.Intent();
+                                            //    var bundle = new Android.OS.Bundle();
+                                            //    //浼犻�抧ame鍙傛暟涓簍inyphp
+                                            //    bundle.PutString("EzChildAccessToken", ezChildAccessToken);
+                                            //    bundle.PutString("HdlToken", UserInfo.Current.LoginTokenString);
+                                            //    bundle.PutString("Url", OnAppConfig.Instance.RequestHttpsHost);
+                                            //    bundle.PutString("EzvizAppKey", "1aa98a90489b4838b966b57018b4b04b");
+                                            //    bundle.PutInt("Platform", 1);
+                                            //    bundle.PutString("HomeId", DB_ResidenceData.Instance.CurrentRegion.id);
+                                            //    intent.PutExtras(bundle);
+                                            //    intent.SetComponent(new Android.Content.ComponentName(Shared.Application.Activity, "com.videogo.MainActivity"));
+                                            //    Shared.Application.Activity.StartActivity(intent);
+                                            //}
                                         }, "android.permission.RECORD_AUDIO");
 
                                     }
@@ -757,6 +782,6 @@
             { IsBackground = true }.Start();
         }
 
-#endregion
+        #endregion
     }
 }
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index ac5cd29..0795813 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -2062,11 +2062,11 @@
         /// <summary>
         /// 寰簭寰幆
         /// </summary>
-        public const int orderMode =5048;
+        public const int orderMode = 5048;
         /// <summary>
         /// 鍗曟洸鎾斁
         /// </summary>
-        public const int single =5049;
+        public const int single = 5049;
 
 
 
@@ -3122,7 +3122,59 @@
         /// <summary>
         /// PM210
         /// </summary>
-        public const int pm10= 7168;
+        public const int pm10 = 7168;
+
+        /// <summary>
+        /// 瑙嗛闂ㄩ攣
+        /// </summary>
+        public const int shipinmensuo = 8501;
+        /// <summary>
+        /// 鐢甸噺
+        /// </summary>
+        public const int dianliang = 8502;
+        /// <summary>
+        /// 褰撳墠闂ㄥ凡鍏�
+        /// </summary>
+        public const int dangqianmenyiguan = 8503;
+        /// <summary>
+        /// 褰撳墠闂ㄦ湭鍏�
+        /// </summary>
+        public const int dangqianmenweiguan = 8504;
+        /// <summary>
+        /// 瀹炴椂瑙嗛
+        /// </summary>
+        public const int shishishipin = 8505;
+        /// <summary>
+        /// 涓�閿紑閿�
+        /// </summary>
+        public const int yijiankaisuo = 8506;
+        /// <summary>
+        /// 涓存椂瀵嗙爜
+        /// </summary>
+        public const int linshimima1 = 8507;
+        /// <summary>
+        /// 鍘嗗彶璁板綍
+        /// </summary>
+        public const int lishijilu = 8508;
+        /// <summary>
+        /// 钀ょ煶瑙嗛闂ㄩ攣
+        /// </summary>
+        public const int yingshishipinmensuo = 8509;
+        /// <summary>
+        /// 鏉ヨ嚜鈥滈棬閾冣�濆懠鍙�
+        /// </summary>
+        public const int laizimenlinghujiao = 8510;
+        /// <summary>
+        /// 鐢ㄦ埛浜哄憳
+        /// </summary>
+        public const int yonghurenyuan = 8511;
+
+
+
+
+
+
+
 
 
 
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index fba2cc1..29e90a2 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -83,8 +83,10 @@
         /// <summary>
         /// 鍒ゆ柇鏄惁鏈湴鍔犲瘑骞朵笖鍔犲瘑key涓嶄负绌�
         /// </summary>
-        public bool IsLocalEncryptAndGetAesKey {
-            get {
+        public bool IsLocalEncryptAndGetAesKey
+        {
+            get
+            {
                 return IsLocalEncrypt && (!string.IsNullOrEmpty(DB_ResidenceData.Instance.CurrentRegion.localSecret));
             }
         }
@@ -139,7 +141,7 @@
                 if (_GatewayOnline_Cloud != value)
                 {
                     _GatewayOnline_Cloud = value;
-                    if(GatewayOnline_Local)
+                    if (GatewayOnline_Local)
                     {
                         return;
                     }
@@ -249,7 +251,7 @@
         public void SearchLoaclGateway()
         {
             //2021-01-15 : 浣忓畢娌℃湁缁戝畾缃戝叧鐨勬椂鍊欎笉鐢ㄦ悳绱紝骞朵笖涓嶈兘閾炬帴mqtt
-            if(DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId))
+            if (DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId))
             {
                 return;
             }
@@ -308,9 +310,10 @@
         /// </summary>
         public void LoginGateway()
         {
-            if(loginGatewayThread== null)
+            if (loginGatewayThread == null)
             {
-                loginGatewayThread = new System.Threading.Thread(() => {
+                loginGatewayThread = new System.Threading.Thread(() =>
+                {
                     while (!Ins.myTcpClient.isConnected)
                     {
                         if (Ins.GatewayOnline_Local && myTcpClient.isConnected)
@@ -337,7 +340,8 @@
                 try
                 {
                     loginGatewayThread?.Abort();
-                }catch (Exception ex)
+                }
+                catch (Exception ex)
                 {
                     MainPage.Log($"閲嶅惎鐧诲綍缃戝叧绾跨▼寮傚父:{ex.Message}");
                 }
@@ -347,7 +351,7 @@
                     LoginGateway();
                 }
             }
-            
+
         }
 
 
@@ -357,9 +361,9 @@
         public void ControlScene(Scene scene)
         {
             //浣撻獙妯″紡
-            if(MainPage.NoLoginMode)
+            if (MainPage.NoLoginMode)
             {
-                foreach(var sceneFunction in scene.functions)
+                foreach (var sceneFunction in scene.functions)
                 {
                     var revString = "";
                     var upDataObj = new AlinkFunctionStatusObj();
@@ -406,7 +410,7 @@
         /// <param name="function"></param>
         /// <param name="useRemote">鏄惁鐩存帴浣跨敤杩滅▼鍙戦��</param>
         /// <returns></returns>
-        public bool SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3)
+        public bool SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false, int resend = 3)
         {
             function.controlCounter++;
             function.refreshTime = DateTime.Now;
@@ -504,7 +508,7 @@
                         var functionControlDataObj = function.GetGatewayAlinkControlData(commandDictionary);
                         var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson);
-                        new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id,resend);
+                        new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, resend);
                         MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
                     }
                 }
@@ -522,7 +526,7 @@
                                 commandDictionary.Add(FunctionAttributeKey.OnOff, commandDictionary[FunctionAttributeKey.Brightness] == "0" ? "off" : "on");
                             }
                         }
-                        if(function.spk == SPK.LightCCT)
+                        if (function.spk == SPK.LightCCT)
                         {
                             if (!commandDictionary.ContainsKey(FunctionAttributeKey.CCT))
                             {
@@ -546,10 +550,10 @@
         /// <summary>
         /// 鍏ㄥ紑鍏ㄥ叧鍔熻兘
         /// </summary>
-        public void SwtichFunctions(bool open,List<Function> functions)
+        public void SwtichFunctions(bool open, List<Function> functions)
         {
             //dome妯″紡鎺у埗
-            if(MainPage.NoLoginMode)
+            if (MainPage.NoLoginMode)
             {
                 new System.Threading.Thread(() =>
                 {
@@ -557,7 +561,7 @@
                     {
                         Dictionary<string, string> d1 = new Dictionary<string, string>();
                         d1.Add(FunctionAttributeKey.OnOff, open ? "on" : "off");
-                         if (function.spk == SPK.PanelSocket)
+                        if (function.spk == SPK.PanelSocket)
                         {
                             if (function.attributes.Find((obj) => obj.key == "on_off_usb") != null)
                             {
@@ -623,16 +627,16 @@
         {
             var pm = new DAL.Server.HttpServerRequest();
             var pack = pm.GetDeviceInfoList(functionIds);
-            if(pack!= null&& pack.Data!=null)
+            if (pack != null && pack.Data != null)
             {
                 //寰呮祴璇�2021-03-04
                 var ddd = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AlinkStatusData>>(pack.Data.ToString());
-                if(ddd!= null)
+                if (ddd != null)
                 {
-                    foreach(var function in ddd)
+                    foreach (var function in ddd)
                     {
                         var temp = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.deviceId == function.deviceId);
-                        if(temp!= null)
+                        if (temp != null)
                         {
                             if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(temp.spk))
                             {
@@ -648,7 +652,7 @@
         /// 鍙戦�佽鍙栧懡浠�
         /// 鑷姩鍒ゆ柇鏄惁涓篈鍗忚璁惧
         /// </summary>
-        public void SendReadCommand(Function function ,bool forceRemote = false)
+        public void SendReadCommand(Function function, bool forceRemote = false)
         {
             function.refreshTime = DateTime.Now;
             if (forceRemote)
@@ -732,7 +736,7 @@
                             {
                                 busClient.ReadBusData(function);
                             }
-                            
+
                         }
                         catch (Exception ex)
                         {
@@ -776,7 +780,7 @@
         /// <summary>
         /// 瀹夐槻鎺у埗
         /// </summary>
-        public void ControlSecurity(SecurityAlarm securityAlarm,string state)
+        public void ControlSecurity(SecurityAlarm securityAlarm, string state)
         {
             if (!Ins.GatewayOnline_Local)//缃戝叧鏈湴涓嶅湪绾�
             {
@@ -834,7 +838,7 @@
                 };
                 var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData);
                 var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlScene, aLinkJson);
-                new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id,0);
+                new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id, 0);
             }
         }
 
@@ -928,10 +932,10 @@
         /// 杞崲鎺ユ敹鍒扮殑鏁版嵁
         /// </summary>
         /// <returns></returns>
-        public void ConvertReceiveData(byte[] receiveBytes,string ip)
+        public void ConvertReceiveData(byte[] receiveBytes, string ip)
         {
             var reString = Encoding.UTF8.GetString(receiveBytes);
-            AnalysisReceiveData(reString, receiveBytes,ip);
+            AnalysisReceiveData(reString, receiveBytes, ip);
         }
         /// <summary>
         /// 杞崲鎺ユ敹鍒扮殑鏁版嵁
@@ -939,7 +943,7 @@
         /// <param name="receiveString">杞琒tring鍚庣殑鏁版嵁</param>
         /// <param name="originalReceiveBytes"鍘熷Bytes鏁版嵁</param>
         /// <returns></returns>
-        public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes , string sIp = null)
+        public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes, string sIp = null)
         {
             LocalCommunicationData receiveObj = new LocalCommunicationData();
 
@@ -1118,7 +1122,8 @@
                         MainPage.Log($"瀹夐槻灞�鍩熺綉寮傚父锛歿ex.Message}");
                     }
                 }
-                else if (receiveObj.Topic == $"/user/{GatewayId}/custom/gateway/login_reply") {
+                else if (receiveObj.Topic == $"/user/{GatewayId}/custom/gateway/login_reply")
+                {
                     var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(receiveObj.BodyDataString);
                     if (temp.GetValue("objects").ToString().Contains("success"))
                     {
@@ -1161,7 +1166,7 @@
             }
             else
             {
-                if(processedDataList.Count> 50)
+                if (processedDataList.Count > 50)
                 {
                     processedDataList.RemoveAt(0);
                 }
@@ -1175,7 +1180,7 @@
         /// A鍗忚鏁版嵁
         /// </summary>
         /// <param name="updateBytes"></param>
-        public void UpdataFunctionStatus(string revString, byte[] usefulBytes,bool isCloudData = false)
+        public void UpdataFunctionStatus(string revString, byte[] usefulBytes, bool isCloudData = false)
         {
             ////test 浜戠杩炴帴鎴愬姛鏃讹紝涓嶉�傜敤鏈湴鏁版嵁鏇存柊
             //if (Ins.GatewayOnline_Cloud && !isCloudData)
@@ -1218,7 +1223,7 @@
 
                         if (Ins.GatewayOnline_Local && isCloudData)//鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�
                         {
-                            if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(localFunction.spk) && !SPK.MusicSpkList().Contains( localFunction.spk))
+                            if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(localFunction.spk) && !SPK.MusicSpkList().Contains(localFunction.spk))
                             {
                                 //MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�........");
 
@@ -1255,7 +1260,7 @@
                                 break;
                             case SPK.AirSwitch:
                                 AirSwitchPage.UpdataState(localFunction);
-                                if(localFunction.GetAttribute(FunctionAttributeKey.Power)!=null)//濡傛灉鏄甫鐢甸噺鐨勭┖寮�涔熻鏇存柊鑳芥簮鐣岄潰
+                                if (localFunction.GetAttribute(FunctionAttributeKey.Power) != null)//濡傛灉鏄甫鐢甸噺鐨勭┖寮�涔熻鏇存柊鑳芥簮鐣岄潰
                                 {
                                     EnergyMainPage.UpdataStatus(localFunction);
                                 }
@@ -1294,7 +1299,7 @@
                                 CurtainModulePage.UpdataState(localFunction);
                                 break;
                             case SPK.CurtainDream:
-                                if(localFunction.GetAttrState(FunctionAttributeKey.Percent) == "0")
+                                if (localFunction.GetAttrState(FunctionAttributeKey.Percent) == "0")
                                 {
                                     localFunction.SetAttrState(FunctionAttributeKey.OnOff, "off");
                                 }
@@ -1387,7 +1392,7 @@
                             case SPK.SensorTemperature:
                             case SPK.SensorHumidity:
                             case SPK.SensorHcho:
-                                if(localFunction.spk == SPK.SensorTemperature)
+                                if (localFunction.spk == SPK.SensorTemperature)
                                 {
                                     HomePage.LoadEvent_RefreshEnvirIndoorTemp();
                                 }
@@ -1489,7 +1494,7 @@
                             case SPK.AvMusic:
                             case SPK.MusicStandard:
                                 //UI.Music.MusicMain.mMusicMain.RefreshView(updateTemp);
-                                Console.WriteLine("闊充箰鎾斁鍣ㄦ樉绀虹姸鎬�======="+ revString);
+                                Console.WriteLine("闊充箰鎾斁鍣ㄦ樉绀虹姸鎬�=======" + revString);
                                 //wjc
                                 break;
                             case SPK.Inverter:
@@ -1523,12 +1528,12 @@
         /// <summary>
         /// //涓�閿紙杩滅▼锛夊紑閿�
         /// </summary>
-        public void OneKeyUnlocking(Function doorlock,string extStr)
+        public void OneKeyUnlocking(Function doorlock, string extStr)
         {
             if (Ins.GatewayOnline_Local)
             {
                 Dictionary<string, string> dic = new Dictionary<string, string>();
-                var functionControlDataObj = doorlock.GetGatewayAlinkDoorlockData(UserInfo.Current.ID,extStr);
+                var functionControlDataObj = doorlock.GetGatewayAlinkDoorlockData(UserInfo.Current.ID, extStr);
                 var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
                 var sendBytes = Ins.ConvertSendBodyData($"/base/{Control.Ins.GatewayId}/thing/service/doorRemoteOpen/down", functionControlDataJson);
                 new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, 0);
@@ -1543,7 +1548,7 @@
         /// </summary>
         /// <param name="functionId"></param>
         /// <param name="pwd"></param>
-        public void ConfirmUnlocking(string functionId,string pwd)
+        public void ConfirmUnlocking(string functionId, string pwd)
         {
             Loading loading = new Loading();
             MainPage.BaseView.AddChidren(loading);
@@ -1579,8 +1584,10 @@
                         //{
                         //    return false;
                         //}
-                        if (pack.Code != StateCode.SUCCESS) {
-                            Application.RunOnMainThread(() => {
+                        if (pack.Code != StateCode.SUCCESS)
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
                                 new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), pack.message);
                                 UserInfo.Current.doorPasswordString = "";//
                                 UserInfo.Current.LastTimeOpenDoor = DateTime.MinValue;
@@ -1589,8 +1596,9 @@
                     }
                     if (pack.Code != StateCode.SUCCESS)
                     {
-                        Application.RunOnMainThread(() => {
-                            if(string.IsNullOrEmpty(pack.message))
+                        Application.RunOnMainThread(() =>
+                        {
+                            if (string.IsNullOrEmpty(pack.message))
                             {
                                 new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip),
                                     Language.StringByID(StringId.OperationFailed));
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 04c6273..449da8d 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -2928,9 +2928,25 @@
 
         }
 
-#endregion
+        /// <summary>
+        /// 鑾峰彇绗笁鏂规敞鍐岀殑id
+        /// </summary>
+        /// <param homeId="homeId">浣忓畢id</param>
+        /// <returns></returns>
+        public ResponsePackNew GetExtUserId(string homeId)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", homeId);
 
-#region 鈻� 闂ㄩ攣鐩稿叧____________________________
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetExtUserId, requestJson);
+
+            return pack;
+        }
+
+        #endregion
+
+        #region 鈻� 闂ㄩ攣鐩稿叧____________________________
 
         /// <summary>
         /// 鑾峰彇闂ㄩ攣鍘嗗彶璁板綍(鎸夋棩鏈熼檷搴�)
diff --git a/HDL_ON/DAL/Server/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index 726f116..c987e9d 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -474,6 +474,47 @@
         /// 璁惧娑堟伅瑙勫垯閰嶇疆
         /// </summary>
         public const string Api_Post_DeviceMessageRulesSet = "/home-wisdom/app/device/deviceMessageRulesSet";
+
+        #endregion
+
+        #region Kaede -- 钀ょ煶瑙嗛闂ㄩ攣鎺ュ彛____________________________
+        /// <summary>
+        /// 鍒犻櫎璁惧锛堣悿鐭宠棰戦棬閿侊級
+        /// </summary>
+        public const string Api_Post_DeleteDevice = "/home-wisdom/platform/yingshi/child/deleteDevice";
+        /// <summary>
+        /// 鐢垫睜璇︽儏锛堣悿鐭宠棰戦棬閿侊級
+        /// </summary>
+        public const string Api_Post_Details = "/home-wisdom/platform/yingshi/lock/battery/details";
+        /// <summary>
+        /// 闂ㄩ攣鐢ㄦ埛鍒楄〃锛堣悿鐭宠棰戦棬閿侊級
+        /// </summary>
+        public const string Api_Post_UserList = "/home-wisdom/platform/yingshi/lock/user/list";
+        /// <summary>
+        /// 闂ㄩ攣鐘舵�侊紙钀ょ煶瑙嗛闂ㄩ攣锛�
+        /// </summary>
+        public const string Api_Post_Lockstatus = "/home-wisdom/platform/yingshi/lock/status";
+        /// <summary>
+        /// 鑾峰彇鎶ヨ鍒楄〃锛堣悿鐭宠棰戦棬閿侊級
+        /// </summary>
+        public const string Api_Post_Records = "/home-wisdom/platform/yingshi/alarm/records";
+        /// <summary>
+        /// 鍒犻櫎鎶ヨ璁板綍锛堣悿鐭宠棰戦棬閿侊級
+        /// </summary>
+        public const string Api_Post_AlarmDelet= "/home-wisdom/platform/yingshi/alarm/delete";
+        /// <summary>
+        /// 杩滅▼寮�閿侊紙钀ょ煶瑙嗛闂ㄩ攣锛�
+        /// </summary>
+        public const string Api_Post_OpenDoor = "/home-wisdom/platform/yingshi/lock/remote/open/door";
+        /// <summary>
+        /// 闂ㄩ攣鍨嬪彿鍒楄〃锛堣悿鐭宠棰戦棬閿侊級
+        /// </summary>
+        public const string Api_Post_Lock_Models = "/home-wisdom/platform/yingshi/lock/models"; 
+        
+
+
+
+
         #endregion
 
         #region Kaede -- 鍦烘櫙鎺ュ彛____________________________
@@ -802,7 +843,10 @@
         /// </summary>
         public const string Api_Post_GetListHomeFace = "/home-wisdom/app/logic/listHomeFace";
 
-       
+        /// <summary>
+        /// 鑾风涓夋柟娉ㄥ唽userId
+        /// </summary>
+        public const string Api_Post_GetExtUserId = "/community-wisdom/app/visitor/freeview/getExtMemberInfo";
         #endregion
 
 
diff --git a/HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs b/HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs
index 37fc391..ca12ddc 100644
--- a/HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs
+++ b/HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs
@@ -82,7 +82,7 @@
             if (interphoneType == InterphoneType.IMOUVISIAL.ToString())
             {
                 //涔愭鍙瀵硅
-                //1.鍒濆鍖朙COpenSDK_Api
+                //1.鍒濆鍖朙COpenSDK_Api(Shared.IOS.LCVideoOnSDK)
                 LCApiKit.SharedInstance().IsChinaMainland = GetIsChinaMainland();
                 LCApiKit.SharedInstance().InitSDKOpenApi(mESVideoInfo.Lc_AccessToken);
                 LCApiKit.SharedInstance().CurrentDevicePlayToken = mESVideoInfo.Lc_PlayToken;
@@ -98,12 +98,11 @@
             }
             else if(interphoneType == InterphoneType.FLVI.ToString())
             {
+                //Shared.IOS.ESVideoOnSDK
                 ESOnMonitorViewController vc = new ESOnMonitorViewController();
                 vc.MESVideoID = mESVideoInfo.ESVideoUUID;
                 vc.MESRoomID = roomID;
                 vc.DeviceName = mESVideoInfo.DeviceName;
-                //vc.RoomName = mESVideoInfo.RoomName;
-                //vc.MESCallDelegate = new OnESCallDelegate(this);
                 Shared.Application.currentVC.NavigationController.PushViewController(vc, true);
             }
             else if (interphoneType == InterphoneType.HDL.ToString())
@@ -188,7 +187,7 @@
             if (interphoneType == InterphoneType.IMOUVISIAL.ToString())
             {
                 //涔愭鍙瀵硅
-                //1.鍒濆鍖朙COpenSDK_Api
+                //1.鍒濆鍖朙COpenSDK_Api(Shared.IOS.LCVideoOnSDK)
                 LCApiKit.SharedInstance().IsChinaMainland = GetIsChinaMainland();
                 LCApiKit.SharedInstance().InitSDKOpenApi(mESVideoInfo.Lc_AccessToken);
                 //2021-05-18 鐩墠鎺ㄩ�佺殑PlayToken;鏈夐棶棰樹細瀵艰嚧SDK宕╂簝锛屾殏鏃朵笉浼�
@@ -226,6 +225,7 @@
             }
             else if (interphoneType == InterphoneType.FLVI.ToString())
             {
+                //Shared.IOS.ESVideoOnSDK
                 ESOnIntercomViewController vc = new ESOnIntercomViewController();
                 vc.MESVideoID = mESVideoInfo.ESVideoUUID;
                 vc.MESRoomID = roomID;
@@ -568,7 +568,7 @@
 #if __IOS__
         #region OnESCallDelegate
         /////// <summary>
-        /////// OnESCallDelegate 缁ф壙鍝嶅簲浜嬩欢
+        /////// OnESCallDelegate 缁ф壙鍝嶅簲浜嬩欢(Shared.IOS.ESVideoOnSDK)
         /////// </summary>
         OnESCallDelegate mOnESCallDelegate;
 
@@ -644,7 +644,7 @@
 
         #region OnLCCallDelegate
         /////// <summary>
-        /////// OnLCCallDelegate 缁ф壙鍝嶅簲浜嬩欢
+        /////// OnLCCallDelegate 缁ф壙鍝嶅簲浜嬩欢(Shared.IOS.LCVideoOnSDK)
         /////// </summary>
         OnLCCallDelegate mOnLCCallDelegate;
 
@@ -712,7 +712,7 @@
 
         #endregion
 
-       
+
 #endif
 
         ///// <summary>
diff --git a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
index d7f4105..f759daa 100644
--- a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
+++ b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
@@ -95,7 +95,7 @@
             Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().InitalLinPhone();
             //璁剧疆鏀跺埌鏉ョ數鍚庛�佹槸鍚﹂渶鑷姩璺宠浆鍛煎彨椤甸潰鏂规
             Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().IsAutoJumpCallView = IsAutoJumpCallView;
-            //璁剧疆Listener鐩戝惉
+            //璁剧疆Listener鐩戝惉(Shared.IOS.HDLLinphoneSDK)
             mOnHDLLinphoneCallDelegate = new OnHDLLinphoneCallDelegate(this);
             Console.WriteLine(UserInfo.Current.ID);
             Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().HdlLinphoneCallDelegate = mOnHDLLinphoneCallDelegate;
@@ -125,8 +125,7 @@
 
 
 #if __IOS__
-            //Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login("1003", "123456", "192.168.31.194:5060");
-            //Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login("6666", "85521566", "116.62.26.215:5060");
+
             Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login(mHDLSipInfo.sipAccount, mHDLSipInfo.sipPasswd, mHDLSipInfo.realm);
 #else
             if (mInterphoneType == InterphoneType.FREEVIEW.ToString())
@@ -163,7 +162,7 @@
             this.mHDLCallVideoInfo = null;
 #if __IOS__
 
-            HDLLinPhoneSDK.Instance().LogoutAllLinphoneUser();
+            Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().LogoutAllLinphoneUser();
 #else
             HDLLinphoneKit.Instance.Logout();
 #endif
@@ -176,7 +175,7 @@
         {
 #if __IOS__
 
-            HDLLinPhoneSDK.Instance().ClearAllConfigs();
+            Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().ClearAllConfigs();
 #else
             HDLLinphoneKit.Instance.ClearProxyConfig();
 #endif
@@ -427,7 +426,7 @@
 
 #if __IOS__
 
-            HDLLinPhoneSDK.Instance().CallWithUserName(mHDLCallVideoInfo.DeviceSipAccount, mHDLCallVideoInfo.DeviceName);
+            Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().CallWithUserName(mHDLCallVideoInfo.DeviceSipAccount, mHDLCallVideoInfo.DeviceName);
 
 #else
             //1.鍏堝懠鍙澶�
@@ -495,7 +494,7 @@
             {
 #if __IOS__
                 //鑷爺鍙瀵硅
-                HDLLinPhoneSDK.Instance().GotoHDLSRLinphoneIntercomVC(mHDLCallVideoInfo.DeviceName,mHDLCallVideoInfo.DeviceSipAccount);
+                Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().GotoHDLSRLinphoneIntercomVC(mHDLCallVideoInfo.DeviceName, mHDLCallVideoInfo.DeviceSipAccount);
 #else
                 var intent = new Intent(Shared.Application.Activity, typeof(Com.Hdl.Hdllinphonesdk.Activity.HDLLinphoneReverseCallActivity));  
                 if (mHDLCallVideoInfo != null)
@@ -513,7 +512,7 @@
                 if (IsAutoJumpCallView) return;
                 //鍏堢粨鏉熸帀涔嬪墠鐨勭嚎绋�
                 EndCheckIncomingCallThread();
-                //妫�娴嬫槸鍚︽潵鐢典簡濡傛灉鏄洿鎺ヨ皟鏁村懠鍙〉闈㈠鏋滀笉鏄垯寮�鍚嚎绋嬬瓑寰呭垽鏂�
+                //妫�娴嬫槸鍚︽潵鐢典簡濡傛灉鏄洿鎺ヨ皟鏁村懠鍙〉闈㈠鏋滀笉鏄垯寮�鍚嚎绋嬬瓑寰呭垽鏂�(Shared.IOS.HDLLinphoneSDK)
                 if (IsIncomingReceivedCallState())
                 {
                     Utlis.WriteLine("CALL 宸茬粡鏉ョ數浜嗐�傘�傘�傛墦寮�鍛煎彨椤甸潰");
@@ -530,12 +529,13 @@
         }
 
         /// <summary>
-        /// 鏄惁鏉ョ數鐘舵��
+        /// 鏄惁鏉ョ數鐘舵��(Shared.IOS.HDLLinphoneSDK)
         /// </summary>
         /// <returns></returns>
-        bool IsIncomingReceivedCallState() {
+        bool IsIncomingReceivedCallState()
+        {
 #if __IOS__
-             return HDLLinPhoneSDK.Instance().IsIncomingReceivedCallState;
+            return Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().IsIncomingReceivedCallState;
 #else
             return HDLLinphoneKit.Instance.IsIncomingReceivedCallState;
 #endif
@@ -548,7 +548,7 @@
 
 #if __IOS__
 
-            HDLLinPhoneSDK.Instance().GotoHDLLinphoneIntercomVC(mHDLCallVideoInfo.DeviceName);
+            Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().GotoHDLLinphoneIntercomVC(mHDLCallVideoInfo.DeviceName);
 
 #else
             var intent = new Intent(Shared.Application.Activity, typeof(Com.Hdl.Hdllinphonesdk.Activity.HDLLinphoneIntercomActivity));
@@ -597,7 +597,7 @@
                                 threadTime--;
                                 Utlis.WriteLine("CALL 妫�娴嬩腑...." + threadTime);
                                 Thread.Sleep(1000);
-                                //鏉ョ數浜嗭紝璺宠浆鍛煎彨椤甸潰
+                                //鏉ョ數浜嗭紝璺宠浆鍛煎彨椤甸潰(Shared.IOS.HDLLinphoneSDK)
                                 if (IsIncomingReceivedCallState())
                                 {
                                     Utlis.WriteLine("CALL 鏉ョ數浜嗐�傘�傘�傛墦寮�鍛煎彨椤甸潰");
@@ -649,10 +649,10 @@
             return checkIncomingCallThread == null || checkIncomingCallThread.ThreadState != ThreadState.Running;
         }
 
-#endregion
+        #endregion
 
 
-#region 鈻�  --  Android鐩稿叧鎿嶄綔_______________________________
+        #region 鈻�  --  Android鐩稿叧鎿嶄綔_______________________________
 
 #if __Android__
 
@@ -747,23 +747,23 @@
         }
 
 #endif
-#endregion
+        #endregion
 
-#region 鈻�  --  iOS鐩稿叧鎿嶄綔_______________________________
+        #region 鈻�  --  iOS鐩稿叧鎿嶄綔_______________________________
 
 #if __IOS__
 
-#region OnHDLLinphoneCallDelegate
+        #region OnHDLLinphoneCallDelegate
         /// <summary>
         /// 
         /// </summary>
         OnHDLLinphoneCallDelegate mOnHDLLinphoneCallDelegate;
-     
+
         /// <summary>
         /// 
         /// </summary>
         public class OnHDLLinphoneCallDelegate : HDLLinphoneCallDelegate
-        { 
+        {
             [Weak] HDLLinphone hdlLinphone;
 
             public OnHDLLinphoneCallDelegate(HDLLinphone mHDLLinphone)
@@ -799,16 +799,16 @@
             /// <summary>
             /// 鎴浘鎴愬姛
             /// </summary>
-            /// <param name="image"></param>
-            //public override void OnScreenshotSuccessfulAction(UIImage image)
-            //{
-                ////NSData imageData = UIImagePNGRepresentation(image); UIImage
-                //NSData imageData = image.AsPNG();
-                //byte[] dataBytes = new byte[imageData.Length];
-                //System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, dataBytes, 0, Convert.ToInt32(imageData.Length));
-                ////image.g
-                ////hdlLinphone.ScreenshotSuccessfulAction(dataBytes);
-            //}
+            /// <param name = "image" ></ param >
+            public  void OnScreenshotSuccessfulAction(UIImage image)
+            {
+                //NSData imageData = UIImagePNGRepresentation(image); UIImage
+                NSData imageData = image.AsPNG();
+                byte[] dataBytes = new byte[imageData.Length];
+                System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, dataBytes, 0, Convert.ToInt32(imageData.Length));
+                //image.g
+                //hdlLinphone.ScreenshotSuccessfulAction(dataBytes);
+            }
 
             /// <summary>
             /// 寮�閿佹垚鍔�
@@ -825,15 +825,15 @@
             {
                 Utlis.WriteLine("OnIncomingCall :" + userName);
             }
-            
+
 
 
         }
 
-#endregion
+        #endregion
 #endif
 
-#endregion
+        #endregion
 
     }
 
diff --git a/HDL_ON/Entity/DB_ResidenceData.cs b/HDL_ON/Entity/DB_ResidenceData.cs
index 3a0e4ee..207a7dc 100644
--- a/HDL_ON/Entity/DB_ResidenceData.cs
+++ b/HDL_ON/Entity/DB_ResidenceData.cs
@@ -76,7 +76,9 @@
                                     ShowFunction.Sensor,ShowFunction.VideoIntercom,
                                     ShowFunction.SecurityCenter,ShowFunction.Acst,
                                     ShowFunction.MechanicalArm ,
-                                    ShowFunction.SecurityMonitoring,};
+                                    ShowFunction.SecurityMonitoring,
+                                    ShowFunction.VideoDoorLock,
+                    };
                 }
                 return dddd;
             }
diff --git a/HDL_ON/Entity/Enumerative/MyEnum.cs b/HDL_ON/Entity/Enumerative/MyEnum.cs
index a02276c..2fb5ccc 100644
--- a/HDL_ON/Entity/Enumerative/MyEnum.cs
+++ b/HDL_ON/Entity/Enumerative/MyEnum.cs
@@ -185,6 +185,10 @@
         /// ip鎽勫儚澶�
         /// </summary>
         IpCam = 0x25,
+        /// <summary>
+        /// 钀ょ煶瑙嗛闂ㄩ攣
+        /// </summary>
+        VideoDoorLock = 0x26,
 
 
     }
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 0ce3348..af35197 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -1382,6 +1382,7 @@
         /// 闂ㄩ攣
         /// </summary>
         public const string DoorLock = "security.door";
+        
         /// <summary>
         /// 闂ㄩ攣spk鍒楄〃
         /// </summary>
@@ -1392,8 +1393,20 @@
             list.Add(DoorLock);
             return list;
         }
-
-
+        /// <summary>
+        /// 钀ょ煶瑙嗛闂ㄩ攣
+        /// </summary>
+        public const string VideoDoorLock="security.door.ezviz";
+        /// <summary>
+        /// 钀ょ煶瑙嗛闂ㄩ攣spk鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public static List<string> GetVideoDoorLockSPKList()
+        {
+            var list = new List<string>();
+            list.Add(VideoDoorLock);
+            return list;
+        }
 
         #region 鐏厜
         /// <summary>
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index f8e9c99..2f075d3 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -159,6 +159,15 @@
             var spkList = SPK.GetDoorLockSPKList();
             return Functions.FindAll((obj) => spkList.Contains(obj.spk));
         }
+        /// <summary>
+        /// 鑾峰彇钀ょ煶瑙嗛闂ㄩ攣
+        /// </summary>
+        /// <returns></returns>
+        public List<Function> GetVideoDoorLockList()
+        {
+            var spkList = SPK.GetVideoDoorLockSPKList();
+            return Functions.FindAll((obj) => spkList.Contains(obj.spk));
+        }
 
         /// <summary>
         /// 鏂伴鍒楄〃
diff --git a/HDL_ON/Entity/ResponseEntity/ResidenceMemberInfo.cs b/HDL_ON/Entity/ResponseEntity/ResidenceMemberInfo.cs
index 465a0cc..36b2dd1 100644
--- a/HDL_ON/Entity/ResponseEntity/ResidenceMemberInfo.cs
+++ b/HDL_ON/Entity/ResponseEntity/ResidenceMemberInfo.cs
@@ -188,4 +188,26 @@
 
 
     //}
+
+    /// <summary>
+    /// 绗笁鏂规敞鍐屼俊鎭�
+    /// </summary>
+    public class extUserInfo
+    {
+
+        public string extUserId = "";
+
+        public string extPlatform = "";
+
+        public string homeId = "";
+
+        public string extServerIp = "";
+
+        public string extTenantCode = "";
+
+        public string extUUID = "";
+
+        public string extra = "";
+
+    }
 }
diff --git a/HDL_ON/Entity/Room.cs b/HDL_ON/Entity/Room.cs
index 609e788..1fdebfd 100644
--- a/HDL_ON/Entity/Room.cs
+++ b/HDL_ON/Entity/Room.cs
@@ -568,5 +568,6 @@
             scenes.Remove(scenes.Find((obj) => obj.sid == scene.sid));
         }
     }
-  
+
+
 }
\ No newline at end of file
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 5ae2b38..c9da4f9 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -538,6 +538,12 @@
     <Compile Include="$(MSBuildThisFileDirectory)Entity\ResponseEntity\FreeviewMemberInfo.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\CombinedDimming\GroupChooseRoomPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\CombinedDimming\AddGroupControlPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideDoorLockSend.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\StackTraceLog.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\ObjectClass.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\CommonMethod.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorLockPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorLockListPage.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
index 25f51a0..0fe6cc6 100644
--- a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -3,6 +3,7 @@
 using HDL_ON.DAL.Server;
 using HDL_ON.Entity;
 using Shared;
+using static HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod;
 
 namespace HDL_ON.UI
 {
@@ -12,7 +13,7 @@
         /// <summary>
         /// 鍔熻兘鎺у埗鐣岄潰璺宠浆浜嬩欢
         /// </summary>
-        public EventHandler<MouseEventArgs> LoadEvent_SkipFunctionControlPage(Function function, Button btnCollectionIcon, Button btnName, Button btnFromFloor
+        public EventHandler<MouseEventArgs> LoadEvent_SkipFunctionControlPage(Function function, Button btnCollectionIcon, Button btnName, Button btnFromFloor, Comerom comerom,Action action
             )
         {
             EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
@@ -235,7 +236,8 @@
                     case SPK.IpCam_Imou:
 
 #if __IOS__
-                        if (Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().AccessToken==null) {//鏈垵濮嬪寲鎽勫儚澶�
+                        if (Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().AccessToken == null)
+                        {//鏈垵濮嬪寲鎽勫儚澶�
                             Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().InitSDKWithAppKey("HDL-HOME-APP-TEST", "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss", OnAppConfig.Instance.RequestHttpsHost);
                             Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().AccessToken = UserInfo.Current.LoginTokenString;
                             Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().RefreshToken = UserInfo.Current.RefreshToken;
@@ -244,8 +246,6 @@
                         }
                         //璺宠浆澶у崕鎽勫儚澶�
                         Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().RefreshDeviceList();
-                        //Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().ToMonitorViewWithDeviceId(function.extDevId, function.name);
-
                         Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().ToMonitorViewWithDeviceId(function.extDevId, function.name, Shared.Application.currentVC);
 #else
                         FunctionList.List.GetIpCamImouList();
@@ -322,6 +322,14 @@
                         }
 #endif
                         break;
+                    case SPK.VideoDoorLock: {
+                            //钀ょ煶瑙嗛闂ㄩ攣
+                            var form = new VideoDoorLockPage(function, btnName, btnFromFloor,comerom,action);
+                            MainPage.BasePageView.AddChidren(form);
+                            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                            form.Show();
+                        }
+                        break;
                 }
             };
             return eventHandler;
diff --git a/HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothAndroidLogic.cs b/HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothAndroidLogic.cs
index b416038..16f00c6 100644
--- a/HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothAndroidLogic.cs
+++ b/HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothAndroidLogic.cs
@@ -379,6 +379,8 @@
             }
         }
 
+
+      
         /// <summary>
         /// 鎶凷DK鐨勶紝鎴戜篃涓嶇煡閬撹繖涓槸浠�涔�
         /// </summary>
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index 788f78b..70a5fc2 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -725,6 +725,7 @@
             {
                 int index = 0;
                 var list = FunctionList.List.GetDeviceFunctionList();
+
                 foreach (var function in list)
                 {
                     //闊充箰妯″潡鏈変富浠庡叧绯伙紝闇�瑕佺壒娈婂鐞�
@@ -1202,7 +1203,11 @@
                     btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                     btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                 }
-
+                else if (function.spk == SPK.VideoDoorLock)
+                {
+                    btnIcon.UnSelectedImagePath =UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.GetVideoDoorLockIcon(UI2.FuntionControlView.VideoDoorLock.CommonMethod.Comerom.collect);
+                    //btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
+                }
                 else
                 {
                     Button btnSwitch;
@@ -1238,7 +1243,9 @@
                 };
 
 
-                var skipControlPageEvent = new PublicAssmebly().LoadEvent_SkipFunctionControlPage(function, btnCollection, btnName, btnZone);
+                var skipControlPageEvent = new PublicAssmebly().LoadEvent_SkipFunctionControlPage(function, btnCollection, btnName, btnZone, UI2.FuntionControlView.VideoDoorLock.CommonMethod.Comerom.collect,()=> {
+                    this.LoadDeviceFunctionControlZone();//鍒犻櫎璁惧鍚庨噸鏂板埛鏂癠I
+                });
                 view.MouseUpEventHandler = skipControlPageEvent;
                 btnName.MouseUpEventHandler = skipControlPageEvent;
                 btnIcon.MouseUpEventHandler = skipControlPageEvent;
@@ -1452,11 +1459,14 @@
 
                 LoadEvent_ControlScene(btnCoverd, btnName, btnZone, btnShowDelay, scene);
 
-                btnSettingIcon.MouseUpEventHandler = (sender, e) => {
-                    Action backAction = () => {
+                btnSettingIcon.MouseUpEventHandler = (sender, e) =>
+                {
+                    Action backAction = () =>
+                    {
                         //LoadSceneFunctionControlZone();
                     };
-                    Action refreshAction = () => {
+                    Action refreshAction = () =>
+                    {
                         btnName.Text = scene.name;
                         btnZone.Text = scene.GetRoomListName();
                         //view.BackgroundImagePath = (scene as Scene).ImagePath;
@@ -1465,7 +1475,7 @@
                     };
                     var aep = new SceneEditPage(scene, backAction);
                     MainPage.BasePageView.AddChidren(aep);
-                    aep.LoadPage( refreshAction);
+                    aep.LoadPage(refreshAction);
                     MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                 };
                 //鍦烘櫙姝e湪鍊掕鏃舵墽琛屼腑
diff --git a/HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs b/HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs
index b2635af..30afa04 100644
--- a/HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs
@@ -832,6 +832,7 @@
             {
                 if (bodyView != null)
                 {
+
                     //Utlis.WriteLine("GetPushMessageAction M鏀跺埌鎺ㄩ��");
                     GetPushMessageList(showMesType);
                 }
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
index 04ca7f2..3a04c19 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -5,6 +5,7 @@
 using HDL_ON.Entity;
 using HDL_ON.UI;
 using HDL_ON.UI.CSS;
+using HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using Shared;
@@ -605,21 +606,35 @@
             };
         }
 
-
         /// <summary>
         /// 鍔犺浇鍔熻兘鍒楄〃鐣岄潰
         /// </summary>
-        void LoadFunctionPageView()
+        void LoadFunctionPageView ()
         {
-            #region
             functionsPageView = new VerticalScrolViewLayout()
             {
                 BackgroundColor = CSS_Color.BackgroundColor,
                 Height = Application.GetRealHeight(667 - 64 - 49 + 20),
             };
             contentPageView.AddChidren(functionsPageView);
+            this.RefreshFunctionView();
 
-            FrameLayout functionContentView;
+        }
+        FrameLayout functionContentView;
+        /// <summary>
+        /// 鏄剧ず鍔熻兘鍒楄〃鐣岄潰
+        /// </summary>
+        void RefreshFunctionView()
+        {
+            #region
+            //functionsPageView = new VerticalScrolViewLayout()
+            //{
+            //    BackgroundColor = CSS_Color.BackgroundColor,
+            //    Height = Application.GetRealHeight(667 - 64 - 49 + 20),
+            //};
+            //contentPageView.AddChidren(functionsPageView);
+
+            //FrameLayout functionContentView;
             functionContentView = new FrameLayout()
             {
                 Y = Application.GetRealHeight(16),
@@ -745,6 +760,14 @@
                         functionCount = FunctionList.List.GetAcstParentList().Count;
                         functionOnCount = FunctionList.List.GetAcstParentList().FindAll((obj) => obj.trait_on_off.curValue.ToString() == "on").Count;
                         break;
+                    case ShowFunction.VideoDoorLock:
+                        functionCount = FunctionList.List.GetVideoDoorLockList().Count;
+#if DEBUG
+                        //functionCount = 1;
+#endif
+                        functionOnCount = 1;
+                        break;
+
 
 
                 }
@@ -798,7 +821,7 @@
                     TextAlignment = TextAlignment.CenterLeft,
                     IsMoreLines = true,
                 };
-                functionView.AddChidren(btnName);
+                functionView.AddChidren(btnName); 
 
                 if (item != ShowFunction.Environmental && item != ShowFunction.Sensor && item != ShowFunction.VideoIntercom
                     && item != ShowFunction.SecurityMonitoring && item != ShowFunction.FreshAir && item != ShowFunction.Music
@@ -1143,16 +1166,35 @@
                             MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                         };
                         break;
-
+                    case ShowFunction.VideoDoorLock:
+                        //钀ょ煶瑙嗛闂ㄩ攣
+                        btnName.TextID = StringId.yingshishipinmensuo;
+                        btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
+                        {
+                            var list =CommonMethod.Current.GetVideoDoorLockList();
+                            var form = new VideoDoorLockListPage(()=> {
+                                functionContentView?.RemoveFromParent();
+                                this.RefreshFunctionView();
+                            });
+                            form.AddForm(list);
+                        };
+                        break;
 
                 }
-                //鐣岄潰璺宠浆--闊充箰璺宠浆鑷繁鐨勭晫闈�--鐜璺宠浆鑷繁鐨勭晫闈�
-                if (item != ShowFunction.Music && item != ShowFunction.Environmental && item != ShowFunction.SecurityMonitoring && item != ShowFunction.DoorLock
-                    && ShowFunction.EnergyMonitoring != item && ShowFunction.VideoIntercom != item && ShowFunction.SecurityCenter != item
+                //鐣岄潰璺宠浆--闊充箰璺宠浆鑷繁鐨勭晫闈�--鐜璺宠浆鑷繁鐨勭晫闈�--(钀ょ煶瑙嗛闂ㄩ攣)璺宠浆鑷繁鐨勭晫闈�
+                if (item != ShowFunction.VideoDoorLock
+                    && item != ShowFunction.Music
+                    && item != ShowFunction.Environmental
+                    && item != ShowFunction.SecurityMonitoring
+                    && item != ShowFunction.DoorLock
+                    && ShowFunction.EnergyMonitoring != item
+                    && ShowFunction.VideoIntercom != item &&
+                    ShowFunction.SecurityCenter != item
                     && ShowFunction.Acst != item)
                 {
                     btnFunctionViewBg.MouseUpEventHandler = (sender, e) =>
                     {
+
                         var skipView = new FunctionPage();
                         MainPage.BasePageView.AddChidren(skipView);
                         skipView.LoadPage(functionPageTitleId);
@@ -1444,6 +1486,8 @@
             #endregion
         }
 
+       
+
         void refreshInverterInfo(Button btnPowerTenerationToday, Button btnWorkingMode, Button btnCurrentPowerGeneration)
         {
             new System.Threading.Thread(() =>
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
index 5160aa0..221c195 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -38,12 +38,18 @@
         /// 鏄惁鍦ㄨ皟鍏�
         /// </summary>
         bool onDimmerBar;
+        /// <summary>
+        /// 鍒犻櫎璁惧鍚庡洖璋冪粰鐣岄潰鍒锋柊
+        /// </summary>
+        Action action;
+
         #endregion
-        public FunctionControlZone(Function func)
+        public FunctionControlZone(Function func,Action action)
         {
             bodyDiv = this;
             bodyDiv.Tag = func.sid;
             function = func;
+            this.action = action;
         }
 
         public override void RemoveFromParent()
@@ -186,6 +192,10 @@
             {
                 btnIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/DoorLock.png";
             }
+            else if (function.spk == SPK.VideoDoorLock)
+            {
+                btnIcon.UnSelectedImagePath = UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.GetVideoDoorLockIcon(UI2.FuntionControlView.VideoDoorLock.CommonMethod.Comerom.function);
+            }
             else if (function.spk == SPK.HvacCac)
             {
                 var btnHumidityIcon = new Button()
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
index f2a4587..1fb2267 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZoneBLL.cs
@@ -405,7 +405,7 @@
         /// </summary>
         void LoadEvent_DivSkipEvent()
         {
-            var eventHandler = new PublicAssmebly().LoadEvent_SkipFunctionControlPage(function, btnCollectionIcon, btnName, btnFromFloor);
+            var eventHandler = new PublicAssmebly().LoadEvent_SkipFunctionControlPage(function, btnCollectionIcon, btnName, btnFromFloor, UI2.FuntionControlView.VideoDoorLock.CommonMethod.Comerom.room,this.action);
             this.MouseUpEventHandler = eventHandler;
             btnName.MouseUpEventHandler = eventHandler;
             btnFromFloor.MouseUpEventHandler = eventHandler;
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs b/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
index 2a74a67..74b7a31 100644
--- a/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionPage.cs
@@ -255,7 +255,7 @@
                             }
                             if (function.spk == SPK.LightRGBW || function.spk == SPK.LightRGB || function.spk == SPK.LightDimming)
                             {
-                                var functionDiv = new FunctionControlZone(function)
+                                var functionDiv = new FunctionControlZone(function,null)
                                 {
                                     Gravity = Gravity.CenterHorizontal,
                                     Width = Application.GetRealWidth(343),
@@ -272,7 +272,7 @@
                             }
                             else if (function.spk == SPK.IpCam_Imou)
                             {
-                                var functionDiv = new FunctionControlZone(function)
+                                var functionDiv = new FunctionControlZone(function,null)
                                 {
                                     Gravity = Gravity.CenterHorizontal,
                                     Width = Application.GetRealWidth(343),
@@ -289,7 +289,7 @@
                             }
                             else
                             {
-                                var functionDiv = new FunctionControlZone(function)
+                                var functionDiv = new FunctionControlZone(function,null)
                                 {
                                     Gravity = Gravity.CenterHorizontal,
                                     Width = Application.GetRealWidth(343),
diff --git a/HDL_ON/UI/UI2/2-Classification/RoomPage.cs b/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
index ab78fd4..3c04eec 100644
--- a/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/RoomPage.cs
@@ -53,6 +53,7 @@
             deleteAction = delAction;
             this.modifyImageAction = modifyImageAction;
         }
+
         /// <summary>
         /// 閲嶈浇鐣岄潰
         /// </summary>
@@ -65,22 +66,25 @@
             }
         }
 
+
         public void LoadPage()
         {
             bodyView.BackgroundColor = CSS_Color.BackgroundColor;
 
-            new TopViewDiv(bodyView,room.roomName).LoadTopView_RoomTop(ReloadRoomName, skipEditPageAction);
+            new TopViewDiv(bodyView, room.roomName).LoadTopView_RoomTop(ReloadRoomName, skipEditPageAction);
 
             functionListView = new VerticalScrolViewLayout()
             {
                 Y = Application.GetRealHeight(64),
-                Height = Application.GetRealHeight(603-12),
+                Height = Application.GetRealHeight(603 - 12),
             };
             bodyView.AddChidren(functionListView);
 
-            foreach (var function in room.GetRoomFunctions(false))
+            var list = room.GetRoomFunctions(false);
+
+            foreach (var function in list)
             {
-                if (MainPage.RoomNotSupportFunctionList.Contains( function.spk))
+                if (MainPage.RoomNotSupportFunctionList.Contains(function.spk))
                 {
                     continue;
                 }
@@ -89,7 +93,7 @@
 
                 if (function.spk == SPK.LightRGB || function.spk == SPK.LightDimming)
                 {
-                    var functionDiv = new FunctionControlZone(function)
+                    var functionDiv = new FunctionControlZone(function, null)
                     {
                         Gravity = Gravity.CenterHorizontal,
                         Width = Application.GetRealWidth(343),
@@ -105,7 +109,10 @@
                 }
                 else
                 {
-                    var functionDiv = new FunctionControlZone(function)
+                    var functionDiv = new FunctionControlZone(function, () =>
+                    {
+                        this.ReLoadPage();
+                    })
                     {
                         Gravity = Gravity.CenterHorizontal,
                         Width = Application.GetRealWidth(343),
@@ -132,7 +139,7 @@
                     BorderColor = 0x00FFFFFF,
                     BorderWidth = 1,
                     BackgroundColor = CSS_Color.MainBackgroundColor,
-                    Tag = "Scene-" +  scene.sid
+                    Tag = "Scene-" + scene.sid
                 };
                 functionListView.AddChidren(sceneRow);
                 LoadSceneRow(sceneRow, scene);
@@ -147,7 +154,7 @@
         /// </summary>
         public void LoadSceneRow(FrameLayout bodyDiv, Scene scene)
         {
-          var  btnIcon = new Button()
+            var btnIcon = new Button()
             {
                 X = Application.GetRealWidth(10),
                 Y = Application.GetRealHeight(15),
@@ -214,15 +221,15 @@
                 btnName.X = Application.GetRealWidth(52 + 16);
             }
             //鍔犺浇鍦烘櫙鎺у埗浜嬩欢
-            LoadEvent_ControlScene(btnName,btnFromFloor,bodyDiv,scene );
+            LoadEvent_ControlScene(btnName, btnFromFloor, bodyDiv, scene);
 
-            LoadEvent_FunctionCollection(btnCollectionIcon,scene);
+            LoadEvent_FunctionCollection(btnCollectionIcon, scene);
         }
 
         /// <summary>
         /// 鍔犺浇鍔熻兘鏀惰棌鎸夐挳浜嬩欢
         /// </summary>
-        void LoadEvent_FunctionCollection(Button btnCollectionIcon,Scene scene)
+        void LoadEvent_FunctionCollection(Button btnCollectionIcon, Scene scene)
         {
             btnCollectionIcon.MouseUpEventHandler += (sender, e) =>
             {
@@ -233,9 +240,10 @@
         /// <summary>
         /// 鍔犺浇鍦烘櫙鎺у埗浜嬩欢
         /// </summary>
-        void LoadEvent_ControlScene(Button btnName,Button btnFromFloor,FrameLayout bodyDiv, Scene scene)
+        void LoadEvent_ControlScene(Button btnName, Button btnFromFloor, FrameLayout bodyDiv, Scene scene)
         {
-            EventHandler<MouseEventArgs> upEvent = (sender, e) => {
+            EventHandler<MouseEventArgs> upEvent = (sender, e) =>
+            {
                 DriverLayer.Control.Ins.ControlScene(scene);
                 string msg = scene.name + Language.StringByID(StringId.AlreadyOpened);
                 new PublicAssmebly().TipMsgAutoClose(msg, false);
@@ -245,5 +253,6 @@
             bodyDiv.MouseUpEventHandler = upEvent;
         }
 
+
     }
 }
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
index 6faca99..ef2c271 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -619,7 +619,25 @@
                         }
                     }
                     break;
-                    
+                //钀ょ煶瑙嗛闂ㄩ攣
+                case SPK.VideoDoorLock:
+                    {
+                        LogicView.FunTypeView view1 = new LogicView.FunTypeView();
+                        view1.btnText.TextID=StringId.yonghurenyuan;
+                        view1.btnText.Name = Language.StringByID(StringId.shipinmensuo);
+                        fLayout.AddChidren(view1.FLayoutView());
+                        view1.btnClick.MouseUpEventHandler += (sender, e) =>
+                        {
+                            this.identifier = "open_door";//寮�閿佷簨浠�
+                            this.VideoDoorLockAction(this, device, view1.btnState);
+                        };
+                        if (edit)
+                        {
+                            this.GetEditState(device, index, view1.btnState,null, null, null);
+                        }
+                    }
+                    break;
+
             }
             #region  淇濆瓨
             ///淇濆瓨View
@@ -669,6 +687,12 @@
                         //condition榛樿[]
                         inputDevice.condition = new List<Dictionary<string, string>>();
                     }
+                }
+                else if (device.spk == SPK.VideoDoorLock)
+                {
+                    ////钀ょ煶瑙嗛闂ㄩ攣
+                    inputDevice.condition_type = "9";
+                    inputDevice.identifier = this.identifier;
                 }
 
 
@@ -1045,7 +1069,7 @@
             {
                 try
                 {
-                   var faceIDList = Send.Current.GetListHomeFace(device.deviceId,true);
+                    var faceIDList = Send.Current.GetListHomeFace(device.deviceId, true);
                     List<string> faceNameList = new List<string>();
                     for (int i = 0; i < faceIDList.Count; i++)
                     {
@@ -1070,6 +1094,65 @@
                     });
                 }
                 catch { }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loading.Hide();
+                    });
+                }
+
+            });
+
+        }
+
+        /// <summary>
+        /// 钀ょ煶瑙嗛闂ㄩ攣涓撶敤
+        /// </summary>
+        /// <param name="frame">褰撳墠鐣岄潰</param>
+        /// <param name="device">褰撳墠璁惧</param>
+        /// <param name="btnState">鏃х姸鎬�</param>
+        public void VideoDoorLockAction(FrameLayout frame, Entity.Function device, Button btnState)
+        {
+            selectedState = device.spk + "_";
+            Loading loading = new Loading();
+            frame.AddChidren(loading);
+            loading.Start();
+            System.Threading.Tasks.Task.Run(() =>
+            {
+                try
+                {
+                    var userList =FuntionControlView.VideoDoorLock.VideDoorLockSend.Current.GetVideoDoorLockUserListInfo(device);
+                    List<string> userNameList = new List<string>();
+                    for (int i = 0; i < userList.Count; i++)
+                    {
+                        var user = userList[i];
+                        userNameList.Add(user.extUserName);
+                    }
+                    Application.RunOnMainThread(() =>
+                    {
+                        loading.Hide();
+                        PublicInterface publicInterface = new PublicInterface();//鐢ㄦ埛鐣岄潰
+                        publicInterface.FrameOrVv(this, userNameList, new List<string> { btnState.Text }, device.name, (index) =>
+                        {
+                            var userId = userNameList[index];
+                            //鐣岄潰鏄剧ず閫変腑鍊�
+                            btnState.Text = userId;
+                            //鏁版嵁灏佽
+                            AddDictionary("open_user", userId, "string");
+
+                        }, false);
+
+                    });
+                }
+                catch { }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        loading.Hide();
+                    });
+                }
 
             });
 
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
index 16f5d56..58b303f 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -407,6 +407,12 @@
                                         }
                                     }
                                     break;
+                                case SPK.VideoDoorLock:
+                                    {
+                                        string value = this.GetValue(dicList);
+                                        inputView.btnState.Text = value;
+                                    }
+                                    break;
                                 case SPK.doorgate:
                                     {
                                         if (inputCondition.identifier == "door_call_cloud_event")
@@ -2131,6 +2137,15 @@
                         }
                     }
                     break;
+                case SPK.VideoDoorLock:
+                    {
+                        foreach (var dic in dicList)
+                        {
+                            string value = dic["value"];
+                            button1.Text = value;
+                        }
+                    }
+                    break;
                 case SPK.MusicStandard:
                 case SPK.AvMusic:
                     {
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/LogicMethod.cs
index 91ba766..c0e98f6 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);
-            //GetTestDevice(ref list, true);
+            GetTestDevice(ref list, true);
             return list;
         }
         /// <summary>
@@ -360,7 +360,8 @@
             {
                 return "LogicIcon/sensor.png";
             }
-            else if (SPK.DoorLock == device.spk)
+            else if (SPK.DoorLock == device.spk
+                || SPK.VideoDoorLock == device.spk)
             {
                 return "FunctionIcon/DoorLock/DoorLock.png";
             }
@@ -519,7 +520,7 @@
                 deviceStrTypeList.Add(Language.StringByID(StringId.Curtain));
             }
             ///绌鸿皟绫�
-            var ac = deviceList.Find((device) => device.spk == SPK.AcStandard || device.spk == SPK.AcIr || device.spk == SPK.HvacAC);
+            var ac = deviceList.Find((device) => device.spk == SPK.AcStandard || device.spk == SPK.HvacAC|| device.spk == SPK.AcIr);
             if (ac != null)
             {
                 deviceStrTypeList.Add(Language.StringByID(StringId.AC));
@@ -577,7 +578,8 @@
                 deviceStrTypeList.Add(Language.StringByID(StringId.Electric));
             }
             ///闂ㄩ攣绫�
-            var doorlock = deviceList.Find((device) => device.spk == SPK.DoorLock);
+            var doorlock = deviceList.Find((device) => device.spk == SPK.DoorLock
+            || device.spk == SPK.VideoDoorLock);
             if (doorlock != null)
             {
                 deviceStrTypeList.Add(Language.StringByID(StringId.DoorLock));
@@ -698,6 +700,7 @@
             else if (deviceType == Language.StringByID(StringId.DoorLock))
             {
                 functionTypeList.Add(SPK.DoorLock);
+                functionTypeList.Add(SPK.VideoDoorLock);
             }
             ///闊充箰绫�
             else if (deviceType == Language.StringByID(StringId.Music))
@@ -776,6 +779,8 @@
                 functionTypeList.Add(SPK.MechanicalArm);
                 functionTypeList.Add(SPK.IpCam_Imou);
                 functionTypeList.Add(SPK.SensorPm10);
+                functionTypeList.Add(SPK.VideoDoorLock);
+                functionTypeList.Add(SPK.AcIr);
 
             }
 
@@ -835,6 +840,8 @@
                         deviceTypeList.Add(SPK.doorgate);
                         deviceTypeList.Add(SPK.IpCam_Imou);
                         deviceTypeList.Add(SPK.SensorPm10);
+                        deviceTypeList.Add(SPK.VideoDoorLock);
+                        deviceTypeList.Add(SPK.AcIr);
 
                     }
                     break;
@@ -858,6 +865,7 @@
                         deviceTypeList.Add(SPK.MusicStandard);
                         deviceTypeList.Add(SPK.AvMusic);
                         deviceTypeList.Add(SPK.MechanicalArm);
+                        deviceTypeList.Add(SPK.AcIr);
                     }
                     break;
             }
@@ -1176,9 +1184,9 @@
                  //new Entity.Function { sid = "1234567890", name = "瓒呭0娉紶鎰熷櫒", spk = Entity.SPK.SensorUtrasonic },
                  // new Entity.Function { sid = "1234567891", name = "娓╁害浼犳劅鍣�", spk = Entity.SPK.SensorTemperature },
                  //  new Entity.Function { sid = "1234567892", name = "婀垮害浼犳劅鍣�", spk = Entity.SPK.SensorHumidity },
-                    new Entity.Function { sid = "12345678933456", name = "璋冨厜鐏�", spk = Entity.SPK.LightDimming },
-                      new Entity.Function { sid = "1234567895444", name = "闈㈡澘", spk = Entity.SPK.PanelSocket },
-                      new Entity.Function { sid = "12345678968888", name = "pm10", spk = Entity.SPK.SensorPm10 },
+                    new Entity.Function { sid = "12345678933456", name = "闂ㄩ攣", spk = Entity.SPK.DoorLock },
+                      new Entity.Function { sid = "1234567895444", name = "瑙嗛闂ㄩ攣", spk = Entity.SPK.VideoDoorLock },
+                      //new Entity.Function { sid = "12345678968888", name = "pm10", spk = Entity.SPK.SensorPm10 },
                       //  new Entity.Function { sid = "1234567897", name = "姣背娉紶鎰熷櫒1", spk = Entity.SPK.SenesorMegahealth2 },
                       // new Entity.Function { sid = "1234567899", name = "闂ㄧ浼犳劅鍣�", spk = Entity.SPK.SensorDoorWindow },
                       //  new Entity.Function { sid = "12345678991234", name = "HDL鏈烘鎵�", spk = Entity.SPK.MechanicalArm },
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs
index d6835e6..fbf8818 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/Send.cs
@@ -462,6 +462,38 @@
 
         }
 
+        /// <summary> 
+        /// 鑾峰彇浣忓畢宸插綍鍏ヤ汉鑴镐俊鎭�
+        /// </summary>
+        /// <param name="deviceId">鍙瀵硅璁惧id</param>
+        /// <returns></returns>
+        public List<Face> GetHomeFaceList(string deviceId, bool isTip) 
+        {
+            var jObject = new JObject();
+            jObject.Add("homeId", LogicMethod.Current.HomeId);
+            jObject.Add("deviceId", deviceId);
+            var responsePackNew = RequestServerhomeId(jObject, NewAPI.Api_Post_GetListHomeFace, "鑾峰彇浣忓畢宸插綍鍏ヤ汉鑴镐俊鎭�");
+            //濡傛灉鏄痶oken杩囨湡鍒欏埛鏂皌oken
+            if (responsePackNew.Code == StateCode.TOKEN_EXPIRED)
+            {
+                RefreshToken();
+                GetListHomeFace(deviceId, isTip);
+            }
+            if (Check(responsePackNew, isTip) == false)
+            {
+                return new List<Face>();
+            }
+            var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Face>>(responsePackNew.Data.ToString());
+            if (list == null)
+            {
+                list = new List<Face>();
+            }
+            faceList.Clear();
+            faceList.AddRange(list);
+            return list;
+
+        }
+
         /// <summary>
         ///璇锋眰鏈嶅姟鍣紙涓庝綇瀹呮湁鍏�:渚嬪锛沨omeId锛� 
         /// </summary>
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/TimeTpye.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/TimeTpye.cs
index 84822aa..a7845f1 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/TimeTpye.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/TimeTpye.cs
@@ -92,11 +92,12 @@
             //鏃ュ嚭/鏃ヨ惤/姝e崍鐐瑰嚮浜嬩欢
             timeSpecialView.btnClick.MouseUpEventHandler += (sen, e) =>
             {
-                if (string.IsNullOrEmpty( Entity.DB_ResidenceData.Instance.CurrentRegion.homeAddress))//.longitude == 0 && Entity.DB_ResidenceData.Instance.CurrentRegion.latitude == 0)
-                {
-                    new PublicAssmebly().TipMsg(StringId.tip, StringId.GatewayLocationInformationIsNotConfigured);
-                    return;
-                }
+                
+                //if (string.IsNullOrEmpty( Entity.DB_ResidenceData.Instance.CurrentRegion.homeAddress))//.longitude == 0 && Entity.DB_ResidenceData.Instance.CurrentRegion.latitude == 0)
+                //{
+                //    new PublicAssmebly().TipMsg(StringId.tip, StringId.GatewayLocationInformationIsNotConfigured);
+                //    return;
+                //}
                 SpeciaTime speciaTime = new SpeciaTime();
                 MainPage.BasePageView.AddChidren(speciaTime);
                 speciaTime.Show();
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs
index 21466f5..c0a6841 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs
@@ -19,6 +19,7 @@
 #if __ANDROID__
     public class dddxx { }
 #else
+        //澶у崕鎽勫儚澶磗dk浠g悊锛圫hared.IOS.HDLCNVRSDK)
         hdlLCNVRSDKDelegate hdlLCNVRDelegate;
         public class hdlLCNVRSDKDelegate : HDLLCNVRSDKDelegate
         {
@@ -193,7 +194,7 @@
                             Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().AccessToken = UserInfo.Current.LoginTokenString;
                             Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().RefreshToken = UserInfo.Current.RefreshToken;
                             Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
-                            //璺宠浆娣诲姞鎽勫儚澶�
+                            //璺宠浆娣诲姞鎽勫儚澶�(Shared.IOS.HDLCNVRSDK)
                             hdlLCNVRDelegate = new hdlLCNVRSDKDelegate(() =>
                             {//娣诲姞鎴愬姛杩斿洖浜嬩欢
                                 refreshView.BeginHeaderRefreshing();
@@ -421,6 +422,11 @@
                                 this.RemoveFromParent();
                             };
                             break;
+                        case SPK.VideoDoorLock: {
+                                //璺宠浆鍒癮ndroid閭h竟鍘�
+                                HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.SkipAddDeviceActivity(SPK.VideoDoorLock);
+                            }
+                            break;
                     }
                 };
             }
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs
index 6708c7d..efa787c 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/DeviceListPage.cs
@@ -11,7 +11,7 @@
 using Shared;
 namespace HDL_ON.UI
 {
-    public class DeviceListPage  : FrameLayout
+    public class DeviceListPage : FrameLayout
     {
         FrameLayout bodyView;
         VerticalRefreshLayout contentView;
@@ -59,7 +59,8 @@
         {
             var waitPage = new Loading();
             waitPage.Start();
-            new System.Threading.Thread(() => {
+            new System.Threading.Thread(() =>
+            {
                 try
                 {
                     var pm = new HttpServerRequest();
@@ -77,7 +78,7 @@
                             }
                             else
                             {
-                                var tipView = new EmptyTipView(Language.StringByID(StringId.NotAddedAnyDevices),160)
+                                var tipView = new EmptyTipView(Language.StringByID(StringId.NotAddedAnyDevices), 160)
                                 {
                                     Gravity = Gravity.CenterHorizontal,
                                 };
@@ -96,7 +97,8 @@
                 }
                 finally
                 {
-                    Application.RunOnMainThread(() => {
+                    Application.RunOnMainThread(() =>
+                    {
                         if (waitPage != null)
                         {
                             waitPage.RemoveFromParent();
@@ -113,6 +115,10 @@
             bool isFrist = true;
             foreach (var device in deviceList)
             {
+                if (!this.CheckSupportDevice(device))
+                {
+                    continue;
+                }
                 var row = new RowLayout()
                 {
                     Height = Application.GetRealHeight(50),
@@ -168,7 +174,8 @@
                 };
                 row.AddChidren(btnName);
 
-                btnName.MouseUpEventHandler = (sender, e) => {
+                btnName.MouseUpEventHandler = (sender, e) =>
+                {
                     switch (device.spk)
                     {
                         case SPK.IrModule:
@@ -187,7 +194,8 @@
                                 contentView.BeginHeaderRefreshing();
                             };
                             break;
-                        case SPK.SensorEnvironment:case SPK.SensorEnvironmentHailin:
+                        case SPK.SensorEnvironment:
+                        case SPK.SensorEnvironmentHailin:
                         case SPK.SensorEnvironment2:
                         case SPK.SensorEnvironment3:
                             var smPage1 = new SensorEnvironmentManagerPage();
@@ -267,7 +275,8 @@
                         Width = Application.GetRealWidth(150),
                     };
                     row.AddChidren(btnEdit);
-                    btnEdit.MouseUpEventHandler = (sender, e) =>{
+                    btnEdit.MouseUpEventHandler = (sender, e) =>
+                    {
                         Action<string> callBack = (str) =>
                         {
                             if (string.IsNullOrEmpty(str))
@@ -337,6 +346,23 @@
 
         }
 
+        /// <summary>
+        /// 妫�鏌ユ槸鍚︽敮鎸�
+        /// </summary>
+        /// <param name="function"></param>
+        /// <returns></returns>
+        bool CheckSupportDevice(Function function)
+        {
+
+            if (function == null) return false;
+            if (function.spk == SPK.VideoDoorLock)
+            {
+                return false;
+            }
+            return true;
+
+        }
+
     }
 
 
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs
index f485677..e503084 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs
@@ -226,6 +226,7 @@
                             dialog.Close();
                             LoadEvent_ChangeCurHome(home);
                             LoadContentView();
+                            HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.ChangeCurrHome(home);
                         };
                     }
                     dialog.Show();
@@ -415,6 +416,7 @@
                     dialog.Close();
                     LoadEvent_ChangeCurHome(home);
                     LoadContentView();
+                    HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.ChangeCurrHome(home);
                 };
             }
 
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
index b4b4f4a..eb2e32c 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
@@ -828,6 +828,7 @@
                 MainPage.BasePageView.AddChidren(myServerInfoPage);
                 myServerInfoPage.LoadPage();
                 MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+
             };
             myServerInfoCellView.GoAction = selectAction;
             myServerInfoCellView.BtnTilte.Text = Language.StringByID(StringId.ServerInformation);
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs
index ce10df7..26b7215 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs
@@ -4,6 +4,11 @@
 using HDL_ON.Entity;
 using Shared;
 
+#if __IOS__
+using UIKit;
+using Foundation;
+#endif
+
 namespace HDL_ON.UI
 {
     public partial class PersonalDataPage
@@ -439,7 +444,6 @@
                 MainPage.BasePageView.AddChidren(aep);
                 aep.LoadPage();
                 MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
-
             };
             _QRcodeView.MouseUpEventHandler = eventHandler;
             btnQRcode.MouseUpEventHandler = eventHandler;
@@ -447,7 +451,7 @@
             btnQRcodeRight.MouseUpEventHandler = eventHandler;
         }
 
-        #region 淇敼缁戝畾閭
+#region 淇敼缁戝畾閭
         /// <summary>
         /// 淇敼缁戝畾閭
         /// </summary>
@@ -459,6 +463,7 @@
                 {
 
                     btnUserEmailInfo.Text = GetBindAccountText(email);
+
                 };
 
                 if (CheckIfUnbound(btnUserEmailInfo.Text))
@@ -493,6 +498,7 @@
                 Action<string> action = (phone) =>
                 {
                     btnUserPhoneInfo.Text = GetBindAccountText(phone);
+
                 };
 
                 if (CheckIfUnbound(btnUserPhoneInfo.Text))
@@ -511,15 +517,14 @@
                     MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                 }
 
-
             };
             btnUserPhoneInfo.MouseUpEventHandler = eventHandler;
             btnUserPhoneRight.MouseUpEventHandler = eventHandler;
             userPhoneInfoView.MouseUpEventHandler = eventHandler;
         }
-        #endregion
+#endregion
 
-        #region 瑙i攣璁剧疆鍖哄煙
+#region 瑙i攣璁剧疆鍖哄煙
         //void LoadEvent_SkipInterpretationSettings()
         //{
         //    EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
@@ -535,7 +540,7 @@
         //    btnInterpretationSettingsTip.MouseUpEventHandler = eventHandler;
         //}
 
-        #endregion
+#endregion
 
         /// <summary>
         /// 璺宠浆淇敼瀵嗙爜鐣岄潰
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs
index 7084db6..a37633b 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/PirSend.cs
@@ -291,10 +291,10 @@
         /// <returns></returns>
         public static ResponsePackNew RequestServerhomeId(object o, string api_Url, int mTimeout = 20)
         {
-            MainPage.Log("绾㈠瀹濊姹傛暟鎹�:"+api_Url+"\r\n"+o.ToString());
+            MainPage.Log("绾㈠瀹�->鍙戦�佹暟鎹�:"+api_Url+"\r\n"+o.ToString());
             var requestJson = HttpUtil.GetSignRequestJson(o);
             var responsePackNew=  HttpUtil.RequestHttpsPostFroHome(api_Url, requestJson, mTimeout);
-            MainPage.Log("鍥炲绾㈠瀹濊姹傛暟鎹�:" + "\r\n"+ Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew));
+            MainPage.Log("绾㈠瀹�->鍥炲鏁版嵁:" + "\r\n"+ Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew));
             return responsePackNew;
 
         }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs b/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
index 6080247..9375aa5 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPage.cs
@@ -29,6 +29,18 @@
         /// 浣嶇疆淇℃伅璺宠浆缂栬緫鎸夐挳
         /// </summary>
         Button btnLocationInfoRight;
+        /// <summary>
+        /// 鍒犻櫎璁惧
+        /// </summary>
+        Button delTextBtn;
+        /// <summary>
+        /// 涓嬩竴绾у浘鏍�
+        /// </summary>
+        Button delRightBtn;
+        /// <summary>
+        /// 鍒犻櫎璁惧琛孎rameLayout
+        /// </summary>
+        FrameLayout delView;
 
         #endregion
 
@@ -38,6 +50,11 @@
         /// 鍚庨��鏃讹紝鍒锋柊涔嬪墠鐣岄潰鐨勬樉绀轰俊鎭�
         /// </summary>
         Action actionRefresh;
+
+        /// <summary>
+        /// 瑙g粦璁惧鍥炶皟
+        /// </summary>
+        public Action actionDel;
         #endregion
 
         public FunctionBaseInfoSetPage(Function func, Action action)
@@ -180,13 +197,13 @@
                 #endregion
             }
             #region 鍏变韩
+           
             //var sharedView = new FrameLayout()
             //{
             //    Height = Application.GetRealHeight(55),
             //    BackgroundColor = CSS_Color.MainBackgroundColor,
             //};
             //contentView.AddChidren(sharedView);
-
             //var btnSharedText = new Button()
             //{
             //    X = Application.GetRealWidth(16),
@@ -219,6 +236,50 @@
             //    });
             #endregion
 
+            #region 鍒犻櫎璁惧琛�
+
+            delView = new FrameLayout() 
+            {
+                Height = Application.GetRealHeight(55),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            if (this.function.spk == SPK.VideoDoorLock)
+            {
+                contentView.AddChidren(delView);
+            }
+            var lineBtn = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                BackgroundColor = CSS_Color.DividingLineColor,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(1)
+            };
+            delView.AddChidren(lineBtn);
+             delTextBtn = new Button() 
+            {
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(160),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.DeleteDevice,
+            };
+            delView.AddChidren(delTextBtn);
+
+            delRightBtn= new Button()
+            {
+                X = Application.GetRealWidth(339),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetMinRealAverage(16),
+                Height = Application.GetMinRealAverage(16),
+                UnSelectedImagePath = "Public/RightIcon.png",
+            };
+            delView.AddChidren(delRightBtn);
+
+           
+
+           
+            #endregion
 #if stage2
             #region 娣诲姞鍒版闈�
             var addToDesktopView = new FrameLayout()
diff --git a/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPageBLL.cs
index 006e71d..ff4c689 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/FunctionBaseInfoSetPageBLL.cs
@@ -12,6 +12,8 @@
         {
             LoadEvent_ChangeFunctionName ();
             SkipChooseRoomPage();
+            DelDeviceEvent();
+
         }
 
         /// <summary>
@@ -77,5 +79,45 @@
             }
                 
         }
+        /// <summary>
+        /// 瑙g粦璁惧鐨勪簨浠�
+        /// </summary>
+        void DelDeviceEvent()
+        {
+
+            EventHandler<MouseEventArgs> ClickEvent = (sener, e) =>
+            {
+                new HDL_ON.UI.Music.View.TipView().TipBox(-1, StringId.AreYouSureToDeleteThisDevice, () =>
+                {
+                    UI2.FuntionControlView.VideoDoorLock.VideDoorLockSend.Current.DelDevice(this.function, (isBool) =>
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            if (!isBool)
+                            {
+                                new Tip()
+                                {
+                                    CloseTime = 1,
+                                    Text = Language.StringByID(StringId.delFail),
+                                    Direction = AMPopTipDirection.None,
+                                }.Show(bodyView);
+                                return;
+                            }
+                            //鍒犻櫎鏈湴鏂囦欢                                  
+                            UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.DeleteFunction(this.function);
+                            this.RemoveFromParent();
+                            this.actionDel?.Invoke();
+                        });
+
+                    });
+
+                });
+            };
+            this.delView.MouseUpEventHandler += ClickEvent;
+            this.delTextBtn.MouseUpEventHandler += ClickEvent;
+            this.delRightBtn.MouseUpEventHandler += ClickEvent;
+        }
+
+
     }
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
index d631763..7aed7ce 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/SendMethod.cs
@@ -86,7 +86,7 @@
                 d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
                 d.Add("deviceIds", functionIds);
                 var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_RefreshDeviceStatus, "鍒锋柊璁惧鐘舵��");
-                if (!this.dataChecking(responsePackNew))
+                if (!this.DataChecking(responsePackNew))
                 {
                     return;
                 }
@@ -123,7 +123,7 @@
                 d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
                 d.Add("deviceIds", new List<string> { music.deviceId });
                 var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_PlayerList, "鑾峰彇闊充箰鍒楄〃");
-                if (!this.dataChecking(responsePackNew))
+                if (!this.DataChecking(responsePackNew))
                 {
                     return;
                 }
@@ -173,7 +173,7 @@
                 }
                 d.Add("deviceInfos", new List<Dictionary<string, object>> { deviceIds });
                 var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_GroupList, "鑾峰彇鍒楄〃鍚嶅垪琛�");
-                if (!this.dataChecking(responsePackNew))
+                if (!this.DataChecking(responsePackNew))
                 {
                     return new List<GroupList>();
                 }
@@ -238,7 +238,7 @@
                 d.Add("sidGroups", new List<Dictionary<string, object>> { d1 });
 
                 var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_GroupPlayerList, "閫氳繃鍒楄〃鍚嶈幏鍙栨瓕鏇插垪琛�");
-                if (!this.dataChecking(responsePackNew))
+                if (!this.DataChecking(responsePackNew))
                 {
                     return new List<PalyerSongListInfo>();
                 }
@@ -282,10 +282,11 @@
         /// </summary>
         /// <param name="responsePackNew">鍥炲鏁版嵁瀵硅薄</param>
         /// <returns></returns>
-        private bool dataChecking(ResponsePackNew responsePackNew)
+        private bool DataChecking(ResponsePackNew responsePackNew)
         {
-            if (responsePackNew.Code != "0" || responsePackNew.Data == null || responsePackNew.Data.ToString() == "")
+            if (responsePackNew.Data == null||responsePackNew.Code != "0"  || responsePackNew.Data.ToString() == "")
             {
+                
                 return false;
             }
             return true;
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Music/View/SizeClass.cs b/HDL_ON/UI/UI2/FuntionControlView/Music/View/SizeClass.cs
index e2d5c9d..f0eeb8a 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Music/View/SizeClass.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Music/View/SizeClass.cs
@@ -1,93 +1,94 @@
 锘縰sing System;
 namespace HDL_ON.UI.Music
 {
-    public static class TextSize
+    public class TextSize
     {
-        public static int TopLine = 1;
-        public static int MiddleLine =1;
-        public static int DownLine = 1;
+        public const int TopLine = 1;
+        public const int MiddleLine = 1;
+        public const int DownLine = 1;
 
 
 
-        public static int Text24 = 24;
-        public static int Text20 = 20;
-        public static int Text18 = 18;
-        public static int Text16 = 16;
-        public static int Text14 = 14;
-        public static int Text12 = 12;
-        public static int Text10 = 10;
+        public const int Text24 = 24;
+        public const int Text20 = 20;
+        public const int Text18 = 18;
+        public const int Text16 = 16;
+        public const int Text14 = 14;
+        public const int Text12 = 12;
+        public const int Text10 = 10;
 
     }
-    public static class MusicColor
+    public class MusicColor
     {
         /// <summary>
         /// 椤堕儴鑳屾櫙棰滆壊
         /// </summary>
-        public static uint TopViewColor = 0xFFF7F7F7;
+        public const uint TopViewColor = 0xFFF7F7F7;
         /// <summary>
         /// 鐣岄潰鑳屾櫙棰滆壊
         /// </summary>
-        public static uint ViewColor = 0xFFF2F3F7;
+        public const uint ViewColor = 0xFFF2F3F7;
         /// <summary>
         /// 鐧借壊鑳屾櫙棰滆壊
         /// </summary>
-        public static uint WhiteColor = 0xFFFFFFFF;
+        public const uint WhiteColor = 0xFFFFFFFF;
         /// <summary>
         /// 绾㈣壊鑳屾櫙棰滆壊
         /// </summary>
-        public static uint RedColor = 0xFFFF4747;
-        
-        /// <summary>
-        /// 绾挎潯棰滆壊
-        /// </summary>
-        public static uint LineColor =0xFFECEDEE;
-        /// <summary>
-        /// 寮圭獥鑳屾櫙棰滆壊
-        /// </summary>
-        public static uint PopupBackgroundColor = 0x90000000;
+        public const uint RedColor = 0xFFFF4747;
 
         /// <summary>
         /// 绾挎潯棰滆壊
         /// </summary>
-        public static uint MusicEditColor = 0xFFFC9C04;
+        public const uint LineColor = 0xFFECEDEE;
         /// <summary>
         /// 寮圭獥鑳屾櫙棰滆壊
         /// </summary>
-        public static uint MusicDelColor = 0xFFFF7474;
+        public const uint PopupBackgroundColor = 0x90000000;
 
-        public static uint Text18Color = 0xFF1B2D4D;
-        public static uint MusicTxet14SelectedColor = 0xFF4484F4;
-        public static uint MusicTxet14Color = 0xFF1B2D4D;
-        public static uint MusicTxet12SelectedColor = 0xFF4484F4;
-       
-        public static uint MusicNoTxetColor = 0xFFC0C7D4;
-        public static uint TextColor = 0xFF1B2D4D;
-        public static uint SelectedColor = 0xFF4484F4;
+        /// <summary>
+        /// 绾挎潯棰滆壊
+        /// </summary>
+        public const uint MusicEditColor = 0xFFFC9C04;
+        /// <summary>
+        /// 寮圭獥鑳屾櫙棰滆壊
+        /// </summary>
+        public const uint MusicDelColor = 0xFFFF7474;
 
-        public static uint TextTimeColor = 0xFF798394;
+        public const uint Text18Color = 0xFF1B2D4D;
+        public const uint MusicTxet14SelectedColor = 0xFF4484F4;
+        public const uint MusicTxet14Color = 0xFF1B2D4D;
+        public const uint MusicTxet12SelectedColor = 0xFF4484F4;
 
-        public static uint TextCancelColor = 0xFF798394; 
+        public const uint MusicNoTxetColor = 0xFFC0C7D4;
+        public const uint TextColor = 0xFF1B2D4D;
+        public const uint SelectedColor = 0xFF4484F4;
+
+        public const uint TextTimeColor = 0xFF798394;
+
+        public const uint TextCancelColor = 0xFF798394;
 
     }
 
-    public static class H_W {
+    public class H_W
+    {
         /// <summary>
         /// app楂樺害
         /// </summary>
-        public static int H = 667;
+        public const int H = 667;
         /// <summary>
         /// app瀹藉害
         /// </summary>
-        public static int W = 375;
+        public const int W = 375;
         /// <summary>
         /// 椤堕儴楂樺害
         /// </summary>
-        public static int T_Height = 64;
+        public const int T_Height = 64;
 
         /// <summary>
         /// 绾块珮搴�
         /// </summary>
-        public static int Line = 1;
+        public const int Line = 1;
     }
 
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Video/View/ShowDialog.cs b/HDL_ON/UI/UI2/FuntionControlView/Video/View/ShowDialog.cs
index d5a2001..8ab919c 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Video/View/ShowDialog.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Video/View/ShowDialog.cs
@@ -1,23 +1,49 @@
 锘縰sing System;
+using HDL_ON.UI.CSS;
 using HDL_ON.UI.Music;
 using Shared;
 namespace HDL_ON.UI.UI2.FuntionControlView.Video.View
 {
     public class ShowDialog
     {
+
+        private static ShowDialog showDialog;
+
+        public static ShowDialog Currnet
+        {
+            get
+            {
+                if (showDialog == null)
+                {
+
+                    showDialog = new ShowDialog();
+                }
+
+                return showDialog;
+
+            }
+        }
+
+
+        public Dialog dialog;
+
         /// <summary>
         /// 
         /// </summary>
         /// <param name="title">鏍囬</param>
-        /// <param name="action1">鍥炶皟鍑芥暟</param>
-        /// <param name="action2">鍥炶皟鍑芥暟</param>
-        public void ClickBox(string title, Action<Dialog> action1, Action<Dialog> action2)
+        /// <param name="jieTingAction">鍥炶皟鍑芥暟</param>
+        /// <param name="guanBiAction">鍥炶皟鍑芥暟</param>
+        public void ClickBox(string title, Action<Dialog> jieTingAction, Action<Dialog> guanBiAction)
         {
-            Dialog dialog = new Dialog()
+            if (dialog != null)
+            {
+                //闃叉浜岄噸鐣岄潰
+                dialog.Close();
+            }
+            dialog = new Dialog()
             {
                 BackgroundColor = MusicColor.PopupBackgroundColor,
             };
-
             FrameLayout whiteView = new FrameLayout()
             {
                 X = Application.GetRealWidth(56),
@@ -50,7 +76,7 @@
                 TextColor = MusicColor.TextColor,
                 TextSize = TextSize.Text16,
                 TextAlignment = TextAlignment.CenterLeft,
-                Text = "鏉ヨ嚜鈥滃洿澧欐満鈥濆懠鍙�",
+                Text = title,
 
             };
             whiteView.AddChidren(btnTitle);
@@ -77,14 +103,135 @@
 
             guaduanIconBtn.MouseUpEventHandler += (sender, e) =>
             {
-                action1(dialog);
+                guanBiAction(dialog);
             };
             jietingIconBtn.MouseUpEventHandler += (sender, e) =>
             {
-
-                action2(dialog);
+                jieTingAction(dialog);
             };
 
+        }
+
+        /// <summary>
+        /// 鍒濆鍖朌ialog
+        /// </summary>
+        /// <param name="titleStr">鏍囬</param>
+        /// <param name="msgStr">鎻愮ず淇℃伅</param>
+        /// <param name="okAction"></param>
+        /// <param name="cancelAction"></param>
+        /// <param name="cancelID"></param>
+        /// <param name="confirmID"></param>
+        public void ShowDialogBase(string titleStr, string msgStr, Action okAction, Action cancelAction, int cancelID = StringId.Cancel, int confirmID = StringId.Confirm, bool isAlarmColor = false)
+        {
+            if (dialog != null)
+            {
+                //闃叉浜岄噸鐣岄潰
+                dialog.Close();
+            }
+            dialog = new Dialog()
+            {
+                BackgroundColor = MusicColor.PopupBackgroundColor,
+            };
+
+            var bodyView = new FrameLayout();
+            dialog.AddChidren(bodyView);
+
+            FrameLayout contentView = new FrameLayout()
+            {
+                Gravity = Gravity.Center,
+                Width = Application.GetRealWidth(270),
+                Height = Application.GetRealHeight(140),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                BorderColor = 0x00000000,
+                BorderWidth = 0,
+                Radius = (uint)Application.GetMinRealAverage(10),
+            };
+            bodyView.AddChidren(contentView);
+
+            Button btnTitle = new Button()
+            {
+                Y = Application.GetRealHeight(20),
+                Height = Application.GetRealHeight(22),
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextAlignment = TextAlignment.Center,
+                IsBold = true,
+                Text = titleStr,
+            };
+            contentView.AddChidren(btnTitle);
+            int Width135 = Application.GetRealWidth(135);
+            //鎻愮ず鍐呭鎸夐挳
+            Button btnMsg = new Button()
+            {
+                Y = btnTitle.Bottom + Application.GetRealHeight(4),
+                X = Application.GetRealWidth(6),
+                Height = Application.GetRealHeight(46),
+                Width = Application.GetRealWidth(258),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                Text = msgStr,
+                IsMoreLines = true,
+            };
+            contentView.AddChidren(btnMsg);
+
+            Button btnLine = new Button()
+            {
+                Y = Application.GetRealHeight(96),
+                Height = Application.GetRealHeight(1),
+                Width = Application.GetRealWidth(270 / 2),
+                BackgroundColor = CSS_Color.DividingLineColor,
+            };
+            contentView.AddChidren(btnLine);
+
+            Button btnCancel = new Button()
+            {
+                Y = btnLine.Bottom,
+                Width = Width135,
+                Height = Application.GetRealHeight(43),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = cancelID,
+            };
+            contentView.AddChidren(btnCancel);
+
+            Button btnConfirm = new Button()
+            {
+                X = contentView.Width - Width135,
+                Y = btnLine.Y,
+                Width = Width135,
+                Height = Application.GetRealHeight(45),
+                TextAlignment = TextAlignment.Center,
+                //TextColor = CSS_Color.TextualColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.MainBackgroundColor,
+                BackgroundColor = CSS_Color.MainColor,
+                TextID = confirmID,
+            };
+            contentView.AddChidren(btnConfirm);
+            //渚嬶細鍙充笅鍦嗚 澶у皬涓�50
+            int mRectCornerID = HDLUtils.RectCornerBottomRight;
+            btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID);
+
+            btnCancel.MouseUpEventHandler += (sender, e) =>
+            {
+                dialog.Close();
+                cancelAction?.Invoke();
+            };
+
+            btnConfirm.MouseUpEventHandler += (sender, e) =>
+            {
+                dialog.Close();
+                okAction?.Invoke();
+            };
+
+            if (isAlarmColor)
+            {
+                btnTitle.TextColor = CSS_Color.WarningColor;
+                btnConfirm.TextColor = CSS_Color.MainBackgroundColor;
+                btnConfirm.BackgroundColor = CSS_Color.WarningColor;
+            }
         }
 
 
@@ -94,7 +241,7 @@
         /// <param name="str1">鏍囬</param>
         public void QRcode(string str1)
         {
-            Dialog dialog = new Dialog() 
+            Dialog dialog = new Dialog()
             {
                 BackgroundColor = CSS.CSS_Color.viewTrans60lucence,
             };
@@ -119,18 +266,18 @@
                 TextSize = TextSize.Text16,
                 TextAlignment = TextAlignment.Center,
                 IsBold = true,
-                TextID=StringId.linshimima,
+                TextID = StringId.linshimima,
             };
             whiteView.AddChidren(btnTitle);
             //瀵嗙爜
             Button btnpaw = new Button()
             {
-                X=Application.GetRealWidth(100),
+                X = Application.GetRealWidth(100),
                 Y = Application.GetRealHeight(62),
                 Height = Application.GetRealHeight(32),
                 Width = Application.GetRealWidth(82),
                 TextColor = MusicColor.SelectedColor,
-                TextSize =24,
+                TextSize = 24,
                 TextAlignment = TextAlignment.Center,
                 IsBold = true,
                 Text = str1,
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs
new file mode 100644
index 0000000..6613907
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs
@@ -0,0 +1,588 @@
+锘縰sing System;
+using HDL_ON.Entity;
+using System.Collections.Generic;
+using Shared;
+using HDL_ON.DAL.Server;
+#if __IOS__
+#else
+using Com.Videogo.Hdl;
+#endif
+
+namespace HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock
+{
+    /// <summary>
+    /// 钀ょ煶瑙嗛闂ㄩ攣鍏叡鏂规硶绫�
+    /// </summary>
+    public class CommonMethod
+    {
+        private Loading loading;
+        /// <summary>
+        /// 璁板綍褰撳墠鐣岄潰绱㈠紩鍊�
+        /// </summary>
+        private int pageLayoutIndexValue;
+
+        private static CommonMethod commonMethod = null;
+        /// <summary>
+        /// 鑾峰彇瀵硅薄
+        /// </summary>
+        public static CommonMethod Current
+        {
+            get
+            {
+                if (commonMethod == null)
+                {
+                    commonMethod = new CommonMethod();
+                }
+
+                return commonMethod;
+
+            }
+
+        }
+
+        #region  --------- 璺宠浆鍒癆ndroid锛宨os閭h竟鐨勬柟娉�(钀ょ煶瑙嗛闂ㄩ攣) --------
+        /// <summary>
+        /// android,ios婧愮敓娣诲姞璁惧鍒颁簯绔垚鍔熷悗鍥炶皟鏂规硶
+        /// 鍐嶈鍙栦簯绔殑涓婅悿鐭宠澶囧垪琛�
+        /// <paramref name="spk"/>spk</param>
+        public void SkipAddDeviceActivity(string spk)
+        {
+
+            this.InitializationAndroidData((isEzChildAccessToken) =>
+            {
+
+                this.MainThread(() =>
+                {
+#if __IOS__
+                    //璺宠浆娣诲姞钀ょ煶璁惧
+                    ezsdkDelegate = new IosIHdlInterface();
+                    ezsdkDelegate.mAction += (serials) =>
+                    {
+                        this.GetYingshiDeviceList(serials);
+                    };
+                    EZSDK.IOS.EZSDK.SharedInstance().Delegate = ezsdkDelegate;
+                    EZSDK.IOS.EZSDK.SharedInstance().AddEzvizMonitorWithDeviceType(spk);
+
+#else
+                HDLEzvizSdk.Instance.JumpToEZScanActivity(Application.Activity,spk);
+                HDLEzvizSdk.SetAddCallback(new AndroidIHdlInterface((isBool, serials) =>
+                {
+                    if (isBool)
+                    {
+                        this.GetYingshiDeviceList(serials);
+                    }
+
+                }));
+#endif
+
+                });
+
+
+            });
+
+
+
+
+
+        }
+        /// <summary>
+        /// 璇诲彇浜戠鐨勪笂钀ょ煶璁惧鍒楄〃
+        /// <paramref name="serials"/>搴忓垪鍙�</param>
+        private void GetYingshiDeviceList(string serials)
+        {
+            this.SunThread(() =>
+            {
+                var list = VideDoorLockSend.Current.GetVideoDoorLockDeviceList(SPK.VideoDoorLock);
+                this.MainThread(() =>
+                {
+                    if (list.Count > 0)
+                    {
+                        var function = list.Find((o) => o.sid == serials);
+                        if (function != null)
+                        {
+                            this.SaveFunctionFile(function);
+                        }
+                    }
+                });
+            });
+
+        }
+        /// <summary>
+        /// 鎵撳紑瀹炴椂瑙嗛鐢婚潰
+        /// </summary>
+        /// <param name="deviceSerial">璁惧搴忓垪鍙�</param>
+        /// <param name="deviceId">璁惧id(浜戠涓奷eviceId)</param>
+        /// <param name="spk">璁惧spk(浜戦泙涓婂畾涔夊ソ鐨�)</param>
+        /// <param name="isDialog">鏄惁闇�瑕佸脊妗�</param>
+        public void SkipRTVActivity(string deviceSerial, string deviceId, string spk, bool isDialog)
+        {
+
+            this.InitializationAndroidData((isEzChildAccessToken) =>
+            {
+                this.MainThread(() =>
+                {
+                    if (isDialog)
+                    {
+                        Video.View.ShowDialog.Currnet.ClickBox(Language.StringByID(StringId.laizimenlinghujiao), (dialog) =>
+                        {
+                            dialog.Close();
+                            this.SkipRTVActivity(deviceSerial, deviceId, spk);
+                        }, (dialog) => { dialog.Close(); });
+                    }
+                    else
+                    {
+                        this.SkipRTVActivity(deviceSerial, deviceId, spk);
+                    }
+
+                });
+            });
+
+        }
+        /// <summary>
+        /// 鎵撳紑瀹炴椂瑙嗛鐢婚潰
+        /// </summary>
+        /// <param name="deviceSerial">璁惧搴忓垪鍙�</param>
+        /// <param name="deviceId">璁惧id(浜戠涓奷eviceId)</param>
+        /// <param name="spk">璁惧spk(浜戦泙涓婂畾涔夊ソ鐨�)</param>
+        private void SkipRTVActivity(string deviceSerial, string deviceId, string spk)
+        {
+
+#if __IOS__
+            //鎵撳紑钀ょ煶瑙嗛鐣岄潰
+            EZSDK.IOS.EZSDK.SharedInstance().PlayWithDeviceSerial(deviceSerial, deviceId, spk);
+
+#else
+            HDLEzvizSdk.Instance.JumpToEZRealPlayActivity(Application.Activity,deviceId,deviceSerial,spk);
+#endif
+
+
+        }
+
+        /// <summary>
+        /// 娴忚鍘嗗彶璁板綍
+        /// </summary>
+        public void SkipRecordActivity(string deviceId)
+        {
+            this.InitializationAndroidData((s) =>
+            {
+                this.MainThread(() =>
+                {
+#if __IOS__
+                    //鎵撳紑钀ょ煶鍘嗗彶璁板綍鐣岄潰
+                    EZSDK.IOS.EZSDK.SharedInstance().ToDeviceMsgListView(deviceId);
+#else
+                HDLEzvizSdk.Instance.JumpLockHistoryActivity(Application.Activity, deviceId);
+#endif
+                });
+            });
+
+        }
+        /// <summary>
+        /// 涓存椂瀵嗙爜寮�闂�
+        /// <paramref name="deviceId"/>
+        /// </summary>
+        public void SkipPSWActivity(string deviceId)
+        {
+            this.InitializationAndroidData((isBools) =>
+            {
+                this.MainThread(() =>
+                {
+#if __IOS__
+                    //鎵撳紑钀ょ煶涓存椂瀵嗙爜鐣岄潰
+                    EZSDK.IOS.EZSDK.SharedInstance().ToTemPassView(deviceId);
+#else
+                HDLEzvizSdk.Instance.JumpTempPasswordActivity(Application.Activity, deviceId); 
+#endif
+                });
+            });
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栬悿鐭砈DK(瀹為檯灏辨槸浼犲弬鏁�,澶氭璋冪敤涔熸病鏈夊奖鍝�)
+        /// </summary>
+        public void InitializationAndroidData(Action<bool> action)
+        {
+            bool isBool = true;
+            this.SunThread(() =>
+            {
+                try
+                {
+                    //鍏堣幏鍙栬悿鐭充簯瀛愯处鍙穞oken
+                    var ezChildAccessToken = VideDoorLockSend.Current.GetEZGetChildToken();
+                    this.MainThread(() =>
+                    {
+                        if (string.IsNullOrEmpty(ezChildAccessToken))
+                        {
+                            //Token
+                            isBool = false;
+                            this.ShowTip("鍏堣幏鍙栬悿鐭充簯瀛愯处鍙穞oken澶辫触銆�");
+                            return;
+                        }
+
+#if __IOS__
+                        //iOS
+                        //鍒濆鍖栬悿鐭充簯SDK锛屼腑鏂囧浗鍐卥ey銆佽嫳鏂囨捣澶杒ey 寮�鍙戣�呰处鍙蜂娇鐢ㄥ簲鐢ㄥ寘鍚嶇敵璇风殑APPKEY锛屼笉鍚屽寘鍚嶅簲鐢ㄩ渶閰嶇疆涓嶅悓鐨凙PPKEY
+                        EZSDK.IOS.EZSDK.SharedInstance().InitLibWithAppKey("1aa98a90489b4838b966b57018b4b04b", "1aa98a90489b4838b966b57018b4b04b");
+                        //1.璁剧疆鎵�闇�娌充笢鐨凙ccessToken鍜孯efreshToken銆佸煙鍚嶅湴鍧�
+                        EZSDK.IOS.EZSDK.SharedInstance().SetHDlAccessToken(UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken);
+                        EZSDK.IOS.EZSDK.SharedInstance().SetRequestHttpsHostAndPlatform(OnAppConfig.Instance.RequestHttpsHost, 1, DB_ResidenceData.Instance.CurrentRegion.id);
+                        //2.璁剧疆钀ょ煶瀛愯处鍙风殑AccessToken鍒癝DK
+                        EZSDK.IOS.EZSDK.SharedInstance().SetEZAccessToken(ezChildAccessToken);
+                        //////3.鎵撳紑鎽勫儚澶磋澶囧垪琛ㄩ〉闈�
+                        //EZSDK.IOS.EZSDK.SharedInstance().Go2EZvizMonitor();
+                        //EZSDK.IOS.EZDeviceInfo info = new EZSDK.IOS.EZDeviceInfo();
+                        //info.de
+                        //EZSDK.IOS.EZSDK.Play(info);
+#else
+                            HDLEzvizSdk.Instance.Init(Application.Activity.Application, ezChildAccessToken, UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken, OnAppConfig.Instance.RequestHttpsHost, "1aa98a90489b4838b966b57018b4b04b", 1, DB_ResidenceData.Instance.CurrentRegion.id);
+
+#endif
+
+
+                    });
+
+                }
+                catch (Exception e)
+                {
+                }
+                finally
+                {
+                    this.MainThread(() =>
+                    {
+                        action?.Invoke(isBool);
+                    });
+                }
+            });
+        }
+
+        /// <summary>
+        /// 鏇存崲浣忓畢
+        /// </summary>
+        /// <param name="home">瀵硅薄</param>
+        public void ChangeCurrHome(RegionInfoRes home)
+        {
+
+            if (DB_ResidenceData.Instance.CurrentRegion.id == home.id || string.IsNullOrEmpty(home.id)) return;
+#if __IOS__
+#else
+                HDLEzvizSdk.Instance.SetHomeId(home.id);
+#endif
+
+        }
+        #endregion
+
+        /// <summary>
+        /// 鑾峰彇銆愰棬閿佸瀷鍙枫�戝垪琛�
+        /// </summary>
+        /// <returns>杩斿洖缁撴灉涓嶄細涓簄ull</returns>
+        public List<string> GetVideoDoorLockLockModelsList()
+        {
+            return VideDoorLockSend.Current.GetVideoDoorLockLockModelsList();
+        }
+        /// <summary>
+        /// 闂ㄩ攣鎺ㄩ��
+        /// </summary>
+        /// <param name="pushMessageType"></param>
+        /// <param name="jPushMessageInfo"></param>
+        public void DoorLockPush(JPushMessageInfo jpushMessageInfo)
+        {
+            this.MainThread(() =>
+            {
+                if (string.IsNullOrEmpty(jpushMessageInfo.expantContent)) return;
+                //{ "deviceSid":"J92513662","type":"opendoormsg","extDevId":"J92513662","deviceId":"1641010144999936001","spk":"security.door.ezviz"}
+                var expantContent = Newtonsoft.Json.JsonConvert.DeserializeObject<ExpantContent>(jpushMessageInfo.expantContent);
+                if (expantContent == null)
+                {
+                    return;
+                }
+                if (expantContent.spk != SPK.VideoDoorLock)
+                {
+                    return;
+                }
+                if (jpushMessageInfo.messageType.Contains(PushMessageType.DOOR_BELL.ToString()))
+                {
+                    ///鎵撳紑瑙嗛闂ㄩ攣
+                    this.SkipRTVActivity(expantContent.devSerial, expantContent.deviceId, expantContent.spk, true);
+                }
+                else if (jpushMessageInfo.messageType.Contains(PushMessageType.Alarm.ToString()))
+                {
+                    //浣庣數閲忔帹閫�
+                    this.UpdateDoorLockState(PushMessageType.Alarm);
+                }
+                else if (jpushMessageInfo.messageType.Contains(PushMessageType.Prompt.ToString()))
+                {
+                    //寮�闂ㄦ帹閫�
+                    this.UpdateDoorLockState(PushMessageType.Prompt);
+                }
+            });
+
+        }
+        /// <summary>
+        /// 鏇存柊寮�閿佸浘鏍囧拰鐢垫睜鐘舵��
+        /// </summary>
+        private void UpdateDoorLockState(PushMessageType pushMessageType)
+        {
+            int childrenCount = MainPage.BasePageView.ChildrenCount - 1;
+            for (int i = childrenCount; childrenCount > i; i--)
+            {
+                View view = MainPage.BasePageView.GetChildren(i);
+                if (view is VideoDoorLockPage)
+                {
+                    VideoDoorLockPage videoDoorLockPage = (VideoDoorLockPage)view;
+                    if (videoDoorLockPage != null)
+                    {
+                        videoDoorLockPage.UpdateState(pushMessageType);
+                    }
+
+                }
+            }
+
+        }
+        /// <summary>
+        /// 鑾峰彇钀ょ煶瑙嗛銆愰棬閿併�戝垪琛�
+        /// </summary>
+        /// <returns></returns>
+        public List<Function> GetVideoDoorLockList()
+        {
+            var list = FunctionList.List.GetVideoDoorLockList();
+#if DEBUG
+            //list.Add(new Function { name = "瑙嗛闂ㄩ攣涓�", sid = "23456789", spk = SPK.VideoDoorLock });
+            //list.Add(new Function { name = "瑙嗛闂ㄩ攣浜�", sid = "2345678922", spk = SPK.VideoDoorLock });
+#endif
+            return list;
+        }
+        #region  --------- 鍔熻兘鏂囦欢淇濆瓨锛屽垹闄� --------
+        /// <summary>
+        /// 淇濆瓨鏈湴鏂囦欢
+        /// </summary>
+        /// <param name="function">褰撳墠璁惧</param>
+        public void SaveFunctionFile(Function function)
+        {
+            if (function == null) return;
+            function.AssembleStatus();
+            function.SaveFunctionFile();
+            FunctionList.List.IniFunctionList(function.savePath, true);
+            MainPage.Log($"鏂囦欢淇濆瓨->{function.name}-->{function.spk}");
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏈湴鏂囦欢
+        /// </summary>
+        /// <param name="function">褰撳墠璁惧</param>
+        public void DeleteFunction(Function function)
+        {
+            if (function == null) return;
+            FunctionList.List.DeleteFunction(function);
+            MainPage.Log($"鏂囦欢鍒犻櫎->{function.name}-->{function.spk}");
+        }
+        #endregion
+        /// <summary>
+        /// 钀ょ煶瑙嗛闂ㄩ攣鐨勫浘鏍�
+        /// <param name="comerom">鏉ヨ嚜閭i噷</param>
+        /// </summary>
+        public string GetVideoDoorLockIcon(Comerom comerom)
+        {
+            if (comerom == Comerom.collect)
+            {
+                return "FunctionIcon/DoorLock/VideoDoorLockOpen.png";
+            }
+            else
+            {
+                return "FunctionIcon/DoorLock/VideoDoorlockClose.png";
+            }
+
+        }
+
+        /// <summary>
+        /// 鑾峰彇Loading瀵硅薄
+        /// </summary>
+        /// <returns></returns>
+        public Loading Loading
+        {
+            get
+            {
+                this.MainThread(() =>
+                {
+                    //if (loading != null && this.pageLayoutIndexValue == MainPage.BasePageView.ChildrenCount - 1)
+                    //{
+                    //    //闃叉浜岄噸娣诲姞瀵硅薄
+                    //    return;
+                    //}
+                    if (loading == null)//|| MainPage.BasePageView.ChildrenCount < 1)
+                    {
+                        loading = new Loading();
+                    }
+                    //loading.BringToFront();
+                    Application.MainPage.AddChidren(loading);
+                    //View view = MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1);
+                    //if (view is ViewGroup)
+                    //{
+                    //    pageLayoutIndexValue = MainPage.BasePageView.ChildrenCount - 1;
+                    //    ((ViewGroup)view).AddChidren(loading);
+                    //}
+                });
+                return loading;
+            }
+
+        }
+
+       
+        #region  ---------鑷畾涔夌嚎绋�(瀛愮嚎绋嬶紝涓荤嚎绋�)--------
+        /// <summary>
+        /// 瀛愮嚎绋�
+        /// </summary>
+        /// <paramref name="tipType"/>鏄惁瑕佹彁绀洪敊璇俊鎭�(榛樿鏄剧ず)<paramref>
+        /// <param name="action"></param>
+        public void SunThread(Action action, TipType tipType = TipType.confirmation)
+        {
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    action?.Invoke();
+                }
+                catch (Exception e)
+                {
+                    this.ShowAlert(e, tipType);
+                }
+            })
+            { IsBackground = true }.Start();
+
+        }
+        /// <summary>
+        /// 涓荤嚎绋�(UI鏇存柊)
+        /// </summary>
+        /// <paramref name="tipType"/>鏄惁瑕佹彁绀洪敊璇俊鎭�(榛樿鏄剧ず)<paramref>
+        /// <param name="action"></param>
+        public void MainThread(Action action, TipType tipType = TipType.confirmation)
+        {
+            Application.RunOnMainThread(() =>
+            {
+                try
+                {
+                    action?.Invoke();
+                }
+                catch (Exception e)
+                {
+                    this.ShowAlert(e, tipType);
+                }
+            });
+
+        }
+        #endregion
+        #region  --------- 鎻愮ず妗嗭紝纭妗� --------
+        /// <summary>
+        /// 瀵硅瘽妗�(鍙绋嬪簭鎶ラ敊鐨勬椂鍊欐墠鐢ㄥ埌)
+        /// </summary>
+        /// <paramref name="e"/>寮傚父瀵硅薄<paramref>
+        /// <paramref name="tipType"/>鏄惁瑕佹彁绀洪敊璇俊鎭�(榛樿鏄剧ず)<paramref>
+        private void ShowAlert(Exception e, TipType tipType)
+        {
+
+            if (tipType != TipType.confirmation)
+            {
+                return;
+            }
+            Application.RunOnMainThread(() =>
+            {
+                string msg = e.Message + "\r\n" + e.StackTrace;
+                Alert alert = new Alert("鎶辨瓑绋嬪簭鍑洪敊浜�.", "鎸塡"纭畾\"鑳借幏鍙栨洿璇︾粏鐨勯敊璇俊鎭�.", "鍙栨秷", "纭畾");
+                alert.Show();
+                alert.ResultEventHandler += (alerts, isBool) =>
+                {
+                    alert.Dismiss();
+                    if (isBool)
+                    {
+                        StackTraceLog stackTraceLog = new StackTraceLog(msg);
+                        stackTraceLog.Show();
+                    }
+                };
+            });
+        }
+        /// <summary>
+        /// 淇℃伅鎻愮ず绐楀彛锛岃嚜鍔ㄥ叧闂�
+        /// </summary>
+        /// <param name="msg">鎻愮ず閿欒鏂囨湰</param>
+        public void ShowTip(string msg, int time = 2)
+        {
+            Application.RunOnMainThread(() =>
+            {
+                new PublicAssmebly().TipMsgAutoClose(msg, false, time * 1000);
+            });
+        }
+
+     
+        #endregion
+        /// <summary>
+        /// 寮规绫诲瀷
+        /// </summary>
+        public enum TipType
+        {
+            none,//鏃犳彁绀�
+            flicker,//闂儊妗�
+            confirmation//纭妗�
+        }
+        /// <summary>
+        /// 琛ㄧず鏉ヨ嚜閭d釜鐣岄潰
+        /// </summary>
+        public enum Comerom
+        {
+            function,//鍔熻兘
+            collect,//鏀惰棌
+            room,//鎴块棿
+            push,//鎺ㄩ��
+        }
+
+#if __IOS__
+        IosIHdlInterface ezsdkDelegate;
+        /// <summary>
+        /// 涓撻棬瀹氫箟缁橧os鍥炶皟鐢ㄧ潃,娌℃湁鐗规畩鍚箟
+        /// </summary>
+        public class IosIHdlInterface : EZSDK.IOS.EZSDKDelegate
+        {
+            public Action<string> mAction;
+            public IosIHdlInterface()
+            {
+
+            }
+            /// <summary>
+            /// 
+            /// </summary>
+            /// <param name="p0">true鏄叆缃戞垚鍔�(婧愮敓鍥炶皟杩斿洖)</param>
+            /// <param name="p1">璁惧鐨勫簭鍒楀寲(婧愮敓鍥炶皟杩斿洖)</param>
+            public override void AddDeviceSuccessed(string deviceSerial)
+            {
+                mAction?.Invoke(deviceSerial);
+            }
+        }
+#else
+        /// <summary>
+        /// 涓撻棬瀹氫箟缁欏畨鍗撳洖璋冪敤鐫�,娌℃湁鐗规畩鍚箟
+        /// </summary>
+        public class AndroidIHdlInterface : Java.Lang.Object, IHdlInterface
+        {
+
+            Action<bool,string> mAction;
+            public AndroidIHdlInterface(Action<bool,string> action)
+            {
+                mAction = action;
+            }
+            /// <summary>
+            /// 
+            /// </summary>
+            /// <param name="p0">true鏄叆缃戞垚鍔�(婧愮敓鍥炶皟杩斿洖)</param>
+            /// <param name="p1">璁惧鐨勫簭鍒楀寲(婧愮敓鍥炶皟杩斿洖)</param>
+            public void AddCallback(bool p0, string p1)
+            {
+                mAction?.Invoke(p0,p1);
+            }
+
+           
+        }
+#endif
+
+
+    }
+
+
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/ObjectClass.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/ObjectClass.cs
new file mode 100644
index 0000000..f893ff1
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/ObjectClass.cs
@@ -0,0 +1,104 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.Entity;
+
+namespace HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock
+{
+    public class ObjectClass
+    {
+
+
+    }
+    /// <summary>
+    /// 鐢ㄦ埛淇℃伅(钀ょ煶瑙嗛闂ㄩ攣) 
+    /// </summary>
+    public class UserVideoDoorLockInfo
+    {
+        /// <summary>
+        /// 鐢ㄦ埛id
+        /// </summary>
+        public string extUserId = string.Empty;
+        /// <summary>
+        /// 鐢ㄦ埛鍚嶇О
+        /// </summary>
+        public string extUserName = string.Empty;
+
+    }
+    /// <summary>
+    /// 闂ㄩ攣鐘舵��(钀ょ煶瑙嗛闂ㄩ攣)
+    /// </summary>
+    public class VideoDoorLockInfo
+    {
+        /// <summary>
+        /// 閿佺姸鎬侊紙lock:閿侊紱unlock:瑙i攣锛�
+        /// </summary>
+        public string lockStatus = string.Empty;
+        /// <summary>
+        /// 闂ㄧ姸鎬侊紙open锛氬紑锛沜lose锛氬叧锛�
+        /// </summary>
+        public string doorStatus = string.Empty;
+
+    }
+
+    /// <summary>
+    /// 鐢垫睜璇︽儏(钀ょ煶瑙嗛闂ㄩ攣)
+    /// </summary>
+    public class CellInfo
+    {
+        /// <summary>
+        /// 鐢甸噺
+        /// </summary>
+        public string remain = string.Empty;
+        /// <summary>
+        /// 鐢垫睜鍚嶇О
+        /// </summary>
+        public string name = string.Empty;
+
+    }
+    /// <summary>
+    /// 鑾峰彇闂ㄩ攣鍒楄〃
+    /// </summary>
+    public class DoorLockList
+    {
+        /// <summary>
+        /// 闂ㄩ攣璁惧鍒楄〃
+        /// </summary>
+        public List<Function> list = new List<Function>();
+    }
+    /// <summary>
+    /// 闂ㄩ攣鍨嬪彿鍒楄〃
+    /// </summary>
+    public class LockModels {
+        /// <summary>
+        /// 鍨嬪彿鍒楄〃
+        /// </summary>
+        public List<string> lockModels = new List<string>();
+    }
+    /// <summary>
+    /// 鎺ㄩ�佸唴瀹瑰璞�
+    /// </summary>
+    public class ExpantContent
+    {
+        /// <summary>
+        /// 璁惧搴忓垪鍙�
+        /// </summary>
+        public string devSerial = string.Empty;
+        /// <summary>
+        /// 璁惧id
+        /// </summary>
+        public string deviceId = string.Empty;
+        /// <summary>
+        /// 涓嶇煡閬撴槸鍟�
+        /// </summary>
+        public string interphoneTypeEnum = string.Empty;
+        /// <summary>
+        /// 涓嶇煡閬撴槸鍟�
+        /// </summary>
+        public string subToken = string.Empty;
+        /// <summary>
+        /// 浜戦泙涓婂畾涔夌殑璁惧spk
+        /// </summary>
+        public string spk = string.Empty;
+    }
+
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/StackTraceLog.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/StackTraceLog.cs
new file mode 100644
index 0000000..05ad631
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/StackTraceLog.cs
@@ -0,0 +1,58 @@
+锘縰sing System;
+using HDL_ON.UI.CSS;
+using HDL_ON.UI.Music;
+using Shared;
+
+namespace HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock
+{
+    public class StackTraceLog
+    {
+        /// <summary>
+        /// 鍫嗗彔璺熻釜鏃ュ織
+        /// </summary>
+        public string msg;
+
+        public StackTraceLog(string msg)
+        {
+            this.msg = msg;
+        }
+        public void Show()
+        {
+
+            Dialog dialog = new Dialog()
+            {
+                BackgroundColor = CSS_Color.textWhiteColor,
+            };
+            dialog.Show();
+            TopView topView = new TopView();
+            topView.topNameBtn.Text="閿欒鏃ュ織淇℃伅";
+            dialog.AddChidren(topView.TopFLayoutView());
+            topView.clickBackBtn.MouseUpEventHandler += (sen, e) =>
+            {
+                dialog.Close();
+            };
+           
+            var middleFl = new FrameLayout
+            {
+                Y = topView.fLayout.Bottom,
+                Height = Application.GetRealHeight(H_W.H - H_W.T_Height),
+            };
+            dialog.AddChidren(middleFl);
+          
+            Button btnLogText = new Button 
+            {
+                //TextSize = TextSize.Text14,
+                TextColor = MusicColor.Text18Color,
+                Width = Application.GetRealWidth(H_W.W - 16 - 16),
+                Height = middleFl.Height,
+                X = Application.GetRealWidth(16),
+                Text = this.msg,
+                TextAlignment = TextAlignment.TopLeft,
+                IsMoreLines = true,
+            };
+            middleFl.AddChidren(btnLogText);
+
+
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideDoorLockSend.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideDoorLockSend.cs
new file mode 100644
index 0000000..021f52d
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideDoorLockSend.cs
@@ -0,0 +1,237 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Threading;
+using HDL_ON.DAL.Server;
+using HDL_ON.Entity;
+using Shared;
+using static HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod;
+
+
+namespace HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock
+{
+    /// <summary>
+    /// 钀ょ煶瑙嗛闂ㄩ攣鏁版嵁鍙戦��
+    /// </summary>
+    public class VideDoorLockSend
+    {
+
+        private static VideDoorLockSend send = null;
+        /// <summary>
+        /// 鑾峰彇褰撳墠鐨勫璞� 
+        /// </summary>
+        public static VideDoorLockSend Current
+        {
+            get
+            {
+                if (send == null)
+                {
+                    send = new VideDoorLockSend();
+                }
+
+                return send;
+            }
+        }
+        /// <summary>
+        /// 瑙g粦璁惧(钀ょ煶瑙嗛闂ㄩ攣)
+        /// </summary>
+        /// <param name="function">褰撳墠鐨勮澶�</param>
+        /// <param name="action">鍥炶皟缁撴灉</param>
+        /// <param name="tipType">鏄惁闇�瑕佹彁绀�,榛樿鎻愮ず</param>
+        public void DelDevice(Function function, Action<bool> action, TipType tipType = TipType.flicker)
+        {
+            new Thread(() =>
+            {
+                try
+                {
+                    Dictionary<string, object> d = new Dictionary<string, object>();
+                    d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+                    d.Add("deviceSerial", function.sid);//绛夊悓闂ㄩ攣搴忓垪鍙�
+                    d.Add("platform", 1);//骞冲彴
+                    var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_DeleteDevice, "鍒犻櫎钀ょ煶闂ㄩ攣璁惧");
+                    if (!this.DataChecking(responsePackNew, tipType))
+                    {
+                        return;
+                    }
+
+                    if (function != null)
+                    {
+                        action?.Invoke(true);
+                    }
+                }
+                catch (Exception s)
+                {
+                }
+            })
+            { IsBackground = true }.Start();
+
+        }
+        /// <summary>
+        /// 鑾峰彇闂ㄩ攣鐘舵��(钀ょ煶瑙嗛闂ㄩ攣)
+        /// </summary>
+        /// <param name="function">褰撳墠鐨勮澶�</param>
+        /// <param name="tipType">鏄惁闇�瑕佹彁绀�,榛樿鎻愮ず</param>
+        /// <param name="return">杩斿洖缁撴灉涓嶄細涓簄ull</param>
+        public VideoDoorLockInfo GetVideoDoorLockState(Function function, TipType tipType = TipType.flicker)
+        {
+
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+            d.Add("deviceId", function.deviceId);
+            var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_Lockstatus, "鑾峰彇钀ょ煶瑙嗛闂ㄩ攣鐘舵��");
+            if (!this.DataChecking(responsePackNew,tipType))
+            {
+                return new VideoDoorLockInfo();
+            }
+
+            var videoDoorLockInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<VideoDoorLockInfo>(responsePackNew.Data.ToString());
+            if (videoDoorLockInfo == null)
+            {
+                return new VideoDoorLockInfo();
+            }
+            return videoDoorLockInfo;
+
+
+
+        }
+        /// <summary>
+        /// 鑾峰彇鐢垫睜鐢甸噺(钀ょ煶瑙嗛闂ㄩ攣)
+        /// </summary>
+        /// <param name="function">褰撳墠鐨勮澶�</param>
+        /// <param name="tipType">鏄惁闇�瑕佹彁绀�,榛樿鎻愮ず</param>
+        /// <param name="return">杩斿洖缁撴灉涓嶄細涓簄ull</param>
+        public CellInfo GetCellValue(Function function, TipType tipType = TipType.flicker)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+            d.Add("deviceId", function.deviceId);
+            var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_Details, "鑾峰彇钀ょ煶闂ㄩ攣璁惧鐢甸噺");
+            if (!this.DataChecking(responsePackNew,tipType))
+            {
+                return new CellInfo();
+            }
+            var cellInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<CellInfo>(responsePackNew.Data.ToString());
+            if (cellInfo == null)
+            {
+                return new CellInfo();
+            }
+
+            return cellInfo;
+
+        }
+        /// <summary>
+        /// 鑾峰彇闂ㄩ攣鐢ㄦ埛鍒楄〃(钀ょ煶瑙嗛闂ㄩ攣)
+        /// </summary>
+        /// <param name="function">褰撳墠鐨勮澶�</param>
+        /// <param name="tipType">鏄惁闇�瑕佹彁绀�,榛樿鎻愮ず</param>
+        /// <param name="return">杩斿洖缁撴灉涓嶄細涓簄ull</param>
+        public List<UserVideoDoorLockInfo> GetVideoDoorLockUserListInfo(Function function, TipType tipType = TipType.flicker)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+            d.Add("deviceId", function.deviceId);
+            var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_UserList, "鑾峰彇钀ょ煶闂ㄩ攣鐢ㄦ埛鍒楄〃");
+            if (!this.DataChecking(responsePackNew, tipType))
+            {
+                return new List<UserVideoDoorLockInfo>();
+            }
+            var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<UserVideoDoorLockInfo>>(responsePackNew.Data.ToString());
+            if (list == null)
+            {
+                return new List<UserVideoDoorLockInfo>();
+            }
+            return list;
+        }
+        /// <summary>
+        /// 鑾峰彇闂ㄩ攣璁惧鍒楄〃(钀ょ煶瑙嗛闂ㄩ攣)
+        /// </summary>
+        /// <param name="spk">鎸囧畾spk鑾峰彇</param>
+        /// <param name="tipType">鏄惁闇�瑕佹彁绀�,榛樿鎻愮ず</param>
+        /// <returns>杩斿洖缁撴灉涓嶄細涓簄ull</returns>
+        public List<Function> GetVideoDoorLockDeviceList(string spk, TipType tipType = TipType.flicker)
+        {
+
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+            d.Add("spk", spk);
+            var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_GetDevcieList, "鑾峰彇钀ょ煶闂ㄩ攣璁惧鍒楄〃");
+            if (!this.DataChecking(responsePackNew, tipType))
+            {
+                return new List<Function>();
+            }
+            var doorLockList = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockList>(responsePackNew.Data.ToString());
+            if (doorLockList == null)
+            {
+                return new DoorLockList().list;
+            }
+            return doorLockList.list;
+        }
+
+        /// <summary>
+        /// 鑾峰彇闂ㄩ攣鍨嬪彿鍒楄〃(钀ょ煶瑙嗛闂ㄩ攣)
+        /// </summary>
+        /// <param name="tipType">鏄惁闇�瑕佹彁绀�,榛樿鎻愮ず</param>
+        /// <returns>杩斿洖缁撴灉涓嶄細涓簄ull</returns>
+        public List<string> GetVideoDoorLockLockModelsList(TipType tipType = TipType.flicker)
+        {
+            var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(new object { }, NewAPI.Api_Post_Lock_Models, "鑾峰彇钀ょ煶闂ㄩ攣鍨嬪彿鍒楄〃");
+            if (!this.DataChecking(responsePackNew, tipType))
+            {
+                return new List<string>();
+            }
+            var lockModels = Newtonsoft.Json.JsonConvert.DeserializeObject<LockModels>(responsePackNew.Data.ToString());
+            if (lockModels == null)
+            {
+                return new LockModels().lockModels;
+            }
+            return lockModels.lockModels;
+        }
+
+        /// <summary>
+        /// 鍏堣幏鍙栬悿鐭充簯瀛愯处鍙穞oken
+        /// </summary>
+        /// <param name="tipType">鏄惁闇�瑕佹彁绀�,榛樿鎻愮ず</param>
+        public string GetEZGetChildToken(TipType tipType = TipType.flicker)
+        {
+            //鍏堣幏鍙栬悿鐭充簯瀛愯处鍙穞oken
+            var responsePackNew = new HttpServerRequest().EZGetChildToken();
+            if (!this.DataChecking(responsePackNew, tipType))
+            {
+                return "";
+            }
+            return responsePackNew.Data.ToString();
+        }
+        /// <summary>
+        /// 妫�楠屾暟鎹洖澶嶆垚鍔熸垨鑰呭け璐�
+        /// </summary>
+        /// <param name="responsePackNew">鍥炲鏁版嵁瀵硅薄</param>
+        /// <param name="tipType">鏄惁闇�瑕佹彁绀�</param>
+        /// <returns></returns>
+        private bool DataChecking(ResponsePackNew responsePackNew, TipType tipType)
+        {
+            if (responsePackNew.Data == null || responsePackNew.Code != "0" || responsePackNew.Data.ToString() == "")
+            {
+                if (TipType.flicker == tipType)
+                {
+                    if (responsePackNew == null)
+                    {
+                        responsePackNew = new ResponsePackNew { message = "娌″洖澶�,璇风‘璁ょ綉缁滄槸鍚︽甯�.", Code = "-1", };
+                    }
+                    Application.RunOnMainThread(() =>
+                    {
+                        //new Tip()
+                        //{
+                        //    CloseTime = 1,
+                        //    Text = responsePackNew.message + "(" + responsePackNew.Code + ")",
+                        //    Direction = AMPopTipDirection.None,
+                        //}.Show(MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1));
+                        CommonMethod.Current.ShowTip(responsePackNew.message + "(" + responsePackNew.Code + ")");
+                    });
+                }
+                return false;
+            }
+            return true;
+        }
+
+
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockListPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockListPage.cs
new file mode 100644
index 0000000..11c271d
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockListPage.cs
@@ -0,0 +1,222 @@
+锘縰sing Shared;
+using HDL_ON.Stan;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HDL_ON.UI.CSS;
+using HDL_ON.Entity;
+
+namespace HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock
+{
+    /// <summary>
+    /// 瑙嗛闂ㄩ攣鍒楄〃鐣岄潰
+    /// </summary>
+    public class VideoDoorLockListPage : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 闂ㄩ攣璁惧鍒楄〃
+        /// </summary>
+        private List<Function> listDevice = new List<Function>();
+        /// <summary>
+        /// 鐢垫睜鎺т欢鍒楄〃(key:璁惧鐨剆id)
+        /// </summary>
+        private Dictionary<string, BatteryPersentControl> dicBatteryContr = new Dictionary<string, BatteryPersentControl>();
+        /// <summary>
+        /// 鍒楄〃鎺т欢
+        /// </summary>
+        private VerticalListControl listView = null;
+        /// <summary>
+        /// 鍒犻櫎璁惧鍚庨渶瑕佹洿鏂扮晫闈㈢殑鍥炶皟
+        /// </summary>
+        public Action action;
+
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        public VideoDoorLockListPage(Action action) {
+            this.action = action;
+        }
+        
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        /// <param name="i_listDevice">闂ㄩ攣璁惧鍒楄〃</param>
+        public void ShowForm(List<Function> i_listDevice)
+        {
+            this.listDevice.AddRange(i_listDevice);
+            //鏅鸿兘闂ㄩ攣
+            base.SetTitleText(Language.StringByID(StringId.shipinmensuo));
+
+            //鍒濆鍖栦腑閮ㄤ俊鎭�
+            this.InitMiddleFrame();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄤ俊鎭�
+        /// </summary>
+        private void InitMiddleFrame()
+        {
+            //娓呯┖bodyFrame
+            this.ClearBodyFrame();
+
+            string nowSelectId = string.Empty;
+            //妤煎眰涓嬫媺鍥炬爣
+            var btnFloor = new NormalViewControl(500, Application.GetRealHeight(16), false);
+            var btnFloorIcon = new IconViewControl(16);
+            btnFloorIcon.X = HdlControlResourse.XXLeft;
+            btnFloorIcon.Y = Application.GetRealHeight(18);
+            btnFloorIcon.UnSelectedImagePath = "Public/DownIcon.png";
+            bodyFrameLayout.AddChidren(btnFloorIcon);
+            btnFloorIcon.ButtonClickEvent += (sender, e) =>
+            {
+                //鏄剧ず涓嬫媺鍒楄〃
+                var form = new FloorRoomSelectPopupView();
+                form.ShowDeviceFunctionView(btnFloor, this.listDevice, (selectId, listFunc) =>
+                {
+                    btnFloor.Width = btnFloor.GetRealWidthByText();//閲嶇疆鏂囨湰瀹藉害
+                    nowSelectId = selectId;
+                    //閲嶆柊鍒濆鍖栭棬閿佸垪琛ㄦ帶浠�
+                    this.InitDoorListControl(listFunc);
+
+                }, nowSelectId);
+            };
+            //妤煎眰
+            btnFloor.X = btnFloorIcon.Right + Application.GetRealWidth(2);
+            btnFloor.TextColor = CSS_Color.FirstLevelTitleColor;
+            btnFloor.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnFloor.Text = DB_ResidenceData.Instance.CurFloor.roomName;
+            //btnFloor.Width = btnFloor.GetRealWidthByText();
+            bodyFrameLayout.AddChidren(btnFloor);
+            //璁╁畠鐩稿鍥炬爣灞呬腑
+            btnFloor.Y = btnFloorIcon.Y + (btnFloorIcon.Height - btnFloor.Height) / 2;
+            btnFloor.ButtonClickEvent += (sender, e) =>
+            {
+                btnFloorIcon.ButtonClickEvent(null, null);
+            };
+
+            //鍒楄〃鎺т欢
+            this.listView = new VerticalListControl();
+            listView.Y = Application.GetRealHeight(53);
+            listView.Height = bodyFrameLayout.Height - Application.GetRealHeight(53);
+            bodyFrameLayout.AddChidren(listView);
+
+            //鍒濆鍖栭棬閿佸垪琛ㄦ帶浠�
+            this.InitDoorListControl(this.listDevice);
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞闂ㄩ攣鎺т欢_______________________
+
+        /// <summary>
+        /// 鍒濆鍖栭棬閿佸垪琛ㄦ帶浠�
+        /// </summary>
+        private void InitDoorListControl(List<Function> i_listDevice)
+        {
+            this.listView.RemoveAll();
+            this.dicBatteryContr = new Dictionary<string, BatteryPersentControl>();
+
+            //鐢熸垚闂ㄩ攣鎺т欢
+            foreach (var device in i_listDevice)
+            {
+                this.AddDoorControl(device);
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞闂ㄩ攣鎺т欢
+        /// </summary>
+        /// <param name="i_device">闂ㄩ攣瀵硅薄</param>
+        private void AddDoorControl(Function i_device)
+        {
+            //鐧借壊鑳屾櫙瀹瑰櫒
+            var frameBack = new FrameLayoutStatuControl();
+            frameBack.Width = Application.GetRealWidth(343);
+            frameBack.Height = Application.GetRealHeight(96);
+            frameBack.Radius = (uint)Application.GetRealWidth(12);
+            frameBack.Gravity = Gravity.CenterHorizontal;
+            frameBack.BackgroundColor = CSS_Color.MainBackgroundColor;
+            this.listView.AddChidren(frameBack);
+            //闂ㄩ攣鍥炬爣
+            var btnIcon = new IconViewControl(32);
+            btnIcon.X = Application.GetRealWidth(10);
+            btnIcon.Y = Application.GetRealHeight(15);
+            btnIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/DoorLock.png";
+            frameBack.AddChidren(btnIcon, ChidrenBindMode.BindEvent);
+            //璁惧鍚嶅瓧
+            var btnName = new Button();
+            btnName.X = btnIcon.Right + Application.GetRealWidth(12);
+            btnName.Y = Application.GetRealHeight(12);
+            btnName.Width = Application.GetRealWidth(150);
+            btnName.Height = Application.GetRealHeight(20);
+            btnName.TextColor = CSS_Color.FirstLevelTitleColor;
+            btnName.TextAlignment = TextAlignment.CenterLeft;
+            btnName.Text = i_device.name;
+            frameBack.AddChidren(btnName, ChidrenBindMode.BindEvent);
+            //鎴块棿
+            var btnRoom = new Button();
+            btnRoom.X = btnName.X;
+            btnRoom.Y = btnName.Bottom + Application.GetRealHeight(4);
+            btnRoom.Width = Application.GetRealWidth(150);
+            btnRoom.Height = Application.GetRealHeight(15);
+            btnRoom.TextColor = CSS_Color.PromptingColor1;
+            btnRoom.TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel;
+            btnRoom.TextAlignment = TextAlignment.CenterLeft;
+            btnRoom.Text = i_device.GetRoomListName();
+            frameBack.AddChidren(btnRoom, ChidrenBindMode.BindEvent);
+            //鐢垫睜鍥炬爣
+            var btnBattery = new BatteryPersentControl();
+            btnBattery.Y = Application.GetRealHeight(62);
+            //frameBack.AddChidren(btnBattery, ChidrenBindMode.BindEvent);
+            btnBattery.InitControl();
+            btnBattery.SetValue(80);
+            btnBattery.X = frameBack.Width - btnBattery.Width - Application.GetRealWidth(12);
+            this.dicBatteryContr[i_device.sid] = btnBattery;
+            frameBack.ButtonClickEvent += (sender, e) =>
+            {
+                
+                var form = new VideoDoorLockPage(i_device, btnName, btnRoom, CommonMethod.Comerom.function,()=> {
+                    this.CloseForm();
+                    this.action?.Invoke();
+                });
+                MainPage.BasePageView.AddChidren(form);
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                form.Show();
+              
+            };
+
+            //搴曢儴鍐嶅姞涓棿璺�
+            var frameSpace = new FrameLayout();
+            frameSpace.Height = Application.GetRealHeight(12);
+            this.listView.AddChidren(frameSpace);
+        }
+
+        #endregion
+
+
+        #region 鈻� 璁惧鐘舵�佹帹閫乢______________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佹帹閫�
+        /// </summary>
+        /// <param name="i_LocalDevice"></param>
+        public override void DeviceStatuPush(Function i_LocalDevice)
+        {
+            //涓嶆槸鐩爣璁惧
+            if (this.dicBatteryContr.ContainsKey(i_LocalDevice.sid) == false)
+            {
+                return;
+            }
+
+        }
+
+        #endregion
+
+      
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs
new file mode 100644
index 0000000..42919c2
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs
@@ -0,0 +1,540 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HDL_ON.UI.CSS;
+using HDL_ON.Entity;
+using HDL_ON.DriverLayer;
+using HDL_ON.UI.Music;
+using HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock;
+
+namespace HDL_ON.UI
+{
+    /// <summary>
+    /// 瑙嗛闂ㄩ攣鐨勬帶鍒剁晫闈�
+    /// </summary>
+    public class VideoDoorLockPage : FrameLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+        /// <summary>
+        /// 璁惧
+        /// </summary>
+        private Function device;
+        /// <summary>
+        /// 涓婁竴绾х晫闈㈢殑璁惧鍚嶅瓧鎺т欢
+        /// </summary>
+        private Button btnDeviceName;
+        /// <summary>
+        /// 涓婁竴绾х晫闈㈢殑鎴块棿鍚嶅瓧鎺т欢
+        /// </summary>
+        private Button btnRoomName;
+        /// <summary>
+        /// 澶撮儴甯冨眬
+        /// </summary>
+        private TopView topView;
+        /// <summary>
+        /// 褰撳墠璁惧鍚嶇О
+        /// </summary>
+        private Button btnCurrDeviceName;
+        /// <summary>
+        /// 鍖哄煙
+        /// </summary>
+        private Button btnCurrDeviceRoom;
+        /// <summary>
+        /// 鐢甸噺鐖舵帶浠�
+        /// </summary>
+        private FrameLayout cellFrame;
+        /// <summary>
+        /// 鐢甸噺
+        /// </summary>
+        private Button btnCell;
+        /// <summary>
+        /// 鐢甸噺杩涘害鏉�
+        /// </summary>
+        private DiyArcSeekBar cellDiyArcSeekBar;
+        /// <summary>
+        ///鏀惰棌鍥炬爣
+        /// </summary>
+        private Button btnCollectIcon;
+        /// <summary>
+        /// 闂ㄩ攣鐘舵��
+        /// </summary>
+        private Button btnDoorLockIcon;
+        /// <summary>
+        /// 瀹炴椂瑙嗛
+        /// </summary>
+        private CustomFrameLayout rtvFL;
+        /// <summary>
+        /// 涓存椂瀵嗙爜
+        /// </summary>
+        private CustomFrameLayout pswFL;
+        /// <summary>
+        /// 鍘嗗彶璁板綍
+        /// </summary>
+        private CustomFrameLayout recordFL;
+
+        /// <summary>
+        /// 琛ㄧず鏉ヨ嚜閭d釜鐣岄潰
+        /// </summary>
+        private CommonMethod.Comerom comerom;
+        /// <summary>
+        /// 鍒犻櫎璁惧鍚庨渶瑕佹洿鏂扮晫闈㈢殑鍥炶皟
+        /// </summary>
+        public Action action;
+        #endregion
+
+
+        /// <summary>
+        /// 鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="function">璁惧</param>
+        /// <param name="btnDeviceName">涓婁竴绾х晫闈㈢殑璁惧鍚嶅瓧鎺т欢(娉�:涓嶈兘浼爊ull,娌℃湁鍙互浼爊ew Button())</param>
+        /// <param name="btnRoomName">涓婁竴绾х晫闈㈢殑鎴块棿鍚嶅瓧鎺т欢(娉�:涓嶈兘浼爊ull,娌℃湁鍙互浼爊ew Button())</param> 
+        public VideoDoorLockPage(Function function, Button btnDeviceName, Button btnRoomName, CommonMethod.Comerom comerom, Action action)
+        {
+            this.device = function;
+            this.btnDeviceName = btnDeviceName;
+            this.btnRoomName = btnRoomName;
+            this.comerom = comerom;
+            this.action = action;
+
+        }
+
+        public void Show()
+        {
+            //鍒濆鍖朥I
+            this.InitUI();
+            //鍒濆鍖栦簨浠�
+            this.EventListener();
+            //璇诲彇鏁版嵁
+            this.ReadData();
+
+        }
+
+
+        /// <summary>
+        /// 鍒濆鍖栫晫闈�
+        /// </summary>
+        private void InitUI()
+        {
+            #region   ---鐣岄潰甯冨眬---
+            this.BackgroundColor = MusicColor.ViewColor;
+            this.topView = new TopView();
+            this.topView.setBtn.Visible = true;
+            this.topView.topNameBtn.TextID = StringId.shipinmensuo;
+            this.AddChidren(topView.TopFLayoutView());
+            var middleFl = new FrameLayout
+            {
+                Y = topView.fLayout.Bottom,
+                Height = Application.GetRealHeight(H_W.H - H_W.T_Height),
+            };
+            this.AddChidren(middleFl);
+
+            var whiteFl = new FrameLayout
+            {
+                Y = Application.GetRealHeight(24),
+                X = Application.GetRealWidth(24),
+                Height = Application.GetRealHeight(526),
+                Width = Application.GetRealWidth(327),
+                BackgroundImagePath = "MusicIcon/playBj.png",
+                Name = "fl",
+            };
+            middleFl.AddChidren(whiteFl);
+
+            btnCollectIcon = new Button
+            {
+                X = Application.GetRealWidth(264),
+                Y = Application.GetRealHeight(14),
+                Width = Application.GetRealWidth(40),
+                Height = Application.GetRealWidth(40),
+                UnSelectedImagePath = "MusicIcon/collect.png",
+                SelectedImagePath = "MusicIcon/collectSelected.png",
+                IsSelected = this.device.collect,
+                Name = "collect"
+            };
+            whiteFl.AddChidren(btnCollectIcon);
+
+            btnCurrDeviceName = new Button
+            {
+                TextSize = TextSize.Text24,
+                TextColor = MusicColor.Text18Color,
+                Width = Application.GetRealWidth(160),
+                Height = Application.GetRealHeight(33),
+                Y = Application.GetRealHeight(16),
+                X = Application.GetRealWidth(16),
+                Text = this.device.name,
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            whiteFl.AddChidren(btnCurrDeviceName);
+
+
+            btnCurrDeviceRoom = new Button
+            {
+                TextSize = TextSize.Text12,
+                TextColor = MusicColor.MusicNoTxetColor,
+                Width = Application.GetRealWidth(160),
+                Height = Application.GetRealHeight(17),
+                Y = btnCurrDeviceName.Bottom + Application.GetRealHeight(4),
+                X = Application.GetRealWidth(16),
+                Text = this.device.GetRoomListName(),
+                TextAlignment = TextAlignment.CenterLeft,
+            };
+            whiteFl.AddChidren(btnCurrDeviceRoom);
+
+            cellFrame = new FrameLayout
+            {
+                X = btnCurrDeviceRoom.Right + Application.GetRealWidth(20),
+                Y = btnCurrDeviceName.Bottom + Application.GetRealHeight(5),
+                Width = Application.GetRealWidth(30),
+                Height = Application.GetRealHeight(16),
+            };
+            whiteFl.AddChidren(cellFrame);
+
+            cellDiyArcSeekBar = new DiyArcSeekBar
+            {
+                X = Application.GetRealWidth(3),
+                Y = Application.GetRealHeight(3),
+                Width = cellFrame.Width + Application.GetRealWidth(-6),
+                Height = cellFrame.Height + Application.GetRealHeight(-6),
+                Progress = 60,
+                ProgressBarColor = MusicColor.MusicNoTxetColor,
+                MaxValue = 100,
+                MinValue = 0,
+
+                //IsCanMove = false,
+                //IsCanScrolled=false,
+            };
+            //cellFrame.AddChidren(cellDiyArcSeekBar);
+
+            btnCell = new Button
+            {
+                TextSize = TextSize.Text10,
+                TextColor = MusicColor.TextColor,
+                Text = "60" + "%",
+                TextAlignment = TextAlignment.Center,
+                UnSelectedImagePath = "FunctionIcon/DoorLock/Cell.png",
+            };
+            cellFrame.AddChidren(btnCell);
+
+
+            //闂ㄩ攣鐘舵��
+            btnDoorLockIcon = new Button
+            {
+                X = Application.GetRealWidth(65),
+                Y = Application.GetRealHeight(108),
+                Width = Application.GetRealWidth(198),
+                Height = Application.GetRealWidth(200),
+                UnSelectedImagePath = "FunctionIcon/DoorLock/UnLocked.png",
+                SelectedImagePath = "FunctionIcon/DoorLock/UnLocking.png",
+            };
+            whiteFl.AddChidren(btnDoorLockIcon);
+
+            this.CalculatedPosition();//閲嶆柊璁$畻瀹藉害
+
+            int heightY = btnDoorLockIcon.Bottom + Application.GetRealHeight(70);
+            //瀹炴椂瑙嗛
+            rtvFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
+            whiteFl.AddChidren(rtvFL);
+            rtvFL.Y = heightY;
+            rtvFL.X = Application.GetRealWidth(41);
+            rtvFL.AddImageView();
+            rtvFL.AddTextButtonView();
+            rtvFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/RTV.png";
+            rtvFL.GetTextButton().TextID = StringId.shishishipin;
+            //鍘嗗彶璁板綍
+            recordFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
+            whiteFl.AddChidren(recordFL);
+            recordFL.Y = heightY;
+            recordFL.X = rtvFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
+            recordFL.AddImageView();
+            recordFL.AddTextButtonView();
+            recordFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/HistoryList.png";
+            recordFL.GetTextButton().TextID = StringId.lishijilu;
+            //涓存椂瀵嗙爜
+            pswFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout);
+            whiteFl.AddChidren(pswFL);
+            pswFL.Y = heightY;
+            pswFL.X = recordFL.Right + Application.GetRealWidth(CustomFrameLayout.interval);
+            pswFL.AddImageView();
+            pswFL.AddTextButtonView();
+            pswFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/OneOpenLock.png";
+            pswFL.GetTextButton().TextID = StringId.linshimima1;
+
+
+
+            #endregion
+
+
+        }
+        /// <summary>
+        /// 娉ㄥ唽浜嬩欢
+        /// </summary>
+        private void EventListener()
+        {
+            //杩斿洖
+            this.topView.clickBackBtn.MouseUpEventHandler += (sender, e) =>
+            {
+                this.RemoveFromParent();
+            };
+            //璁剧疆
+            this.topView.clickSetBtn.MouseUpEventHandler += (sender, e) =>
+            {
+                CommonMethod.Current.MainThread(() =>
+                {
+                    //璋冪敤绉�缁曠殑鐣岄潰
+                    var infoView = new UI.FunctionBaseInfoSetPage(this.device, () =>
+                     {
+                         if (this.btnDeviceName == null || this.btnRoomName == null || this.device == null)
+                         {
+                             return;
+                         }
+                         ////鍒锋柊鏄剧ず
+                         this.btnDeviceName.Text = this.device.name;
+                         this.btnRoomName.Text = this.device.GetRoomListName();
+                         this.btnCurrDeviceName.Text = this.device.name;
+                         this.btnCurrDeviceRoom.Text = this.device.GetRoomListName();
+                         this.CalculatedPosition();//閲嶆柊璁$畻瀹藉害
+
+                     });
+                    infoView.actionDel += () =>
+                      {
+                          //瑙g粦璁惧鍚�
+                          this.RemoveFromParent();
+                          this.action?.Invoke();
+
+                      };
+                    MainPage.BasePageView.AddChidren(infoView);
+                    infoView.LoadPage();
+                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                });
+            };
+            //鏀惰棌
+            this.btnCollectIcon.MouseUpEventHandler += (sender, e) =>
+            {
+                btnCollectIcon.IsSelected = this.device.collect = !btnCollectIcon.IsSelected;
+                this.device.CollectFunction();
+            };
+            //瀹炴椂瑙嗛
+            this.rtvFL.SetClickListener((fl, btnStateImage, btnStateText) =>
+            {
+                CommonMethod.Current.SkipRTVActivity(this.device.sid, this.device.deviceId, this.device.spk, false);
+            });
+            //涓存椂瀵嗙爜
+            this.pswFL.SetClickListener((fl, btnStateImage, btnStateText) =>
+            {
+                CommonMethod.Current.SkipPSWActivity(this.device.deviceId);
+            });
+            //鍘嗗彶璁板綍
+            this.recordFL.SetClickListener((fl, btnStateImage, btnStateText) =>
+            {
+                CommonMethod.Current.SkipRecordActivity(this.device.deviceId);
+            });
+
+
+        }
+        /// <summary>
+        /// 鍒濆鏁版嵁
+        /// </summary>
+        private void ReadData()
+        {
+            CommonMethod.Current.Loading.Start();
+            CommonMethod.Current.SunThread(() =>
+            {
+                try
+                {
+                    var videoDoorLockInfo = VideDoorLockSend.Current.GetVideoDoorLockState(this.device);
+                    var cellInfo = VideDoorLockSend.Current.GetCellValue(this.device);
+                    CommonMethod.Current.MainThread(() =>
+                    {
+                        //this.cellDiyArcSeekBar.Progress = i;
+                        //鏇存柊鐢甸噺鍊�
+                        this.btnCell.Text = cellInfo.remain + "%";
+                        this.btnDoorLockIcon.IsSelected = videoDoorLockInfo.doorStatus == "open";
+                    });
+                }
+                catch { }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        CommonMethod.Current.Loading.Hide();
+                    });
+                }
+            });
+        }
+
+
+
+        /// <summary>
+        /// 閲嶆柊璁$畻瀹藉害(璁惧鍚嶇О,鎴块棿鎺т欢)
+        /// </summary>
+        private void CalculatedPosition()
+        {
+            this.btnCurrDeviceName.Width = this.btnCurrDeviceName.GetTextWidth();
+            if (this.btnCurrDeviceName.GetTextWidth() > this.btnCollectIcon.X)
+            {
+                //閲嶆柊璁$畻瀹藉害
+                this.btnCurrDeviceName.Width = this.btnCollectIcon.X + Application.GetRealWidth(-10);
+            }
+            this.btnCurrDeviceRoom.Width = this.btnCurrDeviceRoom.GetTextWidth();
+            if (this.btnCurrDeviceRoom.GetTextWidth() > this.btnCollectIcon.X)
+            {
+                //閲嶆柊璁$畻瀹藉害
+                this.btnCurrDeviceRoom.Width = this.btnCollectIcon.X + Application.GetRealWidth(-20 - 10);
+            }
+            this.cellFrame.X = this.btnCurrDeviceRoom.Right + Application.GetRealWidth(20);
+        }
+
+        /// <summary>
+        /// 鏇存柊鐘舵��
+        /// </summary>
+        public void UpdateState(PushMessageType pushMessageType)
+        {
+            CommonMethod.Current.MainThread(() =>
+            {
+                if (pushMessageType == PushMessageType.Alarm)
+                {
+                    //闂ㄩ攣鐢垫睜鍊�
+                    if (this.btnCell != null)
+                    {
+                        //videoDoorLockPage.btnCell.Text = "";
+                    }
+                }
+                else
+                {
+                    if (this.btnDoorLockIcon != null && !this.btnDoorLockIcon.IsSelected)
+                    {
+                        this.btnDoorLockIcon.IsSelected = false;
+                    }
+                }
+
+            });
+
+        }
+
+    }
+    /// <summary>
+    /// 鑷繁寮勪竴涓狥rameLayout
+    /// </summary>
+    class CustomFrameLayout : FrameLayout
+    {
+        public const int widthFrameLayout = 48;
+        public const int heightFrameLayout = 53;
+        public const int yFrameLayout = 378;
+        public const int xFrameLayout = 41;
+        public const int interval = 51;//琛屼腑鐨勫垪闂撮殧鍊�
+
+        public CustomFrameLayout(int width, int height, int x = 0, int y = 0)
+        {
+            this.Width = Application.GetRealWidth(width);
+            this.Height = Application.GetRealHeight(height);
+            this.X = Application.GetRealWidth(x);
+            this.Y = Application.GetRealHeight(y);
+
+        }
+        Button btnStateImage = new Button
+        {
+            Width = Application.GetRealWidth(32),
+            Height = Application.GetRealWidth(32),
+            Gravity = Gravity.TopCenter,
+            Name = "btnStateImage",
+
+        };
+        Button btnStateText = new Button
+        {
+            Y = Application.GetRealHeight(4),
+            Width = Application.GetRealWidth(100),
+            Height = Application.GetRealWidth(20),
+            TextID = StringId.dangqianmenweiguan,
+            TextSize = TextSize.Text12,
+            TextColor = MusicColor.TextCancelColor,
+            TextAlignment = TextAlignment.Center,
+            Gravity = Gravity.CenterHorizontal,
+            Name = "btnStateText"
+        };
+        public void AddImageView()
+        {
+            this.AddChidren(btnStateImage);
+
+        }
+        public void AddTextButtonView()
+        {
+            btnStateText.Y += btnStateImage.Bottom;
+            this.AddChidren(btnStateText);
+        }
+        public Button GetImageButton()
+        {
+            //if (!this.AddWithout(this.btnStateImage))
+            //{
+            //    this.AddImageView();
+            //}
+            return this.btnStateImage;
+        }
+        public Button GetTextButton()
+        {
+            //if (!this.AddWithout(this.btnStateText))
+            //{
+            //    this.AddTextButtonView();
+            //}
+            return this.btnStateText;
+        }
+
+        /// <summary>
+        /// 浜嬩欢鐩戝惉鏂规硶
+        /// </summary>
+        /// <param name="action">鍥炶皟(绗竴涓槸鐖剁被瀵硅薄;绗簩涓槸鍥炬爣瀵硅薄;绗笁涓槸鐘舵�佸璞�</param>
+        /// <param name="button1">娉ㄦ剰:鍦⊿etClickListener()鍓嶉潰璋冪敤AddImageView()鎵嶆湁鏁�</param>
+        /// <param name="button2">娉ㄦ剰:鍦⊿etClickListener()鍓嶉潰璋冪敤AddImageView()鎵嶆湁鏁�</param>
+        public void SetClickListener(Action<FrameLayout, Button, Button> action)
+        {
+            EventHandler<MouseEventArgs> click = (sender, e) =>
+                    {
+                        action?.Invoke(this, btnStateImage, btnStateText);
+                    };
+            this.MouseUpEventHandler += click;
+            btnStateImage.MouseUpEventHandler += click;
+            btnStateText.MouseUpEventHandler += click;
+
+        }
+
+
+
+        /// <summary>
+        /// 鍦ㄧ埗甯冨眬鏌ユ壘瀛愭帶浠舵槸鍚﹀瓨鍦�
+        /// </summary>
+        /// <param name="btn">鏌ユ壘瀵硅薄</param>
+        /// <returns>瀛樺湪涓簍rue,鍚﹀垯涓篺alse</returns>
+        private bool AddWithout(View btn)
+        {
+
+            if (this.ChildrenCount <= 0 || btn == null)
+            {
+                return false;
+            }
+            for (int i = 0; i < this.ChildrenCount; i++)
+            {
+                View view = this.GetChildren(i);
+                if (view == null)
+                {
+                    continue;
+                }
+                if (view is Button)
+                {
+                    if (view.Name == btn.Name)
+                    {
+                        return true;
+                    }
+                }
+
+            }
+            return false;
+
+        }
+
+
+
+
+    }
+
+
+}
diff --git a/HDL_ON/UI/UI2/UserPage.cs b/HDL_ON/UI/UI2/UserPage.cs
index 6a3074f..b2fd6b5 100644
--- a/HDL_ON/UI/UI2/UserPage.cs
+++ b/HDL_ON/UI/UI2/UserPage.cs
@@ -485,9 +485,10 @@
                 {
                     btnNavigationSelectionIcon.SetRotation(0f);
                     ContextView.RemoveAll();
-                    var classificaitionView = new ClassificationPage();
+                    var classificaitionView = new ClassificationPage(); 
                     ContextView.AddChidren(classificaitionView);
                     classificaitionView.LoadPage();
+                    
                 });
             })
             { IsBackground = true, Priority = System.Threading.ThreadPriority.Lowest }.Start();

--
Gitblit v1.8.0