From 23d7cefd31bd431dd177b3b5267331e070c5fc5f Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期一, 17 七月 2023 13:26:01 +0800
Subject: [PATCH] 视频门锁

---
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage2.png                    |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage3.png                     |    0 
 HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs                                                     |    4 
 HDL-ON_Android/Assets/Language.ini                                                          |   30 +
 HDL-ON_iOS/HDL-ON_iOS.csproj                                                                |    4 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs               |  444 ++++++++++++++++++++++++
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs |   92 +++-
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage1.png                    |    0 
 HDL_ON/HDL_ON.projitems                                                                     |    2 
 HDL-ON_Android/HDL-ON_Android.csproj                                                        |    4 
 HDL-ON_iOS/Resources/Language.ini                                                           |  149 ++++++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage2.png                     |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage3.png                    |    0 
 HDL_ON/Common/HDLCommon.cs                                                                  |   23 
 HDL_ON/UI/MainPage.cs                                                                       |    2 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockHelpPage.cs           |  160 ++++++++
 HDL_ON/Entity/Function/Scene.cs                                                             |    2 
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs                              |   54 +-
 HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs                     |    7 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage1.png                     |    0 
 HDL_ON/DAL/Server/NewAPI.cs                                                                 |   16 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage4.png                     |    0 
 HDL_ON/Common/R.cs                                                                          |   21 +
 HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage4.png                    |    0 
 HDL_ON/DAL/Server/HttpServerRequest.cs                                                      |   63 +++
 25 files changed, 1,015 insertions(+), 62 deletions(-)

diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index 3288112..2f08a7f 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -657,6 +657,12 @@
 670=After entering the detection range, the door lock will automatically recognize the face and unlock it
 671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
 672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+
 
 
 
@@ -1987,7 +1993,11 @@
 670=杩涘叆妫�娴嬭寖鍥村悗锛岄棬閿佸皢鑷姩璇嗗埆浜鸿劯骞跺紑閿�
 671=娉細璇嗗埆浜鸿劯鐨勮窛绂伙紝浼氬彈瑙﹀彂鐏垫晱搴﹀奖鍝嶏紝鐏垫晱搴﹁秺楂橈紝璇嗗埆璺濈瓒婅繙銆�
 672=闇�瑕佽Е鎽搁棬閿佹暟瀛楁寜閿紝鍞ら啋闂ㄩ攣鍚庤瘑鍒汉鑴稿苟寮�閿�
-
+673=闂ㄩ攣绯荤粺闊抽噺
+674=闂ㄩ搩闊抽噺
+675=浣�
+676=涓�
+677=楂�
 
 
 2532=璁垮閭�璇疯褰�
@@ -3316,6 +3326,12 @@
 670=After entering the detection range, the door lock will automatically recognize the face and unlock it
 671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
 672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+
 
 
 
@@ -4642,6 +4658,12 @@
 670=After entering the detection range, the door lock will automatically recognize the face and unlock it
 671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
 672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+
 
 
 
@@ -5955,6 +5977,12 @@
 670=After entering the detection range, the door lock will automatically recognize the face and unlock it
 671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
 672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+
 
 
 
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage1.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage1.png
new file mode 100644
index 0000000..5efa4a0
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage1.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage2.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage2.png
new file mode 100644
index 0000000..6a5c024
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage2.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage3.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage3.png
new file mode 100644
index 0000000..926fc67
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage3.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage4.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage4.png
new file mode 100644
index 0000000..0976ecb
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/DoorLock/DoorlockHelpImage4.png
Binary files differ
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index 0123a86..6e57475 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -450,6 +450,10 @@
     <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_blue.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_white.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\TouchUnlcokImage.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\DoorlockHelpImage1.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\DoorlockHelpImage2.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\DoorlockHelpImage3.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\DoorlockHelpImage4.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidResource Include="Resources\values\colors.xml" />
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index c5546d5..de9bfc0 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -1610,6 +1610,10 @@
       <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_blue.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\ManualTriggerIcon_white.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\TouchUnlcokImage.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage1.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage2.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage3.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\DoorLock\DoorlockHelpImage4.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 190536e..2f08a7f 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -634,6 +634,36 @@
 647=Face key
 648=Delete user
 649=Activity detection
+650=Do you want to delete this user?
+651=Successfully deleted
+652=Unlock settings
+653=Face unlock settings
+654=Press the button to unlock twice
+655=To unlock indoors, press the unlock button twice to prevent children or pets from accidentally touching the lock
+656=Child lock mode
+657=After opening, the door cannot be unlocked through buttons, only the emergency knob can be used to unlock
+658=Anti lock mode
+659=After opening, ordinary users cannot unlock, while the main user can still unlock. After opening the door with the indoor button, the anti lock mode will automatically close
+660=Deployment mode
+661=It is recommended to change the mode when leaving home for a long time. It can also be activated by pressing the blue button that lights up on the door lock keyboard after closing the door
+662=Audio settings
+663=Battery management
+664=Face unlocking
+665=After opening, the device can perform facial recognition and unlock
+666=Trigger mode
+667=Face entry help
+668=Manual triggering
+669=Automatic triggering
+670=After entering the detection range, the door lock will automatically recognize the face and unlock it
+671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
+672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+
+
 
 
 
@@ -1940,7 +1970,34 @@
 647=浜鸿劯閽ュ寵
 648=鍒犻櫎鐢ㄦ埛
 649=娲诲姩妫�娴�
