gxc
2020-01-10 c0021397eeb8335d6d1f20990c71533c3d94e7af
Merge remote-tracking branch 'origin/dev-tzy' into DEV_GXC
10个文件已删除
84个文件已修改
4985 ■■■■■ 已修改文件
ZigbeeApp/.vs/GateWay/xs/project-cache/DroidLib-Debug.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/.vs/GateWay/xs/project-cache/GateWay.Droid-Debug.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/.vs/GateWay/xs/project-cache/GateWay.Ios-Debug|iPhoneSimulator.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/.vs/GateWay/xs/project-cache/ShardLib-Debug.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/.vs/GateWay/xs/project-cache/Shared.Droid-Debug.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/.vs/GateWay/xs/project-cache/Shared.IOS-Debug.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/.vs/GateWay/xs/sqlite3/db.lock 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/.vs/GateWay/xs/sqlite3/storage.ide 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/GateWay.Droid/Assets/Language.ini 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/GateWay.Droid/Properties/AndroidManifest.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Home.Ios/Resources/Language.ini 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Home.Ios/mono_crash.115869ea88.0.json 775 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Home.Ios/mono_crash.f3dbef0b0.0.json 741 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Common/CommonPage.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Common/Device.cs 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Common/Room.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Category/Category.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/CommonForm/DeviceDetailInfo.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/CommonForm/LeftIconButtonRow.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Curtain/RollerShadeControl.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Light/DimmableLightControl.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/CustomText.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/DoorLockLogic/AddCondition.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/DoorLockLogic/LockLogicCommunalPage.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/DoorLockLogic/LockLogicList.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/LogicCommunalPage.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/MemberList.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/SecurityMode.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/Send.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/TemplateDeviceCondition.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Logic/TemplatePage.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Device/Room/EditRoom.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/GatewayBackupEnum.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/UserCenterCommon.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/CompoundControls/SafetySensorStatuControl.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/FrameLayoutControls/FrameCaptionInputControl.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/FrameLayoutControls/FrameRowControl.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/NormalControls/MessageManagementControl.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/SceneControls/ScenePictrueControl.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Form/Base/EditorCommonForm.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlACZbGatewayUpdateLogic.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlBackupLogic.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAirConditionerLogic.cs 642 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceFixedAttributeLogic.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePirSensorLogic.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/UserCenterLogic.cs 166 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/DirectoryFileNameResourse.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/IndoorUnitListForm.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/IndoorUnitSettionForm.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddDevicePage.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddScenePage.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs 159 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceAddSuccessForm.cs 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceDryContactSettionForm.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceFirmwareUpdateForm.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceGeneralInformationForm.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceListMainForm.cs 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceSearchForm.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelBackLightSettionForm.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/PirSensor/PirSensorBindTargetSettionForm.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Relay/RelayThreeLoadBackLightSettionForm.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonLayout.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/EntryStatusPage.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/FunctionSetting.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/FunctionSettingSub.cs 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/MemberFrozenPage.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UnLockMethod.cs 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UndistributeDoorlockUserPage.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserManagement.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Gateway/Update/GatewayFirmwareUpdateForm.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionMainForm.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Password/EditorGesturePasswordForm.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Residence/LookRoomSettionForm.cs 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Residence/ResidenceManagementForm.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Safety/SafetyManagementMainForm.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Suggestion/FeedbackForm.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserView/UserPage.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/ZigBee/Common/Config.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs 629 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/ZigBee/Device/BindObj.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/ZigBee/Device/Enum.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGateway.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/R.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Shared.projitems 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/.vs/GateWay/xs/project-cache/DroidLib-Debug.json
File was deleted
ZigbeeApp/.vs/GateWay/xs/project-cache/GateWay.Droid-Debug.json
File was deleted
ZigbeeApp/.vs/GateWay/xs/project-cache/GateWay.Ios-Debug|iPhoneSimulator.json
File was deleted
ZigbeeApp/.vs/GateWay/xs/project-cache/ShardLib-Debug.json
File was deleted
ZigbeeApp/.vs/GateWay/xs/project-cache/Shared.Droid-Debug.json
File was deleted
ZigbeeApp/.vs/GateWay/xs/project-cache/Shared.IOS-Debug.json
File was deleted
ZigbeeApp/.vs/GateWay/xs/sqlite3/db.lock
ZigbeeApp/.vs/GateWay/xs/sqlite3/storage.ide
Binary files differ
ZigbeeApp/GateWay.Droid/Assets/Language.ini
@@ -232,7 +232,7 @@
226=确认删除按键模式及{0}清空所有目标
227=清空所有目标
228=确认
229=分享成功
229=分配成功
230=确定要将该账户解冻?
548=提醒设置
550=新增用户
@@ -369,7 +369,7 @@
5097=取消
5098=确认
5098=确定
5099=提示
5100=逻辑列表
5101=无
@@ -412,7 +412,7 @@
5138=时间条件
5139=条件
5140=推送设置
5141=推送开关
5141=推送消息
5142=自定义推送
5143=日出前
5144=日出后
@@ -540,7 +540,7 @@
5266=布防
5267=请选择布防或撤防为条件
5268=请选择安防类型
5269=有人
5269=检测有人时
5270=无人
5271=开启
5272=关闭
@@ -554,7 +554,7 @@
5280=立即执行
5281=时间范围
5282=自定义房间
5283=设置周期
5283=生效时间
5284=自动化
5285=自动化名称
5286=如果
@@ -614,12 +614,13 @@
5370=请选择用户,否则无法执行下一步.
5371=请选择场景,否则无法执行下一步.
5372=请选择安防模式,否则无法执行下一步.
5373=自动化已执行.
5373=已执行.
5374=添加传感器
5375=添加开关/灯光
5376=应用
5377=没有自动化{\r\n} 请点击右上角添加
5378=推送内容不能为空.
5379=暂无门锁联动事件{\r\n} 请点击右上角添加
@@ -1678,7 +1679,7 @@
15920=邮箱地址
15921=请输入您的邮箱地址
15922=提交
15923=提交成功,感谢您的意见
15923=您的反馈已成功提交
15924=上传
15925=自动备份
15926=今日提交次数已上限
@@ -1816,6 +1817,9 @@
16058=我的家
16059=长按“我的家”{0}可切换我的住宅
16060=办公室
16061=电机数据异常,请重置电机
16062=获取空调摆风状态失败
16063=设置空调摆风失败
;★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
18004=指定网关已经被绑定
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="2019123101" android:installLocation="auto" android:versionName="1.0.19123101">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hdl.home" android:versionCode="2020010701" android:installLocation="auto" android:versionName="1.0.20010701">
    <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" />
ZigbeeApp/Home.Ios/Resources/Language.ini
@@ -232,7 +232,7 @@
226=确认删除按键模式及{0}清空所有目标
227=清空所有目标
228=确认
229=分享成功
229=分配成功
230=确定要将该账户解冻?
548=提醒设置
550=新增用户
@@ -369,7 +369,7 @@
5097=取消
5098=确认
5098=确定
5099=提示
5100=逻辑列表
5101=无
@@ -412,7 +412,7 @@
5138=时间条件
5139=条件
5140=推送设置
5141=推送开关
5141=推送消息
5142=自定义推送
5143=日出前
5144=日出后
@@ -540,7 +540,7 @@
5266=布防
5267=请选择布防或撤防为条件
5268=请选择安防类型
5269=有人
5269=检测有人时
5270=无人
5271=开启
5272=关闭
@@ -554,7 +554,7 @@
5280=立即执行
5281=时间范围
5282=自定义房间
5283=设置周期
5283=生效时间
5284=自动化
5285=自动化名称
5286=如果
@@ -614,12 +614,13 @@
5370=请选择用户,否则无法执行下一步.
5371=请选择场景,否则无法执行下一步.
5372=请选择安防模式,否则无法执行下一步.
5373=自动化已执行.
5373=已执行.
5374=添加传感器
5375=添加开关/灯光
5376=应用
5377=没有自动化{\r\n} 请点击右上角添加
5378=推送内容不能为空.
5379=暂无门锁联动事件{\r\n} 请点击右上角添加
@@ -704,9 +705,9 @@
11001=场景
11002=自动化
11010=没有功能 {\r\n} 请在个人中心中--设备管理处添加
11010=没有功能 {\r\n} 请在个人中心--设备管理处添加
11011=编辑
11012=设置功能
11012=功能设置
11013=信息编辑
11014=功能名称
11015=所属区域
@@ -731,7 +732,7 @@
11034=确定要移除该功能?
11035=添加功能
11036=添加延时
11037=空调模式为空,请先配置
12100=未知设备
@@ -1678,7 +1679,7 @@
15920=邮箱地址
15921=请输入您的邮箱地址
15922=提交
15923=提交成功,感谢您的意见
15923=您的反馈已成功提交
15924=上传
15925=自动备份
15926=今日提交次数已上限
@@ -1816,6 +1817,9 @@
16058=我的家
16059=长按“我的家”{0}可切换我的住宅
16060=办公室
16061=电机数据异常,请重置电机
16062=获取空调摆风状态失败
16063=设置空调摆风失败
;★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
18004=指定网关已经被绑定
ZigbeeApp/Home.Ios/mono_crash.115869ea88.0.json
File was deleted
ZigbeeApp/Home.Ios/mono_crash.f3dbef0b0.0.json
File was deleted
ZigbeeApp/Shared/Common/CommonPage.cs
@@ -62,7 +62,7 @@
        /// <summary>
        /// 版本号
        /// </summary>
        public static string CodeIDString = "1.0.19123101";
        public static string CodeIDString = "1.0.20011001";
        /// <summary>
        /// 注册来源(0:HDL On 1:Zigbee)
        /// </summary>
ZigbeeApp/Shared/Common/Device.cs
@@ -37,7 +37,7 @@
            }
        }
        /// <summary>
        /// 本地所有设备的缓存(排序)
        /// 本地所有设备的缓存
        /// </summary>
        public List<CommonDevice> listAllDevice
        {
@@ -223,26 +223,25 @@
        #region ■ 添加设备___________________________
        /// <summary>
        /// 将指定网关的设备存入缓存中(从新获取镜像)
        /// <para>将指定网关的设备存入缓存中(从新获取镜像)</para>
        /// <para>-1:异常 1:正常 2:设备信息缺损</para>
        /// </summary>
        /// <param name="zbGateway">网关对象</param>
        /// <param name="deviceComingAction">接收到设备时的事件,设备对象为null时,代表接收完成</param>
        /// <returns>一直返回true</returns>
        public bool SetDeviceToMemmoryByGateway(ZbGateway zbGateway, Action<CommonDevice> deviceComingAction = null)
        public int SetDeviceToMemmoryByGateway(ZbGateway zbGateway)
        {
            //从网关获取全部的设备
            int statu = 0;
            List<CommonDevice> listDevice = new List<CommonDevice>();
            List<CommonDevice> list = this.GetDeviceListFromGateway(zbGateway, true, deviceComingAction);
            List<CommonDevice> list = this.GetDeviceListFromGateway(zbGateway, ref statu, true);
            if (list == null)
            {
                return false;
                return -1;
            }
            listDevice.AddRange(list);
            //获取这个网关的本地所有设备
            string gwID = HdlGatewayLogic.Current.GetGatewayId(zbGateway);
            List<CommonDevice> listLocalDevices = this.GetDeviceByGatewayID(gwID);
            List<CommonDevice> listLocalDevices = this.GetDeviceByGatewayID(gwID, true);
            Dictionary<string, CommonDevice> dicExist = new Dictionary<string, CommonDevice>();
            foreach (var device in listLocalDevices)
            {
@@ -274,25 +273,13 @@
            for (int i = 0; i < listDevice.Count; i++)
            {
                var device = listDevice[i];
                //对未命名的设备重新命名
                if (this.GetSimpleEpointName(device) == string.Empty)
                //对未命名的虚拟设备重新命名
                if (device.DriveCode > 0 && this.GetSimpleEpointName(device) == string.Empty)
                {
                    //根据设备类型获取名称
                    var dName = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false);
                    //虚拟设备的话,附加回路号
                    if (device.DriveCode > 0)
                    {
                        //在端点名字的后面附加【回路】字样
                        dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
                    }
                    //多回路设备的话,附加回路号
                    else if (dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && dicDeviceEpoint[device.DeviceAddr].Count > 1)
                    {
                        var arry = dName.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries);
                        dName = arry[0].Trim();
                        //在端点名字的后面附加【回路】字样
                        dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
                    }
                    //在端点名字的后面附加【回路】字样
                    dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
                    HdlThreadLogic.Current.RunThread(async () =>
                    {
@@ -301,14 +288,26 @@
                }
            }
            //如果本地和网关的设备不一致的时候,暂时删除本地的设备
            //注意:只是删除设备文件,房间内容什么的还存在着
            foreach (var device in dicExist.Values)
            //只有完全获取的时候,才会去处理删除的问题
            if (statu != 1)
            {
                this.DeleteMemmoryDevice(device, false);
                return statu;
            }
            return true;
            //如果本地和网关的设备不一致的时候,删除本地的设备
            foreach (var device in dicExist.Values)
            {
                if (device is OTADevice)
                {
                    this.DeleteMemmoryOtaDevice(device.DeviceAddr);
                }
                else
                {
                    this.DeleteMemmoryDevice(device, true);
                }
            }
            return statu;
        }
        /// <summary>
@@ -482,15 +481,25 @@
            lock (dicAllDevice)
            {
                string mainKeys = this.GetDeviceMainKeys(device);
                if (this.dicAllDevice.ContainsKey(mainKeys) == false)
                if (this.dicAllDevice.ContainsKey(mainKeys) == true)
                {
                    return;
                }
                this.dicAllDevice[mainKeys] = device;
                device.ReSave();
                    //一般设备
                    this.dicAllDevice[mainKeys] = device;
                    device.ReSave();
                //添加自动备份
                HdlAutoBackupLogic.AddOrEditorFile(device.FilePath);
                    //添加自动备份
                    HdlAutoBackupLogic.AddOrEditorFile(device.FilePath);
                }
                else if (this.dicOTADevice.ContainsKey(mainKeys) == true)
                {
                    //Ota设备
                    this.dicOTADevice[mainKeys] = (OTADevice)device;
                    device.ReSave();
                    //添加自动备份
                    HdlAutoBackupLogic.AddOrEditorFile(device.FilePath);
                }
            }
        }
@@ -522,11 +531,14 @@
                return false;
            }
            //删除文件
            //删除缓存的Ota设备
            this.DeleteMemmoryOtaDevice(listdevice[0].DeviceAddr);
            //删除一般设备文件
            foreach (CommonDevice device in listdevice)
            {
                this.DeleteMemmoryDevice(device);
            }
            if (this.dicDeviceRoomId.ContainsKey(listdevice[0].DeviceAddr) == true)
            {
                //移除真实设备的房间索引
@@ -537,7 +549,7 @@
        }
        /// <summary>
        /// 删除缓存的设备
        /// 删除缓存的一般设备
        /// </summary>
        /// <param name="device">设备对象</param>
        /// <param name="deleteRoom">是否从房间删除</param>
@@ -559,6 +571,11 @@
                {
                    this.dicAllDevice.Remove(mainKeys);
                }
                if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true)
                {
                    //变更端点数
                    this.dicDeviceEpoint[device.DeviceAddr].Remove(device.DeviceEpoint);
                }
            }
            //删除设备文件
@@ -578,9 +595,17 @@
                    HdlAutoBackupLogic.DeleteFile(device.FilePath);
                }
            }
        }
        /// <summary>
        /// 删除缓存的Ota设备
        /// </summary>
        /// <param name="macAdrr"></param>
        /// <param name="ePoint"></param>
        public void DeleteMemmoryOtaDevice(string macAdrr, int ePoint = 200)
        {
            //删除200端口文件
            string otaKeys = this.GetDeviceMainKeys(device.DeviceAddr, 200);
            string otaKeys = this.GetDeviceMainKeys(macAdrr, ePoint);
            if (this.dicOTADevice.ContainsKey(otaKeys) == true)
            {
                string otaFile = this.dicOTADevice[otaKeys].FilePath;
@@ -589,12 +614,12 @@
                    if (UserCenterResourse.UserInfo.AuthorityNo == 3)
                    {
                        //成员的话,直接删除,没有商量的余地
                        Global.DeleteFilebyHomeId(filePath);
                        Global.DeleteFilebyHomeId(otaFile);
                    }
                    else
                    {
                        //变更:搞掉它,不留了
                        Global.DeleteFilebyHomeId(filePath);
                        Global.DeleteFilebyHomeId(otaFile);
                        //删除自动备份
                        HdlAutoBackupLogic.DeleteFile(otaFile);
                    }
@@ -678,8 +703,9 @@
        /// 根据网关ID获取所有的设备
        /// </summary>
        /// <param name="gwId">网关ID</param>
        /// <param name="getOtaDevice">是否获取ota设备</param>
        /// <returns></returns>
        public List<CommonDevice> GetDeviceByGatewayID(string gwId)
        public List<CommonDevice> GetDeviceByGatewayID(string gwId, bool getOtaDevice = false)
        {
            List<CommonDevice> list = new List<CommonDevice>();
            lock (dicAllDevice)
@@ -690,6 +716,17 @@
                    if (gwId == device.CurrentGateWayId)
                    {
                        list.Add(device);
                    }
                }
                if (getOtaDevice == true)
                {
                    //获取ota设备
                    foreach (var ota in this.dicOTADevice.Values)
                    {
                        if (ota.CurrentGateWayId == gwId)
                        {
                            list.Add(ota);
                        }
                    }
                }
            }
@@ -815,6 +852,30 @@
            return this.dicOTADevice[mainkeys];
        }
        /// <summary>
        /// 获取特殊的,没有其他回路,单纯只有200端点的OTA设备
        /// </summary>
        /// <param name="gwId">网关ID</param>
        /// <returns></returns>
        public List<OTADevice> GetSpecialOtaDevice(string gwId)
        {
            var list = new List<OTADevice>();
            foreach (var ota in this.dicOTADevice.Values)
            {
                if (ota.CurrentGateWayId != gwId)
                {
                    //不是同一个网关
                    continue;
                }
                if (dicDeviceEpoint.ContainsKey(ota.DeviceAddr) == false
                    || dicDeviceEpoint[ota.DeviceAddr].Count == 0)
                {
                    list.Add(ota);
                }
            }
            return list;
        }
        #endregion
        #region ■ 获取设备名称_______________________
@@ -832,16 +893,39 @@
                return dName;
            }
            //根据设备类型获取名称
            dName = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false);
            var tempValue = this.GetDeviceObjectText(new List<CommonDevice>() { device }, false);
            var arry = tempValue.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries);
            dName = arry[0].Trim();
            //如果是虚拟设备
            if (device.DriveCode > 0
                || (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count > 1))
            if (device.DriveCode > 0)
            {
                var arry = dName.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries);
                dName = arry[0].Trim();
                //在端点名字的后面附加【回路】字样
                dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
                return dName;
            }
            //获取设备类型
            var deviceInfoType = this.GetMyDeviceEnumInfo(new List<CommonDevice>() { device });
            if (deviceInfoType.BeloneType == Common.DeviceBeloneType.A按键面板 && device.Type == DeviceType.TemperatureSensor)
            {
                //面板的最后一个回路是温度传感器
                dName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId11);
            }
            else if (deviceInfoType.ConcreteType == Common.DeviceConcreteType.Sensor_Pir)
            {
                //pir传感器,它又搞特殊东西,传感器自身用自己的名字,继电器回路的话……
                if (device.Type == DeviceType.OnOffOutput)
                {
                    dName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId2300);
                }
            }
            else if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == true && this.dicDeviceEpoint[device.DeviceAddr].Count > 1)
            {
                //XXXXX(N回路)
                dName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
            }
            return dName;
        }
@@ -1157,13 +1241,18 @@
            {
                //不存在则使用共通图片
                string[] arry = strSpecific.Split(new string[] { "_" }, StringSplitOptions.None);
                if (arry.Length == 1)
                //如果它自己就是共通图片的话,不再处理
                if (arry.Length > 1)
                {
                    //如果它自己就是共通图片的话,不再处理
                    return;
                    imageFilePath = "Device/" + arry[0] + ".png";
                    imageSelectFilePath = "Device/" + arry[0] + "Selected.png";
                }
                imageFilePath = "Device/" + arry[0] + ".png";
                imageSelectFilePath = "Device/" + arry[0] + "Selected.png";
            }
            //如果那款设备连共通图片都没有的话
            if (string.IsNullOrEmpty(IO.FileUtils.GetImageFilePath(imageFilePath)) == true)
            {
                imageFilePath = "Device/ThirdPartyDevice.png";
                imageSelectFilePath = "Device/ThirdPartyDeviceSelected.png";
            }
            //设置图片
            unSelectPath = imageFilePath;
@@ -1690,6 +1779,11 @@
            //如果设备只有一个回路,如果改变了真实设备区域,则它的回路的区域也一起改了
            if (saveRoadDevice == true && listDevice != null && listDevice.Count == 1)
            {
                if (listDevice[0] is OTADevice)
                {
                    //单纯只是Ota设备则不处理
                    return;
                }
                Common.Room.CurrentRoom.ChangedRoom(listDevice[0], roomId, false);
            }
        }
@@ -1832,36 +1926,23 @@
        #region ■ 获取设备列表的接口_________________
        /// <summary>
        /// 从网关重新获取设备列表(★★★★★★★接收到设备时的事件★★★★★★★)
        /// <para>从网关重新获取设备列表(返回的设备为虚拟出来的)</para>
        /// <para>statu状态 -1:异常,会返回null, 1:没有异常, 2:数据接收不全</para>
        /// </summary>
        /// <param name="zbGateway">网关对象</param>
        /// <param name="ignoreTime">是否无视时间,true:每次调用都去网关获取,false:3分钟内返回的是本地的设备</param>
        /// <param name="deviceComingAction">接收到设备时的事件</param>
        /// <param name="statu">状态-> -1:异常,会返回null, 1:没有异常, 2:数据接收不全</param>
        /// <param name="ignoreTime">是否无视时间(此变量是给获取在线状态用的),true:每次调用都去网关获取,false:3分钟内返回的是本地的设备</param>
        /// <param name="mode">是否显示错误</param>
        /// <returns></returns>
        public List<CommonDevice> GetDeviceListFromGateway(ZbGateway zbGateway, bool ignoreTime, Action<CommonDevice> deviceComingAction = null, ShowErrorMode mode = ShowErrorMode.YES)
        public List<CommonDevice> GetDeviceListFromGateway(ZbGateway zbGateway, ref int statu, bool ignoreTime, ShowErrorMode mode = ShowErrorMode.YES)
        {
            if (ignoreTime == false)
            {
                if ((DateTime.Now - zbGateway.LastDateTime).TotalMilliseconds < 3 * 60 * 1000)
                {
                    //不无视时间,返回本地设备列表
                    var listTemp = this.GetDeviceByGatewayID(HdlGatewayLogic.Current.GetGatewayId(zbGateway));
                    if (deviceComingAction != null)
                    {
                        for (int i = 0; i < listTemp.Count; i++)
                        {
                            try
                            {
                                //回调函数
                                deviceComingAction.Invoke(listTemp[i]);
                            }
                            //Log出力
                            catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
                        }
                    }
                    deviceComingAction = null;
                    return listTemp;
                    statu = 1;
                    return this.GetDeviceByGatewayID(HdlGatewayLogic.Current.GetGatewayId(zbGateway));
                }
            }
            zbGateway.LastDateTime = DateTime.Now;
@@ -1878,6 +1959,7 @@
                    string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg);
                    this.ShowTipMsg(msg);
                }
                statu = -1;
                return null;
            }
@@ -1930,8 +2012,6 @@
                                //网关里面有可能会有重复的回路
                                if (listCheck.Contains(mainkeys) == false)
                                {
                                    //回调函数
                                    deviceComingAction?.Invoke(device);
                                    listDevice.Add(device);
                                    listCheck.Add(mainkeys);
@@ -1980,6 +2060,7 @@
                        msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "回复超时", false);
                        this.ShowTipMsg(msg);
                    }
                    statu = -1;
                    return null;
                }
                else
@@ -1990,12 +2071,9 @@
                        string msg = Language.StringByID(R.MyInternationalizationString.uNetworkUnStableAndDeviceInfoIsNotFull);
                        this.ShowTipMsg(msg);
                    }
                    statu = 2;
                }
            }
            //回调函数(接收完成)
            deviceComingAction = null;
            }
            return listDevice;
        }
@@ -2201,9 +2279,9 @@
            this.dicDeviceModelIdEnum["MPT2/R2-ZB.18"] = "202-200";//2按键触摸面板
            this.dicDeviceModelIdEnum["MPT1/R1-ZB.18"] = "203-200";//12按键触摸面板
            this.dicDeviceModelIdEnum["MPT4-ZB.18"] = "210-200";//4按键触摸面板(只带电源底座)
            this.dicDeviceModelIdEnum["MPT4R4L/S-ZB1.8"] = "220-200";//简约4按键面板
            this.dicDeviceModelIdEnum["MPT3R3L/S-ZB1.8"] = "221-200";//简约3按键面板
            this.dicDeviceModelIdEnum["MPT2R2L/S-ZB1.8"] = "222-200";//简约2按键面板
            this.dicDeviceModelIdEnum["MPT4R4L/S-ZB.18"] = "220-200";//简约4按键面板
            this.dicDeviceModelIdEnum["MPT3R3L/S-ZB.18"] = "221-200";//简约3按键面板
            this.dicDeviceModelIdEnum["MPT2R2L/S-ZB.18"] = "222-200";//简约2按键面板
            //=========★★PIR传感器类(1200-1299)★★=========
            this.dicDeviceModelIdEnum["MSPIR01-ZB.10"] = "1200-1200";//pir传感器220
