From 4e78c9c795dff269ebea37f4e7572d8c8b7d4a69 Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期三, 20 五月 2020 15:14:17 +0800 Subject: [PATCH] 请合并门锁最新代码【1、优化门锁常开模式推送和增加机械门锁开锁功能;2、优化面板调光目标】 --- ZigbeeApp20200519/Shared/Phone/Device/Logic/SkipView.cs | 24 ++-- ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs | 4 ZigbeeApp20200519/Shared/Phone/ZigBee/Device/ZbGateway.cs | 6 ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs | 134 ++++++++++++++------------ ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Resourse/ControlCommonResourse.cs | 6 + ZigbeeApp20200519/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs | 10 ++ ZigbeeApp20200519/Shared/Phone/Device/Logic/SoneLogicList.cs | 18 +++ ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs | 77 ++++++++++++-- 8 files changed, 185 insertions(+), 94 deletions(-) diff --git a/ZigbeeApp20200519/Shared/Phone/Device/Logic/SkipView.cs b/ZigbeeApp20200519/Shared/Phone/Device/Logic/SkipView.cs old mode 100755 new mode 100644 index 852b7dc..57e405f --- a/ZigbeeApp20200519/Shared/Phone/Device/Logic/SkipView.cs +++ b/ZigbeeApp20200519/Shared/Phone/Device/Logic/SkipView.cs @@ -8,7 +8,7 @@ namespace Shared.Phone.Device.Logic { - public class SkipView:FrameLayout + public class SkipView : FrameLayout { /// <summary> /// 鍏跺畠鐣岄潰璺宠繘鏉ョ殑鍏ュ彛 @@ -60,12 +60,12 @@ doorLockLogicList.Show(); } break; - + } } - + #region 鈼� 鑷姩鍖朹_________________________ /// <summary> /// 鑷姩鍖栧姛鑳戒唬鐮佸叆鍙� @@ -315,14 +315,14 @@ Automationview(logicScrolView, no); CommonPage.Loading.Hide(); } - static RowLayout selectedRow = new RowLayout() { Tag = "0" };//璁板綍宸︽粦鐘舵�� + //static RowLayout selectedRow = new RowLayout() { Tag = "0" };//璁板綍宸︽粦鐘舵�� /// <summary> /// 鍔犺浇鑷姩鍖栧垪琛ㄧ晫闈� /// </summary> /// <param name="refresview">Refresview.</param> private static async void Automationview(VerticalRefreshLayout refresview, bool no) { - + refresview.RemoveAll(); if (Common.Logic.LogicList.Count == 0 && no == false) { @@ -400,18 +400,18 @@ //宸︽粦鑿滃崟浜嬩欢 logicRowlayout.OpenMenuAction += () => { - if (selectedRow.Tag.ToString() != logicRowlayout.Tag.ToString()) - { //淇濈暀宸︽粦鍙湁涓�涓�; - selectedRow.HideMenu();// - } - selectedRow = logicRowlayout; + //if (selectedRow.Tag.ToString() != logicRowlayout.Tag.ToString()) + //{ //淇濈暀宸︽粦鍙湁涓�涓�; + // selectedRow.HideMenu();// + //} + //selectedRow = logicRowlayout; }; if (i == 1) { //瀹炵幇android鏄剧ず閫昏緫鍒楄〃鐨勫渾瑙�; fLayout.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft); logicRowlayout.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft); - + } i++; var logicnameBtn = new Button @@ -717,7 +717,7 @@ timeConditionsInfo.Add("DelayTime", "0"); timeConditionsInfo.Add("StartHour", h); timeConditionsInfo.Add("StartMin", m); - timeConditionsInfo.Add("DoorLockOpenDelayTime", (timeVlaue*60*60).ToString()); + timeConditionsInfo.Add("DoorLockOpenDelayTime", (timeVlaue * 60).ToString()); //timeConditionsInfo.Add("DoorLockOpenDelayTime", (timeVlaue * 3600).ToString()); Dictionary<string, object> actionsInfo = new Dictionary<string, object>(); actionsInfo.Add("LinkType", 8); diff --git a/ZigbeeApp20200519/Shared/Phone/Device/Logic/SoneLogicList.cs b/ZigbeeApp20200519/Shared/Phone/Device/Logic/SoneLogicList.cs old mode 100755 new mode 100644 index a81b5a1..b8858f3 --- a/ZigbeeApp20200519/Shared/Phone/Device/Logic/SoneLogicList.cs +++ b/ZigbeeApp20200519/Shared/Phone/Device/Logic/SoneLogicList.cs @@ -226,6 +226,22 @@ catch { } }; + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction += (DoorlockKey, _bool) => + { + var key = Send.CurrentDoorLock.DeviceAddr + Send.CurrentDoorLock.DeviceEpoint; + if (DoorlockKey == key) + { + try + { + Application.RunOnMainThread(() => + { + Send.CurrentDoorLock.IsDoorLockNormallyMode = _bool; + ModeView(); + }); + } + catch { } + } + }; } /// <summary> /// 甯稿紑妯″紡寮�鍏冲垏鎹㈠浘鏍囩晫闈� @@ -471,7 +487,7 @@ listLogicFl.Width = Application.GetRealWidth(1022); listLogicFl.BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor; - verticalRefresh.Y = Application.GetRealHeight(187); + verticalRefresh.Y = Application.GetRealHeight(187); verticalRefresh.X = Application.GetRealWidth(46); verticalRefresh.Height = listLogicFl.Height - Application.GetRealHeight(187);//鍔ㄦ�佹敼鍔ㄤ笂涓嬫粦鍔╲iew楂樺害; verticalRefresh.Width = listLogicFl.Width - Application.GetRealWidth(46); diff --git a/ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs b/ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs old mode 100755 new mode 100644 index f64c0b6..de85ddf --- a/ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs +++ b/ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs @@ -599,50 +599,48 @@ /// </summary> /// <param name="receiveData"></param> private void DoorLockDeviceReportPush(JObject receiveData) - { - //鍙湁寰愭鐨勯棬閿佺晫闈㈡病鏈夋墦寮�鐨勬儏鍐典笅,鎵嶄細澶勭悊杩欎釜涓滆タ - if (ControlCommonResourse.IsDoorLockPageOpen == false && UserCenterResourse.UserInfo.AuthorityNo == 1) - { - var device = Common.LocalDevice.Current.GetDevice(receiveData.Value<string>("DeviceAddr"), receiveData.Value<int>("Epoint")); - if (device.Type != DeviceType.DoorLock) - { - //瀹冧笉鏄棬閿� - return; - } - var info = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockAlarmsResult>(receiveData["Data"].ToString()); - if (info.Clusterid == 257) - { - //甯稿紑妯″紡鍏抽棴 - if (info.AlarmCode == 217 || info.AlarmCode == 219) - { - HdlThreadLogic.Current.RunThread(async () => - { - //娓╁眳鍩庣殑瑕佺綉鍏充腑鏄惁鏈夐�昏緫瀛樺湪 - //鍙傛暟:2-甯稿紑鑷姩鍖�;3-澶辨晥鏃堕棿鑷姩鍖� - var result = await Shared.Phone.Device.Logic.SkipView.Exist(3, (ZigBee.Device.DoorLock)device); - HdlThreadLogic.Current.RunMain(() => - { - //寮瑰嚭寰愭鐨勯偅涓獥鍙� - DoorLock.DoorLockCommonInfo.NomallyOpenModeInvalidDialog((ZigBee.Device.DoorLock)device, DoorLock.DoorLockCommonInfo.DoorLockMessType.ServicePush, - result != 0 ? true : false, null); - }); - }); - } - } - } - //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); - } - + { + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + var device = Common.LocalDevice.Current.GetDevice(receiveData.Value<string>("DeviceAddr"), receiveData.Value<int>("Epoint")); + if (device.Type != DeviceType.DoorLock) + { + //瀹冧笉鏄棬閿� + return; + } + + var info = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockAlarmsResult>(receiveData["Data"].ToString()); + if (info.Clusterid == 257) + { + //216锛氶攣涓婅缃殑甯稿紑 + if (info.AlarmCode == 216) + { + HdlThreadLogic.Current.RunThread(async () => + { + HdlThreadLogic.Current.RunMain(() => + { + //鏇存柊闂ㄩ攣娑夊強鐨勫父寮�/甯稿叧鐨勭晫闈� + if (UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction != null) + { + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction(device.DeviceAddr + device.DeviceEpoint, true); + } + }); + }); + } + } + //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� + this.ShowHadNewMessageAppeal(); + } + } #endregion - + #region 鈻� 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣坃______________ - + /// <summary> /// 璁惧鍦ㄧ嚎鐘舵�佹洿鏂板弽棣� /// </summary> /// <param name="receiveData"></param> - private void DeviceOnlineChangePush (JObject receiveData) + private void DeviceOnlineChangePush(JObject receiveData) { if (this.dicDeviceEvent.Count == 0) { @@ -825,35 +823,43 @@ private void LogicExecutePush(JObject receiveData) { //鏄剧ず鏈夋柊娑堟伅鐨勭壒鏁� - this.ShowHadNewMessageAppeal(); + this.ShowHadNewMessageAppeal(); + + // 閫昏緫鎵ц甯稿紑妯″紡澶辨晥鐨勬儏鍐� + if (UserCenterResourse.UserInfo.AuthorityNo == 1) + { + //鑷姩鍖栨墽琛� 甯稿紑鍏抽棴 + var data = Newtonsoft.Json.JsonConvert.DeserializeObject<LogicPushResult>(receiveData["Data"].ToString()); + if (data != null && data.ActionData != null) + { + var deviceAddr = data.ActionData.MacStr; + var epoint = 1; //data.ActionData.Epoint; 闂ㄩ攣鍙戦�佹椂鏄�200锛屼絾鏄笂浼犳椂瑕佹妸鐪熷疄鐨勭鐐圭粰缃戝叧涓婃姤 + var device = Common.LocalDevice.Current.GetDevice(deviceAddr, epoint); + if (device.Type != DeviceType.DoorLock) + { + return; + } - //杩欎釜涓滆タ鏆傛椂涓嶅鐞� - ////鍙湁寰愭鐨勯棬閿佺晫闈㈡病鏈夋墦寮�鐨勬儏鍐典笅,鎵嶄細澶勭悊杩欎釜涓滆タ - //if (ControlCommonResourse.IsDoorLockPageOpen == false && UserCenterResourse.UserInfo.AuthorityNo == 1) - //{ - // var device = Common.LocalDevice.Current.GetDevice(receiveData.Value<string>("DeviceAddr"), receiveData.Value<int>("Epoint")); - // if (device.Type != DeviceType.DoorLock) - // { - // return; - // } - // //鑷姩鍖栨墽琛� 甯稿紑鍏抽棴 - // var data = Newtonsoft.Json.JsonConvert.DeserializeObject<LogicPushResult>(receiveData["Data"].ToString()); - // if (data.ActionData != null && data.ActionData.Actiontype == 8 - // && data.ActionData.PassDataString == "055704010113") - // { - // HdlThreadLogic.Current.RunMain(() => - // { - // //寮瑰嚭寰愭鐨勯偅涓獥鍙� - // DoorLock.DoorLockCommonInfo.NomallyOpenModeInvalidDialog((ZigBee.Device.DoorLock)device, DoorLock.DoorLockCommonInfo.DoorLockMessType.ServicePush, null); - // }); - // } - //} - } - + if (data.ActionData.Actiontype == 8 && data.ActionData.PassDataString == "055704010113") + { + HdlThreadLogic.Current.RunThread(async () => + { + var result = await Shared.Phone.Device.Logic.SkipView.Exist(3, (ZigBee.Device.DoorLock)device); + HdlThreadLogic.Current.RunMain(() => + { + //寮瑰嚭寰愭鐨勯偅涓獥鍙� + DoorLock.DoorLockCommonInfo.NomallyOpenModeInvalidDialog((ZigBee.Device.DoorLock)device, DoorLock.DoorLockCommonInfo.DoorLockMessType.ServicePush, + result != 0 ? true : false, ControlCommonResourse.UpdateDoorLockStatusAction); + }); + }); + } + } + } + } #endregion - + #region 鈻� 鍦烘櫙瑙﹀彂涓婃姤_______________________ - + /// <summary> /// 鍦烘櫙瑙﹀彂涓婃姤 /// </summary> diff --git a/ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Resourse/ControlCommonResourse.cs b/ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Resourse/ControlCommonResourse.cs old mode 100755 new mode 100644 index b5f2c64..01be138 --- a/ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Resourse/ControlCommonResourse.cs +++ b/ZigbeeApp20200519/Shared/Phone/UserCenter/CommonBase/Resourse/ControlCommonResourse.cs @@ -67,7 +67,11 @@ /// <summary> /// 寰愭鐨勯棬閿佺晫闈㈡槸鍚︽槸鎵撳紑鐨勭姸鎬� /// </summary> - public static bool IsDoorLockPageOpen = false; + //public static bool IsDoorLockPageOpen = false; + /// <summary> + /// 闂ㄩ攣鐣岄潰鏄惁鏄洿鏂扮姸鎬� + /// </summary> + public static Action<bool> UpdateDoorLockStatusAction = null; /// <summary> /// 鏄惁鏄晫闈㈡鍦ㄥ姞杞戒腑(搴曞眰涓撶敤,涓嶉渶瑕佺悊) /// </summary> diff --git a/ZigbeeApp20200519/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs b/ZigbeeApp20200519/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs old mode 100755 new mode 100644 index e4d680a..3882bb5 --- a/ZigbeeApp20200519/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs +++ b/ZigbeeApp20200519/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs @@ -1170,6 +1170,16 @@ removeDevice.BindMacAddr = bindDevice.BindMacAddr; removeDevice.BindEpoint = bindDevice.BindEpoint; delDevice.RemoveBindList.Add(removeDevice); + //鏄寒搴﹀啀娆″彂鍒犻櫎6鐨勫懡浠� + if (currentClusterID == 8) + { + var removeDevice2 = new RemoveBindListObj(); + removeDevice2.BindCluster = 6; + removeDevice2.BindType = 0; + removeDevice2.BindMacAddr = bindDevice.BindMacAddr; + removeDevice2.BindEpoint = bindDevice.BindEpoint; + delDevice.RemoveBindList.Add(removeDevice2); + } } else if (bindDevice.BindType == 2) { diff --git a/ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs b/ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs index 9989e00..20aa481 100644 --- a/ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs +++ b/ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/DoorLockCommonInfo.cs @@ -15,6 +15,10 @@ /// </summary> public static Action<bool> LogicAction = null; /// <summary> + /// 鏇存柊褰撳墠闂ㄩ攣娑夊強鐨勭姸鎬併�愪富瑕佺敤浜庨棬閿佹搷浣滃父寮�妯″紡鐨勫洖璋冦�� + /// </summary> + public static Action<string, bool> UpdateCurrentDoorlockAction = null; + /// <summary> /// 缃戝叧锛堥棬閿侊級鎵�鍦ㄧ殑鏃堕棿 /// </summary> public static DateTime DoorlockZoneTime = DateTime.Now; diff --git a/ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs b/ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs index ea254b3..2551447 100644 --- a/ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs +++ b/ZigbeeApp20200519/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs @@ -17,12 +17,29 @@ public UserDoorLockPage(Room room, CommonDevice doorLock) { //寰愭鐨勯棬閿佺晫闈㈡墦寮�(缃戝叧鍏ㄥ眬鎺ユ敹鏃朵娇鐢�) - ControlCommonResourse.IsDoorLockPageOpen = true; + //ControlCommonResourse.IsDoorLockPageOpen = true; this.doorLock = doorLock as ZigBee.Device.DoorLock; currentRoom = room; deviceUI = doorLock; BackgroundColor = ZigbeeColor.Current.GXCTopViewBackgroundColor; ZbGateway.StatusList.Add(this); + Application.RunOnMainThread(() => + { + ControlCommonResourse.UpdateDoorLockStatusAction = (obj) => + { + UpdateNomallyOpenStatus(); + }; + + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction += (DoorlockKey, status) => + { + var key = doorLock.DeviceAddr + doorLock.DeviceEpoint; + if (DoorlockKey == key) + { + DoorLockCommonInfo.NormallyOpenModeValue(this.doorLock, status); + UpdateNomallyOpenStatus(); + } + }; + }); } #region 鍙橀噺鐢虫槑 @@ -621,6 +638,35 @@ } } + //缃戝叧鎵ц閫昏緫锛屽父寮�妯″紡澶辨晥涓婃姤 + //if (typeTag == "DoorLockAlarmsSendAlarmInform" && tempDevice != null) + //{ + // var doorL = (ZigBee.Device.DoorLock)tempDevice; + + // if (doorL.DeviceAddr + doorL.DeviceEpoint == doorLock.DeviceAddr + doorLock.DeviceEpoint) + // { + // //闈炰富浜轰笉寮硅繖涓獥鍙� + // if (UserCenterResourse.UserInfo.AuthorityNo != 1) + // { + // return; + // } + // if (doorLock.IsDoorLockNormallyMode) + // { + // if (canOpenNormallyMode) + // { + // Application.RunOnMainThread(() => + // { + // Action<bool> action = (obj) => + // { + // UpdateNomallyOpenStatus(); + // }; + // DoorLockCommonInfo.NomallyOpenModeInvalidDialog(doorLock, DoorLockCommonInfo.DoorLockMessType.ServicePush, haveLogicNormallyOpenMode, action); + // }); + // } + // } + // } + //} + if (typeTag == "DeviceStatusReport" && tempDevice != null) { if (tempDevice != null) @@ -687,18 +733,19 @@ tempRes = false; } DoorLockCommonInfo.NormallyOpenModeValue(doorLock, tempRes); - Application.RunOnMainThread(async () => - { - var resTemp = await Shared.Phone.Device.Logic.SkipView.Exist(3, doorLock); - if (resTemp == 1) - { - haveLogicNormallyOpenMode = true; - } - else if (resTemp == 0) - { - haveLogicNormallyOpenMode = false; - } - }); + + //Application.RunOnMainThread(async () => + //{ + //var resTemp = await Shared.Phone.Device.Logic.SkipView.Exist(3, doorLock); + //if (resTemp == 1) + //{ + // haveLogicNormallyOpenMode = true; + //} + //else if (resTemp == 0) + //{ + // haveLogicNormallyOpenMode = false; + //} + //}); } } else @@ -1186,7 +1233,9 @@ public override void RemoveFromParent() { //寰愭鐨勯棬閿佺晫闈㈠叧闂�(缃戝叧鍏ㄥ眬鎺ユ敹鏃朵娇鐢�) - ControlCommonResourse.IsDoorLockPageOpen = false; + //ControlCommonResourse.IsDoorLockPageOpen = false; + ControlCommonResourse.UpdateDoorLockStatusAction = null; + UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction = null; if (IsDrawerLockMode) { CommonPage.Instance.IsDrawerLockMode = false; diff --git a/ZigbeeApp20200519/Shared/Phone/ZigBee/Device/ZbGateway.cs b/ZigbeeApp20200519/Shared/Phone/ZigBee/Device/ZbGateway.cs old mode 100755 new mode 100644 index f8b36df..01c654c --- a/ZigbeeApp20200519/Shared/Phone/ZigBee/Device/ZbGateway.cs +++ b/ZigbeeApp20200519/Shared/Phone/ZigBee/Device/ZbGateway.cs @@ -2758,8 +2758,8 @@ .WithTcpServer(domain, int.Parse(port)) .WithCredentials(connEmqUserName, connEmqPwd) .WithKeepAlivePeriod(TimeSpan.FromSeconds(20)) - .WithCleanSession() - //.WithCommunicationTimeout(TimeSpan.FromSeconds(10)) + .WithCleanSession() + //.WithCommunicationTimeout(TimeSpan.FromSeconds(10)) .Build(); await DisConnectRemoteMqttClient("StartRemoteMqtt"); await RemoteMqttClient.ConnectAsync(options, CancellationToken.None); @@ -3230,6 +3230,7 @@ UpdateDeviceInfo(tempDevice, "DeviceStatusReport"); } #endregion + #region 闂ㄩ攣鎿嶄綔浜嬩欢閫氱煡 else if (topic == gatewayID + "/" + "DoorLock/DoorLockOperatingEventNotificationCommand") { @@ -3253,6 +3254,7 @@ } } #endregion + #region 闂ㄩ攣缂栫▼浜嬩欢閫氱煡 else if (topic == gatewayID + "/" + "DoorLock/DoorLockProgrammingEventNotificationCommand") { -- Gitblit v1.8.0