-
+650=鏄惁鍒犻櫎璇ョ敤鎴凤紵
+651=鍒犻櫎鎴愬姛
+652=寮�閿佽缃�
+653=浜鸿劯寮�閿佽缃�
+654=鎸夐敭涓ゆ寮�閿�
+655=瀹ゅ唴寮�閿侊紝闇�鎸変袱娆″紑閿侀敭锛屼互闃插効绔ャ�佸疇鐗╄瑙﹀紑閿�
+656=绔ラ攣妯″紡
+657=寮�鍚悗,瀹ゅ唴涓嶈兘閫氳繃鎸夐敭寮�閿�,浠呭彲浣跨敤搴旀�ユ棆閽紑閿�
+658=鍙嶉攣妯″紡
+659=寮�鍚悗,鏅�氱敤鎴蜂笉鍙紑閿�,涓荤敤鎴蜂粛鍙紑閿�,瀹ゅ唴鎸夐敭寮�闂ㄥ悗鍙嶉攣妯″紡灏嗚嚜鍔ㄥ叧闂�
+660=甯冮槻妯″紡
+661=闀挎湡绂诲寤鸿寮�鍚敼妯″紡,涔熷彲閫氳繃鍏抽棬鍚庢寜鍘嬮棬閿侀敭鐩樹寒璧风殑钃濊壊鎸夐敭寮�鍚�
+662=闊抽璁剧疆
+663=鐢垫睜绠$悊
+664=浜鸿劯寮�閿�
+665=寮�鍚悗,璁惧鍙互杩涜浜鸿劯璇嗗埆寮�閿�
+666=瑙﹀彂鏂瑰紡
+667=浜鸿劯褰曞叆甯姪
+668=鎵嬪姩瑙﹀彂
+669=鑷姩瑙﹀彂
+670=杩涘叆妫�娴嬭寖鍥村悗锛岄棬閿佸皢鑷姩璇嗗埆浜鸿劯骞跺紑閿�
+671=娉細璇嗗埆浜鸿劯鐨勮窛绂伙紝浼氬彈瑙﹀彂鐏垫晱搴﹀奖鍝嶏紝鐏垫晱搴﹁秺楂橈紝璇嗗埆璺濈瓒婅繙銆�
+672=闇�瑕佽Е鎽搁棬閿佹暟瀛楁寜閿紝鍞ら啋闂ㄩ攣鍚庤瘑鍒汉鑴稿苟寮�閿�
+673=闂ㄩ攣绯荤粺闊抽噺
+674=闂ㄩ搩闊抽噺
+675=浣�
+676=涓�
+677=楂�
 
 
 2532=璁垮閭�璇疯褰�
@@ -3246,6 +3303,37 @@
 647=Face key
 648=Delete user
 649=Activity detection
+650=Do you want to delete this user?
+651=Successfully deleted
+652=Unlock settings
+653=Face unlock settings
+654=Press the button to unlock twice
+655=To unlock indoors, press the unlock button twice to prevent children or pets from accidentally touching the lock
+656=Child lock mode
+657=After opening, the door cannot be unlocked through buttons, only the emergency knob can be used to unlock
+658=Anti lock mode
+659=After opening, ordinary users cannot unlock, while the main user can still unlock. After opening the door with the indoor button, the anti lock mode will automatically close
+660=Deployment mode
+661=It is recommended to change the mode when leaving home for a long time. It can also be activated by pressing the blue button that lights up on the door lock keyboard after closing the door
+662=Audio settings
+663=Battery management
+664=Face unlocking
+665=After opening, the device can perform facial recognition and unlock
+666=Trigger mode
+667=Face entry help
+668=Manual triggering
+669=Automatic triggering
+670=After entering the detection range, the door lock will automatically recognize the face and unlock it
+671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
+672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+
+
+
 
 
 
@@ -4547,6 +4635,36 @@
 647=Face key
 648=Delete user
 649=Activity detection
+650=Do you want to delete this user?
+651=Successfully deleted
+652=Unlock settings
+653=Face unlock settings
+654=Press the button to unlock twice
+655=To unlock indoors, press the unlock button twice to prevent children or pets from accidentally touching the lock
+656=Child lock mode
+657=After opening, the door cannot be unlocked through buttons, only the emergency knob can be used to unlock
+658=Anti lock mode
+659=After opening, ordinary users cannot unlock, while the main user can still unlock. After opening the door with the indoor button, the anti lock mode will automatically close
+660=Deployment mode
+661=It is recommended to change the mode when leaving home for a long time. It can also be activated by pressing the blue button that lights up on the door lock keyboard after closing the door
+662=Audio settings
+663=Battery management
+664=Face unlocking
+665=After opening, the device can perform facial recognition and unlock
+666=Trigger mode
+667=Face entry help
+668=Manual triggering
+669=Automatic triggering
+670=After entering the detection range, the door lock will automatically recognize the face and unlock it
+671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
+672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+
+
 
 
 
@@ -5836,6 +5954,35 @@
 647=Face key
 648=Delete user
 649=Activity detection