@@ -2238,6 +2316,8 @@
            this.dicDeviceModelIdEnum["MBUS/GW-ZB.10"] = "4200-4200";//zigbee转buspro协议转换器
            this.dicDeviceModelIdEnum["M485/GW-ZB.10"] = "4201-4200";//zigbee转485协议转换器
            //✩✩✩✩✩需要交换的模块ID✩✩✩✩✩
            this.dicDeviceModelIdChanged = new Dictionary<string, string>();
            //=========★★安防类传感器类★★=========
@@ -2247,6 +2327,8 @@
            this.dicDeviceModelIdChanged["MULTI-MOTI--EA04"] = "MSPIR01/M-ZB.10";//红外传感器
            this.dicDeviceModelIdChanged["MULTI-WATE--EA02"] = "MSW01/M-ZB.10";//水浸传感器
            this.dicDeviceModelIdChanged["MULTI-BURO--EA06"] = "MBU01/M-ZB.10";//紧急按键
            //✩✩✩✩✩需要共有的图片对象✩✩✩✩✩
            this.dicPictrueShard = new Dictionary<string, string>();
@@ -2463,19 +2545,19 @@
        //=========★★其他类(????-????)★★=========
        /// <summary>
        /// 干接点
        /// 干接点(注意,它属于其他类,不是设备类型)
        /// </summary>
        DryContact = -10000,
        /// <summary>
        /// 灯光(注意,它输入其他类,不是设备类型)
        /// 灯光(注意,它属于其他类,不是设备类型)
        /// </summary>
        Light = -10001,
        /// <summary>
        /// 插座
        /// 插座(注意,它属于其他类,不是设备类型)
        /// </summary>
        Socket1 = -10002,
        /// <summary>
        /// 开关
        /// 开关(注意,它属于其他类,不是设备类型)
        /// </summary>
        Switch = -10003,
    }
ZigbeeApp/Shared/Common/Room.cs
@@ -98,6 +98,7 @@
            {
                if (m_CurrentRoom == null && Lists.Count > 0)
                {
                    if (m_CurrentRoom == null) { m_CurrentRoom = Lists[0]; }
                    return Lists[0];
                }
                return m_CurrentRoom;
@@ -366,7 +367,6 @@
        /// </summary>
        public static void RefreshAllRoomByLocation()
        {
            Lists.Clear();
            var homeTemp = Config.Instance.Home;
            homeTemp.RoomFilePathList.Clear();
@@ -377,7 +377,7 @@
            if (listFile.Contains(fRoom) == true)
            {
                listFile.Remove(fRoom);
                homeTemp.AddRoomListFilePath(fRoom);
                homeTemp.RoomFilePathList.Add(fRoom);
            }
            var listRoomFile = new List<string>();
@@ -385,7 +385,7 @@
            {
                if (fileName.StartsWith("Room_"))
                {
                    homeTemp.AddRoomListFilePath(fileName);
                    homeTemp.RoomFilePathList.Add(fileName);
                    listRoomFile.Add(fileName);
                }
            }
@@ -736,7 +736,7 @@
                System.Console.WriteLine(ex.Message);
                return null;
            }
        }
        /// <summary>
        /// 获取当前楼层的房间名称
@@ -940,8 +940,6 @@
                //保存到本地
                Save();
                //添加自动备份
                HdlAutoBackupLogic.AddOrEditorFile(FileName);
                if (saveRealRoom == true && LocalDevice.Current.GetDevicesCountByMac(device.DeviceAddr) == 1)
                {
                    //如果只有一个回路,则修改真实物理设备的房间
@@ -1419,7 +1417,7 @@
            SceneUIList.Remove(sceneUI);
            SceneUIFilePathList.Remove(sceneUI.FileName);
            Save();
            Global.DeleteFilebyHomeId(sceneUI.FileName);
            HdlAutoBackupLogic.DeleteFile(sceneUI.FileName);
        }
ZigbeeApp/Shared/Phone/Device/Category/Category.cs
@@ -1093,7 +1093,7 @@
                                        }
                                    })
                                    { IsBackground = true }.Start();
                                    var deviceRow = new CategoryFunctionRow(0, 35);
                                    deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath);
                                    deviceRow.SetTitle(deviceUI.CommonDevice.DeviceEpointName);
@@ -2206,7 +2206,8 @@
                            Common.Logic.CurrentLogic.IsEnable = 1;//默认为开
                            if (logiciocnBtn.Tag.ToString() == "3")
                            {
                                Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text;// Language.StringByID(MyInternationalizationString.automation1);
                                Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text;
                                Common.Logic.CurrentLogic.LogicCustomPushText = Common.Logic.CurrentLogic.LogicName + Language.StringByID(MyInternationalizationString.defaulttext);
                                var addLogicPage = new Logic.AddLogicPage();
                                HomePage.Instance.AddChidren(addLogicPage);
                                HomePage.Instance.PageIndex += 1;
@@ -2216,6 +2217,7 @@
                            {
                                Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text;
                                Common.Logic.CurrentLogic.LogicCustomPushText = Common.Logic.CurrentLogic.LogicName + Language.StringByID(MyInternationalizationString.defaulttext);
                                Logic.TemplatePage templatePage = new Logic.TemplatePage();
                                Logic.TemplatePage.s = logiciocnBtn.Tag.ToString();
                                HomePage.Instance.AddChidren(templatePage);
@@ -2870,4 +2872,4 @@
    }
}
}
ZigbeeApp/Shared/Phone/Device/CommonForm/DeviceDetailInfo.cs
@@ -144,7 +144,7 @@
            };
            bodyFrameLayout.AddChidren(deviceIMG);
            var info = Common.LocalDevice.Current.GetNotHdlMyDeviceEnumInfo(new List<CommonDevice> { device.CommonDevice });
            var info = Common.LocalDevice.Current.GetDeviceBelongEnumInfo(device.CommonDevice);
            var deviceTypeName = new Button()
            {
@@ -202,7 +202,7 @@
            nameRow.SetTitle(string.IsNullOrEmpty(device.CommonDevice.DeviceEpointName) ? Language.StringByID(R.MyInternationalizationString.UNKnown) : device.CommonDevice.DeviceEpointName);
            nameFL.AddChidren(nameRow);
            var zoneFL = new FrameLayout
            {
                Height = Application.GetRealHeight(127 + 12)
ZigbeeApp/Shared/Phone/Device/CommonForm/LeftIconButtonRow.cs
@@ -22,6 +22,10 @@
        /// </summary>
        public Action<LeftIconButtonRow, MouseEventArgs> ButtonClickEvent;
        /// <summary>
        /// 点击事件
        /// </summary>
        public Action<LeftIconButtonRow, MouseEventArgs> ButtonClickEvent;
        /// <summary>
        /// ClickBtn
        /// </summary>
        public Button ClickBtn;
ZigbeeApp/Shared/Phone/Device/Curtain/RollerShadeControl.cs
@@ -842,6 +842,37 @@
            ProgressBtn.Text = mProgress + "%";
        }
        /// <summary>
        /// 添加进度按钮
        /// </summary>
        private void InitProgressBtnForCurtain(FrameLayout layout)
        {
            ProgressBtnX = curtainSeekBar.X - Application.GetMinReal(20);
            ProgressBtn = new Button()
            {
                X = ProgressBtnX,
                Y = curtainSeekBar.Y + curtainSeekBar.Height / 2 - Application.GetMinReal(180),
                Width = Application.GetMinReal(135),
                Height = Application.GetMinReal(104),
                UnSelectedImagePath = "Item/ProgressBubbles.png",
                Visible = false,
                TextSize = 14,
                IsBold = true,
                TextColor = ZigbeeColor.Current.GXCTextWhiteColor
            };
            layout.AddChidren(ProgressBtn);
        }
        /// <summary>
        /// OnProgressButtonMove
        /// </summary>
        private void OnProgressButtonMoveForCurtain(int mProgress)
        {
            ProgressBtn.X = ProgressBtnX + curtainSeekBar.NowProgressX- Application.GetMinReal(5);
            ProgressBtn.Text = mProgress + "%";
        }
        #endregion
        #region ◆ 收藏到主页_______________________
ZigbeeApp/Shared/Phone/Device/Light/DimmableLightControl.cs
@@ -400,7 +400,7 @@
                WavePadding = Application.GetRealWidth(8),
                MaxValue=100,
                Progress = (int)(dimmableLight.Level*1.0/MaxLevel*100),
                CornerRadius= Application.GetRealHeight(58)
            };
ZigbeeApp/Shared/Phone/Device/Logic/CustomText.cs
@@ -96,7 +96,7 @@
            middle.AddChidren(textBtn);
            string s1 = "";
            string s2 = "";
            textBox.TextChangeEventHandler += (sender, e) =>
            textBox.TextChangeEventHandler += (sender, e) =>
            {
                var leng = e.Length;
                if (leng > 50)
@@ -135,7 +135,6 @@
                }
            };
            var btnsave = new Button
            {
                Y = middle.Height - Application.GetRealHeight(260),
@@ -163,15 +162,14 @@
                           alert.Show();
                           return;
                 }
                 if (Common.Logic.CurrentLogic.LogicId != 0)
                 {
                     ///只改推送内容;
                     Send.LogicControlSwitch(Common.Logic.CurrentLogic);
                     Send.Data("添加/更新", "/App/HomeLogicConfig", "POST");
                 }
                 Send.Zj(true, Common.Logic.CurrentLogic);
                 RemoveFromParent();
             };
        }
    }
}
ZigbeeApp/Shared/Phone/Device/Logic/DoorLockLogic/AddCondition.cs
@@ -284,11 +284,11 @@
            lockcolorfra1.Y = Application.GetRealHeight(1920 - 140 - (160 * membershipIfon.UserIdMode.Count) - 20 - 50);
            lockcolorfra1.Height = Application.GetRealHeight(140 + (160 * membershipIfon.UserIdMode.Count) + 20 + 50);
            if (membershipIfon.UserIdMode.Count > 10)
            if (membershipIfon.UserIdMode.Count > 9)
            {
                ///元素超出10个,暂时默认显示10;
                lockcolorfra1.Y = Application.GetRealHeight(1920 - 140 - (160 * 10) - 20 - 50);
                lockcolorfra1.Height = Application.GetRealHeight(140 + (160 * 10) + 20 + 50);
                lockcolorfra1.Y = Application.GetRealHeight(1920 - 140 - (160 * 9) - 20 - 50);
                lockcolorfra1.Height = Application.GetRealHeight(140 + (160 * 9) + 20 + 50);
            }
            string SelectedLockStatus = "";
            ///定义两个变量记录选中状态;
ZigbeeApp/Shared/Phone/Device/Logic/DoorLockLogic/LockLogicCommunalPage.cs
@@ -1070,10 +1070,6 @@
                    tag = true;
                    custompushFrameLayout.Height = Application.GetRealHeight(160);
                    Common.Logic.CurrentLogic.LogicIsCustomPushText = 1;
                    if (Common.Logic.CurrentLogic.LogicId != 0)
                    {
                        Send.Data("添加/更新", "/App/HomeLogicConfig", "POST");
                    }
                }
                else
@@ -1081,20 +1077,20 @@
                    tag = false;
                    custompushFrameLayout.Height = Application.GetRealHeight(0);
                    Common.Logic.CurrentLogic.LogicIsCustomPushText = 0;
                    if (Common.Logic.CurrentLogic.LogicId != 0)
                    {
                        Send.Data("删除", "/App/DelHomeLogicConfig", "POST");
                    }
                }
                Send.Zj(tag, Common.Logic.CurrentLogic);
            };
            if (Common.Logic.CurrentLogic.LogicIsCustomPushText == 0)
            {
                tag = false;
                btnswitch.IsSelected = false;
                custompushFrameLayout.Height = Application.GetRealHeight(0);
            }
            else
            {
                tag = true;
                btnswitch.IsSelected = true;
                custompushFrameLayout.Height = Application.GetRealHeight(160);
            }
            var saveFrameLayout = new FrameLayout
            {
@@ -1148,7 +1144,7 @@
                        Common.Logic.LockLogicList.Add(Common.Logic.CurrentLogic);
                        if (tag)
                        {
                            Send.Data("添加/更新", "/App/HomeLogicConfig", "POST");
                            Send.Zj(tag, Common.Logic.CurrentLogic);
                        }
                    }
                }
ZigbeeApp/Shared/Phone/Device/Logic/DoorLockLogic/LockLogicList.cs
@@ -83,6 +83,7 @@
                Common.Logic.CurrentLogic.LogicType = 1;
                Common.Logic.CurrentLogic.Relationship = 1;
                Common.Logic.CurrentLogic.LogicName = Language.StringByID(MyInternationalizationString.automation1);
                Common.Logic.CurrentLogic.LogicCustomPushText = Common.Logic.CurrentLogic.LogicName + Language.StringByID(MyInternationalizationString.defaulttext);
                var lockLogicCommunalPage = new LockLogicCommunalPage();
                UserView.HomePage.Instance.AddChidren(lockLogicCommunalPage);
                UserView.HomePage.Instance.PageIndex += 1;
@@ -182,7 +183,7 @@
                    Height = Application.GetRealHeight(200) + Application.GetRealHeight(32),
                    Width = Application.GetRealWidth(700),
                    //Gravity = Gravity.CenterHorizontal,
                    Text = Language.StringByID(MyInternationalizationString.automationaddtext).Replace("{\\r\\n}", "\r\n"),
                    Text = Language.StringByID(MyInternationalizationString.tiplocktextnull).Replace("{\\r\\n}", "\r\n"),
                    TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor,
                    TextAlignment = TextAlignment.Center,
                    IsMoreLines = true,
ZigbeeApp/Shared/Phone/Device/Logic/LogicCommunalPage.cs
@@ -1984,7 +1984,7 @@
            custompushback.MouseUpEventHandler += customclick;
            custompushRowLayout.MouseUpEventHandler += customclick;
            bool tag = false;//标记开关状态;
            btnswitch.MouseUpEventHandler += (sender1, e1) =>
            btnswitch.MouseUpEventHandler +=(sender1, e1) =>
              {
                  btnswitch.IsSelected = !btnswitch.IsSelected;
                  if (btnswitch.IsSelected)
@@ -1992,10 +1992,6 @@
                      tag = true;
                      custompushFrameLayout.Height = Application.GetRealHeight(160);
                      Common.Logic.CurrentLogic.LogicIsCustomPushText = 1;
                      if (Common.Logic.CurrentLogic.LogicId != 0)
                      {
                          Send.Data("添加/更新", "/App/HomeLogicConfig", "POST");
                      }
                  }
                  else
@@ -2003,20 +1999,21 @@
                      tag = false;
                      custompushFrameLayout.Height = Application.GetRealHeight(0);
                      Common.Logic.CurrentLogic.LogicIsCustomPushText = 0;
                      if (Common.Logic.CurrentLogic.LogicId != 0)
                      {
                          Send.Data("删除", "/App/DelHomeLogicConfig", "POST");
                      }
                  }
                  Send.Zj(tag,Common.Logic.CurrentLogic);
              };
            if (Common.Logic.CurrentLogic.LogicIsCustomPushText == 0)
            {
                tag = false;
                btnswitch.IsSelected = false;
                custompushFrameLayout.Height = Application.GetRealHeight(0);
            }
            else
            {
                tag = true;
                btnswitch.IsSelected = true;
                custompushFrameLayout.Height = Application.GetRealHeight(160);
            }
            #endregion
@@ -2056,7 +2053,7 @@
                        Common.Logic.LogicList.Add(Common.Logic.CurrentLogic);
                        if (tag)
                        {
                            Send.Data("添加/更新", "/App/HomeLogicConfig", "POST");
                            Send.Zj(tag, Common.Logic.CurrentLogic);
                        }
                    }
                }
ZigbeeApp/Shared/Phone/Device/Logic/MemberList.cs
@@ -296,11 +296,11 @@
            string SelectedDeviceStatuscondition = "";
            lockcolorfra1.Y = Application.GetRealHeight(1920 - 140 - (160 * user.UserIdMode.Count) - 20 - 50);
            lockcolorfra1.Height = Application.GetRealHeight(140 + (160 * user.UserIdMode.Count) + 20 + 50);
            if (user.UserIdMode.Count > 10)
            if (user.UserIdMode.Count > 9)
            {
                ///元素超出10个,暂时默认显示10;
                lockcolorfra1.Y = Application.GetRealHeight(1920 - 140 - (160 * 10) - 20 - 50);
                lockcolorfra1.Height = Application.GetRealHeight(140 + (160 * 10) + 20 + 50);
                lockcolorfra1.Y = Application.GetRealHeight(1920 - 140 - (160 * 9) - 20 - 50);
                lockcolorfra1.Height = Application.GetRealHeight(140 + (160 * 9) + 20 + 50);
            }
         
            for (int i = 0; i < user.UserIdMode.Count; i++)
ZigbeeApp/Shared/Phone/Device/Logic/SecurityMode.cs
@@ -367,18 +367,18 @@
                        }
                        else if (actions["SecuritySetting"].ToString() == "1")
                        {
                            if (actions["SecurityModeId"].ToString() == "1") {
                            athomedefenceSelected.Visible = true;
                            leavehomedefenceSelected.Visible = false;
                            withdrawalSelected.Visible = false;
                            urgentwithdrawalSelected.Visible = false;
                        }
                        else if (actions["SecuritySetting"].ToString() == "2")
                        {
                            athomedefenceSelected.Visible = false;
                            leavehomedefenceSelected.Visible = true;
                            withdrawalSelected.Visible = false;
                            urgentwithdrawalSelected.Visible = false;
                            }
                            else {
                                athomedefenceSelected.Visible = false;
                                leavehomedefenceSelected.Visible = true;
                                withdrawalSelected.Visible = false;
                                urgentwithdrawalSelected.Visible = false;
                            }
                        }
                        break;
ZigbeeApp/Shared/Phone/Device/Logic/Send.cs
@@ -1130,7 +1130,30 @@
        /// </summary>
        public static UserCenter.MemberInfoRes UserMemberInfoRes = null;
        #endregion
        /// <summary>
        ///  自己用
        /// </summary>
        public static void Zj(bool tag, Common.Logic logic)
        {
            new System.Threading.Thread(() =>
            {
                if (logic.LogicId != 0)
                {
                    if (tag)
                    {
                        Data("添加/更新", "/App/HomeLogicConfig", "POST");
                    }
                    else
                    {
                        Data("删除", "/App/DelHomeLogicConfig", "POST");
                    }
                    ///只改推送内容;
                    LogicControlSwitch(logic);
                }
            })
            { IsBackground = true }.Start();
        }
        #region  请求服务器方法---
        /// <summary>
        /// 请求数据的封装方法
@@ -1140,9 +1163,9 @@
        /// <param name="method">请求方式为POST/GET</param>
        /// <param name="obj">存储发送数据的对象</param>
        /// <returns></returns>
        public static async System.Threading.Tasks.Task<string>Data(string command, string url, string method, object obj = null)
        public static async System.Threading.Tasks.Task<string> Data(string command, string url, string method, object obj = null)
        {
            var getUrl ="";
            var getUrl = "";
            var jObject = new JObject();
            if (UserCenter.UserCenterResourse.UserInfo.AuthorityNo == 1)
            {
ZigbeeApp/Shared/Phone/Device/Logic/TemplateDeviceCondition.cs
@@ -46,7 +46,7 @@
                Width = Application.GetRealWidth(600),
                Height = Application.GetRealHeight(69),
                Y = Application.GetRealHeight(92),
                TextID = MyInternationalizationString.devicestate,
                TextID = MyInternationalizationString.addsensor,
                IsBold = true,
            };
            topRowLayout.AddChidren(titleName);
ZigbeeApp/Shared/Phone/Device/Logic/TemplatePage.cs
@@ -1200,10 +1200,6 @@
                    tag = true;
                    custompushFrameLayout.Height = Application.GetRealHeight(160);
                    Common.Logic.CurrentLogic.LogicIsCustomPushText = 1;
                    if (Common.Logic.CurrentLogic.LogicId != 0)
                    {
                        Send.Data("添加/更新", "/App/HomeLogicConfig", "POST");
                    }
                }
                else
@@ -1211,20 +1207,21 @@
                    tag = false;
                    custompushFrameLayout.Height = Application.GetRealHeight(0);
                    Common.Logic.CurrentLogic.LogicIsCustomPushText = 0;
                    if (Common.Logic.CurrentLogic.LogicId != 0)
                    {
                        Send.Data("删除", "/App/DelHomeLogicConfig", "POST");
                    }
                }
                Send.Zj(tag, Common.Logic.CurrentLogic);
            };
            if (Common.Logic.CurrentLogic.LogicIsCustomPushText == 0)
            {
                tag = false;
                btnswitch.IsSelected = false;
                custompushFrameLayout.Height = Application.GetRealHeight(0);
            }
            else
            {
                tag = true;
                btnswitch.IsSelected = true;
                custompushFrameLayout.Height = Application.GetRealHeight(160);
            }
            var saveFrameLayout = new FrameLayout
            {
@@ -1281,7 +1278,7 @@
                        Common.Logic.LogicList.Add(Common.Logic.CurrentLogic);
                        if (tag)
                        {
                            Send.Data("添加/更新", "/App/HomeLogicConfig", "POST");
                            Send.Zj(tag, Common.Logic.CurrentLogic);
                        }
                    }
                }
ZigbeeApp/Shared/Phone/Device/Room/EditRoom.cs
@@ -609,4 +609,4 @@
        #endregion
    }
}
}
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/GatewayBackupEnum.cs
@@ -34,9 +34,9 @@
        /// </summary>
        A干接点节能模式 = 6,
        /// <summary>
        /// 干接点私有属性
        /// 干接点第三级别私有属性
        /// </summary>
        A干接点私有属性 = 7,
        A干接点第三级别私有属性 = 7,
        /// <summary>
        /// 窗帘上下限位(这个东西需要在第一)
        /// </summary>
@@ -52,6 +52,14 @@
        /// <summary>
        /// 空调自定义模式
        /// </summary>
        A空调自定义模式 = 11
        A空调自定义模式 = 11,
        /// <summary>
        /// 简约面板震动功能
        /// </summary>
        A简约面板震动功能 = 12,
        /// <summary>
        /// 空调摆风功能
        /// </summary>
        A空调摆风功能 = 13,
    }
}
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Common/UserCenterCommon.cs
@@ -36,6 +36,7 @@
        /// <summary>
        /// DistributedMark
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string DistributedMark = string.Empty;
        /// <summary>
        /// 邮箱
@@ -58,16 +59,6 @@
        /// </summary>
        public string AuthorityText = string.Empty;
        /// <summary>
        /// 用户图标文件
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string UserIconFile = string.Empty;
        /// <summary>
        /// 用户图标文件是否改变
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public bool UserIconFileChanged = false;
        /// <summary>
        /// 用户头像数据(临时用,会置空)
        /// </summary>
        public byte[] HeadImage = null;
@@ -79,6 +70,23 @@
        /// 密码验证(临时用,会置空)
        /// </summary>
        public string StringPwd = string.Empty;
        /// <summary>
        /// 用户图标文件
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string UserIconFile = string.Empty;
        /// <summary>
        /// 用户图标文件是否改变
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public bool UserIconFileChanged = false;
        /// <summary>
        /// 是否初始化用户信息成功
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public bool InitUserInfoSuccess = false;
    }
    /// <summary>
@@ -1100,7 +1108,7 @@
        public MessageInfoPra()
        {
            PageSetting.PageSize = 10;
            PageSetting.PageSize = 50;
        }
    }
@@ -1222,6 +1230,10 @@
        /// 是否出力详细Log 1 -> 出力
        /// </summary>
        public int DetailedLog = 0;
        /// <summary>
        /// 显示设备历史版本 1 -> 显示
        /// </summary>
        public int DeviceHistory = 0;
    }
    #endregion
}
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/CompoundControls/SafetySensorStatuControl.cs
@@ -119,6 +119,23 @@
            {
                return;
            }
            string strMsg = reportInfo.AlarmMsg;
            if (reportInfo.DemolishmenMsg != null)
            {
                //被拆报警
                strMsg = reportInfo.DemolishmenMsg;
            }
            else if (reportInfo.BatteryMsg != null)
            {
                //电池报警
                strMsg = reportInfo.BatteryMsg;
            }
            if (strMsg == null || strMsg == string.Empty)
            {
                //不是在册的报警消息
                return;
            }
            //在线状态的控件隐藏
            btnOnline.Visible = false;
