From 8ce0f9b1e568dd9125e74421cd02fbc29381c1f1 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期三, 29 七月 2020 12:53:33 +0800
Subject: [PATCH] 新版本

---
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧640_960备份-1.png                  |    0 
 ZigbeeApp/GateWay.Droid/Assets/Language.ini                                                   |    2 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1024_768备份.png                   |    0 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧640_960备份.png                    |    0 
 ZigbeeApp/Shared/Phone/Device/Logic/LogicIfon.cs                                              |    2 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1024_748备份.png                   |    0 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs                  |    3 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/Contents.json                      |   56 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSafeguardLogic.cs                       |   12 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧2688*1242.png                    |    0 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs                      |   20 
 ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionFileContentForm.cs                     |    1 
 ZigbeeApp/Shared/Phone/Device/Logic/SkipView.cs                                               |   24 
 ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs                                           |   41 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/DirectoryFileNameResourse.cs            |   77 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1536_2048备份.png                  |    0 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1536_2008备份.png                  |    0 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs                            |    1 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧640_1136备份.png                   |    0 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧320_480备份.png                    |    0 
 ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelFourButtonDirectionForm.cs            |   10 
 ZigbeeApp/Shared/Phone/UserCenter/Safety/GarrisonAreaSettionMenuForm.cs                       |    4 
 ZigbeeApp/Shared/Phone/Device/VideoIntercom/VideoMachine.cs                                   |    5 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧768*1024.png                     |    0 
 ZigbeeApp/Shared/Phone/Device/Logic/CurrentDeviceState.cs                                     |  136 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs                         |   22 
 ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayInfoMenuForm.cs                 |   78 
 ZigbeeApp/Shared/Phone/Device/Logic/LogicDveiceStatus.cs                                      |   92 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs                   |   17 
 ZigbeeApp/Home.Ios/Info.plist                                                                 |    4 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧2048*2732.png                    |    0 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1024*768.png                     |    0 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/IMessageCommon.cs                         |    2 
 ZigbeeApp/Home.Ios/Resources/Phone/ZigeeLogic/iconSelectedBackgroundColor1.png                |    0 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs                  |  296 +++
 ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayListFileForm.cs                 |  203 ++
 ZigbeeApp/Shared/Shared.projitems                                                             |    6 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧768_1024备份.png                   |    0 
 ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelColorSelectForm.cs                        |  182 +
 ZigbeeApp/GateWay.Droid/Assets/Phone/ZigeeLogic/iconSelectedBackgroundColor1.png              |    0 
 ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelThreeButton.png                            |    0 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧750_1334备份.png                   |    0 
 ZigbeeApp/Shared/Phone/Device/Logic/LogicView/RoomClickView.cs                                |   51 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/UserCenterCommon.cs                       |    6 
 ZigbeeApp/GateWay.Droid/Assets/Phone/ZigeeLogic/iconBackgroundColor1.png                      |    0 
 ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelTwoButton.png                              |    0 
 ZigbeeApp/Shared/Phone/Device/Logic/Method.cs                                                 |   34 
 ZigbeeApp/GateWay.Droid/GateWay.Droid.csproj                                                  |    6 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlBackupLogic.cs                          |   34 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1125*2436.png                    |    0 
 ZigbeeApp/Shared/Common/CommonPage.cs                                                         |    2 
 ZigbeeApp/Shared/Phone/Device/Logic/Send.cs                                                   |    6 
 ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionMainForm.cs                            |   95 
 ZigbeeApp/Shared/Phone/MainPage/HomeMainPageForm.cs                                           |   36 
 ZigbeeApp/Shared/Phone/TemplateData/TemplateCommonLogic.cs                                    | 1846 +++++++++++++++++++
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1242*2688.png                    |    0 
 ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceMiniLightDetailCardForm.cs                  |    5 
 ZigbeeApp/GateWay.Droid/Properties/AndroidManifest.xml                                        |    2 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFileLogic.cs                            |   10 
 ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelThreeButton.png                              |    0 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceOtherLogic.cs                     |   10 
 ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGatewayData.cs                                         |   27 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧2048*1536.png                    |    0 
 ZigbeeApp/Shared/Phone/ZigBee/Device/Safeguard.cs                                             |   10 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/BaseCommonControl/Base/TextInputBase.cs |   24 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧2048_1496备份.png                  |    0 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1792*828.png                     |    0 
 ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelFourButton.png                               |    0 
 ZigbeeApp/Home.Ios/Resources/Language.ini                                                     |    2 
 ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelFourButton.png                             |    0 
 ZigbeeApp/Home.Ios/Home.IOS.csproj                                                            |   58 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs                     |   28 
 ZigbeeApp/Shared/R.cs                                                                         |    8 
 ZigbeeApp/Shared/Phone/Device/Logic/AddScenePage.cs                                           |   80 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧2048_1536备份.png                  |    0 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePirSensorLogic.cs                 |   15 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧2436*1125.png                    |    0 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1536*2048.png                    |    0 
 ZigbeeApp/Shared/Phone/Device/Logic/RoomAndDeviceView.cs                                      |  188 +
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧1242*2208.png                    |    0 
 ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceAcDetailCardForm.cs                         |    4 
 ZigbeeApp/Shared/Common/Device.cs                                                             |   54 
 ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayListForm.cs                     |    2 
 ZigbeeApp/Shared/Phone/TemplateData/TemplateDataCommon.cs                                     |  738 +++++++
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAirConditionerLogic.cs            |   10 
 ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelThreeButtonDirectionForm.cs           |   10 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧2208*1242.png                    |    0 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/UserCenterLogic.cs                         |   28 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs                           |   47 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧768_1004备份.png                   |    0 
 /dev/null                                                                                     |    0 
 ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelTwoButton.png                                |    0 
 ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelTwoButtonDirectionForm.cs             |   10 
 ZigbeeApp/Shared/Phone/SmartSound/Forms/SmartSoundContentForDevice.cs                         |    7 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCommonLogic.cs                    |   16 
 ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs                                          |    3 
 ZigbeeApp/Shared/Phone/TemplateData/TemplateDeviceDataLogic.cs                                |  890 +++++++++
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧828*1792.png                     |    0 
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/UserCenterResourse.cs                   |    8 
 ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/易欧640_1136备份-1.png                 |    0 
 ZigbeeApp/Home.Ios/Resources/Phone/ZigeeLogic/iconBackgroundColor1.png                        |    0 
 ZigbeeApp/Shared/Common/House.cs                                                              |   54 
 102 files changed, 5,228 insertions(+), 532 deletions(-)

diff --git a/ZigbeeApp/GateWay.Droid/Assets/Language.ini b/ZigbeeApp/GateWay.Droid/Assets/Language.ini
index 6c90466..3aa1b68 100755
--- a/ZigbeeApp/GateWay.Droid/Assets/Language.ini
+++ b/ZigbeeApp/GateWay.Droid/Assets/Language.ini
@@ -1880,6 +1880,8 @@
 16141=绱ф�ユ寜閽�
 16142=闂ㄧ獥浼犳劅鍣�
 16143=閽ュ寵鎵�
+16144=鑹插�煎彿涓�6浣嶏紙鐢变换鎰忔暟瀛�+瀛楁瘝缁勫悎锛�
+16145=闀挎寜姝ゆ寜閿�
 
 ;鈽呪槄鈽呪槄涓嬮潰杩欎簺鏄帴鍙g殑杩斿洖淇℃伅缈昏瘧,浠�18000寮�濮嬧槄鈽呪槄鈽�
 18004=鎸囧畾缃戝叧宸茬粡琚粦瀹�
diff --git a/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelFourButton.png b/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelFourButton.png
index 19d8078..91fa891 100755
--- a/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelFourButton.png
+++ b/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelFourButton.png
Binary files differ
diff --git a/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelThreeButton.png b/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelThreeButton.png
index 96688db..6b9e971 100755
--- a/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelThreeButton.png
+++ b/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelThreeButton.png
Binary files differ
diff --git a/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelTwoButton.png b/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelTwoButton.png
index bd1271c..fcaef59 100755
--- a/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelTwoButton.png
+++ b/ZigbeeApp/GateWay.Droid/Assets/Phone/Instruct/PanelTwoButton.png
Binary files differ
diff --git a/ZigbeeApp/GateWay.Droid/Assets/Phone/ZigeeLogic/iconBackgroundColor1.png b/ZigbeeApp/GateWay.Droid/Assets/Phone/ZigeeLogic/iconBackgroundColor1.png
new file mode 100755
index 0000000..cecc4ee
--- /dev/null
+++ b/ZigbeeApp/GateWay.Droid/Assets/Phone/ZigeeLogic/iconBackgroundColor1.png
Binary files differ
diff --git a/ZigbeeApp/GateWay.Droid/Assets/Phone/ZigeeLogic/iconSelectedBackgroundColor1.png b/ZigbeeApp/GateWay.Droid/Assets/Phone/ZigeeLogic/iconSelectedBackgroundColor1.png
new file mode 100755
index 0000000..b2c5368
--- /dev/null
+++ b/ZigbeeApp/GateWay.Droid/Assets/Phone/ZigeeLogic/iconSelectedBackgroundColor1.png
Binary files differ
diff --git a/ZigbeeApp/GateWay.Droid/GateWay.Droid.csproj b/ZigbeeApp/GateWay.Droid/GateWay.Droid.csproj
index 545eee2..af819da 100644
--- a/ZigbeeApp/GateWay.Droid/GateWay.Droid.csproj
+++ b/ZigbeeApp/GateWay.Droid/GateWay.Droid.csproj
@@ -2330,6 +2330,12 @@
   <ItemGroup>
     <AndroidAsset Include="Assets\Phone\Item\SynchronizationSelected.png" />
   </ItemGroup>
+  <ItemGroup>
+    <AndroidAsset Include="Assets\Phone\ZigeeLogic\iconBackgroundColor1.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <AndroidAsset Include="Assets\Phone\ZigeeLogic\iconSelectedBackgroundColor1.png" />
+  </ItemGroup>
   <Import Project="..\Shared\Shared.projitems" Label="Shared" Condition="Exists('..\Shared\Shared.projitems')" />
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
   <Import Project="..\packages\Xamarin.Android.Support.Annotations.26.0.2\build\MonoAndroid80\Xamarin.Android.Support.Annotations.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Annotations.26.0.2\build\MonoAndroid80\Xamarin.Android.Support.Annotations.targets')" />
diff --git a/ZigbeeApp/GateWay.Droid/Properties/AndroidManifest.xml b/ZigbeeApp/GateWay.Droid/Properties/AndroidManifest.xml
index 2509196..2aa220d 100644
--- a/ZigbeeApp/GateWay.Droid/Properties/AndroidManifest.xml
+++ b/ZigbeeApp/GateWay.Droid/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hdl.home" android:versionCode="0120072302" android:installLocation="auto" android:versionName="1.1.0120072302">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hdl.home" android:versionCode="0120072403" android:installLocation="auto" android:versionName="1.1.0120072403">
 	<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="26" />
 	<permission android:name="com.hdl.home.permission.JPUSH_MESSAGE" android:protectionLevel="signature" />
 	<uses-permission android:name="android.permission.WAKE_LOCK" />
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1024_748-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1024_748-1.png
deleted file mode 100755
index 78c5f84..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1024_748-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1024_768-2.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1024_768-2.png
deleted file mode 100755
index c2c8ed9..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1024_768-2.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1024_768-3.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1024_768-3.png
deleted file mode 100755
index c2c8ed9..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1024_768-3.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1125_2436-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1125_2436-1.png
deleted file mode 100755
index ed5abe7..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1125_2436-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1242_2208.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1242_2208.png
deleted file mode 100755
index cacd31f..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1242_2208.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1242_2688_XS Max-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1242_2688_XS Max-1.png
deleted file mode 100755
index 73a6627..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1242_2688_XS Max-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1536_2008-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1536_2008-1.png
deleted file mode 100755
index 4942e4a..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1536_2008-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1536_2048-2.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1536_2048-2.png
deleted file mode 100755
index 3aa9190..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1536_2048-2.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1536_2048-3.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1536_2048-3.png
deleted file mode 100755
index 3aa9190..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1536_2048-3.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1792_828-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1792_828-1.png
deleted file mode 100755
index 23abb10..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/1792_828-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_1496-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_1496-1.png
deleted file mode 100755
index 6d32881..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_1496-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_1536-2.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_1536-2.png
deleted file mode 100755
index f1db73f..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_1536-2.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_1536-3.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_1536-3.png
deleted file mode 100755
index f1db73f..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_1536-3.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_2732.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_2732.png
deleted file mode 100755
index c7b53b1..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2048_2732.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2208_1242-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2208_1242-1.png
deleted file mode 100755
index 4092649..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2208_1242-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2436_1125-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2436_1125-1.png
deleted file mode 100755
index e4ea893..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2436_1125-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2688_1242-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2688_1242-1.png
deleted file mode 100755
index 98dc1c1..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/2688_1242-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/320_480-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/320_480-1.png
deleted file mode 100755
index 75b2896..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/320_480-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_1136-2.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_1136-2.png
deleted file mode 100755
index dee0605..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_1136-2.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_1136-3.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_1136-3.png
deleted file mode 100755
index dee0605..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_1136-3.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_960-2.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_960-2.png
deleted file mode 100755
index 68ece8a..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_960-2.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_960-3.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_960-3.png
deleted file mode 100755
index 68ece8a..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/640_960-3.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/750_1334-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/750_1334-1.png
deleted file mode 100755
index c746b45..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/750_1334-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/768_1004-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/768_1004-1.png
deleted file mode 100755
index 526911f..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/768_1004-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/768_1024-2.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/768_1024-2.png
deleted file mode 100755
index 42fdc74..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/768_1024-2.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/768_1024-3.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/768_1024-3.png
deleted file mode 100755
index 42fdc74..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/768_1024-3.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/828_1792_XR-1.png b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/828_1792_XR-1.png
deleted file mode 100755
index d85b362..0000000
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/828_1792_XR-1.png
+++ /dev/null
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/Contents.json b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/Contents.json
index 89d8507..17aefa3 100755
--- a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/Contents.json
+++ b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/Contents.json
@@ -3,7 +3,6 @@
     {
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "1920_1080-1.png",
       "size": "1920x1080",
       "scale": "1x",
       "idiom": "tv",
@@ -12,7 +11,6 @@
     {
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "3840_2160-1.png",
       "size": "1920x1080",
       "scale": "2x",
       "idiom": "tv",
@@ -22,7 +20,7 @@
       "minimum-system-version": "12.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "1242_2688_XS Max-1.png",
+      "filename": "鏄撴1242*2688.png",
       "size": "414x896",
       "subtype": "1792",
       "scale": "3x",
@@ -32,7 +30,7 @@
       "minimum-system-version": "12.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "828_1792_XR-1.png",
+      "filename": "鏄撴828*1792.png",
       "size": "276x597.3",
       "subtype": "2688",
       "scale": "3x",
@@ -42,7 +40,7 @@
       "minimum-system-version": "12.0",
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "2688_1242-1.png",
+      "filename": "鏄撴2688*1242.png",
       "size": "896x414",
       "subtype": "1792",
       "scale": "3x",
@@ -52,7 +50,7 @@
       "minimum-system-version": "12.0",
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "1792_828-1.png",
+      "filename": "鏄撴1792*828.png",
       "size": "597.3x276",
       "subtype": "2688",
       "scale": "3x",
@@ -62,7 +60,7 @@
       "minimum-system-version": "11.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "1125_2436-1.png",
+      "filename": "鏄撴1125*2436.png",
       "size": "375x812",
       "subtype": "2436h",
       "scale": "3x",
@@ -72,7 +70,7 @@
       "minimum-system-version": "11.0",
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "2436_1125-1.png",
+      "filename": "鏄撴2436*1125.png",
       "size": "812x375",
       "subtype": "2436h",
       "scale": "3x",
@@ -82,7 +80,7 @@
       "minimum-system-version": "8.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "1242_2208.png",
+      "filename": "鏄撴1242*2208.png",
       "size": "414x736",
       "subtype": "736h",
       "scale": "3x",
@@ -92,7 +90,7 @@
       "minimum-system-version": "8.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "750_1334-1.png",
+      "filename": "鏄撴750_1334澶囦唤.png",
       "size": "375x667",
       "subtype": "667h",
       "scale": "2x",
@@ -102,7 +100,7 @@
       "minimum-system-version": "8.0",
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "2208_1242-1.png",
+      "filename": "鏄撴2208*1242.png",
       "size": "736x414",
       "subtype": "736h",
       "scale": "3x",
@@ -112,7 +110,7 @@
       "minimum-system-version": "7.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "2048_2732.png",
+      "filename": "鏄撴2048*2732.png",
       "size": "1024x1366",
       "scale": "2x",
       "idiom": "ipad"
@@ -121,7 +119,7 @@
       "minimum-system-version": "7.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "640_960-2.png",
+      "filename": "鏄撴640_960澶囦唤.png",
       "size": "320x480",
       "scale": "2x",
       "idiom": "iphone"
@@ -130,7 +128,7 @@
       "minimum-system-version": "7.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "640_1136-2.png",
+      "filename": "鏄撴640_1136澶囦唤.png",
       "size": "320x568",
       "subtype": "retina4",
       "scale": "2x",
@@ -140,7 +138,7 @@
       "minimum-system-version": "7.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "768_1024-2.png",
+      "filename": "鏄撴768*1024.png",
       "size": "768x1024",
       "scale": "1x",
       "idiom": "ipad"
@@ -149,7 +147,7 @@
       "minimum-system-version": "7.0",
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "1536_2048-2.png",
+      "filename": "鏄撴1536*2048.png",
       "size": "768x1024",
       "scale": "2x",
       "idiom": "ipad"
@@ -158,7 +156,7 @@
       "minimum-system-version": "7.0",
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "1024_768-2.png",
+      "filename": "鏄撴1024*768.png",
       "size": "1024x768",
       "scale": "1x",
       "idiom": "ipad"
@@ -167,7 +165,7 @@
       "minimum-system-version": "7.0",
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "2048_1536-2.png",
+      "filename": "鏄撴2048*1536.png",
       "size": "1024x768",
       "scale": "2x",
       "idiom": "ipad"
@@ -175,7 +173,7 @@
     {
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "320_480-1.png",
+      "filename": "鏄撴320_480澶囦唤.png",
       "size": "320x480",
       "scale": "1x",
       "idiom": "iphone"
@@ -183,7 +181,7 @@
     {
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "640_960-3.png",
+      "filename": "鏄撴640_960澶囦唤-1.png",
       "size": "320x480",
       "scale": "2x",
       "idiom": "iphone"
@@ -191,7 +189,7 @@
     {
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "640_1136-3.png",
+      "filename": "鏄撴640_1136澶囦唤-1.png",
       "size": "320x568",
       "subtype": "retina4",
       "scale": "2x",
@@ -200,7 +198,7 @@
     {
       "orientation": "portrait",
       "extent": "to-status-bar",
-      "filename": "768_1004-1.png",
+      "filename": "鏄撴768_1004澶囦唤.png",
       "size": "768x1004",
       "scale": "1x",
       "idiom": "ipad"
@@ -208,7 +206,7 @@
     {
       "orientation": "portrait",
       "extent": "to-status-bar",
-      "filename": "1536_2008-1.png",
+      "filename": "鏄撴1536_2008澶囦唤.png",
       "size": "768x1004",
       "scale": "2x",
       "idiom": "ipad"
@@ -216,7 +214,7 @@
     {
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "768_1024-3.png",
+      "filename": "鏄撴768_1024澶囦唤.png",
       "size": "768x1024",
       "scale": "1x",
       "idiom": "ipad"
@@ -224,7 +222,7 @@
     {
       "orientation": "portrait",
       "extent": "full-screen",
-      "filename": "1536_2048-3.png",
+      "filename": "鏄撴1536_2048澶囦唤.png",
       "size": "768x1024",
       "scale": "2x",
       "idiom": "ipad"
@@ -232,7 +230,7 @@
     {
       "orientation": "landscape",
       "extent": "to-status-bar",
-      "filename": "1024_748-1.png",
+      "filename": "鏄撴1024_748澶囦唤.png",
       "size": "1024x748",
       "scale": "1x",
       "idiom": "ipad"
@@ -240,7 +238,7 @@
     {
       "orientation": "landscape",
       "extent": "to-status-bar",
-      "filename": "2048_1496-1.png",
+      "filename": "鏄撴2048_1496澶囦唤.png",
       "size": "1024x748",
       "scale": "2x",
       "idiom": "ipad"
@@ -248,7 +246,7 @@
     {
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "1024_768-3.png",
+      "filename": "鏄撴1024_768澶囦唤.png",
       "size": "1024x768",
       "scale": "1x",
       "idiom": "ipad"
@@ -256,7 +254,7 @@
     {
       "orientation": "landscape",
       "extent": "full-screen",
-      "filename": "2048_1536-3.png",
+      "filename": "鏄撴2048_1536澶囦唤.png",
       "size": "1024x768",
       "scale": "2x",
       "idiom": "ipad"
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471024*768.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471024*768.png"
new file mode 100644
index 0000000..2b98c16
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471024*768.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471024_748\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471024_748\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..a82c717
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471024_748\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471024_768\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471024_768\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..2b98c16
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471024_768\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471125*2436.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471125*2436.png"
new file mode 100644
index 0000000..9d7348a
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471125*2436.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471242*2208.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471242*2208.png"
new file mode 100644
index 0000000..d4b9c68
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471242*2208.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471242*2688.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471242*2688.png"
new file mode 100644
index 0000000..147990a
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471242*2688.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471536*2048.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471536*2048.png"
new file mode 100644
index 0000000..736a3c6
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471536*2048.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471536_2008\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471536_2008\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..4961c22
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471536_2008\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471536_2048\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471536_2048\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..736a3c6
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471536_2048\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471792*828.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471792*828.png"
new file mode 100644
index 0000000..7f565ad
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2471792*828.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048*1536.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048*1536.png"
new file mode 100644
index 0000000..8c238d9
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048*1536.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048*2732.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048*2732.png"
new file mode 100644
index 0000000..8fcd577
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048*2732.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048_1496\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048_1496\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..db8e8de
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048_1496\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048_1536\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048_1536\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..8c238d9
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472048_1536\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472208*1242.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472208*1242.png"
new file mode 100644
index 0000000..85d0525
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472208*1242.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472436*1125.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472436*1125.png"
new file mode 100644
index 0000000..6e31500
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472436*1125.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472688*1242.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472688*1242.png"
new file mode 100644
index 0000000..80784b4
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\2472688*1242.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247320_480\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247320_480\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..6d8e60c
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247320_480\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_1136\345\244\207\344\273\275-1.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_1136\345\244\207\344\273\275-1.png"
new file mode 100755
index 0000000..0fbd6b4
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_1136\345\244\207\344\273\275-1.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_1136\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_1136\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..0fbd6b4
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_1136\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_960\345\244\207\344\273\275-1.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_960\345\244\207\344\273\275-1.png"
new file mode 100755
index 0000000..bf03de8
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_960\345\244\207\344\273\275-1.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_960\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_960\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..bf03de8
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247640_960\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247750_1334\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247750_1334\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..95ae2bd
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247750_1334\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247768*1024.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247768*1024.png"
new file mode 100644
index 0000000..4ef3f1c
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247768*1024.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247768_1004\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247768_1004\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..be6450b
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247768_1004\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247768_1024\345\244\207\344\273\275.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247768_1024\345\244\207\344\273\275.png"
new file mode 100755
index 0000000..4ef3f1c
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247768_1024\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247828*1792.png" "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247828*1792.png"
new file mode 100644
index 0000000..907da4a
--- /dev/null
+++ "b/ZigbeeApp/Home.Ios/Assets.xcassets/LaunchImage.launchimage/\346\230\223\346\254\247828*1792.png"
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Home.IOS.csproj b/ZigbeeApp/Home.Ios/Home.IOS.csproj
index 8885bc5..1de72cf 100644
--- a/ZigbeeApp/Home.Ios/Home.IOS.csproj
+++ b/ZigbeeApp/Home.Ios/Home.IOS.csproj
@@ -199,33 +199,6 @@
       <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\2048*1536-1.png" />
       <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1920_1080-1.png" />
       <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\3840_2160-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1242_2688_XS Max-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\828_1792_XR-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\2688_1242-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1792_828-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1125_2436-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\2436_1125-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1242_2208.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\750_1334-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\2208_1242-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\2048_2732.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\640_960-2.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\640_1136-2.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\768_1024-2.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1536_2048-2.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1024_768-2.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\2048_1536-2.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\320_480-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\640_960-3.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\640_1136-3.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\768_1004-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1536_2008-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\768_1024-3.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1536_2048-3.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1024_748-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\2048_1496-1.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\1024_768-3.png" />
-      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\2048_1536-3.png" />
       <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\40_40-3.png" />
       <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\60_60-1.png" />
       <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\58_58-2.png" />
@@ -250,9 +223,37 @@
       <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\87_87-2.png" />
       <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\80_80-4.png" />
       <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\1024_1024-2.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1242*2688.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴828*1792.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴2688*1242.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1792*828.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1125*2436.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴2436*1125.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1242*2208.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴2208*1242.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴2048*2732.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴768*1024.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1536*2048.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1024*768.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴2048*1536.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴750_1334澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴640_960澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴640_1136澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴320_480澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴640_960澶囦唤-1.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴640_1136澶囦唤-1.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴768_1004澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1536_2008澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴768_1024澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1536_2048澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1024_748澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴2048_1496澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴1024_768澶囦唤.png" />
+      <ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\鏄撴2048_1536澶囦唤.png" />
     </ItemGroup>
     <ItemGroup>
       <BundleResource Include="Resources\Language.ini" />
+      <BundleResource Include="Resources\DeviceName.ini" />
       <BundleResource Include="Resources\Phone\Guide\RightIcon.png" />
       <BundleResource Include="Resources\Phone\Guide\LeftIcon.png" />
       <BundleResource Include="Resources\Phone\Guide\Finger.png" />
@@ -705,6 +706,7 @@
       <BundleResource Include="Resources\Phone\ZigeeLogic\withdrawal.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\logicaddcolor.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\sensor13.png" />
+      <BundleResource Include="Resources\Phone\ZigeeLogic\iconSelectedBackgroundColor1.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\nightLight.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\logicclose.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\function.png" />
@@ -748,6 +750,7 @@
       <BundleResource Include="Resources\Phone\ZigeeLogic\sensor21.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\selectedsensor0.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\next.png" />
+      <BundleResource Include="Resources\Phone\ZigeeLogic\iconBackgroundColor1.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\iconSelectedBackgroundColor.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\security.png" />
       <BundleResource Include="Resources\Phone\ZigeeLogic\sensor44.png" />
@@ -1141,7 +1144,6 @@
       <BundleResource Include="Resources\Phone\Gateway\WiredGateway.png" />
       <BundleResource Include="Resources\Phone\Gateway\WirelessGateway.png" />
       <BundleResource Include="Resources\Phone\Gateway\AddGatewaySuccess.png" />
-      <BundleResource Include="Resources\DeviceName.ini" />
     </ItemGroup>
     <Import Project="..\Shared\Shared.projitems" Label="Shared" Condition="Exists('..\Shared\Shared.projitems')" />
     <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
diff --git a/ZigbeeApp/Home.Ios/Info.plist b/ZigbeeApp/Home.Ios/Info.plist
index 480436c..97f150a 100755
--- a/ZigbeeApp/Home.Ios/Info.plist
+++ b/ZigbeeApp/Home.Ios/Info.plist
@@ -54,9 +54,9 @@
 	<key>aps-environment</key>
 	<string>development</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.1.012007231</string>
+	<string>1.1.0120072301</string>
 	<key>CFBundleVersion</key>
-	<string>202007231</string>
+	<string>2020072301</string>
 	<key>CFBundleURLTypes</key>
 	<array>
 		<dict>
diff --git a/ZigbeeApp/Home.Ios/Resources/Language.ini b/ZigbeeApp/Home.Ios/Resources/Language.ini
index 6c90466..3aa1b68 100755
--- a/ZigbeeApp/Home.Ios/Resources/Language.ini
+++ b/ZigbeeApp/Home.Ios/Resources/Language.ini
@@ -1880,6 +1880,8 @@
 16141=绱ф�ユ寜閽�
 16142=闂ㄧ獥浼犳劅鍣�
 16143=閽ュ寵鎵�
+16144=鑹插�煎彿涓�6浣嶏紙鐢变换鎰忔暟瀛�+瀛楁瘝缁勫悎锛�
+16145=闀挎寜姝ゆ寜閿�
 
 ;鈽呪槄鈽呪槄涓嬮潰杩欎簺鏄帴鍙g殑杩斿洖淇℃伅缈昏瘧,浠�18000寮�濮嬧槄鈽呪槄鈽�
 18004=鎸囧畾缃戝叧宸茬粡琚粦瀹�
diff --git a/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelFourButton.png b/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelFourButton.png
index 19d8078..91fa891 100755
--- a/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelFourButton.png
+++ b/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelFourButton.png
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelThreeButton.png b/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelThreeButton.png
index 96688db..6b9e971 100755
--- a/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelThreeButton.png
+++ b/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelThreeButton.png
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelTwoButton.png b/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelTwoButton.png
index bd1271c..fcaef59 100755
--- a/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelTwoButton.png
+++ b/ZigbeeApp/Home.Ios/Resources/Phone/Instruct/PanelTwoButton.png
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Resources/Phone/ZigeeLogic/iconBackgroundColor1.png b/ZigbeeApp/Home.Ios/Resources/Phone/ZigeeLogic/iconBackgroundColor1.png
new file mode 100755
index 0000000..cecc4ee
--- /dev/null
+++ b/ZigbeeApp/Home.Ios/Resources/Phone/ZigeeLogic/iconBackgroundColor1.png
Binary files differ
diff --git a/ZigbeeApp/Home.Ios/Resources/Phone/ZigeeLogic/iconSelectedBackgroundColor1.png b/ZigbeeApp/Home.Ios/Resources/Phone/ZigeeLogic/iconSelectedBackgroundColor1.png
new file mode 100755
index 0000000..b2c5368
--- /dev/null
+++ b/ZigbeeApp/Home.Ios/Resources/Phone/ZigeeLogic/iconSelectedBackgroundColor1.png
Binary files differ
diff --git a/ZigbeeApp/Shared/Common/CommonPage.cs b/ZigbeeApp/Shared/Common/CommonPage.cs
old mode 100644
new mode 100755
index 15b6819..44f364e
--- a/ZigbeeApp/Shared/Common/CommonPage.cs
+++ b/ZigbeeApp/Shared/Common/CommonPage.cs
@@ -42,7 +42,7 @@
         /// <summary>
         /// 鐗堟湰鍙�
         /// </summary>
-        public static string CodeIDString = "1.1.012007231";
+        public static string CodeIDString = "1.1.0120072403";
         /// <summary>
         /// 娉ㄥ唽鏉ユ簮(0:HDL On 1:Zigbee)
         /// </summary>
diff --git a/ZigbeeApp/Shared/Common/Device.cs b/ZigbeeApp/Shared/Common/Device.cs
index 8b92a87..a813749 100755
--- a/ZigbeeApp/Shared/Common/Device.cs
+++ b/ZigbeeApp/Shared/Common/Device.cs
@@ -99,7 +99,7 @@
             this.dicDeviceEpoint.Clear();
 
             //鍒濆鍖栬澶囨灇涓�
-            this.InitDeviceModelIdEnum();
+            this.InitDeviceModelIdEnum();
 
             //鑾峰彇鏈湴鍏ㄩ儴鐨勮澶囨枃浠�
             List<string> listFile = this.GetAllDeviceFile();
@@ -565,7 +565,7 @@
             //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceMacName(device, macName, "MacRename");
+                return Phone.TemplateData.TemplateDeviceDataLogic.Current.ReDeviceMacName(device, macName);
             }
 
             //鑾峰彇缂栬緫璁惧Mac鍚嶅瓧鐨勫懡浠ゅ瓧绗�
@@ -576,7 +576,7 @@
                 return null;
             }
             //鍔犵紦瀛�
-            Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceMacName(device, macName, "MacRename");
+            Phone.TemplateData.TemplateDeviceDataLogic.Current.ReDeviceMacName(device, macName);
 
             var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.RenameDeviceMacNameData>(result.ReceiptData);
             return new CommonDevice.RenameDeviceMacNameAllData { renameDeviceMacNameData = tempData };
@@ -593,7 +593,7 @@
             //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceEpointName(device, deviceName, "DeviceRename");
+                return Phone.TemplateData.TemplateDeviceDataLogic.Current.ReDeviceEpointName(device, deviceName);
             }
             //鑾峰彇缂栬緫璁惧绔偣鍚嶅瓧鐨勫懡浠ゅ瓧绗�
             var sendData = this.GetReDeviceEpointNameCommandText(device.DeviceAddr, device.DeviceEpoint, deviceName);
@@ -603,7 +603,7 @@
                 return null;
             }
             //鍔犵紦瀛�
-            Phone.ModelData.DeviceModelDataLogic.Current.ReDeviceEpointName(device, deviceName, "DeviceRename");
+            Phone.TemplateData.TemplateDeviceDataLogic.Current.ReDeviceEpointName(device, deviceName);
 
             var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceRenameResponseData>(result.ReceiptData);
             return new CommonDevice.DeviceRenameAllData { deviceRenameData = tempData };
@@ -885,7 +885,7 @@
                 return false;
             }
             //娓╂箍搴︿紶鎰熷櫒娌℃湁瀹氫綅鍔熻兘
-            if (myTypeInfo.ConcreteType == DeviceConcreteType.Sensor_TemperatrueHumidity)
+            if (myTypeInfo.ConcreteType == DeviceConcreteType.Sensor_TemperatureHumidity)
             {
                 return false;
             }
@@ -1386,6 +1386,16 @@
                     //闈㈡澘鐨勬俯搴︽帰澶村彨  闈㈡澘鍚嶅瓧+娓╁害
                     return deviceInfoType.DeviceDefultName + Language.StringByID(R.MyInternationalizationString.uTemperature);
                 }
+                else if (((TemperatureSensor)device).SensorDiv == 1)
+                {
+                    //娓╁害浼犳劅鍣�
+                    return Language.StringByID(R.MyInternationalizationString.TemperatureSensor);
+                }
+                else if (((TemperatureSensor)device).SensorDiv == 2)
+                {
+                    //婀垮害浼犳劅鍣�
+                    return Language.StringByID(R.MyInternationalizationString.HumiditySensor);
+                }
             }
             //鍏朵粬鎯呭喌,浣跨敤瀹冪殑榛樿鍚嶇О
             return deviceInfoType.DeviceDefultName + epointNo;
@@ -1420,7 +1430,7 @@
         /// <param name="device">璁惧瀵硅薄</param>
         /// <param name="macName">Mac鍚嶅瓧</param>
         /// <returns></returns>
-        private void SetMacName(CommonDevice device, string macName)
+        public void SetMacName(CommonDevice device, string macName)
         {
             device.DeviceName = macName;
         }
@@ -1431,7 +1441,7 @@
         /// <param name="device">璁惧瀵硅薄</param>
         /// <param name="epointName">绔偣鍚嶅瓧</param>
         /// <returns></returns>
-        private void SetEpointName(CommonDevice device, string epointName)
+        public void SetEpointName(CommonDevice device, string epointName)
         {
             device.DeviceEpointName = epointName;
         }
@@ -2079,14 +2089,14 @@
                     //璁剧疆浼犳劅鍣ㄥ叿浣撶殑绫诲瀷
                     info.BeloneType = DeviceBeloneType.A娓╂箍搴︿紶鎰熷櫒;
                     info.ConcreteText = this.dicDeviceModelIdEnum["A411"].A瀹樻柟鍚嶅瓧;
-                    info.ConcreteType = DeviceConcreteType.Sensor_TemperatrueHumidity;
+                    info.ConcreteType = DeviceConcreteType.Sensor_TemperatureHumidity;
                 }
                 else if (temperatrue == true && humidity == false)
                 {
                     //璁剧疆浼犳劅鍣ㄥ叿浣撶殑绫诲瀷
                     info.BeloneType = DeviceBeloneType.A娓╁害浼犳劅鍣�;
                     info.ConcreteText = this.dicDeviceModelIdEnum["A412"].A瀹樻柟鍚嶅瓧;
-                    info.ConcreteType = DeviceConcreteType.Sensor_Temperatrue;
+                    info.ConcreteType = DeviceConcreteType.Sensor_Temperature;
                 }
                 else if (temperatrue == false && humidity == true)
                 {
@@ -2187,12 +2197,6 @@
                 //闂ㄧ獥浼犳劅鍣�
                 info.ConcreteType = DeviceConcreteType.Sensor_DoorWindow;
                 info.ConcreteText = Language.StringByID(R.MyInternationalizationString.uSensorDoorWindow);
-            }
-            else if (iasZone.IasDeviceType == 541)
-            {
-                //鐞冨瀷绉诲姩浼犳劅鍣�
-                info.ConcreteType = DeviceConcreteType.Sensor_SphericalMotion;
-                info.ConcreteText = this.dicDeviceModelIdEnum["MSPIRB-ZB.10"].A瀹樻柟鍚嶅瓧;
             }
         }
 
@@ -2877,14 +2881,8 @@
         /// <param name="device">璁剧疆婧愯澶囧璞�</param>
         public void SetDeviceInfoToMain(CommonDevice mainDevice, CommonDevice device)
         {
-            if (string.IsNullOrEmpty(device.DeviceInfo.MacName) == false)
-            {
-                mainDevice.DeviceName = device.DeviceInfo.MacName;
-            }
-            if (string.IsNullOrEmpty(device.DeviceInfo.DeviceName) == false)
-            {
-                mainDevice.DeviceEpointName = device.DeviceInfo.DeviceName;
-            }
+            mainDevice.DeviceName = device.DeviceInfo.MacName;
+            mainDevice.DeviceEpointName = device.DeviceInfo.DeviceName;
             mainDevice.CurrentGateWayId = device.CurrentGateWayId;
             mainDevice.ZigbeeType = device.DeviceInfo.ZigbeeType;
             mainDevice.IsOnline = device.DeviceInfo.IsOnline;
@@ -3399,9 +3397,9 @@
         /// </summary>
         Sensor_PMTwoPointFive = 1307,
         /// <summary>
-        /// 娓╂箍搴︿紶鎰熷櫒
+        /// 娓╂箍搴︿紶鎰熷櫒(杩欎釜鍗曡瘝鎷奸敊浜�,浣嗘槸閿欎簡灏遍敊浜嗗憲,灏辫繖鏍蜂簡)
         /// </summary>
-        Sensor_TemperatrueHumidity = 1308,
+        Sensor_TemperatureHumidity = 1308,
 
         /// <summary>
         /// 杩愬姩浼犳劅鍣�
@@ -3412,9 +3410,9 @@
         /// </summary>
         Sensor_Keyfob = -1307,
         /// <summary>
-        /// 娓╁害浼犳劅鍣�
+        /// 娓╁害浼犳劅鍣�(杩欎釜鍗曡瘝鎷奸敊浜�,浣嗘槸閿欎簡灏遍敊浜嗗憲,灏辫繖鏍蜂簡)
         /// </summary>
-        Sensor_Temperatrue = -1309,
+        Sensor_Temperature = -1309,
         /// <summary>
         /// 婀垮害浼犳劅鍣�
         /// </summary>
diff --git a/ZigbeeApp/Shared/Common/House.cs b/ZigbeeApp/Shared/Common/House.cs
index e726972..87e9aee 100755
--- a/ZigbeeApp/Shared/Common/House.cs
+++ b/ZigbeeApp/Shared/Common/House.cs
@@ -65,6 +65,58 @@
         /// value:FloorName
         /// </summary>
         public Dictionary<string,string> FloorDics = new Dictionary<string,string> { };
+        /// <summary>
+        /// -1:鏈厤缃�(闇�瑕侀噸鏂伴�夋嫨) 1:鏃犳ā鏉挎湁璁惧  2:鏈夋ā鏉挎湁璁惧  3:鏃犳ā鏉挎棤璁惧(璇锋棤瑙嗚繖涓彉閲�)
+        /// </summary>
+        public int TemplateMode = -1;
+        /// <summary>
+        /// 璇ヤ綇瀹呮槸鍚︽槸灞曠ず妯℃澘(姝ゅ彉閲忔槸缁欐煡鐪嬫ā鏉挎暟鎹椂浣跨敤鐨�,璇锋棤瑙嗚繖涓彉閲�)
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public bool IsShowTemplate = false;
+        /// <summary>
+        /// 褰撳墠浣忓畢閫夋嫨鐨勬ā鏉垮悕瀛�(璇锋棤瑙嗚繖涓彉閲�)
+        /// </summary>
+        public string SelectTemplate = string.Empty;
+        /// <summary>
+        /// 鑷畾涔夊崟鍏冪殑鏍囬鍚嶇О(涓嶭istUintContent涓暟鍖归厤,璇锋棤瑙嗚繖涓彉閲�)
+        /// </summary>
+        public List<string> ListUintName = new List<string>();
+        /// <summary>
+        /// 鑷畾涔夊崟鍏冪殑鍐呭(涓嶭istUintName涓暟鍖归厤,璇锋棤瑙嗚繖涓彉閲�)
+        /// </summary>
+        public List<string> ListUintContent = new List<string>();
+        /// <summary>
+        /// 鏈�鍚庣紪杈戠殑浜嬩欢(2020.05.26杩藉姞) 1970/12/31 23:59鏍煎紡
+        /// </summary>
+        public string LastEditorTime = "1970/12/31 23:59";
+        /// <summary>
+        /// 鏍囪瘑姝や綇瀹呯殑鏁版嵁鏄惁宸茬粡鍙戦�佽繃妯℃澘鏁版嵁缁欑綉鍏�(鍙拡瀵筎emplateMode=2,璇锋棤瑙嗚繖涓彉閲�)
+        /// </summary>
+        public bool SendTemplateSuccess = false;
+        /// <summary>
+        /// 杩欎釜浣忓畢涓嬫墍鎷ユ湁鐨勭綉鍏砳d(2020.05.26杩藉姞,null浠h〃娌℃湁澶勭悊杩�,璇锋棤瑙嗚繖涓彉閲�)
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public List<string> listGatewayId = null;
+        /// <summary>
+        /// <para>鏍囪瘑浣忓畢鏁版嵁鐨勫尯鍒�(鏂囦欢璇诲彇鏃堕厤缃�,璇锋棤瑙嗚繖涓彉閲�)锛�</para>
+        /// <para>1:鏈韩鑷繁鐨勬暟鎹�(鏂囦欢澶瑰悕瀛椾负浣忓畢id)</para>
+        /// <para>2:鑷繁鎵嬪姩鍒涘缓鐨勪繚瀛樺湪鏈満鐨勫浠�(鏂囦欢澶瑰悕瀛椾互銆怋ackupResidenceData銆戝紑澶�)</para>
+        /// <para>3:姝ゆ暟鎹粠浜戠涓嬭浇鑰屾潵(鏂囦欢澶瑰悕瀛椾互銆怐ownLoadResidenceData銆戝紑澶�)</para>
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public int HouseDataDiv = 1;
+        /// <summary>
+        /// 褰撳墠浣忓畢鐨勫湪绾跨姸鎬� -1:铏氭嫙 0:绂荤嚎 1:鏈湴 2:杩滅▼ 3:璇诲彇涓�(璇锋棤瑙嗚繖涓彉閲�)
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public string NowHomeOnlineStatu = "3";
+        /// <summary>
+        /// 褰撳墠瀛樻斁浣忓畢鏁版嵁鐨勬枃浠跺す鍚嶅瓧(姝ゅ彉閲忔槸缁欐湰鏈哄浠�,鎴栬�呬簯绔笅杞藉浠戒娇鐢ㄧ殑,璇锋棤瑙嗚繖涓彉閲�)
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public string SaveDirctoryName = string.Empty;
 
         #endregion
 
@@ -98,6 +150,8 @@
         /// <param name="autoBackup">鏄惁澶囦唤</param>
         public void Save(bool autoBackup = true)
         {
+            //淇敼鏃堕棿
+            this.LastEditorTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm");
             var path = System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, Config.Instance.Guid, Id);
             //濡傛灉娌℃湁瀛樺湪浣忓畢鐩綍锛屽厛鍒涘缓
             if (!System.IO.Directory.Exists(path))
diff --git a/ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs b/ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs
index d30d6cd..2fe6c56 100755
--- a/ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs
+++ b/ZigbeeApp/Shared/Phone/Category/CategoryMainForm.cs
@@ -78,6 +78,8 @@
             this.AddNormalDeviceReportEvent();
             //娣诲姞浼犳劅鍣ㄧ姸鎬佷笂鎶ヤ簨浠�
             this.AddSensorDeviceReportEvent();
+            //寮�鍚紶鎰熷櫒鐘舵�佽繕鍘熺殑绾跨▼
+            this.StartRecoverSenorStatuThread();
         }
 
         /// <summary>
@@ -460,6 +462,7 @@
         {
             //鍏堟竻绌�
             listView.RemoveAll();
+            this.dicDeviceRowControl = new Dictionary<string, Controls.DeviceRowCommon>();
 
             var listDevice = new List<CommonDevice>();
             for (int i = 0; i < rowInfo.listDeviceKeys.Count; i++)
@@ -888,6 +891,44 @@
 
         #endregion
 
+        #region 鈻� 浼犳劅鍣ㄧ姸鎬佽繕鍘焈____________________
+
+        /// <summary>
+        /// 寮�鍚紶鎰熷櫒鐘舵�佽繕鍘熺殑绾跨▼
+        /// </summary>
+        private void StartRecoverSenorStatuThread()
+        {
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                while (this.Parent != null)
+                {
+                    try
+                    {
+                        var dicControl = this.dicDeviceRowControl;
+                        foreach (var contr in dicControl.Values)
+                        {
+                            //濡傛灉鏄紶鎰熷櫒,鍒欏埛鏂扮姸鎬�
+                            if (contr.device.Type == DeviceType.IASZone && contr.Parent != null
+                              && ((IASZone)contr.device).iASInfo == null)
+                            {
+                                HdlThreadLogic.Current.RunMain(() =>
+                                {
+                                    //璁惧鐘舵�佸繀椤诲埛鏂�
+                                    string statuText = HdlDeviceOtherLogic.Current.GetDeviceStatu(contr.device);
+                                    contr.SetDeviceStatuText(statuText);
+
+                                }, ShowErrorMode.NO);
+                            }
+                        }
+                        System.Threading.Thread.Sleep(8000);
+                    }
+                    catch { System.Threading.Thread.Sleep(3000); }
+                }
+            });
+        }
+
+        #endregion
+
         #region 鈻� 鏁村悎璁惧___________________________
 
         /// <summary>
diff --git a/ZigbeeApp/Shared/Phone/Device/Logic/AddScenePage.cs b/ZigbeeApp/Shared/Phone/Device/Logic/AddScenePage.cs
index 3b5ffb5..746574f 100755
--- a/ZigbeeApp/Shared/Phone/Device/Logic/AddScenePage.cs
+++ b/ZigbeeApp/Shared/Phone/Device/Logic/AddScenePage.cs
@@ -21,14 +21,14 @@
         public HorizontalScrolViewLayout roomhorizontalScrol = new HorizontalScrolViewLayout
         {
             Width = Application.GetRealWidth(1080 - 58),
-            Height = Application.GetRealHeight(200),
+            Height = Application.GetRealHeight(204),
             Y = Application.GetRealHeight(184),
             X = Application.GetRealWidth(58),
         };
         public VerticalScrolViewLayout middle = new VerticalScrolViewLayout
         {
             Width = Application.GetRealWidth(1080),
-            Height = Application.GetRealHeight(Method.H - 260 - 200 - 184),
+            Height = Application.GetRealHeight(Method.H - 260 - 204 - 184),
             BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor,
         };
 
@@ -228,49 +228,31 @@
             for (int i = 0; i < RoomList.Count; i++)
             {
                 var room = RoomList[i];
-                var fra = new FrameLayout
-                {
-                    Height = Application.GetRealHeight(200),
-                    Width = Application.GetRealWidth(255),
-                };
-                roomhorizontalScrol.AddChidren(fra);
 
-                var roombjBtn = new Button
-                {
-                    Height = Application.GetRealHeight(158),
-                    Width = Application.GetRealWidth(255),
-                    UnSelectedImagePath = "ZigeeLogic/iconBackgroundColor.png",
-                    SelectedImagePath = "ZigeeLogic/iconSelectedBackgroundColor.png",
-                    Y = Application.GetRealHeight(21),
-                };
-                fra.AddChidren(roombjBtn);
-
-                var roomnameBtn = new Button
-                {
-
-                    Height = Application.GetRealHeight(152 - 26 - 20),
-                    Width = Application.GetRealWidth(255 - 20 - 50),
-                    Text = room.Name,
-                    TextColor = ZigbeeColor.Current.LogicBtnCancelColor,
-                    SelectedTextColor = ZigbeeColor.Current.LogicBlankBackgroundColor,
-                    Y = Application.GetRealHeight(21 + 13 + 10),
-                    X = Application.GetRealWidth(10 + 25),
-
-                };
-                fra.AddChidren(roomnameBtn);
+                LogicView.RoomClickView roomClickView = new LogicView.RoomClickView();
+                roomClickView.Show(roomhorizontalScrol);
+                roomClickView.roomnameBtn.Text =room.Name;
 
                 if (i == 0)
                 {
-                    roombjButton.IsSelected = false;
-                    roombjButton = roombjBtn;
-                    roombjBtn.IsSelected = true;
 
+                    roombjButton.IsSelected = false;
+                    roomClickView.roombjBtn.Height = Application.GetRealHeight(135);
+                    roomClickView.roombjBtn.Width = Application.GetRealWidth(245);
+                    roomClickView.roombjBtn.Y = Application.GetRealHeight(40);
+                    roomClickView.roombjBtn.X = Application.GetRealWidth(0);
+                    roombjButton = roomClickView.roombjBtn;
+                    roomClickView.roombjBtn.IsSelected = true;
                     roomTextButton.IsSelected = false;
-                    roomTextButton = roomnameBtn;
-                    roomnameBtn.IsSelected = true;
+                    roomClickView.roomnameBtn.Width = Application.GetRealWidth(245 - 60 * 2);
+                    roomClickView.roomnameBtn.X = Application.GetRealWidth(60);
+                    roomTextButton = roomClickView.roomnameBtn;
+                    roomClickView.roomnameBtn.IsSelected = true;
+
                     SceneView(room.ListSceneId);
 
                 }
+
 
                 EventHandler<MouseEventArgs> roomclick = (sender, e) =>
                 {
@@ -279,17 +261,31 @@
                     clickbutton = null;
                     clickbutton = new Button();
 
+                    roombjButton.Height = Application.GetRealHeight(72);
+                    roombjButton.Width = Application.GetRealWidth(170);
+                    roombjButton.Y = Application.GetRealHeight(60);
+                    roombjButton.X = Application.GetRealWidth(26);
                     roombjButton.IsSelected = false;
-                    roombjButton = roombjBtn;
-                    roombjBtn.IsSelected = true;
 
+                    roomClickView.roombjBtn.Height = Application.GetRealHeight(135);
+                    roomClickView.roombjBtn.Width = Application.GetRealWidth(245);
+                    roomClickView.roombjBtn.Y = Application.GetRealHeight(40);
+                    roomClickView.roombjBtn.X = Application.GetRealWidth(0);
+                    roombjButton = roomClickView.roombjBtn;
+                    roomClickView.roombjBtn.IsSelected = true;
+
+                    roomTextButton.Width = Application.GetRealWidth(125);
+                    roomTextButton.X = Application.GetRealWidth(26 + 22);
                     roomTextButton.IsSelected = false;
-                    roomTextButton = roomnameBtn;
-                    roomnameBtn.IsSelected = true;
+                    roomClickView.roomnameBtn.Width = Application.GetRealWidth(245 - 60 * 2);
+                    roomClickView.roomnameBtn.X = Application.GetRealWidth(60);
+                    roomTextButton = roomClickView.roomnameBtn;
+                    roomClickView.roomnameBtn.IsSelected = true;
+
                     SceneView(room.ListSceneId);
                 };
-                roomnameBtn.MouseUpEventHandler += roomclick;
-                roombjBtn.MouseUpEventHandler += roomclick;
+                roomClickView.roomnameBtn.MouseUpEventHandler += roomclick;
+                roomClickView.roombjBtn.MouseUpEventHandler += roomclick;
 
             }
         }
diff --git a/ZigbeeApp/Shared/Phone/Device/Logic/CurrentDeviceState.cs b/ZigbeeApp/Shared/Phone/Device/Logic/CurrentDeviceState.cs
index 426b615..9412a75 100755
--- a/ZigbeeApp/Shared/Phone/Device/Logic/CurrentDeviceState.cs
+++ b/ZigbeeApp/Shared/Phone/Device/Logic/CurrentDeviceState.cs
@@ -22,7 +22,7 @@
             completeView.Btntitle.Text = LocalDevice.Current.GetDeviceEpointName(common);
             EventHandler<MouseEventArgs> clickcancel = (sender, e) =>
             {
-                if (!edit)
+                if (edit)
                 {
                     UserView.HomePage.Instance.ScrollEnabled = true;
                 }
@@ -323,8 +323,9 @@
                             closeView.titleBtn.TextColor = ZigbeeColor.Current.LogicBtnNotSelectedColor;
                             openView.selectedIconBtn.Visible = true;
                             closeView.selectedIconBtn.Visible = false;
-                            if (iASZonedevice.IasDeviceType == 13||iASZonedevice.IasDeviceType == 541)
+                            if (iASZonedevice.IasDeviceType == 13)
                             {
+                                
                                 closeView.selectedIconBtn.Visible = true;
                             }
                             Send.dictionary(deviceConditionsInfo, "Range", "5");
@@ -355,13 +356,74 @@
                         {
                             case 13:
                                 {
-                                    openView.titleBtn.TextID = MyInternationalizationString.someone;
-                                    closeView.titleBtn.TextID = MyInternationalizationString.unattendedtime1;
-                                    closeView.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor;
-                                    closeView.selectedIconBtn.UnSelectedImagePath = "ZigeeLogic/next.png";
-                                    closeView.selectedIconBtn.Visible = true;
-                                    completeView.Show(2).AddChidren(openView.Show());
-                                    completeView.Show(2).AddChidren(closeView.Show());
+
+                                    if (common.ModelIdentifier == "MSPIRB-ZB.10")
+                                    {
+                                        int _height = 3;
+                                        if (edit)
+                                        {
+                                            _height = 2;
+                                        }
+                                        var view = completeView.Show(_height);
+                                        openView.titleBtn.TextID = MyInternationalizationString.someone;
+                                        closeView.titleBtn.TextID = MyInternationalizationString.unattendedtime1;
+                                        closeView.selectedIconBtn.UnSelectedImagePath = "ZigeeLogic/next.png";
+                                        closeView.selectedIconBtn.Visible = true;
+                                        view.AddChidren(openView.Show());
+                                        view.AddChidren(closeView.Show());
+
+                                        takebackView.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor;
+                                        takebackView.selectedIconBtn.Visible = true;
+                                        takebackView.titleBtn.TextID = MyInternationalizationString.ambientLight;
+                                        takebackView.selectedIconBtn.UnSelectedImagePath = "ZigeeLogic/next.png";
+                                        if (edit)
+                                        {
+
+                                            if (devices["Cluster_ID"] == "1024")
+                                            {
+                                                flMain.RemoveFromParent();
+                                                var illumination = new Illumination();
+                                                UserView.HomePage.Instance.AddChidren(illumination);
+                                                UserView.HomePage.Instance.PageIndex += 1;
+                                                illumination.Show(common, takebackView.titleBtn.Text, int.Parse(devices["AttriButeData1"]), true);
+                                            }
+                                            else
+                                            {
+                                                closeView.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor;
+                                            }
+                                        }
+                                        else
+                                        {
+                                            view.AddChidren(takebackView.Show());
+
+                                        }
+
+
+                                        takebackView.clickviewBtn.MouseUpEventHandler += (sender, e) =>
+                                        {
+                                            SelectedDeviceStatus = "";
+                                            openView.titleBtn.TextColor = ZigbeeColor.Current.LogicBtnNotSelectedColor;
+                                            openView.selectedIconBtn.Visible = false;
+                                            var illumination = new Illumination();
+                                            UserView.HomePage.Instance.AddChidren(illumination);
+                                            UserView.HomePage.Instance.PageIndex += 1;
+                                            illumination.Show(common, takebackView.titleBtn.Text, 0, false);
+
+                                        };
+
+                                    }
+                                    else
+                                    {
+
+                                        openView.titleBtn.TextID = MyInternationalizationString.someone;
+                                        closeView.titleBtn.TextID = MyInternationalizationString.unattendedtime1;
+                                        closeView.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor;
+                                        closeView.selectedIconBtn.UnSelectedImagePath = "ZigeeLogic/next.png";
+                                        closeView.selectedIconBtn.Visible = true;
+                                        completeView.Show(2).AddChidren(openView.Show());
+                                        completeView.Show(2).AddChidren(closeView.Show());
+
+                                    }
                                 }
                                 break;
                             case 21:
@@ -435,61 +497,6 @@
                                     completeView.Show(1).AddChidren(openView.Show());
                                 }
                                 break;
-                            case 541:
-                                {
-                                    int _height = 3;
-                                    if (edit)
-                                    {
-                                        _height = 2;
-                                    }
-                                    var view = completeView.Show(_height);
-                                    openView.titleBtn.TextID = MyInternationalizationString.someone;
-                                    closeView.titleBtn.TextID = MyInternationalizationString.unattendedtime1;
-                                    closeView.selectedIconBtn.UnSelectedImagePath = "ZigeeLogic/next.png";
-                                    closeView.selectedIconBtn.Visible = true;
-                                    view.AddChidren(openView.Show());
-                                    view.AddChidren(closeView.Show());
-
-                                    takebackView.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor;
-                                    takebackView.selectedIconBtn.Visible = true;
-                                    takebackView.titleBtn.TextID = MyInternationalizationString.ambientLight;
-                                    takebackView.selectedIconBtn.UnSelectedImagePath = "ZigeeLogic/next.png";
-                                    if (edit)
-                                    {
-
-                                        if (devices["Cluster_ID"] == "1024")
-                                        {
-                                            flMain.RemoveFromParent();
-                                            var illumination = new Illumination();
-                                            UserView.HomePage.Instance.AddChidren(illumination);
-                                            UserView.HomePage.Instance.PageIndex += 1;
-                                            illumination.Show(common, takebackView.titleBtn.Text, int.Parse(devices["AttriButeData1"]), true);
-                                        }
-                                        else
-                                        {
-                                            closeView.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor;
-                                        }
-                                    }
-                                    else
-                                    {
-                                        view.AddChidren(takebackView.Show());
-
-                                    }
-
-
-                                    takebackView.clickviewBtn.MouseUpEventHandler += (sender, e) =>
-                                    {
-                                        SelectedDeviceStatus = "";
-                                        openView.titleBtn.TextColor = ZigbeeColor.Current.LogicBtnNotSelectedColor;
-                                        openView.selectedIconBtn.Visible = false;
-                                        var illumination = new Illumination();
-                                        UserView.HomePage.Instance.AddChidren(illumination);
-                                        UserView.HomePage.Instance.PageIndex += 1;
-                                        illumination.Show(common,takebackView.titleBtn.Text, 0, false);
-
-                                    };
-                                }
-                                break;
                             default:
                                 {
                                     openView.titleBtn.TextID = MyInternationalizationString.callthepolice;
@@ -544,6 +551,7 @@
 
                         completeView.Show(l).AddChidren(openView.Show());
                         openView.titleBtn.Text = LocalDevice.Current.GetDeviceEpointName(common);
+                        //openView.titleBtn.Text =Language.StringByID(MyInternationalizationString.OnOffSwitch) + common.DeviceEpoint.ToString();
                         openView.lineBtn.BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor;
                         openView.clickviewBtn.MouseUpEventHandler += (sender, e) =>
                         {
diff --git a/ZigbeeApp/Shared/Phone/Device/Logic/LogicDveiceStatus.cs b/ZigbeeApp/Shared/Phone/Device/Logic/LogicDveiceStatus.cs
index ebc0789..f9b736b 100755
--- a/ZigbeeApp/Shared/Phone/Device/Logic/LogicDveiceStatus.cs
+++ b/ZigbeeApp/Shared/Phone/Device/Logic/LogicDveiceStatus.cs
@@ -177,33 +177,40 @@
                                             {
                                                 case 13:
                                                     {
-                                                        if (conditions.ContainsKey("IgnoreTime"))
+                                                        if (conditions["Cluster_ID"] == "1024")
                                                         {
-                                                            int minute = int.Parse(conditions["IgnoreTime"]) / 60;
-                                                            int second = int.Parse(conditions["IgnoreTime"]) % 60;
-                                                            if (minute != 0 && second != 0)
-                                                            {
-                                                                state = minute.ToString() + Language.StringByID(MyInternationalizationString.minute) + second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.unattendedtime1);
-
-                                                            }
-                                                            else
-                                                            {
-                                                                if (minute == 0 && second != 0)
-                                                                {
-                                                                    state = second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.unattendedtime1);
-
-                                                                }
-                                                                if (minute != 0 && second == 0)
-                                                                {
-                                                                    state = minute.ToString() + Language.StringByID(MyInternationalizationString.Minute) + Language.StringByID(MyInternationalizationString.unattendedtime1);
-
-                                                                }
-
-                                                            }
+                                                            state = Language.StringByID(MyInternationalizationString.ambientLight) + "<" + conditions["AttriButeData1"] + "lux" + Language.StringByID(MyInternationalizationString.hour1);
                                                         }
                                                         else
                                                         {
-                                                            state = Language.StringByID(MyInternationalizationString.someone);
+                                                            if (conditions.ContainsKey("IgnoreTime"))
+                                                            {
+                                                                int minute = int.Parse(conditions["IgnoreTime"]) / 60;
+                                                                int second = int.Parse(conditions["IgnoreTime"]) % 60;
+                                                                if (minute != 0 && second != 0)
+                                                                {
+                                                                    state = minute.ToString() + Language.StringByID(MyInternationalizationString.minute) + second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.unattendedtime1);
+
+                                                                }
+                                                                else
+                                                                {
+                                                                    if (minute == 0 && second != 0)
+                                                                    {
+                                                                        state = second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.unattendedtime1);
+
+                                                                    }
+                                                                    if (minute != 0 && second == 0)
+                                                                    {
+                                                                        state = minute.ToString() + Language.StringByID(MyInternationalizationString.Minute) + Language.StringByID(MyInternationalizationString.unattendedtime1);
+
+                                                                    }
+
+                                                                }
+                                                            }
+                                                            else
+                                                            {
+                                                                state = Language.StringByID(MyInternationalizationString.someone);
+                                                            }
                                                         }
 
                                                     }
@@ -291,44 +298,7 @@
 
                                                     }
                                                     break;
-                                                case 541:
-                                                    {
-                                                        if (conditions["Cluster_ID"] == "1024") {
-                                                            state = Language.StringByID(MyInternationalizationString.ambientLight)+"<"+conditions["AttriButeData1"]+"lux"+ Language.StringByID(MyInternationalizationString.hour1);
-                                                        }
-                                                        else
-                                                        {
-                                                            if (conditions.ContainsKey("IgnoreTime"))
-                                                            {
-                                                                int minute = int.Parse(conditions["IgnoreTime"]) / 60;
-                                                                int second = int.Parse(conditions["IgnoreTime"]) % 60;
-                                                                if (minute != 0 && second != 0)
-                                                                {
-                                                                    state = minute.ToString() + Language.StringByID(MyInternationalizationString.minute) + second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.unattendedtime1);
-
-                                                                }
-                                                                else
-                                                                {
-                                                                    if (minute == 0 && second != 0)
-                                                                    {
-                                                                        state = second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.unattendedtime1);
-
-                                                                    }
-                                                                    if (minute != 0 && second == 0)
-                                                                    {
-                                                                        state = minute.ToString() + Language.StringByID(MyInternationalizationString.Minute) + Language.StringByID(MyInternationalizationString.unattendedtime1);
-
-                                                                    }
-
-                                                                }
-                                                            }
-                                                            else
-                                                            {
-                                                                state = Language.StringByID(MyInternationalizationString.someone);
-                                                            }
-                                                        }
-                                                    }
-                                                    break;
+                                               
                                                 default:
                                                     {
                                                         if (intvalue == "1")
diff --git a/ZigbeeApp/Shared/Phone/Device/Logic/LogicIfon.cs b/ZigbeeApp/Shared/Phone/Device/Logic/LogicIfon.cs
index fd74126..9725229 100755
--- a/ZigbeeApp/Shared/Phone/Device/Logic/LogicIfon.cs
+++ b/ZigbeeApp/Shared/Phone/Device/Logic/LogicIfon.cs
@@ -44,7 +44,7 @@
                         else if (common.Type == DeviceType.IASZone)
                         {
                             var iASZonedevice = common as IASZone;
-                            if (iASZonedevice.IasDeviceType == 541)
+                            if (iASZonedevice.ModelIdentifier == "MSPIRB-ZB.10")
                             {//鐞冨舰绉诲姩浼犳劅鍣�
                                 if (Common.Logic.CurrentLogic.Conditions[i]["Cluster_ID"] == objecttype["Cluster_ID"])
                                 {
diff --git a/ZigbeeApp/Shared/Phone/Device/Logic/LogicView/RoomClickView.cs b/ZigbeeApp/Shared/Phone/Device/Logic/LogicView/RoomClickView.cs
new file mode 100755
index 0000000..e6adce3
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/Device/Logic/LogicView/RoomClickView.cs
@@ -0,0 +1,51 @@
+锘縰sing System;
+namespace Shared.Phone.Device.Logic.LogicView
+{
+    public class RoomClickView
+    {
+        public RoomClickView()
+        {
+
+        }
+        /// <summary>
+        /// 鐖舵帶浠�
+        /// </summary>
+        public FrameLayout fra = new FrameLayout
+        {
+            Height = Application.GetRealHeight(204),
+            Width = Application.GetRealWidth(245),
+        };
+        /// <summary>
+        /// 鑳屾櫙鍥剧墖鎺т欢
+        /// </summary>
+        public Button roombjBtn = new Button
+        {
+            Height = Application.GetRealHeight(72),
+            Width = Application.GetRealWidth(170),
+            UnSelectedImagePath = "ZigeeLogic/iconBackgroundColor1.png",
+            SelectedImagePath = "ZigeeLogic/iconSelectedBackgroundColor1.png",
+            Y = Application.GetRealHeight(60),
+            X = Application.GetRealWidth(26),
+        };
+        /// <summary>
+        /// 鎴块棿鍚嶅瓧鎺т欢
+        /// </summary>
+        public Button roomnameBtn = new Button
+        {
+            Height = Application.GetRealHeight(49),
+            Width = Application.GetRealWidth(125),
+            TextColor = Common.ZigbeeColor.Current.LogicBtnCancelColor,
+            SelectedTextColor = Common.ZigbeeColor.Current.LogicBlankBackgroundColor,
+            Y = Application.GetRealHeight(72),
+            X = Application.GetRealWidth(26 + 22),
+
+        };
+        public void Show(HorizontalScrolViewLayout HorizontalScrolViewLayout)
+        {
+            HorizontalScrolViewLayout.AddChidren(fra);
+            fra.AddChidren(roombjBtn);
+            fra.AddChidren(roomnameBtn);
+        }
+
+    }
+}
diff --git a/ZigbeeApp/Shared/Phone/Device/Logic/Method.cs b/ZigbeeApp/Shared/Phone/Device/Logic/Method.cs
index 6fba6f9..7f76b73 100755
--- a/ZigbeeApp/Shared/Phone/Device/Logic/Method.cs
+++ b/ZigbeeApp/Shared/Phone/Device/Logic/Method.cs
@@ -46,7 +46,7 @@
                 {
                     ///鍖哄垎鍑鸿緭鍏ユ潯浠跺拰杈撳嚭鐩爣璁惧
                     var listdevicetype = GetDevice(type);
-                    var listdevice = GetDeviceUIList(listAllRoom[i], listdevicetype);
+                    var listdevice = GetDeviceUIList(listAllRoom[i], listdevicetype, type);
                     if (listdevice.Count == 0)
                     {
                         ///杩囨护鎺夋病鏈夎澶囩殑鎴块棿
@@ -68,8 +68,9 @@
         /// </summary>
         /// <param name="room">褰撳墠鎴块棿</param>
         /// <param name="deviceTypelist">璁惧绫诲瀷</param>
+        ///  /// <param name="type">閫昏緫绫诲瀷</param>
         /// <returns></returns>
-        public static List<CommonDevice> GetDeviceUIList(Common.Room room, List<DeviceType> deviceTypelist)
+        public static List<CommonDevice> GetDeviceUIList(Common.Room room, List<DeviceType> deviceTypelist,string type)
         {
             var deviceUIlist = new List<CommonDevice>();
             foreach (var deviceKey in room.ListDevice)
@@ -92,6 +93,22 @@
                         //鏆傛椂涓嶆敮鎸丼-one闂ㄩ攣;
                         //杩囨护鎺変笉鏀寔S-one闂ㄩ攣璁惧;
                         continue;
+                    }
+                }
+                if (type == "condition_mould")
+                {
+                    if (device.Type == DeviceType.IASZone)
+                    {
+                        if (device.IasDeviceType != 13)
+                        {//鑷姩鍖栨ā鏉垮彧鏀寔绾㈠浼犳劅鍣�
+                            continue;
+                        }
+                        if (device.ModelIdentifier == "MSPIRB-ZB.10")
+                        {
+                            //鑷姩鍖栨ā鏉夸笉鏀寔鍏夌収搴�
+                            continue;
+                        }
+
                     }
                 }
                 deviceUIlist.Add(device);
@@ -261,8 +278,17 @@
                         {
                             break;
                         }
-                        patm = $"ZigeeLogic/sensor{iASZonedevice.IasDeviceType}.png";
-                        selectedpatm = $"ZigeeLogic/selectedsensor{iASZonedevice.IasDeviceType}.png";
+
+                        if (device.ModelIdentifier == "MSPIRB-ZB.10")
+                        {
+                            patm = $"ZigeeLogic/sensor541.png";
+                            selectedpatm = $"ZigeeLogic/selectedsensor541.png";
+                        }
+                        else
+                        {
+                            patm = $"ZigeeLogic/sensor{iASZonedevice.IasDeviceType}.png";
+                            selectedpatm = $"ZigeeLogic/selectedsensor{iASZonedevice.IasDeviceType}.png";
+                        }
                     }
                     break;
                 case DeviceType.TemperatureSensor:
diff --git a/ZigbeeApp/Shared/Phone/Device/Logic/RoomAndDeviceView.cs b/ZigbeeApp/Shared/Phone/Device/Logic/RoomAndDeviceView.cs
index 45f0f72..0bacf91 100755
--- a/ZigbeeApp/Shared/Phone/Device/Logic/RoomAndDeviceView.cs
+++ b/ZigbeeApp/Shared/Phone/Device/Logic/RoomAndDeviceView.cs
@@ -12,9 +12,22 @@
         {
             Tag = "Logic";
         }
+        /// <summary>
+        /// 璁板綍鐐瑰嚮鎴块棿
+        /// </summary>
         Button roombjButton = new Button();
+        /// <summary>
+        /// 璁板綍鐐瑰嚮鎴块棿鍚嶇О
+        /// </summary>
         Button roomTextButton = new Button();
-        Button devicetypeButton = new Button();
+        /// <summary>
+        /// 璁板綍鐐瑰嚮璁惧
+        /// </summary>
+        Button deviceTypeBjButton = new Button();
+        /// <summary>
+        /// 璁板綍鐐瑰嚮璁惧绫诲瀷
+        /// </summary>
+        Button deviceTypeTextButton = new Button();
         FrameLayout clickframeLayout = new FrameLayout();
         Button clickbutton = new Button();
         Button clicktextcolcrbutton = new Button();
@@ -27,21 +40,33 @@
         /// </summary>
         public HorizontalScrolViewLayout roomhorizontalScrol = new HorizontalScrolViewLayout
         {
-            Width = Application.GetRealWidth(1080 - 58),
-            Height = Application.GetRealHeight(200),
-            X = Application.GetRealWidth(58),
+            Width = Application.GetRealWidth(1080 - 29),
+            Height = Application.GetRealHeight(204),
+            X = Application.GetRealWidth(29),
             Y = Application.GetRealHeight(184),
+        };
+        /// <summary>
+        /// 鍦嗚17
+        /// </summary>
+        public HorizontalScrolViewLayout devicetypehorizontalScrol1 = new HorizontalScrolViewLayout
+        {
+            Width = Application.GetRealWidth(1080 - 52),
+            Height = Application.GetRealHeight(50),
+            Y = Application.GetRealHeight(184 + 204),
+            BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,
+            X = Application.GetRealWidth(52),
+
         };
         /// <summary>
         /// 璁惧绫诲瀷婊戝姩鐨勬帶浠�
         /// </summary>
         public HorizontalScrolViewLayout devicetypehorizontalScrol = new HorizontalScrolViewLayout
         {
-            Width = Application.GetRealWidth(1080 - 58),
+            Width = Application.GetRealWidth(1080 - 52),
             Height = Application.GetRealHeight(280),
-            Y = Application.GetRealHeight(184 + 200),
+            Y = Application.GetRealHeight(184 + 204),
             BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,
-            X = Application.GetRealWidth(58),
+            X = Application.GetRealWidth(52),
             // Radius = (uint)Application.GetRealHeight(50),
 
         };
@@ -51,8 +76,8 @@
         public VerticalScrolViewLayout middle = new VerticalScrolViewLayout
         {
             X = Application.GetRealWidth(58),
-            Y = Application.GetRealHeight(184 + 200 + 280 + 40),
-            Height = Application.GetRealHeight(Method.H - 40 - 184 - 280 - 200),
+            Y = Application.GetRealHeight(184 + 204 + 280 + 40),
+            Height = Application.GetRealHeight(Method.H - 40 - 184 - 280 - 204),
             BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,
         };
 
@@ -88,15 +113,18 @@
             if (roomlists.Count == 0)
             {
                 //杩斿洖娌℃湁鎴块棿闅愯棌涓嬮潰鏁村潡;
+                devicetypehorizontalScrol1.Height = 0;
                 devicetypehorizontalScrol.Height = 0;
                 middle.Height = 0;
             }
             /// 璁惧绫诲瀷鍒楄〃
             var deviceTypeList = Method.GetDevice(IfType);
             this.AddChidren(roomhorizontalScrol);
+            this.AddChidren(devicetypehorizontalScrol1);
             this.AddChidren(devicetypehorizontalScrol);
             this.AddChidren(middle);
-            devicetypehorizontalScrol.SetCornerWithSameRadius(Application.GetRealHeight(50), HDLUtils.RectCornerBottomLeft);
+            devicetypehorizontalScrol1.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft);
+            devicetypehorizontalScrol.SetCornerWithSameRadius(Application.GetRealHeight(50), HDLUtils.RectCornerBottomLeft|HDLUtils.RectCornerTopLeft);
             middle.SetCornerWithSameRadius(Application.GetRealHeight(50), HDLUtils.RectCornerTopLeft);
             ///妤煎眰鐐瑰嚮浜嬩欢
             view.foolrclickBtn.MouseUpEventHandler += (sender, e) =>
@@ -187,11 +215,13 @@
                           var list = Method.GetRoomList(IfType, btnfoolrname.Tag.ToString());
                           if (list.Count == 0)
                           {
+                              devicetypehorizontalScrol1.Height = 0;
                               devicetypehorizontalScrol.Height = 0;
                               middle.Height = 0;
                           }
                           else
                           {
+                              devicetypehorizontalScrol1.Height = 50;
                               devicetypehorizontalScrol.Height = Application.GetRealHeight(280);
                               middle.Height = Application.GetRealHeight(1920 - 40 - 184 - 280 - 200);
                           }
@@ -214,70 +244,64 @@
             {
                 var room = roomlist[i];
 
-                var fra = new FrameLayout
-                {
-                    Height = Application.GetRealHeight(200),
-                    Width = Application.GetRealWidth(255),
-                };
-                roomhorizontalScrol.AddChidren(fra);
-
-                var roombjBtn = new Button
-                {
-                    Height = Application.GetRealHeight(158),
-                    Width = Application.GetRealWidth(255),
-                    UnSelectedImagePath = "ZigeeLogic/iconBackgroundColor.png",
-                    SelectedImagePath = "ZigeeLogic/iconSelectedBackgroundColor.png",
-                    Y = Application.GetRealHeight(21),
-                };
-                fra.AddChidren(roombjBtn);
-
-                var roomnameBtn = new Button
-                {
-
-                    Height = Application.GetRealHeight(152 - 26 - 20),
-                    Width = Application.GetRealWidth(255 - 20 - 50),
-                    Text = room.Name,
-                    TextColor = ZigbeeColor.Current.LogicBtnCancelColor,
-                    SelectedTextColor = ZigbeeColor.Current.LogicBlankBackgroundColor,
-                    Y = Application.GetRealHeight(21 + 13 + 10),
-                    X = Application.GetRealWidth(10 + 25),
-
-                };
-                fra.AddChidren(roomnameBtn);
+                LogicView.RoomClickView roomClickView = new LogicView.RoomClickView();
+                roomClickView.Show(roomhorizontalScrol);
+                roomClickView.roomnameBtn.Text = room.Name;
 
                 if (i == 0)//榛樿閫変腑绗竴涓埧闂�
                 {
+
                     roombjButton.IsSelected = false;
-                    roombjButton = roombjBtn;
-                    roombjBtn.IsSelected = true;
-
+                    roomClickView.roombjBtn.Height = Application.GetRealHeight(135);
+                    roomClickView.roombjBtn.Width = Application.GetRealWidth(245);
+                    roomClickView.roombjBtn.Y = Application.GetRealHeight(40);
+                    roomClickView.roombjBtn.X = Application.GetRealWidth(0);
+                    roombjButton = roomClickView.roombjBtn;
+                    roomClickView.roombjBtn.IsSelected = true;
                     roomTextButton.IsSelected = false;
-                    roomTextButton = roomnameBtn;
-                    roomnameBtn.IsSelected = true;
+                    roomClickView.roomnameBtn.Width = Application.GetRealWidth(245 - 60 * 2);
+                    roomClickView.roomnameBtn.X = Application.GetRealWidth(60);
+                    roomTextButton = roomClickView.roomnameBtn;
+                    roomClickView.roomnameBtn.IsSelected = true;
 
-                    roombjBtn.IsSelected = true;
-                    roomnameBtn.IsSelected = true;
-
-                    var list = Method.GetDeviceUIList(room, deviceTypeList);
+                    var list = Method.GetDeviceUIList(room, deviceTypeList, IfType);
                     AllDeviceTypeView(list);
                 }
 
                 EventHandler<MouseEventArgs> roomclick = (sender, e) =>
                 {
+                    roombjButton.Height = Application.GetRealHeight(72);
+                    roombjButton.Width = Application.GetRealWidth(170);
+                    roombjButton.Y = Application.GetRealHeight(60);
+                    roombjButton.X = Application.GetRealWidth(26);
                     roombjButton.IsSelected = false;
-                    roombjButton = roombjBtn;
-                    roombjBtn.IsSelected = true;
 
+                    roombjButton.Height = Application.GetRealHeight(72);
+                    roombjButton.Width = Application.GetRealWidth(170);
+                    roombjButton.Y = Application.GetRealHeight(60);
+                    roombjButton.X = Application.GetRealWidth(26);
+                    roombjButton.IsSelected = false;
+
+                    roomClickView.roombjBtn.Height = Application.GetRealHeight(135);
+                    roomClickView.roombjBtn.Width = Application.GetRealWidth(245);
+                    roomClickView.roombjBtn.Y = Application.GetRealHeight(40);
+                    roomClickView.roombjBtn.X = Application.GetRealWidth(0);
+                    roombjButton = roomClickView.roombjBtn;
+                    roomClickView.roombjBtn.IsSelected = true;
+
+                    roomTextButton.Width = Application.GetRealWidth(125);
+                    roomTextButton.X = Application.GetRealWidth(26 + 22);
                     roomTextButton.IsSelected = false;
-                    roomTextButton = roomnameBtn;
-                    roomnameBtn.IsSelected = true;
+                    roomClickView.roomnameBtn.Width = Application.GetRealWidth(245 - 60 * 2);
+                    roomClickView.roomnameBtn.X = Application.GetRealWidth(60);
+                    roomTextButton = roomClickView.roomnameBtn;
+                    roomClickView.roomnameBtn.IsSelected = true;
 
-
-                    var list = Method.GetDeviceUIList(room, deviceTypeList);
+                    var list = Method.GetDeviceUIList(room, deviceTypeList, IfType);
                     AllDeviceTypeView(list);
                 };
-                roomnameBtn.MouseUpEventHandler += roomclick;
-                roombjBtn.MouseUpEventHandler += roomclick;
+                roomClickView.roomnameBtn.MouseUpEventHandler += roomclick;
+                roomClickView.roombjBtn.MouseUpEventHandler += roomclick;
 
             }
         }
@@ -292,30 +316,27 @@
             for (int i = 0; i < devicetypelist.Count; i++)
             {
                 var devicetype = devicetypelist[i];
-                var spaceRowLayout = new FrameLayout();
-                devicetypehorizontalScrol.AddChidren(spaceRowLayout);
+
                 if (i == 0)
                 {
+                    var spaceRowLayout = new FrameLayout();
+                    devicetypehorizontalScrol.AddChidren(spaceRowLayout);
                     spaceRowLayout.Width = Application.GetRealWidth(37);
                 }
-                else
-                {
-                    spaceRowLayout.Width = Application.GetRealWidth(80);
-                }
+               
 
                 var deviceRowLayout = new FrameLayout
                 {
-                    Width = Application.GetRealWidth(156 + 20),
-                    Height = Application.GetRealHeight(280 - 30),
-                    Y = Application.GetRealHeight(30),
+                    Width = Application.GetRealWidth(150+75),
+                    Height = Application.GetRealHeight(173+52),
+                    Y = Application.GetRealHeight(35),
                 };
                 devicetypehorizontalScrol.AddChidren(deviceRowLayout);
 
                 var backgroundColor = new Button
                 {
-                    Width = Application.GetMinRealAverage(156),
-                    Height = Application.GetMinRealAverage(180),
-                    X = Application.GetRealWidth(10),
+                    Width = Application.GetMinRealAverage(150),
+                    Height = Application.GetMinRealAverage(173),
                     UnSelectedImagePath = "ZigeeLogic/deviceunselectedbackgroundcolor.png",
                     SelectedImagePath = "ZigeeLogic/deviceselectedbackgroundcolor.png",
                 };
@@ -326,21 +347,22 @@
                 {
                     Width = Application.GetMinRealAverage(84),
                     Height = Application.GetMinRealAverage(84),
-                    X = Application.GetRealWidth(46),
-                    Y = Application.GetRealHeight(30),
+                    X = Application.GetRealWidth(35),
+                    Y = Application.GetRealHeight(29),
                     UnSelectedImagePath =Method.GetDeviceTypeIcon(devicetype),
                 };
                 deviceRowLayout.AddChidren(devicetypeicon);
 
                 var devicetypename = new Button
                 {
-                    Width = Application.GetRealWidth(176),
-                    Height = Application.GetRealHeight(40),
+                    Width = Application.GetRealWidth(150),
+                    Height = Application.GetRealHeight(52),
                     Text = devicetype,
                     TextAlignment = TextAlignment.Center,
                     Y = backgroundColor.Bottom,
-                    TextColor = ZigbeeColor.Current.LogicAddColor,
                     TextSize = 10,
+                    TextColor =ZigbeeColor.Current.LogicBtnSelectedColor,
+                    SelectedTextColor =ZigbeeColor.Current.LogicAddColor,
                 };
                 deviceRowLayout.AddChidren(devicetypename);
 
@@ -356,13 +378,18 @@
 
                 EventHandler<MouseEventArgs> devicetypeclick = (sender13, e13) =>
                 {
-                    devicetypeButton.IsSelected = false;
-                    devicetypeButton = backgroundColor;
+                    deviceTypeBjButton.IsSelected = false;
+                    deviceTypeBjButton = backgroundColor;
                     backgroundColor.IsSelected = true;
+
+                    deviceTypeTextButton.IsSelected = false;
+                    deviceTypeTextButton = devicetypename;
+                    devicetypename.IsSelected = true;
+
+
                     var list = Method.GetDeviceType(devicetypename.Text);
                     ConditionDeviceView(list, devicelist);
                 };
-                deviceRowLayout.MouseUpEventHandler += devicetypeclick;
                 devicetypename.MouseUpEventHandler += devicetypeclick;
                 devicetypeicon.MouseUpEventHandler += devicetypeclick;
                 backgroundColor.MouseUpEventHandler += devicetypeclick;
@@ -387,13 +414,6 @@
                 if (deviceTypelist.Count != 0 && !deviceTypelist.Contains(common.Type))
                 {
                     continue;
-                }
-                if (IfType == "condition_mould")
-                {
-                    if (common.IasDeviceType != 13)
-                    {//鑷姩鍖栨ā鏉垮彧鏀寔绾㈠浼犳劅鍣�
-                        continue;
-                    }
                 }
                 var deviceFramelayout = new FrameLayout
                 {
diff --git a/ZigbeeApp/Shared/Phone/Device/Logic/Send.cs b/ZigbeeApp/Shared/Phone/Device/Logic/Send.cs
index 7502d06..04d882d 100755
--- a/ZigbeeApp/Shared/Phone/Device/Logic/Send.cs
+++ b/ZigbeeApp/Shared/Phone/Device/Logic/Send.cs
@@ -1361,8 +1361,8 @@
         /// 鍒ゆ柇瀛楀吀鏄惁瀛樺湪鐨勬柟娉�
         /// </summary>
         /// <param name="deviceConditionsInfo"></param>
-        /// <param name="Key"></param>
-        /// <param name="Value"></param>
+        /// <param name="Key">閿�</param>
+        /// <param name="Value">閿��</param>
         public static void dictionary(Dictionary<string, string> deviceConditionsInfo, string Key, string Value)
         {
             if (deviceConditionsInfo.ContainsKey(Key))
@@ -1372,6 +1372,6 @@
             deviceConditionsInfo.Add(Key, Value);
         }
 
-
+      
     }
 }
diff --git a/ZigbeeApp/Shared/Phone/Device/Logic/SkipView.cs b/ZigbeeApp/Shared/Phone/Device/Logic/SkipView.cs
index 0f5a797..deb3564 100755
--- a/ZigbeeApp/Shared/Phone/Device/Logic/SkipView.cs
+++ b/ZigbeeApp/Shared/Phone/Device/Logic/SkipView.cs
@@ -10,6 +10,7 @@
 {
     public class SkipView:FrameLayout
     {
+        
         /// <summary>
         /// 鍏跺畠鐣岄潰璺宠繘鏉ョ殑鍏ュ彛
         /// </summary>
@@ -73,6 +74,19 @@
             //functionSceneAutoBodyView.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor;
             #region   ---鎺ㄨ崘妯℃澘鐨勭粍浠�
             //鎺ㄨ崘妯℃澘鑳屾櫙鎺т欢
+          
+           
+            var bjFrameLayout1 = new FrameLayout
+            {
+                Width = Application.GetRealWidth(1080 - 58),
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,
+                X = Application.GetRealWidth(58),
+                //Radius = (uint)Application.GetRealHeight(50),
+                Y = Application.GetRealHeight(30),
+
+            };
+            functionSceneAutoBodyView.AddChidren(bjFrameLayout1);
             var bjFrameLayout = new FrameLayout
             {
                 Width = Application.GetRealWidth(1080 - 58),
@@ -81,10 +95,10 @@
                 X = Application.GetRealWidth(58),
                 //Radius = (uint)Application.GetRealHeight(50),
                 Y = Application.GetRealHeight(30),
-
             };
             functionSceneAutoBodyView.AddChidren(bjFrameLayout);
-            bjFrameLayout.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft);
+            bjFrameLayout1.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft);
+            bjFrameLayout.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft|HDLUtils.RectCornerBottomLeft);
             //鍥炬爣鎺т欢
             var sigBtn = new Button
             {
@@ -241,7 +255,7 @@
             {
                 if (!Config.Instance.Home.IsVirtually)
                 {//铏氭嫙鐨勪笉鑾峰彇缃戝叧閫昏緫鍒楄〃
-                    //閲嶆柊鍒锋柊logic鍒楄〃
+                 //閲嶆柊鍒锋柊logic鍒楄〃
                     If_once = true;
                     Common.Logic.LogicList.Clear();
                     Read(logicScrolView, no);
@@ -306,6 +320,7 @@
                                     Common.Logic.LogicList.Add(logic);
                                 }
                             }
+
                         }
                     }
                 }
@@ -319,6 +334,7 @@
             CommonPage.Loading.Hide();
         }
         static RowLayout selectedRow = new RowLayout() { Tag = "0" };//璁板綍宸︽粦鐘舵��
+       
         /// <summary>
         /// 鍔犺浇鑷姩鍖栧垪琛ㄧ晫闈�
         /// </summary>
@@ -868,6 +884,8 @@
             return false;
         }
 
+  
+
     }
 }
 
diff --git a/ZigbeeApp/Shared/Phone/Device/VideoIntercom/VideoMachine.cs b/ZigbeeApp/Shared/Phone/Device/VideoIntercom/VideoMachine.cs
index 070ceac..69299ed 100755
--- a/ZigbeeApp/Shared/Phone/Device/VideoIntercom/VideoMachine.cs
+++ b/ZigbeeApp/Shared/Phone/Device/VideoIntercom/VideoMachine.cs
@@ -115,7 +115,7 @@
         /// <summary>
         /// 鍒ゆ柇璐﹀彿鏄惁鏀寔鍙瀵硅
         /// </summary>
-        /// <param name="topFrameLayout"></param>
+        /// <param name="topFrameLayout">鍙瀵硅鍥炬爣鐨勭埗鎺т欢</param>
         public async static void AccountSupportVideo(FrameLayout topFrameLayout)
         {
             var jobject = new JObject();
@@ -166,9 +166,6 @@
                 }
                 catch { }
             }
-
-
-
         }
         /// <summary>
         /// 鑾峰彇鍙瀵硅鍒楄〃
diff --git a/ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceAcDetailCardForm.cs b/ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceAcDetailCardForm.cs
index 098d1b9..b935e42 100755
--- a/ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceAcDetailCardForm.cs
+++ b/ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceAcDetailCardForm.cs
@@ -1052,8 +1052,8 @@
                                         this.listControl[1].IsSelected = false;
                                         this.listControl[2].IsSelected = false;
                                         this.listControl[3].IsSelected = false;
-                                        arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor);
                                     }
+                                    arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor);
                                     //璁剧疆鐘舵�佹枃瀛� 鍏抽棴
                                     this.SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
                                     return;
@@ -1068,8 +1068,8 @@
                                         this.listControl[1].IsSelected = true;
                                         this.listControl[2].IsSelected = true;
                                         this.listControl[3].IsSelected = true;
-                                        arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCArcScaleSeekBarStartColor, ZigbeeColor.Current.GXCArcScaleSeekBarEndColor);
                                     }
+                                    arcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCArcScaleSeekBarStartColor, ZigbeeColor.Current.GXCArcScaleSeekBarEndColor);
                                 }
                                 this.listControl[1].SelectedImagePath = DeviceAcDetailCardMethord.GetModeSelectedImagePathByModeId(deviceAc.currentSystemMode);
                                 this.listControl[1].UnSelectedImagePath = DeviceAcDetailCardMethord.GetModeUnSelectedImagePathByModeId(deviceAc.currentSystemMode);
diff --git a/ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceMiniLightDetailCardForm.cs b/ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceMiniLightDetailCardForm.cs
index 5a87885..3634885 100755
--- a/ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceMiniLightDetailCardForm.cs
+++ b/ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceMiniLightDetailCardForm.cs
@@ -405,7 +405,12 @@
             {
                 HdlThreadLogic.Current.RunMain(() =>
                 {
+                    //鎺ユ敹鍒扮綉鍏冲洖澶�
                     this.btnBuzzerSwitch.CanClick = true;
+                    if (result == true)
+                    {
+                        this.btnBuzzerSwitch.IsSelected = isOpen;
+                    }
                 });
             });
             //鍙戦�佸懡浠�
diff --git a/ZigbeeApp/Shared/Phone/MainPage/HomeMainPageForm.cs b/ZigbeeApp/Shared/Phone/MainPage/HomeMainPageForm.cs
index f28273d..636fc83 100755
--- a/ZigbeeApp/Shared/Phone/MainPage/HomeMainPageForm.cs
+++ b/ZigbeeApp/Shared/Phone/MainPage/HomeMainPageForm.cs
@@ -85,6 +85,8 @@
             this.AddNormalDeviceReportEvent();
             //娣诲姞浼犳劅鍣ㄧ姸鎬佷笂鎶ヤ簨浠�
             this.AddSensorDeviceReportEvent();
+            //寮�鍚紶鎰熷櫒鐘舵�佽繕鍘熺殑绾跨▼
+            this.StartRecoverSenorStatuThread();
         }
 
         /// <summary>
@@ -1163,6 +1165,40 @@
 
         #region 鈻� 浼犳劅鍣ㄧ姸鎬佽繕鍘焈____________________
 
+        /// <summary>
+        /// 寮�鍚紶鎰熷櫒鐘舵�佽繕鍘熺殑绾跨▼
+        /// </summary>
+        private void StartRecoverSenorStatuThread()
+        {
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                while (this.Parent != null)
+                {
+                    try
+                    {
+                        var dicControl = this.dicDeviceCardControl;
+                        foreach (var contr in dicControl.Values)
+                        {
+                            //濡傛灉鏄紶鎰熷櫒,鍒欏埛鏂扮姸鎬�
+                            if (contr.device.Type == DeviceType.IASZone && contr.Parent != null
+                              && ((IASZone)contr.device).iASInfo == null)
+                            {
+                                HdlThreadLogic.Current.RunMain(() =>
+                                {
+                                    //璁惧鐘舵�佸繀椤诲埛鏂�
+                                    string statuText = HdlDeviceOtherLogic.Current.GetDeviceStatu(contr.device);
+                                    contr.SetDeviceStatuText(statuText);
+
+                                }, ShowErrorMode.NO);
+                            }
+                        }
+                        System.Threading.Thread.Sleep(8000);
+                    }
+                    catch { System.Threading.Thread.Sleep(3000); }
+                }
+            });
+        }
+
         #endregion
 
         #region 鈻� 鍒囨崲妤煎眰___________________________
diff --git a/ZigbeeApp/Shared/Phone/SmartSound/Forms/SmartSoundContentForDevice.cs b/ZigbeeApp/Shared/Phone/SmartSound/Forms/SmartSoundContentForDevice.cs
index b2df8fa..304eb74 100755
--- a/ZigbeeApp/Shared/Phone/SmartSound/Forms/SmartSoundContentForDevice.cs
+++ b/ZigbeeApp/Shared/Phone/SmartSound/Forms/SmartSoundContentForDevice.cs
@@ -135,6 +135,13 @@
                 else
                 {
                     tipLayout.Visible = false;
+                }
+
+                if (listView.ChildrenCount > 5)
+                {
+                    TextView textView = new TextView();
+                    textView.Height = Application.GetRealHeight(127 * 3);
+                    listView.AddChidren(textView);
                 }
             }
             catch (Exception ex)
diff --git a/ZigbeeApp/Shared/Phone/TemplateData/TemplateCommonLogic.cs b/ZigbeeApp/Shared/Phone/TemplateData/TemplateCommonLogic.cs
new file mode 100755
index 0000000..4537e58
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/TemplateData/TemplateCommonLogic.cs
@@ -0,0 +1,1846 @@
+锘縰sing Shared.Phone.UserCenter;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ZigBee.Device;
+
+namespace Shared.Phone.TemplateData
+{
+    /// <summary>
+    /// 妯℃澘鐨勫叡閫氶�昏緫绫�
+    /// </summary>
+    public class TemplateCommonLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 妯℃澘鐨勫叡閫氶�昏緫绫�
+        /// </summary>
+        private static TemplateCommonLogic m_Current = null;
+        /// <summary>
+        /// 妯℃澘鐨勫叡閫氶�昏緫绫�
+        /// </summary>
+        public static TemplateCommonLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new TemplateCommonLogic();
+                }
+                return m_Current;
+            }
+        }
+        /// <summary>
+        /// 妯℃澘鏁版嵁
+        /// </summary>
+        public TemplateMemoryData modelData = new TemplateMemoryData();
+        /// <summary>
+        /// 妯℃澘鏂囦欢涓� #start# 鍒� #end# 鐨勫唴瀹�(涓存椂鍙橀噺)
+        /// </summary>
+        private string strTempContentData = string.Empty;
+        /// <summary>
+        /// 鏈湴妯℃澘鏂囦欢鐨勫悕瀛�
+        /// </summary>
+        private const string TemplateFileName = "ModelData_Release.bin";
+
+        #endregion
+
+        #region 鈻� 鍔犺浇鏈湴妯℃澘缂撳瓨___________________
+
+        /// <summary>
+        /// 鍔犺浇鏈湴妯℃澘鏂囦欢缂撳瓨(姝ゆ柟娉曚互鏈湴缂撳瓨涓哄噯,鍒囨崲浣忓畢鏃朵娇鐢�)
+        /// </summary>
+        public void LoadLocalTemplateMemoryData()
+        {
+            this.modelData = new TemplateMemoryData();
+            //淇濆瓨鐨勮矾寰�
+            string saveFile = DirNameResourse.LocalTemplateDirectory;
+
+            //濡傛灉褰撳墠浣忓畢鎷ユ湁閫夋嫨鐨勬ā鏉�
+            if (Common.Config.Instance.Home.SelectTemplate != string.Empty)
+            {
+                string checkFile = System.IO.Path.Combine(saveFile, TemplateFileName);
+                //濡傛灉鏈湴娌℃湁杩欎釜bin鏂囦欢
+                if (System.IO.File.Exists(checkFile) == false)
+                {
+                    //澶嶅埗妯℃澘bin鏂囦欢鍒版湰鍦扮殑妯℃澘鏂囦欢澶归噷
+                    this.CopyTemplateFileToLocalDirectory(Common.Config.Instance.Home.SelectTemplate);
+                }
+            }
+
+            //鑾峰彇杩欎釜璺緞涓嬮潰鍏ㄩ儴鐨勬枃浠�
+            var listFile = HdlFileLogic.Current.GetFileFromDirectory(saveFile);
+
+            //妯℃澘Bin鏂囦欢
+            string templateBinFile = string.Empty;
+            //杩欓噷鏄鍙栦粬涓婁竴娆$紪杈戝畬鎴愪箣鍚庣殑妯℃澘鏁版嵁(涔熷氨鏄紪杈戝埌涓�鍗婁箣鍚�,閫�鍑篈pp,涓嬩竴娆″啀缂栬緫)
+            foreach (var fileName in listFile)
+            {
+                if (fileName == TemplateFileName)
+                {
+                    //妯℃澘Bin鏂囦欢
+                    templateBinFile = fileName;
+                    continue;
+                }
+                if (fileName.StartsWith("Device_") == false)
+                {
+                    //鍙璁惧
+                    continue;
+                }
+                string fileData = HdlFileLogic.Current.ReadFileTextContent(System.IO.Path.Combine(saveFile, fileName));
+                if (fileData == null)
+                {
+                    continue;
+                }
+                string deviceData = string.Empty;
+                ModelDeviceSaveEnum saveDiv = ModelDeviceSaveEnum.A鏈畾涔�;
+                //鏍规嵁鎹㈣绗﹀垏鍒嗘暟鎹枃鏈�
+                string[] arryData = fileData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
+                foreach (string strData in arryData)
+                {
+                    //璁惧鏁版嵁鏍囧織
+                    if (strData.StartsWith("===>") == true)
+                    {
+                        if (deviceData != string.Empty)
+                        {
+                            //鍙嶅簭鍒楀寲璁惧鐨勪繚瀛樻枃浠跺唴瀹�
+                            var tempData = this.DeserializeDeviceDataByDiv(saveDiv, deviceData);
+                            //灏嗚澶囨ā鏉挎暟鎹坊鍔犲叆缂撳瓨
+                            string mainKey = Common.LocalDevice.Current.GetDeviceMainKeys(tempData.DeviceMac, tempData.DeviceEpoint);
+                            this.SetTemplateDeviceDataToMemmory(tempData, deviceData, mainKey, true);
+                        }
+                        //娓呯┖
+                        deviceData = string.Empty;
+                        saveDiv = (ModelDeviceSaveEnum)Convert.ToInt32(strData.Substring(4));
+                        continue;
+                    }
+                    deviceData += strData;
+                }
+                if (deviceData != string.Empty)
+                {
+                    //鍙嶅簭鍒楀寲璁惧鐨勪繚瀛樻枃浠跺唴瀹�
+                    var tempData = this.DeserializeDeviceDataByDiv(saveDiv, deviceData);
+                    //灏嗚澶囨ā鏉挎暟鎹坊鍔犲叆缂撳瓨
+                    string mainKey = Common.LocalDevice.Current.GetDeviceMainKeys(tempData.DeviceMac, tempData.DeviceEpoint);
+                    this.SetTemplateDeviceDataToMemmory(tempData, deviceData, mainKey, true);
+                }
+            }
+
+            //璇诲彇妯℃澘Bin鏂囦欢
+            if (templateBinFile != string.Empty)
+            {
+                bool hadRoom = HdlRoomLogic.Current.GetAllListRooms().Count > 1;
+                //寮�濮嬭鍙栨枃浠跺唴瀹�
+                this.ReadTemplateFileMethord((strData, saveDiv, deviceType) =>
+                {
+                    //鍦ㄥ姞杞芥湰鍦扮紦瀛樼殑鍓嶆彁涓�,澶勭悊妯℃澘鏂囦欢閲岄潰鐨勭壒娈婂唴瀹�
+                    var result = this.AdjustTemplateBinFileContentOnLoadMemory(strData, hadRoom);
+                    //false浠h〃瀹冧笉鏄壒娈婂唴瀹�
+                    if (result == false)
+                    {
+                        //澶勭悊妯℃澘鏂囦欢閲岄潰鐨勫叡閫氬唴瀹�
+                        //鍥犱负涓婇潰宸茬粡鍔犺浇浜嗘寚瀹氭湰鍦扮殑缂撳瓨,鎵�浠ヨ繖閲屼笉闇�瑕佹坊鍔犲叆dicDeviceTemplateData涓�
+                        this.AdjustTemplateBinFileCommonContent(strData, saveDiv, deviceType, false);
+                    }
+                });
+            }
+            //娓呯┖瀵硅薄缂撳瓨
+            this.strTempContentData = string.Empty;
+
+            //鍔犺浇璁惧鍜岀綉鍏虫ā鏉块�夋嫨鐨勬暟鎹�
+            this.modelData.dicDeviceTemplateSelect = new Dictionary<string, string>();
+            this.modelData.dicGatewayTemplateSelect = new Dictionary<string, string>();
+
+            string fileData2 = HdlFileLogic.Current.ReadFileTextContent(DirNameResourse.DeviceTemplateSelectFile);
+            if (fileData2 != null)
+            {
+                //璁惧閫夋嫨鐨勬ā鏉垮璞�(keys:鏈湴璁惧鐨凪ac value:妯℃澘涓殑Mac)
+                this.modelData.dicDeviceTemplateSelect = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(fileData2);
+            }
+            fileData2 = HdlFileLogic.Current.ReadFileTextContent(DirNameResourse.GatewayTemplateSelectFile);
+            if (fileData2 != null)
+            {
+                //缃戝叧瀵硅薄閫夋嫨鐨勬ā鏉垮璞�(keys:鏈湴缃戝叧ID,  value:妯℃澘涓殑缃戝叧ID)
+                this.modelData.dicGatewayTemplateSelect = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(fileData2);
+            }
+        }
+
+        /// <summary>
+        /// 鍦ㄥ姞杞芥湰鍦扮紦瀛樼殑鍓嶆彁涓�,澶勭悊妯℃澘鏂囦欢閲岄潰鐨勭壒娈婂唴瀹�
+        /// </summary>
+        /// <param name="strData">妯℃澘鏂囦欢涓殑琛屾暟鎹�</param>
+        /// <param name="hadRoom">鏄惁宸茬粡鏈変簡鎴块棿</param>
+        private bool AdjustTemplateBinFileContentOnLoadMemory(string strData,bool hadRoom)
+        {
+            //鍦烘櫙瀵硅薄
+            if (strData == "#SceneTemplate END#")
+            {
+                if (hadRoom == false)
+                {
+                    //鍙垵濮嬪寲涓�娆�,鏈夋埧闂存椂浠h〃宸茬粡涓嶆槸绗竴娆″姞杞戒簡
+                    var scene = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(this.strTempContentData);
+                    scene.Save();
+                }
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            //妤煎眰瀵硅薄
+            else if (strData == "#FloorInfo END#")
+            {
+                if (hadRoom == false)
+                {
+                    //鍙垵濮嬪寲涓�娆�,鏈夋埧闂存椂浠h〃宸茬粡涓嶆槸绗竴娆″姞杞戒簡
+                    Common.Config.Instance.Home.FloorDics = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(this.strTempContentData);
+                }
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            //鎴块棿瀵硅薄
+            else if (strData == "#RoomInfo END#")
+            {
+                var room = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(this.strTempContentData);
+                //鍚勮嚜绔偣鎵�澶勭殑鎴块棿ID,淇濆瓨璧锋潵
+                foreach (var deviceKey in room.ListDevice)
+                {
+                    this.modelData.dicDeviceTemplateRoom[deviceKey] = room.Id;
+                }
+                if (hadRoom == false)
+                {
+                    //绗竴娆″姞杞�,璁惧鍒楄〃闇�瑕佹竻绌�,閫夋嫨璁惧妯℃澘鏃�,鎵嶆坊鍔�
+                    room.ListDevice.Clear();
+                    room.Save();
+                }
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            //璁惧閫夋嫨鐨勬ā鏉�
+            else if (strData == "#DeviceSelectTemplate END#")
+            {
+                //杩欎釜涓滆タ鍦ㄨ繖涓垎鏀笅涓嶄粠鏂囦欢涓鍙�,浠庢湰鍦扮紦瀛樻枃浠跺綋涓幏鍙�
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            //缃戝叧閫夋嫨鐨勬ā鏉�
+            else if (strData == "#GatewaySelectTemplate END#")
+            {
+                //杩欎釜涓滆タ鍦ㄨ繖涓垎鏀笅涓嶄粠鏂囦欢涓鍙�,浠庢湰鍦扮紦瀛樻枃浠跺綋涓幏鍙�
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            return false;
+        }
+
+        #endregion
+
+        #region 鈻� 鏍规嵁妯℃澘Bin鏂囦欢鎭㈠鏁版嵁____________
+
+        /// <summary>
+        /// 鏍规嵁妯℃澘Bin鏂囦欢,鎭㈠鏁版嵁(鍒嗕袱涓嚱鏁板惂,澶毦鎺у埗浜�)
+        /// </summary>
+        public void RecoverDataByTemplateBinFile()
+        {
+            //閲嶆柊鍒濆鍖�
+            this.modelData = new TemplateMemoryData();
+
+            //寮�濮嬭鍙栨枃浠跺唴瀹�
+            this.ReadTemplateFileMethord((strData, saveDiv, deviceType) =>
+            {
+                //鍦ㄦ仮澶嶆暟鎹殑鍓嶆彁涓�,澶勭悊妯℃澘鏂囦欢閲岄潰鐨勭壒娈婂唴瀹�
+                var result = this.AdjustTemplateBinFileContentOnRecover(strData);
+                //false浠h〃瀹冧笉鏄壒娈婂唴瀹�
+                if (result == false)
+                {
+                    //澶勭悊妯℃澘鏂囦欢閲岄潰鐨勫叡閫氬唴瀹�
+                    //鍥犱负鏄互妯℃澘鏉ユ仮澶嶄綇瀹呮暟鎹�,鎵�浠ヨ繖閲岄渶瑕佹坊鍔犲叆dicDeviceTemplateData涓�
+                    this.AdjustTemplateBinFileCommonContent(strData, saveDiv, deviceType, true);
+                }
+            });
+            //娓呯┖瀵硅薄缂撳瓨
+            this.strTempContentData = string.Empty;
+
+            //鍒犳帀杩欎袱涓繚瀛橀�夋嫨妯℃澘鐨勬枃浠�(杩欎袱涓笢瑗垮彲鑳借繕瀛樺湪)
+            HdlFileLogic.Current.DeleteFile(DirNameResourse.DeviceTemplateSelectFile);
+            HdlFileLogic.Current.DeleteFile(DirNameResourse.GatewayTemplateSelectFile);
+
+            //鍐嶆鍒濆鍖栨埧闂�
+            HdlRoomLogic.Current.InitAllRoom();
+        }
+
+        /// <summary>
+        /// 鍦ㄦ仮澶嶆暟鎹殑鍓嶆彁涓�,澶勭悊妯℃澘鏂囦欢閲岄潰鐨勭壒娈婂唴瀹�
+        /// </summary>
+        /// <param name="strData">妯℃澘鏂囦欢涓殑琛屾暟鎹�</param>
+        private bool AdjustTemplateBinFileContentOnRecover(string strData)
+        {
+            //鍦烘櫙瀵硅薄
+            if (strData == "#SceneTemplate END#")
+            {
+                var scene = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(this.strTempContentData);
+                scene.Save();
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            //妤煎眰瀵硅薄
+            else if (strData == "#FloorInfo END#")
+            {
+                Common.Config.Instance.Home.FloorDics = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(this.strTempContentData);
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            //鎴块棿瀵硅薄
+            else if (strData == "#RoomInfo END#")
+            {
+                var room = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(this.strTempContentData);
+                room.Save();
+                //鍚勮嚜绔偣鎵�澶勭殑鎴块棿ID,淇濆瓨璧锋潵
+                foreach (var deviceKey in room.ListDevice)
+                {
+                    this.modelData.dicDeviceTemplateRoom[deviceKey] = room.Id;
+                }
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            //璁惧閫夋嫨鐨勬ā鏉�
+            else if (strData == "#DeviceSelectTemplate END#")
+            {
+                this.modelData.dicDeviceTemplateSelect = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(this.strTempContentData);
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            //缃戝叧閫夋嫨鐨勬ā鏉�
+            else if (strData == "#GatewaySelectTemplate END#")
+            {
+                this.modelData.dicGatewayTemplateSelect = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(this.strTempContentData);
+                this.strTempContentData = string.Empty;
+                return true;
+            }
+            return false;
+        }
+
+        #endregion
+
+        #region 鈻� 澶勭悊妯℃澘鏂囦欢閲岄潰鐨勫叡閫氬唴瀹筥________
+
+        /// <summary>
+        /// 澶勭悊妯℃澘鏂囦欢閲岄潰鐨勫叡閫氬唴瀹�
+        /// </summary>
+        /// <param name="strData">妯℃澘鏂囦欢涓殑琛屾暟鎹�</param>
+        /// <param name="saveDiv">妯℃澘璁惧淇濆瓨鐨勫尯鍒�(璁惧鏁版嵁鏃舵湁鏁�)</param>
+        /// <param name="deviceType">妯℃澘涓澶囩殑deviceType(璁惧鏁版嵁鏃舵湁鏁�,鍙嶅皠鐢�)</param>
+        /// <param name="addToTemplate">鏄惁娣诲姞鍒拌澶囨ā鏉跨紦瀛樹腑</param>
+        private void AdjustTemplateBinFileCommonContent(string strData, ModelDeviceSaveEnum saveDiv, string deviceType, bool addToTemplate)
+        {
+            //妯℃澘鍩烘湰鏁版嵁
+            if (strData == "#TemplateData END#")
+            {
+                var templateData = Newtonsoft.Json.JsonConvert.DeserializeObject<LocalModelBaseInfo>(this.strTempContentData);
+                this.modelData.TemplateName = templateData.ModelName;
+                this.strTempContentData = string.Empty;
+                return;
+            }
+            //璁惧妯℃澘
+            else if (strData == "#DeviceTemplate END#")
+            {
+                //鍙嶅簭鍒楀寲璁惧鐨勪繚瀛樻枃浠跺唴瀹�
+                var tempData = this.DeserializeDeviceDataByDiv(saveDiv, this.strTempContentData);
+                //灏嗚澶囨ā鏉挎暟鎹坊鍔犲叆缂撳瓨(姝ゅ鐗规畩,涓嶉渶瑕佸姞鍏ヨ澶囨ā鏉跨紦瀛樹腑)
+                string mainKey = Common.LocalDevice.Current.GetDeviceMainKeys(tempData.DeviceMac, tempData.DeviceEpoint);
+                this.SetTemplateDeviceDataToMemmory(tempData, this.strTempContentData, mainKey, addToTemplate);
+                this.strTempContentData = string.Empty;
+                return;
+            }
+            //璁惧瀵硅薄
+            else if (strData == "#DeviceInfo END#")
+            {
+                //鍙嶅簭鍒楀寲璁惧
+                var device = CommonDevice.CommonDeviceByByteString(deviceType, this.strTempContentData);
+                if (device != null)
+                {
+                    if (this.modelData.dicDeviceInfo.ContainsKey(device.DeviceAddr) == false)
+                    {
+                        this.modelData.dicDeviceInfo[device.DeviceAddr] = new List<CommonDevice>();
+                    }
+                    this.modelData.dicDeviceInfo[device.DeviceAddr].Add(device);
+                }
+                this.strTempContentData = string.Empty;
+                return;
+            }
+            //缃戝叧瀵硅薄鏁版嵁
+            else if (strData == "#GatewayInfo END#")
+            {
+                //鍙嶅簭鍒楀寲璁惧
+                var gateway = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway>(this.strTempContentData);
+                this.modelData.dicGatewayInfo[gateway.GwId] = gateway;
+                this.strTempContentData = string.Empty;
+                return;
+            }
+            //鐗╃悊璁惧鐨勬埧闂�
+            else if (strData == "#DeviceTemplateRealRoom END#")
+            {
+                this.modelData.dicDeviceTemplateRealRoom = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(this.strTempContentData);
+                this.strTempContentData = string.Empty;
+                return;
+            }
+            //妯℃澘浣忓畢鐨勪俊鎭�(鐩墠鍦ㄨ繖閲屽熀鏈病鐢�)
+            else if (strData == "#TemplateHomeInfo END#")
+            {
+                this.strTempContentData = string.Empty;
+                return;
+            }
+            this.strTempContentData += strData;
+        }
+
+        #endregion
+
+        #region 鈻� 璇诲彇妯℃澘鏂囦欢鍐呭___________________
+
+        /// <summary>
+        /// 璇诲彇妯℃澘鏂囦欢鍐呭
+        /// </summary>
+        /// <param name="AdjustAction">
+        /// <para>鍙傛暟1:妯℃澘鏂囦欢涓殑琛屾暟鎹�</para>
+        /// <para>鍙傛暟2:妯℃澘璁惧淇濆瓨鐨勫尯鍒�(璁惧鏁版嵁鏃舵湁鏁�)</para>
+        /// <para>鍙傛暟3:鏉夸腑璁惧鐨刣eviceType(璁惧鏁版嵁鏃舵湁鏁�,鍙嶅皠鐢�)</para>
+        /// </param>
+        private void ReadTemplateFileMethord(Action<string, ModelDeviceSaveEnum, string> AdjustAction)
+        {
+            //淇濆瓨鐨勮矾寰�
+            string saveFile = DirNameResourse.LocalTemplateDirectory;
+            saveFile = System.IO.Path.Combine(saveFile, TemplateFileName);
+
+            string fileData = HdlFileLogic.Current.ReadFileTextContent(saveFile);
+            if (fileData == null)
+            {
+                AdjustAction = null;
+                return;
+            }
+
+            var saveDiv = ModelDeviceSaveEnum.A鏈畾涔�;
+            var deviceType = string.Empty;
+
+            //鏍规嵁鎹㈣绗﹀垏鍒嗘暟鎹枃鏈�
+            string[] arryData = fileData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
+            foreach (string strData in arryData)
+            {
+                if (strData == "#START#")
+                {
+                    //鏃犻檮鍔犳暟鎹殑銆愭暟鎹爣棰樸��
+                    continue;
+                }
+                if (strData.StartsWith("#DeviceTemplate START#") == true)
+                {
+                    //闄勫姞鏁版嵁:璁惧淇濆瓨鍖哄垎
+                    saveDiv = (ModelDeviceSaveEnum)Convert.ToInt32(strData.Substring(22));
+                    continue;
+                }
+                if (strData.StartsWith("#DeviceInfo START#") == true)
+                {
+                    //闄勫姞鏁版嵁:璁惧瀵硅薄绫诲瀷
+                    deviceType = strData.Substring(18);
+                    continue;
+                }
+                try
+                {
+                    //鎵ц鏁版嵁澶勭悊
+                    AdjustAction(strData, saveDiv, deviceType);
+                }
+                catch (Exception ex)
+                {
+                    HdlLogLogic.Current.WriteLog(ex, "妯℃澘bin鏂囦欢鍑洪棶棰榎r\n" + this.strTempContentData);
+                    this.strTempContentData = string.Empty;
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍙嶅簭鍒楀寲璁惧鐨勪繚瀛樻枃浠跺唴瀹筥________
+
+        /// <summary>
+        /// 鍙嶅簭鍒楀寲璁惧鐨勪繚瀛樻枃浠跺唴瀹�
+        /// </summary>
+        /// <param name="saveDiv">淇濆瓨鍖哄垎</param>
+        /// <param name="fileData"></param>
+        /// <returns></returns>
+        private TemplateDeviceDataCommon DeserializeDeviceDataByDiv(ModelDeviceSaveEnum saveDiv, string fileData)
+        {
+            TemplateDeviceDataCommon modelData = null;
+            if (saveDiv == ModelDeviceSaveEnum.APir閰嶇疆)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelPirSensorSettion>(fileData);
+            }
+            else if (saveDiv == ModelDeviceSaveEnum.A绌鸿皟鎽嗛鍔熻兘)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelAcSwingModeSupport>(fileData);
+            }
+            else if (saveDiv == ModelDeviceSaveEnum.A绌鸿皟鑷畾涔夋ā寮�)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelAcModeSupport>(fileData);
+            }
+            else if (saveDiv == ModelDeviceSaveEnum.A绐楀笜鎵嬫媺鎺у埗)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelCurtainHandPullControl>(fileData);
+            }
+            else if (saveDiv == ModelDeviceSaveEnum.A绐楀笜鏂瑰悜鍙婇檺浣�)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelCurtainDirectionAndLimite>(fileData);
+            }
+            else if (saveDiv == ModelDeviceSaveEnum.A绔偣鍚嶇О)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelDeviceEpointNameInfo>(fileData);
+            }
+            else if (saveDiv == ModelDeviceSaveEnum.A璁惧鍚嶇О)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelDeviceMacNameInfo>(fileData);
+            }
+            else if (saveDiv == ModelDeviceSaveEnum.A璁惧缁戝畾鍒楄〃)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelDeviceBindData>(fileData);
+            }
+            else if (saveDiv == ModelDeviceSaveEnum.A闈㈡澘鑳屽厜鐏�)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelPanelBackLightInfo>(fileData);
+            }
+            else if (saveDiv == ModelDeviceSaveEnum.A闈㈡澘闇囧姩鍔熻兘)
+            {
+                modelData = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelPanelVibrationInfo>(fileData);
+            }
+            return modelData;
+        }
+
+        /// <summary>
+        /// 灏嗚澶囨ā鏉挎暟鎹坊鍔犲叆缂撳瓨
+        /// </summary>
+        /// <param name="modelData">妯℃澘鏁版嵁</param>
+        /// <param name="fileData">璁惧淇濆瓨鍦ㄦ枃浠朵腑鐨勫唴瀹�(鍙负null)</param>
+        /// <param name="mainKey">娣诲姞鐨勪富閿�</param>
+        /// <param name="addToTemplate">鏄惁娣诲姞鍒拌澶囨ā鏉跨紦瀛樹腑</param>
+        private void SetTemplateDeviceDataToMemmory(TemplateDeviceDataCommon modelData, string fileData, string mainKey, bool addToTemplate)
+        {
+            if (modelData == null)
+            {
+                return;
+            }
+
+            //浠庢ā鏉夸富鏂囦欢涓幏鍙栫殑璁惧妯℃澘淇℃伅,鏄笉闇�瑕佹坊鍔犲埌杩欎釜鍙橀噺涓殑
+            //鍥犱负瀹冨彧鑳芥參鎱竴涓釜鍖归厤
+            if (addToTemplate == true)
+            {
+                if (this.modelData.dicDeviceTemplateData.ContainsKey(mainKey) == false)
+                {
+                    this.modelData.dicDeviceTemplateData[mainKey] = new List<TemplateDeviceDataCommon>();
+                }
+                this.modelData.dicDeviceTemplateData[mainKey].Add(modelData);
+            }
+
+            if (fileData != null)
+            {
+                //涓存椂缂撳瓨:妯℃澘涓悇鑷鐐规墍淇濆瓨鐨勫唴瀹�(keys:璁惧涓婚敭),璁惧閫夋嫨妯℃澘鏃�,妯℃澘鏁版嵁杩佺Щ浣跨敤,鍥犱负鏄紩鐢ㄧ被鍨�,鎵�浠ラ渶瑕侀噸鏂癗ew
+                if (this.modelData.dicDeviceFileContent.ContainsKey(mainKey) == false)
+                {
+                    this.modelData.dicDeviceFileContent[mainKey] = new List<TemplateDeviceContent>();
+                }
+                var fileCentent = new TemplateDeviceContent();
+                fileCentent.saveDiv = modelData.DataSaveDiv;
+                fileCentent.FileContent = fileData;
+                fileCentent.DeviceMac = modelData.DeviceMac;
+                this.modelData.dicDeviceFileContent[mainKey].Add(fileCentent);
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 淇濆瓨妯℃澘鏁版嵁鍒版湰鍦扮浉鍏砡____________
+
+        /// <summary>
+        /// 淇濆瓨妯℃澘鏁版嵁鍒版湰鍦�
+        /// </summary>
+        /// <param name="backupName">澶囦唤鍚嶇О</param>
+        public void SaveTemplateDataToLocation(string backupName)
+        {
+            //鑾峰彇鏈湴鍏ㄩ儴鐨勬ā鏉垮垪琛ㄧ殑鍩烘湰淇℃伅
+            var localModel = this.GetLocalAllModelList();
+            var fileName = this.GetNewTemplateFileName();
+            foreach (var model in localModel)
+            {
+                //鍚嶅瓧涓�鏍锋椂
+                if (model.ModelName == backupName)
+                {
+                    fileName = model.FileName;
+                    //澶囦唤鏁版嵁宸茬粡瀛樺湪,鏄惁瑕嗙洊?
+                    this.ShowMassage(ShowMsgType.Confirm, "澶囦唤鏁版嵁宸茬粡瀛樺湪,鏄惁瑕嗙洊?", () =>
+                    {
+                        //灏嗘ā鏉挎暟鎹繚瀛樺埌鍒版寚瀹氱殑鏂囦欢澶逛腑
+                        this.SaveTemplateDataToLocation2(fileName, backupName);
+                    });
+                    return;
+                }
+            }
+            //灏嗘ā鏉挎暟鎹繚瀛樺埌鍒版寚瀹氱殑鏂囦欢澶逛腑
+            this.SaveTemplateDataToLocation2(fileName, backupName);
+        }
+
+        /// <summary>
+        /// 淇濆瓨妯℃澘鏁版嵁鍒版湰鍦�
+        /// </summary>
+        /// <param name="fileName">淇濆瓨鏂囦欢鐨勫悕瀛�</param>
+        /// <param name="backName">妯℃澘澶囦唤鐨勫悕瀛�</param>
+        private void SaveTemplateDataToLocation2(string fileName, string backupName)
+        {
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                ProgressFormBar.Current.Start();
+                ProgressFormBar.Current.SetMsg("姝e湪淇濆瓨妯℃澘鏁版嵁");
+                System.Threading.Thread.Sleep(1500);
+
+                //灏嗘ā鏉挎暟鎹繚瀛樺埌鍒版寚瀹氱殑鏂囦欢澶逛腑
+                var fileFullName = this.SaveTemplateDataToFile(fileName, backupName);
+                //鑾峰彇鍗囩骇鍥轰欢鏂囦欢
+                var result = HdlFirmwareUpdateLogic.DownLoadTemplateDeviceFirmware(fileFullName, "姝e湪淇濆瓨鍗囩骇鍥轰欢鏁版嵁");
+                if (result == -1)
+                {
+                    this.ShowMassage(ShowMsgType.Tip, "淇濆瓨鍗囩骇鍥轰欢鏁版嵁澶辫触");
+                }
+                else
+                {
+                    //鏈湴澶囦唤淇濆瓨鎴愬姛
+                    this.ShowMassage(ShowMsgType.Tip, "鏈湴澶囦唤淇濆瓨鎴愬姛");
+                }
+            });
+        }
+
+        /// <summary>
+        /// 鍦ㄧ敓鎴愭ā鏉挎暟鎹箣鍓�,妫�娴嬫ā鏉挎暟鎹�
+        /// </summary>
+        private void CheckTempLateDataBeforCreat()
+        {
+            //涓轰簡淇濊瘉妯℃澘閲岀殑璁惧鏁板拰鏈湴鐨勪竴鑷�,鎵�浠ユ娴嬩竴涓�
+            //濡傛灉缂哄皯,鍒欐坊鍔犱慨鏀筂ac鐨勬暟鎹繘鍘�
+            //鍏朵粬鐨�,濡傛灉涓嶇偣鍑诲悇鑷殑閰嶇疆鐣岄潰,鍒欏綋鍋氭槸榛樿璁惧鍘熸潵鐨勯厤缃姸鎬�
+
+            //鑾峰彇鐩墠宸茬粡璁剧疆璁惧鐗╃悊鍚嶇О鐨勮澶嘙ac
+            var listMac = new HashSet<string>();
+            foreach (var listData in this.modelData.dicDeviceTemplateData.Values)
+            {
+                if (listData.Count > 0 && listMac.Contains(listData[0].DeviceMac) == true)
+                {
+                    //宸茬粡鍔犱簡
+                    continue;
+                }
+                foreach (var data in listData)
+                {
+                    if (data.DataSaveDiv == ModelDeviceSaveEnum.A璁惧鍚嶇О)
+                    {
+                        listMac.Add(data.DeviceMac);
+                    }
+                }
+            }
+            var listDevice = Common.LocalDevice.Current.listAllDevice;
+            foreach (var device in listDevice)
+            {
+                if (listMac.Contains(device.DeviceAddr) == false)
+                {
+                    listMac.Add(device.DeviceAddr);
+                    //閲嶆柊娣诲姞Mac鍚嶅瓧缂撳瓨
+                    TemplateDeviceDataLogic.Current.ReDeviceMacName(device, Common.LocalDevice.Current.GetDeviceMacName(device));
+                }
+                //閲嶆柊娣诲姞绔偣鍚嶅瓧缂撳瓨
+                TemplateDeviceDataLogic.Current.ReDeviceEpointName(device, Common.LocalDevice.Current.GetDeviceEpointName(device));
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈湴鍏ㄩ儴鐨勬ā鏉垮垪琛ㄧ殑鍩烘湰淇℃伅
+        /// </summary>
+        /// <returns></returns>
+        public List<LocalModelBaseInfo> GetLocalAllModelList()
+        {
+            var dicData = new Dictionary<string, List<LocalModelBaseInfo>>();
+            var listTime = new List<string>();
+
+            var strPath = DirNameResourse.AllResidenceTemplateDirectory;
+            //鑾峰彇鍏ㄩ儴鏂囦欢
+            var arryFile = System.IO.Directory.GetFiles(strPath, "ModelData_*");
+            foreach (string modelFile in arryFile)
+            {
+                //璇诲彇鏂囦欢鍐呭
+                var textValue = HdlFileLogic.Current.ReadFileTextContent(modelFile);
+                if (textValue == null)
+                {
+                    continue;
+                }
+                //浠庢枃浠朵腑鑾峰彇鎸囧畾鐨勫唴瀹�
+                string modelBaseInfo = this.GetDataFromFileContent(textValue, "#START#", "#TemplateData END#");
+                if (modelBaseInfo != string.Empty)
+                {
+                    var myModel = Newtonsoft.Json.JsonConvert.DeserializeObject<LocalModelBaseInfo>(modelBaseInfo);
+                    myModel.FileName = modelFile.Substring(strPath.Length + 1);
+                    if (dicData.ContainsKey(myModel.EditorTime) == false)
+                    {
+                        dicData[myModel.EditorTime] = new List<LocalModelBaseInfo>();
+                        listTime.Add(myModel.EditorTime);
+                    }
+                    dicData[myModel.EditorTime].Add(myModel);
+
+                    string homeData = this.GetDataFromFileContent(textValue, "#START#", "#TemplateHomeInfo END#");
+                    if (homeData != string.Empty)
+                    {
+                        var homeInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<TemplateHomeInfo>(homeData);
+                        myModel.ListUintContent.AddRange(homeInfo.ListUintContent);
+                        myModel.ResidenceAddressName = homeInfo.ResidenceAddressName;
+                    }
+                }
+            }
+            //鎸夋椂闂存帓搴�
+            listTime.Sort();
+
+            var listData = new List<LocalModelBaseInfo>();
+            for (int i = listTime.Count - 1; i >= 0; i--)
+            {
+                listData.AddRange(dicData[listTime[i]]);
+            }
+            return listData;
+        }
+
+        /// <summary>
+        /// 鑾峰彇涓�涓柊鐨勬ā鏉夸繚瀛樻枃浠跺悕
+        /// </summary>
+        /// <returns></returns>
+        public string GetNewTemplateFileName()
+        {
+            return "ModelData_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".bin";
+        }
+
+        #endregion
+
+        #region 鈻� 鐢熸垚妯℃澘鏁版嵁鐩稿叧___________________
+
+        /// <summary>
+        /// 淇濆瓨妯℃澘鏁版嵁鍒版枃浠�(杩斿洖淇濆瓨鏂囦欢鐨勫叏璺緞)
+        /// </summary>
+        /// <param name="fileName">淇濆瓨鏂囦欢鐨勫悕瀛�(鏂板缓鏃剁敤 GetNewTemplateFileName鍑芥暟鏂板缓)</param>
+        /// <param name="backName">妯℃澘澶囦唤鐨勫悕瀛�</param>
+        public string SaveTemplateDataToFile(string fileName, string backUpName)
+        {
+            //鍐欏叆鏂囦欢鐨勫唴瀹�
+            string writeText = string.Empty;
+
+            //鍦ㄧ敓鎴愭ā鏉挎暟鎹箣鍓�,妫�娴嬫ā鏉挎暟鎹�
+            this.CheckTempLateDataBeforCreat();
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愭ā鏉垮熀鏈暟鎹��
+            this.CreatWriteTemplateBaseData(ref writeText, backUpName);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愭ā鏉夸綇瀹呬俊鎭暟鎹��
+            this.CreatWriteTemplateHomeData(ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愯澶囨ā鏉挎暟鎹��
+            this.CreatWriteDeviceTemplateData(ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愯澶囧璞℃暟鎹��
+            this.CreatWriteCommonDeviceData(ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愮綉鍏冲璞℃暟鎹��
+            this.CreatWriteGatewayData(ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愬満鏅ā鏉挎暟鎹��
+            this.CreatWriteSceneData(ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愭埧闂存ā鏉挎暟鎹��
+            this.CrearWriteRoomTemplateData(ref writeText);
+
+            //鐢熸垚鍐欏叆鏂囦欢鐨勩�愯澶囧拰缃戝叧閫夋嫨鐨勬ā鏉跨殑鏁版嵁銆�
+            this.CrearWriteDeviceSelectTemplateData(ref writeText);
+
+            //鍐欏叆鍐呭
+            string saveFile = DirNameResourse.AllResidenceTemplateDirectory;
+            saveFile = System.IO.Path.Combine(saveFile, fileName);
+
+            HdlFileLogic.Current.SaveTextToFile(saveFile, writeText);
+
+            return saveFile;
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愭ā鏉垮熀鏈暟鎹��
+        /// </summary>
+        /// <param name="writeText"></param>
+        private void CreatWriteTemplateBaseData(ref string writeText, string backUpName)
+        {
+            var modelData = new LocalModelBaseInfo();
+            modelData.EditorTime = DateTime.Now.ToString("yyyy.MM.dd HH:mm");
+            modelData.ModelName = backUpName;
+            modelData.ListUintContent.AddRange(Common.Config.Instance.Home.ListUintContent);
+            modelData.FloorCount = Common.Config.Instance.Home.FloorDics.Count;
+            modelData.DeviceCount = this.modelData.dicDeviceTemplateData.Count;
+            //鍔熻兘鏁�
+            int funcCount = 0;
+            foreach (var listData in this.modelData.dicDeviceTemplateData.Values)
+            {
+                if (listData.Count > 0)
+                {
+                    var listDevice = Common.LocalDevice.Current.GetDevicesByMac(listData[0].DeviceMac, false);
+                    funcCount += listDevice.Count;
+                }
+            }
+            modelData.FunctionCount = funcCount;
+
+            writeText += "#START#\r\n";
+            string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(modelData);
+            writeText += dataInfo + "\r\n";
+            writeText += "#TemplateData END#\r\n\r\n";
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愭ā鏉夸綇瀹呬俊鎭暟鎹��
+        /// </summary>
+        /// <param name="writeText"></param>
+        private void CreatWriteTemplateHomeData(ref string writeText)
+        {
+            var homeData = new TemplateHomeInfo();
+            homeData.ResidenceAddressName = Common.Config.Instance.Home.ResidenceAddressName;
+            homeData.ListUintContent.AddRange(Common.Config.Instance.Home.ListUintContent);
+
+            writeText += "#START#\r\n";
+            string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(homeData);
+            writeText += dataInfo + "\r\n";
+            writeText += "#TemplateHomeInfo END#\r\n\r\n";
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愯澶囨ā鏉挎暟鎹��
+        /// </summary>
+        /// <param name="writeText"></param>
+        private void CreatWriteDeviceTemplateData(ref string writeText)
+        {
+            foreach (var list in this.modelData.dicDeviceTemplateData.Values)
+            {
+                foreach (var data in list)
+                {
+                    writeText += "#DeviceTemplate START#" + (int)data.DataSaveDiv + "\r\n";
+                    string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(data);
+                    writeText += dataInfo + "\r\n";
+                    writeText += "#DeviceTemplate END#\r\n\r\n";
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愯澶囧璞℃暟鎹��
+        /// </summary>
+        /// <param name="writeText"></param>
+        private void CreatWriteCommonDeviceData(ref string writeText)
+        {
+            var listDevice = Common.LocalDevice.Current.listAllDevice;
+            var listCheck = new HashSet<string>();
+            foreach (var device in listDevice)
+            {
+                //璁惧绔偣
+                writeText += "#DeviceInfo START#" + device.Type.ToString() + "\r\n";
+                string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(device);
+                writeText += dataInfo + "\r\n";
+                writeText += "#DeviceInfo END#\r\n\r\n";
+
+                //娣诲姞Ota璁惧瀵硅薄鐨勭紦瀛�
+                if (listCheck.Contains(device.DeviceAddr) == false)
+                {
+                    listCheck.Add(device.DeviceAddr);
+                    var otaDevice = Common.LocalDevice.Current.GetOTADevice(device.DeviceAddr);
+                    if (otaDevice != null)
+                    {
+                        writeText += "#DeviceInfo START#" + otaDevice.Type.ToString() + "\r\n";
+                        string dataInfo2 = Newtonsoft.Json.JsonConvert.SerializeObject(otaDevice);
+                        writeText += dataInfo2 + "\r\n";
+                        writeText += "#DeviceInfo END#\r\n\r\n";
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愮綉鍏冲璞℃暟鎹��
+        /// </summary>
+        /// <param name="writeText"></param>
+        private void CreatWriteGatewayData(ref string writeText)
+        {
+            var listGateway = HdlGatewayLogic.Current.GetAllLocalGateway();
+            foreach (var gateway in listGateway)
+            {
+                //璁惧绔偣
+                writeText += "#START#\r\n";
+                string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(gateway);
+                writeText += dataInfo + "\r\n";
+                writeText += "#GatewayInfo END#\r\n\r\n";
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愬満鏅暟鎹��
+        /// </summary>
+        /// <param name="writeText"></param>
+        private void CreatWriteSceneData(ref string writeText)
+        {
+            //鍏ㄩ儴鐨勫満鏅�
+            var listScene = HdlSceneLogic.Current.GetAllLocalScene();
+
+            foreach (var scene in listScene)
+            {
+                writeText += "#START#\r\n";
+                string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(scene);
+                writeText += dataInfo + "\r\n";
+                writeText += "#SceneTemplate END#\r\n\r\n";
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愭埧闂存ā鏉挎暟鎹��
+        /// </summary>
+        /// <param name="writeText"></param>
+        private void CrearWriteRoomTemplateData(ref string writeText)
+        {
+            //妤煎眰鏁版嵁
+            writeText += "#START#\r\n";
+            string dataInfo1 = Newtonsoft.Json.JsonConvert.SerializeObject(Common.Config.Instance.Home.FloorDics);
+            writeText += dataInfo1 + "\r\n";
+            writeText += "#FloorInfo END#\r\n\r\n";
+
+            //鎴块棿鏁版嵁
+            var listRoom = HdlRoomLogic.Current.GetAllListRooms();
+            foreach (var room in listRoom)
+            {
+                if (room.IsLove == false)
+                {
+                    writeText += "#START#\r\n";
+                    string dataInfo2 = Newtonsoft.Json.JsonConvert.SerializeObject(room);
+                    writeText += dataInfo2 + "\r\n";
+                    writeText += "#RoomInfo END#\r\n\r\n";
+                }
+            }
+            //鐗╃悊缃戝叧鎵�鍦ㄧ殑鎴块棿
+            var dicRealRoom = new Dictionary<string, string>();
+            var listGateway = HdlGatewayLogic.Current.GetAllLocalGateway();
+            foreach (var gateway in listGateway)
+            {
+                dicRealRoom[gateway.GwId] = gateway.RoomId;
+            }
+            //鑾峰彇鍏ㄩ儴鐗╃悊璁惧鎵�灞炴埧闂寸殑璁板綍
+            var dicDeviceRoom = Common.LocalDevice.Current.GetAllRealDeviceRoomData();
+            foreach (var strMac in dicDeviceRoom.Keys)
+            {
+                dicRealRoom[strMac] = dicDeviceRoom[strMac];
+            }
+
+            writeText += "#START#\r\n";
+            string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(dicRealRoom);
+            writeText += dataInfo + "\r\n";
+            writeText += "#DeviceTemplateRealRoom END#\r\n\r\n";
+        }
+
+        /// <summary>
+        /// 鐢熸垚鍐欏叆鏂囦欢鐨勩�愯澶囧拰缃戝叧閫夋嫨鐨勬ā鏉跨殑鏁版嵁銆�
+        /// </summary>
+        /// <param name="writeText"></param>
+        private void CrearWriteDeviceSelectTemplateData(ref string writeText)
+        {
+            //璁惧閫夋嫨妯℃澘鐨勬暟鎹�
+            writeText += "#START#\r\n";
+            string dataInfo1 = Newtonsoft.Json.JsonConvert.SerializeObject(this.modelData.dicDeviceTemplateSelect);
+            writeText += dataInfo1 + "\r\n";
+            writeText += "#DeviceSelectTemplate END#\r\n\r\n";
+
+            //缃戝叧閫夋嫨妯℃澘鐨勬暟鎹�
+            writeText += "#START#\r\n";
+            string dataInfo2 = Newtonsoft.Json.JsonConvert.SerializeObject(this.modelData.dicGatewayTemplateSelect);
+            writeText += dataInfo2 + "\r\n";
+            writeText += "#GatewaySelectTemplate END#\r\n\r\n";
+        }
+
+        #endregion
+
+        #region 鈻� 寮哄埗鎵ц鐨勭壒娈婂嚱鏁癬________________
+
+        /// <summary>
+        /// 寮哄埗浠庣紦瀛樺綋涓敓鎴愯澶囧拰缃戝叧鏂囦欢
+        /// </summary>
+        public void CreatDeviceAndGatewayFileFromMemoryByForce()
+        {
+            //鍘熸潵鐨勭姸鎬�
+            bool oldShowTemplate = Common.Config.Instance.Home.IsShowTemplate;
+            //璁╁畠鍙互鐢熸垚鏂囦欢
+            Common.Config.Instance.Home.IsShowTemplate = false;
+
+            //鐢熸垚璁惧鏂囦欢
+            foreach (var listDevice in this.modelData.dicDeviceInfo.Values)
+            {
+                foreach (var device in listDevice)
+                {
+                    device.ReSave();
+                }
+            }
+            //鐢熸垚缃戝叧鏂囦欢
+            foreach (var gateway in this.modelData.dicGatewayInfo.Values)
+            {
+                gateway.ReSave();
+            }
+            //杩樺師鐘舵��
+            Common.Config.Instance.Home.IsShowTemplate = oldShowTemplate;
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧鍜岀綉鍏虫ā鏉块�夋嫨鐩稿叧_____________
+
+        /// <summary>
+        /// 娣诲姞/淇敼 璁惧妯℃澘閫夋嫨鐩爣
+        /// </summary>
+        /// <param name="sourceMac">璁惧Mac瀵硅薄</param>
+        /// <param name="targetMac">鐩爣Mac瀵硅薄</param>
+        public void AddDeviceTemplateSelect(string sourceMac, string targetMac)
+        {
+            //鑾峰彇鏈湴鎸囧畾鐨凪ac鐨勫叏閮ㄨ澶�
+            var listDevice = Common.LocalDevice.Current.GetDevicesByMac(sourceMac, false);
+
+            foreach (var device in listDevice)
+            {
+                //妯℃澘閫夋嫨鐨勬椂鍊�,浠栦滑鐨勭鐐规槸涓�鑷寸殑
+                string localDeviceKey = Common.LocalDevice.Current.GetDeviceMainKeys(device);
+                string templateDeviceKey = Common.LocalDevice.Current.GetDeviceMainKeys(targetMac, device.DeviceEpoint);
+
+                if (this.modelData.dicDeviceTemplateRoom.ContainsKey(templateDeviceKey) == true)
+                {
+                    //濡傛灉妯℃澘閲岄潰,杩欎釜绔偣璁剧疆鏈夋埧闂寸殑璇�
+                    HdlRoomLogic.Current.ChangedRoom(device, this.modelData.dicDeviceTemplateRoom[templateDeviceKey], false);
+                }
+                //濡傛灉杩欎釜绔偣鏈夋ā鏉挎暟鎹殑璇�
+                if (this.modelData.dicDeviceFileContent.ContainsKey(templateDeviceKey) == true)
+                {
+                    //濡傛灉鍘熸潵瀹冮�夋嫨鏈夋ā鏉挎暟鎹殑璇�
+                    if (this.modelData.dicDeviceTemplateData.ContainsKey(localDeviceKey) == true)
+                    {
+                        //鍒犻櫎杩欎釜璁惧鐨勬ā鏉夸繚瀛樻枃浠�
+                        HdlFileLogic.Current.DeleteFile(System.IO.Path.Combine(DirNameResourse.LocalTemplateDirectory, device.FilePath));
+                        //绉婚櫎褰撳墠绔偣淇濆瓨鐨勬ā鏉挎暟鎹�
+                        this.modelData.dicDeviceTemplateData.Remove(localDeviceKey);
+                    }
+
+                    //鍙嶅簭鍒楀寲璁惧鏁版嵁
+                    foreach (var strCentent in this.modelData.dicDeviceFileContent[templateDeviceKey])
+                    {
+                        var tempData = this.DeserializeDeviceDataByDiv(strCentent.saveDiv, strCentent.FileContent);
+                        //杩欓噷闇�瑕佹浛鎹㈡帀Mac
+                        tempData.DeviceMac = sourceMac;
+                        //娣诲姞缂撳瓨(涓婚敭涓烘湰鍦拌澶囩殑涓婚敭)
+                        this.SetTemplateDeviceDataToMemmory(tempData, null, localDeviceKey, true);
+                        //淇敼绔偣缂撳瓨鍚嶅瓧
+                        if (tempData.DataSaveDiv == ModelDeviceSaveEnum.A绔偣鍚嶇О)
+                        {
+                            Common.LocalDevice.Current.SetEpointName(device, ((ModelDeviceEpointNameInfo)tempData).deviceEpointName);
+                        }
+                        else if (tempData.DataSaveDiv == ModelDeviceSaveEnum.A璁惧鍚嶇О)
+                        {
+                            Common.LocalDevice.Current.SetMacName(device, ((ModelDeviceMacNameInfo)tempData).deviceMacName);
+                        }
+                    }
+                }
+                //涓嶇濡備綍,閮介渶瑕佸垯閲嶆柊淇濆瓨鎴愭枃浠�
+                this.SaveDeviceMemmoryData(device);
+                //杩樺師鍙婂彉鏇村満鏅殑鎵ц鐩爣
+                //this.RecoverAndChangedSceneAdjustTarget(device, targetMac);
+            }
+            //鏇存敼鐗╃悊璁惧鎵�鍦ㄧ殑鎴块棿
+            if (this.modelData.dicDeviceTemplateRealRoom.ContainsKey(targetMac) == true)
+            {
+                Common.LocalDevice.Current.SaveRealDeviceRoomId(listDevice, this.modelData.dicDeviceTemplateRealRoom[targetMac], false);
+            }
+
+            //璁板綍缂撳瓨
+            this.modelData.dicDeviceTemplateSelect[sourceMac] = targetMac;
+            //淇濆瓨鐨勮矾寰�
+            string fileData = Newtonsoft.Json.JsonConvert.SerializeObject(this.modelData.dicDeviceTemplateSelect);
+            HdlFileLogic.Current.SaveTextToFile(DirNameResourse.DeviceTemplateSelectFile, fileData);
+        }
+
+        /// <summary>
+        /// 杩樺師鍙婂彉鏇村満鏅殑鎵ц鐩爣
+        /// </summary>
+        /// <param name="device">鏈湴璁惧瀵硅薄</param>
+        /// <param name="targetMac">闇�瑕佸彉鏇寸殑妯℃澘璁惧鐨凪ac</param>
+        private void RecoverAndChangedSceneAdjustTarget(CommonDevice device, string targetMac)
+        {
+            //濡傛灉杩欎釜璁惧鏄浛鎹㈤�夋嫨鐨勬ā鏉跨殑璇�
+            if (this.modelData.dicDeviceTemplateSelect.ContainsKey(device.DeviceAddr) == false)
+            {
+                return;
+            }
+            //鍏ㄩ儴鐨勫満鏅�
+            var listScene = HdlSceneLogic.Current.GetAllLocalScene();
+
+            //杩樻病鏈夋墽琛屽彉鏇村墠,瀹冪洰鍓嶉�夋嫨鐨勬ā鏉跨殑Mac
+            string oldTemplateMac = this.modelData.dicDeviceTemplateSelect[device.DeviceAddr];
+            //灏嗗満鏅璞′腑,杩欎釜鍥炶矾鐨勪富閿�,鏇挎崲鍥炲師鏉ユā鏉夸腑鐨凪ac+绔彛
+            foreach (var scene in listScene)
+            {
+                bool save = false;
+                for (int i = 0; i < scene.AdjustTargetList.Count; i++)
+                {
+                    if (scene.AdjustTargetList[i].Type != 0)
+                    {
+                        //鍙鐞嗚澶囩粦瀹氱洰鏍�
+                        continue;
+                    }
+                    //濡傛灉鏄綋鍓嶅洖璺�
+                    if (scene.AdjustTargetList[i].DeviceAddr == device.DeviceAddr &&
+                       scene.AdjustTargetList[i].Epoint == device.DeviceEpoint)
+                    {
+                        //鏇挎崲鎺塎ac
+                        scene.AdjustTargetList[i].DeviceAddr = oldTemplateMac;
+                        save = true;
+                        continue;
+                    }
+                    //濡傛灉鏄ā鏉跨洰鏍囧洖璺�
+                    if (targetMac != null &&
+                        scene.AdjustTargetList[i].DeviceAddr == targetMac &&
+                        scene.AdjustTargetList[i].Epoint == device.DeviceEpoint)
+                    {
+                        //灏嗙洰鏍囩殑Mac鍙樻洿涓哄綋鍓嶈澶囩殑Mac
+                        scene.AdjustTargetList[i].DeviceAddr = device.DeviceAddr;
+                        save = true;
+                        continue;
+                    }
+                }
+                if (save == true)
+                {
+                    //淇濆瓨缂撳瓨
+                    scene.Save();
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇璁惧宸茬粡閫夋嫨浜嗙殑妯℃澘鐩爣鐨勮澶囩殑Mac(娌℃湁鐩爣鏃�,杩斿洖null)
+        /// </summary>
+        /// <param name="sourceMac">璁惧鐨凪ac</param>
+        /// <returns></returns>
+        public string GetDeviceTemplateSelectMac(string sourceMac)
+        {
+            if (this.modelData.dicDeviceTemplateSelect.ContainsKey(sourceMac) == true)
+            {
+                return this.modelData.dicDeviceTemplateSelect[sourceMac];
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鑾峰彇璁惧宸茬粡閫夋嫨浜嗙殑妯℃澘鐩爣鐨勮澶囩殑Mac鍚嶅瓧(娌℃湁鐩爣鏃�,杩斿洖null)
+        /// </summary>
+        /// <param name="sourceMac">璁惧鐨凪ac</param>
+        /// <returns></returns>
+        public string GetDeviceTemplateSelectName(string sourceMac)
+        {
+            if (this.modelData.dicDeviceTemplateSelect.ContainsKey(sourceMac) == true)
+            {
+                string tempMac = this.modelData.dicDeviceTemplateSelect[sourceMac];
+                foreach (var listData in this.modelData.dicDeviceFileContent.Values)
+                {
+                    foreach (var data in listData)
+                    {
+                        if (data.DeviceMac != tempMac || data.saveDiv != ModelDeviceSaveEnum.A璁惧鍚嶇О)
+                        {
+                            continue;
+                        }
+                        var tempModel = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelDeviceMacNameInfo>(data.FileContent);
+                        return tempModel.deviceMacName;
+                    }
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鍙栨秷璁惧妯℃澘鐨勯�夋嫨鐩爣
+        /// </summary>
+        /// <param name="sourceMac">璁惧鐨凪ac</param>
+        public void RemoveDeviceTemplateSelect(string sourceMac)
+        {
+            ////鑾峰彇鏈湴鎸囧畾鐨凪ac鐨勫叏閮ㄨ澶�
+            //var listDevice = Common.LocalDevice.Current.GetDevicesByMac(sourceMac, false);
+            //foreach (var device in listDevice)
+            //{
+            //    //杩樺師鍦烘櫙鐨勬墽琛岀洰鏍�
+            //    this.RecoverAndChangedSceneAdjustTarget(device, null);
+            //}
+
+            //璁板綍缂撳瓨
+            this.modelData.dicDeviceTemplateSelect.Remove(sourceMac);
+            //淇濆瓨鐨勮矾寰�
+            string fileData = Newtonsoft.Json.JsonConvert.SerializeObject(this.modelData.dicDeviceTemplateSelect);
+            HdlFileLogic.Current.SaveTextToFile(DirNameResourse.DeviceTemplateSelectFile, fileData);
+        }
+
+        /// <summary>
+        /// 娣诲姞/淇敼 缃戝叧妯℃澘閫夋嫨鐩爣
+        /// </summary>
+        /// <param name="sourceGwid">缃戝叧id</param>
+        /// <param name="targetGwid">鐩爣缃戝叧id(妯℃澘)</param>
+        public void AddGatewayTemplateSelect(string sourceGwid, string targetGwid)
+        {
+            //璁板綍缂撳瓨
+            this.modelData.dicGatewayTemplateSelect[sourceGwid] = targetGwid;
+            //淇濆瓨鐨勮矾寰�
+            string fileData = Newtonsoft.Json.JsonConvert.SerializeObject(this.modelData.dicGatewayTemplateSelect);
+            HdlFileLogic.Current.SaveTextToFile(DirNameResourse.GatewayTemplateSelectFile, fileData);
+
+            //鍙樻洿缃戝叧鎴块棿
+            if (this.modelData.dicDeviceTemplateRealRoom.ContainsKey(targetGwid) == true)
+            {
+                HdlGatewayLogic.Current.ChangedGatewayRoom(sourceGwid, this.modelData.dicDeviceTemplateRealRoom[targetGwid]);
+            }
+            //鍙樻洿缃戝叧鍚嶅瓧
+            if (this.modelData.dicGatewayInfo.ContainsKey(targetGwid) == true)
+            {
+                var localGateway = HdlGatewayLogic.Current.GetLocalGateway(sourceGwid);
+                string gwName = HdlGatewayLogic.Current.GetGatewayName(this.modelData.dicGatewayInfo[targetGwid]);
+                HdlGatewayLogic.Current.ReName(localGateway, gwName);
+            }
+        }
+
+        /// <summary>
+        /// 鍙栨秷缃戝叧妯℃澘閫夋嫨鐩爣
+        /// </summary>
+        /// <param name="sourceGwid">缃戝叧id</param>
+        /// <param name="targetGwid">鐩爣缃戝叧id</param>
+        public void RemoveGatewayTemplateSelect(string sourceGwid)
+        {
+            //璁板綍缂撳瓨
+            this.modelData.dicGatewayTemplateSelect.Remove(sourceGwid);
+            //淇濆瓨鐨勮矾寰�
+            string fileData = Newtonsoft.Json.JsonConvert.SerializeObject(this.modelData.dicGatewayTemplateSelect);
+            HdlFileLogic.Current.SaveTextToFile(DirNameResourse.GatewayTemplateSelectFile, fileData);
+        }
+
+        /// <summary>
+        /// 鑾峰彇缃戝叧宸茬粡閫夋嫨浜嗙殑妯℃澘鐩爣鐨勭綉鍏崇殑鍚嶅瓧(娌℃湁鐩爣鏃�,杩斿洖null)
+        /// </summary>
+        /// <param name="sourceMac">缃戝叧id</param>
+        /// <returns></returns>
+        public string GetGatewayTemplateSelectName(string sourceGwid)
+        {
+            if (this.modelData.dicGatewayTemplateSelect.ContainsKey(sourceGwid) == true)
+            {
+                string tempMac = this.modelData.dicGatewayTemplateSelect[sourceGwid];
+                if (this.modelData.dicGatewayInfo.ContainsKey(tempMac) == true)
+                {
+                    string gwName = HdlGatewayLogic.Current.GetGatewayName(this.modelData.dicGatewayInfo[tempMac]);
+                    return gwName;
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鑾峰彇缃戝叧宸茬粡閫夋嫨浜嗙殑妯℃澘鐩爣鐨勭綉鍏崇殑鍚嶅瓧(娌℃湁鐩爣鏃�,杩斿洖null)
+        /// </summary>
+        /// <param name="sourceMac">缃戝叧id</param>
+        /// <returns></returns>
+        public string GetGatewayTemplateSelectId(string sourceGwid)
+        {
+            if (this.modelData.dicGatewayTemplateSelect.ContainsKey(sourceGwid) == true)
+            {
+                return this.modelData.dicGatewayTemplateSelect[sourceGwid];
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鑾峰彇妯℃澘涓叏閮ㄧ綉鍏崇殑鍚嶅瓧
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, string> GetAllGatewayTemplateName()
+        {
+            var dic = new Dictionary<string, string>();
+            foreach (string gwId in this.modelData.dicGatewayInfo.Keys)
+            {
+                string gwName = HdlGatewayLogic.Current.GetGatewayName(this.modelData.dicGatewayInfo[gwId]);
+                dic[gwId] = gwName;
+            }
+            return dic;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎸囧畾缃戝叧鑳藉閫夋嫨鐨勬ā鏉垮悕瀛�
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, string> GetGatewayCanSelectTemplateName(ZbGateway zbGateway)
+        {
+            var dic = new Dictionary<string, string>();
+            foreach (var zbway in this.modelData.dicGatewayInfo.Values)
+            {
+                if (zbGateway.LinuxImageType == zbway.LinuxImageType)
+                {
+                    string gwName = HdlGatewayLogic.Current.GetGatewayName(zbway);
+                    dic[zbway.GwId] = gwName;
+                }
+            }
+            return dic;
+        }
+
+        /// <summary>
+        /// 娓呴櫎鍏ㄩ儴宸茬粡宸茬粡閫夋嫨濂戒簡妯℃澘瀵硅薄鐨勮澶囧拰缃戝叧
+        /// </summary>
+        public void ClearAllSelectDeviceAndGateway()
+        {
+            //閲嶆柊鍒濆鍖�
+            this.modelData.dicDeviceTemplateSelect = new Dictionary<string, string>();
+            this.modelData.dicGatewayTemplateSelect = new Dictionary<string, string>();
+            //鍒犳帀杩欎袱涓繚瀛橀�夋嫨妯℃澘鐨勬枃浠�
+            HdlFileLogic.Current.DeleteFile(DirNameResourse.DeviceTemplateSelectFile);
+            HdlFileLogic.Current.DeleteFile(DirNameResourse.GatewayTemplateSelectFile);
+        }
+
+        #endregion
+
+        #region 鈻� 鑾峰彇鑳藉閫夋嫨鐨勬ā鏉縚________________
+
+        /// <summary>
+        /// 鑾峰彇鑳藉閫夋嫨鐨勬ā鏉�
+        /// </summary>
+        /// <param name="localDevice">鏈湴璁惧</param>
+        /// <returns></returns>
+        public List<TemplateCanSelectContent> GetCanSelectDeviceTemplate(CommonDevice localDevice)
+        {
+            var listCanSelect = new List<TemplateCanSelectContent>();
+            if (this.modelData.dicGatewayTemplateSelect.ContainsKey(localDevice.CurrentGateWayId) == false)
+            {
+                //璇ョ綉鍏虫病鏈夊尮閰嶆ā鏉�,涓嶆彁渚涙ā鏉块�夋嫨
+                return listCanSelect;
+            }
+            var listHadSelect = new HashSet<string>();
+            foreach (var localMac in this.modelData.dicDeviceTemplateSelect.Keys)
+            {
+                //瀹冭嚜宸辩殑璇�,鍙互鏄剧ず(鍥犱负鏈変釜鍙栨秷缁戝畾鐨勫姛鑳�)
+                if (localMac != localDevice.DeviceAddr)
+                {
+                    //鐩墠宸茬粡琚�夋嫨浜嗙殑妯℃澘Mac
+                    listHadSelect.Add(this.modelData.dicDeviceTemplateSelect[localMac]);
+                }
+            }
+
+            var listCheck = new HashSet<string>();
+            //璁惧鐨勬ā鍧桰D
+            string modelId = this.GetDeviceModelId(localDevice.DeviceAddr);
+            //妯℃澘涓殑缃戝叧ID
+            string gatewayTemplateId = this.modelData.dicGatewayTemplateSelect[localDevice.CurrentGateWayId];
+            foreach (var listData in this.modelData.dicDeviceFileContent.Values)
+            {
+                foreach (var data in listData)
+                {
+                    if (data.saveDiv != ModelDeviceSaveEnum.A璁惧鍚嶇О)
+                    {
+                        //鍙幏鍙栬澶噈ac鍚嶇О鐨勬ā鏉挎暟鎹�
+                        continue;
+                    }
+                    if (listHadSelect.Contains(data.DeviceMac) == true
+                        || listCheck.Contains(data.DeviceMac) == true)
+                    {
+                        //濡傛灉杩欎釜妯℃澘宸茬粡琚叾浠栬澶囬�夋嫨浜�,鎴栬�呰繖涓狹ac宸茬粡澶勭悊浜�,鍒檅reak
+                        break;
+                    }
+                    if (this.modelData.dicDeviceInfo.ContainsKey(data.DeviceMac) == false
+                        || this.modelData.dicDeviceInfo[data.DeviceMac][0].CurrentGateWayId != gatewayTemplateId
+                        || this.modelData.dicDeviceInfo[data.DeviceMac][0].ModelIdentifier != modelId)
+                    {
+                        //璇ユā鏉夸笉鏄繖涓綉鍏崇殑,鎴栬�呮ā鍧桰D涓嶄竴鏍风殑
+                        break;
+                    }
+                    listCheck.Add(data.DeviceMac);
+
+                    var info = Newtonsoft.Json.JsonConvert.DeserializeObject<ModelDeviceMacNameInfo>(data.FileContent);
+                    var selectData = new TemplateCanSelectContent();
+                    selectData.DeviceMac = data.DeviceMac;
+                    selectData.DeviceName = info.deviceMacName;
+
+                    Common.Room room = null;
+                    if (this.modelData.dicDeviceTemplateRealRoom.ContainsKey(data.DeviceMac) == true)
+                    {
+                        room = HdlRoomLogic.Current.GetRoomById(this.modelData.dicDeviceTemplateRealRoom[data.DeviceMac]);
+                    }
+                    selectData.RoomName = HdlRoomLogic.Current.GetRoomName(room);
+
+                    listCanSelect.Add(selectData);
+                }
+            }
+            return listCanSelect;
+        }
+
+        #endregion
+
+        #region 鈻� 鍒犻櫎璁惧___________________________
+
+        /// <summary>
+        /// 鍒犻櫎璁惧
+        /// </summary>
+        /// <param name="device"></param>
+        public void DeleteDevice(CommonDevice device)
+        {
+            //鍒犻櫎淇濆瓨鏂囦欢
+            string saveFile = DirNameResourse.LocalTemplateDirectory;
+            saveFile = System.IO.Path.Combine(saveFile, device.FilePath);
+            HdlFileLogic.Current.DeleteFile(saveFile);
+
+            //绉婚櫎妯℃澘缂撳瓨
+            this.modelData.dicDeviceTemplateData.Remove(Common.LocalDevice.Current.GetDeviceMainKeys(device));
+            //绉婚櫎璁惧閫夋嫨缂撳瓨
+            if (this.modelData.dicDeviceTemplateSelect.ContainsKey(device.DeviceAddr) == true)
+            {
+                this.modelData.dicDeviceTemplateSelect.Remove(device.DeviceAddr);
+                HdlFileLogic.Current.SaveFileContent(DirNameResourse.DeviceTemplateSelectFile, this.modelData.dicDeviceTemplateSelect);
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 淇濆瓨璁惧缂撳瓨_______________________
+
+        /// <summary>
+        /// 淇濆瓨璁惧缂撳瓨
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        public void SaveDeviceMemmoryData(CommonDevice device)
+        {
+            string mainkey = Common.LocalDevice.Current.GetDeviceMainKeys(device);
+            if (this.modelData.dicDeviceTemplateData.ContainsKey(mainkey) == false)
+            {
+                return;
+            }
+
+            //淇濆瓨璺緞
+            string saveFile = DirNameResourse.LocalTemplateDirectory;
+            saveFile = System.IO.Path.Combine(saveFile, device.FilePath);
+
+            var listData = this.modelData.dicDeviceTemplateData[mainkey];
+            if (listData.Count == 0)
+            {
+                //鍒犻櫎鎺夎繖涓枃浠�
+                HdlFileLogic.Current.DeleteFile(saveFile);
+                return;
+            }
+            //鍐欏叆鏂囦欢鐨勫唴瀹�
+            string writeText = string.Empty;
+            foreach (var data in listData)
+            {
+                writeText += "===>" + (int)data.DataSaveDiv + "\r\n";
+                string dataInfo = Newtonsoft.Json.JsonConvert.SerializeObject(data);
+                writeText += dataInfo + "\r\n";
+            }
+            //鍐欏叆鍐呭
+            HdlFileLogic.Current.SaveTextToFile(saveFile, writeText);
+        }
+
+        #endregion
+
+        #region 鈻� 鑾峰彇闇�瑕佸崌绾х殑璁惧瀵硅薄_____________
+
+        /// <summary>
+        /// 鑾峰彇闇�瑕佸崌绾х殑璁惧瀵硅薄,鎸夌綉鍏冲垎缁�(key:缃戝叧ID value鐨刱ey:鏈湴Ota璁惧鐨凪ac value:鍗囩骇鍥轰欢鍦板潃)
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, Dictionary<string, string>> GetNeedToUpdateDevice()
+        {
+            var dicGatewayDevice = new Dictionary<string, Dictionary<string, string>>();
+            //寰幆璁惧鍖归厤鐨勬ā鏉�
+            foreach (var localMac in this.modelData.dicDeviceTemplateSelect.Keys)
+            {
+                string tempMac = this.modelData.dicDeviceTemplateSelect[localMac];
+                if (this.modelData.dicDeviceInfo.ContainsKey(tempMac) == false)
+                {
+                    //搴旇涓嶄細杩涙潵,鍗充娇杩涙潵,鎴戜篃涓嶇煡閬撲负浠�涔�
+                    continue;
+                }
+                //鍙栨湰鍦癘ta璁惧瀵硅薄
+                var localOta = Common.LocalDevice.Current.GetOTADevice(localMac);
+                if (localOta == null)
+                {
+                    //搴旇涓嶄細杩涙潵,鍗充娇杩涙潵,鎴戜篃涓嶇煡閬撲负浠�涔�
+                    continue;
+                }
+                foreach (var tempDevice in this.modelData.dicDeviceInfo[tempMac])
+                {
+                    //鍙栨ā鏉縊ta璁惧瀵硅薄
+                    if (tempDevice is OTADevice)
+                    {
+                        //鍙涓よ�呯殑鍥轰欢鐗堟湰涓嶄竴鏍�,骞朵笖鏈湴鏈夎繖涓崌绾у浐浠�,鍒欓兘闇�瑕佸崌绾�
+                        if (localOta.ImgVersion != tempDevice.ImgVersion
+                            && HdlFirmwareUpdateLogic.IsEsixtDeviceFirmwareFile((OTADevice)tempDevice) == true)
+                        {
+                            //鎸夌綉鍏冲垎缁�
+                            if (dicGatewayDevice.ContainsKey(localOta.CurrentGateWayId) == false)
+                            {
+                                dicGatewayDevice[localOta.CurrentGateWayId] = new Dictionary<string, string>();
+                            }
+                            var dicDevice = dicGatewayDevice[localOta.CurrentGateWayId];
+                            dicDevice[localMac] = HdlFirmwareUpdateLogic.GetDeviceFirmwareFile((OTADevice)tempDevice);
+                        }
+                        break;
+                    }
+                }
+            }
+
+            return dicGatewayDevice;
+        }
+
+        /// <summary>
+        /// 鑾峰彇闇�瑕佸崌绾х殑缃戝叧瀵硅薄(key:鏈湴缃戝叧鐨刬d value:鍗囩骇鍥轰欢鍦板潃,绗竴浣嶆槸Linux,绗簩浣嶆槸鍗忚皟鍣�,涔嬪悗閮芥槸铏氭嫙椹卞姩)
+        /// </summary>
+        /// <returns></returns>
+        public Dictionary<string, List<string>> GetNeedToUpdateGateway()
+        {
+            var dicGateway = new Dictionary<string, List<string>>();
+            //寰幆缃戝叧鍖归厤鐨勬ā鏉�
+            foreach (var localId in this.modelData.dicGatewayTemplateSelect.Keys)
+            {
+                string tempId = this.modelData.dicGatewayTemplateSelect[localId];
+                if (this.modelData.dicGatewayInfo.ContainsKey(tempId) == false)
+                {
+                    //搴旇涓嶄細杩涙潵,鍗充娇杩涙潵,鎴戜篃涓嶇煡閬撲负浠�涔�
+                    continue;
+                }
+                //鍙栨湰鍦扮綉鍏冲璞�
+                var localGateway = HdlGatewayLogic.Current.GetLocalGateway(localId);
+                if (localGateway == null)
+                {
+                    //搴旇涓嶄細杩涙潵,鍗充娇杩涙潵,鎴戜篃涓嶇煡閬撲负浠�涔�
+                    continue;
+                }
+                var tempGateway = this.modelData.dicGatewayInfo[tempId];
+                //鍒濆鍖栧鍣�
+                dicGateway[localId] = new List<string>() { null, null };
+
+                //Linux鐗堟湰姣旇緝
+                if (tempGateway.LinuxFirmwareVersion != localGateway.LinuxFirmwareVersion)
+                {
+                    //Linux鍗囩骇鍥轰欢鏂囦欢鍏ㄨ矾寰�
+                    string updateFile = HdlFirmwareUpdateLogic.GetGatewayLinuxFirmwareFile(tempGateway);
+                    if (System.IO.File.Exists(updateFile) == true)
+                    {
+                        //濡傛灉瀛樺湪鐨勮瘽
+                        dicGateway[localId][0] = updateFile;
+                    }
+                }
+                //鍗忚皟鍣ㄧ増鏈瘮杈�
+                if (tempGateway.CoordinatorFirmwareVersion != localGateway.CoordinatorFirmwareVersion)
+                {
+                    //鍗忚皟鍣ㄥ崌绾у浐浠舵枃浠跺叏璺緞
+                    string updateFile = HdlFirmwareUpdateLogic.GetGatewayCoordinatorFirmwareFile(tempGateway);
+                    if (System.IO.File.Exists(updateFile) == true)
+                    {
+                        //濡傛灉瀛樺湪鐨勮瘽
+                        dicGateway[localId][1] = updateFile;
+                    }
+                }
+                //铏氭嫙椹卞姩姣旇緝
+                if (localGateway.LinuxImageType != 6)
+                {
+                    foreach (var localCode in localGateway.DriveCodeList)
+                    {
+                        foreach (var tempCode in tempGateway.DriveCodeList)
+                        {
+                            //闃叉瀹冩斁鐨勯『搴忎笉鏍�
+                            if (localCode.DriveId == tempCode.DriveId && localCode.DriveFwVersion != tempCode.DriveFwVersion)
+                            {
+                                //铏氭嫙椹卞姩鍗囩骇鍥轰欢鏂囦欢鍏ㄨ矾寰�
+                                string updateFile = HdlFirmwareUpdateLogic.GetGatewayDriveCodeFirmwareFile(tempCode);
+                                if (System.IO.File.Exists(updateFile) == true)
+                                {
+                                    //濡傛灉瀛樺湪鐨勮瘽
+                                    dicGateway[localId].Add(updateFile);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            return dicGateway;
+        }
+
+        #endregion
+
+        #region 鈻� 浠庢ā鏉挎枃浠朵腑鑾峰彇瀵硅薄(澶栭儴璋冪敤)_____
+
+        /// <summary>
+        /// 浠庢ā鏉挎枃浠朵腑,鑾峰彇璁惧鍜岀綉鍏冲璞�
+        /// </summary>
+        /// <param name="fullFileName">妯℃澘鏂囦欢鐨勫叏璺緞</param>
+        /// <param name="listDevice">ota璁惧鍒楄〃</param>
+        /// <param name="listGateway">缃戝叧鍒楄〃</param>
+        public void GetDeviceObjectFromTemplate(string fullFileName, ref List<OTADevice> listDevice, ref List<ZbGateway> listGateway)
+        {
+            var fileData = HdlFileLogic.Current.ReadFileTextContent(fullFileName);
+            if (fileData == null)
+            {
+                return;
+            }
+            var deviceType = string.Empty;
+            var strTempContentData = string.Empty;
+
+            //鏍规嵁鎹㈣绗﹀垏鍒嗘暟鎹枃鏈�
+            string[] arryData = fileData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
+            foreach (string strData in arryData)
+            {
+                if (strData == "#START#")
+                {
+                    //鏃犻檮鍔犳暟鎹殑銆愭暟鎹爣棰樸��
+                    strTempContentData = string.Empty;
+                    continue;
+                }
+                if (strData.StartsWith("#DeviceInfo START#") == true)
+                {
+                    //闄勫姞鏁版嵁:璁惧瀵硅薄绫诲瀷
+                    deviceType = strData.Substring(18);
+                    strTempContentData = string.Empty;
+                    continue;
+                }
+                try
+                {
+                    //璁惧瀵硅薄
+                    if (strData == "#DeviceInfo END#")
+                    {
+                        //鍙嶅簭鍒楀寲璁惧
+                        if (deviceType == "OtaDevice" || deviceType == "OtaPanelDevice")
+                        {
+                            var device = Newtonsoft.Json.JsonConvert.DeserializeObject<OTADevice>(strTempContentData);
+                            if (device != null)
+                            {
+                                listDevice.Add(device);
+                            }
+                        }
+
+                        strTempContentData = string.Empty;
+                        continue;
+                    }
+                    //缃戝叧瀵硅薄鏁版嵁
+                    else if (strData == "#GatewayInfo END#")
+                    {
+                        //鍙嶅簭鍒楀寲璁惧
+                        var gateway = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway>(strTempContentData);
+                        if (gateway != null)
+                        {
+                            listGateway.Add(gateway);
+                        }
+                        strTempContentData = string.Empty;
+                        return;
+                    }
+                    strTempContentData += strData;
+                }
+                catch (Exception ex)
+                {
+                    HdlLogLogic.Current.WriteLog(ex, "妯℃澘bin鏂囦欢鍑洪棶棰榎r\n" + strTempContentData);
+                    strTempContentData = string.Empty;
+                }
+            }
+        }
+
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 澶嶅埗妯℃澘bin鏂囦欢鍒版湰鍦扮殑妯℃澘鏂囦欢澶归噷
+        /// </summary>
+        /// <param name="templateFileName">妯℃澘鏂囦欢鐨勫悕瀛�(鍏ㄤ綇瀹呭瓨鏀剧殑妯℃澘)</param>
+        public void CopyTemplateFileToLocalDirectory(string templateFileName)
+        {
+            string sourceFile = System.IO.Path.Combine(DirNameResourse.AllResidenceTemplateDirectory, templateFileName);
+
+            this.CopyTemplateFileToLocalDirectory2(sourceFile);
+        }
+
+        /// <summary>
+        /// 澶嶅埗妯℃澘bin鏂囦欢鍒版湰鍦扮殑妯℃澘鏂囦欢澶归噷
+        /// </summary>
+        /// <param name="fullTemplateName">妯℃澘鏂囦欢鐨勫叏璺緞</param>
+        public void CopyTemplateFileToLocalDirectory2(string fullTemplateName)
+        {
+            if (System.IO.File.Exists(fullTemplateName) == false)
+            {
+                return;
+            }
+
+            //淇濆瓨鐨勮矾寰�
+            string targetFile = DirNameResourse.LocalTemplateDirectory;
+            targetFile = System.IO.Path.Combine(targetFile, TemplateFileName);
+
+            try { System.IO.File.Copy(fullTemplateName, targetFile, true); }
+            catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex, "澶嶅埗妯℃澘bin鏂囦欢澶辫触"); }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏈湴鍏ㄩ儴鐨勬ā鏉跨紦瀛樻枃浠�
+        /// </summary>
+        public void DeleteAllLocalFile()
+        {
+            //鑾峰彇杩欎釜璺緞涓嬮潰鍏ㄩ儴鐨勬枃浠�
+            var listFile = HdlFileLogic.Current.GetFileFromDirectory(DirNameResourse.LocalTemplateDirectory, false); ;
+            foreach (var file in listFile)
+            {
+                HdlFileLogic.Current.DeleteFile(file);
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇妯℃澘涓殑璁惧鏁�
+        /// </summary>
+        /// <returns></returns>
+        public int GetTemplateDeviceCount()
+        {
+            return this.modelData.dicDeviceInfo.Count;
+        }
+
+        /// <summary>
+        /// 妫�娴嬭澶囨ā鏉挎暟鍜屽綋鍓嶈澶囬�夋嫨鐨勬ā鏉挎暟鏄惁涓�鑷�
+        /// </summary>
+        /// <returns></returns>
+        public bool CheckTemplateDeviceCountAndSelectCountIsEqual()
+        {
+            return this.modelData.dicDeviceInfo.Count == this.modelData.dicDeviceTemplateSelect.Count;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏂囦欢閲屾寚瀹氱殑鍐呭
+        /// </summary>
+        /// <param name="fileContrnt">鏂囦欢鏂囨湰</param>
+        /// <param name="startFlage">寮�濮嬪瓧绗�</param>
+        /// <param name="endFlage">缁撴潫瀛楃</param>
+        /// <returns></returns>
+        private string GetDataFromFileContent(string fileContrnt, string startFlage, string endFlage)
+        {
+            string[] arryValue = fileContrnt.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
+            string modelBaseInfo = string.Empty;
+            bool getData = false;
+            bool success = false;
+            foreach (var strValue in arryValue)
+            {
+                //寮�濮�
+                if (strValue == startFlage)
+                {
+                    getData = true;
+                    //鍚屼竴寮�濮嬪瓧绗︾殑涓滆タ寰堝
+                    modelBaseInfo = string.Empty;
+                    continue;
+                }
+                //缁撴潫
+                if (strValue == endFlage)
+                {
+                    success = true;
+                    break;
+                }
+                if (getData == true)
+                {
+                    modelBaseInfo += strValue;
+                }
+            }
+            return success == true ? modelBaseInfo : string.Empty;
+        }
+
+        /// <summary>
+        /// 鑾峰彇妯″潡ID
+        /// </summary>
+        /// <param name="deviceMac"></param>
+        /// <returns></returns>
+        private string GetDeviceModelId(string deviceMac)
+        {
+            var listDevice = Common.LocalDevice.Current.GetDevicesByMac(deviceMac);
+            foreach (var device in listDevice)
+            {
+                if (device.ModelIdentifier != string.Empty)
+                {
+                    return device.ModelIdentifier;
+                }
+            }
+            return string.Empty;
+        }
+
+        /// <summary>
+        /// 鑾峰彇璁惧淇濆瓨鐨勬ā鏉垮璞�
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="saveEnum"></param>
+        /// <returns></returns>
+        public TemplateDeviceDataCommon GetDeviceModelDataClass(CommonDevice device, ModelDeviceSaveEnum saveEnum, TemplateDeviceDataCommon newClass)
+        {
+            string mainkey = Common.LocalDevice.Current.GetDeviceMainKeys(device);
+
+            //鍒涘缓瀛樺偍绌洪棿
+            if (this.modelData.dicDeviceTemplateData.ContainsKey(mainkey) == false)
+            {
+                this.modelData.dicDeviceTemplateData[mainkey] = new List<TemplateDeviceDataCommon>();
+            }
+            foreach (var data in this.modelData.dicDeviceTemplateData[mainkey])
+            {
+                //濡傛灉鏄凡缁忓瓨鍦ㄤ簡鐨�
+                if (data.DataSaveDiv == saveEnum)
+                {
+                    return data;
+                }
+            }
+            //鏂板缓涓�涓柊鐨勫璞�
+            newClass.DataSaveDiv = saveEnum;
+            newClass.DeviceEpoint = device.DeviceEpoint;
+            newClass.DeviceMac = device.DeviceAddr;
+
+            //榛樿鍒涘缓涓�涓储寮曚綅
+            newClass.ListReceiveResult.Add(string.Empty);
+            newClass.ListReceiveTopic.Add(string.Empty);
+            newClass.ListSendTopic.Add(string.Empty);
+
+            this.modelData.dicDeviceTemplateData[mainkey].Add(newClass);
+
+            return newClass;
+        }
+
+        /// <summary>
+        /// 鏄剧ず淇℃伅妗�
+        /// </summary>
+        /// <param name="msgType">淇℃伅绫诲瀷</param>
+        /// <param name="msg">淇℃伅</param>
+        /// <param name="action">鍗曞嚮纭鍚庢墽琛岀殑鍥炶皟鍑芥暟</param>
+        /// <param name="buttonText">鎸夐挳鐨勬枃鏈�</param>
+        private void ShowMassage(ShowMsgType msgType, string msg, Action action = null, string buttonText = null)
+        {
+            //绌哄璞℃椂锛屼笉鏄剧ず
+            if (string.IsNullOrEmpty(msg))
+            {
+                return;
+            }
+            Application.RunOnMainThread(() =>
+            {
+                var alert = new ShowMsgControl(msgType, msg, buttonText);
+                if (action != null)
+                {
+                    alert.ConfirmClickEvent += () =>
+                    {
+                        try
+                        {
+                            //鍥炶皟鍑芥暟
+                            action?.Invoke();
+                        }
+                        catch (Exception ex)
+                        {
+                            //鍑虹幇鏈煡閿欒,鏁版嵁涓㈠け
+                            this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uUnKnownError));
+
+                            //Log鍑哄姏
+                            HdlLogLogic.Current.WriteLog(ex);
+                        }
+                        action = null;
+                    };
+                }
+                alert.Show();
+            });
+        }
+
+        #endregion
+    }
+}
diff --git a/ZigbeeApp/Shared/Phone/TemplateData/TemplateDataCommon.cs b/ZigbeeApp/Shared/Phone/TemplateData/TemplateDataCommon.cs
new file mode 100755
index 0000000..ec0d985
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/TemplateData/TemplateDataCommon.cs
@@ -0,0 +1,738 @@
+锘縰sing Shared.Phone.UserCenter;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shared.Phone.TemplateData
+{
+    #region 鈻� 鍏遍�氭ā鏉挎暟鎹畾涔塤__________________
+
+    /// <summary>
+    /// 妯℃澘缂撳瓨鏁版嵁
+    /// </summary>
+    public class TemplateMemoryData
+    {
+        //鈽� 銉嗐兂銉椼儸銉笺儓銉曘偂銈ゃ儷銇繚瀛樸仌銈屻仧銉戙儵銉°兗銈裤兗 鈽� 鈫�
+        /// <summary>
+        /// 妯℃澘鐨勫悕瀛�
+        /// </summary>
+        public string TemplateName = string.Empty;
+        /// <summary>
+        /// 鍏ㄩ儴鐨勮澶囬厤缃紦瀛樻暟鎹�(涓婚敭鏄湰鍦拌澶囩殑涓婚敭)
+        /// </summary>
+        public Dictionary<string, List<TemplateDeviceDataCommon>> dicDeviceTemplateData = new Dictionary<string, List<TemplateDeviceDataCommon>>();
+        /// <summary>
+        /// 缃戝叧瀵硅薄鏁版嵁
+        /// </summary>
+        public Dictionary<string, ZigBee.Device.ZbGateway> dicGatewayInfo = new Dictionary<string, ZigBee.Device.ZbGateway>();
+        /// <summary>
+        /// 璁惧瀵硅薄鏁版嵁(key锛氳澶嘙ac)
+        /// </summary>
+        public Dictionary<string, List<ZigBee.Device.CommonDevice>> dicDeviceInfo = new Dictionary<string, List<ZigBee.Device.CommonDevice>>();
+        /// <summary>
+        /// 妯℃澘涓澶囧悇鑷湡瀹炶澶囧搴旂殑鎴块棿(keys:璁惧Mac鎴栬�呯綉鍏矷D,  value:鎴块棿ID)
+        /// </summary>
+        public Dictionary<string, string> dicDeviceTemplateRealRoom = new Dictionary<string, string>();
+        //鈽� 銉嗐兂銉椼儸銉笺儓銇繚瀛樸仌銈屻仧銉戙儵銉°兗銈裤兗 鈽� 鈫�
+
+
+        /// <summary>
+        /// 涓存椂缂撳瓨:妯℃澘涓悇鑷鐐规墍澶勭殑鎴块棿(keys:璁惧涓婚敭 value:鎴块棿ID) 鏃ㄥ湪閽堝璁惧鏉ュ洖閫夋嫨妯℃澘鐨勬儏鍐�
+        /// </summary>
+        public Dictionary<string, string> dicDeviceTemplateRoom = new Dictionary<string, string>();
+        /// <summary>
+        /// 涓存椂缂撳瓨:妯℃澘涓悇鑷鐐规墍淇濆瓨鐨勫唴瀹�(keys:妯℃澘涓澶囦富閿�),璁惧閫夋嫨妯℃澘鏃�,妯℃澘鏁版嵁杩佺Щ浣跨敤,鍥犱负鏄紩鐢ㄧ被鍨�,鎵�浠ラ渶瑕侀噸鏂癗ew
+        /// </summary>
+        public Dictionary<string, List<TemplateDeviceContent>> dicDeviceFileContent = new Dictionary<string, List<TemplateDeviceContent>>();
+
+
+        //鈽� 鍒ャ伄銉曘偂銈ゃ儷銇繚瀛樸仌銈屻仧銉戙儵銉°兗銈裤兗 鈽� 鈫�
+        /// <summary>
+        /// 璁惧閫夋嫨鐨勬ā鏉垮璞�(keys:鏈湴璁惧鐨凪ac value:妯℃澘涓殑Mac)
+        /// </summary>
+        public Dictionary<string, string> dicDeviceTemplateSelect = new Dictionary<string, string>();
+        /// <summary>
+        /// 缃戝叧瀵硅薄閫夋嫨鐨勬ā鏉垮璞�(keys:鏈湴缃戝叧ID,  value:妯℃澘涓殑缃戝叧ID)
+        /// </summary>
+        public Dictionary<string, string> dicGatewayTemplateSelect = new Dictionary<string, string>();
+        //鈽� 鍒ャ伄銉曘偂銈ゃ儷銇繚瀛樸仌銈屻仧銉戙儵銉°兗銈裤兗 鈽� 鈫�
+    }
+
+    /// <summary>
+    /// 涓�涓澶囩殑妯℃澘鏁版嵁鐨勫叡閫�
+    /// </summary>
+    public class TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// 璁惧Mac鍦板潃
+        /// </summary>
+        public string DeviceMac = string.Empty;
+        /// <summary>
+        /// 璁惧绔偣
+        /// </summary>
+        public int DeviceEpoint = -1;
+        /// <summary>
+        /// 鍙戦�侀渶瑕佺殑澶ф鏃堕棿(绉�)
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public int SendTime { get { return this.GetSendTime(); } }
+        /// <summary>
+        /// 鏁版嵁淇濆瓨鐨勫尯鍒�(涓嶉渶瑕佸啀娆¤缃�)
+        /// </summary>
+        public ModelDeviceSaveEnum DataSaveDiv = ModelDeviceSaveEnum.A鏈畾涔�;
+        /// <summary>
+        /// 鎺ユ敹鐨勪富棰�(鑰冭檻澶氭潯鍛戒护,姝e父閮芥槸1鏉″懡浠�)
+        /// </summary>
+        public List<string> ListReceiveTopic = new List<string>();
+        /// <summary>
+        /// 鎺ユ敹鐨勭粨鏋�(鑰冭檻澶氭潯鍛戒护,姝e父閮芥槸1鏉″懡浠�)
+        /// </summary>
+        public List<string> ListReceiveResult = new List<string>();
+        /// <summary>
+        /// 鍙戦�佺殑涓婚(鑰冭檻澶氭潯鍛戒护,姝e父閮芥槸1鏉″懡浠�)
+        /// </summary>
+        public List<string> ListSendTopic = new List<string>();
+
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�(鑰冭檻澶氭潯鍛戒护,姝e父閮芥槸1鏉″懡浠�)
+        /// </summary>
+        /// <returns></returns>
+        public virtual List<string> GetSendGatewayValue()
+        {
+            return new List<string>();
+        }
+
+        /// <summary>
+        /// 鍙戦�侀渶瑕佺殑澶ф鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public virtual int GetSendTime()
+        {
+            return 0;
+        }
+    }
+
+    /// <summary>
+    /// 妯℃澘璁惧鐨勭増鏈俊鎭�
+    /// </summary>
+    public class TemplateDeviceVersionInfo
+    {
+        //鐩墠鍙湁 鐗堟湰鍙橀噺
+        /// <summary>
+        /// 褰撳墠鐗堟湰
+        /// </summary>
+        public int Version = -1;
+    }
+
+    /// <summary>
+    /// 妯℃澘璁惧鍦ㄦ枃浠朵腑鐨勫唴瀹�
+    /// </summary>
+    public class TemplateDeviceContent
+    {
+        /// <summary>
+        /// 淇濆瓨鍖哄垎 鍙傜収:ModelDeviceSaveEnum
+        /// </summary>
+        public ModelDeviceSaveEnum saveDiv = ModelDeviceSaveEnum.A鏈畾涔�;
+        /// <summary>
+        /// 鏈夌偣鐢ㄥ
+        /// </summary>
+        public string DeviceMac = string.Empty;
+        /// <summary>
+        /// 鏂囦欢涓繚瀛樼殑鍐呭
+        /// </summary>
+        public string FileContent = string.Empty;
+    }
+
+    /// <summary>
+    /// 鍙�夋ā鏉跨殑鍐呭
+    /// </summary>
+    public class TemplateCanSelectContent
+    {
+        /// <summary>
+        /// 璁惧Mac
+        /// </summary>
+        public string DeviceMac = string.Empty;
+        /// <summary>
+        /// 璁惧Mac鍚嶅瓧
+        /// </summary>
+        public string DeviceName = string.Empty;
+        /// <summary>
+        /// 璇ヨ澶囨墍鍦ㄧ殑鎴块棿
+        /// </summary>
+        public string RoomName = string.Empty;
+    }
+
+    /// <summary>
+    /// 鏈湴妯℃澘鐨勫熀鏈俊鎭�
+    /// </summary>
+    public class LocalModelBaseInfo
+    {
+        /// <summary>
+        /// <para>淇濆瓨鏁版嵁鐨勬枃浠跺悕瀛�(涓嶉渶瑕佷繚瀛樺埌鏂囦欢澶逛腑)</para>
+        /// <para>ModelData_Local_yyyyMMdd_HHmmss.bin -> 鏈湴妯℃澘</para>
+        /// <para>ModelData_Cloud_yyyyMMdd_HHmmss.bin -> 鏈湴妯℃澘</para>
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public string FileName = string.Empty;
+        /// <summary>
+        /// 鏄惁鏄湰鍦版ā鏉�
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public bool IsLocalTemplate
+        {
+            get { return FileName.StartsWith("ModelData_Local"); }
+        }
+        /// <summary>
+        /// 鍗曞厓鍚嶇О(杩欎釜鐩墠鏄粰鏌ョ湅妯℃澘浣跨敤鐨�)
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public List<string> ListUintContent = new List<string>();
+        /// <summary>
+        /// 褰撳墠浣忓畢鐨勫湴鍥句綅缃悕绉�
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public string ResidenceAddressName = string.Empty;
+
+        /// <summary>
+        /// 妯℃澘鍚嶅瓧
+        /// </summary>
+        public string ModelName = string.Empty;
+        /// <summary>
+        /// 缂栬緫鏃堕棿 2020.01.04 19:55鏍煎紡
+        /// </summary>
+        public string EditorTime = string.Empty;
+        /// <summary>
+        /// 妤煎眰鏁�
+        /// </summary>
+        public int FloorCount = 0;
+        /// <summary>
+        /// 璁惧鏁�
+        /// </summary>
+        public int DeviceCount = 0;
+        /// <summary>
+        /// 鍔熻兘鏁�
+        /// </summary>
+        public int FunctionCount = 0;
+    }
+
+    /// <summary>
+    /// 妯℃澘浣忓畢鐨勪俊鎭�
+    /// </summary>
+    public class TemplateHomeInfo
+    {
+        /// <summary>
+        /// 鍗曞厓鍚嶇О
+        /// </summary>
+        public List<string> ListUintContent = new List<string>();
+        /// <summary>
+        /// 褰撳墠浣忓畢鐨勫湴鍥句綅缃悕绉�
+        /// </summary>
+        public string ResidenceAddressName = string.Empty;
+    }
+
+    #endregion
+
+    #region 鈻� 绐楀笜妯℃澘鏁版嵁瀹氫箟___________________
+
+    /// <summary>
+    /// 绐楀笜鎵嬫媺鎺у埗妯℃澘瀹氫箟
+    /// </summary>
+    public class ModelCurtainHandPullControl : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public bool Statu = false;
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            var command = HdlDeviceCurtainLogic.Current.GetHandPullControlText(DeviceMac, DeviceEpoint, Statu);
+            return new List<string>() { command };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�5绉�
+            return 5;
+        }
+    }
+
+    /// <summary>
+    /// 绐楀笜闄愪綅妯℃澘瀹氫箟
+    /// </summary>
+    public class ModelCurtainDirectionAndLimite : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// false:鐢垫満鏂瑰悜姝e悜锛泃rue:鐢垫満鏂瑰悜鍙嶅悜
+        /// </summary>
+        public bool Direction = false;
+        /// <summary>
+        /// 寮�闄愪綅
+        /// </summary>
+        public int upLimit = 2;
+        /// <summary>
+        /// 鍚堥檺浣�
+        /// </summary>
+        public int downLimit = 98;
+        /// <summary>
+        /// 瀵艰建闀垮害
+        /// </summary>
+        public int curtainLength = 100;
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            //鏂瑰悜
+            var command1 = HdlDeviceCurtainLogic.Current.GetCurtainDirectionCommadText(DeviceMac, DeviceEpoint, Direction);
+            //闄愪綅
+            var command2 = HdlDeviceCurtainLogic.Current.GetAutoOpenCurtainLimitPointCommandText(DeviceMac, DeviceEpoint, upLimit, downLimit);
+            return new List<string>() { command1, command2 };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�5绉�
+            return 5;
+        }
+    }
+
+    #endregion
+
+    #region 鈻� 绌鸿皟妯℃澘鏁版嵁瀹氫箟___________________
+
+    /// <summary>
+    /// 绌鸿皟鑷畾涔夋ā寮忔ā鏉挎暟鎹畾涔�
+    /// </summary>
+    public class ModelAcModeSupport : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// 鍊�
+        /// </summary>
+        public int data = 0;
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            var command = HdlDeviceAttributeLogic.Current.GetWriteDeviceAttributeText(DeviceMac, DeviceEpoint, 513, 4099, 25, data);
+            return new List<string>() { command };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�5绉�
+            return 5;
+        }
+    }
+
+    /// <summary>
+    /// 绌鸿皟鎽嗛妯″紡妯℃澘鏁版嵁瀹氫箟
+    /// </summary>
+    public class ModelAcSwingModeSupport : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// 鍊�
+        /// </summary>
+        public int data = 0;
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            var command = HdlDeviceAttributeLogic.Current.GetWriteDeviceAttributeText(DeviceMac, DeviceEpoint, 513, 4099, 25, data);
+            return new List<string>() { command };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�5绉�
+            return 5;
+        }
+    }
+
+    #endregion
+
+    #region 鈻� 璁惧缁戝畾妯℃澘鏁版嵁瀹氫箟_______________
+
+    /// <summary>
+    /// 璁惧缁戝畾妯℃澘鏁版嵁瀹氫箟
+    /// </summary>
+    public class ModelDeviceBindData : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// 鎸夐敭鐨勫姛鑳芥ā寮�
+        /// </summary>
+        public ZigBee.Device.Panel.KeyMode keyMode = ZigBee.Device.Panel.KeyMode.Default;
+        /// <summary>
+        /// 鎸夐敭鐨勫姛鑳芥ā寮忕殑闀濱D
+        /// </summary>
+        public int keyModeClusterID = -1;
+        /// <summary>
+        /// 缁戝畾鍒楄〃
+        /// </summary>
+        public List<ZigBee.Device.BindObj.BindListResponseObj> BindList = new List<ZigBee.Device.BindObj.BindListResponseObj>();
+        
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            var addBindData = new ZigBee.Device.BindObj.AddBindData();
+            addBindData.DeviceAddr = this.DeviceMac;
+            addBindData.Epoint = this.DeviceEpoint;
+
+            //褰撳墠閫夋嫨鐨勬ā鏉垮璞�
+            var dicChangedMac = new Dictionary<string, string>();
+            var dicNowSelect = TemplateCommonLogic.Current.modelData.dicDeviceTemplateSelect;
+            foreach (var localMac in dicNowSelect.Keys)
+            {
+                dicChangedMac[dicNowSelect[localMac]] = localMac;
+            }
+            foreach (var data in BindList)
+            {
+                //鍦烘櫙
+                if (data.BindType == 2)
+                {
+                    var addData = new ZigBee.Device.BindObj.AddBindListObj();
+                    addBindData.BindList.Add(addData);
+                    addData.BindCluster = data.BindCluster;
+                    addData.BindScenesId = data.BindScenesId;
+                    addData.BindType = 1;
+                }
+                //璁惧
+                else
+                {
+                    if (dicChangedMac.ContainsKey(data.BindMacAddr) == false)
+                    {
+                        //杩欎釜涓滆タ娌℃湁閫夋嫨妯℃澘,鍒欎笉鎵ц
+                        continue;
+                    }
+                    var addData = new ZigBee.Device.BindObj.AddBindListObj();
+                    addBindData.BindList.Add(addData);
+                    addData.BindCluster = data.BindCluster;
+                    addData.BindEpoint = data.BindEpoint;
+                    //鏇挎崲mac
+                    addData.BindMacAddr = dicChangedMac[data.BindMacAddr];
+                    addData.BindType = 0;
+                }
+            }
+            var listCommand = new List<string>();
+            //娓呯┖缁戝畾
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", this.DeviceMac }, { "Epoint", this.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5006 } };
+            listCommand.Add(jObject.ToString());
+
+            //鍔熻兘閰嶇疆
+            listCommand.Add(string.Empty);
+            if (keyModeClusterID != -1)
+            {
+                var command1 = HdlDeviceBindLogic.Current.GetConfigureHdlKeyCommandText(this.DeviceMac, this.DeviceEpoint, keyMode, keyModeClusterID);
+                listCommand[1] = command1;
+            }
+
+            //缁戝畾鍒楄〃
+            listCommand.Add(string.Empty);
+            if (addBindData.BindList.Count > 0)
+            {
+                var command2 = HdlDeviceBindLogic.Current.GetAddDeviceListBindCommandText(addBindData);
+                listCommand[2] = command2;
+            }
+            return listCommand;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�15绉�
+            return 15;
+        }
+    }
+
+    #endregion
+
+    #region 鈻� Pir浼犳劅鍣ㄦā鏉挎暟鎹畾涔塤_____________
+
+    /// <summary>
+    /// Pir浼犳劅鍣ㄦā鏉挎暟鎹畾涔�
+    /// </summary>
+    public class ModelPirSensorSettion : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// pir鐨勯厤缃俊鎭�
+        /// </summary>
+        public ZigBee.Device.IASZone.ConfigureParamates pirConfigure = new ZigBee.Device.IASZone.ConfigureParamates();
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            var command = HdlDevicePirSensorLogic.Current.GetPirSensorSettionCommandText(DeviceMac, pirConfigure);
+            return new List<string>() { command };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�5绉�
+            return 5;
+        }
+    }
+
+    #endregion
+
+    #region 鈻� 闈㈡澘妯℃澘鏁版嵁瀹氫箟___________________
+
+    /// <summary>
+    /// 闈㈡澘闇囧姩鍔熻兘妯℃澘鏁版嵁瀹氫箟
+    /// </summary>
+    public class ModelPanelVibrationInfo : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// 闇囧姩鍔熻兘
+        /// </summary>
+        public HdlDevicePanelLogic.PanelVibrationInfo vibrationInfo = new HdlDevicePanelLogic.PanelVibrationInfo();
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            var command = HdlDevicePanelLogic.Current.GetPanelVibrationCommandText(DeviceMac, vibrationInfo);
+            return new List<string>() { command };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�5绉�
+            return 5;
+        }
+    }
+
+    /// <summary>
+    /// 闈㈡澘鑳屽厜鐏ā鏉挎暟鎹畾涔�
+    /// </summary>
+    public class ModelPanelBackLightInfo : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// 浜害璋冭妭鐨勪俊鎭�
+        /// </summary>
+        public ModelPanelSwitchLevelInfo linghtLevelInfo = new ModelPanelSwitchLevelInfo();
+        /// <summary>
+        /// 鑺傝兘妯″紡
+        /// </summary>
+        public ZigBee.Device.Panel.PanelSaveEnergyModeInfo energyModeInfo = new ZigBee.Device.Panel.PanelSaveEnergyModeInfo();
+        /// <summary>
+        /// 鎸夐敭鐨勯鑹叉暟鎹�
+        /// </summary>
+        public ZigBee.Device.Panel.KeyColorData keyColorData = new ZigBee.Device.Panel.KeyColorData();
+        /// <summary>
+        /// 鍜宬eyColorData涓�璧风敤鐨勪笢瑗�
+        /// </summary>
+        public ZigBee.Device.Panel.KeyNumStatus KeyNum = new ZigBee.Device.Panel.KeyNumStatus();
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            //杩欎笁涓笢瑗跨殑椤哄簭涓嶈兘鍙�
+            //浜害璋冭妭
+            var command1 = HdlDevicePanelLogic.Current.GetPanelLevelCommadText(DeviceMac, linghtLevelInfo.panelDirectionsLevel, linghtLevelInfo.panelBacklightLevel);
+            //鑺傝兘妯″紡
+            var command2 = HdlDevicePanelLogic.Current.GetDeviceEnergyConservationModeCommandText(DeviceMac, energyModeInfo.enable, energyModeInfo.time, energyModeInfo.level);
+            //鎸夐敭鎸囩ず鐏鑹�
+            var command3 = HdlDevicePanelLogic.Current.GetPanelColorCommandText(DeviceMac, keyColorData, KeyNum);
+
+            return new List<string>() { command1, command2, command3 };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�8绉�
+            return 8;
+        }
+    }
+
+    /// <summary>
+    /// 鎸夐敭鎸囩ず鐏潰鏉垮紑鍏充寒搴﹂厤缃洖澶�
+    /// </summary>
+    public class ModelPanelSwitchLevelInfo
+    {
+        /// <summary>
+        ///鎸夐敭寮�鐘舵�侊紙鎸囩ず锛変寒搴�(杩欎釜鏄偣鍑诲悗鐨勫��)
+        /// </summary>
+        public int panelDirectionsLevel = -1;
+
+        /// <summary>
+        /// 鎸夐敭鍏崇姸鎬侊紙鑳屽厜锛変寒搴�(杩欎釜鏄偣鍑诲墠鐨勫��)
+        /// </summary>
+        public int panelBacklightLevel = -1;
+    }
+
+    #endregion
+
+    #region 鈻� 璁惧鍚嶇О妯℃澘鏁版嵁瀹氫箟_______________
+
+    /// <summary>
+    /// 璁惧绔偣鍚嶇О妯℃澘鏁版嵁瀹氫箟
+    /// </summary>
+    public class ModelDeviceEpointNameInfo : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// 璁惧绔偣鍚嶇О
+        /// </summary>
+        public string deviceEpointName = string.Empty;
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            var command = Common.LocalDevice.Current.GetReDeviceEpointNameCommandText(DeviceMac, DeviceEpoint, deviceEpointName);
+            return new List<string>() { command };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�3绉�
+            return 3;
+        }
+    }
+
+    /// <summary>
+    /// 璁惧Mac鍚嶇О妯℃澘鏁版嵁瀹氫箟
+    /// </summary>
+    public class ModelDeviceMacNameInfo : TemplateDeviceDataCommon
+    {
+        /// <summary>
+        /// 璁惧Mac鍚嶇О
+        /// </summary>
+        public string deviceMacName = string.Empty;
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧閰嶇疆鐨勫懡浠ゅ瓧绗�
+        /// </summary>
+        /// <returns></returns>
+        public override List<string> GetSendGatewayValue()
+        {
+            var command = Common.LocalDevice.Current.GetReDeviceMacNameCommandText(DeviceMac, DeviceEpoint, deviceMacName);
+            return new List<string>() { command };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍙戦�佸懡浠ゅぇ姒傞渶瑕佺殑鏃堕棿(绉�)
+        /// </summary>
+        /// <returns></returns>
+        public override int GetSendTime()
+        {
+            //鎵ц杩欎釜鍛戒护澶х害闇�瑕�3绉�
+            return 3;
+        }
+    }
+
+    #endregion
+
+    #region 鈻� 鑷畾涔夋灇涓綺________________________
+
+    /// <summary>
+    /// 妯℃澘璁惧淇濆瓨鐨勫尯鍒�
+    /// </summary>
+    public enum ModelDeviceSaveEnum
+    {
+        A鏈畾涔� = -1,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelDeviceMacNameInfo
+        /// </summary>
+        A璁惧鍚嶇О = 1,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelDeviceEpointNameInfo
+        /// </summary>
+        A绔偣鍚嶇О = 2,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelPirSensorSettion
+        /// </summary>
+        APir閰嶇疆 = 3,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelCurtainDirectionAndLimite
+        /// </summary>
+        A绐楀笜鏂瑰悜鍙婇檺浣� = 8,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelCurtainHandPullControl
+        /// </summary>
+        A绐楀笜鎵嬫媺鎺у埗 = 9,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelAcModeSupport
+        /// </summary>
+        A绌鸿皟鑷畾涔夋ā寮� = 10,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelPanelVibrationInfo
+        /// </summary>
+        A闈㈡澘闇囧姩鍔熻兘 = 11,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelAcSwingModeSupport
+        /// </summary>
+        A绌鸿皟鎽嗛鍔熻兘 = 12,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelDeviceBindData
+        /// </summary>
+        A璁惧缁戝畾鍒楄〃 = 14,
+        /// <summary>
+        /// 瀵硅薄绫�:ModelPanelBackLightInfo
+        /// </summary>
+        A闈㈡澘鑳屽厜鐏� = 15
+    }
+
+    /// <summary>
+    /// 鍙戦�佹ā鏉挎暟鎹殑鍖哄垎
+    /// </summary>
+    public enum ModelDataSendEnum
+    {
+        A鏈畾涔� = -1,
+        A绉佹湁灞炴�� = 1,
+        A绉佹湁鍗忚 = 2,
+        A閫忎紶鏁版嵁 = 3
+    }
+
+    #endregion
+}
diff --git a/ZigbeeApp/Shared/Phone/TemplateData/TemplateDeviceDataLogic.cs b/ZigbeeApp/Shared/Phone/TemplateData/TemplateDeviceDataLogic.cs
new file mode 100755
index 0000000..fbf9219
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/TemplateData/TemplateDeviceDataLogic.cs
@@ -0,0 +1,890 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+using ZigBee.Device;
+
+namespace Shared.Phone.TemplateData
+{
+    /// <summary>
+    /// 璁惧妯℃澘鏁版嵁鐨勯�昏緫
+    /// </summary>
+    public class TemplateDeviceDataLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 璁惧妯℃澘鏁版嵁鐨勯�昏緫
+        /// </summary>
+        private static TemplateDeviceDataLogic m_Current = null;
+        /// <summary>
+        /// 璁惧妯℃澘鏁版嵁鐨勯�昏緫
+        /// </summary>
+        public static TemplateDeviceDataLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new TemplateDeviceDataLogic();
+                }
+                return m_Current;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 绐楀笜鎵嬫媺鎺у埗_______________________
+
+        /// <summary>
+        /// 娣诲姞绐楀笜鎵嬫媺鎺у埗缂撳瓨
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <param name="bolStatu">鎵嬫媺鎺у埗鐘舵��</param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        public void SetCurtainHandPullControl(CommonDevice device, bool bolStatu, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelCurtainHandPullControl();
+            var memoryData = (ModelCurtainHandPullControl)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A绐楀笜鎵嬫媺鎺у埗, classData);
+
+            memoryData.Statu = bolStatu;
+            memoryData.ListSendTopic[0] = "SetWritableValue";
+            memoryData.ListReceiveTopic[0] = "SetWritableValue_Respon";
+            memoryData.ListReceiveResult[0] = receiveResult;
+            //淇濆瓨鏁版嵁
+            this.SaveDeviceMemmoryData(device);
+        }
+
+        /// <summary>
+        /// 鑾峰彇绐楀笜鎵嬫媺鎺у埗鐘舵��(铏氭嫙浣跨敤)
+        /// </summary>
+        /// <param name="device"></param>
+        /// <returns></returns>
+        public bool GetCurtainHandPullControl(CommonDevice device)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelCurtainHandPullControl();
+            var memoryData = (ModelCurtainHandPullControl)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A绐楀笜鎵嬫媺鎺у埗, classData);
+
+            return memoryData.Statu;
+        }
+
+        #endregion
+
+        #region 鈻� 绐楀笜鏂瑰悜___________________________
+
+        /// <summary>
+        /// 璁剧疆绐楀笜鐨勬柟鍚�
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="isDirectionReversed"></param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        /// <returns></returns>
+        public CommonDevice.SetWritableValueResponAllData SetCurtainDirection(CommonDevice device, bool isDirectionReversed, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelCurtainDirectionAndLimite();
+            var memoryData = (ModelCurtainDirectionAndLimite)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A绐楀笜鏂瑰悜鍙婇檺浣�, classData);
+
+            memoryData.Direction = isDirectionReversed;
+            memoryData.ListSendTopic[0] = "SetWritableValue";
+            memoryData.ListReceiveTopic[0] = "SetWritableValue_Respon";
+            memoryData.ListReceiveResult[0] = receiveResult;
+            //淇濆瓨鏁版嵁
+            this.SaveDeviceMemmoryData(device);
+
+            return new CommonDevice.SetWritableValueResponAllData { setWritableValueResponData = new CommonDevice.SetWritableValueResponData { Status = 0 } };
+        }
+
+        #endregion
+
+        #region 鈻� 绐楀笜闄愪綅___________________________
+
+        /// <summary>
+        /// 鑾峰彇寮�鍚堝笜鐨勯檺浣�
+        /// </summary>
+        /// <param name="rollershade"></param>
+        /// <param name="upLimit"></param>
+        /// <param name="downLimit"></param>
+        /// <param name="curtainLength"></param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        /// <returns></returns>
+        public bool SetCurtainLimitPoint(CommonDevice rollershade,int upLimit, int downLimit, int curtainLength, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelCurtainDirectionAndLimite();
+            var memoryData = (ModelCurtainDirectionAndLimite)this.GetDeviceModelDataClass(rollershade, ModelDeviceSaveEnum.A绐楀笜鏂瑰悜鍙婇檺浣�, classData);
+            memoryData.curtainLength = curtainLength;
+            memoryData.downLimit = downLimit;
+            memoryData.upLimit = upLimit;
+
+            memoryData.ListSendTopic[0] = "SetWritableValue";
+            memoryData.ListReceiveTopic[0] = "SetWritableValue_Respon";
+            memoryData.ListReceiveResult[0] = receiveResult;
+
+            return true;
+        }
+
+        /// <summary>
+        /// 鑾峰彇寮�鍚堝笜鐨勯檺浣�
+        /// </summary>
+        /// <param name="rollershade"></param>
+        /// <returns></returns>
+        public ModelCurtainDirectionAndLimite GetCurtainLimitPoint(CommonDevice rollershade)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelCurtainDirectionAndLimite();
+            var memoryData = (ModelCurtainDirectionAndLimite)this.GetDeviceModelDataClass(rollershade, ModelDeviceSaveEnum.A绐楀笜鏂瑰悜鍙婇檺浣�, classData);
+
+            return memoryData;
+        }
+
+        #endregion
+
+        #region 鈻� 绌鸿皟鑷畾涔夋ā寮廮____________________
+
+        /// <summary>
+        /// 娣诲姞绌鸿皟鑷畾涔夋ā寮忕紦瀛�
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <param name="data">鍊�</param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        public void SetAcModeSupport(CommonDevice device, int data, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelAcModeSupport();
+            var memoryData = (ModelAcModeSupport)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A绌鸿皟鑷畾涔夋ā寮�, classData);
+
+            memoryData.data = data;
+            memoryData.ListSendTopic[0] = "SetWritableValue";
+            memoryData.ListReceiveTopic[0] = "SetWritableValue_Respon";
+            memoryData.ListReceiveResult[0] = receiveResult;
+            //淇濆瓨鏁版嵁
+            this.SaveDeviceMemmoryData(device);
+        }
+
+        /// <summary>
+        /// 鑾峰彇绌鸿皟鑷畾涔夋ā寮�(铏氭嫙浣跨敤)
+        /// </summary>
+        /// <param name="device"></param>
+        /// <returns></returns>
+        public int GetAcModeSupport(CommonDevice device)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelAcModeSupport();
+            var memoryData = (ModelAcModeSupport)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A绌鸿皟鑷畾涔夋ā寮�, classData);
+
+            return memoryData.data;
+        }
+
+        #endregion
+
+        #region 鈻� 绌鸿皟鎽嗛妯″紡_______________________
+
+        /// <summary>
+        /// 娣诲姞绌鸿皟鎽嗛妯″紡缂撳瓨
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <param name="data">鍊�</param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        public void SetAcSwingModeSupport(CommonDevice device, int data, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelAcSwingModeSupport();
+            var memoryData = (ModelAcSwingModeSupport)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A绌鸿皟鎽嗛鍔熻兘, classData);
+
+            memoryData.data = data;
+            memoryData.ListSendTopic[0] = "SetWritableValue";
+            memoryData.ListReceiveTopic[0] = "SetWritableValue_Respon";
+            memoryData.ListReceiveResult[0] = receiveResult;
+            //淇濆瓨鏁版嵁
+            this.SaveDeviceMemmoryData(device);
+        }
+
+        /// <summary>
+        /// 鑾峰彇绌鸿皟鎽嗛妯″紡(铏氭嫙浣跨敤)
+        /// </summary>
+        /// <param name="device"></param>
+        /// <returns></returns>
+        public int GetAcSwingModeSupport(CommonDevice device)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelAcSwingModeSupport();
+            var memoryData = (ModelAcSwingModeSupport)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A绌鸿皟鎽嗛鍔熻兘, classData);
+
+            return memoryData.data;
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧缁戝畾___________________________
+
+        /// <summary>
+        /// 鑾峰彇璁惧缁戝畾鍒楄〃鐨勭紦瀛�
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <returns></returns>
+        public List<BindObj.BindListResponseObj> GetDeviceBindList(CommonDevice device)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelDeviceBindData();
+            var memoryData = (ModelDeviceBindData)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A璁惧缁戝畾鍒楄〃, classData);
+
+            return memoryData.BindList;
+        }
+
+        /// <summary>
+        /// 娣诲姞璁惧缁戝畾鍒楄〃鐨勭紦瀛�
+        /// </summary>
+        /// <param name="addBindData"></param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        /// <returns></returns>
+        public BindObj.AddedDeviceBindResponseAllData AddDeviceBindList(BindObj.AddBindData addBindData, string receiveResult)
+        {
+            var device = Common.LocalDevice.Current.GetDevice(addBindData.DeviceAddr, addBindData.Epoint);
+            //鑾峰彇瀵硅薄
+            var classData = new ModelDeviceBindData();
+            var memoryData = (ModelDeviceBindData)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A璁惧缁戝畾鍒楄〃, classData);
+            if (memoryData.ListReceiveResult.Count == 1)
+            {
+                //璁惧缁戝畾鏈変笁鏉″懡浠� 绗竴鏉′负娓呯┖
+                memoryData.ListReceiveResult.Insert(0, "{" + SetDouMarks("Result") + ": 0," + SetDouMarks("ResultRemark") + ": " + SetDouMarks("Success") + " }");
+                memoryData.ListReceiveTopic.Insert(0, "Bind/ClearBindInfo_Respon");
+                memoryData.ListSendTopic.Insert(0, "Bind/ClearBindInfo");
+
+                memoryData.ListReceiveResult.Add(string.Empty);
+                memoryData.ListReceiveTopic.Add(string.Empty);
+                memoryData.ListSendTopic.Add(string.Empty);
+            }
+            memoryData.ListSendTopic[2] = "Bind/SetBind";
+            memoryData.ListReceiveTopic[2] = "Bind/SetBind_Respon";
+            memoryData.ListReceiveResult[2] = receiveResult;
+
+            var reData = new BindObj.AddedDeviceBindResponseAllData();
+            reData.addedDeviceBindResponseData = new BindObj.AddedDeviceBindResponseData();
+            reData.addedDeviceBindResponseData.Result = 0;
+
+            foreach (var data in addBindData.BindList)
+            {
+                bool canAdd = true;
+                for (int i = 0; i < memoryData.BindList.Count; i++)
+                {
+                    var bindData = memoryData.BindList[i];
+                    //濡傛灉鏄澶�
+                    if (bindData.BindType == 0 && data.BindType == 0
+                        && bindData.BindMacAddr == data.BindMacAddr
+                        && bindData.BindEpoint == data.BindEpoint
+                        && bindData.BindCluster == data.BindCluster)
+                    {
+                        //鍚屼竴涓笢瑗夸笉闇�瑕佹浛鎹�
+                        canAdd = false;
+                        reData.addedDeviceBindResponseData.BindList.Add(bindData);
+                        break;
+                    }
+                    //濡傛灉鏄満鏅�
+                    if (bindData.BindType == 2 && data.BindType == 1
+                        && bindData.BindScenesId == data.BindScenesId
+                        && bindData.BindCluster == data.BindCluster)
+                    {
+                        //鍚屼竴涓笢瑗夸笉闇�瑕佹浛鎹�
+                        canAdd = false;
+                        reData.addedDeviceBindResponseData.BindList.Add(bindData);
+                        break;
+                    }
+                }
+                if (canAdd == true)
+                {
+                    //娣诲姞鏂扮殑缂撳瓨
+                    var newData = new BindObj.BindListResponseObj();
+                    memoryData.BindList.Add(newData);
+
+                    newData.BindCluster = data.BindCluster;
+                    newData.BindEpoint = data.BindEpoint;
+                    newData.BindMacAddr = data.BindMacAddr;
+                    newData.BindScenesId = data.BindScenesId;
+                    newData.BindType = data.BindType == 0 ? 0 : 2;
+                    reData.addedDeviceBindResponseData.BindList.Add(newData);
+                }
+            }
+            //淇濆瓨鏁版嵁
+            this.SaveDeviceMemmoryData(device);
+
+            return reData;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎璁惧缁戝畾鍒楄〃鐨勭紦瀛�
+        /// </summary>
+        /// <param name="delDeviceBindData"></param>
+        /// <returns></returns>
+        public BindObj.DelDeviceBindResponseAllData DeleteDeviceBindList(BindObj.DelDeviceBindData delDeviceBindData)
+        {
+            var device = Common.LocalDevice.Current.GetDevice(delDeviceBindData.DeviceAddr, delDeviceBindData.Epoint);
+            //鑾峰彇瀵硅薄
+            var classData = new ModelDeviceBindData();
+            var memoryData = (ModelDeviceBindData)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A璁惧缁戝畾鍒楄〃, classData);
+
+            //杩斿洖鍊�
+            var reData = new BindObj.DelDeviceBindResponseAllData();
+            reData.removeBindResultResponseData = new BindObj.RemoveBindResultResponseData();
+            reData.removeBindResultResponseData.Result = 0;
+
+            reData.delDeviceBindResponseData = new BindObj.DelDeviceBindResponseData();
+
+            foreach (var data in delDeviceBindData.RemoveBindList)
+            {
+                for (int i = 0; i < memoryData.BindList.Count; i++)
+                {
+                    var bindData = memoryData.BindList[i];
+                    //濡傛灉鏄澶�
+                    if (bindData.BindType == 0 && data.BindType == 0
+                        && bindData.BindMacAddr == data.BindMacAddr
+                        && bindData.BindEpoint == data.BindEpoint
+                        && bindData.BindCluster == data.BindCluster)
+                    {
+                        //绉婚櫎缂撳瓨
+                        memoryData.BindList.RemoveAt(i);
+                        break;
+                    }
+                    //濡傛灉鏄満鏅�
+                    if (bindData.BindType == 2 && data.BindType == 1
+                        && bindData.BindScenesId == data.BindScenesId
+                        && bindData.BindCluster == data.BindCluster)
+                    {
+                        //绉婚櫎缂撳瓨
+                        memoryData.BindList.RemoveAt(i);
+                        break;
+                    }
+                }
+                var removeData = new BindObj.RemoveBindListResponseObj();
+                reData.delDeviceBindResponseData.RemoveBindList.Add(removeData);
+                removeData.BindCluster = data.BindCluster;
+                removeData.BindEpoint = data.BindEpoint;
+                removeData.BindMacAddr = data.BindMacAddr;
+                removeData.BindScenesId = data.BindScenesId;
+                removeData.BindType = data.BindType == 0 ? 0 : 2;
+                removeData.Result = 0;
+            }
+            //淇濆瓨鏁版嵁
+            this.SaveDeviceMemmoryData(device);
+            return reData;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鎸囧畾璁惧鐨勫叏閮ㄧ粦瀹�
+        /// </summary>
+        /// <param name="device"></param>
+        /// <returns></returns>
+        public BindObj.ClearBindInfoResponseAllData ClearDeviceAllBind(CommonDevice device)
+        {
+            string mainkey = Common.LocalDevice.Current.GetDeviceMainKeys(device);
+            if (TemplateCommonLogic.Current.modelData.dicDeviceTemplateData.ContainsKey(mainkey) == true)
+            {
+                //绉婚櫎鍏ㄩ儴鐨� 璁惧缁戝畾鍒楄〃 鏁版嵁
+                var listBind = TemplateCommonLogic.Current.modelData.dicDeviceTemplateData[mainkey];
+                for (int i = 0; i < listBind.Count; i++)
+                {
+                    if (listBind[i].DataSaveDiv == ModelDeviceSaveEnum.A璁惧缁戝畾鍒楄〃)
+                    {
+                        ((ModelDeviceBindData)listBind[i]).BindList.Clear();
+                    }
+                }
+            }
+            this.SaveDeviceMemmoryData(device);
+
+            return new BindObj.ClearBindInfoResponseAllData
+            {
+                clearBindInfoResponseData = new BindObj.ClearBindInfoResponseData { Result = 0 }
+            };
+        }
+
+        /// <summary>
+        /// 閰嶇疆鎸夐敭鐨勫姛鑳芥ā寮�
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="value"></param>
+        /// <param name="clusterID"></param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        /// <returns></returns>
+        public CommonDevice.SetWritableValueResponAllData ConfigurePanelKeyModel(CommonDevice device, Panel.KeyMode value, int clusterID, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelDeviceBindData();
+            var memoryData = (ModelDeviceBindData)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A璁惧缁戝畾鍒楄〃, classData);
+            memoryData.keyMode = value;
+            memoryData.keyModeClusterID = clusterID;
+
+            if (memoryData.ListReceiveResult.Count == 1)
+            {
+                if (memoryData.ListReceiveResult.Count == 1)
+                {
+                    //璁惧缁戝畾鏈変笁鏉″懡浠� 绗竴鏉′负娓呯┖
+                    memoryData.ListReceiveResult.Insert(0, "{" + SetDouMarks("Result") + ": 0," + SetDouMarks("ResultRemark") + ": " + SetDouMarks("Success") + " }");
+                    memoryData.ListReceiveTopic.Insert(0, "Bind/ClearBindInfo_Respon");
+                    memoryData.ListSendTopic.Insert(0, "Bind/ClearBindInfo");
+
+                    memoryData.ListReceiveResult.Add(string.Empty);
+                    memoryData.ListReceiveTopic.Add(string.Empty);
+                    memoryData.ListSendTopic.Add(string.Empty);
+                }
+            }
+            memoryData.ListSendTopic[1] = "SetWritableValue";
+            memoryData.ListReceiveTopic[1] = "SetWritableValue_Respon";
+            memoryData.ListReceiveResult[1] = receiveResult;
+
+            this.SaveDeviceMemmoryData(device);
+
+            return new CommonDevice.SetWritableValueResponAllData
+            {
+                setWritableValueResponData = new CommonDevice.SetWritableValueResponData { Status = 0 }
+            };
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎸夐敭鐨勫姛鑳芥ā寮�
+        /// </summary>
+        /// <param name="device"></param>
+        /// <returns></returns>
+        public Panel.PanelConfigureInfoResponAllData ReadPanelConfigureKeyModel(CommonDevice device)
+        {
+            var classData = new ModelDeviceBindData();
+            var memoryData = (ModelDeviceBindData)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A璁惧缁戝畾鍒楄〃, classData);
+
+            var data = new Panel.PanelConfigureInfoResponAllData();
+            data.deviceStatusReportData = new CommonDevice.DeviceStatusReportData { CluterID = memoryData.keyModeClusterID };
+
+            var dataAttri = new CommonDevice.AttributeDataObj();
+            dataAttri.AttriButeData = (int)memoryData.keyMode;
+            data.deviceStatusReportData.AttriBute.Add(dataAttri);
+
+            return data;
+        }
+
+        #endregion
+
+        #region 鈻� Pir浼犳劅鍣╛_________________________
+
+        /// <summary>
+        /// 鑾峰彇Pir浼犳劅鍣ㄧ殑閰嶇疆
+        /// </summary>
+        /// <param name="device"></param>
+        /// <returns></returns>
+        public IASZone.ParamatesInfo GetPirSensorLightSettion(CommonDevice device)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new  ModelPirSensorSettion();
+            var memoryData = (ModelPirSensorSettion)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.APir閰嶇疆, classData);
+
+            var localData = new IASZone.ParamatesInfo();
+            localData.configureParamates = new IASZone.ConfigureParamates();
+            localData.configureParamates.controlDevEnable = memoryData.pirConfigure.controlDevEnable;
+            localData.configureParamates.dimmerLevel = memoryData.pirConfigure.dimmerLevel;
+            localData.configureParamates.dimmerOffTime = memoryData.pirConfigure.dimmerOffTime;
+            localData.configureParamates.dimmerOnTime = memoryData.pirConfigure.dimmerOnTime;
+            localData.configureParamates.iasReportPeriod = memoryData.pirConfigure.iasReportPeriod;
+            localData.configureParamates.levelEnable = memoryData.pirConfigure.levelEnable;
+            localData.configureParamates.levelSize = memoryData.pirConfigure.levelSize;
+            localData.configureParamates.mode = memoryData.pirConfigure.mode;
+            localData.configureParamates.transitionTime = memoryData.pirConfigure.transitionTime;
+            localData.configureParamates.type = memoryData.pirConfigure.type;
+
+            return localData;
+        }
+
+        /// <summary>
+        /// 璁剧疆Pir浼犳劅鍣ㄧ殑閰嶇疆
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="configureParamates"></param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        /// <returns></returns>
+        public IASZone.ResponseAllData SetPirSensorLightSettion(CommonDevice device, IASZone.ConfigureParamates configureParamates, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelPirSensorSettion();
+            var memoryData = (ModelPirSensorSettion)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.APir閰嶇疆, classData);
+
+            memoryData.pirConfigure = configureParamates;
+
+            memoryData.ListSendTopic[0] = "ClientDataPassthrough";
+            memoryData.ListReceiveTopic[0] = "ZbDataPassthrough";
+            memoryData.ListReceiveResult[0] = receiveResult;
+
+            this.SaveDeviceMemmoryData(device);
+
+            return new CommonDevice.ResponseAllData { responseData = new CommonDevice.ResponseData { status = 0 } };
+        }
+
+        #endregion
+
+        #region 鈻� 闈㈡澘闇囧姩鍔熻兘_______________________
+
+        /// <summary>
+        /// 鑾峰彇闈㈡澘闇囧姩鍔熻兘
+        /// </summary>
+        /// <param name="device"></param>
+        /// <returns></returns>
+        public UserCenter.HdlDevicePanelLogic.PanelVibrationInfo GetPanelVibrationInfo(CommonDevice device)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelPanelVibrationInfo();
+            var memoryData = (ModelPanelVibrationInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A闈㈡澘闇囧姩鍔熻兘, classData);
+
+            var data = new UserCenter.HdlDevicePanelLogic.PanelVibrationInfo();
+            data.A闇囧姩浣胯兘 = memoryData.vibrationInfo.A闇囧姩浣胯兘;
+            data.A闇囧姩寮哄害 = memoryData.vibrationInfo.A闇囧姩寮哄害;
+            data.A闇囧姩鏃堕棿 = memoryData.vibrationInfo.A闇囧姩鏃堕棿;
+
+            return data;
+        }
+
+        /// <summary>
+        /// 璁剧疆闈㈡澘闇囧姩鍔熻兘
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="datainfo"></param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        /// <returns></returns>
+        public bool SetPanelVibrationInfo(CommonDevice device, UserCenter.HdlDevicePanelLogic.PanelVibrationInfo datainfo, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelPanelVibrationInfo();
+            var memoryData = (ModelPanelVibrationInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A闈㈡澘闇囧姩鍔熻兘, classData);
+            memoryData.vibrationInfo = datainfo;
+
+            memoryData.ListSendTopic[0] = "ClientDataPassthrough";
+            memoryData.ListReceiveTopic[0] = "ZbDataPassthrough";
+            memoryData.ListReceiveResult[0] = receiveResult;
+
+            this.SaveDeviceMemmoryData(device);
+
+            return true;
+        }
+        #endregion
+
+        #region 鈻� 璁惧鍚嶇О___________________________
+
+        /// <summary>
+        /// 淇敼璁惧Mac鍚嶇О
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="macName"></param>
+        /// <returns></returns> 
+        public CommonDevice.RenameDeviceMacNameAllData ReDeviceMacName(CommonDevice device, string macName)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelDeviceMacNameInfo();
+            var memoryData = (ModelDeviceMacNameInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A璁惧鍚嶇О, classData);
+            memoryData.deviceMacName = macName;
+
+            //璁惧杩斿洖鐨勭粨鏋�
+            var receiveResult = "{"
+            + SetDouMarks("DeviceAddr") + ": " + SetDouMarks(device.DeviceAddr) + ","
+            + SetDouMarks("Data_ID") + ": 100,"
+            + SetDouMarks("Data") + ": {"
+            + SetDouMarks("Result") + ": 0,"
+            + SetDouMarks("MacName") + ":" + macName+ "}"
+            + "}";
+
+            memoryData.ListSendTopic[0] = "MacRename";
+            memoryData.ListReceiveTopic[0] = "MacRename_Respon";
+            memoryData.ListReceiveResult[0] = receiveResult;
+
+            this.SaveDeviceMemmoryData(device);
+
+            return new CommonDevice.RenameDeviceMacNameAllData
+            {
+                renameDeviceMacNameData = new CommonDevice.RenameDeviceMacNameData
+                {
+                    Result = 0,
+                    MacName = macName
+                }
+            };
+        }
+
+        /// <summary>
+        /// 淇敼璁惧绔偣鍚嶇О
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="macName"></param>
+        /// <returns></returns>
+        public CommonDevice.DeviceRenameAllData ReDeviceEpointName(CommonDevice device, string deviceName)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelDeviceEpointNameInfo();
+            var memoryData = (ModelDeviceEpointNameInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A绔偣鍚嶇О, classData);
+            memoryData.deviceEpointName = deviceName;
+
+            //璁惧杩斿洖鐨勭粨鏋�
+            var receiveResult = "{"
+            + SetDouMarks("Device_ID") + ": 2,"
+            + SetDouMarks("DeviceAddr") + ": " + SetDouMarks(device.DeviceAddr) + ","
+            + SetDouMarks("Epoint") + ": " + device.DeviceEpoint + ","
+            + SetDouMarks("Data_ID") + ": 96,"
+            + SetDouMarks("Data") + ": {"
+            + SetDouMarks("Result") + ": 0,"
+            + SetDouMarks("DeviceName") + ":" + deviceName + "}"
+            + "}";
+
+            memoryData.ListSendTopic[0] = "DeviceRename";
+            memoryData.ListReceiveTopic[0] = "DeviceRenameRespon";
+            memoryData.ListReceiveResult[0] = receiveResult;
+
+            this.SaveDeviceMemmoryData(device);
+
+            return new CommonDevice.DeviceRenameAllData
+            {
+                deviceRenameData = new CommonDevice.DeviceRenameResponseData
+                {
+                    Result = 0,
+                    DeviceName = deviceName
+                }
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 闈㈡澘鑳屽厜鐏缃甠____________________
+
+        /// <summary>
+        /// 鑾峰彇璁惧浜害閰嶇疆锛坲i鍙寒搴﹁皟鑺�,浣跨敤杩斿洖鍊肩殑panelDirectionsLevel锛�
+        /// </summary>
+        /// <param name="device"></param>
+        /// <returns></returns>
+        public Panel.PanelSwitchLevelInfo GetDeviceLightSettion(CommonDevice device)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelPanelBackLightInfo();
+            var memoryData = (ModelPanelBackLightInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A闈㈡澘鑳屽厜鐏�, classData);
+
+            var data = new Panel.PanelSwitchLevelInfo();
+            data.panelBacklightLevel = memoryData.linghtLevelInfo.panelBacklightLevel == -1 ? 0 : memoryData.linghtLevelInfo.panelBacklightLevel;
+            data.panelDirectionsLevel = memoryData.linghtLevelInfo.panelDirectionsLevel == -1 ? 0 : memoryData.linghtLevelInfo.panelDirectionsLevel;
+            return data;
+        }
+
+        /// <summary>
+        /// 璁剧疆璁惧浜害锛坲i鍙寒搴﹁皟鑺傦級
+        /// </summary>
+        /// <param name="panel">璁惧瀵硅薄</param>
+        /// <param name="directionsLevel">0-100(杩欎釜鏄偣鍑诲悗鐨勫��)</param>
+        /// <param name="backlightLevel">0-100(杩欎釜鏄偣鍑诲墠鐨勫��)</param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        /// <returns></returns>
+        public bool SetDeviceLightSettion(CommonDevice device, int directionsLevel, int backlightLevel, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelPanelBackLightInfo();
+            var memoryData = (ModelPanelBackLightInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A闈㈡澘鑳屽厜鐏�, classData);
+            memoryData.linghtLevelInfo.panelBacklightLevel = backlightLevel;
+            memoryData.linghtLevelInfo.panelDirectionsLevel = directionsLevel;
+            //鑳屽厜鐏湁涓変釜涓滆タ
+            if (memoryData.ListSendTopic.Count == 1)
+            {
+                memoryData.ListSendTopic.Add(string.Empty);
+                memoryData.ListSendTopic.Add(string.Empty);
+
+                memoryData.ListReceiveTopic.Add(string.Empty);
+                memoryData.ListReceiveTopic.Add(string.Empty);
+
+                memoryData.ListReceiveResult.Add(string.Empty);
+                memoryData.ListReceiveResult.Add(string.Empty);
+            }
+            memoryData.ListSendTopic[0] = "ClientDataPassthrough";
+            memoryData.ListReceiveTopic[0] = "ZbDataPassthrough";
+            memoryData.ListReceiveResult[0] = receiveResult;
+
+            this.SaveDeviceMemmoryData(device);
+
+            return true;
+        }
+
+        /// <summary>
+        /// 鑾峰彇璁惧鑺傝兘妯″紡鐨勯厤缃姸鎬�(ui鍙妭鑳芥ā寮�)
+        /// </summary>
+        /// <param name="device"></param>
+        /// <returns></returns>
+        public Panel.PanelSaveEnergyModeInfo GetDeviceEnergyConservationMode(CommonDevice device)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelPanelBackLightInfo();
+            var memoryData = (ModelPanelBackLightInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A闈㈡澘鑳屽厜鐏�, classData);
+
+            var data = new Panel.PanelSaveEnergyModeInfo();
+            data.enable = memoryData.energyModeInfo.enable;
+            data.level = memoryData.energyModeInfo.level == -1 ? 0 : memoryData.energyModeInfo.level;
+            data.time = memoryData.energyModeInfo.time == -1 ? 0 : memoryData.energyModeInfo.time;
+            return data;
+        }
+
+        /// <summary>
+        /// 璁剧疆璁惧鐨勮妭鑳芥ā寮�(ui鍙妭鑳芥ā寮�)
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <param name="modeEnable">鑺傝兘妯″紡鏄惁鏈夋晥</param>
+        /// <param name="modeTime">鏃犳搷浣滆繘鍏ヨ妭鑳芥ā寮忔椂闂� 0-255</param>
+        /// <param name="level">鑺傝兘妯″紡浜害:0-100</param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        /// <returns></returns>
+        public bool SetDeviceEnergyConservationMode(CommonDevice device, bool modeEnable, int modeTime, int level,string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelPanelBackLightInfo();
+            var memoryData = (ModelPanelBackLightInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A闈㈡澘鑳屽厜鐏�, classData);
+            memoryData.energyModeInfo.enable = modeEnable;
+            memoryData.energyModeInfo.time = modeTime;
+            memoryData.energyModeInfo.level = level;
+
+            //鑳屽厜鐏湁涓変釜涓滆タ
+            if (memoryData.ListSendTopic.Count == 1)
+            {
+                memoryData.ListSendTopic.Add(string.Empty);
+                memoryData.ListSendTopic.Add(string.Empty);
+
+                memoryData.ListReceiveTopic.Add(string.Empty);
+                memoryData.ListReceiveTopic.Add(string.Empty);
+
+                memoryData.ListReceiveResult.Add(string.Empty);
+                memoryData.ListReceiveResult.Add(string.Empty);
+            }
+            memoryData.ListSendTopic[1] = "ClientDataPassthrough";
+            memoryData.ListReceiveTopic[1] = "ZbDataPassthrough";
+            memoryData.ListReceiveResult[1] = receiveResult;
+
+            this.SaveDeviceMemmoryData(device);
+
+            return true;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎸夐敭鎸囩ず鐏紑鍏抽鑹�.
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="keyNum"></param>
+        /// <returns></returns>
+        public Panel.KeyColorDataResponseAllData GetPanelColorInfo(CommonDevice device, Panel.KeyNum keyNum)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelPanelBackLightInfo();
+            var memoryData = (ModelPanelBackLightInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A闈㈡澘鑳屽厜鐏�, classData);
+
+            var data = new Panel.KeyColorDataResponseAllData();
+            data.keyColorData = new Panel.KeyColorData();
+            data.keyColorData.CloseColorB = string.IsNullOrEmpty(memoryData.keyColorData.CloseColorB) == true ? "0" : memoryData.keyColorData.CloseColorB;
+            data.keyColorData.CloseColorG = string.IsNullOrEmpty(memoryData.keyColorData.CloseColorG) == true ? "0" : memoryData.keyColorData.CloseColorG;
+            data.keyColorData.CloseColorR = string.IsNullOrEmpty(memoryData.keyColorData.CloseColorR) == true ? "0" : memoryData.keyColorData.CloseColorR;
+            data.keyColorData.OpenColorB = string.IsNullOrEmpty(memoryData.keyColorData.OpenColorB) == true ? "0" : memoryData.keyColorData.OpenColorB;
+            data.keyColorData.OpenColorG = string.IsNullOrEmpty(memoryData.keyColorData.OpenColorG) == true ? "0" : memoryData.keyColorData.OpenColorG;
+            data.keyColorData.OpenColorR = string.IsNullOrEmpty(memoryData.keyColorData.OpenColorR) == true ? "0" : memoryData.keyColorData.OpenColorR;
+            data.keyColorData.keyNum = keyNum;
+
+            return data;
+        }
+
+        /// <summary>
+        /// 閰嶇疆鎸夐敭鎸囩ず鐏鑹�
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="keyColorData"></param>
+        /// <param name="keyNumStatus"></param>
+        /// <param name="receiveResult">璁惧杩斿洖鐨勭粨鏋�</param>
+        /// <returns></returns>
+        public CommonDevice.ResponseAllData SetPanelColorInfo(CommonDevice device, Panel.KeyColorData keyColorData, Panel.KeyNumStatus keyNumStatus, string receiveResult)
+        {
+            //鑾峰彇瀵硅薄
+            var classData = new ModelPanelBackLightInfo();
+            var memoryData = (ModelPanelBackLightInfo)this.GetDeviceModelDataClass(device, ModelDeviceSaveEnum.A闈㈡澘鑳屽厜鐏�, classData);
+
+            memoryData.keyColorData.keyNum = keyColorData.keyNum;
+            memoryData.keyColorData.OpenColorB = keyColorData.OpenColorB;
+            memoryData.keyColorData.OpenColorG = keyColorData.OpenColorG;
+            memoryData.keyColorData.OpenColorR = keyColorData.OpenColorR;
+            memoryData.keyColorData.CloseColorB = keyColorData.CloseColorB;
+            memoryData.keyColorData.CloseColorG = keyColorData.CloseColorG;
+            memoryData.keyColorData.CloseColorR = keyColorData.CloseColorR;
+
+            memoryData.KeyNum.Key1 = keyNumStatus.Key1;
+            memoryData.KeyNum.Key2 = keyNumStatus.Key2;
+            memoryData.KeyNum.Key3 = keyNumStatus.Key3;
+            memoryData.KeyNum.Key4 = keyNumStatus.Key4;
+            memoryData.KeyNum.Key5 = keyNumStatus.Key5;
+            memoryData.KeyNum.Key6 = keyNumStatus.Key6;
+            memoryData.KeyNum.Key7 = keyNumStatus.Key7;
+            memoryData.KeyNum.Key8 = keyNumStatus.Key8;
+            memoryData.KeyNum.Key9 = keyNumStatus.Key9;
+            memoryData.KeyNum.Key10 = keyNumStatus.Key10;
+            memoryData.KeyNum.Key11 = keyNumStatus.Key11;
+            memoryData.KeyNum.Key12 = keyNumStatus.Key12;
+            memoryData.KeyNum.Key13 = keyNumStatus.Key13;
+            memoryData.KeyNum.Key14 = keyNumStatus.Key14;
+            memoryData.KeyNum.Key15 = keyNumStatus.Key15;
+            memoryData.KeyNum.Key16 = keyNumStatus.Key16;
+
+            //鑳屽厜鐏湁涓変釜涓滆タ
+            if (memoryData.ListSendTopic.Count == 1)
+            {
+                memoryData.ListSendTopic.Add(string.Empty);
+                memoryData.ListSendTopic.Add(string.Empty);
+
+                memoryData.ListReceiveTopic.Add(string.Empty);
+                memoryData.ListReceiveTopic.Add(string.Empty);
+
+                memoryData.ListReceiveResult.Add(string.Empty);
+                memoryData.ListReceiveResult.Add(string.Empty);
+            }
+            memoryData.ListSendTopic[2] = "ClientDataPassthrough";
+            memoryData.ListReceiveTopic[2] = "ZbDataPassthrough";
+            memoryData.ListReceiveResult[2] = receiveResult;
+
+            this.SaveDeviceMemmoryData(device);
+
+            return new CommonDevice.ResponseAllData
+            {
+                responseData = new CommonDevice.ResponseData
+                { status = 0 }
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 淇濆瓨璁惧缂撳瓨_______________________
+
+        /// <summary>
+        /// 淇濆瓨璁惧缂撳瓨
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        public void SaveDeviceMemmoryData(CommonDevice device)
+        {
+            //浠g爜绉诲姩鍒板埆鐨勬枃浠朵腑浜�
+            TemplateCommonLogic.Current.SaveDeviceMemmoryData(device);
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鑾峰彇璁惧淇濆瓨鐨勬ā鏉垮璞�
+        /// </summary>
+        /// <param name="device"></param>
+        /// <param name="saveEnum"></param>
+        /// <returns></returns>
+        private TemplateDeviceDataCommon GetDeviceModelDataClass(CommonDevice device, ModelDeviceSaveEnum saveEnum, TemplateDeviceDataCommon newClass)
+        {
+            //浠g爜绉诲姩鍒板埆鐨勬枃浠朵腑浜�
+            return TemplateCommonLogic.Current.GetDeviceModelDataClass(device, saveEnum, newClass);
+        }
+
+        /// <summary>
+        /// 娣诲姞鍙屽紩鍙�
+        /// </summary>
+        /// <param name="i_text"></param>
+        /// <returns></returns>
+        private string SetDouMarks(string i_text)
+        {
+            return UserCenter.UserCenterResourse.douMarks + i_text + UserCenter.UserCenterResourse.douMarks;
+        }
+
+        #endregion
+    }
+}
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/IMessageCommon.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/IMessageCommon.cs
index c0e1669..fa84e94 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/IMessageCommon.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/IMessageCommon.cs
@@ -676,7 +676,7 @@
                 //鍦ㄥ唽鐨凪sg
                 return Language.StringByID(dicMsg[requestName][statuCode]);
             }
-            return "Error:" + statuCode;
+            return null;
         }
     }
 }
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/UserCenterCommon.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/UserCenterCommon.cs
index e99ab65..a6bd03a 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/UserCenterCommon.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/UserCenterCommon.cs
@@ -1400,13 +1400,17 @@
         /// </summary>
         public int ErrorMsgDiv = 1;
         /// <summary>
-        /// 鎺ユ敹鐨勬暟鎹�
+        /// 鎺ユ敹鐨凞ata鏁版嵁
         /// </summary>
         public string ReceiptData = null;
         /// <summary>
         /// 鎺ユ敹鐨勬暟鎹�(澶氫釜杩斿洖涓婚涓撶敤)
         /// </summary>
         public string[] listReceiptData = null;
+        /// <summary>
+        /// 杩欎釜鏄綉鍏冲洖澶嶇殑鏁翠釜json鏁版嵁,涓暟涓巐istReceiptData涓�鑷�
+        /// </summary>
+        public string[] JsonData = null;
     }
 
     #endregion
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/BaseCommonControl/Base/TextInputBase.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/BaseCommonControl/Base/TextInputBase.cs
index 6d11849..c4572c8 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/BaseCommonControl/Base/TextInputBase.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/BaseCommonControl/Base/TextInputBase.cs
@@ -16,13 +16,27 @@
         /// </summary>
         private NormalViewControl btnLineTemp = null;
         /// <summary>
-        /// 鑱斿姩搴曠嚎(鍊艰緭鍏ヤ箣鍚�,绾跨殑棰滆壊浼氬彉)
+        /// 鑱斿姩搴曠嚎(鍏夋爣杩涙潵涔嬪悗,绾跨殑棰滆壊浼氬彉)
         /// </summary>
         public NormalViewControl btnLine
         {
             set
             {
                 this.btnLineTemp = value;
+            }
+        }
+        /// <summary>
+        /// 鑱斿姩澶栨
+        /// </summary>
+        private NormalFrameLayout frameBorder = null;
+        /// <summary>
+        /// 鑱斿姩澶栨(鍏夋爣杩涙潵涔嬪悗,澶栨鐨勯鑹蹭細鍙�)
+        /// </summary>
+        public NormalFrameLayout FrameBorder
+        {
+            set
+            {
+                this.frameBorder = value;
             }
         }
 
@@ -177,6 +191,10 @@
                 {
                     btnLineTemp.BackgroundColor = UserCenterColor.Current.ButtomLine;
                 }
+                if (frameBorder != null)
+                {
+                    frameBorder.BorderColor = 0xffcccccc;
+                }
                 if (m_UseFocusColor == true)
                 {
                     //鐏拌壊瀛椾綋
@@ -189,6 +207,10 @@
                 {
                     btnLineTemp.BackgroundColor = UserCenterColor.Current.TextFrameSelectColor;
                 }
+                if (frameBorder != null)
+                {
+                    frameBorder.BorderColor = UserCenterColor.Current.TextFrameSelectColor;
+                }
                 if (m_UseFocusColor == true)
                 {
                     //姝e父瀛椾綋
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlBackupLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlBackupLogic.cs
index fffeefb..e396d32 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlBackupLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlBackupLogic.cs
@@ -244,6 +244,14 @@
             string fullDir = string.Empty;
             if (upPath == string.Empty)
             {
+                //灏嗘ā鏉挎暟鎹繚瀛樺埌鍒版寚瀹氱殑鏂囦欢澶逛腑
+                var templateName = TemplateData.TemplateCommonLogic.Current.GetNewTemplateFileName();
+                var templateFile = TemplateData.TemplateCommonLogic.Current.SaveTemplateDataToFile(templateName, "HomeTemplate");
+
+                //灏嗘ā鏉縝in鏂囦欢绉诲姩鍒板浠芥枃浠跺す涓�
+                try { System.IO.File.Move(templateFile, System.IO.Path.Combine(Config.Instance.FullPath, templateName)); }
+                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex, "绉诲姩妯℃澘澶辫触"); }
+
                 //鑾峰彇鏈湴鏂囦欢
                 listAllFile = HdlFileLogic.Current.GetRootPathListFile();
                 fullDir = Common.Config.Instance.FullPath;
@@ -265,6 +273,11 @@
 
             foreach (string fileName in listAllFile)
             {
+                //鍒ゆ柇鎸囧畾鏂囦欢鏄惁闇�瑕佷笂浼�(鏍圭洰褰曠殑鎵嶅垽鏂�)
+                if (upPath == string.Empty && this.IsNotUpLoadFile(fileName) == true)
+                {
+                    continue;
+                }
                 if (fileName.EndsWith(".png") == true
                     || fileName.EndsWith(".bin") == true)
                 {
@@ -302,11 +315,6 @@
                     Shared.Common.CommonPage.BackKeyCanClick = true;
                     UserCenterResourse.AccountOption.AppCanSignout = true;
                     return false;
-                }
-                //鍒ゆ柇鏄惁鏄簲璇ヤ笂浼犵殑鏂囦欢
-                if (IsNotUpLoadFile(file) == true && upPath == string.Empty)
-                {
-                    continue;
                 }
                 //鏁寸悊鏁版嵁
                 var datainfo = new FileInfoData();
@@ -784,8 +792,15 @@
             //鍏抽棴杩涘害鏉�
             ProgressFormBar.Current.Close();
 
+            //娓呯┖鍏ㄩ儴鎴块棿
+            HdlRoomLogic.Current.DeleteAllRoom();
+            //娓呯┖鏈湴鍏ㄩ儴鐨勫満鏅暟鎹�
+            HdlSceneLogic.Current.DeleteAllLocalScene();
             //濡傛灉璇诲彇鍒扮殑鏂囦欢瀹屽叏娌℃湁闂锛屽垯娓呯悊鏈湴鐨勬枃浠�
             HdlFileLogic.Current.DeleteAllLocationFile(false);
+
+            //娓呯悊鏈湴鐨勬ā鏉挎枃浠�
+            TemplateData.TemplateCommonLogic.Current.DeleteAllLocalFile();
 
             //娌℃湁閿欒鐨勮瘽锛屽垯绉诲姩鍒板綋鍓嶄綇瀹呮枃浠跺す涓嬮潰
             HdlFileLogic.Current.MoveDirectoryFileToHomeDirectory(tempDirectory, true);
@@ -829,11 +844,14 @@
         /// </summary>
         /// <param name="file"></param>
         /// <returns></returns>
-        public bool IsNotUpLoadFile(string file)
+        private bool IsNotUpLoadFile(string file)
         {
-            if (file == "Config.json")
+            if (file.StartsWith("Device_") == true
+               || file.StartsWith("Gateway_") == true
+               || file.StartsWith("Room_") == true
+               || file.StartsWith("Scene_") == true)
             {
-                //涓嶈兘瑕嗙洊Config鏂囦欢
+                //璁惧,缃戝叧,鎴块棿,鍦烘櫙鏂囦欢涓嶉渶瑕佷笂浼�,瀹冨凡缁忎繚瀛樺湪bin妯℃澘鏂囦欢涓�
                 return true;
             }
             return false;
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAirConditionerLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAirConditionerLogic.cs
index 27d0ccd..2193c34 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAirConditionerLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAirConditionerLogic.cs
@@ -125,7 +125,7 @@
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
                 //鐩存帴娣诲姞缂撳瓨
-                ModelData.DeviceModelDataLogic.Current.SetAcModeSupport(device, data, "SetWritableValue");
+                TemplateData.TemplateDeviceDataLogic.Current.SetAcModeSupport(device, data, null);
                 return true;
             }
             //鍙戦�佹暟鎹�
@@ -155,6 +155,9 @@
                 return false;
             }
 
+            //娣诲姞缂撳瓨
+            TemplateData.TemplateDeviceDataLogic.Current.SetAcModeSupport(device, data, result.JsonData[0]);
+
             return true;
         }
 
@@ -174,7 +177,7 @@
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
                 //鐩存帴娣诲姞缂撳瓨
-                ModelData.DeviceModelDataLogic.Current.SetAcSwingModeSupport(device, data, "SetWritableValue");
+                TemplateData.TemplateDeviceDataLogic.Current.SetAcSwingModeSupport(device, data, null);
                 return true;
             }
             //鍙戦�佹暟鎹�
@@ -204,6 +207,9 @@
                 return false;
             }
 
+            //娣诲姞缂撳瓨
+            TemplateData.TemplateDeviceDataLogic.Current.SetAcSwingModeSupport(device, data, result.JsonData[0]);
+
             return true;
         }
 
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs
index 24b9780..f5ac6ec 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceBindLogic.cs
@@ -76,7 +76,7 @@
             //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                var listBind = ModelData.DeviceModelDataLogic.Current.GetDeviceBindList(device, "Bind/GetDeviceBind");
+                var listBind = TemplateData.TemplateDeviceDataLogic.Current.GetDeviceBindList(device);
                 return new BindObj.GetDeviceBindResponseAllData()
                 {
                     getAllBindResponseData = new BindObj.GetDeviceBindResponseData
@@ -177,7 +177,7 @@
             //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind");
+                return TemplateData.TemplateDeviceDataLogic.Current.AddDeviceBindList(addBindData, null);
             }
 
             var device = Common.LocalDevice.Current.GetDevice(addBindData.DeviceAddr, addBindData.Epoint);
@@ -191,7 +191,7 @@
             }
 
             //淇敼缂撳瓨
-            ModelData.DeviceModelDataLogic.Current.AddDeviceBindList(addBindData, "Bind/GetDeviceBind");
+            TemplateData.TemplateDeviceDataLogic.Current.AddDeviceBindList(addBindData, result.JsonData[0]);
 
             var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.AddedDeviceBindResponseData>(result.ReceiptData);
             return new BindObj.AddedDeviceBindResponseAllData() { addedDeviceBindResponseData = tempData };
@@ -420,7 +420,7 @@
             //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.DeleteDeviceBindList(delDeviceBindData);
+                return TemplateData.TemplateDeviceDataLogic.Current.DeleteDeviceBindList(delDeviceBindData);
             }
             var device = Common.LocalDevice.Current.GetDevice(delDeviceBindData.DeviceAddr, delDeviceBindData.Epoint);
             //鑾峰彇闇�瑕佸彂閫佺殑鏁版嵁
@@ -447,7 +447,7 @@
             }
 
             //淇敼缂撳瓨
-            ModelData.DeviceModelDataLogic.Current.DeleteDeviceBindList(delDeviceBindData);
+            TemplateData.TemplateDeviceDataLogic.Current.DeleteDeviceBindList(delDeviceBindData);
 
             return responseData;
         }
@@ -460,7 +460,7 @@
             //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.ClearDeviceAllBind(device);
+                return TemplateData.TemplateDeviceDataLogic.Current.ClearDeviceAllBind(device);
             }
 
             var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", device.DeviceEpoint }, { "Cluster_ID", 0 }, { "Command", 5006 } };
@@ -472,7 +472,7 @@
             }
 
             //淇敼缂撳瓨
-            ModelData.DeviceModelDataLogic.Current.ClearDeviceAllBind(device);
+            TemplateData.TemplateDeviceDataLogic.Current.ClearDeviceAllBind(device);
 
             var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<BindObj.ClearBindInfoResponseData>(result.ReceiptData);
             return new BindObj.ClearBindInfoResponseAllData { clearBindInfoResponseData = tempData };
@@ -660,7 +660,7 @@
             //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.ConfigurePanelKeyModel(device, value, clusterID, "SetWritableValue");
+                return TemplateData.TemplateDeviceDataLogic.Current.ConfigurePanelKeyModel(device, value, clusterID, null);
             }
             //鑾峰彇鍙戦�佹暟鎹�
             var sendData = this.GetConfigureHdlKeyCommandText(device.DeviceAddr, device.DeviceEpoint, value, clusterID);
@@ -671,7 +671,7 @@
             }
 
             //淇敼缂撳瓨
-            ModelData.DeviceModelDataLogic.Current.ConfigurePanelKeyModel(device, value, clusterID, "SetWritableValue");
+            TemplateData.TemplateDeviceDataLogic.Current.ConfigurePanelKeyModel(device, value, clusterID, result.JsonData[0]);
 
             var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData);
             return new CommonDevice.SetWritableValueResponAllData { setWritableValueResponData = tempData };
@@ -685,7 +685,7 @@
             //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.ReadPanelConfigureKeyModel(device);
+                return TemplateData.TemplateDeviceDataLogic.Current.ReadPanelConfigureKeyModel(device);
             }
 
             var JObject = new JObject {{ "DeviceAddr",device.DeviceAddr },{ "Epoint", device.DeviceEpoint },
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCommonLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCommonLogic.cs
index 02d698c..e92d774 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCommonLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCommonLogic.cs
@@ -67,6 +67,8 @@
         {
             var reResult = new ReceiptGatewayResult();
             reResult.listReceiptData = new string[listReceiptTopic.Count];
+            reResult.JsonData = new string[listReceiptTopic.Count];
+
             var myGateway = device.Gateway;
             if (myGateway == null)
             {
@@ -120,6 +122,12 @@
                             return;
                         }
                         reResult.listReceiptData[i] = jobject["Data"].ToString();
+                        if (jobject.Property("Time") != null)
+                        {
+                            //闇�瑕佺Щ闄ime杩欎釜瀛楁
+                            jobject.Remove("Time");
+                        }
+                        reResult.JsonData[i] = jobject.ToString();
                         receiptCount++;
                     }
                 }
@@ -151,7 +159,6 @@
                 {
                     //濡傛灉鍙湁涓�涓富棰�,鍒欐浛鎹㈠彉閲�
                     reResult.ReceiptData = reResult.listReceiptData[0];
-                    reResult.listReceiptData = null;
                 }
             }
 
@@ -242,6 +249,13 @@
                     if (command == receiptCommand)
                     {
                         reResult.ReceiptData = responseData.PassData;
+                        reResult.JsonData = new string[1];
+                        if (jobject.Property("Time") != null)
+                        {
+                            //闇�瑕佺Щ闄ime杩欎釜瀛楁
+                            jobject.Remove("Time");
+                        }
+                        reResult.JsonData[0] = jobject.ToString();
                     }
                 }
             };
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs
index 8a29182..a3af533 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs
@@ -1,6 +1,6 @@
 锘縰sing Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
-using Shared.Phone.ModelData;
+using Shared.Phone.TemplateData;
 using System;
 using System.Collections.Generic;
 using System.Text;
@@ -51,7 +51,7 @@
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
                 //娣诲姞缂撳瓨
-                DeviceModelDataLogic.Current.SetCurtainHandPullControl(device, bolStatu, "SetWritableValue");
+                TemplateDeviceDataLogic.Current.SetCurtainHandPullControl(device, bolStatu, null);
                 return true;
             }
             //鑾峰彇鍙戦�佺殑鍛戒护瀛楃
@@ -81,6 +81,9 @@
                 this.ShowTipMsg(msg);
                 return false;
             }
+            //娣诲姞缂撳瓨
+            TemplateDeviceDataLogic.Current.SetCurtainHandPullControl(device, bolStatu, result.JsonData[0]);
+
             return true;
         }
 
@@ -150,7 +153,7 @@
             //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.SetCurtainDirection(device, isDirectionReversed, "SetWritableValue");
+                return TemplateDeviceDataLogic.Current.SetCurtainDirection(device, isDirectionReversed, null);
             }
             //鑾峰彇缂栬緫绐楀笜鏂瑰悜鐨勫懡浠ゅ瓧绗�
             var sendData = this.GetCurtainDirectionCommadText(device.DeviceAddr, device.DeviceEpoint, isDirectionReversed);
@@ -159,6 +162,9 @@
             {
                 return null;
             }
+
+            //娣诲姞缂撳瓨
+            TemplateDeviceDataLogic.Current.SetCurtainDirection(device, isDirectionReversed, result.JsonData[0]);
 
             var tempData = JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData);
             return new CommonDevice.SetWritableValueResponAllData { setWritableValueResponData = tempData };
@@ -199,7 +205,7 @@
             //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.SetCurtainLimitPoint(rollershade, upLimit, downLimit, curtainLength, "SetWritableValue");
+                return TemplateData.TemplateDeviceDataLogic.Current.SetCurtainLimitPoint(rollershade, upLimit, downLimit, curtainLength, null);
             }
             //鑾峰彇缂栬緫寮�鍚堝笜闄愪綅鐨勫懡浠ゅ瓧绗�
             var sendData = this.GetAutoOpenCurtainLimitPointCommandText(rollershade.DeviceAddr, rollershade.DeviceEpoint, upLimit, downLimit);
@@ -222,6 +228,9 @@
                 return false;
             }
 
+            //娣诲姞缂撳瓨
+            TemplateDeviceDataLogic.Current.SetCurtainLimitPoint(rollershade, upLimit, downLimit, curtainLength, result.JsonData[0]);
+
             return true;
         }
 
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceOtherLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceOtherLogic.cs
index ff85b85..20fa781 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceOtherLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceOtherLogic.cs
@@ -313,7 +313,7 @@
                     //鐑熼浘
                     if (ias.iASInfo?.Alarm1 == 1)
                     {
-                        return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Alarm);
+                        return Language.StringByID(R.MyInternationalizationString.uSmogAlarm);
                     }
                     return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Safe);
                 }
@@ -322,9 +322,9 @@
                     //pir
                     if (ias.iASInfo?.Alarm1 == 1)
                     {
-                        return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Alarm);
+                        return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_HavePerson);
                     }
-                    return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Safe);
+                    return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_NoPerson);
                 }
                 else if (info.ConcreteType == DeviceConcreteType.Sensor_Keyfob)
                 {
@@ -340,9 +340,9 @@
                     //杩愬姩浼犳劅鍣�
                     if (ias.iASInfo?.Alarm1 == 1)
                     {
-                        return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Alarm);
+                        return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_HavePerson);
                     }
-                    return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_Normal);
+                    return Language.StringByID(R.MyInternationalizationString.IASZone_Statu_NoPerson);
                 }
                 else if (info.ConcreteType == DeviceConcreteType.Sensor_EmergencyButton)
                 {
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs
index d1eddb8..603dce4 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs
@@ -118,7 +118,7 @@
             //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.GetPanelColorInfo(device, keyNum);
+                return TemplateData.TemplateDeviceDataLogic.Current.GetPanelColorInfo(device, keyNum);
             }
             //鍙戦�佹暟鎹� keyNum杞负16杩涘埗 鑼冨洿锛�01~10
             var passData = "0504040101" + Convert.ToString((int)keyNum, 16).ToUpper().PadLeft(2, '0');
@@ -215,7 +215,7 @@
             //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.SetPanelColorInfo(device, keyColorData, keyNumStatus, "ZbDataPassthrough");
+                return TemplateData.TemplateDeviceDataLogic.Current.SetPanelColorInfo(device, keyColorData, keyNumStatus, null);
             }
             //鑾峰彇閰嶇疆鎸夐敭鎸囩ず鐏鑹茬殑鍛戒护瀛楃
             var sendData = this.GetPanelColorCommandText(device.DeviceAddr, keyColorData, keyNumStatus);
@@ -228,6 +228,10 @@
             var tempD = new CommonDevice.ResponseData();
             tempD.command = data[12].ToString() + data[13].ToString() + data[10].ToString() + data[11].ToString();
             tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16);
+
+            //娣诲姞缂撳瓨
+            TemplateData.TemplateDeviceDataLogic.Current.SetPanelColorInfo(device, keyColorData, keyNumStatus, result.JsonData[0]);
+
             return new CommonDevice.ResponseAllData { responseData = tempD };
         }
 
@@ -386,7 +390,7 @@
             //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.GetDeviceLightSettion(device);
+                return TemplateData.TemplateDeviceDataLogic.Current.GetDeviceLightSettion(device);
             }
             //鑾峰彇鍙戦�佺殑鍛戒护瀛楃
             var passData = "050604010101";
@@ -422,7 +426,7 @@
             //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.SetDeviceLightSettion(device, directionsLevel, backlightLevel, "ZbDataPassthrough");
+                return TemplateData.TemplateDeviceDataLogic.Current.SetDeviceLightSettion(device, directionsLevel, backlightLevel, null);
             }
             //鑾峰彇淇敼闈㈡澘鐨勪寒搴﹁皟鑺傜殑鍛戒护瀛楃
             var sendData = this.GetPanelLevelCommadText(device.DeviceAddr, directionsLevel, backlightLevel);
@@ -456,7 +460,7 @@
             }
 
             //淇敼缂撳瓨
-            ModelData.DeviceModelDataLogic.Current.SetDeviceLightSettion(device, directionsLevel, backlightLevel, "ZbDataPassthrough");
+            TemplateData.TemplateDeviceDataLogic.Current.SetDeviceLightSettion(device, directionsLevel, backlightLevel, result.JsonData[0]);
 
             return true;
         }
@@ -611,7 +615,7 @@
             //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.GetDeviceEnergyConservationMode(device);
+                return TemplateData.TemplateDeviceDataLogic.Current.GetDeviceEnergyConservationMode(device);
             }
             //鍙戦�佸懡浠�
             string passData = "050804010101";
@@ -677,7 +681,7 @@
             //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.SetDeviceEnergyConservationMode(device, modeEnable, modeTime, level, "ZbDataPassthrough");
+                return TemplateData.TemplateDeviceDataLogic.Current.SetDeviceEnergyConservationMode(device, modeEnable, modeTime, level, null);
             }
             //鑾峰彇璁剧疆璁惧鐨勮妭鑳芥ā寮忕殑鍛戒护瀛楃
             var sendData = this.GetDeviceEnergyConservationModeCommandText(device.DeviceAddr, modeEnable, modeTime, level);
@@ -707,7 +711,7 @@
             }
 
             //淇敼缂撳瓨
-            ModelData.DeviceModelDataLogic.Current.SetDeviceEnergyConservationMode(device, modeEnable, modeTime, level, "ZbDataPassthrough");
+            TemplateData.TemplateDeviceDataLogic.Current.SetDeviceEnergyConservationMode(device, modeEnable, modeTime, level, result.JsonData[0]);
 
             return true;
         }
@@ -1048,7 +1052,7 @@
             //濡傛灉鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.GetPanelVibrationInfo(device);
+                return TemplateData.TemplateDeviceDataLogic.Current.GetPanelVibrationInfo(device);
             }
             //鍙戦�佹暟鎹�
             var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
@@ -1083,7 +1087,7 @@
             //濡傛灉鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.SetPanelVibrationInfo(device, datainfo, "ClientDataPassthrough");
+                return TemplateData.TemplateDeviceDataLogic.Current.SetPanelVibrationInfo(device, datainfo, null);
             }
             //鑾峰彇缂栬緫闈㈡澘闇囧姩鍔熻兘鐨勫懡浠ゅ瓧绗�
             var sendData = this.GetPanelVibrationCommandText(device.DeviceAddr, datainfo);
@@ -1096,6 +1100,9 @@
                 this.ShowTipMsg(errorMsg);
                 return false;
             }
+            //娣诲姞缂撳瓨
+            TemplateData.TemplateDeviceDataLogic.Current.SetPanelVibrationInfo(device, datainfo, result.JsonData[0]);
+
             return true;
         }
 
@@ -1258,7 +1265,6 @@
         private void LoadDryContactFunctionFromLocaltion()
         {
             this.dicDryContactFunction = new Dictionary<string, DryContactFunctionInfo>();
-
             byte[] filebyte = HdlFileLogic.Current.ReadFileByteContent(DirNameResourse.DryContactFunctionFile);
             if (filebyte == null)
             {
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePirSensorLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePirSensorLogic.cs
index ab171e6..81552d6 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePirSensorLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePirSensorLogic.cs
@@ -133,7 +133,7 @@
             //濡傛灉褰撳墠浣忓畢鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.GetPirSensorLightSettion(device);
+                return TemplateData.TemplateDeviceDataLogic.Current.GetPirSensorLightSettion(device);
             }
             var sendData = this.GetPirSensorParamateCommadText(device.DeviceAddr);
             var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway2(device, sendData, "0302", 34, 9);
@@ -225,7 +225,7 @@
             //濡傛灉鏄櫄鎷熶綇瀹�
             if (Common.Config.Instance.Home.IsVirtually == true)
             {
-                return ModelData.DeviceModelDataLogic.Current.SetPirSensorLightSettion(device, configureParamates, "ClientDataPassthrough");
+                return TemplateData.TemplateDeviceDataLogic.Current.SetPirSensorLightSettion(device, configureParamates, null);
             }
             //鍙戦�佹暟鎹�
             var sendData = this.GetPirSensorSettionCommandText(device.DeviceAddr, configureParamates);
@@ -238,6 +238,9 @@
             var tempD = new IASZone.ResponseData();
             tempD.command = data[12].ToString() + data[13].ToString() + data[10].ToString() + data[11].ToString();
             tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16);
+
+            //娣诲姞缂撳瓨
+            TemplateData.TemplateDeviceDataLogic.Current.SetPirSensorLightSettion(device, configureParamates, result.JsonData[0]);
 
             return new CommonDevice.ResponseAllData { responseData = tempD };
         }
@@ -258,10 +261,10 @@
             return jObject.ToString();
         }
 
-    /// <summary>
-    /// 鑾峰彇淇敼PIR浼犳劅鍣ㄩ厤缃殑鍛戒护瀛楃
-    /// </summary>
-    private string GetPIRSensorSettionPassData(IASZone.ConfigureParamates configureParamates)
+        /// <summary>
+        /// 鑾峰彇淇敼PIR浼犳劅鍣ㄩ厤缃殑鍛戒护瀛楃
+        /// </summary>
+        private string GetPIRSensorSettionPassData(IASZone.ConfigureParamates configureParamates)
         {
             string data = "";
             string dataLength = "10";
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFileLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFileLogic.cs
index 640cb70..db14cc1 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFileLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFileLogic.cs
@@ -60,6 +60,10 @@
             //LOG鍑哄姏銆愭枃浠跺す銆�
             this.CreateDirectory(DirNameResourse.LogDirectory);
 
+            //妯℃澘缂撳瓨瀛樻斁鐨勩�愭枃浠跺す銆�
+            this.CreateDirectory(DirNameResourse.LocalTemplateDirectory);
+            this.CreateDirectory(DirNameResourse.AllResidenceTemplateDirectory);
+
             //鐢ㄦ埛鍥剧墖鐩綍璺緞銆愭枃浠跺す銆�
             if (UserCenterResourse.AccountOption.UserPictruePath != string.Empty)
             {
@@ -276,6 +280,12 @@
             var rootPath = Common.Config.Instance.FullPath;
             foreach (var file in listFile)
             {
+                if (file.StartsWith("ModelData_") == true)
+                {
+                    //澶嶅埗妯℃澘鏁版嵁鏂囦欢鍒版寚瀹氭枃浠跺す
+                    TemplateData.TemplateCommonLogic.Current.CopyTemplateFileToLocalDirectory2(System.IO.Path.Combine(fulldirectory, file));
+                    continue;
+                }
                 string oldFile = System.IO.Path.Combine(fulldirectory, file);
                 string newFile = System.IO.Path.Combine(rootPath, file);
                 //绉诲姩鏂囦欢
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs
index 8be19e6..2bdb33a 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlFirmwareUpdateLogic.cs
@@ -1,6 +1,7 @@
 锘縰sing System;
 using System.Collections.Generic;
 using System.Text;
+using ZigBee.Device;
 
 namespace Shared.Phone.UserCenter
 {
@@ -310,6 +311,45 @@
 
         #endregion
 
+        #region 鈻� 鑾峰彇鎸囧畾鍥轰欢鐗堟湰淇℃伅_______________
+
+        /// <summary>
+        /// 鑾峰彇鎸囧畾鍥轰欢鐨勭増鏈俊鎭�(濡傛灉杩斿洖Null,鍒欒〃绀烘病鏈夎繖涓浐浠�)
+        /// </summary>
+        /// <param name="levelType">鍥轰欢闃剁骇鍒嗙被</param>
+        /// <param name="HardwareVersion">纭欢鐗堟湰</param>
+        /// <param name="imgType">闀滃儚绫诲瀷</param>
+        /// <param name="nowVersion">鐜板湪鐨勭増鏈�</param>
+        /// <returns></returns>
+        public static FirmwareVersionInfo GetFirmwareVersionInfo(FirmwareLevelType levelType, string HardwareVersion, string imgType, int nowVersion)
+        {
+            //闀滃儚绫诲瀷
+            var listdata = GetFirmwareVersionListInfo(levelType, HardwareVersion, imgType);
+            foreach (var verInfo in listdata)
+            {
+                if (verInfo.Name.EndsWith(".bin") == true)
+                {
+                    //瀹冧笉鏄崌绾у浐浠�,  .bin鏄壒娈婄殑
+                    continue;
+                }
+                int testVersion = Convert.ToInt32(verInfo.FirmwareVersion.ToString().PadLeft(6, '0').Substring(2, 2));
+                if (testVersion % 2 != 0)
+                {
+                    //涓棿閭d釜byte涓哄鏁版椂锛屼唬琛ㄦ槸娴嬭瘯鐗堟湰,鍦ㄦ樉绀烘渶鏂扮増鏈椂,涓嶉渶瑕佹樉绀猴紝浣嗘槸鍦ㄥ巻鍙茬増鏈偅閲屽彲浠ユ樉绀�
+                    //涓棿閭d釜byte涓哄伓鏁版椂,浠h〃鏄寮忕増鏈�
+                    continue;
+                }
+
+                if (verInfo.FirmwareVersion == nowVersion)
+                {
+                    return verInfo;
+                }
+            }
+            return null; ;
+        }
+
+        #endregion
+
         #region 鈻� 鍥轰欢瀛樺湪妫�娴媉______________________
 
         /// <summary>
@@ -339,6 +379,262 @@
             return true;
         }
 
+        /// <summary>
+        /// 妫�娴嬭Ota璁惧鐨勫崌绾у浐浠舵槸鍚﹀瓨鍦�
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <returns></returns>
+        public static bool IsEsixtDeviceFirmwareFile(OTADevice device)
+        {
+            var fileFullName = GetDeviceFirmwareFile(device);
+            return System.IO.File.Exists(fileFullName);
+        }
+
+        /// <summary>
+        /// 鑾峰彇ota鎸囧畾鐨勫崌绾у浐浠跺悕瀛�(鍏ㄨ矾寰�)
+        /// </summary>
+        /// <param name="device">璁惧瀵硅薄</param>
+        /// <returns></returns>
+        public static string GetDeviceFirmwareFile(OTADevice device)
+        {
+            //纭欢鐗堟湰_闀滃儚ID_鍥轰欢鐗堟湰
+            string fileName = device.HwVersion + "_" + device.ImgTypeId + "_" + device.ImgVersion;
+            return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "Device_" + fileName + ".ota");
+        }
+
+        /// <summary>
+        /// 鑾峰彇缃戝叧Linux鐨勫崌绾у浐浠跺悕瀛�(鍏ㄨ矾寰�)
+        /// </summary>
+        /// <param name="zbGateway">缃戝叧瀵硅薄</param>
+        /// <returns></returns>
+        public static string GetGatewayLinuxFirmwareFile(ZbGateway zbGateway)
+        {
+            string fileName = zbGateway.LinuxHardVersion + "_" + zbGateway.LinuxImageType + "_" + zbGateway.LinuxFirmwareVersion;
+            return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "Linux_" + fileName + ".ota");
+        }
+
+        /// <summary>
+        /// 鑾峰彇缃戝叧鍗忚皟鍣ㄧ殑鍗囩骇鍥轰欢鍚嶅瓧(鍏ㄨ矾寰�)
+        /// </summary>
+        /// <param name="zbGateway">缃戝叧瀵硅薄</param>
+        /// <returns></returns>
+        public static string GetGatewayCoordinatorFirmwareFile(ZbGateway zbGateway)
+        {
+            string fileName = zbGateway.CoordinatorHardVersion + "_" + zbGateway.CoordinatorImageId + "_" + zbGateway.CoordinatorFirmwareVersion;
+            return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "Coordinator_" + fileName + ".ota");
+        }
+
+        /// <summary>
+        /// 鑾峰彇缃戝叧铏氭嫙椹卞姩鐨勫崌绾у浐浠跺悕瀛�(鍏ㄨ矾寰�)
+        /// </summary>
+        /// <param name="codeObj">铏氭嫙椹卞姩鏁版嵁</param>
+        /// <returns></returns>
+        public static string GetGatewayDriveCodeFirmwareFile(ZbGatewayData.DriveCodeObj codeObj)
+        {
+            string fileName = codeObj.DriveHwVersion + "_" + codeObj.DriveImageType + "_" + codeObj.DriveFwVersion;
+            return System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, "DriveCode_" + fileName + ".ota");
+        }
+
+        #endregion
+
+        #region 鈻� 涓嬭浇妯℃澘鍥轰欢_______________________
+
+        /// <summary>
+        /// 涓嬭浇妯℃澘涓綉鍏冲拰璁惧鐨勫浐浠�
+        /// </summary>
+        /// <param name="fullFileName"></param>
+        /// <param name="i_Msg"></param>
+        public static int DownLoadTemplateDeviceFirmware(string fullFileName, string i_Msg)
+        {
+            //浠庢ā鏉垮綋涓幏鍙栬澶囧拰缃戝叧瀵硅薄
+            var listTempDevice = new List<OTADevice>();
+            var listTempGateway = new List<ZbGateway>();
+            TemplateData.TemplateCommonLogic.Current.GetDeviceObjectFromTemplate(fullFileName, ref listTempDevice, ref listTempGateway);
+
+            //鑾峰彇闇�瑕佷笅杞界殑鍥轰欢鏁版嵁
+            var listVersion = GetNeedToDownLoadVersionData(listTempDevice, listTempGateway);
+            if (listVersion.Count == 0)
+            {
+                return 0;
+            }
+            //鎵撳紑杩涘害鏉�
+            ProgressFormBar.Current.Start();
+            ProgressFormBar.Current.SetMsg(i_Msg);
+            ProgressFormBar.Current.SetValue(0, 1);
+
+            System.Threading.Thread.Sleep(1000);
+
+            var dicFirmwareName = new Dictionary<string, string>();
+            var fileData = HdlFileLogic.Current.ReadFileTextContent(DirNameResourse.FirmwareUpdateList);
+            if (fileData != null)
+            {
+                //鏈湴瀛樻斁鐨勫浐浠跺師鏉ョ殑鍚嶅瓧(鍥犱负璁惧鍗囩骇鏃�,瀹冮渶瑕佽瘑鍒枃浠跺悕瀛楅噷闈㈠寘鍚殑鐗规畩瀛楃)
+                //key:纭欢鐗堟湰_闀滃儚ID_鍥轰欢鐗堟湰  value:鍥轰欢鍘熸潵鐨勫悕瀛�
+                dicFirmwareName = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(fileData);
+            }
+
+            //鍥轰欢瀛樺偍璺緞
+            string firmwareDir = DirNameResourse.FirmwareUpdateDirectory;
+            int nowCount = 0;
+            foreach (var versionData in listVersion)
+            {
+                nowCount++;
+                //鑾峰彇鍗囩骇鍥轰欢淇℃伅
+                var result = AddFirmwareVersionInfo(versionData.levelType, versionData.HwVersion, versionData.ImageType);
+                if (result == -1)
+                {
+                    ProgressFormBar.Current.Close();
+                    return -1;
+                }
+                //鑾峰彇褰撳墠杩欎釜鐗堟湰鐨勫浐浠朵俊鎭�
+                var versionFirmware = GetFirmwareVersionInfo(versionData.levelType, versionData.HwVersion, versionData.ImageType, versionData.FirmwareVersion);
+                if (versionFirmware == null)
+                {
+                    //浜戠娌℃湁杩欎釜鐗堟湰  杩涘害鍊�
+                    ProgressFormBar.Current.SetValue(nowCount, listVersion.Count);
+                    continue;
+                }
+                //鍘讳笅杞借繖涓浐浠�
+                var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = versionFirmware.DistributedMark };
+                var byteData = UserCenterLogic.GetByteResponseDataByRequestHttps("FirmwareMana/DownloadPlatformUploadFirmware", false, pra, null, true);
+                if (byteData == null)
+                {
+                    ProgressFormBar.Current.Close();
+                    return -1;
+                }
+                //淇濆瓨鍥轰欢
+                var saveFile = System.IO.Path.Combine(firmwareDir, versionData.FileDiv + versionData.HwVersion + "_" + versionData.ImageType + "_" + versionData.FirmwareVersion + ".ota");
+                HdlFileLogic.Current.SaveTextToFile(saveFile, Encoding.UTF8.GetString(byteData));
+                dicFirmwareName[saveFile] = versionFirmware.Name;
+
+                //杩涘害鍊�
+                ProgressFormBar.Current.SetValue(nowCount, listVersion.Count);
+            }
+            //淇濆瓨鍒楄〃鍚嶅瓧
+            HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName);
+            ProgressFormBar.Current.Close();
+
+            return 1;
+        }
+
+        /// <summary>
+        /// 鑾峰彇闇�瑕佷笅杞界殑鍥轰欢鏁版嵁
+        /// </summary>
+        /// <param name="listDevice">璁惧鍒楄〃</param>
+        /// <param name="listGateway">缃戝叧鍒楄〃</param>
+        /// <returns></returns>
+        private static List<TemplateDeviceVersion> GetNeedToDownLoadVersionData(List<OTADevice> listDevice, List<ZbGateway> listGateway)
+        {
+            //瀛樺偍璺緞
+            string firmwareDir = DirNameResourse.FirmwareUpdateDirectory;
+            HdlFileLogic.Current.CreateDirectory(firmwareDir);
+
+            var listVersion = new List<TemplateDeviceVersion>();
+            var listCheck = new HashSet<string>();
+            foreach (var device in listDevice)
+            {
+                //璁惧鐨勫崌绾у浐浠跺悕瀛�
+                var fileFullName = GetDeviceFirmwareFile(device);
+                if (System.IO.File.Exists(fileFullName) == false && listCheck.Contains(fileFullName) == false)
+                {
+                    listCheck.Add(fileFullName);
+                    //璁惧
+                    listVersion.Add(new TemplateDeviceVersion
+                    {
+                        FileDiv = "Device_",
+                        levelType = FirmwareLevelType.ZigbeeDevice,
+                        HwVersion = device.HwVersion.ToString(),
+                        ImageType = device.ImgTypeId.ToString(),
+                        FirmwareVersion = device.ImgVersion
+                    });
+                }
+            }
+            foreach (var gateway in listGateway)
+            {
+                //Linux鐨勫崌绾у浐浠跺悕瀛�
+                var fileFullName = GetGatewayLinuxFirmwareFile(gateway);
+                if (System.IO.File.Exists(fileFullName) == false && listCheck.Contains(fileFullName) == false)
+                {
+                    listCheck.Add(fileFullName);
+                    //Linux
+                    listVersion.Add(new TemplateDeviceVersion
+                    {
+                        FileDiv = "Linux_",
+                        levelType = FirmwareLevelType.Linux,
+                        HwVersion = gateway.LinuxHardVersion.ToString(),
+                        ImageType = gateway.LinuxImageType.ToString(),
+                        FirmwareVersion = gateway.LinuxFirmwareVersion
+                    });
+                }
+                //鍗忚皟鍣ㄧ殑鍗囩骇鍥轰欢鍚嶅瓧
+                fileFullName = GetGatewayCoordinatorFirmwareFile(gateway);
+                if (System.IO.File.Exists(fileFullName) == false && listCheck.Contains(fileFullName) == false)
+                {
+                    listCheck.Add(fileFullName);
+                    //鍗忚皟鍣�
+                    listVersion.Add(new TemplateDeviceVersion
+                    {
+                        FileDiv = "Coordinator_",
+                        levelType = FirmwareLevelType.Coordinator,
+                        HwVersion = gateway.CoordinatorHardVersion.ToString(),
+                        ImageType = gateway.CoordinatorImageId.ToString(),
+                        FirmwareVersion = gateway.CoordinatorFirmwareVersion
+                    });
+                }
+                //杩欎釜缃戝叧闇�瑕佹湁铏氭嫙椹卞姩杩欎釜涓滆タ鎵嶈
+                if (gateway.LinuxImageType != 6)
+                {
+                    //铏氭嫙椹卞姩鍙�
+                    foreach (var data in gateway.DriveCodeList)
+                    {
+                        //铏氭嫙椹卞姩鍙风殑鍗囩骇鍥轰欢鍚嶅瓧
+                        fileFullName = GetGatewayDriveCodeFirmwareFile(data);
+                        if (System.IO.File.Exists(fileFullName) == false && listCheck.Contains(fileFullName) == false)
+                        {
+                            listCheck.Add(fileFullName);
+                            //铏氭嫙椹卞姩鍙�
+                            listVersion.Add(new TemplateDeviceVersion
+                            {
+                                FileDiv = "DriveCode_",
+                                levelType = FirmwareLevelType.VirtualDevice,
+                                HwVersion = data.DriveHwVersion.ToString(),
+                                ImageType = data.DriveImageType.ToString(),
+                                FirmwareVersion = data.DriveFwVersion
+                            });
+                        }
+                    }
+                }
+            }
+            return listVersion;
+        }
+
+        /// <summary>
+        /// 妯℃澘璁惧鐨勭増鏈俊鎭�
+        /// </summary>
+        private class TemplateDeviceVersion
+        {
+            /// <summary>
+            /// 鏂囦欢鍖哄垎
+            /// </summary>
+            public string FileDiv = string.Empty;
+            /// <summary>
+            /// 鍥轰欢闃剁骇鍖哄垎
+            /// </summary>
+            public FirmwareLevelType levelType;
+            /// <summary>
+            /// 纭欢鐗堟湰
+            /// </summary>
+            public string HwVersion = string.Empty;
+            /// <summary>
+            /// 闀滃儚ID
+            /// </summary>
+            public string ImageType = string.Empty;
+            /// <summary>
+            /// 鍥轰欢鐗堟湰
+            /// </summary>
+            public int FirmwareVersion = 0;
+        }
+
         #endregion
 
         #region 鈻� 涓�鑸柟娉昣__________________________
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
index bb9ce8a..605bbc4 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
@@ -660,6 +660,11 @@
                     return false;
                 }
             }
+            //鍒锋柊鍏ㄩ儴鍦烘櫙
+            if (this.IsMainGateway(realWay) == 1)
+            {
+                HdlSceneLogic.Current.RefreshSceneUIList(false);
+            }
 
             //鑾峰彇鍏ㄩ儴璁惧
             int result = LocalDevice.Current.SetDeviceToMemmoryByGateway(realWay, false);
@@ -1538,6 +1543,11 @@
         /// <returns></returns>
         public List<FirmwareVersionInfo> GetGatewayAllNewVersion(ZbGateway zbGateway, ShowErrorMode mode = ShowErrorMode.YES)
         {
+            //濡傛灉鏄睍绀烘ā鏉�,鎴栬�呮槸铏氭嫙浣忓畢鐨勮瘽,娌℃湁浠�涔堟柊鐗堟湰鐨勮娉�
+            if (Common.Config.Instance.Home.IsVirtually == true || Common.Config.Instance.Home.IsShowTemplate == true)
+            {
+                return new List<FirmwareVersionInfo> { null, null, null };
+            }
             //鑾峰彇缃戝叧鐗堟湰淇℃伅
             var result = this.GetGatewayInfo(zbGateway, false, mode);
             if (result == null)
@@ -1623,6 +1633,13 @@
         /// <returns></returns>
         public List<ZbGatewayData.DriveCodeObj> GetListVDDriveCode(ZbGateway zbGateway)
         {
+            //濡傛灉鏄睍绀烘ā鏉�,鎴栬�呮槸铏氭嫙浣忓畢鐨勮瘽,鐩存帴鍙栫紦瀛�
+            if (Common.Config.Instance.Home.IsVirtually == true || Common.Config.Instance.Home.IsShowTemplate == true)
+            {
+                //鍙栨湰鍦板璞�
+                var localgw = this.GetLocalGateway(zbGateway.GwId);
+                return localgw != null ? zbGateway.DriveCodeList : zbGateway.DriveCodeList;
+            }
             var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 505 } };
             var result = this.SendJobjectDataToGateway(zbGateway, "VirtualDrive/CatDriveCode", jObject.ToString(), "VirtualDrive/CatDriveCode_Respon");
             if (result.ErrorMsg != null)
@@ -1891,6 +1908,11 @@
                 }
                 return false;
             }
+            if (((decimal)Longitude) == 0 && ((decimal)Latitude) == 0)
+            {
+                //娌℃湁閰嶇疆杩囩粡绾害
+                return true;
+            }
 
             int result = -1;
             Action<string, string> action = (topic, message) =>
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs
index 117fe8c..ea1c159 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs
@@ -288,7 +288,8 @@
                         {
                             if (attData.AttributeId == 0)
                             {
-                                ((ColorTemperatureLight)locadevice).IsBuzzerRing = attData.AttriButeData == 1 ? true : false;
+                                //杩欎釜鏄姤璀︽寔缁椂闂�(澶т簬2绉掓椂,鏍囪涓鸿繕鍦ㄥ搷鐫�)
+                                ((ColorTemperatureLight)locadevice).IsBuzzerRing = attData.AttriButeData > 2 ? true : false;
                             }
                         }
                     }
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
index 38c531b..c3269e3 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
@@ -298,7 +298,6 @@
             Common.LocalDevice.Current.DeleteRealDeviceByRoomId(roomId);
             if (refreshLeftView == true)
             {
-                //HdlAutoBackupLogic.DeleteFile(roomFilePath);
                 //鍒锋柊鎴块棿瑙嗗浘鍒楄〃
                 this.RefreshRoomListView();
             }
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSafeguardLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSafeguardLogic.cs
index 0917329..05702e2 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSafeguardLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSafeguardLogic.cs
@@ -231,6 +231,9 @@
             zoneInfo.ZoneId = allData.ZoneId;
             zoneInfo.ZoneName = allData.ZoneName;
 
+            //淇℃伅鎺ㄩ��
+            zoneInfo.InformationPush = allData.IsDisablePushMessage;
+
             //澶勭悊璁惧
             foreach (var data2 in allData.DeviceList)
             {
@@ -285,9 +288,6 @@
 
             zoneInfo.dicAlarmDevice.Clear();
             zoneInfo.dicScenes.Clear();
-
-            //淇℃伅鎺ㄩ��
-            zoneInfo.InformationPush = resData.IsDisablePushMessage;
 
             foreach (var data in resData.Actions)
             {
@@ -1737,10 +1737,6 @@
         /// <returns>0:鎺ㄩ��  1:涓嶆帹閫�</returns>
         public int GetGarrisonInformationPushStatu(int zoneId)
         {
-            if (zoneId > 3)
-            {
-                zoneId = 3;
-            }
             if (this.dicAllZoneInfo.ContainsKey(zoneId) == false)
             {
                 return 1;
@@ -2335,7 +2331,7 @@
             /// </summary>
             public string ZoneName;
             /// <summary>
-            /// 淇℃伅鎺ㄩ�� 0:鎺ㄩ��  1:涓嶆帹閫� (鍙湁闃插尯ID:1,2,3鎵嶄細鏈夈��4,5鐨勯兘褰掍负3,鍥犱负瀹冩槸浠ラ槻鍖烘ā寮廔D(ActionType)涓哄崟浣嶇殑)
+            /// 淇℃伅鎺ㄩ�� 0:鎺ㄩ��  1:涓嶆帹閫� 
             /// </summary>
             public int InformationPush = 1;
             /// <summary>
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
index d087a84..3b90c1d 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlSceneLogic.cs
@@ -178,7 +178,11 @@
                 if (topic == gatewayID + "/" + "Scene/GetAllInfo_Respon")
                 {
                     var sceneGetAllInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene.GetSceneAllInfo>(jobject["Data"].ToString());
-                    listScene.Add(sceneGetAllInfo);
+                    if (sceneGetAllInfo.ScenesSum != 0)
+                    {
+                        //濡傛灉缃戝叧閲岄潰娌℃湁鍦烘櫙鐨勮瘽,瀹冧篃浼氭帹杩欎釜涓滆タ杩囨潵
+                        listScene.Add(sceneGetAllInfo);
+                    }
 
                     //鏇村鎺ユ敹寰楀埌鍦烘櫙
                     canReceve = true;
@@ -359,12 +363,15 @@
         /// <summary>
         /// 鑾峰彇娣诲姞鎵ц鐩爣鍒板満鏅殑鍛戒护
         /// </summary>
-        /// <param name="sceneId"></param>
-        /// <param name="listAdjustTarget"></param>
+        /// <param name="sceneId">鍦烘櫙id</param>
+        /// <param name="listAdjustTarget">鎵ц鐩爣</param>
+        /// <param name="dicChangedMac">浜ゆ崲mac key:listAdjustTarget褰撳墠鐨凪ac value:杞崲鐨刴ac</param>
+        /// <param name="sceneName">鍦烘櫙鍚嶇О(鐗规畩鐢ㄩ��,璇峰嬁璁剧疆)</param>
         /// <returns></returns>
-        public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget)
+        public List<string> GetAddTargetToSceneCommand(int sceneId, List<Scene.DeviceListData> listAdjustTarget, Dictionary<string, string> dicChangedMac = null, string sceneName = null)
         {
             var listCommand = new List<string>();
+            int index = 1;
             for (int i = 0; i < listAdjustTarget.Count; i++)
             {
                 var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 820 } };
@@ -372,6 +379,17 @@
                 //璁惧
                 if (data.Type == 0)
                 {
+                    string deviceAddr = data.DeviceAddr;
+                    if (dicChangedMac != null)
+                    {
+                        //濡傛灉涓嶅寘鍚�,鍒欎笉浣滀负澶勭悊瀵硅薄
+                        if (dicChangedMac.ContainsKey(deviceAddr) == false)
+                        {
+                            continue;
+                        }
+                        deviceAddr = dicChangedMac[deviceAddr];
+                    }
+
                     var taskList = new Newtonsoft.Json.Linq.JArray { };
                     foreach (var taskInfo in data.TaskList)
                     {
@@ -379,25 +397,38 @@
                             { "Data1", taskInfo.Data1},{ "Data2",taskInfo.Data2}};
                         taskList.Add(tInfo);
                     }
-                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 0} ,{ "DeviceAddr",data.DeviceAddr} ,
-                         { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",i + 1}};
+                    var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 0} ,{ "DeviceAddr",deviceAddr} ,
+                         { "Epoint", data.Epoint} ,{ "TaskList", taskList },{ "DelayTime", 0} ,{ "MemberNumber",index}};
+                    if (sceneName != null)
+                    {
+                        data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+                    }
                     jObject.Add("Data", data2);
                 }
                 //鍦烘櫙
                 else if (data.Type == 1)
                 {
                     var data2 = new Newtonsoft.Json.Linq.JObject {{ "ScenesId",sceneId},{ "Type", 1} ,
-                         { "ElseScenesId", data.ElseScenesId },{ "DelayTime", 0} ,{ "MemberNumber",i + 1} };
+                         { "ElseScenesId", data.ElseScenesId },{ "DelayTime", 0} ,{ "MemberNumber",index} };
+                    if (sceneName != null)
+                    {
+                        data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+                    }
                     jObject.Add("Data", data2);
                 }
                 //寤舵椂
                 else
                 {
                     var data2 = new Newtonsoft.Json.Linq.JObject {{ "Type", 2} ,{ "ScenesId",sceneId},
-                         { "DelayTime", data.DelayTime} ,{ "MemberNumber",i + 1}};
+                         { "DelayTime", data.DelayTime} ,{ "MemberNumber",index}};
+                    if (sceneName != null)
+                    {
+                        data2.Add(new Newtonsoft.Json.Linq.JProperty("ScenesName", sceneName));
+                    }
                     jObject.Add("Data", data2);
                 }
                 listCommand.Add(jObject.ToString());
+                index++;
             }
             return listCommand;
         }
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/UserCenterLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/UserCenterLogic.cs
index 2f61f5d..33a1934 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/UserCenterLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/UserCenterLogic.cs
@@ -29,12 +29,12 @@
             var connectMode = GetHttpConnectMode(checkAuthority);
             //鑾峰彇浠庢帴鍙i偅閲屽彇鍒扮殑姣旂壒鏁版嵁
             var byteData = GettByteResponsePack(RequestName, connectMode, obj);
-            if (byteData == null && setAgain == true)
+            if (byteData == null)
             {
                 if (setAgain == false)
                 {
                     //褰撳墠鏃犳硶璁块棶缃戠粶
-                    ShowNotNetMsg(listNotShowError);
+                    ShowNotNetMsg(RequestName, listNotShowError);
                     return false;
                 }
                 byteData = ResetByteRequestHttps(RequestName, checkAuthority, obj);
@@ -69,7 +69,7 @@
                 if (setAgain == false)
                 {
                     //褰撳墠鏃犳硶璁块棶缃戠粶
-                    ShowNotNetMsg(listNotShowError);
+                    ShowNotNetMsg(RequestName, listNotShowError);
                     return "Error";
                 }
                 byteData = ResetByteRequestHttps(RequestName, checkAuthority, obj);
@@ -107,7 +107,7 @@
                 if (setAgain == false)
                 {
                     //褰撳墠鏃犳硶璁块棶缃戠粶
-                    ShowNotNetMsg(listNotShowError);
+                    ShowNotNetMsg(RequestName, listNotShowError);
                     return null;
                 }
                 byteData = ResetByteRequestHttps(RequestName, checkAuthority, obj);
@@ -151,7 +151,7 @@
                 if (setAgain == false)
                 {
                     //褰撳墠鏃犳硶璁块棶缃戠粶
-                    ShowNotNetMsg(listNotShowError);
+                    ShowNotNetMsg(RequestName, listNotShowError);
                     return null;
                 }
                 revertObj = ResetByteRequestHttps(RequestName, checkAuthority, obj);
@@ -206,7 +206,7 @@
                 if (count == 3)
                 {
                     //鏄剧ず娌℃湁缃戠粶鐨凪sg
-                    ShowNotNetMsg(null);
+                    ShowNotNetMsg(RequestName, null);
                     break;
                 }
             }
@@ -328,13 +328,15 @@
         /// <summary>
         /// 鏄剧ず娌℃湁缃戠粶鐨凪sg
         /// </summary>
-        private static void ShowNotNetMsg(List<string> listNotShowError)
+        private static void ShowNotNetMsg(string RequestName, List<string> listNotShowError)
         {
             if (listNotShowError != null && listNotShowError.Contains("NotCheck") == true)
             {
                 //涓嶆娴�
                 return;
             }
+            //HdlLogLogic.Current.WriteLog(-1, "褰撳墠鏃犵綉缁滆繛鎺�:" + RequestName);
+
             HdlThreadLogic.Current.RunMain(() =>
             {
                 // 褰撳墠鏃犵綉缁滆繛鎺�,璇风‘璁ょ綉缁�
@@ -498,13 +500,18 @@
         #endregion
 
         #region 鈻� 鍒锋柊鏈湴缂撳瓨_______________________
+
         /// <summary>
-        /// 鍒锋柊鏈湴鎵�鏈夌紦瀛�
+        /// 鍒锋柊鏈湴鎵�鏈夌紦瀛�(鐩墠姝ゆ柟娉曞彧鎻愪緵缁欐仮澶嶅浠芥暟鎹娇鐢�)
         /// </summary>
         public static void RefreshAllMemory()
         {
             //鍒锋柊浣忓畢瀵硅薄
             RefreshHomeObject();
+            //鏍规嵁妯℃澘鏂囦欢,鎭㈠鏁版嵁
+            TemplateData.TemplateCommonLogic.Current.RecoverDataByTemplateBinFile();
+            //寮哄埗鐢熸垚璁惧鍜岀綉鍏虫枃浠�
+            TemplateData.TemplateCommonLogic.Current.CreatDeviceAndGatewayFileFromMemoryByForce();
             //鍒锋柊鏈湴缃戝叧鏂囦欢
             HdlGatewayLogic.Current.ReFreshByLocal();
             //鍒锋柊鏈湴璁惧
@@ -847,6 +854,9 @@
                 //鍒锋柊APP鍓嶄竴娆¢�夋嫨鐨勭綉鍏矷D(鍙互鍙嶅璋冪敤,闇�瑕佸湪缃戝叧鍒濆鍖栧畬浜嗕箣鍚庢墠鑳借皟鐢�)
                 HdlGatewayLogic.Current.RefreshAppOldSelectGatewayId();
 
+                //鍔犺浇妯℃澘缂撳瓨
+                //TemplateData.TemplateCommonLogic.Current.LoadLocalTemplateMemoryData();
+
                 //0:宸茬粡鍚屾杩囷紝涓嶉渶瑕佸悓姝�,杩欎釜鏃跺�欓渶瑕佹彁绀哄浠�
                 if (result == 0 && ShowPrompted == true)
                 {
@@ -912,6 +922,8 @@
             HdlRoomLogic.Current.RefreshAllRoomByLocation();
             //鍒锋柊宸﹁竟鍒锋柊鎴块棿瑙嗗浘鍒楄〃
             HdlRoomLogic.Current.RefreshRoomListView();
+            //鍔犺浇妯℃澘缂撳瓨
+            //TemplateData.TemplateCommonLogic.Current.LoadLocalTemplateMemoryData();
         }
 
         /// <summary>
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/DirectoryFileNameResourse.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/DirectoryFileNameResourse.cs
index 4771a28..7c15ae9 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/DirectoryFileNameResourse.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/DirectoryFileNameResourse.cs
@@ -151,6 +151,48 @@
             get { return System.IO.Path.Combine(Common.Config.Instance.FullPath, "020945dd7966a7550090d3c04a04d93cd2278eb4e6aebcf6"); }
         }
         /// <summary>
+        /// 鏈湴妯℃澘缂撳瓨瀛樻斁鐨勩�愭枃浠跺す銆�
+        /// </summary>
+        public static string LocalTemplateDirectory
+        {
+            get { return System.IO.Path.Combine(LocalMemoryDirectory, "1180648b252f370b18565d54115f2bece19fcc9985dd1f70"); }
+        }
+        /// <summary>
+        /// 鎵�鏈変綇瀹呯殑妯℃澘缂撳瓨瀛樻斁鐨勩�愭枃浠跺す銆�
+        /// </summary>
+        public static string AllResidenceTemplateDirectory
+        {
+            get { return System.IO.Path.Combine(IO.FileUtils.RootPath, Common.Config.Instance.Guid, "f8e712a42227d8f6a8208b076c7e132fe9869f7f0aff3d37"); }
+        }
+		/// <summary>
+        /// 淇濆瓨璁惧閫夋嫨鐨勬ā鏉跨殑銆愭枃浠躲��
+        /// </summary>
+        public static string DeviceTemplateSelectFile
+        {
+            get { return System.IO.Path.Combine(LocalMemoryDirectory, "76d54eaedfd2124c4629cf8c4b8ae60f423c10556dfe50cb9de193a83c5653ef"); }
+        }
+        /// <summary>
+        /// 淇濆瓨缃戝叧閫夋嫨鐨勬ā鏉跨殑銆愭枃浠躲��
+        /// </summary>
+        public static string GatewayTemplateSelectFile
+        {
+            get { return System.IO.Path.Combine(LocalMemoryDirectory, "fdac0d1dd857d946a524feb8ae4e69ecb048333261cb41f5fcc9932b35b09c2f"); }
+        }
+        /// <summary>
+        /// 涓存椂淇濆瓨褰撳墠鏈湴鍏ㄩ儴鏂囦欢鐨勩�愭枃浠跺す銆�
+        /// </summary>
+        public static string TemporaryBackupLocalFileDirectory
+        {
+            get { return System.IO.Path.Combine(Common.Config.Instance.FullPath, "eaa527389defe69899beb6df9a83228b281b4e57a63a654de1ad6d01ab956907"); }
+        }
+        /// <summary>
+        /// 涓存椂淇濆瓨鏈湴褰撳墠鍏ㄩ儴妯℃澘鏂囦欢鐨勩�愭枃浠跺す銆�
+        /// </summary>
+        public static string TemporaryBackupTemplateFileDirectory
+        {
+            get { return System.IO.Path.Combine(TemporaryBackupLocalFileDirectory, "f8e712a42227d8f6df0aa223fe0a1eda"); }
+        }
+        /// <summary>
         /// 淇濆瓨鎰忚鍙嶉娆℃暟鐨勩�愭枃浠躲��
         /// </summary>
         public static string SuggestionFile
@@ -165,13 +207,6 @@
             get { return System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, "cad1afb384fb482de753fc37ebe84f9e"); }
         }
         /// <summary>
-        /// 璋冭瘯鏋佸厜鍙戦�両D鐨勩�愭枃浠躲��
-        /// </summary>
-        public static string JiguangFile
-        {
-            get { return System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, "e509ddd21100cb994f509fb28c2e4dd6"); }
-        }
-        /// <summary>
         /// 璁板綍鍙戦�佸拰鎺ユ敹鐨勬暟鎹甃og
         /// </summary>
         public static string SendAndReceveDataLog
@@ -185,6 +220,34 @@
         {
             get { return System.IO.Path.Combine(Common.Config.Instance.FullPath, LocalMemoryDirectory, "SocketReceiveDataLog.log"); }
         }
+		/// <summary>
+        /// 瀛樻斁鍗囩骇鍥轰欢鐨勩�愭枃浠跺す銆�
+        /// </summary>
+        public static string FirmwareUpdateDirectory
+        {
+            get { return System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, "5b78084db39091e2f9144bc6209e3001e0328e968d16adbc"); }
+        }
+        /// <summary>
+        /// 瀛樻斁鍗囩骇鍥轰欢鍒楄〃鍚嶅瓧鐨勩�愭枃浠躲��
+        /// </summary>
+        public static string FirmwareUpdateList
+        {
+            get { return System.IO.Path.Combine(FirmwareUpdateDirectory, "5b78084db39091e2ee87891aa45d2c1ffc005ce4b9d67f51"); }
+        }
+        /// <summary>
+        /// 璋冭瘯鏋佸厜鍙戦�両D鐨勩�愭枃浠躲��
+        /// </summary>
+        public static string JiguangFile
+        {
+            get { return System.IO.Path.Combine(Shared.IO.FileUtils.RootPath, "e509ddd21100cb994f509fb28c2e4dd6"); }
+        }
+        /// <summary>
+        /// 瀛樻斁鐢熸垚鍙戦�佺粰缃戝叧鐨勫悇绉嶆ā鏉挎暟鎹殑銆愭枃浠跺す銆�
+        /// </summary>
+        public static string CreatSendToGwTemplateDirectory
+        {
+            get { return System.IO.Path.Combine(Common.Config.Instance.FullPath, "96048b35f1d3d43725b1b2d7240878f804c003969e26330cd5afe42f509b63c7"); }
+        }
         /// <summary>
         /// 鍒嗕韩妤煎眰鐨勩�愭枃浠跺悕銆�
         /// </summary>
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/UserCenterResourse.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/UserCenterResourse.cs
index 38bb2ef..8e98407 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/UserCenterResourse.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/UserCenterResourse.cs
@@ -47,5 +47,13 @@
         /// 鏂囦欢鍔犲瘑绉橀挜
         /// </summary>
         public const string FileEncryptKey = "4^Olh_3f";
+        /// <summary>
+        /// 鍗曟枩鏉犵殑杞箟瀛楃
+        /// </summary>
+        public const string slash = "\\";
+        /// <summary>
+        /// 鍙屽紩鍙风殑杞箟瀛楃
+        /// </summary>
+        public const string douMarks = "\"";
     }
 }
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelFourButtonDirectionForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelFourButtonDirectionForm.cs
index acded9a..b698f35 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelFourButtonDirectionForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelFourButtonDirectionForm.cs
@@ -49,15 +49,11 @@
             btnGreanLinght.TextID = R.MyInternationalizationString.uPanelBackLightLighting;
             framePic.AddChidren(btnGreanLinght);
 
-            //浠绘剰鎸夐敭闀挎寜5绉�
-            string textMsg = Language.StringByID(R.MyInternationalizationString.uLongClickEachPanelSomeSecond);
-            if (textMsg.Contains("{0}") == true)
-            {
-                textMsg = string.Format(textMsg, "5");
-            }
+            //闀挎寜姝ゆ寜閿�
+            string textMsg = Language.StringByID(R.MyInternationalizationString.uLongPressThisButton);
             var btnSecond = new NormalViewControl(this.GetPictrueRealSize(400), this.GetPictrueRealSize(45), false);
             btnSecond.X = this.GetPictrueRealSize(441);
-            btnSecond.Y = this.GetPictrueRealSize(583);
+            btnSecond.Y = this.GetPictrueRealSize(526);
             btnSecond.TextColor = UserCenterColor.Current.TextGrayColor3;
             btnSecond.TextSize = 10;
             btnSecond.Text = textMsg;
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelThreeButtonDirectionForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelThreeButtonDirectionForm.cs
index 02ade6f..5ef3e6d 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelThreeButtonDirectionForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelThreeButtonDirectionForm.cs
@@ -49,15 +49,11 @@
             btnGreanLinght.TextID = R.MyInternationalizationString.uPanelBackLightLighting;
             framePic.AddChidren(btnGreanLinght);
 
-            //浠绘剰鎸夐敭闀挎寜5绉�
-            string textMsg = Language.StringByID(R.MyInternationalizationString.uLongClickEachPanelSomeSecond);
-            if (textMsg.Contains("{0}") == true)
-            {
-                textMsg = string.Format(textMsg, "5");
-            }
+            //闀挎寜姝ゆ寜閿�
+            string textMsg = Language.StringByID(R.MyInternationalizationString.uLongPressThisButton);
             var btnSecond = new NormalViewControl(this.GetPictrueRealSize(400), this.GetPictrueRealSize(45), false);
             btnSecond.X = this.GetPictrueRealSize(441);
-            btnSecond.Y = this.GetPictrueRealSize(583);
+            btnSecond.Y = this.GetPictrueRealSize(526);
             btnSecond.TextColor = UserCenterColor.Current.TextGrayColor3;
             btnSecond.TextSize = 10;
             btnSecond.Text = textMsg;
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelTwoButtonDirectionForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelTwoButtonDirectionForm.cs
index ae74341..adb6ccf 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelTwoButtonDirectionForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/Direction/PanelTwoButtonDirectionForm.cs
@@ -49,15 +49,11 @@
             btnGreanLinght.TextID = R.MyInternationalizationString.uPanelBackLightLighting;
             framePic.AddChidren(btnGreanLinght);
 
-            //浠绘剰鎸夐敭闀挎寜5绉�
-            string textMsg = Language.StringByID(R.MyInternationalizationString.uLongClickEachPanelSomeSecond);
-            if (textMsg.Contains("{0}") == true)
-            {
-                textMsg = string.Format(textMsg, "5");
-            }
+            //闀挎寜姝ゆ寜閿�
+            string textMsg = Language.StringByID(R.MyInternationalizationString.uLongPressThisButton);
             var btnSecond = new NormalViewControl(this.GetPictrueRealSize(400), this.GetPictrueRealSize(45), false);
             btnSecond.X = this.GetPictrueRealSize(441);
-            btnSecond.Y = this.GetPictrueRealSize(583);
+            btnSecond.Y = this.GetPictrueRealSize(526);
             btnSecond.TextColor = UserCenterColor.Current.TextGrayColor3;
             btnSecond.TextSize = 10;
             btnSecond.Text = textMsg;
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelColorSelectForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelColorSelectForm.cs
index 85c4f68..71725b2 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelColorSelectForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelColorSelectForm.cs
@@ -32,6 +32,14 @@
         /// 鍦嗙洏閫夋嫨鐨勯鑹叉樉绀烘帶浠�(鍐呮)
         /// </summary>
         private IconViewControl wheelSelectIcon2 = null;
+        /// <summary>
+        /// 鏄惁鏄鑹查�夋嫨
+        /// </summary>
+        private bool isColorSelect = false;
+        /// <summary>
+        /// 棰滆壊鍊艰緭鍏ユ帶浠�
+        /// </summary>
+        private TextInputControl txtColorInput = null;
 
         #endregion
 
@@ -43,7 +51,7 @@
         /// <param name="i_R">R</param>
         /// <param name="i_G">G</param>
         /// <param name="i_B">B</param>
-        public void ShowForm(int i_R,int i_G,int i_B)
+        public void ShowForm(int i_R, int i_G, int i_B)
         {
             this.ScrollEnabled = false;
 
@@ -97,17 +105,15 @@
         /// </summary>
         private void InitColorPictrueControl()
         {
-            //鍦嗙洏鎺т欢鐨凢rameLayout
-            var frameBack = new FrameLayout();
-            frameBack.Y = Application.GetRealHeight(66);
-            frameBack.Height = Application.GetRealHeight(1204);
-            bodyFrameLayout.AddChidren(frameBack);
+            //鍒濆鍖栭鑹茶緭鍏ユ帶浠�
+            this.txtColorInput = this.InitColorInputControl();
 
             var framePic = new FrameLayout();
             framePic.Width = this.GetPictrueRealSize(588);
             framePic.Height = this.GetPictrueRealSize(588);
-            framePic.Gravity = Gravity.Center;
-            frameBack.AddChidren(framePic);
+            framePic.Gravity = Gravity.CenterHorizontal;
+            framePic.Y = Application.GetRealHeight(192);
+            bodyFrameLayout.AddChidren(framePic);
 
             //鍦嗙洏鎺т欢
             var colorPic = new ColorPicker();
@@ -137,14 +143,11 @@
                 listRGB.Add(Convert.ToInt32(Convert.ToString(eColor[2])));
 
                 //鏄剧ず閫夋嫨棰滆壊鐨勬帶浠�
-                if (nowSelectIcon1 != null)
-                {
-                    nowSelectIcon1.BorderColor = UserCenterColor.Current.White;
-                }
-                wheelSelectIcon2.BackgroundColor = this.GetColorByRGB(eColor[0], eColor[1], eColor[2]);
-                wheelSelectIcon1.BorderColor = 0xffcccccc;
-                wheelSelectIcon1.Name = listRGB[0] + "-" + listRGB[1] + "-" + listRGB[2];
-                nowSelectIcon1 = wheelSelectIcon1;
+                this.ShowNowSelectColorControl(eColor);
+
+                //鑾峰彇棰滆壊鐨勭炕璇戞枃鏈�
+                isColorSelect = true;
+                this.txtColorInput.Text = this.GetColorTextTranslate(listRGB[0], listRGB[1], listRGB[2]);
             };
             colorPic.MouseDownEventHandler += (sender, e) =>
             {
@@ -167,6 +170,99 @@
                 //褰撻紶鏍囩偣涓嬩簨浠跺鐞�
                 colorPic.MouseDownEventHandler(sender, e);
             };
+
+            //鎵嬪姩杈撳叆鍊兼敼鍙樹簨浠�
+            this.txtColorInput.TextChangeEventHandler += (sender, value) =>
+            {
+                if (isColorSelect == true)
+                {
+                    //杩欓噷鏄敱鐐瑰嚮鑹茬洏杩涜璧嬪�艰Е鍙�
+                    isColorSelect = false;
+                    return;
+                }
+                //妫�娴嬭緭鍏ョ殑棰滆壊鍊�
+                var byteColor = this.CheckInputColorValue(value);
+                if (byteColor == null)
+                {
+                    return;
+                }
+                if (btnWhiteView.Visible == true)
+                {
+                    //鐧界偣闅愯棌
+                    btnWhiteView.Visible = false;
+                }
+
+                //璁板綍缂撳瓨
+                listRGB = new List<int>();
+                listRGB.Add(Convert.ToInt32(Convert.ToString(byteColor[0])));
+                listRGB.Add(Convert.ToInt32(Convert.ToString(byteColor[1])));
+                listRGB.Add(Convert.ToInt32(Convert.ToString(byteColor[2])));
+
+                //鏄剧ず閫夋嫨棰滆壊鐨勬帶浠�
+                this.ShowNowSelectColorControl(byteColor);
+            };
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栭鑹茶緭鍏ユ帶浠�
+        /// </summary>
+        /// <returns></returns>
+        private TextInputControl InitColorInputControl()
+        {
+            //鑷畾涔夎壊鍊肩殑澶栨
+            var frameInput = new NormalFrameLayout();
+            frameInput.Width = Application.GetRealWidth(458);
+            frameInput.Height = Application.GetRealHeight(104);
+            frameInput.Y = Application.GetRealHeight(1103);
+            frameInput.Gravity = Gravity.CenterHorizontal;
+            frameInput.BorderColor = 0xffcccccc;
+            frameInput.Radius = (uint)Application.GetRealWidth(17);
+            frameInput.BorderWidth = Application.GetRealWidth(3) == 0 ? 1 : (uint)Application.GetRealWidth(3);
+            bodyFrameLayout.AddChidren(frameInput);
+            var btnMark = new NormalViewControl(100, 58, true);
+            btnMark.X = Application.GetRealWidth(35);
+            btnMark.Gravity = Gravity.CenterVertical;
+            btnMark.IsBold = true;
+            btnMark.Text = "# ";
+            btnMark.Width = btnMark.GetRealWidthByText();
+            btnMark.TextColor = UserCenterColor.Current.TextGrayColor2;
+            frameInput.AddChidren(btnMark);
+            //鑷畾涔夎壊鍊艰緭鍏ユ
+            var txtInput = new TextInputControl(400, 58, true);
+            txtInput.X = btnMark.Right;
+            txtInput.Gravity = Gravity.CenterVertical;
+            txtInput.TextSize = 16;
+            txtInput.FrameBorder = frameInput;
+            frameInput.AddChidren(txtInput);
+            //鑹插�煎彿涓�6浣嶏紙鐢变换鎰忔暟瀛�+瀛楁瘝缁勫悎锛�
+            var btnTipView = new NormalViewControl(bodyFrameLayout.Width, Application.GetRealHeight(55), false);
+            btnTipView.Y = frameInput.Bottom + Application.GetRealHeight(20);
+            btnTipView.IsBold = true;
+            btnTipView.TextAlignment = TextAlignment.Center;
+            btnTipView.TextColor = UserCenterColor.Current.TextGrayColor2;
+            btnTipView.TextSize = 12;
+            btnTipView.TextID = R.MyInternationalizationString.uColorLengthMsg;
+            bodyFrameLayout.AddChidren(btnTipView);
+
+            return txtInput;
+        }
+
+        /// <summary>
+        /// 鏄剧ず閫夋嫨棰滆壊鐨勬帶浠�
+        /// </summary>
+        /// <param name="eColor"></param>
+        private void ShowNowSelectColorControl(byte[] eColor)
+        {
+            //鏄剧ず閫夋嫨棰滆壊鐨勬帶浠�
+            if (nowSelectIcon1 != null)
+            {
+                nowSelectIcon1.BorderColor = UserCenterColor.Current.White;
+            }
+            var uintColor = this.GetColorByRGB(eColor[0], eColor[1], eColor[2]);
+            wheelSelectIcon2.BackgroundColor = uintColor;
+            wheelSelectIcon1.BorderColor = 0xffcccccc;
+            wheelSelectIcon1.Name = listRGB[0] + "-" + listRGB[1] + "-" + listRGB[2];
+            nowSelectIcon1 = wheelSelectIcon1;
         }
 
         #endregion
@@ -194,7 +290,7 @@
                 btnFrame.Width = this.GetPictrueRealSize(80);
                 btnFrame.Radius = (uint)this.GetPictrueRealSize(80) / 2;
                 btnFrame.X = Xdefult + i * this.GetPictrueRealSize(80 + 24);
-                btnFrame.Y = Application.GetRealHeight(1054);
+                btnFrame.Y = Application.GetRealHeight(880);
                 btnFrame.BackgroundColor = UserCenterColor.Current.White;
                 btnFrame.BorderWidth = 1;
                 btnFrame.BorderColor = UserCenterColor.Current.White;
@@ -221,6 +317,10 @@
                     wheelSelectIcon1 = btnFrame;
                     wheelSelectIcon2 = btnIcon;
                     nowSelectIcon1 = btnFrame;
+
+                    //鑾峰彇棰滆壊鐨勭炕璇戞枃鏈�
+                    isColorSelect = true;
+                    this.txtColorInput.Text = this.GetColorTextTranslate(i_R, i_G, i_B);
                 }
 
                 btnFrame.ButtonClickEvent += (sender, e) =>
@@ -241,6 +341,9 @@
                         listRGB.Add(Convert.ToInt32(Convert.ToString(Arry[1])));
                         listRGB.Add(Convert.ToInt32(Convert.ToString(Arry[2])));
                     }
+                    //鑾峰彇棰滆壊鐨勭炕璇戞枃鏈�
+                    isColorSelect = true;
+                    this.txtColorInput.Text = this.GetColorTextTranslate(listRGB[0], listRGB[1], listRGB[2]);
                 };
             }
         }
@@ -296,6 +399,51 @@
         }
 
         /// <summary>
+        /// 妫�娴嬭緭鍏ョ殑棰滆壊鍊�
+        /// </summary>
+        /// <param name="colorText"></param>
+        /// <returns></returns>
+        private byte[] CheckInputColorValue(string colorText)
+        {
+            //鍙湁闀垮害涓�6鎵嶅鐞�
+            if (colorText.Length != 6) { return null; }
+
+            colorText = colorText.ToUpper();
+            foreach (var c in colorText)
+            {
+                if (char.IsNumber(c) == true)
+                {
+                    //鏁板瓧鐨勮瘽,OK
+                    continue;
+                }
+                if ('A' <= c && c <= 'F')
+                {
+                    //A-F鐨勮瘽,OK
+                    continue;
+                }
+                return null;
+            }
+            int R = Convert.ToInt32(colorText.Substring(0, 2), 16);
+            int G = Convert.ToInt32(colorText.Substring(2, 2), 16);
+            int B = Convert.ToInt32(colorText.Substring(4, 2), 16);
+            return new byte[] { (byte)R, (byte)G, (byte)B };
+        }
+
+        /// <summary>
+        /// 鑾峰彇棰滆壊鐨勭炕璇戞枃鏈�
+        /// </summary>
+        /// <param name="i_R"></param>
+        /// <param name="i_G"></param>
+        /// <param name="i_B"></param>
+        /// <returns></returns>
+        private string GetColorTextTranslate(int i_R, int i_G, int i_B)
+        {
+            return Convert.ToString(i_R, 16).ToUpper().PadLeft(2, '0')
+                + Convert.ToString(i_G, 16).ToUpper().PadLeft(2, '0')
+                + Convert.ToString(i_B, 16).ToUpper().PadLeft(2, '0');
+        }
+
+        /// <summary>
         /// 灏哛GB杞崲涓洪鑹�
         /// </summary>
         /// <param name="R"></param>
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionFileContentForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionFileContentForm.cs
index d44f2d0..5658f1d 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionFileContentForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionFileContentForm.cs
@@ -95,7 +95,6 @@
                     textValue += value + "\r\n";
                 }
             }
-            textValue = textValue.Replace(",", "\r\n");
             if (textValue.StartsWith("{") == true)
             {
                 textValue = "{\r\n" + textValue.Substring(1);
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayInfoMenuForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayInfoMenuForm.cs
new file mode 100755
index 0000000..83fc914
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayInfoMenuForm.cs
@@ -0,0 +1,78 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter.HideOption
+{
+    /// <summary>
+    /// 闅愬尶鍔熻兘鐨勭綉鍏充俊鎭彍鍗曠晫闈�
+    /// </summary>
+    public class HideOptionGatewayInfoMenuForm : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 缃戝叧瀵硅薄
+        /// </summary>
+        private ZbGateway zbGateway = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        /// <param name="i_gateway"></param>
+        public void ShowForm(ZbGateway i_gateway)
+        {
+            this.zbGateway = i_gateway;
+            //璁剧疆鏍囬淇℃伅
+            base.SetTitleText("缃戝叧鑿滃崟");
+            //鍒濆鍖栦腑閮ㄦ帶浠�
+            this.InitMiddleFrame();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄦ帶浠�
+        /// </summary>
+        private void InitMiddleFrame()
+        {
+            //娓呯┖bodyFrame
+            this.ClearBodyFrame();
+
+            var listview = new VerticalListControl(29);
+            listview.Height = bodyFrameLayout.Height;
+            listview.BackgroundColor = UserCenterColor.Current.White;
+            bodyFrameLayout.AddChidren(listview);
+
+            //缃戝叧淇℃伅
+            var rowContr1 = new RowLayoutControl(listview.rowSpace / 2);
+            listview.AddChidren(rowContr1);
+            rowContr1.frameTable.AddLeftCaption("缃戝叧淇℃伅", 700);
+            rowContr1.frameTable.AddRightArrow();
+            rowContr1.frameTable.AddBottomLine();
+            rowContr1.frameTable.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new GatewayManage.GatewayInfoEditorForm();
+                form.AddForm(zbGateway);
+            };
+
+            //缃戝叧鏂囦欢鍒楄〃
+            var rowContr2 = new RowLayoutControl(listview.rowSpace / 2);
+            listview.AddChidren(rowContr2);
+            rowContr2.frameTable.AddLeftCaption("缃戝叧鏂囦欢鍒楄〃", 700);
+            rowContr2.frameTable.AddRightArrow();
+            rowContr2.frameTable.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new HideOptionGatewayListFileForm();
+                form.AddForm(zbGateway);
+            };
+
+            listview.AdjustRealHeight(Application.GetRealHeight(23));
+        }
+
+        #endregion
+    }
+}
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayListFileForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayListFileForm.cs
new file mode 100755
index 0000000..529ff96
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayListFileForm.cs
@@ -0,0 +1,203 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter.HideOption
+{
+    /// <summary>
+    /// 闅愬尶鍔熻兘鐨勭綉鍏虫枃浠跺垪琛ㄧ晫闈�
+    /// </summary>
+    public class HideOptionGatewayListFileForm : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 缃戝叧瀵硅薄
+        /// </summary>
+        private ZbGateway zbGateway = null;
+        private BottomClickButton btnDelete = null;
+        private List<string> listDeleteFile = new List<string>();
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        /// <param name="i_gateway"></param>
+        public void ShowForm(ZbGateway i_gateway)
+        {
+            HdlFileLogic.Current.CreateDirectory(System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, "MyTempDir"), true);
+            this.zbGateway = i_gateway;
+            //璁剧疆鏍囬淇℃伅
+            base.SetTitleText("缃戝叧鏂囦欢鍒楄〃");
+            //鍒濆鍖栦腑閮ㄦ帶浠�
+            this.InitMiddleFrame();
+
+            var btnButton = new NormalViewControl(300, 69, true);
+            btnButton.Gravity = Gravity.CenterVertical;
+            btnButton.X = bodyFrameLayout.Width - Application.GetRealWidth(300) - ControlCommonResourse.XXLeft;
+            btnButton.TextColor = UserCenterColor.Current.TopLayoutTitleText;
+            btnButton.TextAlignment = TextAlignment.CenterRight;
+            btnButton.TextSize = 17;
+            btnButton.Text = "涓�閿垹闄�";
+            topFrameLayout.AddChidren(btnButton);
+            btnButton.ButtonClickEvent += (sender, e) =>
+            {
+                btnDelete.Visible = true;
+            };
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄦ帶浠�
+        /// </summary>
+        private void InitMiddleFrame()
+        {
+            //娓呯┖bodyFrame
+            this.ClearBodyFrame();
+
+            var listview = new VerticalListControl(29);
+            listview.Height = bodyFrameLayout.Height;
+            listview.BackgroundColor = UserCenterColor.Current.White;
+            bodyFrameLayout.AddChidren(listview);
+
+            this.ShowProgressBar();
+            HdlThreadLogic.Current.RunThread(async () =>
+            {
+                var result = await zbGateway.FileTransferLsDirAsync();
+
+                this.CloseProgressBar();
+                if (result == null || result.fileTransferLsDiResponseData == null)
+                {
+                    this.ShowMassage(ShowMsgType.Tip, "鑾峰彇鍒楄〃澶辫触,缃戝叧娌℃湁鍥炲");
+                    return;
+                }
+                if (result.fileTransferLsDiResponseData.Result != 0)
+                {
+                    this.ShowMassage(ShowMsgType.Tip, "鏌ョ湅澶辫触,濂藉儚缃戝叧涓嶅厑璁告煡鐪嬭繖涓洰褰�");
+                    return;
+                }
+
+                var listFile = new List<string>();
+                foreach (var data in result.fileTransferLsDiResponseData.Dir)
+                {
+                    string[] strArry = data.File.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
+                    listFile.Add(strArry[strArry.Length - 1]);
+                }
+                listFile.Sort();
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    foreach (var fileName in listFile)
+                    {
+                        var rowContr1 = new RowLayoutControl(listview.rowSpace / 2);
+                        listview.AddChidren(rowContr1);
+                        rowContr1.frameTable.AddLeftCaption(fileName, 700);
+                        rowContr1.frameTable.AddBottomLine();
+
+                        var btnSelect = new IconViewControl(58);
+                        btnSelect.UnSelectedImagePath = "Item/ItemSelected.png";
+                        btnSelect.Gravity = Gravity.Center;
+                        rowContr1.frameTable.AddChidren(btnSelect);
+                        btnSelect.Visible = false;
+
+                        var btnDelete = rowContr1.AddDeleteControl();
+                        btnDelete.ButtonClickEvent += (sender, e) =>
+                        {
+                            this.ShowMassage(ShowMsgType.Confirm, "鏄惁鍒犻櫎缃戝叧鐨勮繖涓枃浠�(闇�璋ㄦ厧)", async () =>
+                             {
+                                 var result9 = await zbGateway.DelFileOrDirAsync("/etc/hdlDat/" + fileName);
+                                 if (result9 == null || result9.delFileOrDirResponseData == null)
+                                 {
+                                     this.ShowMassage(ShowMsgType.Tip, "鍒犻櫎鏂囦欢澶辫触,缃戝叧娌℃湁鍥炲");
+                                     return;
+                                 }
+                                 if (result9.delFileOrDirResponseData.Result == 1)
+                                 {
+                                     this.ShowMassage(ShowMsgType.Tip, "鍒犻櫎鏂囦欢澶辫触,缃戝叧璇磋繖涓笢瑗夸笉瀛樺湪");
+                                     return;
+                                 }
+                                 if (result9.delFileOrDirResponseData.Result == 2)
+                                 {
+                                     this.ShowMassage(ShowMsgType.Tip, "鍒犻櫎鏂囦欢澶辫触,缃戝叧璇磋繖涓笢瑗夸笉鍏佽鍒犻櫎");
+                                     return;
+                                 }
+                                 if (result9.delFileOrDirResponseData.Result != 0)
+                                 {
+                                     this.ShowMassage(ShowMsgType.Tip, "鍒犻櫎鏂囦欢澶辫触,鏃犳硶璇嗗埆鐨勭姸鎬佺爜(" + result9.delFileOrDirResponseData.Result + ")");
+                                     return;
+                                 }
+                                 rowContr1.RemoveFromParent();
+                                 this.ShowMassage(ShowMsgType.Tip, "鍒犻櫎鏂囦欢鎴愬姛");
+                             });
+                        };
+                    }
+
+                    listview.AdjustRealHeightByBottomButton(Application.GetRealHeight(23));
+
+                    this.btnDelete = new BottomClickButton();
+                    btnDelete.Text = "鍒犻櫎";
+                    bodyFrameLayout.AddChidren(btnDelete);
+                    btnDelete.Visible = false;
+                    btnDelete.ButtonClickEvent += (sender, e) =>
+                    {
+                        this.ShowMassage(ShowMsgType.Confirm, "纭畾鏄惁鍒犻櫎杩欎簺鏂囦欢?",async () =>
+                        {
+                            foreach (var listfile in this.listDeleteFile)
+                            {
+                                var result9 = await zbGateway.DelFileOrDirAsync("/etc/hdlDat/" + listfile);
+                                if (result9 == null || result9.delFileOrDirResponseData == null)
+                                {
+                                    this.ShowMassage(ShowMsgType.Tip, "鍒犻櫎鏂囦欢澶辫触,缃戝叧娌℃湁鍥炲");
+                                    this.InitMiddleFrame();
+                                    this.listDeleteFile = new List<string>();
+                                    return;
+                                }
+                                if (result9.delFileOrDirResponseData.Result == 1)
+                                {
+                                    this.ShowMassage(ShowMsgType.Tip, "鍒犻櫎鏂囦欢澶辫触,缃戝叧璇磋繖涓笢瑗夸笉瀛樺湪");
+                                    this.InitMiddleFrame();
+                                    this.listDeleteFile = new List<string>();
+                                    return;
+                                }
+                                if (result9.delFileOrDirResponseData.Result == 2)
+                                {
+                                    this.ShowMassage(ShowMsgType.Tip, "鍒犻櫎鏂囦欢澶辫触,缃戝叧璇磋繖涓笢瑗夸笉鍏佽鍒犻櫎");
+                                    this.InitMiddleFrame();
+                                    this.listDeleteFile = new List<string>();
+                                    return;
+                                }
+                                if (result9.delFileOrDirResponseData.Result != 0)
+                                {
+                                    this.ShowMassage(ShowMsgType.Tip, "鍒犻櫎鏂囦欢澶辫触,鏃犳硶璇嗗埆鐨勭姸鎬佺爜(" + result9.delFileOrDirResponseData.Result + ")");
+                                    this.InitMiddleFrame();
+                                    this.listDeleteFile = new List<string>();
+                                    return;
+                                }
+                            }
+                            this.InitMiddleFrame();
+                            this.listDeleteFile = new List<string>();
+                        });
+                    };
+                });
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 鐣岄潰鍏抽棴___________________________
+
+        /// <summary>
+        /// 鐣岄潰鍏抽棴
+        /// </summary>
+        public override void CloseFormBefore()
+        {
+            HdlFileLogic.Current.DeleteDirectory(System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, "MyTempDir"));
+            
+            base.CloseFormBefore();
+        }
+
+        #endregion
+    }
+}
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayListForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayListForm.cs
index 585bd74..b6ad0bf 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayListForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionGatewayListForm.cs
@@ -137,7 +137,7 @@
             };
             gatewayRow.frameTable.ButtonClickEvent += (sender, e) =>
             {
-                var form = new GatewayManage.GatewayInfoEditorForm();
+                var form = new HideOptionGatewayInfoMenuForm();
                 form.AddForm(i_gateway);
             };
         }
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionMainForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionMainForm.cs
index 2731bce..0dc5107 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionMainForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionMainForm.cs
@@ -51,6 +51,15 @@
         {
             listView.RemoveAll();
 
+            var rowTemp = this.AddNormalRowControl(string.Empty, 400, string.Empty, 400);
+            var btnTemp = new NormalViewControl(600, 100, true);
+            btnTemp.Text = "涓�鑸俊鎭儴鍒�";
+            btnTemp.Gravity = Gravity.Center;
+            btnTemp.TextSize = 16;
+            btnTemp.IsBold = true;
+            btnTemp.TextAlignment = TextAlignment.Center;
+            rowTemp.AddChidren(btnTemp);
+
             this.AddNormalRowControl("褰撳墠韬唤", 400, UserCenterResourse.UserInfo.AuthorityText, 400);
 
             this.AddTopButtomRowControl("浣忓畢ID", 400, Common.Config.Instance.Home.Id, 900);
@@ -66,6 +75,15 @@
             this.AddNormalRowControl("鎷ユ湁杩滅▼鏉冮檺", 400, ZigBee.Device.ZbGateway.AllowRemoteCtrl == true ? "鏄�" : "鍚�", 400);
 
             this.AddNormalRowControl("WIFI鍙橀噺", 400, Shared.Application.IsWifi == true ? "true" : "false", 400);
+
+            rowTemp = this.AddNormalRowControl(string.Empty, 400, string.Empty, 400);
+            btnTemp = new NormalViewControl(600, 100, true);
+            btnTemp.Text = "閾炬帴璋冭瘯閮ㄥ垎";
+            btnTemp.Gravity = Gravity.Center;
+            btnTemp.TextSize = 16;
+            btnTemp.IsBold = true;
+            btnTemp.TextAlignment = TextAlignment.Center;
+            rowTemp.AddChidren(btnTemp);
 
             this.AddNormalRowControl("鎵嬫満鑾峰彇鐨処P", 600, new Shared.Net.NetWiFi().BroadcastIpAddress.ToString(), 600);
 
@@ -98,28 +116,6 @@
 
             //妫�娴嬭兘鍚﹀箍鎾緱鍒扮綉鍏�
             this.AddCheckReceviceGatewayRow();
-
-            row1 = new FrameRowControl(listView.rowSpace / 2);
-            listView.AddChidren(row1);
-            row1.AddLeftCaption("鏌ョ湅缂撳瓨鏂囦欢", 500);
-            row1.AddRightArrow();
-            row1.AddBottomLine();
-            row1.ButtonClickEvent += (sender, e) =>
-            {
-                var form = new HideOptionDirectoryListForm();
-                form.AddForm();
-            };
-
-            row1 = new FrameRowControl(listView.rowSpace / 2);
-            listView.AddChidren(row1);
-            row1.AddLeftCaption("璁惧缂撳瓨鍙橀噺", 500);
-            row1.AddRightArrow();
-            row1.AddBottomLine();
-            row1.ButtonClickEvent += (sender, e) =>
-            {
-                var form = new HideOptionMemoryListDeviceForm();
-                form.AddForm();
-            };
 
             row1 = new FrameRowControl(listView.rowSpace / 2);
             listView.AddChidren(row1);
@@ -198,6 +194,61 @@
                 });
             };
 
+            rowTemp = this.AddNormalRowControl(string.Empty, 400, string.Empty, 400);
+            btnTemp = new NormalViewControl(600, 100, true);
+            btnTemp.Text = "鏌ョ湅缂撳瓨閮ㄥ垎";
+            btnTemp.Gravity = Gravity.Center;
+            btnTemp.TextSize = 16;
+            btnTemp.IsBold = true;
+            btnTemp.TextAlignment = TextAlignment.Center;
+            rowTemp.AddChidren(btnTemp);
+
+            row1 = new FrameRowControl(listView.rowSpace / 2);
+            listView.AddChidren(row1);
+            row1.AddLeftCaption("鏌ョ湅缂撳瓨鏂囦欢", 500);
+            row1.AddRightArrow();
+            row1.AddBottomLine();
+            row1.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new HideOptionDirectoryListForm();
+                form.AddForm();
+            };
+
+            row1 = new FrameRowControl(listView.rowSpace / 2);
+            listView.AddChidren(row1);
+            row1.AddLeftCaption("璁惧缂撳瓨鍙橀噺", 500);
+            row1.AddRightArrow();
+            row1.AddBottomLine();
+            row1.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new HideOptionMemoryListDeviceForm();
+                form.AddForm();
+            };
+
+            rowTemp = this.AddNormalRowControl(string.Empty, 400, string.Empty, 400);
+            btnTemp = new NormalViewControl(600, 100, true);
+            btnTemp.Text = "鍏朵粬閮ㄥ垎";
+            btnTemp.Gravity = Gravity.Center;
+            btnTemp.TextSize = 16;
+            btnTemp.IsBold = true;
+            btnTemp.TextAlignment = TextAlignment.Center;
+            rowTemp.AddChidren(btnTemp);
+
+            row1 = new FrameRowControl(listView.rowSpace / 2);
+            listView.AddChidren(row1);
+            row1.AddLeftCaption("閲嶇疆瀵煎叆鏍囪瘑", 500);
+            row1.AddRightArrow();
+            row1.AddBottomLine();
+            row1.ButtonClickEvent += (sender, e) =>
+            {
+                this.ShowMassage(ShowMsgType.Confirm, "鏄惁閲嶇疆杩欎釜浣忓畢鐨勫鍏ユ爣璇�?\r\n閲嶇疆涔嬪悗鍙互鍐嶆瀵煎叆缃戝叧", () =>
+                {
+                    Common.Config.Instance.Home.SendTemplateSuccess = false;
+                    Common.Config.Instance.Home.Save();
+                    this.ShowMassage(ShowMsgType.Tip, "閲嶇疆瀹屾垚");
+                });
+            };
+
             row1 = new FrameRowControl(listView.rowSpace / 2);
             listView.AddChidren(row1);
             row1.AddLeftCaption("涓婁紶Log", 500);
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/Safety/GarrisonAreaSettionMenuForm.cs b/ZigbeeApp/Shared/Phone/UserCenter/Safety/GarrisonAreaSettionMenuForm.cs
index bf7c54f..dbc1465 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/Safety/GarrisonAreaSettionMenuForm.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/Safety/GarrisonAreaSettionMenuForm.cs
@@ -123,8 +123,8 @@
         /// <param name="btnswich"></param>
         private async void SetInformationPush(MostRightIconControl btnswich)
         {
-            //鑾峰彇鐘舵��
-            int statu = HdlSafeguardLogic.Current.GetGarrisonInformationPushStatu(this.zoonID) == 0 ? 1 : 0;
+            //鑾峰彇鐘舵��(鍙栧弽)
+            int statu = btnswich.IsSelected == true ? 1 : 0;
 
             //鎵ц淇敼
             var result = await HdlSafeguardLogic.Current.SetGarrisonInformationPushStatu(this.zoonID, statu);
diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs
index fa16d90..61a4856 100755
--- a/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs
+++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/CommonDevice.cs
@@ -85,7 +85,6 @@
         /// <para>鎸佺画鏁版嵁涓婃姤(MomentStatus=0   TriggerZoneStatus>=1锛滄姤璀︼紴  TriggerZoneStatus=0锛滃彇娑堟姤璀︼紴)</para>
         /// <para>21: Door/Window 闂ㄧ獥浼犳劅鍣紙鏈�21鍜�22锛岃繖閲屾病鏈夊啓閿欙級</para>
         /// <para>22:Door/Window 闂ㄧ獥浼犳劅鍣紙鏈�21鍜�22锛岃繖閲屾病鏈夊啓閿�</para>
-        /// <para>541 鐞冨瀷绉诲姩浼犳劅鍣�</para>
         /// </summary>
         public int IasDeviceType;
         /// <summary>
@@ -116,7 +115,7 @@
         /// </summary>
         public int ZigbeeType;
         /// <summary>
-        /// 褰撳墠杩愯绋嬪簭鐗堟湰淇℃伅銆� 鏈�澶�64瀛楄妭
+        /// 鍥轰欢鐗堟湰
         /// </summary>
         public int ImgVersion;
         /// <summary>
diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/Safeguard.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/Safeguard.cs
index 04f6b80..af40ff4 100755
--- a/ZigbeeApp/Shared/Phone/ZigBee/Device/Safeguard.cs
+++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/Safeguard.cs
@@ -4706,7 +4706,15 @@
             /// <summary>
             /// 闃插尯鍚嶇О 锛屾渶澶�32涓瓧绗�
             /// </summary>
-            public string ZoneName;
+            public string ZoneName;
+
+            /// <summary>
+            /// 鏄惁绂佺敤淇℃伅鎺ㄩ�侊細
+            ///<para>0锛氫笉绂佺敤</para>
+            ///<para>1锛氱鐢�</para>
+            ///<para>褰撻槻鍖虹殑淇℃伅鎺ㄩ�佽绂佺敤鏃讹紝闃插尯琚Е鍙戞椂涓嶄細鍙戦��18灏忚妭鐨勨�濋槻鍖鸿瑙﹀彂鏄姤鍛娾�濈殑涓婚淇℃伅銆�</para>
+            /// </summary>
+            public int IsDisablePushMessage = 0;
 
             /// <summary>
             /// 瀹夐槻璁惧鍒楄〃
diff --git a/ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGatewayData.cs b/ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGatewayData.cs
index ab48517..33f7267 100755
--- a/ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGatewayData.cs
+++ b/ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGatewayData.cs
@@ -72,7 +72,7 @@
         /// <summary>
         /// 铏氭嫙椹卞姩淇℃伅
         /// </summary>
-        public List<DriveCodeListObj> DriveCodeList = new List<DriveCodeListObj>();
+        public List<DriveCodeObj> DriveCodeList = new List<DriveCodeObj>();
 
         /// <summary>
         /// 铏氭嫙缃戝叧
@@ -249,32 +249,9 @@
             /// <summary>
             /// 铏氭嫙椹卞姩淇℃伅
             /// </summary>
-            public List<DriveCodeListObj> DriveCodeList = new List<DriveCodeListObj>();
+            public List<DriveCodeObj> DriveCodeList = new List<DriveCodeObj>();
         }
 
-        public class DriveCodeListObj
-        {
-            /// <summary>
-            /// 椹卞姩浠e彿锛堢敱缃戝叧涓洪┍鍔ㄥ垎閰嶅敮涓�鏍囪瘑锛�
-            /// </summary>
-            public int DriveCode;
-            /// <summary>
-            /// 椹卞姩纭欢鐗堟湰
-            /// </summary>
-            public int DriveHwVersion;
-            /// <summary>
-            /// 椹卞姩杞欢鐗�
-            /// </summary>
-            public int DriveFwVersion;
-            /// <summary>
-            /// 椹卞姩鍥轰欢绫诲瀷
-            /// </summary>
-            public int DriveImageType;
-            /// <summary>
-            /// 椹卞姩id
-            /// </summary>
-            public int DriveId;
-        }
         #endregion
 
         #region 淇敼缃戝叧鍚嶇О
diff --git a/ZigbeeApp/Shared/R.cs b/ZigbeeApp/Shared/R.cs
index aef72af..b767caa 100755
--- a/ZigbeeApp/Shared/R.cs
+++ b/ZigbeeApp/Shared/R.cs
@@ -5846,6 +5846,14 @@
         /// 閽ュ寵鎵�
         /// </summary>
         public const int uKeyfob = 16143;
+        /// <summary>
+        /// 鑹插�煎彿涓�6浣嶏紙鐢变换鎰忔暟瀛�+瀛楁瘝缁勫悎锛�
+        /// </summary>
+        public const int uColorLengthMsg = 16144;
+        /// <summary>
+        /// 闀挎寜姝ゆ寜閿�
+        /// </summary>
+        public const int uLongPressThisButton = 16145;
 
 
         //鈽呪槄鈽呪槄涓嬮潰杩欎簺鏄帴鍙g殑杩斿洖淇℃伅缈昏瘧,浠�18000寮�濮嬧槄鈽呪槄鈽�
diff --git a/ZigbeeApp/Shared/Shared.projitems b/ZigbeeApp/Shared/Shared.projitems
index 651aaa1..25ce690 100755
--- a/ZigbeeApp/Shared/Shared.projitems
+++ b/ZigbeeApp/Shared/Shared.projitems
@@ -45,6 +45,7 @@
     <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\LogicView\IfString.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\LogicView\LightView.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\LogicView\mFunView.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\LogicView\RoomClickView.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\LogicView\SaveView.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\LogicView\SelectedDeviceView.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\LogicView\TipView.cs" />
@@ -139,6 +140,9 @@
     <Compile Include="$(MSBuildThisFileDirectory)Phone\SmartSound\Widget\MyButton.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\SmartSound\Widget\SoundRowLayout.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\SmartSound\Widget\TextDialog.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Phone\TemplateData\TemplateCommonLogic.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Phone\TemplateData\TemplateDataCommon.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Phone\TemplateData\TemplateDeviceDataLogic.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\Abount\AbountForm.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\Abount\SLAForm.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\CommonBase\Common\AccountOption.cs" />
@@ -291,6 +295,8 @@
     <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\HdlBackup\HdlBackupListForm.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\HideOption\HideOptionDirectoryListForm.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\HideOption\HideOptionFileContentForm.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\HideOption\HideOptionGatewayInfoMenuForm.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\HideOption\HideOptionGatewayListFileForm.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\HideOption\HideOptionGatewayListForm.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\HideOption\HideOptionMainForm.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Phone\UserCenter\HideOption\HideOptionMemoryListDeviceForm.cs" />

--
Gitblit v1.8.0