+650=Do you want to delete this user?
+651=Successfully deleted
+652=Unlock settings
+653=Face unlock settings
+654=Press the button to unlock twice
+655=To unlock indoors, press the unlock button twice to prevent children or pets from accidentally touching the lock
+656=Child lock mode
+657=After opening, the door cannot be unlocked through buttons, only the emergency knob can be used to unlock
+658=Anti lock mode
+659=After opening, ordinary users cannot unlock, while the main user can still unlock. After opening the door with the indoor button, the anti lock mode will automatically close
+660=Deployment mode
+661=It is recommended to change the mode when leaving home for a long time. It can also be activated by pressing the blue button that lights up on the door lock keyboard after closing the door
+662=Audio settings
+663=Battery management
+664=Face unlocking
+665=After opening, the device can perform facial recognition and unlock
+666=Trigger mode
+667=Face entry help
+668=Manual triggering
+669=Automatic triggering
+670=After entering the detection range, the door lock will automatically recognize the face and unlock it
+671=Note: The distance for recognizing faces is affected by the trigger sensitivity, and the higher the sensitivity, the farther the recognition distance.
+672=Need to touch the door lock number button, wake up the door lock, recognize the face, and unlock it
+673=Door lock system volume
+674=Doorbell volume
+675=Low 
+676=Moderate  
+677=High 
+
 
 
 
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage1.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage1.png
new file mode 100644
index 0000000..5efa4a0
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage1.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage2.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage2.png
new file mode 100644
index 0000000..6a5c024
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage2.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage3.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage3.png
new file mode 100644
index 0000000..926fc67
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage3.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage4.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage4.png
new file mode 100644
index 0000000..0976ecb
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/DoorLock/DoorlockHelpImage4.png
Binary files differ
diff --git a/HDL_ON/Common/HDLCommon.cs b/HDL_ON/Common/HDLCommon.cs
index 14d03fa..ba7989b 100644
--- a/HDL_ON/Common/HDLCommon.cs
+++ b/HDL_ON/Common/HDLCommon.cs
@@ -258,12 +258,12 @@
         {
             try
             {
-                MainPage.Log($"鎺ユ敹鍒版帹閫�");
+                MainPage.Log($"鎺ユ敹鍒版帹閫�.\r\n{Newtonsoft.Json.JsonConvert.SerializeObject(jpushMessageInfo).ToString()}");
 
                 //Extras涓虹┖涓嶅鐞�
                 if (string.IsNullOrEmpty(jpushMessageInfo.Extras)) return;
 
-                if (jpushMessageInfo.Extras.Contains(PushMessageType.OffLine.ToString()))
+                if (jpushMessageInfo.Extras == (PushMessageType.OffLine.ToString()))
                 {
                     CheckLogout();
                 }
@@ -275,14 +275,14 @@
                     if (string.IsNullOrEmpty(jpushMessageInfo.messageType)) return;
 
                     //鎶ヨ鎺ㄩ�佹墠寮圭獥鎻愮ず锛坢essageType鍖呭惈Alarm鍏抽敭瀛楃殑锛�
-                    if (jpushMessageInfo.messageType.Contains(PushMessageType.Alarm.ToString()))
+                    if (jpushMessageInfo.messageType == (PushMessageType.Alarm.ToString()))
                     {
                         //鎶ヨ鎺ㄩ�佸脊绐楁彁绀�
                         ShowAlarmPushMessage(jpushMessageInfo, true);
                         //钀ょ煶闂ㄩ攣鎺ㄩ��
                         HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.DoorLockPush(jpushMessageInfo);
                     }
-                    else if (jpushMessageInfo.messageType.Contains(PushMessageType.FLCall.ToString()))
+                    else if (jpushMessageInfo.messageType == (PushMessageType.FLCall.ToString()))
                     {
                         if (string.IsNullOrEmpty(jpushMessageInfo.expantContent)) return;
 
@@ -305,7 +305,7 @@
                         ESOnVideo.Current.ShowESvideoVideoIntercom(eSVideoInfo, InterphoneType.FLVI.ToString());
 
                     }
-                    else if (jpushMessageInfo.messageType.Contains(PushMessageType.HDL_INTERPHONE.ToString()))
+                    else if (jpushMessageInfo.messageType == (PushMessageType.HDL_INTERPHONE.ToString()))
                     {
 
                         if (string.IsNullOrEmpty(jpushMessageInfo.expantContent)) return;
@@ -314,7 +314,16 @@
                         var json = Newtonsoft.Json.Linq.JObject.Parse(jpushMessageInfo.expantContent);
                         try
                         {
+                            //var pushHomeId = json["homeId"];
+                            //if (pushHomeId == null || string.IsNullOrEmpty(pushHomeId.ToString())){
+                            //    Console.WriteLine("homeId is null");
+                            //    return;
+                            //}
                             var pushTime = json["pushTime"];
+                            if(pushTime == null)
+                            {
+                                return;
+                            }
                             if (!string.IsNullOrEmpty(pushTime.ToString()))
                             {
                                 var pushDateTime = Utlis.UnixToDateTimeMS(Convert.ToInt64(pushTime));
@@ -386,13 +395,13 @@
                         ESOnVideo.Current.ShowESvideoVideoIntercom(eSVideoInfo, interphoneTypeEnum);
 
                     }
-                    else if (jpushMessageInfo.messageType.Contains(PushMessageType.Prompt.ToString()))
+                    else if (jpushMessageInfo.messageType == (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()))
+                    else if (jpushMessageInfo.messageType == (PushMessageType.DOOR_BELL.ToString()))
                     {
                         //钀ょ煶闂ㄩ攣鎺ㄩ��
                         HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.DoorLockPush(jpushMessageInfo);
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index 2b4727a..efe31ce 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -4,7 +4,26 @@
 {
     public static class StringId
     {
-
+        /// <summary>
+        /// 楂�
+        /// </summary>
+        public const int High = 677;
+        /// <summary>
+        /// 涓�
+        /// </summary>
+        public const int Moderate = 676;
+        /// <summary>
+        /// 浣�
+        /// </summary>
+        public const int Low = 675;
+        /// <summary>
+        /// 闂ㄩ搩闊抽噺
+        /// </summary>
+        public const int DoorbellVolume = 674;
+        /// <summary>
+        /// 闂ㄩ攣绯荤粺闊抽噺
+        /// </summary>
+        public const int DoorlockSystemVolume = 673;
         /// <summary>
         /// 闇�瑕佽Е鎽搁棬閿佹暟瀛楁寜閿紝鍞ら啋闂ㄩ攣鍚庤瘑鍒汉鑴稿苟寮�閿�
         /// </summary>
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 30e9b71..4e6e381 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -3384,6 +3384,69 @@
             return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_SetFaceRecognitionUnlockCfg, requestJson);
         }
 
+        /// <summary>
+        /// 鏌ヨ闂ㄩ攣绯荤粺澹伴煶
+        /// </summary>
+        /// <param name="deviceId"></param>
+        /// <returns></returns>
+        public ResponsePackNew GetDoorLockSystemSound(string deviceId)
+        {
+            var d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+            d.Add("deviceId", deviceId);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetDoorLockSystemSound, requestJson);
+        }
+
+        /// <summary>
+        /// 璁剧疆闂ㄩ攣绯荤粺澹伴煶
+        /// </summary>
+        /// <param name="deviceId"></param>
+        /// <param name="sound"></param>
+        /// <returns></returns>
+        public ResponsePackNew SetDoorLockSystemSound(string deviceId,string sound)
+        {
+            var d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+            d.Add("deviceId", deviceId);
+            d.Add("sound", sound);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_SetDoorLockSystemSound, requestJson);
+        }
+
+        /// <summary>
+        /// 鏌ヨ闂ㄩ搩鎻愮ず闊�
+        /// </summary>
+        /// <param name="deviceId"></param>
+        /// <returns></returns>
+        public ResponsePackNew GetDoorBellTone(string deviceId)
+        {
+            var d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+            d.Add("deviceId", deviceId);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_GetDoorBellTone, requestJson);
+        }
+
+        /// <summary>
+        /// 璁剧疆闂ㄩ搩鎻愮ず闊�
+        /// </summary>
+        /// <param name="deviceId"></param>
+        /// <param name="volume"></param>
+        /// <returns></returns>
+        public ResponsePackNew SetDoorBellTone(string deviceId, string volume)
+        {
+            var d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
+            d.Add("deviceId", deviceId);
+            d.Add("volume", volume);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_SetDoorBellTone, requestJson);
+        }
+
+
+
+
         #endregion
 
         #endregion
diff --git a/HDL_ON/DAL/Server/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index fdd9472..975830e 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -965,6 +965,22 @@
         /// 璁剧疆浜鸿劯璇嗗埆瑙i攣閰嶇疆
         /// </summary>
         public const string Api_Post_SetFaceRecognitionUnlockCfg = "/home-wisdom/platform/yingshi/lock/setFaceRecognitionUnlockCfg";
+        /// <summary>
+        /// 鏌ヨ闂ㄩ攣绯荤粺澹伴煶
+        /// </summary>
+        public const string Api_Post_GetDoorLockSystemSound = "/home-wisdom/platform/yingshi/lock/getDoorLockSystemSound";
+        /// <summary>
+        /// 璁剧疆闂ㄩ攣绯荤粺澹伴煶
+        /// </summary>
+        public const string Api_Post_SetDoorLockSystemSound = "/home-wisdom/platform/yingshi/lock/setDoorLockSystemSound";
+        /// <summary>
+        /// 鏌ヨ闂ㄩ搩鎻愮ず闊�
+        /// </summary>
+        public const string Api_Post_GetDoorBellTone = "/home-wisdom/platform/yingshi/lock/getDoorBellTone";
+        /// <summary>
+        /// 璁剧疆闂ㄩ搩鎻愮ず闊�
+        /// </summary>
+        public const string Api_Post_SetDoorBellTone = "/home-wisdom/platform/yingshi/lock/setDoorBellTone";
 
 
 
diff --git a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
index 8badede..620bd9d 100644
--- a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
+++ b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
@@ -358,6 +358,10 @@
 
                 Application.RunOnMainThread(() =>
                 {
+                    if(revertObj == null)
+                    {
+                        return;
+                    }
 
 #if __IOS__
                     if (revertObj.Code == StateCode.SUCCESS)
diff --git a/HDL_ON/Entity/Function/Scene.cs b/HDL_ON/Entity/Function/Scene.cs
index 9be9505..3b00095 100644
--- a/HDL_ON/Entity/Function/Scene.cs
+++ b/HDL_ON/Entity/Function/Scene.cs
@@ -706,7 +706,7 @@
         /// </summary>
         public string GetUintString()
         {
-            if (!string.IsNullOrEmpty(UintString))
+            if (!string.IsNullOrEmpty(UintString) && UintString!= "{}")
             {
                 return UintString;
             }
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index db55a35..1a3d3f2 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -562,6 +562,8 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\UnlockSettingPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\UnlockSettingFacePage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorlockFaceUnlockTriggerSettingPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorlockFaceUnlockHelpPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideoDoorlockAudioSetupPage.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
diff --git a/HDL_ON/UI/MainPage.cs b/HDL_ON/UI/MainPage.cs
index 91c3948..a237a77 100644
--- a/HDL_ON/UI/MainPage.cs
+++ b/HDL_ON/UI/MainPage.cs
@@ -26,7 +26,7 @@
         /// <summary>
         /// 鐗堟湰鍙�
         /// </summary>
-        public static string VersionString = "1.8.1";
+        public static string VersionString = "1.8.0";
         ///// <summary>
         ///// 瀹㈡埛绔被鍨�
         ///// </summary>
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs
index 631c295..49ec379 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs
@@ -323,30 +323,40 @@
             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)
+                try
                 {
-                    return;
-                }
-                if (expantContent.spk != SPK.VideoDoorLock)
+                    //{ "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 == 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);
+                    }
+                }catch(Exception ex)
                 {
-                    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);
+                    
                 }
             });
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs
index 090921c..b20ce5f 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/UnlockSettingFacePage.cs
@@ -33,6 +33,7 @@
                 Y = Application.GetRealHeight(64),
                 Height = Application.GetRealHeight(600),
                 ScrollEnabled = false,