@@ -138,18 +155,7 @@
                btnMsg.Y = Application.GetRealHeight(141);
                this.AddChidren(btnMsg);
            }
            if (reportInfo.DemolishmenMsg != null)
            {
                btnMsg.Text = reportInfo.DemolishmenMsg;
            }
            else if (reportInfo.BatteryMsg != null)
            {
                btnMsg.Text = reportInfo.BatteryMsg;
            }
            else
            {
                btnMsg.Text = reportInfo.AlarmMsg;
            }
            btnMsg.Text = strMsg;
        }
        #endregion
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/FrameLayoutControls/FrameCaptionInputControl.cs
@@ -71,5 +71,22 @@
        }
        #endregion
        #region ■ 添加底线___________________________
        /// <summary>
        /// <para>添加底线(如果左边有图标,则先添加图标,再添加底线)</para>
        /// <para>它的长度为:当前控件宽度-左右固定间距-左边图片宽度(如果有)-右边的偏移量</para>
        /// </summary>
        public override NormalViewControl AddBottomLine()
        {
            var btnLine = base.AddBottomLine();
            //联动线的状态
            txtInput.btnLine = btnLine;
            return btnLine;
        }
        #endregion
    }
}
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/FrameLayoutControls/FrameRowControl.cs
@@ -53,7 +53,7 @@
        /// <para>添加底线(如果左边有图标,则先添加图标,再添加底线)</para>
        /// <para>它的长度为:当前控件宽度-左右固定间距-左边图片宽度(如果有)-右边的偏移量</para>
        /// </summary>
        public NormalViewControl AddBottomLine()
        public virtual NormalViewControl AddBottomLine()
        {
            int lineWidth = this.Width - ControlCommonResourse.XXLeft * 2 - LeftOffset - RightOffset;
            int XX = ControlCommonResourse.XXLeft + LeftOffset;
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/NormalControls/MessageManagementControl.cs
@@ -76,6 +76,11 @@
                {
                    if (dataInfo.PageData[i].IsReading == false)
                    {
                        if (dataInfo.PageData[i].Topic == "/DoorLock/DoorLockOperatingEventNotificationCommand")
                        {
                            //暂时不处理这个主题
                            continue;
                        }
                        ControlCommonResourse.HadNewMessage = true;
                        Application.RunOnMainThread(() =>
                        {
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/SceneControls/ScenePictrueControl.cs
@@ -17,7 +17,7 @@
        public ScenePictrueControl()
        {
            this.UseClickStatu = false;
            this.Height = Application.GetRealHeight(470);
            this.Height = Application.GetRealHeight(420);
        }
        /// <summary>
@@ -30,7 +30,7 @@
            var btnPic = new ImageView();
            btnPic.X = Application.GetRealWidth(179);
            btnPic.Width = Application.GetRealWidth(844);
            btnPic.Height = Application.GetRealHeight(420);
            btnPic.Height = Application.GetRealHeight(397);
            if (sceneUI.IconPathType == 0)
            {
                btnPic.ImagePath = sceneUI.IconPath;
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Form/Base/EditorCommonForm.cs
@@ -26,6 +26,25 @@
        /// </summary>
        public FrameLayout bodyFrameLayout = null;
        /// <summary>
        /// 左滑使能
        /// </summary>
        private bool m_ScrollEnabled = true;
        /// <summary>
        /// 左滑使能
        /// </summary>
        public bool ScrollEnabled
        {
            get { return m_ScrollEnabled; }
            set
            {
                if (UserView.HomePage.Instance.ScrollEnabled != value)
                {
                    UserView.HomePage.Instance.ScrollEnabled = value;
                    this.m_ScrollEnabled = value;
                }
            }
        }
        /// <summary>
        /// 缓存启动参数
        /// </summary>
        private object[] m_parameter = null;
@@ -46,6 +65,9 @@
            //初始化中部控件
            this.InitBodyFrameLayout();
            //初始左滑使能可
            this.ScrollEnabled = true;
        }
        /// <summary>
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlACZbGatewayUpdateLogic.cs
@@ -212,7 +212,7 @@
            this.zbGateway.ReportAction += receiveAction;
            //读取空调模块版本
            var result = await deviceAc.ReadACFirewareVersionAsync();
            var result = await HdlDeviceAirConditionerLogic.Current.ReadACFirewareVersionAsync(deviceAc);
            if (result == null || result.readACFirewareVersionResponData == null || result.readACFirewareVersionResponData.Status != 0)
            {
                //获取空调模块版本失败
@@ -222,11 +222,11 @@
                this.UpdateStatu = UpdateStatuMode.DeviceUpdateFail;
                this.zbGateway.ReportAction -= receiveAction;
                //发送失败给设备
                deviceAc.SendFinishAsync(1);
                HdlDeviceAirConditionerLogic.Current.SendFinishAsync(deviceAc, 1);
                return;
            }
            //发送升级通知
            var result2 = await deviceAc.UpggradeACNotificationAsync(result.readACFirewareVersionResponData.FirewareVersion, this.deviceFirmwareByte.Length);
            var result2 = await HdlDeviceAirConditionerLogic.Current.UpggradeACNotificationAsync(deviceAc, result.readACFirewareVersionResponData.FirewareVersion, this.deviceFirmwareByte.Length);
            if (result2.responseData == null)
            {
                //发送升级命令失败
@@ -236,7 +236,7 @@
                this.UpdateStatu = UpdateStatuMode.DeviceUpdateFail;
                this.zbGateway.ReportAction -= receiveAction;
                //发送失败给设备
                deviceAc.SendFinishAsync(1);
                HdlDeviceAirConditionerLogic.Current.SendFinishAsync(deviceAc, 1);
                return;
            }
            else if (result2.responseData.status == 1)
@@ -248,7 +248,7 @@
                this.UpdateStatu = UpdateStatuMode.DeviceUpdateFail;
                this.zbGateway.ReportAction -= receiveAction;
                //发送失败给设备
                deviceAc.SendFinishAsync(1);
                HdlDeviceAirConditionerLogic.Current.SendFinishAsync(deviceAc, 1);
                return;
            }
            else if (result2.responseData.status != 0)
@@ -260,7 +260,7 @@
                this.UpdateStatu = UpdateStatuMode.DeviceUpdateFail;
                this.zbGateway.ReportAction -= receiveAction;
                //发送失败给设备
                deviceAc.SendFinishAsync(1);
                HdlDeviceAirConditionerLogic.Current.SendFinishAsync(deviceAc, 1);
                return;
            }
@@ -278,7 +278,7 @@
                    this.UpdateStatu = UpdateStatuMode.DeviceUpdateFail;
                    this.zbGateway.ReportAction -= receiveAction;
                    //发送失败给设备
                    deviceAc.SendFinishAsync(1);
                    HdlDeviceAirConditionerLogic.Current.SendFinishAsync(deviceAc, 1);
                    return;
                }
                await System.Threading.Tasks.Task.Delay(1000);
@@ -298,7 +298,7 @@
        /// <summary>
        /// 执行设备升级操作
        /// </summary>
        private async void DoSetUpdateDevice(string i_offset,int i_dataLength)
        private async void DoSetUpdateDevice(string i_offset, int i_dataLength)
        {
            this.UpdateStatu = UpdateStatuMode.DeviceUpdateReady;
            //设备正在升级…
@@ -372,7 +372,7 @@
                        this.UpdateStatu = UpdateStatuMode.DeviceUpdateFail;
                        this.zbGateway.ReportAction -= receiveAction;
                        //发送失败给设备
                        deviceAc.SendFinishAsync(1);
                        HdlDeviceAirConditionerLogic.Current.SendFinishAsync(deviceAc, 1);
                        return;
                    }
                    await System.Threading.Tasks.Task.Delay(50);
@@ -398,9 +398,9 @@
                    }
                }
                //发送透传数据
                var sendData = new AC.SendUpgradeData() { dataLength = i_dataLength, offset = i_offset };
                var sendData = new HdlDeviceAirConditionerLogic.SendUpgradeData() { dataLength = i_dataLength, offset = i_offset };
                sendData.databytes = listData.ToArray();
                deviceAc.UpgradeAsync(sendData);
                HdlDeviceAirConditionerLogic.Current.UpgradeAsync(deviceAc, sendData);
            }
            this.zbGateway.ReportAction -= receiveAction;
@@ -421,7 +421,7 @@
            this.UpdateStatuChangedEvent?.Invoke(0, Language.StringByID(R.MyInternationalizationString.uSendingFinishUpdateComand));
            //发送成功命令给设备
            deviceAc.SendFinishAsync(0);
            HdlDeviceAirConditionerLogic.Current.SendFinishAsync(deviceAc, 0);
            //等个两秒钟吧
            await System.Threading.Tasks.Task.Delay(2000);
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlBackupLogic.cs
@@ -649,6 +649,12 @@
                IMessageCommon.Current.IgnoreError = false;
                return false;
            }
            if (listFile.Count == 0)
            {
                //恢复
                IMessageCommon.Current.IgnoreError = false;
                return true;
            }
            //检测
            string checkKeys = UserCenterLogic.EncryptPassword(UserCenterResourse.FileEncryptKey, DirNameResourse.ShowOptionMenuFile + UserCenterResourse.UserInfo.Account);
@@ -663,6 +669,12 @@
                //出力详细Log(Debug用)
                UserCenterResourse.HideOption.DetailedLog = 1;
            }
            checkKeys = UserCenterLogic.EncryptPassword(UserCenterResourse.FileEncryptKey, DirNameResourse.DeviceHistoryFile + UserCenterResourse.UserInfo.Account);
            if (listFile.Contains(checkKeys) == true)
            {
                //显示设备历史版本(Debug用)
                UserCenterResourse.HideOption.DeviceHistory = 1;
            }
            //恢复
            IMessageCommon.Current.IgnoreError = false;
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAirConditionerLogic.cs
@@ -1,4 +1,5 @@
using System;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
@@ -72,10 +73,10 @@
        #endregion
        #region ■ 打开空调___________________________
        #region ■ 关闭空调___________________________
        /// <summary>
        /// 打开空调
        /// 关闭空调
        /// </summary>
        /// <param name="device">空调对象</param>
        /// <returns></returns>
@@ -120,7 +121,7 @@
        /// <returns></returns>
        public async Task<bool> SetAcModeSupport(AC device, int data)
        {
            var result = await HdlDeviceAttributeLogic.Current.WriteDeviceAttribute(device, 513, 4099, 25, data);
            var result = await HdlDeviceAttributeLogic.Current.WriteDeviceAttribute(device, 513, 4099, 25, data.ToString());
            //检测网关返回的共通错误状态码
            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
            if (error != null)
@@ -145,6 +146,47 @@
                return false;
            }
            await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.A空调自定义模式, data);
            return true;
        }
        #endregion
        #region ■ 设置启用空调的摆风功能_____________
        /// <summary>
        /// 设置启用空调的摆风功能
        /// </summary>
        /// <param name="device">空调对象</param>
        /// <param name="data">从二进制转换的十进制值</param>
        /// <returns></returns>
        public async Task<bool> SetUseAcSwingFunctionStatu(AC device, int data)
        {
            var result = await HdlDeviceAttributeLogic.Current.WriteDeviceAttribute(device, 514, 4097, 25, data.ToString());
            //检测网关返回的共通错误状态码
            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
            if (error != null)
            {
                this.ShowTipMsg(error);
                return false;
            }
            if (result == null || result.setWritableValueResponData == null)
            {
                //设置空调摆风失败
                string msg = Language.StringByID(R.MyInternationalizationString.uSetAirConditionerSwingFunctionFail);
                //拼接上【网关回复超时】的Msg
                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
                this.ShowTipMsg(msg);
                return false;
            }
            if (result.setWritableValueResponData.Status != 0)
            {
                //设置空调摆风失败
                string msg = Language.StringByID(R.MyInternationalizationString.uSetAirConditionerSwingFunctionFail);
                this.ShowTipMsg(msg);
                return false;
            }
            await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.A空调摆风功能, data);
            return true;
        }
@@ -180,5 +222,597 @@
        }
        #endregion
        #region ■ 升级空调第三方模块的接口___________
        #region 读取IRACC模块固件版本(APP -> Zigbee MCU)
        ///<summary >
        ///读取IRACC模块固件版本
        /// </summary>
        public async System.Threading.Tasks.Task<ReadACFirewareVersionResponAllData> ReadACFirewareVersionAsync(CommonDevice device)
        {
            ReadACFirewareVersionResponAllData result = null;
            var Gateway = device.Gateway;
            if (Gateway == null)
            {
                result = new ReadACFirewareVersionResponAllData { errorMessageBase = "当前没有网关" };
                return result;
            }
            return await System.Threading.Tasks.Task.Run(async () =>
            {
                Action<string, string> action = (topic, message) =>
                {
                    var gatewayID = topic.Split('/')[0];
                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
                    if (topic == gatewayID + "/" + "ZbDataPassthrough")
                    {
                        var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") };
                        gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ClientDataPassthroughResponseData>(jobject["Data"].ToString());
                        if (gatewayTemp.clientDataPassthroughResponseData == null)
                        {
                            result = new ReadACFirewareVersionResponAllData { errorMessageBase = "网关返回的数据为空" };
                        }
                        else
                        {
                            if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
                            {
                                var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
                                var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
                                if (command == "0259")
                                {
                                    var tempD = new ReadACFirewareVersionResponData();
                                    tempD.Status = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16);
                                    if (data.Length == 82)
                                    {
                                        var firewareString = data.Substring(12);
                                        var aa = firewareString.Length;
                                        firewareVersion = firewareString;
                                        var bytes = new byte[firewareString.Length / 2];
                                        for (int i = 0; i < bytes.Length; i++)
                                        {
                                            bytes[i] = Convert.ToByte(firewareString.Substring(i * 2, 2), 16);
                                        }
                                        var firewareVersionTemp = System.Text.Encoding.ASCII.GetString(bytes);
                                        tempD.FirewareVersion = firewareVersionTemp.Replace('\0', ' ').Trim();
                                    }
                                    result = new ReadACFirewareVersionResponAllData { readACFirewareVersionResponData = tempD };
                                    System.Console.WriteLine($"UI收到通知后的主题_command:0258_{topic}");
                                }
                            }
                        }
                    }
                };
                Gateway.Actions += action;
                System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
                try
                {
                    var passData = ReadACFirewareVersionData("01");
                    var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
                    var data = new JObject { { "PassData", passData } };
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
                var dateTime = DateTime.Now;
                while ((DateTime.Now - dateTime).TotalMilliseconds < 3000)
                {
                    await System.Threading.Tasks.Task.Delay(10);
                    if (result != null)
                    {
                        break;
                    }
                }
                if ((DateTime.Now - dateTime).TotalMilliseconds > 3000)
                {
                    result = new ReadACFirewareVersionResponAllData { errorMessageBase = " 回复超时,请重新操作" };
                }
                Gateway.Actions -= action;
                System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString());
                return result;
            });
        }
        /// <summary>
        /// 读取IRACC模块固件版本
        /// </summary>
        string ReadACFirewareVersionData(string reserve)
        {
            string data = "";
            string dataLength = "05";
            string dataComand1 = "58";
            string dataComand2 = "02";
            string dataSerialNum = "01";
            string addDataLength = "01";
            string reserveData = reserve;
            try
            {
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                    reserveData;
            }
            catch { };
            return data;
        }
        /// <summary>
        /// IRACC模块固件版本,网关反馈信息
        /// </summary>
        public ReadACFirewareVersionResponAllData readACFirewareVersionResponAllData;
        /// <summary>
        /// IRACC模块固件版本,网关反馈信息
        /// </summary>
        [System.Serializable]
        public class ReadACFirewareVersionResponAllData
        {
            /// <summary>
            /// 错误信息
            /// </summary>
            public string errorMessageBase;
            /// <summary>
            /// 网关信息错误反馈
            /// <para>当网关接收到客户端信息后,出现以下异常情况将反馈错误。</para>
            /// </summary>
            public CommonDevice.ErrorResponData errorResponData;
            /// <summary>
            /// IRACC模块固件版本信息
            /// </summary>
            public ReadACFirewareVersionResponData readACFirewareVersionResponData;
        }
        /// <summary>
        /// IRACC模块固件版本的数据
        /// </summary>
        [System.Serializable]
        public class ReadACFirewareVersionResponData
        {
            /// <summary>
            /// 状态
            ///<para>0--成功</para>
            ///<para>1--失败</para>
            ///<para>ff--无效</para>
            /// </summary>
            public int Status;
            /// <summary>
            /// 固件版本
            /// </summary>
            public string FirewareVersion;
        }
        #endregion
        #region 升级IRACC模块通知(APP -> Zigbee MCU)
        ///<summary >
        ///升级IRACC模块通知
        /// <para>firewareVer:固件版本</para>
        /// <para>firewareSize:固件大小</para>
        /// </summary>
        public async System.Threading.Tasks.Task<ResponseAllData> UpggradeACNotificationAsync(CommonDevice device, string firewareVer, long firewareSize)
        {
            ResponseAllData result = null;
            var Gateway = device.Gateway;
            if (Gateway == null)
            {
                result = new ResponseAllData { errorMessageBase = "当前没有网关" };
                return result;
            }
            return await System.Threading.Tasks.Task.Run(async () =>
            {
                Action<string, string> action = (topic, message) =>
                {
                    var gatewayID = topic.Split('/')[0];
                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
                    if (topic == gatewayID + "/" + "ZbDataPassthrough")
                    {
                        var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") };
                        gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ClientDataPassthroughResponseData>(jobject["Data"].ToString());
                        if (gatewayTemp.clientDataPassthroughResponseData == null)
                        {
                            result = new ResponseAllData { errorMessageBase = "网关返回的数据为空" };
                        }
                        else
                        {
                            if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
                            {
                                var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
                                var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
                                if (command == "025b")
                                {
                                    var tempD = new ResponseData();
                                    if (data.Length == 12)
                                    {
                                        tempD.status = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16);
                                    }
                                    result = new ResponseAllData { responseData = tempD };
                                    System.Console.WriteLine($"UI收到通知后的主题_{ topic}");
                                }
                            }
                        }
                    }
                };
                Gateway.Actions += action;
                System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
                try
                {
                    var passData = UpggradeACNotificationData(firewareVer, firewareSize);
                    var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
                    var data = new JObject { { "PassData", passData } };
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
                var dateTime = DateTime.Now;
                while ((DateTime.Now - dateTime).TotalMilliseconds < 3000)
                {
                    await System.Threading.Tasks.Task.Delay(10);
                    if (result != null)
                    {
                        break;
                    }
                }
                if ((DateTime.Now - dateTime).TotalMilliseconds > 3000)
                {
                    result = new ResponseAllData { errorMessageBase = " 回复超时,请重新操作" };
                }
                Gateway.Actions -= action;
                System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString());
                return result;
            });
        }
        private string firewareVersion = string.Empty;
        /// <summary>
        /// 升级IRACC模块通知返回
        /// </summary>
        string UpggradeACNotificationData(string firewareVer, long firewareSize)
        {
            string data = "";
            string dataLength = "2C";
            string dataComand1 = "5A";
            string dataComand2 = "02";
            string dataSerialNum = "01";
            string addDataLength = "28";
            string deviceUpgradeMethod = "01";
            string firewareVersionData = "";
            string firewareSizeData = "";
            try
            {
                //固件版本
                var firewareVerBytes = System.Text.Encoding.ASCII.GetBytes(firewareVer);
                for (int i = 0; i < firewareVerBytes.Length; i++)
                {
                    var fw = Convert.ToString(firewareVerBytes[i], 16);
                    if (fw.Length == 1)
                    {
                        fw = "0" + fw;
                    }
                    firewareVersionData += fw;
                }
                var aa = firewareVersionData.Length;
                firewareVersionData = firewareVersionData.PadRight(70, '0');
                //固件尺寸
                var tempFwSize = Convert.ToString(firewareSize, 16);
                tempFwSize = tempFwSize.PadLeft(8, '0');
                for (int i = 6; i >= 0; i = i - 2)
                {
                    firewareSizeData += tempFwSize.Substring(i, 2);
                }
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                     deviceUpgradeMethod + firewareVersionData + firewareSizeData;
            }
            catch { };
            return data;
        }
        /// <summary>
        ///升级IRACC模块通知回复
        /// </summary>
        public ResponseAllData keyColorDataResponseAllData;
        [System.Serializable]
        public class ResponseAllData
        {
            /// <summary>
            /// 错误信息
            /// </summary>
            public string errorMessageBase;
            /// <summary>
            /// 网关信息错误反馈
            /// <para>当网关接收到客户端信息后,出现以下异常情况将反馈错误。</para>
            /// </summary>
            public CommonDevice.ErrorResponData errorResponData;
            /// <summary>
            /// 升级IRACC模块通知信息
            /// </summary>
            public ResponseData responseData;
        }
        /// <summary>
        /// 升级IRACC模块通知回复(Zigbee MCU -> APP)
        /// </summary>
        [System.Serializable]
        public class ResponseData
        {
            /// <summary>
            /// 状态值
            /// <para>0--版本号不一致(可以升级</para>
            /// <para>1--版本号一致(不用升级</para>
            /// <para>2--预留(暂时不用到</para>
            /// <para>ff--无效(暂时不用到)</para>
            /// </summary>
            public int status = -1;
        }
        #endregion
        #region 设备请求APP获取升级数据 (Zigbee MCU -> APP,主动上报)
        /// <summary>
        ///设备请求APP获取升级数据(Zigbee MCU -> APP,主动上报)
        /// </summary>
        [System.Serializable]
        public class DeviceRequestUpgradeResponseData
        {
            /// <summary>
            /// 数据偏移量,每个分包偏移量+(1-43)
            /// </summary>
            public string offset = string.Empty;
            /// <summary>
            /// 数据长度len
            /// </summary>
            public int dataLength = -1;
        }
        #endregion
        #region 发升级数据到设备(APP -> Zigbee MCU)
        ///<summary >
        ///读取IRACC模块固件版本
        /// <para>reserve:0-ff</para>
        /// </summary>
        public async void UpgradeAsync(CommonDevice device, SendUpgradeData upgradeData)
        {
            var Gateway = device.Gateway;
            if (Gateway == null)
            {
                return;
            }
            Action<string, string> action = (topic, message) => { };
            Gateway.Actions += action;
            System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
            try
            {
                string passData = "";
                if (upgradeData != null)
                {
                    passData = SendUpgrade(upgradeData);
                }
                var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
                var data = new JObject { { "PassData", passData } };
                jObject.Add("Data", data);
                Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
            }
            catch { }
            Gateway.Actions -= action;
            System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString());
        }
        /// <summary>
        /// 发升级数据到设备
        /// </summary>
        string SendUpgrade(SendUpgradeData upgradeData)
        {
            string data = "";
            string dataLength = "";
            string dataComand1 = "5D";
            string dataComand2 = "02";
            string dataSerialNum = "01";
            string addDataLength = "";
            string status = "";
            string offset = "";
            string upgradeDataLength = "";
            string dataString = "";
            try
            {
                var len = 4 + 1 + 4 + 1 + upgradeData.dataLength;
                dataLength = Convert.ToString(len, 16);
                if (dataLength.Length == 1)
                {
                    dataLength = "0" + dataLength;
                }
                addDataLength = Convert.ToString(6 + upgradeData.dataLength, 16);
                if (addDataLength.Length == 1)
                {
                    addDataLength = "0" + addDataLength;
                }
                if (upgradeData.status == 0)
                {
                    status = "00";
                }
                else if (upgradeData.status == 1)
                {
                    status = "01";
                }
                else
                {
                    status = "ff";
                }
                offset = upgradeData.offset;
                var dl = Convert.ToString(upgradeData.dataLength, 16);
                if (dl.Length == 1)
                {
                    upgradeDataLength = "0" + dl;
                }
                else
                {
                    upgradeDataLength = dl;
                }
                for (int i = 0; i < upgradeData.databytes.Length; i++)
                {
                    var dataB = Convert.ToString(upgradeData.databytes[i], 16);
                    if (dataB.Length == 1)
                    {
                        dataB = "0" + dataB;
                    }
                    dataString += dataB;
                }
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                status + offset + upgradeDataLength + dataString;
            }
            catch { };
            return data;
        }
        /// <summary>
        /// 发送升级数据到设备(APP -> Zigbee MCU)
        /// </summary>
        [System.Serializable]
        public class SendUpgradeData
        {
            /// <summary>
            /// 0--成功
            ///<para>1--失败</para>
            ///<para>ff--无效</para>
            /// </summary>
            public int status = 0;
            /// <summary>
            /// 数据偏移量,每个分包偏移量+(1-43)
            /// </summary>
            public string offset;
            /// <summary>
            /// 数据长度len
            /// </summary>
            public int dataLength = -1;
            /// <summary>
            /// 分包数据
            /// </summary>
            public byte[] databytes;
        }
        #endregion
        #region 分包结束(Zigbee MCU -> APP,主动上报)
        /// <summary>
        /// 设备请求APP获取分包结束命令(Zigbee MCU -> APP)
        /// </summary>
        [System.Serializable]
        public class DeviceRequestFinishResponseData
        {
            /// <summary>
            /// 0-ff
            /// </summary>
            public int reserve = -1;
        }
        #endregion
        #region 分包结束(APP -> Zigbee MCU)
        ///<summary >
        ///读取IRACC模块固件版本
        /// <para>status:0--成功;1--失败;ff--无效 .</para>
        /// </summary>
        public async void SendFinishAsync(CommonDevice device, int status)
        {
            var Gateway = device.Gateway;
            if (Gateway == null)
            {
                return;
            }
            Action<string, string> action = (topic, message) => { };
            Gateway.Actions += action;
            System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
            try
            {
                var passData = SendFinishDataString(status);
                var jObject = new JObject { { "DeviceAddr", device.DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
                var data = new JObject { { "PassData", passData } };
                jObject.Add("Data", data);
                Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
            }
            catch { }
            Gateway.Actions -= action;
            System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString());
        }
        /// <summary>
        /// 发升级数据到设备
        /// </summary>
        string SendFinishDataString(int status)
        {
            string data = "";
            string dataLength = "05";
            string dataComand1 = "5F";
            string dataComand2 = "02";
            string dataSerialNum = "01";
            string addDataLength = "01";
            string statusString = "";
            try
            {
                if (status == 0)
                {
                    statusString = "00";
                }
                else if (status == 1)
                {
                    statusString = "01";
                }
                else
                {
                    statusString = "ff";
                }
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                statusString;
            }
            catch { };
            return data;
        }
        /// <summary>
        /// 分包结束返回(APP -> Zigbee MCU
        /// </summary>
        //[System.Serializable]
        public class SendFinishData
        {
            /// <summary>
            /// 状态:成功/失败
            ///<para>0--成功<<para>
            ///<para>1--失败<<para>
            ///<para>ff--无效<<para>
            /// </summary>
            public int status = -1;
        }
        #endregion
        #endregion
    }
}
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs
@@ -49,7 +49,7 @@
        /// <param name="attributeDataType">数据类型</param>
        /// <param name="attributeData">需要写入的数据</param>
        /// <returns></returns>
        public async System.Threading.Tasks.Task<CommonDevice.SetWritableValueResponAllData> WriteDeviceAttribute(CommonDevice device, int clusterId, int attributeId, int attributeDataType, int attributeData)
        public async System.Threading.Tasks.Task<CommonDevice.SetWritableValueResponAllData> WriteDeviceAttribute(CommonDevice device, int clusterId, int attributeId, int attributeDataType, string attributeData)
        {
            var MyGateway = device.Gateway;
            if (MyGateway == null)
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs
@@ -136,12 +136,31 @@
        /// </summary>
        /// <param name="rollershade">窗帘对象</param>
        /// <param name="limiType">确认及覆盖上限位还是下限位</param>
        /// <param name="upLimit">上限位的值,百分比(备份用)</param>
        /// <param name="downLimit">下限位的值,百分比(备份用)</param>
        /// <param name="upLimit">上限位的值(长度值,不是百分比)</param>
        /// <param name="downLimit">下限位的值(长度值,不是百分比)</param>
        /// <returns></returns>
        public async Task<bool> CommitCurtainLimitPoint(Rollershade rollershade, Rollershade.CurtainPrivateInstalledLimi limiType, int upLimit, int downLimit)
        {
            var result = await rollershade.SetCurtainInstalledLimitAsync(limiType);
            CommonDevice.SetWritableValueResponAllData result = null;
            if (upLimit == -1 && upLimit == -1)
            {
                //这个是卷帘
                result = await rollershade.SetCurtainInstalledLimitAsync(limiType);
            }
            else
            {
                //这个是开合帘 "2,0x00ff,0x00ff"格式 合限位在前,开限位在后
                string convertData = "\"2,0x" + Convert.ToString(downLimit, 16).PadLeft(4, '0');
                convertData += ",0x" + Convert.ToString(upLimit, 16).PadLeft(4, '0') + "\"";
                //然后将它们转为ASK码数值,然后再转为16进制
                //总计长度为17(这里是16进制)
                string sendData = "11";
                foreach (char c in convertData)
                {
                    sendData += Convert.ToString((int)c, 16).PadLeft(2, '0');
                }
                result = await HdlDeviceAttributeLogic.Current.WriteDeviceAttribute(rollershade, 258, 24, 65, sendData);
            }
            //检测网关返回的共通错误状态码
            string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
            if (error != null)
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceFixedAttributeLogic.cs
@@ -53,10 +53,6 @@
            {
                //先移除
                this.RemoveDeviceHardInfoThread(device);
                string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
                this.hsGetHardInfoDevice.Add(mainkeys);
                if (HdlGatewayReceiveLogic.Current.IsEsixt("DeviceGetFixedAttribute") == false)
                {
                    //添加事件
@@ -89,6 +85,8 @@
                //不需要发送
                return;
            }
            string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
            this.hsGetHardInfoDevice.Add(mainkeys);
            //发送
            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
            jObject.Add("Data", data);
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePanelLogic.cs
@@ -479,12 +479,12 @@
        #region ■ 修改干接点私有属性_________________
        /// <summary>
        /// 修改干接点私有属性
        /// 修改干接点第三级别的私有属性
        /// </summary>
        /// <param name="panel">干接点对象</param>
        /// <param name="i_value">干接点的第三级别属性的值,具体请参照第三级别属性</param>
        /// <returns></returns>
        public async Task<bool> EditorDryContactFunction(Panel panel, int i_value)
        public async Task<bool> EditorDryContactThirdFunction(Panel panel, int i_value)
        {
            var result = await panel.ConfigureHdlKeyValueAsync((Panel.KeyMode)i_value);
            //共通错误检测
@@ -537,7 +537,7 @@
                return false;
            }
            //备份设备
            await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(panel, GatewayBackupEnum.A干接点私有属性, i_value);
            await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(panel, GatewayBackupEnum.A干接点第三级别私有属性, i_value);
            return true;
        }
@@ -707,7 +707,13 @@
                    errorMsg = UserCenterLogic.CombineGatewayTimeOutMsg(errorMsg, null, "回复超时", false);
                }
                this.ShowTipMsg(errorMsg);
                return false;
            }
            //备份设备
            HdlThreadLogic.Current.RunThread(async () =>
            {
                await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.A简约面板震动功能, datainfo);
            }, ShowErrorMode.NO);
            return success;
        }
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDevicePirSensorLogic.cs
@@ -90,16 +90,13 @@
            return data.configureParamates;
        }
        #endregion
        #region ■ 获取配置信息_______________________
        /// <summary>
        /// 获取PIR传感器的【lux值】,错误时返回-1
        /// </summary>
        /// <param name="iASZone"></param>
        /// <param name="mode"></param>
        /// <returns></returns>
        public async Task<int> GetPirSensorLux(IASZone iASZone)
        public async Task<int> GetPirSensorLux(IASZone iASZone, ShowErrorMode mode = ShowErrorMode.YES)
        {
            var data = await iASZone.GetPirLuxAbilitySizeAsync();
            if (data == null || data.pirLux == -1)
@@ -108,8 +105,10 @@
                string msg = Language.StringByID(R.MyInternationalizationString.uGetPirSensorLuxFail);
                //拼接上【网关回复超时】的Msg
                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, data);
                this.ShowErrorMsg(msg);
                if (mode == ShowErrorMode.YES)
                {
                    this.ShowErrorMsg(msg);
                }
                return -1;
            }
            return data.pirLux;
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayLogic.cs
@@ -142,8 +142,10 @@
                List<CommonDevice> list = Common.LocalDevice.Current.GetDeviceByGatewayID(gatewayId);
                foreach (var device in list)
                {
                    //删除设备,不删除房间信息
                    Common.LocalDevice.Current.DeleteMemmoryDevice(device, false);
                    //删除一般设备
                    Common.LocalDevice.Current.DeleteMemmoryDevice(device, true);
                    //删除Ota设备
                    Common.LocalDevice.Current.DeleteMemmoryOtaDevice(device.DeviceAddr);
                }
                //删除网关文件
                this.DeleteGatewayFile(gatewayId);