+                BackgroundColor = CSS_Color.BackgroundColor,
             };
             bodyView.AddChidren(contentView);
 
@@ -173,6 +174,7 @@
 
             var btnTriggerModeStateText = new Button()
             {
+                X = Application.GetRealWidth(100),
                 Width = Application.GetRealWidth(223),
                 TextAlignment = TextAlignment.CenterRight,
                 TextSize = CSS_FontSize.TextFontSize,
@@ -238,7 +240,10 @@
             faceEntryHelpView.AddChidren(btnFaceEntryHelpText);
 
             btnFaceEntryHelpText.MouseUpEventHandler = (sender, e) => {
-
+                var page = new VideoDoorlockFaceUnlockHelpPage();
+                MainPage.BasePageView.AddChidren(page);
+                page.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
             };
             #endregion
 
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs
new file mode 100644
index 0000000..fda1210
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockAudioSetupPage.cs
@@ -0,0 +1,444 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.Common;
+using HDL_ON.DAL.Server;
+using HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+namespace HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock
+{
+    public class VideoDoorlockAudioSetupPage : FrameLayout
+    {
+        FrameLayout bodyView;
+
+        Function device;
+        public VideoDoorlockAudioSetupPage(Function function)
+        {
+            device = function;
+            bodyView = this;
+        }
+
+        public void LoadPage()
+        {
+            new TopViewDiv(bodyView, Language.StringByID(StringId.AudioSetup)).LoadTopView();
+            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+
+
+            #region 闂ㄩ攣绯荤粺闊抽噺
+            var doorlockSystemVolumeView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(64),
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
+            };
+            bodyView.AddChidren(doorlockSystemVolumeView);
+
+            var btnDoorlockSystemVolumeRight = new Button()
+            {
+                X = Application.GetRealWidth(339),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetMinRealAverage(16),
+                Height = Application.GetMinRealAverage(16),
+                UnSelectedImagePath = "Public/Right.png",
+            };
+            doorlockSystemVolumeView.AddChidren(btnDoorlockSystemVolumeRight);
+
+            var btnDoorlockSystemVolumeStateText = new Button()
+            {
+                X = Application.GetRealWidth(100),
+                Width = Application.GetRealWidth(223),
+                TextAlignment = TextAlignment.CenterRight,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextColor = CSS_Color.PromptingColor1,
+            };
+            doorlockSystemVolumeView.AddChidren(btnDoorlockSystemVolumeStateText);
+
+            var btnDoorlockSystemVolumeText = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextID = StringId.DoorlockSystemVolume,
+            };
+            doorlockSystemVolumeView.AddChidren(btnDoorlockSystemVolumeText);
+
+            btnDoorlockSystemVolumeText.MouseUpEventHandler = (sender, e) =>
+            {
+
+            };
+            #endregion
+
+            #region 闂ㄩ搩闊抽噺
+            var viewDoorbellVolume = new FrameLayout()
+            {
+                Y = doorlockSystemVolumeView.Bottom,
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = CSS.CSS_Color.MainBackgroundColor,
+            };
+            bodyView.AddChidren(viewDoorbellVolume);
+            viewDoorbellVolume.AddChidren(new Button
+            {
+                Height = 1,
+                BackgroundColor = CSS_Color.DividingLineColor,
+            });
+
+            var btnDoorbellVolumeRight = new Button()
+            {
+                X = Application.GetRealWidth(339),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetMinRealAverage(16),
+                Height = Application.GetMinRealAverage(16),
+                UnSelectedImagePath = "Public/Right.png",
+            };
+            viewDoorbellVolume.AddChidren(btnDoorbellVolumeRight);
+
+            var btnDoorbellVolumeStateText = new Button()
+            {
+                X = Application.GetRealWidth(100),
+                Width = Application.GetRealWidth(223),
+                TextAlignment = TextAlignment.CenterRight,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextColor = CSS_Color.PromptingColor1,
+            };
+            viewDoorbellVolume.AddChidren(btnDoorbellVolumeStateText);
+
+            var btnDoorbellVolumeText = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextID = StringId.DoorbellVolume,
+            };
+            viewDoorbellVolume.AddChidren(btnDoorbellVolumeText);
+
+            btnDoorbellVolumeText.MouseUpEventHandler = (sender, e) =>
+            {
+
+            };
+            #endregion
+
+
+
+
+
+
+
+
+            var waitPage = new Loading();
+            bodyView.AddChidren(waitPage);
+            waitPage.Start("");
+
+            new System.Threading.Thread(() => {
+                try
+                {
+                    var pack = ApiUtlis.Ins.HttpRequest.GetDoorLockSystemSound(device.deviceId);
+                    if (pack != null && pack.Code == StateCode.SUCCESS)
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            //鏇存柊鐣岄潰
+                            var doorLockSystemSound = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockSystemSound>(pack.Data.ToString());
+                            if(doorLockSystemSound != null)
+                            {
+                                switch (doorLockSystemSound.sound)
+                                {
+                                    case 0:
+                                        btnDoorlockSystemVolumeStateText.TextID = StringId.Mute;
+                                        break;
+                                    case 1:
+                                        btnDoorlockSystemVolumeStateText.TextID = StringId.Low;
+                                        break;
+                                    case 2:
+                                        btnDoorlockSystemVolumeStateText.TextID = StringId.Moderate;
+                                        break;
+                                    case 3:
+                                        btnDoorlockSystemVolumeStateText.TextID = StringId.High;
+                                        break;
+                                }
+                            }
+                        });
+                    }
+                    else
+                    {
+                        //澶辫触鎻愮ず
+                        Application.RunOnMainThread(() =>
+                        {
+                            if (!string.IsNullOrEmpty(pack.message))
+                            {
+                                var tip = new Tip()
+                                {
+                                    MaxWidth = Application.GetRealWidth(300),
+                                    Text = $"{pack.message}({pack.Code})",
+                                    CloseTime = 3,
+                                    Direction = AMPopTipDirection.None
+                                };
+                                tip.Show(MainPage.BaseView);
+                            }
+                        });
+                    }
+
+
+                    pack = ApiUtlis.Ins.HttpRequest.GetDoorBellTone(device.deviceId);
+                    if (pack != null && pack.Code == StateCode.SUCCESS)
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            //鏇存柊鐣岄潰
+                            var doorbellTone = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorBellTone>(pack.Data.ToString());
+                            if (doorbellTone != null)
+                            {
+                                if (doorbellTone.volume == 0)
+                                {
+                                    btnDoorbellVolumeStateText.TextID = StringId.Mute;
+                                }
+                                else if (doorbellTone.volume > 0 && doorbellTone.volume < 35)
+                                {
+                                    btnDoorbellVolumeStateText.TextID = StringId.Low;
+                                }
+                                else if (doorbellTone.volume > 35 && doorbellTone.volume < 70)
+                                {
+                                    btnDoorbellVolumeStateText.TextID = StringId.Moderate;
+                                }
+                                else if (doorbellTone.volume > 70)
+                                {
+                                    btnDoorbellVolumeStateText.TextID = StringId.High;
+                                }
+                            }
+                        });
+                    }
+                    else
+                    {
+                        //澶辫触鎻愮ず
+                        Application.RunOnMainThread(() =>
+                        {
+                            if (!string.IsNullOrEmpty(pack.message))
+                            {
+                                var tip = new Tip()
+                                {
+                                    MaxWidth = Application.GetRealWidth(300),
+                                    Text = $"{pack.message}({pack.Code})",
+                                    CloseTime = 3,
+                                    Direction = AMPopTipDirection.None
+                                };
+                                tip.Show(MainPage.BaseView);
+                            }
+                        });
+                    }
+
+
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log($"UnlockSettingPage error : {ex.Message}");
+                }
+                finally
+                {
+                    Application.RunOnMainThread(() =>
+                    {
+                        waitPage.Hide();
+                    });
+                }
+
+            })
+            { IsBackground = true }.Start();
+
+
+
+        }
+
+
+
+        /// <summary>
+        /// 鍔犺浇鍔熻兘灞炴�ф暟鎹�夋嫨寮圭獥
+        /// </summary>
+        void LoadEditDialog_FunctionPar(int titleId, int index, Button btn)
+        {
+            Button lastButton = new Button();
+            var lastData = "";
+            var lastText = "";
+            Dialog dialog = new Dialog();
+
+            var pView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            dialog.AddChidren(pView);
+
+            var optionBaseView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(579 - 50 * 4),
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(50 * 4 + 50),
+                AnimateSpeed = 0.3f,
+                Animate = Animate.DownToUp,
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            pView.AddChidren(optionBaseView);
+
+            var topView = new FrameLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            optionBaseView.AddChidren(topView);
+
+            var btnTitle = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                TextAlignment = TextAlignment.Center,
+                Width = Application.GetRealWidth(100),
+                TextID = titleId,
+                IsBold = true,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+            };
+            topView.AddChidren(btnTitle);
+
+            var btnCancel = new Button()
+            {
+                X = Application.GetRealWidth(21),
+                Width = Application.GetRealWidth(100),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Cancel,
+            };
+            topView.AddChidren(btnCancel);
+
+            var btnConfrim = new Button()
+            {
+                Width = Application.GetRealWidth(320),
+                TextAlignment = TextAlignment.CenterRight,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Complete,
+            };
+            topView.AddChidren(btnConfrim);
+            int hei = 1;
+            var statusList = new List<string>
+            {
+                Language.StringByID(StringId.High),
+                Language.StringByID(StringId.Moderate),
+                Language.StringByID(StringId.Low),
+                Language.StringByID(StringId.Mute),
+            };
+
+            foreach (var m in statusList)
+            {
+                var row = new FrameLayout()
+                {
+                    Y = Application.GetRealHeight(50 * hei),
+                    Height = Application.GetRealHeight(50),
+                };
+                optionBaseView.AddChidren(row);
+                if (statusList.Count > hei)
+                {
+                    optionBaseView.AddChidren(new Button()
+                    {
+                        Gravity = Gravity.CenterHorizontal,
+                        Y = row.Bottom,
+                        Width = Application.GetRealWidth(343),
+                        BackgroundColor = CSS_Color.DividingLineColor,
+                        Height = 1,
+                    });
+                }
+                hei++;
+
+                var btnChoose = new Button()
+                {
+                    X = Application.GetRealWidth(303),
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetMinRealAverage(28),
+                    Height = Application.GetMinRealAverage(28),
+                    UnSelectedImagePath = "Public/ChooseIcon.png",
+                    SelectedImagePath = "Public/ChooseOnIcon.png",
+
+                };
+                row.AddChidren(btnChoose);
+                if (index == hei - 1)
+                {
+                    lastButton = btnChoose;
+                    btnChoose.IsSelected = true;
+                }
+                var btnPropertyTitle = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    Tag = index,
+                    Text = m
+                };
+                row.AddChidren(btnPropertyTitle);
+
+                btnPropertyTitle.MouseUpEventHandler = (sender, e) => {
+                    btnChoose.IsSelected = true;
+                    if (lastButton != null)
+                    {
+                        lastButton.IsSelected = false;
+                    }
+                    lastButton = btnChoose;
+                    lastData = btnPropertyTitle.Tag.ToString();
+                    lastText = btnPropertyTitle.Text;
+                };
+            }
+
+
+
+
+            dialog.Show();
+
+            pView.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+            };
+
+            btnCancel.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+            };
+            btnConfrim.MouseUpEventHandler = (sender, e) => {
+                dialog.Close();
+                trait.value = lastData;
+                //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.curValue.ToString() ;
+                btn.Text = lastText;
+            };
+
+        }
+
+
+
+
+
+    }
+
+    /// <summary>
+    /// 闂ㄩ攣绯荤粺澹伴煶
+    /// </summary>
+    public class DoorLockSystemSound
+    {
+        /// <summary>
+        /// 澹伴煶
+        /// 0-闈欓煶 1-浣庨煶 2-涓煶 3-楂橀煶 4-鑷姩
+        /// </summary>
+        public int sound = 0;
+    }
+    /// <summary>
+    /// 闂ㄩ搩鎻愮ず闊抽噺
+    /// </summary>
+    public class DoorBellTone
+    {
+        /// <summary>
+        /// 闊抽噺 鑼冨洿0-100
+        /// </summary>
+        public int volume = 0;
+    }
+
+
+
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockHelpPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockHelpPage.cs
new file mode 100644
index 0000000..03cb26b
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockHelpPage.cs
@@ -0,0 +1,160 @@
+锘縰sing System;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock
+{
+    public class VideoDoorlockFaceUnlockHelpPage : FrameLayout
+    {
+        FrameLayout bodyView;
+
+
+        public VideoDoorlockFaceUnlockHelpPage()
+        {
+            bodyView = this;
+        }
+
+
+        public void LoadPage()
+        {
+
+            new TopViewDiv(bodyView, Language.StringByID(StringId.TriggerMode)).LoadTopView();
+            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
+
+            var contentView = new VerticalScrolViewLayout()
+            {
+                Y = Application.GetRealHeight(64),
+                Height = Application.GetRealHeight(667 - 64),
+            };
+            bodyView.AddChidren(contentView);
+
+            //DoorlockHelpImage
+
+            var btnImage1 = new Button()
+            {
+                Height = Application.GetRealWidth(180),
+                UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockHelpImage1.png"
+            };
+            contentView.AddChidren(btnImage1);
+
+            var msgView1 = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(253),
+            };
+            contentView.AddChidren(msgView1);
+
+            var btnMsg1Title = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealHeight(20),
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(49),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Text = "褰曞叆鍓�"
+            };
+            msgView1.AddChidren(btnMsg1Title);
+
+            var btnMsg1Tip = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = btnMsg1Title.Bottom,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(184),
+                TextAlignment = TextAlignment.CenterLeft,
+                IsMoreLines = true,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Text = "璇峰埌闂ㄩ攣鏃侊紝鎸夐棬閿乻et閿紝浣跨敤涓荤敤鎴风櫥褰曡彍鍗曪紝閫夋嫨鈥滄坊鍔犵敤鎴�-娣诲姞浜鸿劯鈥�/鈥滅敤鎴风鐞�-鐢ㄦ埛缂栧彿-娣诲姞浜鸿劯鈥濄�備互涓嬫槸鍑犱釜闇�瑕佹敞鎰忕殑鐐癸細\r\n" +
+                        "\r\n1銆佷负浜嗕繚璇佸綍鍏ユ晥鏋滐紝璇峰湪鍏抽棬鐨勬儏鍐典笅褰曞叆浜鸿劯锛堝叧闂ㄥ墠璇风‘淇濇湁鍏朵粬寮�闂ㄦ柟寮忓彲杩涢棬锛夈�俓r\n" +
+                        "\r\n2銆佸綍鍏ユ椂璇烽湶鍑烘竻鏅扮殑闈㈤儴鐗瑰緛锛屼笉瑕佷僵鎴村附瀛愩�佸彛缃┿�俓r\n"
+            };
+            msgView1.AddChidren(btnMsg1Tip);
+
+            var btnImage2 = new Button()
+            {
+                Height = Application.GetRealWidth(132),
+                UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockHelpImage2.png"
+            };
+            contentView.AddChidren(btnImage2);
+
+            var msgView2 = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(129),
+            };
+            contentView.AddChidren(msgView2);
+
+            var btnMsg2Title = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealHeight(20),
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(49),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Text = "褰曞叆涓�"
+            };
+            msgView2.AddChidren(btnMsg2Title);
+
+            var btnMsg2Tip = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = btnMsg1Title.Bottom,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(60),
+                TextAlignment = TextAlignment.CenterLeft,
+                IsMoreLines = true,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Text = "1銆佽绔欏湪閿佹鍓嶆柟锛屽苟涓庨攣鍏蜂繚鎸佷竴鑷傝窛绂伙紙50cm宸﹀彸锛夎繘琛岄噰闆嗐�俓r\n",
+            };
+            msgView2.AddChidren(btnMsg2Tip);
+
+            var btnImage3 = new Button()
+            {
+                Height = Application.GetRealWidth(180),
+                UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockHelpImage3.png"
+            };
+            contentView.AddChidren(btnImage3);
+
+            var btnMsg3 = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(104),
+                TextAlignment = TextAlignment.CenterLeft,
+                IsMoreLines = true,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Text = "2銆佸綍鍏ユ椂璇疯窡闅忚闊虫寚瀵煎井寰浆鍔ㄥご閮紝浠ョ珫鐩存垨姘村钩绾夸负杞达紝杞姩骞呭害璇锋帶鍒跺湪30搴︿互鍐呫�俓r\n"
+            };
+            contentView.AddChidren(btnMsg3);
+
+            var btnImage4 = new Button()
+            {
+                Height = Application.GetRealWidth(204),
+                UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockHelpImage4.png"
+            };
+            contentView.AddChidren(btnImage4);
+
+            if(Language.CurrentLanguage != "Chinese")
+            {
+                btnMsg1Title.Text = "Before entry";
+
+                btnMsg1Tip.Text = "Please go to the door lock, press the door lock set key, use the main user login menu, select 'Add User -Add Face'/'User Management -User ID - Add Face'. Here are a few points to note: \r\n"
+                                    + "\r\n1.To ensure the recording effect, please input your face while closing the door(please ensure that there are other door opening methods available before closing the door). \r\n"
+                                    + "\r\n2.Please show clear facial features when entering, and do not wear hats or masks.\r\n";
+
+                btnMsg2Title.Text = "Entering";
+
+                btnMsg2Tip.Text = "1. Please stand in front of the lock and maintain an arm's distance (approximately 50cm) from the lock for collection.\r\n";
+
+                btnMsg3.Text = "2. When entering, please follow the voice guidance to slightly rotate the head, using a vertical or horizontal line as the axis, and the rotation amplitude should be controlled within 30 degrees.\r\n";
+
+            }
+
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs
index 3305afc..7faddc9 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorlockFaceUnlockTriggerSettingPage.cs
@@ -41,9 +41,10 @@
                 Y = Application.GetRealHeight(20),
                 Width = Application.GetRealWidth(164),
                 Height = Application.GetRealWidth(60),
-                Radius = (uint)Application.GetRealWidth(30),
+                Radius = (uint)Application.GetRealWidth(12),
                 BackgroundColor = faceUnlockSetup.mode == 0 ? CSS_Color.MainColor : CSS_Color.MainBackgroundColor,
                 BorderColor = CSS_Color.MainColor,
+                BorderWidth = 1,
             };
             contentView.AddChidren(autoView);
 
@@ -60,10 +61,11 @@
             var btnAutoText = new Button
             {
                 X = btnAutoIcon.Right + Application.GetRealWidth(4),
-                Width = Application.GetRealWidth(50),
+                Width = Application.GetRealWidth(90),
                 TextAlignment = TextAlignment.CenterLeft,
                 TextSize = CSS_FontSize.HeadlineFontSize,
                 TextColor = faceUnlockSetup.mode == 1 ? CSS_Color.MainColor : CSS_Color.MainBackgroundColor,
+                TextID = StringId.AutomaticTriggering,
             };
             autoView.AddChidren(btnAutoText);
             
@@ -74,13 +76,14 @@
             #region 鎵嬪姩瑙﹀彂
             var manualView = new FrameLayout()
             {
-                X = Application.GetRealWidth(16),
+                X = Application.GetRealWidth(196),
                 Y = Application.GetRealHeight(20),
                 Width = Application.GetRealWidth(164),
                 Height = Application.GetRealWidth(60),
-                Radius = (uint)Application.GetRealWidth(30),
+                Radius = (uint)Application.GetRealWidth(12),
                 BackgroundColor = faceUnlockSetup.mode == 1 ? CSS_Color.MainColor : CSS_Color.MainBackgroundColor,
                 BorderColor = CSS_Color.MainColor,
+                BorderWidth = 1,
             };
             contentView.AddChidren(manualView);
 