@@ -425,6 +427,7 @@
        /// 重新绑定网关(1:正常  -1:异常  0:当前的网关绑定在了当前账号下的不同住宅里面)
        /// </summary>
        /// <param name="zbGateway">网关</param>
        /// <param name="btnMsg">消息控件</param>
        public async Task<int> ReBindNewGateway(ZbGateway zbGateway, NormalViewControl btnMsg = null)
        {
            if (zbGateway == null)
@@ -657,10 +660,10 @@
            }
            //获取全部设备
            bool result = LocalDevice.Current.SetDeviceToMemmoryByGateway(realWay);
            int result = LocalDevice.Current.SetDeviceToMemmoryByGateway(realWay);
            //关闭进度条
            ProgressBar.Close();
            if (result == false)
            if (result == -1)
            {
                return false;
            }
@@ -758,6 +761,8 @@
            {
                //删除设备文件
                Common.LocalDevice.Current.DeleteMemmoryDevice(device, true);
                //删除Ota设备
                Common.LocalDevice.Current.DeleteMemmoryOtaDevice(device.DeviceAddr);
            }
            //如果是主网关
            if (this.IsMainGateway(zbGatewayID) == 1)
@@ -2379,27 +2384,27 @@
        /// <returns></returns>
        public async Task<bool> UpLoadDeviceBackupDataToGateway(CommonDevice device, GatewayBackupEnum backupEnum, object upLaodData)
        {
            //ZbGateway realWay = null;
            //if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, device.CurrentGateWayId) == false)
            //{
            //    //没有找到真实物理网关
            //    return false;
            //}
            //string fileName = device.FilePath + ((int)backupEnum).ToString().PadLeft(5, '0');
            ////创建文件对象
            //var result = await realWay.CreateFileAsync(fileName);
            //if (result == null || result.Result != 0)
            //{
            //    return false;
            //}
            ////发送数据流
            //var data = Newtonsoft.Json.JsonConvert.SerializeObject(upLaodData);
            //var byteData = System.Text.Encoding.UTF8.GetBytes(data);
            //var result2 = await realWay.SendFileAsync(byteData);
            //if (result2 == null || result2.Result != 0)
            //{
            //    return false;
            //}
            ZbGateway realWay = null;
            if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, device.CurrentGateWayId) == false)
            {
                //没有找到真实物理网关
                return false;
            }
            string fileName = device.FilePath + ((int)backupEnum).ToString().PadLeft(5, '0');
            //创建文件对象
            var result = await realWay.CreateFileAsync(fileName);
            if (result == null || result.Result != 0)
            {
                return false;
            }
            //发送数据流
            var data = Newtonsoft.Json.JsonConvert.SerializeObject(upLaodData);
            var byteData = System.Text.Encoding.UTF8.GetBytes(data);
            var result2 = await realWay.SendFileAsync(byteData);
            if (result2 == null || result2.Result != 0)
            {
                return false;
            }
            return true;
        }
@@ -2568,10 +2573,10 @@
                int level = Convert.ToInt32(recoverData["level"]);
                result = await HdlDevicePanelLogic.Current.SetDeviceEnergyConservationMode((Panel)device, modeEnable, modeTime, level);
            }
            else if (backType == GatewayBackupEnum.A干接点私有属性)
            else if (backType == GatewayBackupEnum.A干接点第三级别私有属性)
            {
                var recoverData = Newtonsoft.Json.JsonConvert.DeserializeObject<int>(System.Text.Encoding.UTF8.GetString(byteData));
                result = await HdlDevicePanelLogic.Current.EditorDryContactFunction((Panel)device, recoverData);
                result = await HdlDevicePanelLogic.Current.EditorDryContactThirdFunction((Panel)device, recoverData);
            }
            else if (backType == GatewayBackupEnum.A窗帘方向)
            {
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs
@@ -51,8 +51,8 @@
        /// <param name="gatewayId">网关ID</param>
        /// <param name="topic">整个主题</param>
        /// <param name="reportTopic">上报数据的主题</param>
        /// <param name="receiveData">接收的数据</param>
        public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, JObject receiveData)
        /// <param name="msgData">接收的数据</param>
        public void GatewayOverallMsgReceive(string gatewayId, string topic, string reportTopic, string msgData)
        {
            if (topic == "AppNoLogin")
            {
@@ -67,7 +67,7 @@
                });
                return;
            }
            else if (topic == "BeingSqueezedOffline")
            else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.ConnEmqClientId + "/Push/NotifySqueeze")
            {
                HdlThreadLogic.Current.RunMain(() =>
                {
@@ -93,8 +93,8 @@
                });
                return;
            }
            else if (topic == "/ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/Deleted"
                || topic == "/ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/DeletedShareData")
            else if (topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/Deleted"
                || topic == "ZigbeeGateWayToClient/" + Common.Config.Instance.Guid + "/Push/DeletedShareData")
            {
                if (UserCenterResourse.UserInfo.AuthorityNo == 3)
                {
@@ -117,52 +117,51 @@
                    //不是自己绑定的网关,则不处理
                    return;
                }
                //设备属性上报
                if (reportTopic == "DeviceStatusReport")
                {
                    //设备属性上报
                    this.DeviceAttributeReportPush(receiveData);
                    this.DeviceAttributeReportPush(JObject.Parse(msgData));
                }
                //传感器上报
                else if (reportTopic == "IASInfoReport")
                {
                    this.SensorDeviceReportPush(receiveData);
                    this.SensorDeviceReportPush(JObject.Parse(msgData));
                }
                //门锁上报
                else if (topic == gatewayId + "/Alarms/SendAlarmInform")
                {
                    this.DoorLockDeviceReportPush(receiveData);
                    this.DoorLockDeviceReportPush(null);
                }
                //通过外部方式布防撤防成功时报告
                else if (topic == gatewayId + "/Security/EnOrWithdrawSucceedReport")
                {
                    this.SecurityEnOrWithdrawSucceedReport(receiveData);
                    this.SecurityEnOrWithdrawSucceedReport(JObject.Parse(msgData));
                }
                //设备在线状态更新反馈
                else if (reportTopic == "OnlineStatusChange_Respon")
                {
                    this.DeviceOnlineChangePush(receiveData);
                    this.DeviceOnlineChangePush(JObject.Parse(msgData));
                }
                //撤防
                else if (topic == gatewayId + "/Security/WithdrawMode_Respon")
                {
                    this.RemoveSafetyGarrisonPush(receiveData);
                    this.RemoveSafetyGarrisonPush(JObject.Parse(msgData));
                }
                //布防
                else if (topic == gatewayId + "/Security/EnableMode_Respon")
                {
                    this.SetSafetyGarrisonPush(receiveData);
                    this.SetSafetyGarrisonPush(JObject.Parse(msgData));
                }
                //逻辑触发上报
                else if (topic == gatewayId + "/Logic/Execute_Respon")
                {
                    this.LogicExecutePush(receiveData);
                    this.LogicExecutePush(null);
                }
                //场景触发上报
                else if (topic == gatewayId + "/Scene/Exec_Respon")
                {
                    this.SceneExecPush(receiveData);
                    this.SceneExecPush(null);
                }
            }
            catch (Exception ex)
@@ -233,7 +232,7 @@
        private void DoorLockDeviceReportPush(JObject receiveData)
        {
            //保存门锁信息到本地
            HdlAlarmsLogic.Current.SaveDoorLockAlarmInfo(receiveData);
            //HdlAlarmsLogic.Current.SaveDoorLockAlarmInfo(receiveData);
            //显示有新消息的特效
            this.ShowHadNewMessageAppeal();
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/UserCenterLogic.cs
@@ -29,6 +29,13 @@
        /// </param>
        public static async Task<bool> GetResultStatuByRequestHttps(string RequestName, bool checkAuthority, object obj, List<string> listNotShowError = null)
        {
            //检测是否已经完成账号信息初始化
            if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false)
            {
                //不管结果怎么样,如果调用了这个函数,需要重头获取Token,所以必须返回失败
                await ReInitUserAccoutInfo();
                return false;
            }
            //获取接口的连接模式
            var connectMode = GetHttpConnectMode(checkAuthority);
            //获取从接口那里取到的比特数据
@@ -63,6 +70,14 @@
        /// </param>
        public static async Task<string> GetResultCodeByRequestHttps(string RequestName, bool checkAuthority, object obj, List<string> listNotShowError = null)
        {
            //检测是否已经完成账号信息初始化
            if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false)
            {
                //不管结果怎么样,如果调用了这个函数,需要重头获取Token,所以必须返回失败
                await ReInitUserAccoutInfo();
                return "Error";
            }
            //获取接口的连接模式
            var connectMode = GetHttpConnectMode(checkAuthority);
            //获取从接口那里取到的比特数据
@@ -96,6 +111,13 @@
        /// </param>
        public static async Task<string> GetResponseDataByRequestHttps(string RequestName, bool checkAuthority, object obj, List<string> listNotShowError = null)
        {
            //检测是否已经完成账号信息初始化
            if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false)
            {
                //不管结果怎么样,如果调用了这个函数,需要重头获取Token,所以必须返回失败
                await ReInitUserAccoutInfo();
                return null;
            }
            //获取接口的连接模式
            var connectMode = GetHttpConnectMode(checkAuthority);
            //获取从接口那里取到的比特数据
@@ -139,6 +161,13 @@
        /// </param>
        public static async Task<byte[]> GetByteResponseDataByRequestHttps(string RequestName, bool checkAuthority, object obj, List<string> listNotShowError = null)
        {
            //检测是否已经完成账号信息初始化
            if (UserCenterResourse.UserInfo.InitUserInfoSuccess == false)
            {
                //不管结果怎么样,如果调用了这个函数,需要重头获取Token,所以必须返回失败
                await ReInitUserAccoutInfo();
                return null;
            }
            //获取接口的连接模式
            var connectMode = GetHttpConnectMode(checkAuthority);
            //获取从接口那里取到的比特数据
@@ -406,11 +435,13 @@
                            {
                                try
                                {
                                    var Myform = UserCenterResourse.DicActionForm[UserCenterResourse.NowActionFormID];
                                    if (Myform is EditorCommonForm)
                                    EditorCommonForm Myform = UserCenterResourse.DicActionForm[UserCenterResourse.NowActionFormID] as EditorCommonForm;
                                    if (Myform != null)
                                    {
                                        //重置左滑使能
                                        Myform.ScrollEnabled = Myform.ScrollEnabled;
                                        //触发界面再次激活的事件
                                        int value = ((EditorCommonForm)Myform).FormActionAgainEvent();
                                        int value = Myform.FormActionAgainEvent();
                                        if (value == 1)
                                        {
                                            //Log出力
@@ -441,11 +472,13 @@
                                {
                                    try
                                    {
                                        var Myform = UserCenterResourse.DicActionForm[UserCenterResourse.NowActionFormID];
                                        if (Myform is EditorCommonForm)
                                        EditorCommonForm Myform = UserCenterResourse.DicActionForm[UserCenterResourse.NowActionFormID] as EditorCommonForm;
                                        if (Myform != null)
                                        {
                                            //重置左滑使能
                                            Myform.ScrollEnabled = Myform.ScrollEnabled;
                                            //触发界面再次激活的事件
                                            int value = ((EditorCommonForm)Myform).FormActionAgainEvent();
                                            int value = Myform.FormActionAgainEvent();
                                            if (value == 1)
                                            {
                                                //Log出力
@@ -825,6 +858,16 @@
                //消息记录重新读取及检测
                ControlCommonResourse.ReadMessageAgain = true;
                ControlCommonResourse.HadNewMessage = false;
                HdlThreadLogic.Current.RunMain(() =>
                {
                    for (int i = 0; i < ControlCommonResourse.listMessageManaContr.Count; i++)
                    {
                        //显示角标特效
                        ControlCommonResourse.listMessageManaContr[i].IsSelected = false;
                    }
                });
                //加载账号配置信息
                var optionInfo = UserCenterResourse.Option.Load();
                UserCenterResourse.Option = optionInfo;
@@ -908,22 +951,32 @@
        /// <returns></returns>
        private async static Task<bool> InitUserAccoutInfo()
        {
            //初始化个人信息的标识
            UserCenterResourse.UserInfo.InitUserInfoSuccess = false;
            //获取本地记录的用户信息
            UserCenterResourse.UserInfo = GetUserInformationFromLocation();
            UserCenterResourse.UserInfo.UserIconFile = System.IO.Path.Combine(UserCenterResourse.Option.UserPictruePath, "Admin.png");
            //先根据本地缓存设置初始值
            Config.Instance.isAdministrator = UserCenterResourse.UserInfo.AuthorityNo != 1;
            //获取登录账号的信息
            var pra = new AccountInfoPra();
            var listNotShow = new List<string>() { "NotSetAgain" };
            string result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetAccountInfo", false, pra, listNotShow);
            if (string.IsNullOrEmpty(result) == true)
            //序列化对象
            var requestJson = JsonConvert.SerializeObject(pra);
            //访问接口
            byte[] byteData = await CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync("ZigbeeUsers/GetAccountInfo", Encoding.UTF8.GetBytes(requestJson));
            if (byteData == null)
            {
                //断网的话,该干嘛就干嘛吧,总之不能控主人的东西
                Config.Instance.isAdministrator = false;
                return false;
            }
            //检测错误
            var revertObj = JsonConvert.DeserializeObject<ResponsePack>(Encoding.UTF8.GetString(byteData));
            if (revertObj.StateCode.ToUpper() != "SUCCESS")
            {
                return false;
            }
            var userInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInformation>(result);
            var userInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInformation>(revertObj.ResponseData.ToString());
            userInfo.Account = Common.Config.Instance.Account;
            if (string.IsNullOrEmpty(userInfo.UserName) == true)
            {
@@ -956,22 +1009,23 @@
                string dirPath = CombinePath();
                if (System.IO.Directory.Exists(dirPath) == true)
                {
                    //先记录起住宅的一些信息
                    var house = House.GetHouseByHouseId(Config.Instance.HomeId);
                    //删除整个文件夹
                    System.IO.Directory.Delete(dirPath, true);
                    try
                    {
                        //同步数据的判断文件(以防万一删除整个文件夹失败的时候,这个文件被删的话,应该没什么大问题)
                        string SynchronizeFile = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.AutoDownLoadBackupCheckFile);
                        //如果本地已经拥有了这个文件,则说明不是新手机,不再自动还原
                        if (System.IO.File.Exists(SynchronizeFile) == true)
                        {
                            System.IO.File.Delete(SynchronizeFile);
                        }
                        //删除整个文件夹
                        System.IO.Directory.Delete(dirPath, true);
                    }
                    catch { }
                    //创建住宅文件夹
                    Global.CreateHomeDirectory(Config.Instance.HomeId);
                    //预创建个人中心全部的文件夹
                    CreatAllUserCenterDirectory();
                    var newHouse = new House();
                    newHouse.Id = house.Id;
                    newHouse.Name = house.Name;
                    newHouse.IsOthreShare = house.IsOthreShare;
                    newHouse.AccountType = house.AccountType;
                    newHouse.MainUserDistributedMark = house.MainUserDistributedMark;
                    newHouse.Save(false);
                }
            }
            if (string.IsNullOrEmpty(userInfo.UserName) == true)
@@ -996,9 +1050,11 @@
            UserCenterResourse.UserInfo.StringPwd = null;
            //初始化管理员控制主人的连接地址(因为这个连接Token是不会改变的,所以只需要初始化一次)
            await InitAdminConnectMainInfo();
            bool flage = await InitAdminConnectMainInfo();
            //初始化个人信息的标识
            UserCenterResourse.UserInfo.InitUserInfoSuccess = flage;
            return true;
            return flage;
        }
        /// <summary>
@@ -1015,6 +1071,26 @@
            }
            var info = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInformation>(value);
            return info;
        }
        /// <summary>
        /// 重新初始化登陆账号的信息(旨在对应那一瞬间,网络不好,导致误判的情况)
        /// </summary>
        /// <returns></returns>
        private async static Task<bool> ReInitUserAccoutInfo()
        {
            //重新初始化账号信息
            var result = await InitUserAccoutInfo();
            if (result == false)
            {
                return result;
            }
            //同步云端的网关id,如果本地拥有云端不存在的id,则表示应该被换绑了,直接删除
            HdlGatewayLogic.Current.SynchronizeDbGateway();
            //初始化个人信息的标识
            UserCenterResourse.UserInfo.InitUserInfoSuccess = true;
            return true;
        }
        /// <summary>
@@ -1048,13 +1124,8 @@
        /// 初始化管理员权限远程连接主人的信息
        /// </summary>
        /// <returns></returns>
        public static async Task<bool> InitAdminConnectMainInfo()
        private static async Task<bool> InitAdminConnectMainInfo()
        {
            //先清空
            Config.Instance.isAdministrator = false;
            Config.Instance.AdminRequestBaseUrl = string.Empty;
            Config.Instance.AdminRequestToken = string.Empty;
            if (UserCenterResourse.UserInfo.AuthorityNo != 2 && UserCenterResourse.UserInfo.AuthorityNo != 3)
            {
                //时代变了,这里管理员和成员都能调用
@@ -1068,16 +1139,24 @@
                SharedHid = Config.Instance.Home.Id
            };
            var listNotShow = new List<string>() { "NotSetAgain" };
            var result = await GetResponseDataByRequestHttps("App/GetSharedHomeApiControl", false, pra, listNotShow);
            if (string.IsNullOrEmpty(result) == true)
            //序列化对象
            var requestJson = JsonConvert.SerializeObject(pra);
            //访问接口
            byte[] byteData = await CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync("App/GetSharedHomeApiControl", Encoding.UTF8.GetBytes(requestJson));
            if (byteData == null)
            {
                return false;
            }
            //检测错误
            var revertObj = JsonConvert.DeserializeObject<ResponsePack>(Encoding.UTF8.GetString(byteData));
            if (revertObj.StateCode.ToUpper() != "SUCCESS")
            {
                return false;
            }
            Config.Instance.isAdministrator = true;
            //分享链接
            var info = JsonConvert.DeserializeObject<MemberAdministratorResult>(result);
            var info = JsonConvert.DeserializeObject<MemberAdministratorResult>(revertObj.ResponseData.ToString());
            Config.Instance.AdminRequestBaseUrl = info.RequestBaseUrl;
            Config.Instance.AdminRequestToken = info.RequestToken;
@@ -1325,6 +1404,21 @@
        }
        #endregion
        #region ■ 时间转换___________________________
        /// <summary>
        /// 将utc时间类型的字符串,转换为本地时间
        /// </summary>
        /// <param name="timeText"></param>
        /// <returns></returns>
        public static DateTime ConvertUtcTimeToLocalTime(string timeText)
        {
            var utcTime = Convert.ToDateTime(timeText);
            return TimeZoneInfo.ConvertTimeFromUtc(utcTime, TimeZoneInfo.Local);
        }
        #endregion
        #region ■ 文件保存和读取_____________________
        /// <summary>
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/DirectoryFileNameResourse.cs
@@ -132,6 +132,10 @@
        /// </summary>
        public const string DetailedLogFile = "DetailedLogFile";
        /// <summary>
        /// 显示设备历史版本的【标识文件】,不加密
        /// </summary>
        public const string DeviceHistoryFile = "DeviceHistoryFile";
        /// <summary>
        /// 功能备份的名字  这个东西不加密
        /// </summary>
        public const string OptionBackupName = "##Option##";
ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/IndoorUnitListForm.cs
@@ -113,7 +113,7 @@
            rowInfo.btnIcon = btnIcon;
            //设备名称
            var btnDeviceName = new NormalViewControl(400, 60, true);
            var btnDeviceName = new NormalViewControl(700, 60, true);
            btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(device);
            btnDeviceName.X = Application.GetRealWidth(193);
            btnDeviceName.Y = Application.GetRealHeight(45);
@@ -211,7 +211,7 @@
            {
                for (int i = 0; i < listDevice.Count; i++)
                {
                    if (i != 0 && i % 5 == 0)
                    if (i != 0 && i % 3 == 0)
                    {
                        //读取5个后,间隔一段时间
                        System.Threading.Thread.Sleep(200);
ZigbeeApp/Shared/Phone/UserCenter/Device/AirConditioner/IndoorUnitSettionForm.cs
@@ -20,6 +20,14 @@
        /// 当前选择的网关
        /// </summary>
        private AC deviceAc = null;
        /// <summary>
        /// 摆风模式(用二进制来玩自定义模式 0:不使用 1:使用)
        /// </summary>
        private int swingMode = 0;
        /// <summary>
        /// 固定预留的数据
        /// </summary>
        private string fixValue = null;
        #endregion
@@ -39,8 +47,27 @@
            //初始化右上角菜单
            this.InitTopRightMenu();
            //初始化中部控件
            this.InitMiddleFrame();
            HdlThreadLogic.Current.RunThread(() =>
            {
                //开启进度条
                this.ShowProgressBar();
                //读取空调摆风模式
                var result = this.ReadAirConditionerSwingModeSupport();
                if (result == false)
                {
                    //关闭进度条
                    this.CloseProgressBar(ShowReLoadMode.YES);
                    return;
                }
                //关闭进度条
                this.CloseProgressBar();
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //初始化中部控件
                    this.InitMiddleFrame();
                });
            });
        }
        /// <summary>
@@ -125,6 +152,43 @@
                form.AddForm(deviceAc);
            };
            //摆风
            var rowSwing = new FrameRowControl(listview.rowSpace / 2);
            rowSwing.UseClickStatu = false;
            listview.AddChidren(rowSwing);
            rowSwing.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uAirConditionerSwing), 400);
            rowSwing.AddBottomLine();
            var btnSwingSwitch = rowSwing.AddMostRightSwitchIcon();
            if (this.swingMode == 1)
            {
                btnSwingSwitch.IsSelected = true;
            }
            btnSwingSwitch.ButtonClickEvent += (sender, e) =>
            {
                //不能再点击
                btnSwingSwitch.CanClick = false;
                string statu = btnSwingSwitch.IsSelected == true ? "0" : "1";
                //将二进制转换为十进制
                int sendData = Convert.ToInt32(this.fixValue + statu, 2);
                HdlThreadLogic.Current.RunThread(async () =>
                {
                    var result = await HdlDeviceAirConditionerLogic.Current.SetUseAcSwingFunctionStatu(deviceAc, sendData);
                    if (result == true)
                    {
                        HdlThreadLogic.Current.RunMain(() =>
                        {
                            btnSwingSwitch.IsSelected = !btnSwingSwitch.IsSelected;
                            this.swingMode = this.swingMode == 1 ? 0 : 1;
                            deviceAc.UseSwingFunction = btnSwingSwitch.IsSelected;
                            deviceAc.ReSave();
                        });
                    }
                    //能够继续点击
                    btnSwingSwitch.CanClick = true;
                });
            };
            //初始化桌布完成
            tableContr.FinishInitControl(bodyFrameLayout, this.listview);
            tableContr = null;
@@ -191,5 +255,56 @@
        }
        #endregion
        #region ■ 读取空调摆风模式___________________
        /// <summary>
        /// 读取空调摆风模式
        /// </summary>
        private bool ReadAirConditionerSwingModeSupport()
        {
            string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(deviceAc);
            HdlGatewayReceiveLogic.Current.AddAttributeEvent("ReadAirConditionerModeSupport", ReceiveComandDiv.A设备属性上报, (report) =>
            {
                string checkKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report);
                if (checkKeys != mainkeys || report.DeviceStatusReport.CluterID != 514)
                {
                    return;
                }
                for (int i = 0; i < report.DeviceStatusReport.AttriBute.Count; i++)
                {
                    var data = report.DeviceStatusReport.AttriBute[i];
                    if (data.AttributeId == 4097)
                    {
                        HdlGatewayReceiveLogic.Current.RemoveEvent("ReadAirConditionerModeSupport");
                        //转换为二进制
                        var value = Convert.ToString(data.AttriButeData, 2).PadLeft(16, '0');
                        //这个设置是放在后面的
                        this.fixValue = value.Substring(0, value.Length - 1);
                        this.swingMode = Convert.ToInt32(value.Substring(this.fixValue.Length));
                    }
                }
            });
            //获取是否启用空调摆风模式的状态(打开 或者 关闭)
            deviceAc.ReadUseSwingFunctionStatu();
            int timeOut = 0;
            while (this.fixValue == null && timeOut <= 30)
            {
                System.Threading.Thread.Sleep(100);
                timeOut++;
            }
            if (this.fixValue == null)
            {
                //获取空调摆风状态失败
                string msg = Language.StringByID(R.MyInternationalizationString.uGetAirConditionerSwingFunctionFail);
                msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "回复超时");
                this.ShowMassage(ShowMsgType.Tip, msg);
                return false;
            }
            return true;
        }
        #endregion
    }
}
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddDevicePage.cs
@@ -568,7 +568,7 @@
                var btnBindName = new Button()
                {
                    Width = Application.GetRealWidth(500 - 120),
                    Width = Application.GetRealWidth(790),
                    X = devicePic.Right + Application.GetRealWidth(20),
                    TextColor = Shared.Common.ZigbeeColor.Current.TextBlack,
                    TextAlignment = TextAlignment.CenterLeft,
@@ -645,7 +645,7 @@
                btnBindName.MouseUpEventHandler += hander;
                btnChoose.MouseUpEventHandler += hander;
                if (device.CommonDevice?.DeviceEpointName == "")
                if (string.IsNullOrEmpty(device.CommonDevice?.DeviceEpointName))
                {
                    btnBindName.Text = device.CommonDevice?.DeviceAddr + "_" + device.CommonDevice?.DeviceEpoint;
                }
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddScenePage.cs
@@ -79,7 +79,7 @@
                Text = Language.StringByID(R.MyInternationalizationString.FirstFloor),
                TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                TextSize = 14,
                IsBold =true,
                IsBold = true,
                TextAlignment = TextAlignment.CenterRight,
            };
            btnAddFrameLayout.AddChidren(btnFloorText);