@@ -97,10 +100,11 @@
             var btnManualText = new Button
             {
                 X = btnManualIcon.Right + Application.GetRealWidth(4),
-                Width = Application.GetRealWidth(50),
+                Width = Application.GetRealWidth(90),
                 TextAlignment = TextAlignment.CenterLeft,
                 TextSize = CSS_FontSize.HeadlineFontSize,
                 TextColor = faceUnlockSetup.mode == 0 ? CSS_Color.MainColor : CSS_Color.MainBackgroundColor,
+                TextID = StringId.ManualTriggering,
             };
             manualView.AddChidren(btnManualText);
             btnManualText.MouseUpEventHandler = (sender, e) => {
@@ -134,7 +138,9 @@
                                 btnAutoText.TextColor = CSS_Color.MainBackgroundColor;
                                 manualView.BackgroundColor = CSS_Color.MainBackgroundColor;
                                 btnManualIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/ManualTriggerIcon_blue.png";
-                                btnAutoText.TextColor = CSS_Color.MainColor;
+                                btnManualText.TextColor = CSS_Color.MainColor;
+                                automaitcTipView.Visible = true;
+                                manualTipView.Visible = false;
 
                             });
                         }
@@ -198,7 +204,9 @@
                                 btnAutoText.TextColor = CSS_Color.MainColor;
                                 manualView.BackgroundColor = CSS_Color.MainColor;
                                 btnManualIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/ManualTriggerIcon_white.png";
-                                btnAutoText.TextColor = CSS_Color.MainBackgroundColor;
+                                btnManualText.TextColor = CSS_Color.MainBackgroundColor;
+                                automaitcTipView.Visible = false;
+                                manualTipView.Visible = true;
 
                             });
                         }
@@ -242,31 +250,31 @@
 
             if(faceUnlockSetup.mode == 0)
             {
-                automaitcView.Visible = true;
-                manualView.Visible = false;
+                automaitcTipView.Visible = true;
+                manualTipView.Visible = false;
             }
             else
             {
-                automaitcView.Visible = false;
-                manualView.Visible = true;
+                automaitcTipView.Visible = false;
+                manualTipView.Visible = true;
             }
 
         }
-        FrameLayout automaitcView;
-        FrameLayout manualView;
+        FrameLayout automaitcTipView;
+        FrameLayout manualTipView;
 
         /// <summary>
         /// 鍔犺浇鑷姩瑙﹀彂鏂瑰紡鎻愮ず
         /// </summary>
         void loadAutomaitcTipView()
         {
-            automaitcView = new FrameLayout()
+            automaitcTipView = new FrameLayout()
             {
-                Y = Application.GetRealHeight(128),
+                Y = Application.GetRealHeight(128 + 64),
                 Height = Application.GetRealHeight(667 - 128 - 64),
                 BackgroundColor = CSS_Color.MainBackgroundColor
             };
-            bodyView.AddChidren(automaitcView);
+            bodyView.AddChidren(automaitcTipView);
 
             var btnAutomaitcImage = new Button()
             {
@@ -275,7 +283,7 @@
                 Height = Application.GetRealWidth(200),
                 UnSelectedImagePath = "FunctionIcon/DoorLock/FaceUnlockImage.png",
             };
-            automaitcView.AddChidren(btnAutomaitcImage);
+            automaitcTipView.AddChidren(btnAutomaitcImage);
 
             var btnAutomaitcTip = new Button()
             {
@@ -289,7 +297,7 @@
                 IsMoreLines = true,
                 TextID = StringId.FaceUnlockTip
             };
-            automaitcView.AddChidren(btnAutomaitcTip);
+            automaitcTipView.AddChidren(btnAutomaitcTip);
 
             var btnAutomaitcNote = new Button()
             {
@@ -301,7 +309,7 @@
                 TextColor = CSS_Color.PromptingColor1,
                 TextID = StringId.FaceUnlockNote,
             };
-            automaitcView.AddChidren(btnAutomaitcNote);
+            automaitcTipView.AddChidren(btnAutomaitcNote);
 
         }
         /// <summary>