@@ -146,7 +146,7 @@
                TextID = R.MyInternationalizationString.Save,
                BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                TextColor = Shared.Common.ZigbeeColor.Current.XMWhite,
                IsBold =true,
                IsBold = true,
                TextSize = 16,
            };
            bottomFrameLayout.AddChidren(btnFinifh);
@@ -591,11 +591,11 @@
                var btnBindName = new Button()
                {
                    Width = Application.GetRealWidth(500 - 120),
                    Width = Application.GetRealWidth(790),
                    X = devicePic.Right + Application.GetRealWidth(20),
                    TextColor = Shared.Common.ZigbeeColor.Current.TextBlack,
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize =15,
                    TextSize = 15,
                };
                rowLayout.AddChidren(btnBindName);
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs
@@ -45,19 +45,17 @@
        FrameLayout blankFrameLayout;//空数据显示布局
        List<int> typeModeList;//动态获取按键支持的模式大类型
        public List<ScenesListInfo> gwScenesList = new List<ScenesListInfo>();//网关中的场景列表
        bool IsRead = false;
        #endregion
        //初始化按键数据
        private void InitListInfo()
        void InitListInfo()
        {
            System.Threading.Tasks.Task.Run(async () =>
            {
                try
                {
                    Application.RunOnMainThread(() =>
                    {
                    });
                    localDeviceList.Clear();
                    scList.Clear();
                    //获取本地设备列表
@@ -73,15 +71,8 @@
                    {
                        gwScenesList = gwSceneObj.getSceneInfo.ScenesList;
                    }
                    else
                    {
                        Application.RunOnMainThread(() =>
                        {
                            CommonPage.Loading.Hide();
                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
                        });
                    }
                    //动态获取按键支持的大类
                    typeModeList = await GetTypeMode();
                    #region 读取面板当前模式
                    //读取按键当前模式
                    var tempDeata = await currentKey.ReadPanelConfigureInfoAsync();
@@ -106,78 +97,81 @@
                            {
                                currentClusterID = 258;
                            }
                            currentKey.ReSave();
                            //读取按键当前绑定目标
                            var getBindList = await currentKey.GetDeviceBindAsync();
                            var bindDeviceListTemp = new System.Collections.Generic.List<BindListResponseObj> { };
                            var bindSceneListTemp = new System.Collections.Generic.List<BindListResponseObj> { };
                            if (getBindList != null && getBindList.getAllBindResponseData != null)
                            {
                                currentKey.bindList.Clear();
                                foreach (var b in getBindList.getAllBindResponseData.BindList)
                                {
                                    if (b.BindCluster == currentClusterID)
                                    {
                                        if (b.BindCluster == 6)
                                        {
                                            if (b.BindType == 2)
                                            {
                                                bindSceneListTemp.Add(b);
                                            }
                                            else
                                            {
                                                bindDeviceListTemp.Add(b);
                                            }
                                        }
                                        else
                            //读取按键当前绑定目标
                            GetDeviceBindResponseAllData getBindList = null;
                            if (IsRead)
                            {
                                getBindList = await currentKey.GetDeviceBindAsync();
                                var bindDeviceListTemp = new System.Collections.Generic.List<BindListResponseObj> { };
                                var bindSceneListTemp = new System.Collections.Generic.List<BindListResponseObj> { };
                                if (getBindList != null && getBindList.getAllBindResponseData != null)
                                {
                                    currentKey.bindList.Clear();
                                    foreach (var b in getBindList.getAllBindResponseData.BindList)
                                    {
                                        if (b.BindCluster == currentClusterID)
                                        {
                                            if (currentClusterID == 8)
                                            if (b.BindCluster == 6)
                                            {
                                                if (b.BindCluster == 8)
                                                if (b.BindType == 2)
                                                {
                                                    currentKey.bindList.Add(b);
                                                    bindSceneListTemp.Add(b);
                                                }
                                                else
                                                {
                                                    bindDeviceListTemp.Add(b);
                                                }
                                            }
                                            else
                                            {
                                                currentKey.bindList.Add(b);
                                                if (currentClusterID == 8)
                                                {
                                                    if (b.BindCluster == 8)
                                                    {
                                                        currentKey.bindList.Add(b);
                                                    }
                                                }
                                                else
                                                {
                                                    currentKey.bindList.Add(b);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                Application.RunOnMainThread(() =>
                                else
                                {
                                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
                                });
                                    Application.RunOnMainThread(() =>
                                    {
                                        CommonPage.Loading.Hide();
                                        new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
                                        return;
                                    });
                                }
                                if (currentKey.panelMode == 1)
                                {
                                    currentKey.bindList = bindSceneListTemp;
                                    currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddScene);
                                }
                                else if (currentKey.panelMode == 100 || currentKey.panelMode == 101 || currentKey.panelMode == 102)
                                {
                                    currentKey.bindList = bindDeviceListTemp;
                                    currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddSwitch);
                                }
                                else if (currentKey.panelMode == 200 || currentKey.panelMode == 201 || currentKey.panelMode == 203 || currentKey.panelMode == 204 || currentKey.panelMode == 205)
                                {
                                    currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddDimmer);
                                }
                                else if (currentKey.panelMode == 300 || currentKey.panelMode == 301 || currentKey.panelMode == 302 || currentKey.panelMode == 303 || currentKey.panelMode == 304)
                                {
                                    currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddCurtain);
                                }
                            }
                            if (currentKey.panelMode == 1)
                            {
                                currentKey.bindList = bindSceneListTemp;
                                currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddScene);
                            }
                            else if (currentKey.panelMode == 100 || currentKey.panelMode == 101 || currentKey.panelMode == 102)
                            {
                                currentKey.bindList = bindDeviceListTemp;
                                currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddSwitch);
                            }
                            else if (currentKey.panelMode == 200 || currentKey.panelMode == 201 || currentKey.panelMode == 203 || currentKey.panelMode == 204 || currentKey.panelMode == 205)
                            {
                                currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddDimmer);
                            }
                            else if (currentKey.panelMode == 300 || currentKey.panelMode == 301 || currentKey.panelMode == 302 || currentKey.panelMode == 303 || currentKey.panelMode == 304)
                            {
                                currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddCurtain);
                            }
                            currentKey.ReSave();
                        }
                        #endregion
                        //动态获取按键支持的大类
                        typeModeList = await GetTypeMode();
                        #endregion
                        Application.RunOnMainThread(() =>
                        {
                            RefreshList();
@@ -189,7 +183,6 @@
                        Application.RunOnMainThread(() =>
                        {
                            CommonPage.Loading.Hide();
                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime), Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
                        });
                        return;
@@ -216,13 +209,14 @@
            var btnAddFrameLayout = new FrameLayout()
            {
                X = Application.GetRealWidth(913),
                X = Application.GetRealWidth(888),
                Width = Application.GetRealWidth(192),
            };
            this.titleFrameLayout.AddChidren(btnAddFrameLayout);
            var btnBindAdd = new Button
            {
                X = Application.GetRealWidth(62),
                Height = Application.GetRealHeight(72),
                Width = Application.GetRealWidth(72),
                UnSelectedImagePath = "BindPic/BindAdd.png",
@@ -310,6 +304,14 @@
            #endregion
            CommonPage.Loading.Start("");
            middleFrameLayout();
            if (currentKey.bindList.Count == 0)
            {
                IsRead = true;
            }
            else
            {
                IsRead = false;
            }
            InitListInfo();
        }
@@ -325,6 +327,7 @@
            midVerticalRefreshLayout.BeginHeaderRefreshingAction += () =>
            {
                midVerticalRefreshLayout.BeginHeaderRefreshing();
                IsRead = true;
                InitListInfo();
                midVerticalRefreshLayout.EndHeaderRefreshing();
            };
@@ -484,7 +487,7 @@
                                    devicePic.Width = Application.GetRealWidth(110);
                                    devicePic.Text = "";
                                }
                                if (tempDev.DeviceEpointName == "")
                                if (string.IsNullOrEmpty(tempDev.DeviceEpointName))
                                {
                                    btnBindNameText = tempDev.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit);
                                }
@@ -528,7 +531,7 @@
            modeRowLayout.BackgroundColor = ZigbeeColor.Current.XMWhite;
            midVerticalRefreshLayout.AddChidrenRow(modeRowLayout);
            modeRowLayout.frameTable.UseClickStatu = false;
            modeRowLayout.frameTable.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.keyMode), 500);
            modeRowLayout.frameTable.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.keyMode), 400);
            var btnKeyModeTipText = "";
            #region 当前模式文本显示
            switch (currentKey.panelMode)
@@ -574,7 +577,7 @@
                    break;
            }
            #endregion
            modeRowLayout.frameTable.AddMostRightView(btnKeyModeTipText, 500);
            modeRowLayout.frameTable.AddMostRightView(btnKeyModeTipText, 800);
            modeRowLayout.frameTable.AddBottomLine();
            var btnDel = modeRowLayout.AddDeleteControl();
            //一键清除按键事件
@@ -639,7 +642,7 @@
                         }
                         CommonPage.Loading.Hide();
                     }
                 };
                 };
            };
        }
@@ -856,7 +859,7 @@
                                         currentKey.currentKeySelectModeText = oldKeySelectModeText;
                                         dialog.Close();
                                     }
                                 };
                                 };
                            }
                        }
                        else
@@ -909,7 +912,7 @@
                                         currentKey.currentKeySelectModeText = oldKeySelectModeText;
                                         dialog.Close();
                                     }
                                 };
                                 };
                            }
                        }
                        else
ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs
@@ -61,7 +61,7 @@
        /// <param name="i_listdevice">窗帘的回路</param>
        public void ShowForm(Rollershade i_CurtainDevice)
        {
            UserView.HomePage.Instance.ScrollEnabled = false;
            this.ScrollEnabled = false;
            this.curtainDevice = i_CurtainDevice;
@@ -116,11 +116,15 @@
                    //Log出力
                    string msg = "当前激活的界面[" + UserCenterResourse.NowActionFormID + "]";
                    HdlLogLogic.Current.WriteLog(ex, msg);
                    //出现未知错误
                    this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uUnKnownError));
                    this.listView.RemoveAll();
                    //设备异常补救 -> 添加重置电机行
                    this.AddElectricalMachineryRow();
                    //电机数据异常,请重置电机
                    this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uCurtainDataIsErrorPleaseResetCurtain));
                    try
                    {
                        this.listView.RemoveAll();
                        //设备异常补救 -> 添加重置电机行
                        this.AddElectricalMachineryRow();
                    }
                    catch (Exception ex2) { HdlLogLogic.Current.WriteLog(ex2, "开合帘补救异常"); }
                }
            });
        }
@@ -238,7 +242,7 @@
            btnProgress1.Text = progressValue + "%";
            frameBack.AddChidren(btnProgress1);
            //进度条
            this.openSeekBar = new  SeekBarControl(965);
            this.openSeekBar = new SeekBarControl(965);
            openSeekBar.Y = btnProgressView.Bottom + Application.GetRealHeight(46);
            openSeekBar.ProgressBarColor = 0xff288bfd;
            openSeekBar.Progress = progressValue;
@@ -348,17 +352,7 @@
                    }
                    oldProValue = nowValue;
                    checking = true;
                    if (curtainData.DeleteOpenLimit == true)
                    {
                        //重置开限位点
                        var result = await HdlDeviceCurtainLogic.Current.DeleteCurtainLimitPoint(curtainDevice, Rollershade.LimiType.UpLimit);
                        if (result == false)
                        {
                            checking = false;
                            continue;
                        }
                        curtainData.DeleteOpenLimit = false;
                    }
                    //将窗帘调整到指定百分比
                    this.sendDiv = 1;
                    curtainDevice.WcdGoToTiltValue(nowValue);
@@ -376,12 +370,15 @@
            string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainOpenLimitMsg);
            this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
            {
                decimal openValue = ((decimal)curtainData.OpenLimitPersent / 100) * curtainData.CurtainLength;
                decimal closeValue = ((decimal)curtainData.CloseLimitPersent / 100) * curtainData.CurtainLength;
                if (openValue < 0) { openValue = 0; }
                if (closeValue < 0) { closeValue = curtainData.CurtainLength; }
                //执行确认及覆盖上限位点
                var result = await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.UpLimit,
                    curtainData.OpenLimitPersent, curtainData.CloseLimitPersent);
                    (int)openValue, (int)closeValue);
                if (result == true)
                {
                    curtainData.DeleteOpenLimit = true;
                    this.receiveOpenlimit = false;
                }
            });
@@ -415,7 +412,7 @@
            btnProgress1.Text = progressValue + "%";
            frameBack.AddChidren(btnProgress1);
            //进度条
            this.closeSeekBar = new  SeekBarControl(965);
            this.closeSeekBar = new SeekBarControl(965);
            closeSeekBar.Y = btnProgressView.Bottom + Application.GetRealHeight(46);
            closeSeekBar.ProgressBarColor = 0xff288bfd;
            closeSeekBar.Progress = progressValue;
@@ -471,7 +468,7 @@
            frameBack.AddChidren(btnPlus);
            btnPlus.ButtonClickEvent += (sender, e) =>
            {
                if (closeSeekBar.Progress >=100)
                if (closeSeekBar.Progress >= 100)
                {
                    return;
                }
@@ -525,16 +522,7 @@
                    }
                    checking = true;
                    oldProValue = nowValue;
                    if (curtainData.DeleteCloseLimit == true)
                    {
                        //重置合限位点
                        var result = await HdlDeviceCurtainLogic.Current.DeleteCurtainLimitPoint(curtainDevice, Rollershade.LimiType.DownLimit);
                        if (result == false)
                        {
                            continue;
                        }
                        curtainData.DeleteCloseLimit = false;
                    }
                    //将窗帘调整到指定百分比
                    this.sendDiv = 2;
                    curtainDevice.WcdGoToTiltValue(nowValue);
@@ -552,12 +540,16 @@
            string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainCloseLimitMsg);
            this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
            {
                //执行确认及覆盖合限位点
                decimal openValue = ((decimal)curtainData.OpenLimitPersent / 100) * curtainData.CurtainLength;
                decimal closeValue = ((decimal)curtainData.CloseLimitPersent / 100) * curtainData.CurtainLength;
                if (openValue < 0) { openValue = 0; }
                if (closeValue < 0) { closeValue = curtainData.CurtainLength; }
                //执行确认及覆盖上限位点
                var result = await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.DownLimit,
                    curtainData.OpenLimitPersent, curtainData.CloseLimitPersent);
                    (int)openValue, (int)closeValue);
                if (result == true)
                {
                    curtainData.DeleteCloseLimit = true;
                    this.receiveCloseLimit = false;
                }
            });
@@ -722,7 +714,7 @@
                    //方向备份
                    await HdlDeviceCurtainLogic.Current.BackupCurtainDirection(curtainDevice, curtainData.Direction);
                    //限位备份
                    int uplimit= (int)(curtainData.OpenLimitValue / (curtainData.CurtainLength * 1.0) * 100);
                    int uplimit = (int)(curtainData.OpenLimitValue / (curtainData.CurtainLength * 1.0) * 100);
                    int downlimit = (int)(curtainData.CloseLimitValue / (curtainData.CurtainLength * 1.0) * 100);
                    await HdlDeviceCurtainLogic.Current.BackupCurtainLimitPoint(curtainDevice, uplimit, downlimit);
                });
@@ -784,8 +776,6 @@
            HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute");
            HdlGatewayReceiveLogic.Current.RemoveEvent("ReceiveLimitData");
            UserView.HomePage.Instance.ScrollEnabled = true;
            base.CloseFormBefore();
        }
@@ -802,14 +792,6 @@
            /// false:电机方向正向;true:电机方向反向
            /// </summary>
            public bool Direction = false;
            /// <summary>
            /// 是否重置开限位点
            /// </summary>
            public bool DeleteOpenLimit = true;
            /// <summary>
            /// 是否重置合限位点
            /// </summary>
            public bool DeleteCloseLimit = true;
            /// <summary>
            /// 开限位的值
            /// </summary>
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceAddSuccessForm.cs
@@ -213,9 +213,9 @@
            };
        }
#endregion
        #endregion
#region ■ 修改名字___________________________
        #region ■ 修改名字___________________________
        /// <summary>
        /// 设备重命名然后打开新的画面
@@ -251,47 +251,22 @@
        /// </summary>
        private async void SetAllEpointName()
        {
            var tempValue = Common.LocalDevice.Current.GetDeviceObjectText(this.listNewDevice);
            var arry = tempValue.Split(new string[] { "(" }, StringSplitOptions.RemoveEmptyEntries);
            var objName = arry[0].Trim();
            //获取设备类型
            var deviceInfoType = Common.LocalDevice.Current.GetMyDeviceEnumInfo(this.listNewDevice);
            foreach (var device in this.listNewDevice)
            {
                if (Common.LocalDevice.Current.GetSimpleEpointName(device) != string.Empty)
                {
                    //有名字不处理
                    continue;
                }
                var epointName = objName;
                if (this.listNewDevice.Count > 1)
                {
                    if (deviceInfoType.BeloneType == Common.DeviceBeloneType.A按键面板 && device.Type == DeviceType.TemperatureSensor)
                    {
                        //面板的最后一个回路是温度传感器
                        epointName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId11);
                    }
                    else if (deviceInfoType.ConcreteType == Common.DeviceConcreteType.Sensor_Pir)
                    {
                        //pir传感器,它又搞特殊东西,传感器自身用自己的名字,继电器回路的话……
                        if (device.Type == DeviceType.OnOffOutput)
                        {
                            epointName += Language.StringByID(R.MyInternationalizationString.uDeviceBelongId2300);
                        }
                    }
                    else
                    {
                        //XXXXX(N回路)
                        epointName += "(" + device.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + ")";
                    }
                }
                //获取端点名字
                var epointName = Common.LocalDevice.Current.GetDeviceEpointName(device);
                await Common.LocalDevice.Current.ReName(device, epointName, ShowErrorMode.NO);
            }
        }
#endregion
        #endregion
#region ■ 画面关闭___________________________
        #region ■ 画面关闭___________________________
        /// <summary>
        /// 画面关闭
@@ -308,6 +283,6 @@
            base.CloseFormBefore();
        }
#endregion
        #endregion
    }
}
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceDryContactSettionForm.cs
@@ -335,7 +335,7 @@
                            //选择的是传感器输入
                            value = 65535;
                        }
                        var result = await HdlDevicePanelLogic.Current.EditorDryContactFunction((Panel)nowSelectDevice, value);
                        var result = await HdlDevicePanelLogic.Current.EditorDryContactThirdFunction((Panel)nowSelectDevice, value);
                        if (result == true)
                        {
                            //重新初始化菜单行,隐藏或者开放绑定目标菜单
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceFirmwareUpdateForm.cs
@@ -81,6 +81,10 @@
        /// </summary>
        private void InitTopRightMenu()
        {
            if (UserCenterResourse.HideOption.DeviceHistory != 1)
            {
                return;
            }
            var btnIcon = new MostRightIconControl(69, 69);
            btnIcon.UnSelectedImagePath = "Item/More.png";
            topFrameLayout.AddChidren(btnIcon);
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceGeneralInformationForm.cs
@@ -37,7 +37,7 @@
            //清空bodyFrame
            this.ClearBodyFrame();
            var listDevice = Common.LocalDevice.Current.GetDevicesByMac(i_deviceMac);
            var listDevice = Common.LocalDevice.Current.GetDevicesByMac(i_deviceMac);
            var listView = new VerticalListControl(12);
            listView.BackgroundColor = UserCenterColor.Current.White;
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceListMainForm.cs
@@ -43,6 +43,8 @@
        /// </summary>
        public void ShowForm()
        {
            this.ScrollEnabled = false;
            //设置标题信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.DeviceManagement));
@@ -132,21 +134,10 @@
            frame.AddChidren(listView);
            listView.BeginHeaderRefreshingAction += () =>
            {
                //下拉刷新
                HdlThreadLogic.Current.RunThread(() =>
                {
                    //获取全部设备
                    bool result = LocalDevice.Current.SetDeviceToMemmoryByGateway(GatewayResourse.NowSelectGateway);
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        //隐藏下拉刷新特效
                        listView.EndHeaderRefreshing();
                        if (result == true)
                        {
                            //重新刷新界面
                            this.InitMiddleFrame(false);
                        }
                    });
                    //下拉刷新
                    this.ListViewBeginHeaderRefreshing();
                });
            };
        }
@@ -175,6 +166,10 @@
            //根据MAC合并设备列表
            this.MargeAllDeviceByMac(listDevice);
            if (this.Parent == null)
            {
                return;
            }
            HdlThreadLogic.Current.RunMain(() =>
            {
                var listOta = new List<OTADevice>();
@@ -528,6 +523,60 @@
        #endregion
        #region ■ 下拉刷新___________________________
        /// <summary>
        /// 滑动控件下拉刷新
        /// </summary>
        private async void ListViewBeginHeaderRefreshing()
        {
            //如果是在线的
            if (HdlGatewayLogic.Current.CheckGatewayOnlineByFlag(GatewayResourse.NowSelectGateway) == true)
            {
                //检测广播到的这个网关是否拥有住宅ID
                ZbGateway realWay = null;
                if (HdlGatewayLogic.Current.GetRealGateway(ref realWay, GatewayResourse.NowSelectGateway) == true)
                {
                    //重新设置住宅ID(这个应该是不经过APP,直接把网关恢复了出厂设置)
                    if (HdlGatewayLogic.Current.HomeIdIsEmpty(realWay.getGatewayBaseInfo.HomeId) == true)
                    {
                        //显示进度条
                        ProgressBar.Show();
                        int result2 = await HdlGatewayLogic.Current.ReBindNewGateway(realWay);
                        //关闭进度条
                        ProgressBar.Close();
                        if (result2 == -1)
                        {
                            return;
                        }
                    }
                }
            }
            if (this.Parent == null)
            {
                return;
            }
            //获取全部设备
            int result = LocalDevice.Current.SetDeviceToMemmoryByGateway(GatewayResourse.NowSelectGateway);
            if (this.Parent == null)
            {
                return;
            }
            HdlThreadLogic.Current.RunMain(() =>
            {
                //隐藏下拉刷新特效
                listView.EndHeaderRefreshing();
                if (result != -1)
                {
                    //重新刷新界面
                    this.InitMiddleFrame(false);
                }
            });
        }
        #endregion
        #region ■ 网关在线检测_______________________
        /// <summary>
@@ -625,7 +674,16 @@
            {
                //这里主要只是获取在线状态
                var zbway = HdlGatewayLogic.Current.GetLocalGateway(gwId);
                var result = Common.LocalDevice.Current.GetDeviceListFromGateway(zbway, false, this.ReceiveDeviceStatu, ShowErrorMode.NO);
                int statu = 0;
                var list = LocalDevice.Current.GetDeviceListFromGateway(zbway, ref statu, false, ShowErrorMode.NO);
                if (statu != -1)
                {
                    for (int i = 0; i < list.Count; i++)
                    {
                        //设置设备在线状态
                        this.ReceiveDeviceStatu(list[i]);
                    }
                }
            });
        }
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceMacInfoEditorForm.cs
@@ -1196,7 +1196,7 @@
            HdlThreadLogic.Current.RunThread(async () =>
            {
                //读取空调模块版本
                var result = await ((AC)listNewDevice[0]).ReadACFirewareVersionAsync();
                var result = await HdlDeviceAirConditionerLogic.Current.ReadACFirewareVersionAsync(listNewDevice[0]);
                if (result == null || result.readACFirewareVersionResponData == null || result.readACFirewareVersionResponData.Status != 0)
                {
                    HdlThreadLogic.Current.RunMain(() =>
ZigbeeApp/Shared/Phone/UserCenter/Device/DeviceSearchForm.cs
@@ -21,9 +21,9 @@
        /// </summary>
        private bool isDeviceThreadStart = false;
        /// <summary>
        /// 等待设备的回馈的超时时间(单位:秒)
        /// 等待设备的回馈的超时时间(单位:百毫秒)
        /// </summary>
        private int waitDeviceTimeOut = 3;
        private int waitDeviceTimeOut = 20;
        /// <summary>
        /// 主题超时的线程是否开启
        /// </summary>
@@ -226,7 +226,7 @@
                }
                //刷新超时时间
                this.waitDeviceTimeOut = 3;
                this.waitDeviceTimeOut = 20;
                //获取设备的固定属性
                HdlDeviceFixedAttributeLogic.Current.SetAllFixedAttributeToDevice(device);
@@ -263,12 +263,12 @@
                while (this.waitDeviceTimeOut >= 0)
                {
                    //等待下一个回路
                    System.Threading.Thread.Sleep(1000);
                    System.Threading.Thread.Sleep(100);
                    this.waitDeviceTimeOut--;
                }
                //停止接收
                this.realGateway.GwResDataAction -= this.AdjustGatewayResultData;
                System.Threading.Thread.Sleep(500);
                System.Threading.Thread.Sleep(200);
                //目前就弄一个
                Application.RunOnMainThread(() =>
ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelBackLightSettionForm.cs
@@ -40,7 +40,7 @@
        /// <param name="i_listdevice">面板设备的全部回路</param>
        public void ShowForm(Panel i_panel)
        {
            UserView.HomePage.Instance.ScrollEnabled = false;
            this.ScrollEnabled = false;
            this.panelDevice = i_panel;
@@ -557,20 +557,6 @@
        private uint GetColorByRGB(byte R, byte G, byte B)
        {
            return (uint)(0xFF000000 + R * 256 * 256 + G * 256 + B);
        }
        #endregion
        #region ■ 界面关闭___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            UserView.HomePage.Instance.ScrollEnabled = true;
            base.CloseFormBefore();
        }
        #endregion
ZigbeeApp/Shared/Phone/UserCenter/Device/PirSensor/PirSensorBindTargetSettionForm.cs
@@ -52,7 +52,7 @@
        /// <param name="i_iasZone">传感器设备</param>
        public void ShowForm(IASZone i_iasZone)
        {
            UserView.HomePage.Instance.ScrollEnabled = false;
            this.ScrollEnabled = false;
            deviceIASZone = i_iasZone;
            //设置头部信息
@@ -94,11 +94,29 @@
            this.ClearBodyFrame();
            //当前亮度值
            string txtValue = Language.StringByID(R.MyInternationalizationString.uNowBrightnessValue);
            var frameNowLinght = new FrameRowControl();
            frameNowLinght.UseClickStatu = false;
            frameNowLinght.BackgroundColor = UserCenterColor.Current.White;
            bodyFrameLayout.AddChidren(frameNowLinght);
            frameNowLinght.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uNowBrightnessValue) + ":" + pirLuxValue + "lux", 900);
            var btnLux = frameNowLinght.AddLeftCaption(txtValue + ":" + pirLuxValue + "lux", 900);
            HdlThreadLogic.Current.RunThread(async () =>
            {
                while (this.Parent != null)
                {
                    //他们说这个东西要2秒刷新一次  获取PIR传感器的【lux值】
                    this.pirLuxValue = await HdlDevicePirSensorLogic.Current.GetPirSensorLux(deviceIASZone, ShowErrorMode.NO);
                    if (pirLuxValue != -1)
                    {
                        HdlThreadLogic.Current.RunMain(() =>
                        {
                            btnLux.Text = txtValue + ":" + pirLuxValue + "lux";
                        }, ShowErrorMode.NO);
                    }
                    await Task.Delay(2000);
                }
            }, ShowErrorMode.NO);
            var listView = new VerticalListControl(0);
            listView.Y = Application.GetRealHeight(150);
@@ -588,15 +606,6 @@
        #endregion
        #region ■ 一般方法___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            UserView.HomePage.Instance.ScrollEnabled = true;
            base.CloseFormBefore();
        }
        #endregion
    }
ZigbeeApp/Shared/Phone/UserCenter/Device/Relay/RelayThreeLoadBackLightSettionForm.cs
@@ -43,7 +43,7 @@
        /// </summary>
        public void ShowForm(string i_deviceMac)
        {
            UserView.HomePage.Instance.ScrollEnabled = false;
            this.ScrollEnabled = false;
            this.deviceMac = i_deviceMac;
            this.listDevice = Common.LocalDevice.Current.GetDevicesByMac(i_deviceMac);
@@ -386,20 +386,6 @@
            this.CloseProgressBar();
            return true;
        }
        #endregion
        #region ■ 界面关闭___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            UserView.HomePage.Instance.ScrollEnabled = true;
            base.CloseFormBefore();
        }
        #endregion
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs
@@ -208,7 +208,7 @@
                    {
                        foreach (var curDoorLockUser in getDoorLockInfoAllList)
                        {
                            if (curDoorLockUser.DoorLockLocalUserId == null || curDoorLockUser.DoorLockLocalUserId == "")
                            if (string.IsNullOrEmpty(curDoorLockUser.DoorLockLocalUserId))
                            {
                                continue;
                            }
@@ -296,7 +296,7 @@
                            {
                                foreach (var curDoorLockUser in getDoorLockInfoList.PageData)
                                {
                                    if (curDoorLockUser.DoorLockLocalUserId == null || curDoorLockUser.DoorLockLocalUserId == "")
                                    if (string.IsNullOrEmpty(curDoorLockUser.DoorLockLocalUserId))
                                    {
                                        continue;
                                    }
@@ -398,7 +398,7 @@
                {
                    foreach (var curDoorLockUser in getDoorLockInfoAllList)
                    {
                        if (curDoorLockUser.DoorLockLocalUserId == null || curDoorLockUser.DoorLockLocalUserId == "")
                        if (string.IsNullOrEmpty(curDoorLockUser.DoorLockLocalUserId))
                        {
                            continue;
                        }
@@ -438,7 +438,7 @@
                        //获取云端存储的门锁成员信息
                        foreach (var curDoorLockUser in getDoorLockInfoList.PageData)
                        {
                            if (curDoorLockUser.CloudAccountId == "" || curDoorLockUser.CloudAccountId != subAccountDistributedMark)
                            if (string.IsNullOrEmpty(curDoorLockUser.CloudAccountId) || curDoorLockUser.CloudAccountId != subAccountDistributedMark)
                            {
                                continue;
                            }
@@ -596,7 +596,7 @@
                {
                    var curDoorLockUser = doorLock.localDoorLockAccountList[curUserId];
                    if (curDoorLockUser.ConnectedAccount == "" || curDoorLockUser.ConnectedAccount != curAccountObj.SubAccountDistributedMark)
                    if (string.IsNullOrEmpty(curDoorLockUser.ConnectedAccount) || curDoorLockUser.ConnectedAccount != curAccountObj.SubAccountDistributedMark)
                    {
                        continue;
                    }
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/DoorLockCommonLayout.cs
@@ -19,7 +19,7 @@
        public FrameLayout bottomRadiusFrameLayout = new FrameLayout()
        {
            Height = Application.GetRealHeight(906),
            Height = Application.GetRealHeight(806),
            Y = Application.GetRealHeight(930),
            BackgroundColor = ZigbeeColor.Current.XMWhite,
        };
@@ -56,6 +56,14 @@
            TextColor = Shared.Common.ZigbeeColor.Current.XMOrange,
            TextSize = 14,
        };
        public Button line = new Button()
        {
            Y = Application.GetRealHeight(138),
            Height = 1,
            BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine,
        };
        #endregion
        /// <summary> 
@@ -181,6 +189,7 @@
            this.bottomRadiusFrameLayout.AddChidren(btnCancel);
            this.bottomRadiusFrameLayout.AddChidren(btnBottomTitle);
            this.bottomRadiusFrameLayout.AddChidren(btnFinish);
            this.bottomRadiusFrameLayout.AddChidren(line);
        }
        /// <summary>
@@ -288,8 +297,8 @@
                            alert.ConfirmClickEvent += () =>
                            {
                                var form = new UserCenter.UserMain.SecondAuthenticationForm();
                                form.AddForm();
                            };
                                form.AddForm();
                            };
                        }
                        doorLock.ReSave();
                    }
@@ -334,7 +343,7 @@
            {
                var form = new UserCenter.UserMain.SecondAuthenticationForm();
                form.AddForm();
            };
            };
        }
        /// <summary>
@@ -346,7 +355,7 @@
        /// <param name="btnDoorLockPic">门锁图片开/关显示</param>
        public void RemoteUnlockRequest(ZigBee.Device.DoorLock doorLock, Action action, Button progressButton = null, Button btnDoorLockPic = null, Button btnStatus = null, Button btnDoorLockTitle = null)
        {
            if (doorLock.RemoteUnlockPassword == "")
            if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword))
            {
                string msgRemoteUnlockRequest = Language.StringByID(R.MyInternationalizationString.BindRemoteUnlockDoorlock);
                var alertRemoteUnlockRequest = new Shared.Phone.UserCenter.ShowMsgControl(ShowMsgType.Confirm, msgRemoteUnlockRequest, Language.StringByID(R.MyInternationalizationString.GoSetting));
@@ -405,7 +414,7 @@
                {
                    var form = new UserCenter.UserMain.SecondAuthenticationForm();
                    form.AddForm();
                };
                };
                return;
            }
@@ -600,7 +609,7 @@
                    });
                };
                HdlCheckLogic.Current.CheckSecondarySecurity(action);
            };
            };
        }
        // 获取到到名称更改回调通知
        public Action<string> devicNameSecAction;
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/EntryStatusPage.cs
@@ -66,7 +66,7 @@
                TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                Gravity = Gravity.CenterHorizontal,
                TextSize = 20,
                IsBold =true,
                IsBold = true,
            };
            this.midFrameLayout.AddChidren(btnPicTip);
@@ -194,26 +194,27 @@
                BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                Radius = (uint)Application.GetRealHeight(127 / 2),
                TextSize = 16,
                IsBold =true,
                IsBold = true,
            };
            bottomFrameLayout.AddChidren(completeBtn);
            if (currentType == "password")
            {
                btnPasswordRemark.Text = Language.StringByID(R.MyInternationalizationString.PasswordRemark);
                btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.Password) + "-" + doorLock.doorLockProgrammingEventNotificationCommand.UserID;
                btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.Password) + "ID" + doorLock.doorLockProgrammingEventNotificationCommand.UserID;
            }
            else if (currentType == "fingerprint")
            {
                btnPasswordRemark.Text = Language.StringByID(R.MyInternationalizationString.FingerprintRemark);
                btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.Fingerprint) + "-" + doorLock.doorLockProgrammingEventNotificationCommand.UserID;
                btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.Fingerprint) + "ID" + doorLock.doorLockProgrammingEventNotificationCommand.UserID;
            }
            else
            {
                btnPasswordRemark.Text = Language.StringByID(R.MyInternationalizationString.ProximityRemark);
                btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.ProximityCard) + "-" + doorLock.doorLockProgrammingEventNotificationCommand.UserID;
                btnPasswordRemarkContent.PlaceholderText = Language.StringByID(R.MyInternationalizationString.IcCard) + "ID" + doorLock.doorLockProgrammingEventNotificationCommand.UserID;
            }
            if (curAccountObj.UserName != "" && curAccountObj.UserName != null)
            if (!string.IsNullOrEmpty(curAccountObj.UserName))
            {
                btnMatchPersonContent.Text = curAccountObj.UserName;
            }
@@ -244,7 +245,7 @@
                 addLockInfo.OpenLockMode = doorLock.doorLockProgrammingEventNotificationCommand.ProgramEventSoure;
                 addLockInfo.DoorLockLocalUserId = doorLock.doorLockProgrammingEventNotificationCommand.UserID.ToString();
                 addLockInfo.EntryTime = System.DateTime.Now;
                 if (btnPasswordRemarkContent.Text != "")
                 if (!string.IsNullOrEmpty(btnPasswordRemarkContent.Text))
                 {
                     addLockInfo.UserIdRemarks = btnPasswordRemarkContent.Text;
                 }
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/FunctionSetting.cs
@@ -113,10 +113,10 @@
                Height = Application.GetRealHeight(1319),
                Y = Application.GetRealHeight(418),
                BackgroundColor = ZigbeeColor.Current.XMWhite,
            };
            };
            this.midFrameLayout.AddChidren(bottomFrameLayout);
            bottomFrameLayout.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
            var informationEdit = new Button()
            {
                Height = Application.GetRealHeight(60),
@@ -284,7 +284,7 @@
                    btnNext.SelectedImagePath = "DoorLock/SwitchOn.png";
                    btnLine.Visible = true;
                    btnLine.Y = Application.GetRealHeight(853);
                    if (doorLock.RemoteUnlockPassword == "")
                    if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword))
                    {
                        btnNext.IsSelected = false;
                    }
@@ -333,7 +333,7 @@
                                     btnNext.IsSelected = !btnNext.IsSelected;
                                     if (btnNext.IsSelected)
                                     {
                                         if (doorLock.RemoteUnlockPassword == "")
                                         if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword))
                                         {
                                             RemotePasswordDialog(doorLock, btnNext);
                                         }
@@ -358,7 +358,7 @@
                             btnNext.IsSelected = !btnNext.IsSelected;
                             if (btnNext.IsSelected)
                             {
                                 if (doorLock.RemoteUnlockPassword == "")
                                 if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword))
                                 {
                                     RemotePasswordDialog(doorLock, btnNext);
                                 }
@@ -407,7 +407,7 @@
                BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                TextColor = Shared.Common.ZigbeeColor.Current.XMWhite,
                TextSize = 16,
                IsBold =true,
                IsBold = true,
            };
            this.midFrameLayout.AddChidren(btnFinifh);
            btnFinifh.MouseUpEventHandler += (sender, e) =>
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/FunctionSettingSub.cs
@@ -72,24 +72,7 @@
        public void BottomFrameLayout()
        {
            #region  UI
            //var bottomFrameLayout = new FrameLayout()
            //{
            //    Height = Application.GetRealHeight(100),
            //    Y = Application.GetRealHeight(418),
            //    Radius = 17,
            //    BackgroundColor = ZigbeeColor.Current.XMWhite,
            //};
            //this.midFrameLayout.AddChidren(bottomFrameLayout);
            //var bottomFrameLayout1 = new FrameLayout()
            //{
            //    Height = Application.GetRealHeight(1319 - 50),
            //    Y = Application.GetRealHeight(418 + 48),
            //    BackgroundColor = ZigbeeColor.Current.XMWhite,
            //};
            //this.midFrameLayout.AddChidren(bottomFrameLayout1);
            #region  UI
            var bottomFrameLayout = new FrameLayout()
            {
                Height = Application.GetRealHeight(1319),
@@ -256,7 +239,7 @@
                    btnNext.SelectedImagePath = "DoorLock/SwitchOn.png";
                    btnLine.Visible = true;
                    btnLine.Y = Application.GetRealHeight(714);
                    if (doorLock.RemoteUnlockPassword == "")
                    if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword))
                    {
                        btnNext.IsSelected = false;
                    }
@@ -280,7 +263,7 @@
                                 btnNext.IsSelected = !btnNext.IsSelected;
                                 if (btnNext.IsSelected)
                                 {
                                     if (doorLock.RemoteUnlockPassword == "")
                                     if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword))
                                     {
                                         RemotePasswordDialog(doorLock, btnNext);
                                     }
@@ -323,7 +306,7 @@
                BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                TextColor = Shared.Common.ZigbeeColor.Current.XMWhite,
                TextSize = 16,
                IsBold =true,
                IsBold = true,
            };
            this.midFrameLayout.AddChidren(btnFinifh);
            btnFinifh.MouseUpEventHandler += (sender, e) =>
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/MemberFrozenPage.cs
@@ -299,7 +299,7 @@
                            foreach (var curDoorLockUser in curAccountDoorLockUserList)
                            {
                                // 账户中没有门锁用户
                                if (curDoorLockUser.DoorLockLocalUserId == null || curDoorLockUser.DoorLockLocalUserId == "")
                                if (string.IsNullOrEmpty(curDoorLockUser.DoorLockLocalUserId))
                                {
                                }
                                else
@@ -325,11 +325,11 @@
                            }
                            //冻结/解冻用户
                            int count1 = tempGroupId.Count;
                            if (tempGroupId.Count==1)
                            if (tempGroupId.Count == 1)
                            {
                                foreach (var a in tempGroupId)
                                {
                                    if(a.Count ==0)
                                    if (a.Count == 0)
                                    {
                                        count1 = 0;
                                        break;
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs
@@ -287,6 +287,7 @@
                    var mUIPickerView = new UIPickerView()
                    {
                        X = Application.GetRealWidth(0),
                        Height = Application.GetRealHeight(440),
                    };
                    this.bottomRadiusFrameLayout.AddChidren(mUIPickerView);
@@ -302,7 +303,7 @@
                            this.btnBottomTitle.TextID = R.MyInternationalizationString.CurrentDate;
                        }
                        mUIPickerView.Y = Application.GetRealWidth(110);
                        mUIPickerView.Y = Application.GetRealWidth(245);
                        var mList1 = new List<string>();
                        var mList2 = new List<string>();
                        var mList3 = new List<string>();
@@ -311,20 +312,20 @@
                        int year = dtNow.Year + 1;
                        int days = DateTime.DaysInMonth(dtNow.Year, dtNow.Month);
                        for (int y = dtNow.Year - 10; y < dtNow.Year + 1; y++)
                        for (int y = dtNow.Year - 9; y < dtNow.Year + 1; y++)
                        {
                            mList1.Add(y.ToString());
                        }
                        for (int m = 1; m < 13; m++)
                        {
                            if(Language .CurrentLanguage == "Chinese")
                            if (Language.CurrentLanguage == "Chinese")
                            {
                                mList2.Add(m.ToString()+"月");
                                mList2.Add(m.ToString() + "月");
                            }
                            else
                            {
                                mList2.Add(m.ToString());
                            }
                            }
                        }
                        for (int d = 1; d < days + 1; d++)
                        {
@@ -335,7 +336,7 @@
                            else
                            {
                                mList3.Add(d.ToString());
                            }
                            }
                        }
                        if (setTimeType != "DoorLockTime")
@@ -393,7 +394,7 @@
                        else
                        {
                            mUIPickerView.setNPicker(mList1, mList2, mList3);
                            mUIPickerView.setCurrentItems(dtNow.Year, dtNow.Month - 1, dtNow.Day - 1);
                            mUIPickerView.setCurrentItems(9, dtNow.Month - 1, dtNow.Day - 1);
                            curYear = dtNow.Year;
                            curMonth = dtNow.Month;
                            curDay = dtNow.Day;
@@ -439,7 +440,7 @@
                                else
                                {
                                    mUIPickerView.setNPicker(mList1, mList2, mList3);
                                    mUIPickerView.setCurrentItems(curYear, curMonth - 1, curDay - 1);
                                    mUIPickerView.setCurrentItems(9, curMonth - 1, curDay - 1);
                                }
                            }
                        };
@@ -472,7 +473,7 @@
                            this.btnBottomTitle.TextID = R.MyInternationalizationString.CurrentTime;
                        }
                        mUIPickerView.Y = Application.GetRealWidth(95);
                        mUIPickerView.Y = Application.GetRealWidth(245);
                        var mList1 = new List<string>();
                        var mList2 = new List<string>();
                        for (int h = 0; h < 24; h++)
@@ -576,6 +577,14 @@
                textDisplayDateFrameLayout.MouseDownEventHandler += hander;
                btnNextFrameLayout.MouseDownEventHandler += hander;
                btnNext.MouseDownEventHandler += hander;
                if (curIndex == 0)
                {
                    textDisplayDate.MouseDownEventHandler += hander;
                }
                else
                {
                    textDisplayTime.MouseDownEventHandler += hander;
                }
            }
            btnCancel.MouseUpEventHandler += (sender1, e1) =>
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UnLockMethod.cs
@@ -25,10 +25,6 @@
                        var doorLock = tempDevice as ZigBee.Device.DoorLock;
                        if (doorLock.doorLockProgrammingEventNotificationCommand != null)
                        {
                            Application.RunOnMainThread(() =>
                            {
                            });
                        }
                    }
                }
@@ -214,10 +210,12 @@
            };
            midTopFrameLayout.AddChidren(btnNext);
            btnNext.MouseUpEventHandler += (sender, e) =>
            EventHandler<MouseEventArgs> handerSideLip = (sender, e) =>
            {
                SideslipFramelayout();
            };
            btnNext.MouseUpEventHandler += handerSideLip;
            btnAllMethod.MouseUpEventHandler += handerSideLip;
            var btnLine = new Button
            {
                Y = midTopFrameLayout.Bottom,
@@ -302,7 +300,7 @@
            {
                var curDoorLockUser = doorLock.localDoorLockUserList[curUserId];
                if (curDoorLockUser.ConnectedAccount == "" || curDoorLockUser.ConnectedAccount != curAccountObj.SubAccountDistributedMark)
                if (string.IsNullOrEmpty(curDoorLockUser.ConnectedAccount) || curDoorLockUser.ConnectedAccount != curAccountObj.SubAccountDistributedMark)
                {
                    continue;
                }
@@ -364,8 +362,7 @@
                            break;
                    }
                    #region UI
                    #region UI
                    var rowFrameLayout = new RowLayoutControl(bodyView.rowSpace / 2);
                    rowFrameLayout.BackgroundColor = ZigbeeColor.Current.XMWhite;
                    bodyView.AddChidren(rowFrameLayout);
@@ -374,7 +371,7 @@
                    btnicon.UnSelectedImagePath = "DoorLock/DoorLockUserPic.png";
                    //上面门锁用户名称一行 
                    var memberText = "";
                    if (curAccountObj.UserName == "" || curAccountObj.UserName == null)
                    if (string.IsNullOrEmpty(curAccountObj.UserName))
                    {
                        memberText = curAccountObj.Account;
                    }
@@ -446,8 +443,8 @@
                                             }
                                             else
                                             {
                                                //开关图标
                                                new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.RemoveFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnDoorlockUser);
                                                 //开关图标
                                                 new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.RemoveFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnDoorlockUser);
                                             }
                                         }
                                         else