@@ -309,35 +317,65 @@
         /// </summary>
         void loadManualTipView()
         {
-            manualView = new FrameLayout()
+            manualTipView = new FrameLayout()
             {
-                Y = Application.GetRealHeight(128),
+                Y = Application.GetRealHeight(128 + 64),
                 Height = Application.GetRealHeight(667 - 128 - 64),
                 BackgroundColor = CSS_Color.MainBackgroundColor
             };
-            bodyView.AddChidren(manualView);
+            bodyView.AddChidren(manualTipView);
+
+            var btnNumber1 = new Button()
+            {
+                X = Application.GetRealWidth(84),
+                //Y = Application.GetRealHeight()
+                Width = Application.GetRealWidth(24),
+                Height = Application.GetRealWidth(24),
+                Radius = (uint)Application.GetRealWidth(12),
+                BorderColor = CSS_Color.MainColor,
+                BorderWidth = 1,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.MainColor,
+                TextAlignment = TextAlignment.Center,
+                Text = "1",
+            };
+            manualTipView.AddChidren(btnNumber1);
+
+            var btnNumber2 = new Button()
+            {
+                X = Application.GetRealWidth(267),
+                //Y = Application.GetRealHeight()
+                Width = Application.GetRealWidth(24),
+                Height = Application.GetRealWidth(24),
+                Radius = (uint)Application.GetRealWidth(12),
+                BorderColor = CSS_Color.MainColor,
+                BorderWidth = 1,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.MainColor,
+                TextAlignment = TextAlignment.Center,
+                Text = "2",
+            };
+            manualTipView.AddChidren(btnNumber2);
 
             var btnImage1 = new Button()
             {
                 X = Application.GetRealWidth(16),
                 Y = Application.GetRealHeight(31),
-                Gravity = Gravity.CenterHorizontal,
                 Width = Application.GetRealWidth(160),
                 Height = Application.GetRealWidth(160),
                 UnSelectedImagePath = "FunctionIcon/DoorLock/TouchUnlcokImage.png",
             };
-            manualView.AddChidren(btnImage1);
+            manualTipView.AddChidren(btnImage1);
 
             var btnAutomaitcImage = new Button()
             {
                 X = btnImage1.Right + Application.GetRealWidth(24),
                 Y = Application.GetRealHeight(31),
-                Gravity = Gravity.CenterHorizontal,
                 Width = Application.GetRealWidth(160),
                 Height = Application.GetRealWidth(160),
                 UnSelectedImagePath = "FunctionIcon/DoorLock/FaceUnlockImage.png",
             };
-            manualView.AddChidren(btnAutomaitcImage);
+            manualTipView.AddChidren(btnAutomaitcImage);
 
             var btnManualTip = new Button()
             {
@@ -351,7 +389,7 @@
                 IsMoreLines = true,
                 TextID = StringId.FaceManualUnlockTip
             };
-            manualView.AddChidren(btnManualTip);
+            manualTipView.AddChidren(btnManualTip);
         }
     }
 }

--
Gitblit v1.8.0