@@ -522,7 +519,7 @@
                             {
                                 CommonPage.Loading.Hide();
                             }
                         };
                         };
                    };
                    #endregion
@@ -536,7 +533,7 @@
                    switch (curDoorLockUser.UnlockType)
                    {
                        case 0:
                            if (curDoorLockUser.UserName != "" && curDoorLockUser.UserName != null)
                            if (!string.IsNullOrEmpty(curDoorLockUser.UserName))
                            {
                                btnDoorlockUser.Text = curDoorLockUser.UserName;
                            }
@@ -546,7 +543,7 @@
                            }
                            break;
                        case 3:
                            if (curDoorLockUser.UserName != "" && curDoorLockUser.UserName != null)
                            if (!string.IsNullOrEmpty(curDoorLockUser.UserName))
                            {
                                btnDoorlockUser.Text = curDoorLockUser.UserName;
                            }
@@ -556,7 +553,7 @@
                            }
                            break;
                        case 15:
                            if (curDoorLockUser.UserName != "" && curDoorLockUser.UserName != null)
                            if (!string.IsNullOrEmpty(curDoorLockUser.UserName))
                            {
                                btnDoorlockUser.Text = curDoorLockUser.UserName;
                            }
@@ -612,10 +609,10 @@
                             new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.CloudServerResponseOvertime), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnDoorlockUser);
                         }
                     };
                    btnDoorlockUser.EditorEnterAction += action;
                    btnDoorlockUser.EditorEnterAction += action;
                    #endregion
                    i++;
                }
                }
            }
        }
@@ -733,7 +730,7 @@
                        break;
                }
                if (doorLock.currentUserDisplayMethod == "" && i == 0)
                if (string.IsNullOrEmpty(doorLock.currentUserDisplayMethod) && i == 0)
                {
                    btnAllMethod.IsSelected = true;
                    btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UndistributeDoorlockUserPage.cs
@@ -102,7 +102,7 @@
                TextAlignment = TextAlignment.CenterRight,
                TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                TextSize = 12,
                IsBold =true,
                IsBold = true,
            };
            midTopFrameLayout.AddChidren(btnAllMethod);
            // 类型区分 
@@ -137,11 +137,12 @@
                SelectedImagePath = "DoorLock/UnLockSideslipIcon.png",
            };
            midTopFrameLayout.AddChidren(btnNext);
            btnNext.MouseUpEventHandler += (sender, e) =>
            EventHandler<MouseEventArgs> handerSideLip = (sender, e) =>
            {
                SideslipFramelayout();
            };
            btnNext.MouseUpEventHandler += handerSideLip;
            btnAllMethod.MouseUpEventHandler += handerSideLip;
            var btnLine = new Button
            {
                Y = midTopFrameLayout.Bottom,
@@ -173,7 +174,7 @@
            foreach (var curUserId in doorLock.localDoorLockUserList.Keys)
            {
                var curDoorLockUser = doorLock.localDoorLockUserList[curUserId];
                if (curDoorLockUser.ConnectedAccount != "")
                if (!string.IsNullOrEmpty(curDoorLockUser.ConnectedAccount))
                {
                    continue;
                }
@@ -244,7 +245,7 @@
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
                    Gravity = Gravity.CenterVertical,
                    TextSize =15,
                    TextSize = 15,
                };
                rowFrameLayout.AddChidren(btnText);
@@ -267,7 +268,7 @@
                switch (curDoorLockUser.UnlockType)
                {
                    case 0:
                        if (curDoorLockUser.UserName != "" && curDoorLockUser.UserName != null)
                        if (!string.IsNullOrEmpty(curDoorLockUser.UserName))
                        {
                            btnText.Text = curDoorLockUser.UserName;
                        }
@@ -277,7 +278,7 @@
                        }
                        break;
                    case 3:
                        if (curDoorLockUser.UserName != "" && curDoorLockUser.UserName != null)
                        if (!string.IsNullOrEmpty(curDoorLockUser.UserName))
                        {
                            btnText.Text = curDoorLockUser.UserName;
                        }
@@ -287,7 +288,7 @@
                        }
                        break;
                    case 15:
                        if (curDoorLockUser.UserName != "" && curDoorLockUser.UserName != null)
                        if (!string.IsNullOrEmpty(curDoorLockUser.UserName))
                        {
                            btnText.Text = curDoorLockUser.UserName;
                        }
@@ -326,7 +327,7 @@
            {
                Height = Application.GetRealHeight(100),
                Y = Application.GetRealHeight(1253),
                Radius =(uint) Application.GetRealHeight(100/2),
                Radius = (uint)Application.GetRealHeight(100 / 2),
                BackgroundColor = ZigbeeColor.Current.XMWhite,
            };
            flMain.AddChidren(bottomFrameLayout);
@@ -334,7 +335,7 @@
            var bottomFrameLayout1 = new FrameLayout()
            {
                Height = Application.GetRealHeight(668 - 60),
                Y = Application.GetRealHeight(1253+58),
                Y = Application.GetRealHeight(1253 + 58),
                BackgroundColor = ZigbeeColor.Current.XMWhite,
            };
            flMain.AddChidren(bottomFrameLayout1);
@@ -457,7 +458,7 @@
                    btnLine.Visible = false;
                }
                if (currentAccount.UserName != "" && currentAccount.UserName != null)
                if (!string.IsNullOrEmpty(currentAccount.UserName))
                {
                    btnUserName.Text = currentAccount.UserName;
                }
@@ -547,7 +548,7 @@
                           switch (curDoorLockUser.UnlockType)
                           {
                               case 0:
                                   if (curDoorLockUser.UserName != "" && curDoorLockUser.UserName != null)
                                   if (!string.IsNullOrEmpty(curDoorLockUser.UserName))
                                   {
                                       addLockInfo.UserIdRemarks = curDoorLockUser.UserName;
                                   }
@@ -557,7 +558,7 @@
                                   }
                                   break;
                               case 3:
                                   if (curDoorLockUser.UserName != "" && curDoorLockUser.UserName != null)
                                   if (!string.IsNullOrEmpty(curDoorLockUser.UserName))
                                   {
                                       addLockInfo.UserIdRemarks = curDoorLockUser.UserName;
                                   }
@@ -567,7 +568,7 @@
                                   }
                                   break;
                               case 15:
                                   if (curDoorLockUser.UserName != "" && curDoorLockUser.UserName != null)
                                   if (!string.IsNullOrEmpty(curDoorLockUser.UserName))
                                   {
                                       addLockInfo.UserIdRemarks = curDoorLockUser.UserName;
                                   }
@@ -753,7 +754,7 @@
                        break;
                }
                if (doorLock.currentUserDisplayMethod == "" && i == 0)
                if (string.IsNullOrEmpty(doorLock.currentUserDisplayMethod) && i == 0)
                {
                    btnAllMethod.IsSelected = true;
                    btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserManagement.cs
@@ -27,11 +27,17 @@
        public UserManagement(ZigBee.Device.DoorLock doorLock)
        {
            this.doorLock = doorLock;
            localAllAccountListTemp = doorLock.localAllAccountList;
            localDoorLockUserListTemp = doorLock.localDoorLockUserList;
        }
        #region ◆ 变量申明__________________________
        ZigBee.Device.DoorLock doorLock;
        VerticalRefreshLayout midVerticalScrolViewLayout;
        public List<Shared.Phone.UserCenter.MemberInfoRes> localAllAccountListTemp = new List<Shared.Phone.UserCenter.MemberInfoRes> { };
        public Dictionary<int, DoorLockCommonInfo.LocaDoorLockObj> localDoorLockUserListTemp = new Dictionary<int, DoorLockCommonInfo.LocaDoorLockObj>();
        #endregion
        /// <summary>
@@ -48,6 +54,7 @@
                    {
                        doorLock.localAllAccountList.Clear();
                        doorLock.localAllAccountList = localAccountListTemp;
                        localAllAccountListTemp = doorLock.localAllAccountList;
                        //初始化权限信息
                        foreach (var sub in localAccountListTemp)
@@ -67,7 +74,11 @@
                        }
                        //获取本地门锁列表
                        var list = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllAcountUserlist(doorLock);
                        if (localDoorLockUserListTemp.Count == 0)
                        {
                            var list = await Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockAllAcountUserlist(doorLock);
                            localDoorLockUserListTemp = doorLock.localDoorLockUserList;
                        }
                        doorLock.ReSave();
                    }
                    else
@@ -129,10 +140,10 @@
                TextID = R.MyInternationalizationString.Undistributed,
                TextColor = Shared.Common.ZigbeeColor.Current.XMTopTitleText,
                X = btnUndistributeIcon.Right,
                IsBold =true,
                TextSize =13,
                TextAlignment = TextAlignment.CenterLeft,
             };
                IsBold = true,
                TextSize = 13,
                TextAlignment = TextAlignment.CenterLeft,
            };
            btnAddFrameLayout.AddChidren(btnUndistributeText);
            if (UserCenterResourse.UserInfo.AuthorityNo != 1)
            {
@@ -154,8 +165,15 @@
            };
            this.midFrameLayout.AddChidren(midVerticalScrolViewLayout);
            CommonPage.Loading.Start("Loading...");
            ReadAccountDoorLockInfoList();
            if (localAllAccountListTemp.Count == 0)
            {
                CommonPage.Loading.Start("Loading...");
                ReadAccountDoorLockInfoList();
            }
            else
            {
                MidFrameLayoutContent();
            }
            midVerticalScrolViewLayout.BeginHeaderRefreshingAction += () =>
            {
ZigbeeApp/Shared/Phone/UserCenter/Gateway/Update/GatewayFirmwareUpdateForm.cs
@@ -261,6 +261,10 @@
        /// </summary>
        private void InitTopRightMenu()
        {
            if (UserCenterResourse.HideOption.DeviceHistory != 1)
            {
                return;
            }
            var btnIcon = new MostRightIconControl(69, 69);
            btnIcon.UnSelectedImagePath = "Item/More.png";
            topFrameLayout.AddChidren(btnIcon);
ZigbeeApp/Shared/Phone/UserCenter/HideOption/HideOptionMainForm.cs
@@ -104,6 +104,30 @@
            row1 = new FrameRowControl(listView.rowSpace / 2);
            listView.AddChidren(row1);
            row1.AddLeftCaption("清除缓存文件", 500);
            row1.AddRightArrow();
            row1.ButtonClickEvent += (sender, e) =>
            {
                this.ShowMassage(ShowMsgType.Confirm, "是否清除缓存文件", () =>
                {
                    var myPath = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory);
                    try
                    {
                        System.IO.Directory.Delete(myPath, true);
                        System.IO.Directory.CreateDirectory(myPath);
                        this.ShowMassage(ShowMsgType.Tip, "清除缓存文件完成,请重新登陆");
                        UserCenterLogic.ReLoginAgain(UserCenterResourse.UserInfo.Account);
                    }
                    catch (Exception ex)
                    {
                        this.ShowMassage(ShowMsgType.Error, "清除缓存文件异常");
                        HdlLogLogic.Current.WriteLog(ex, "清除缓存文件异常");
                    }
                });
            };
            row1 = new FrameRowControl(listView.rowSpace / 2);
            listView.AddChidren(row1);
            row1.AddLeftCaption("上传Log", 500);
            row1.AddRightArrow();
            row1.ButtonClickEvent += (sender, e) =>
ZigbeeApp/Shared/Phone/UserCenter/Password/EditorGesturePasswordForm.cs
@@ -30,7 +30,7 @@
        public void ShowForm()
        {
            //界面右划不可
            UserView.HomePage.Instance.ScrollEnabled = false;
            this.ScrollEnabled = false;
            //设置头部信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uGestureAuthentication));
@@ -260,21 +260,6 @@
                    });
                }
            });
        }
        #endregion
        #region ■ 界面关闭___________________________
        /// <summary>
        /// 界面关闭
        /// </summary>
        public override void CloseFormBefore()
        {
            //界面右划可
            UserView.HomePage.Instance.ScrollEnabled = true;
            base.CloseFormBefore();
        }
        #endregion
ZigbeeApp/Shared/Phone/UserCenter/Residence/LookRoomSettionForm.cs
@@ -266,31 +266,36 @@
                    }
                    //这里主要只是获取在线状态
                    var zbway = HdlGatewayLogic.Current.GetLocalGateway(listGwId[i]);
                    var result = Common.LocalDevice.Current.GetDeviceListFromGateway(zbway, false, (device) =>
                     {
                         string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(device);
                         if (listView.Parent == null || dicData.ContainsKey(mainkeys) == false || listCheck.Contains(mainkeys) == true)
                         {
                             return;
                         }
                         listCheck.Add(mainkeys);
                    int statu = 0;
                    var list = Common.LocalDevice.Current.GetDeviceListFromGateway(zbway, ref statu, false, ShowErrorMode.NO);
                    if (statu != -1)
                    {
                        HdlThreadLogic.Current.RunMain(() =>
                        {
                            for (int j = 0; j < list.Count; j++)
                            {
                                string mainkeys = Common.LocalDevice.Current.GetDeviceMainKeys(list[i]);
                                if (listView.Parent == null || dicData.ContainsKey(mainkeys) == false || listCheck.Contains(mainkeys) == true)
                                {
                                    return;
                                }
                                listCheck.Add(mainkeys);
                         var localDevice = Common.LocalDevice.Current.GetDevice(mainkeys);
                         if (localDevice != null && localDevice.IsOnline != device.IsOnline)
                         {
                             //在线状态一样的话,不需要刷新
                             localDevice.IsOnline = device.IsOnline;
                             localDevice.ReSave();
                         }
                         if (device.IsOnline == 1)
                         {
                             HdlThreadLogic.Current.RunMain(() =>
                             {
                                 dicData[mainkeys].OnlineCount += 1;
                                 dicData[mainkeys].btnOnline.Text = dicData[mainkeys].OnlineCount + "/" + dicData[mainkeys].listDeviceKeys.Count;
                             });
                         }
                     }, ShowErrorMode.NO);
                                var localDevice = Common.LocalDevice.Current.GetDevice(mainkeys);
                                if (localDevice != null && localDevice.IsOnline != list[i].IsOnline)
                                {
                                    //在线状态一样的话,不需要刷新
                                    localDevice.IsOnline = list[i].IsOnline;
                                    localDevice.ReSave();
                                }
                                if (list[i].IsOnline == 1)
                                {
                                    dicData[mainkeys].OnlineCount += 1;
                                    dicData[mainkeys].btnOnline.Text = dicData[mainkeys].OnlineCount + "/" + dicData[mainkeys].listDeviceKeys.Count;
                                }
                            }
                        });
                    }
                }
            });
        }
ZigbeeApp/Shared/Phone/UserCenter/Residence/ResidenceManagementForm.cs
@@ -353,6 +353,18 @@
                    {
                        //移除楼层
                        Common.Config.Instance.Home.FloorDics.Remove(keys);
                        if (Common.Config.Instance.Home.CurrentFloorId == keys)
                        {
                            //如果删除的是当前楼层的话
                            Common.Config.Instance.Home.CurrentFloorId = string.Empty;
                            foreach (string floorId in Common.Config.Instance.Home.FloorDics.Keys)
                            {
                                //把第一个楼层ID给它
                                Common.Config.Instance.Home.CurrentFloorId = floorId;
                                break;
                            }
                        }
                        if (Common.Room.CurrentRoom == null)
                        {
                            Common.Room.CurrentRoom = Common.Room.Lists[0];
ZigbeeApp/Shared/Phone/UserCenter/Safety/SafetyManagementMainForm.cs
@@ -549,7 +549,16 @@
                        //界面关闭
                        return;
                    }
                    Common.LocalDevice.Current.GetDeviceListFromGateway(zbway, false, this.ReceiveDeviceStatuPush, ShowErrorMode.NO);
                    int statu = 0;
                    var list = Common.LocalDevice.Current.GetDeviceListFromGateway(zbway, ref statu, false, ShowErrorMode.NO);
                    if (statu != -1)
                    {
                        for (int i = 0; i < list.Count; i++)
                        {
                            //设置设备在线状态
                            this.ReceiveDeviceStatuPush(list[i]);
                        }
                    }
                }
            });
        }
ZigbeeApp/Shared/Phone/UserCenter/Suggestion/FeedbackForm.cs
@@ -54,7 +54,7 @@
            //字数
            var btnFild = new NormalViewControl(120, 60, true);
            btnFild.X = frameInput.Width - ControlCommonResourse.XXLeft - Application.GetRealWidth(80);
            btnFild.X = frameInput.Width - ControlCommonResourse.XXLeft - Application.GetRealWidth(120);
            btnFild.Y = Application.GetRealHeight(503);
            btnFild.TextColor = UserCenterColor.Current.TextGrayColor1;
            btnFild.TextSize = 12;
@@ -285,14 +285,58 @@
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uSubmitSuccessMsg));
                        //关闭界面
                        this.CloseForm();
                        //显示成功的界面
                        this.ShowSuccessMsg();
                    });
                }
            });
        }
        /// <summary>
        /// 显示成功的界面
        /// </summary>
        private void ShowSuccessMsg()
        {
            var frameBack = new FrameLayout();
            frameBack.BackgroundColor = 0x80000000;
            this.AddChidren(frameBack);
            var frameMsg = new FrameLayout();
            frameMsg.BackgroundColor = UserCenterColor.Current.White;
            frameMsg.Width = Application.GetRealWidth(622);
            frameMsg.Height = Application.GetRealHeight(317);
            frameMsg.Radius = (uint)Application.GetRealHeight(17);
            frameMsg.Gravity = Gravity.CenterHorizontal;
            frameMsg.Y = Application.GetRealHeight(792);
            frameBack.AddChidren(frameMsg);
            //提示
            var btnTitle = new NormalViewControl(492, 65, true);
            btnTitle.Y = Application.GetRealHeight(68);
            btnTitle.Gravity = Gravity.CenterHorizontal;
            btnTitle.TextID = R.MyInternationalizationString.NormalTip;
            btnTitle.TextAlignment = TextAlignment.Center;
            btnTitle.TextColor = 0xFF333443;
            frameMsg.AddChidren(btnTitle);
            //您的反馈已成功提交
            var btnSuccess = new NormalViewControl(frameMsg.Width, Application.GetRealHeight(60), false);
            btnSuccess.Y = Application.GetRealHeight(166);
            btnSuccess.TextAlignment = TextAlignment.Center;
            btnSuccess.TextColor = UserCenterColor.Current.TextGrayColor1;
            btnSuccess.TextID = R.MyInternationalizationString.uSubmitSuccessMsg;
            frameMsg.AddChidren(btnSuccess);
            HdlThreadLogic.Current.RunThread(() =>
            {
                System.Threading.Thread.Sleep(2000);
                HdlThreadLogic.Current.RunMain(() =>
                {
                    this.CloseForm();
                });
            });
        }
        #endregion
    }
}
ZigbeeApp/Shared/Phone/UserCenter/UserMain/MessageManagementForm.cs
@@ -91,7 +91,28 @@
                //数据异常
                return;
            }
            if (this.Parent == null)
            {
                return;
            }
            HdlThreadLogic.Current.RunMain(() =>
            {
                //清空
                listView.RemoveAll();
            });
            if (dicData.Count == 0)
            {
                //关闭进度条
                this.CloseProgressBar();
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //关闭刷新特效
                    listView.EndHeaderRefreshing();
                    listView.frameTable.Height = listView.Height;
                });
                return;
            }
            //初始化中部控件
            this.InitMiddleFrame(dicData);
        }
@@ -114,7 +135,7 @@
                maxCount += data.Count;
            }
            int waiTime = 1000;
            int waiTime = 500;
            foreach (var keys in dicData.Keys)
            {
                var listGroup = dicData[keys];
@@ -168,7 +189,7 @@
                    });
                    //第一次的时候,等待的时候久一点
                    System.Threading.Thread.Sleep(waiTime);
                    waiTime = 500;
                    waiTime = 300;
                }
            }
        }
@@ -252,12 +273,13 @@
            var btnTime = rowControl.frameTable.AddMostRightView("", 200, 50);
            btnTime.TextColor = UserCenterColor.Current.TextGrayColor1;
            btnTime.Y = btnMsg.Bottom + Application.GetRealHeight(12);
            btnTime.Text = Convert.ToDateTime(recordInfo.CreatedOnUtc).ToString("HH:mm");
            var convertTime = UserCenterLogic.ConvertUtcTimeToLocalTime(recordInfo.CreatedOnUtc);
            btnTime.Text = convertTime.ToString("HH:mm");
            rowControl.frameTable.AddChidren(btnTime, ChidrenBindMode.BindEventOnly);
            //底线
            if (addLine == true)
            {
                rowControl.frameTable.AddBottomLine();
                rowControl.frameTable.AddBottomLine();
            }
            //已读
            if (recordInfo.IsReading == true)
ZigbeeApp/Shared/Phone/UserView/UserPage.cs
@@ -304,6 +304,62 @@
                                }
                            }
                            break;
                        case DeviceType.TemperatureSensor:
                            //温度
                            if (common.DeviceStatusReport.CluterID == 1026)
                            {
                                var tempera = (TemperatureSensor)myDevice;
                                foreach (var data in common.DeviceStatusReport.AttriBute)
                                {
                                    if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
                                    {
                                        if (data.AttriButeData == 0)
                                        {
                                            tempera.Temperatrue = 0;
                                        }
                                        else if (data.AttriButeData > 32767)
                                        {
                                            //负数(特殊处理)
                                            string strValue = (data.AttriButeData - 65536).ToString();
                                            //小数点需要一位
                                            strValue = strValue.Substring(0, strValue.Length - 1);
                                            tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
                                        }
                                        else
                                        {
                                            //小数点需要一位
                                            string strValue = data.AttriButeData.ToString();
                                            strValue = strValue.Substring(0, strValue.Length - 1);
                                            tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
                                        }
                                    }
                                }
                            }
                            //湿度
                            if (common.DeviceStatusReport.CluterID == 1029)
                            {
                                var tempera = (TemperatureSensor)myDevice;
                                foreach (var data in common.DeviceStatusReport.AttriBute)
                                {
                                    if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue)
                                    {
                                        if (data.AttriButeData == 0)
                                        {
                                            tempera.Humidity = 0;
                                        }
                                        else
                                        {
                                            //小数点需要一位(湿度没有负数)
                                            string strValue = data.AttriButeData.ToString();
                                            strValue = strValue.Substring(0, strValue.Length - 1);
                                            tempera.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
                                            tempera.LastDateTime = DateTime.Now;
                                        }
                                    }
                                }
                            }
                            break;
                    }
                }
                catch (Exception ex)
ZigbeeApp/Shared/Phone/ZigBee/Common/Config.cs
@@ -90,6 +90,11 @@
        /// 成员请求控制主帐号此住宅时请求基地址的LoginAccessToken的值
        /// </summary>
        public string AdminRequestToken = string.Empty;
        /// <summary>
        /// 远程连接的Mqtt的客户端ID
        /// </summary>
        [Newtonsoft.Json.JsonIgnore]
        public string ConnEmqClientId = string.Empty;
        [Newtonsoft.Json.JsonIgnore]
        /// <summary>
ZigbeeApp/Shared/Phone/ZigBee/Device/AC.cs
@@ -91,11 +91,15 @@
        /// </summary>
        public List<FanMode> fanModes = new List<FanMode> { };
        /// <summary>
        /// <para>自定义空调支持的模式(默认全关)</para>
        /// <para>自定义空调支持的模式(默认全开)</para>
        /// <para>数组索引 -> 0:制冷 1:制热 2:送风 3:除湿 4:自动</para>
        /// <para>值 -> 1:代表使用  0:代表不使用</para>
        /// </summary>
        public int[] listSupportMode = new int[5] { 0, 0, 0, 0, 0 };
        public int[] listSupportMode = new int[5] { 1, 1, 1, 1, 1 };
        /// <summary>
        /// 是否启用摆风功能 false:不使用摆风功能 true:使用摆风功能
        /// </summary>
        public bool UseSwingFunction = true;
        /// <summary>
        /// 过滤网清洗状态
@@ -189,6 +193,14 @@
        public void ReadCleanStatu()
        {
            ReadAttri(Device.Cluster_ID.Thermostat, AttriButeId.CleanStatu);
        }
        /// <summary>
        /// 获取是否启用空调摆风模式的状态(打开 或者 关闭)
        /// </summary>
        public void ReadUseSwingFunctionStatu()
        {
            ReadAttri(Device.Cluster_ID.FanControl, AttriButeId.UseAcSwingFunctionStatu);
        }
        /// <summary>
@@ -811,618 +823,5 @@
        {
            return await SetSystemModeAsync(acMode);
        }
        #region 升级空调第三方模块的接口
        #region 读取IRACC模块固件版本(APP -> Zigbee MCU)
        ///<summary >
        ///读取IRACC模块固件版本
        /// <para>reserve:0-ff</para>
        /// </summary>
        public async System.Threading.Tasks.Task<ReadACFirewareVersionResponAllData> ReadACFirewareVersionAsync(string reserve = "01")
        {
            ReadACFirewareVersionResponAllData result = null;
            if (Gateway == null)
            {
                result = new ReadACFirewareVersionResponAllData { errorMessageBase = "当前没有网关" };
                return result;
            }
            return await System.Threading.Tasks.Task.Run(async () =>
            {
                Action<string, string> action = (topic, message) =>
                {
                    var gatewayID = topic.Split('/')[0];
                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
                    if (topic == gatewayID + "/" + "Error_Respon")
                    {
                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
                        if (temp == null)
                        {
                            result = new ReadACFirewareVersionResponAllData { errorMessageBase = "网关错误回复,且数据是空" };
                        }
                        else
                        {
                            result = new ReadACFirewareVersionResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
                        }
                    }
                    if (topic == gatewayID + "/" + "ZbDataPassthrough")
                    {
                        var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") };
                        gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString());
                        if (gatewayTemp.clientDataPassthroughResponseData == null)
                        {
                            result = new ReadACFirewareVersionResponAllData { errorMessageBase = "网关返回的数据为空" };
                        }
                        else
                        {
                            if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
                            {
                                var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
                                var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
                                if (command == "0259")
                                {
                                    var tempD = new ReadACFirewareVersionResponData();
                                    tempD.Status = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16);
                                    if (data.Length == 82)
                                    {
                                        var firewareString = data.Substring(12);
                                        var aa = firewareString.Length;
                                        firewareVersion = firewareString;
                                        var bytes = new byte[firewareString.Length / 2];
                                        for (int i = 0; i < bytes.Length; i++)
                                        {
                                            bytes[i] = Convert.ToByte(firewareString.Substring(i * 2, 2), 16);
                                        }
                                        var firewareVersionTemp = System.Text.Encoding.ASCII.GetString(bytes);
                                        tempD.FirewareVersion = firewareVersionTemp.Replace('\0', ' ').Trim();
                                    }
                                    result = new ReadACFirewareVersionResponAllData { readACFirewareVersionResponData = tempD };
                                    System.Console.WriteLine($"UI收到通知后的主题_command:0258_{topic}");
                                }
                            }
                        }
                    }
                };
                Gateway.Actions += action;
                System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
                try
                {
                    var passData = ReadACFirewareVersionData(reserve);
                    var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
                    var data = new JObject { { "PassData", passData } };
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
                var dateTime = DateTime.Now;
                while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime)
                {
                    await System.Threading.Tasks.Task.Delay(10);
                    if (result != null)
                    {
                        break;
                    }
                }
                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
                {
                    result = new ReadACFirewareVersionResponAllData { errorMessageBase = " 回复超时,请重新操作" };
                }
                Gateway.Actions -= action;
                System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString());
                return result;
            });
        }
        /// <summary>
        /// 读取IRACC模块固件版本
        /// </summary>
        string ReadACFirewareVersionData(string reserve)
        {
            string data = "";
            string dataLength = "05";
            string dataComand1 = "58";
            string dataComand2 = "02";
            string dataSerialNum = "01";
            string addDataLength = "01";
            string reserveData = reserve;
            try
            {
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                    reserveData;
            }
            catch { };
            return data;
        }
        /// <summary>
        /// IRACC模块固件版本,网关反馈信息
        /// </summary>
        public ReadACFirewareVersionResponAllData readACFirewareVersionResponAllData;
        /// <summary>
        /// IRACC模块固件版本,网关反馈信息
        /// </summary>
        [System.Serializable]
        public class ReadACFirewareVersionResponAllData
        {
            /// <summary>
            /// 错误信息
            /// </summary>
            public string errorMessageBase;
            /// <summary>
            /// 网关信息错误反馈
            /// <para>当网关接收到客户端信息后,出现以下异常情况将反馈错误。</para>
            /// </summary>
            public ErrorResponData errorResponData;
            /// <summary>
            /// IRACC模块固件版本信息
            /// </summary>
            public ReadACFirewareVersionResponData readACFirewareVersionResponData;
        }
        /// <summary>
        /// IRACC模块固件版本的数据
        /// </summary>
        [System.Serializable]
        public class ReadACFirewareVersionResponData
        {
            /// <summary>
            /// 状态
            ///<para>0--成功</para>
            ///<para>1--失败</para>
            ///<para>ff--无效</para>
            /// </summary>
            public int Status;
            /// <summary>
            /// 固件版本
            /// </summary>
            public string FirewareVersion;
        }
        #endregion
        #region 升级IRACC模块通知(APP -> Zigbee MCU)
        ///<summary >
        ///升级IRACC模块通知
        /// <para>firewareVer:固件版本</para>
        /// <para>firewareSize:固件大小</para>
        /// </summary>
        public async System.Threading.Tasks.Task<ResponseAllData> UpggradeACNotificationAsync(string firewareVer, long firewareSize)
        {
            ResponseAllData result = null;
            if (Gateway == null)
            {
                result = new ResponseAllData { errorMessageBase = "当前没有网关" };
                return result;
            }
            return await System.Threading.Tasks.Task.Run(async () =>
            {
                Action<string, string> action = (topic, message) =>
                {
                    var gatewayID = topic.Split('/')[0];
                    var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
                    if (topic == gatewayID + "/" + "Error_Respon")
                    {
                        var gatewayTemp = new ZbGateway() { Time = jobject.Value<int>("Time"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID };
                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZbGateway.ErrorResponData>(jobject["Data"].ToString());
                        if (temp == null)
                        {
                            result = new ResponseAllData { errorMessageBase = "网关错误回复,且数据是空" };
                        }
                        else
                        {
                            result = new ResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) };
                        }
                    }
                    if (topic == gatewayID + "/" + "ZbDataPassthrough")
                    {
                        var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") };
                        gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString());
                        if (gatewayTemp.clientDataPassthroughResponseData == null)
                        {
                            result = new ResponseAllData { errorMessageBase = "网关返回的数据为空" };
                        }
                        else
                        {
                            if (gatewayTemp.clientDataPassthroughResponseData?.PassData != null)
                            {
                                var data = gatewayTemp.clientDataPassthroughResponseData.PassData;
                                var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString();
                                if (command == "025b")
                                {
                                    var tempD = new ResponseData();
                                    if (data.Length == 12)
                                    {
                                        tempD.status = Convert.ToInt32(data[10].ToString() + data[11].ToString(), 16);
                                    }
                                    result = new ResponseAllData { responseData = tempD };
                                    System.Console.WriteLine($"UI收到通知后的主题_{ topic}");
                                }
                            }
                        }
                    }
                };
                Gateway.Actions += action;
                System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
                try
                {
                    var passData = UpggradeACNotificationData(firewareVer, firewareSize);
                    var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
                    var data = new JObject { { "PassData", passData } };
                    jObject.Add("Data", data);
                    Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
                }
                catch { }
                var dateTime = DateTime.Now;
                while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime)
                {
                    await System.Threading.Tasks.Task.Delay(10);
                    if (result != null)
                    {
                        break;
                    }
                }
                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
                {
                    result = new ResponseAllData { errorMessageBase = " 回复超时,请重新操作" };
                }
                Gateway.Actions -= action;
                System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString());
                return result;
            });
        }
        private string firewareVersion = string.Empty;
        /// <summary>
        /// 升级IRACC模块通知返回
        /// </summary>
        string UpggradeACNotificationData(string firewareVer, long firewareSize)
        {
            string data = "";
            string dataLength = "2C";
            string dataComand1 = "5A";
            string dataComand2 = "02";
            string dataSerialNum = "01";
            string addDataLength = "28";
            string deviceUpgradeMethod = "01";
            string firewareVersionData = "";
            string firewareSizeData = "";
            try
            {
                //固件版本
                var firewareVerBytes = System.Text.Encoding.ASCII.GetBytes(firewareVer);
                for (int i = 0; i < firewareVerBytes.Length; i++)
                {
                    var fw = Convert.ToString(firewareVerBytes[i], 16);
                    if (fw.Length == 1)
                    {
                        fw = "0" + fw;
                    }
                    firewareVersionData += fw;
                }
                var aa = firewareVersionData.Length;
                firewareVersionData = firewareVersionData.PadRight(70, '0');
                //固件尺寸
                var tempFwSize = Convert.ToString(firewareSize, 16);
                tempFwSize = tempFwSize.PadLeft(8, '0');
                for (int i = 6; i >= 0; i = i - 2)
                {
                    firewareSizeData += tempFwSize.Substring(i, 2);
                }
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                     deviceUpgradeMethod + firewareVersionData + firewareSizeData;
            }
            catch { };
            return data;
        }
        /// <summary>
        ///升级IRACC模块通知回复
        /// </summary>
        public ResponseAllData keyColorDataResponseAllData;
        [System.Serializable]
        public class ResponseAllData
        {
            /// <summary>
            /// 错误信息
            /// </summary>
            public string errorMessageBase;
            /// <summary>
            /// 网关信息错误反馈
            /// <para>当网关接收到客户端信息后,出现以下异常情况将反馈错误。</para>
            /// </summary>
            public ErrorResponData errorResponData;
            /// <summary>
            /// 升级IRACC模块通知信息
            /// </summary>
            public ResponseData responseData;
        }
        /// <summary>
        /// 升级IRACC模块通知回复(Zigbee MCU -> APP)
        /// </summary>
        [System.Serializable]
        public class ResponseData
        {
            /// <summary>
            /// 状态值
            /// <para>0--版本号不一致(可以升级</para>
            /// <para>1--版本号一致(不用升级</para>
            /// <para>2--预留(暂时不用到</para>
            /// <para>ff--无效(暂时不用到)</para>
            /// </summary>
            public int status = -1;
        }
        #endregion
        #region 设备请求APP获取升级数据 (Zigbee MCU -> APP,主动上报)
        /// <summary>
        ///设备请求APP获取升级数据(Zigbee MCU -> APP,主动上报)
        /// </summary>
        [System.Serializable]
        public class DeviceRequestUpgradeResponseData
        {
            /// <summary>
            /// 数据偏移量,每个分包偏移量+(1-43)
            /// </summary>
            public string offset = string.Empty;
            /// <summary>
            /// 数据长度len
            /// </summary>
            public int dataLength = -1;
        }
        #endregion
        #region 发升级数据到设备(APP -> Zigbee MCU)
        ///<summary >
        ///读取IRACC模块固件版本
        /// <para>reserve:0-ff</para>
        /// </summary>
        public async void UpgradeAsync(SendUpgradeData upgradeData)
        {
            if (Gateway == null)
            {
                return;
            }
            Action<string, string> action = (topic, message) => { };
            Gateway.Actions += action;
            System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
            try
            {
                string passData = "";
                if (upgradeData != null)
                {
                    passData = SendUpgrade(upgradeData);
                }
                var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
                var data = new JObject { { "PassData", passData } };
                jObject.Add("Data", data);
                Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
            }
            catch { }
            Gateway.Actions -= action;
            System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString());
        }
        /// <summary>
        /// 发升级数据到设备
        /// </summary>
        string SendUpgrade(SendUpgradeData upgradeData)
        {
            string data = "";
            string dataLength = "";
            string dataComand1 = "5D";
            string dataComand2 = "02";
            string dataSerialNum = "01";
            string addDataLength = "";
            string status = "";
            string offset = "";
            string upgradeDataLength = "";
            string dataString = "";
            try
            {
                var len = 4 + 1 + 4 + 1 + upgradeData.dataLength;
                dataLength = Convert.ToString(len, 16);
                if (dataLength.Length == 1)
                {
                    dataLength = "0" + dataLength;
                }
                addDataLength = Convert.ToString(6 + upgradeData.dataLength, 16);
                if (addDataLength.Length == 1)
                {
                    addDataLength = "0" + addDataLength;
                }
                if (upgradeData.status == 0)
                {
                    status = "00";
                }
                else if (upgradeData.status == 1)
                {
                    status = "01";
                }
                else
                {
                    status = "ff";
                }
                offset = upgradeData.offset;
                var dl = Convert.ToString(upgradeData.dataLength, 16);
                if (dl.Length == 1)
                {
                    upgradeDataLength = "0" + dl;
                }
                else
                {
                    upgradeDataLength = dl;
                }
                for (int i = 0; i < upgradeData.databytes.Length; i++)
                {
                    var dataB = Convert.ToString(upgradeData.databytes[i], 16);
                    if (dataB.Length == 1)
                    {
                        dataB = "0" + dataB;
                    }
                    dataString += dataB;
                }
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                status + offset + upgradeDataLength + dataString;
            }
            catch { };
            return data;
        }
        /// <summary>
        /// 发送升级数据到设备(APP -> Zigbee MCU)
        /// </summary>
        [System.Serializable]
        public class SendUpgradeData
        {
            /// <summary>
            /// 0--成功
            ///<para>1--失败</para>
            ///<para>ff--无效</para>
            /// </summary>
            public int status = 0;
            /// <summary>
            /// 数据偏移量,每个分包偏移量+(1-43)
            /// </summary>
            public string offset;
            /// <summary>
            /// 数据长度len
            /// </summary>
            public int dataLength = -1;
            /// <summary>
            /// 分包数据
            /// </summary>
            public byte[] databytes;
        }
        #endregion
        #region 分包结束(Zigbee MCU -> APP,主动上报)
        /// <summary>
        /// 设备请求APP获取分包结束命令(Zigbee MCU -> APP)
        /// </summary>
        [System.Serializable]
        public class DeviceRequestFinishResponseData
        {
            /// <summary>
            /// 0-ff
            /// </summary>
            public int reserve = -1;
        }
        #endregion
        #region 分包结束(APP -> Zigbee MCU)
        ///<summary >
        ///读取IRACC模块固件版本
        /// <para>status:0--成功;1--失败;ff--无效 .</para>
        /// </summary>
        public async void SendFinishAsync(int status)
        {
            if (Gateway == null)
            {
                return;
            }
            Action<string, string> action = (topic, message) => { };
            Gateway.Actions += action;
            System.Console.WriteLine("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString());
            try
            {
                var passData = SendFinishDataString(status);
                var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } };
                var data = new JObject { { "PassData", passData } };
                jObject.Add("Data", data);
                Gateway.Send(("ClientDataPassthrough"), jObject.ToString());
            }
            catch { }
            Gateway.Actions -= action;
            System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString());
        }
        /// <summary>
        /// 发升级数据到设备
        /// </summary>
        string SendFinishDataString(int status)
        {
            string data = "";
            string dataLength = "05";
            string dataComand1 = "5F";
            string dataComand2 = "02";
            string dataSerialNum = "01";
            string addDataLength = "01";
            string statusString = "";
            try
            {
                if (status == 0)
                {
                    statusString = "00";
                }
                else if (status == 1)
                {
                    statusString = "01";
                }
                else
                {
                    statusString = "ff";
                }
                data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength +
                statusString;
            }
            catch { };
            return data;
        }
        /// <summary>
        /// 分包结束返回(APP -> Zigbee MCU
        /// </summary>
        //[System.Serializable]
        public class SendFinishData
        {
            /// <summary>
            /// 状态:成功/失败
            ///<para>0--成功<<para>
            ///<para>1--失败<<para>
            ///<para>ff--无效<<para>
            /// </summary>
            public int status = -1;
        }
        #endregion
        #endregion
    }
}
ZigbeeApp/Shared/Phone/ZigBee/Device/BindObj.cs
@@ -44,7 +44,6 @@
                    else if (topic == gatewayID + "/" + "Bind/SetBind_Respon")
                    {
                        var gatewayTemp = new ZbGateway() { DeviceID = jobject.Value<int>("Device_ID"), DeviceAddr = jobject.Value<string>("DeviceAddr"), DeviceEpoint = jobject.Value<int>("Epoint"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = ZbGateway.MainGateWay.getGatewayBaseInfo.gwID };
                        //var tempBindList = Newtonsoft.Json.Linq.JArray.Parse(jobject["Data"]["BindList"].ToString());
                        var tempResult = Newtonsoft.Json.JsonConvert.DeserializeObject<AddedDeviceBindResponseData>(jobject["Data"].ToString());
                        if (tempResult == null)
                        {
@@ -52,30 +51,10 @@
                        }
                        else
                        {
                            //var dataBindRes = new AddedDeviceBindResponseData();
                            //for (int m = 0; tempBindList != null && m < tempBindList.Count; m++)
                            //{
                            //    var tempBind = tempBindList[m];
                            //    dataBindRes.BindList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AddBindListResponseObj>(tempBind.ToString()));
                            //}
                            //if (dataBindRes != null)
                            //{
                            result = new AddedDeviceBindResponseAllData { addedDeviceBindResponseData = tempResult };
                            DebugPrintLog($"UI收到通知后的主题_{topic}");
                            //}
                        }
                    }
                    //else if (topic == gatewayID + "/" + "Bind/BindResult")
                    //{
                    //    var gatewayTemp = new ZbGateway() { DeviceID = jobject.Value<int>("Device_ID"), DeviceAddr = jobject.Value<string>("DeviceAddr"), DeviceEpoint = jobject.Value<int>("Epoint"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = ZbGateway.MainGateWay.getGatewayBaseInfo.gwID };
                    //    var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<AddBindResultResponseData>(jobject["Data"].ToString());
                    //    if (tempData != null)
                    //    {
                    //        result = new AddedDeviceBindResponseAllData { addBindResultResponseData = tempData };
                    //    }
                    //    DebugPrintLog($"UI收到通知后的主题_{topic}");
                    //}
                };
                mainGateway.Actions += action;
                DebugPrintLog("Bind/SetBind_Actions 启动" + "_" + System.DateTime.Now.ToLongTimeString() + " " + System.DateTime.Now.Millisecond);
@@ -128,43 +107,6 @@
                        break;
                    }
                }
                if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime)
                {
                    result = new AddedDeviceBindResponseAllData { errorMessageBase = " 回复超时,请重新操作" };
                }
                //while ((DateTime.Now - dateTime).TotalMilliseconds < 20*1000)
                //{
                //await System.Threading.Tasks.Task.Delay(100);
                //if (result == null || result.addedDeviceBindResponseData == null)
                //{
                //    continue;
                //}
                //if (0 < result.addedDeviceBindResponseData.BindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 1).Count)
                //{
                //    if (result.addBindResultResponseData != null)
                //    {
                //        break;
                //    }
                //}
                //else if (0 < result.addedDeviceBindResponseData.BindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 2).Count)
                //{
                //    if (result.addBindResultResponseData != null)
                //    {
                //        break;
                //    }
                //}
                //else if (0 < result.addedDeviceBindResponseData.BindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 3).Count)
                //{
                //    if (result.addBindResultResponseData != null)
                //    {
                //        break;
                //    }
                //}
                //else
                //{
                //    break;
                //}
                //}
                if ((DateTime.Now - dateTime).TotalMilliseconds > 20 * 1000)
                {
                    result = new AddedDeviceBindResponseAllData { errorMessageBase = " 回复超时,请重新操作" };
ZigbeeApp/Shared/Phone/ZigBee/Device/Enum.cs
@@ -267,7 +267,11 @@
        /// <summary>
        /// 过虑网清洗标志:42
        /// </summary>
        CleanStatu = 4097,
        CleanStatu = 4097,
        /// <summary>
        /// 启用空调摆风模式的状态(打开 或者 关闭)
        /// </summary>
        UseAcSwingFunctionStatu = 4097,
        #endregion
ZigbeeApp/Shared/Phone/ZigBee/Device/ZbGateway.cs
@@ -3392,6 +3392,8 @@
                                    //订阅一个分享数据已经变更的主题
                                    await RemoteMqttClient.SubscribeAsync("/ZigbeeGateWayToClient/" + myGuid + "/Push/DeletedShareData");
                                }
                                //订阅一个挤下线的主题
                                await RemoteMqttClient.SubscribeAsync("/ZigbeeGateWayToClient/" + Config.Instance.ConnEmqClientId + "/Push/NotifySqueeze");
                                await initGateWayBaseInfomation();
                                Shared.Phone.UserCenter.HdlGatewayLogic.Current.CheckGatewayByConnectChanged(Shared.Phone.UserCenter.GatewayConnectMode.Remote);
@@ -3483,6 +3485,8 @@
                                var connEmqClientId = responseData["ConnEmqClientId"]?.ToString();
                                var connEmqUserName = responseData["ConnEmqUserName"]?.ToString();
                                var connEmqPwd = responseData["ConnEmqPwd"]?.ToString();
                                //记录起当前的客户端ID
                                Config.Instance.ConnEmqClientId = connEmqClientId;
                                var connEmqDomainPorts = connEmqDomainPort.Replace("//", "").Split(':');
                                var domain = connEmqDomainPorts[1];
@@ -3885,7 +3889,10 @@
                    epoint = topic.Split('/')[3];
                    cluID = topic.Split('/')[4];
                    attrId = topic.Split('/')[5];
                }
                }
                //全局接收网关推送的的逻辑(为了执行速度,尽可能的别加耗时的操作)
                Shared.Phone.UserCenter.HdlGatewayReceiveLogic.Current.GatewayOverallMsgReceive(gatewayID, topic, reportStatus, message);
                var gwa = GateWayList.Find(obj => obj.getGatewayBaseInfo.gwID == gatewayID);
                if (gwa == null)
@@ -3917,9 +3924,6 @@
                {
                    jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
                }
                //全局接收网关推送的的逻辑(为了执行速度,尽可能的别加耗时的操作)
                Shared.Phone.UserCenter.HdlGatewayReceiveLogic.Current.GatewayOverallMsgReceive(gatewayID, topic, reportStatus, jobject);
                #region 远程,主网关上报通知
                if (IsRemote)
ZigbeeApp/Shared/R.cs
@@ -379,7 +379,7 @@
        public readonly static int Sunrisesunset = 5134;
        public readonly static int cycle = 5135;
        public readonly static int completeNext = 5136;
        public readonly static int Selectedtimetype = 5137;
        public readonly static int Selectedtimetype= 5137;
        public readonly static int Timecondition = 5138;
        public readonly static int condition = 5139;
        public readonly static int pushset = 5140;
@@ -591,6 +591,7 @@
        public readonly static int application = 5376;
        public readonly static int automationaddtext = 5377;
        public readonly static int tiptextnull = 5378;
        public readonly static int tiplocktextnull = 5379;
        #region 登录注册
        /// <summary>
@@ -4727,7 +4728,7 @@
        /// </summary>
        public const int uSubmit = 15922;
        /// <summary>
        /// 提交成功,感谢您的意见
        /// 您的反馈已成功提交
        /// </summary>
        public const int uSubmitSuccessMsg = 15923;
        /// <summary>
@@ -5278,6 +5279,18 @@
        /// 办公室
        /// </summary>
        public const int uWorkRoom = 16060;
        /// <summary>
        /// 电机数据异常,请重置电机
        /// </summary>
        public const int uCurtainDataIsErrorPleaseResetCurtain = 16061;
        /// <summary>
        /// 获取空调摆风状态失败
        /// </summary>
        public const int uGetAirConditionerSwingFunctionFail = 16062;
        /// <summary>
        /// 设置空调摆风失败
        /// </summary>
        public const int uSetAirConditionerSwingFunctionFail = 16063;
        //★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
ZigbeeApp/Shared/Shared.projitems
@@ -9,13 +9,75 @@
    <Import_RootNamespace>Shared</Import_RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="$(MSBuildThisFileDirectory)Common\Device.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\House.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\Logic.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\ResponseEntity\ApkInfoOBJ.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\ResponseEntity\AuthUserRes.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\ResponseEntity\FirmwareManaRes.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\ResponseEntity\GetAppVersionCode.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\ResponseEntity\ResultPack.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Common\ResponseEntity\UserLoginLocalRegionRes.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Pad\MainPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Account\AccountLogic.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\Send.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\EveryyearPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\SelectedLogicState.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\TemplatePage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\SelectedLogicStatus.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Account\AccountRegister.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Account\AccountRegisterSuccess.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Account\AccountResetPWDSuccess.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Account\PhoneEmailForm.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Account\PhoneZone.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\AC\ACControl.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\AC\ACControlBase.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Category\CategorySceneSelectImgByLocal.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Category\SelectDelayTime.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Category\SelectDevice.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Category\SelectFloor.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Category\SelectHouse.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Category\SelectScene.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\ACLeftIconButtonRowLayout.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\BackButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\ButtonLineForm.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\CategoryFunctionForWinRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\CategoryFunctionRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\CommonEnum.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\CommonFormResouce.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\CompleteButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\CustomAlert.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\DeviceDetailInfo.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\DeviceIconSelectedIMGByLocal.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\DeviceInfoEditRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\DeviceInfoRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\DeviceInfoWithZoneRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\FunctionButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\FunctionIconButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\FunctionMainView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\FunctionRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\LeftIconButtonRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\RoomButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\RoomMainView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\RoomNoNameMainView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\RoomView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\RowLayoutDeleteButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\RowLayoutEditButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SceneCategoryView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SceneMainView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SceneTargetFunctionRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SceneTargetTimeRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SelectDeviceWithPickViewRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SelectDeviceWithSeekBarRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SelectedStatuButton.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SelectFunctionView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SelectSceneRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SelectSceneStatuRow.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SelectTime.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\SelectZone.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\CommonForm\TopFrameLayout.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\DeviceLogic\ReadDeviceAttributeLogic.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Light\AirSwitchControl.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Light\DimmableLightControl.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Light\LightControl.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Light\OnOffControl.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Light\PlugControl.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\AddLogicPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\AddScenePage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\LogicDevicePage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\Logic\SelectedLogic.cs" />