ZigbeeApp/Shared/Common/Device.cs
@@ -2894,7 +2894,7 @@ this.dicDeviceModelIdEnum["MGCD01/ZB.10"] = "1306-1200-60000";//吸顶燃气传感器 //PM2.5空气质量传感器 【该设备属于第三方设备,没有镜像ID】 this.dicDeviceModelIdEnum["SZ_PM100"] = "1307-1200-60000";//PM2.5空气质量传感器 this.dicDeviceModelIdEnum["MSPM25/M-ZB.10"] = "1307-1200-60000";//PM2.5空气质量传感器 //=========★★继电器类(2300-2499)★★========= this.dicDeviceModelIdEnum["MPR0310-ZB.10"] = "2300-2300-60001";//3路继电器小模块 ZigbeeApp/Shared/Phone/Category/AddOrEditorSceneForm.cs
@@ -864,6 +864,15 @@ //变更房间 HdlSceneLogic.Current.ChangedSceneRoom(this.editorScene, this.nowRoomId); } else { //移除出房间 var room = HdlRoomLogic.Current.GetRoomBySceneId(this.editorScene.Id); if (room != null) { HdlSceneLogic.Current.DeleteSceneFromRoom(room, this.editorScene); } } //图片改变了 if (isScenePictrueChanged == true) ZigbeeApp/Shared/Phone/Device/Logic/SkipView.cs
@@ -13,13 +13,14 @@ /// <summary> /// 其它界面跳进来的入口 /// </summary> public static void SkipAddLogic(int intvalue, DoorLock doorLock = null, UserCenter.MemberInfoRes accountObj = null) public async static void SkipAddLogic(int intvalue, DoorLock doorLock = null, UserCenter.MemberInfoRes accountObj = null) { /// 0.正常自动化;1.门锁自动化;2.Sone门锁; switch (intvalue) { case 0: { //new一个新逻辑对象; //新增正常自动化入口 Common.Logic.CurrentLogic = new Common.Logic(); @@ -60,7 +61,7 @@ doorLockLogicList.Show(); } break; } } ZigbeeApp/Shared/Phone/Device/Logic/SoneLogicList.cs
@@ -38,7 +38,7 @@ /// <summary> /// 时间戳 /// </summary> public int timeLong = 0; public long timeLong = 0; public async void Show() { @@ -80,14 +80,8 @@ { //进来更新一次值 logicId = logic.LogicId; timeValue = int.Parse(logic.Conditions[0]["DoorLockOpenDelayTime"]); if (UserCenter.UserCenterResourse.HideOption.DoorLockNomallyOpenTimeMode == 1) { //强制变更时间模式为分钟 timeValue = timeValue / 60; } timeLong = int.Parse(logic.Conditions[0]["TriggerTime"]); timeValue = int.Parse(logic.Conditions[0]["DoorLockOpenDelayTime"]) / 3600; timeLong = long.Parse(logic.Conditions[0]["TriggerTime"]); } catch { } @@ -104,6 +98,7 @@ }; middle.AddChidren(fLayout); #endregion #region 常开自动化 ///第三块第一级父控件 listLogicFl = new FrameLayout @@ -309,53 +304,59 @@ } }; ///显示失效设置时间文本控件 var timeTextBtn = new Button { Y = Application.GetRealHeight(127 + 69), X = Application.GetRealWidth(86),//125 Width = Application.GetRealWidth(907),//634 + 200 Height = Application.GetRealHeight(60), TextSize = 15, TextColor = ZigbeeColor.Current.LogicTextBlackColor, }; if (logicId != 0) { ///显示失效设置时间文本控件 var timeTextBtn = new Button { Y = Application.GetRealHeight(127 + 69), X = Application.GetRealWidth(80),//125 Width = Application.GetRealWidth(907+12),//634 + 200 Height = Application.GetRealHeight(60), TextSize = 15, TextColor = ZigbeeColor.Current.LogicTextBlackColor, }; openModeFl.AddChidren(timeTextBtn); string text1 = Language.StringByID(MyInternationalizationString.timeSensitive); string text2 = Language.StringByID(MyInternationalizationString.yearSone); string text3 = Language.StringByID(MyInternationalizationString.monthSone); string text4 = Language.StringByID(MyInternationalizationString.numberSone); string text5 = Language.StringByID(MyInternationalizationString.hour1); string text6 = Language.StringByID(MyInternationalizationString.executeSone); string year = ""; string month = ""; int days = 0; int hour = 0; int minute = 0; if (_if) { ///第一次进来读取网关时间; var datetime = GetLocalTime(timeLong); ///有时效性常开才显示时间条件文本 var y = datetime.Year.ToString();//那一年 var m = datetime.Month.ToString();//那一月 var d = datetime.ToString("dd");//那一天 var h = int.Parse(datetime.ToString("HH"));//小时 int minute = datetime.Minute;//分钟 timeTextBtn.Text = text1 + y + text2 + m + text3 + d + text4 + h + text5 + minute.ToString() + text6; year = datetime.Year.ToString();//那一年 month = datetime.Month.ToString();//那一月 days = int.Parse(datetime.ToString("dd"));//那一天 hour = int.Parse(datetime.ToString("HH"));//小时 minute = datetime.Minute;//分钟 } else { ///有时效性常开才显示时间条件文本 var y = DateTime.Now.Year.ToString();//那一年 var m = DateTime.Now.Month.ToString();//那一月 ///在当前界面编辑显示系统时间(不能每一次编辑都去网关拿数据) year = DateTime.Now.Year.ToString();//那一年 month = DateTime.Now.Month.ToString();//那一月 var d = DateTime.Now.ToString("dd");//那一天 var h = int.Parse(DateTime.Now.ToString("HH"));//小时 int dayInt = (h + timeValue) / 24;//算出几天后执行 int hour = (h + timeValue) % 24;//算出几天后那个时间执行 int days = int.Parse(d) + dayInt; int minute = DateTime.Now.Minute;//分钟 timeTextBtn.Text = text1 + y + text2 + m + text3 + days.ToString() + text4 + hour.ToString() + text5 + minute.ToString() + text6; int dayInt = (h + timeValue) / 24;//设置时间+当前系统时间是否超出24小时 hour = (h + timeValue) % 24;//设置时间+当前系统时间是否超出24小时剩下多少小时 days = int.Parse(d) + dayInt;//当前系统天数+执行后天数 minute = DateTime.Now.Minute;//分钟 } timeTextBtn.Text = text1 + year + text2 + month + text3 + days.ToString() + text4 + hour.ToString() + text5 + minute.ToString() + text6; } @@ -410,66 +411,66 @@ }; modeFl.AddChidren(clickBtn); clickBtn.MouseUpEventHandler += (sender, e) => { { LogicView.TipView.ShowConfrimTip(() => {///再次确认 LogicView.TipView.ShowInputTip(true, async (str) => {///确认发送命令 CommonPage.Loading.Start(); try { ///xm var result = await UserCenter.DoorLock.DoorLockCommonInfo.SetNormallyOpenModeFuncAsync(Send.CurrentDoorLock); if (!result) { LogicView.TipView.ShowFlashTip(Language.StringByID(MyInternationalizationString.openFailed)); return; } else { ///因为有常开模式下才可以创建失效逻辑; SkipView.GetLogicAll(Send.CurrentDoorLock);//删除之前所有失效逻辑 var addResult = await SkipView.LockAddModifyLogic(int.Parse(str), Send.CurrentDoorLock);//添加一条失效逻辑 if (addResult == 0) { ///可欣说如果常开模式开,创建自动化失败,那么将要发一条常开模式关闭命令; UserCenter.DoorLock.DoorLockCommonInfo.DelNormallyOpenMode(Send.CurrentDoorLock); ///提示失败 LogicView.TipView.ShowFlashTip(Language.StringByID(MyInternationalizationString.addFailed)); return; } else { logicId = addResult; timeValue = int.Parse(str); Send.CurrentDoorLock.IsDoorLockNormallyMode = true; _if = false; ModeView(); ///添加APP开启常开模式的历史记录 UserCenter.HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(Send.CurrentDoorLock, 9001, string.Empty); } LogicView.TipView.ShowConfrimTip(() => {///再次确认 LogicView.TipView.ShowInputTip(true, async (str) => {///确认发送命令 CommonPage.Loading.Start(); try { ///xm var result = await UserCenter.DoorLock.DoorLockCommonInfo.SetNormallyOpenModeFuncAsync(Send.CurrentDoorLock); if (!result) { LogicView.TipView.ShowFlashTip(Language.StringByID(MyInternationalizationString.openFailed)); return; } else { ///因为有常开模式下才可以创建失效逻辑; SkipView.GetLogicAll(Send.CurrentDoorLock);//删除之前所有失效逻辑 var addResult = await SkipView.LockAddModifyLogic(int.Parse(str), Send.CurrentDoorLock);//添加一条失效逻辑 if (addResult == 0) { ///可欣说如果常开模式开,创建自动化失败,那么将要发一条常开模式关闭命令; UserCenter.DoorLock.DoorLockCommonInfo.DelNormallyOpenMode(Send.CurrentDoorLock); ///提示失败 LogicView.TipView.ShowFlashTip(Language.StringByID(MyInternationalizationString.addFailed)); return; } else { logicId = addResult; timeValue = int.Parse(str); Send.CurrentDoorLock.IsDoorLockNormallyMode = true; _if = false; ModeView(); ///添加APP开启常开模式的历史记录 UserCenter.HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(Send.CurrentDoorLock, 9001, string.Empty); } } } catch { } } catch { } finally { Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); } finally { Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); }); } }); }); } }); }); }); }; }; } listLogicFl.Y = fLayout.Bottom; listLogicFl.X = Application.GetRealWidth(58); @@ -477,7 +478,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);//动态改动上下滑动view高度; verticalRefresh.Width = listLogicFl.Width - Application.GetRealWidth(46); @@ -488,10 +489,10 @@ /// <param name="yes"></param> private async void Read(bool yes) { if (yes) { CommonPage.Loading.Start(); } //if (yes) // { CommonPage.Loading.Start(); // } try { if (Common.Logic.SoneLogicList.Count == 0) @@ -519,13 +520,20 @@ { var dd = e.Message; } //自动化 RefreshView(); if (yes) finally { CommonPage.Loading.Hide(); Application.RunOnMainThread(() => { // if (yes) // { CommonPage.Loading.Hide(); // } //自动化 RefreshView(); }); } } /// <summary> /// 记录左滑状态 @@ -542,6 +550,7 @@ { if (!SkipView.ExistLogic(logic, Send.CurrentDoorLock)) { ///不是该门锁自动化就不显示出来; continue; } #region 自动化布局View @@ -701,17 +710,22 @@ }; } } /// <summary> /// 将UNIX时间戳转换成系统时间(精确到秒) /// 时间戳转换成时间格式 /// </summary> /// <param name="unixTimeStamp">时间戳</param> /// <returns></returns> public DateTime GetLocalTime(int unixTimeStamp) public DateTime GetLocalTime(long unixTimeStamp) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long lTime = long.Parse(unixTimeStamp + "0000000"); TimeSpan toNow = new TimeSpan(lTime); DateTime dtResult = dtStart.Add(toNow); return dtResult; //DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); //long lTime = long.Parse(unixTimeStamp + "0000000"); //TimeSpan toNow = new TimeSpan(lTime); //DateTime dtResult = dtStart.Add(toNow); //return dtResult; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 return startTime.AddMilliseconds(unixTimeStamp); } } } ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/CompoundControls/SceneFunctionSwitchControl.cs
@@ -56,8 +56,11 @@ /// 初始化控件(事件要至于它之前) /// </summary> /// <param name="listTitleText">菜单文字列表</param> public void InitControl(List<string> listTitleText) /// <param name="rightSpace">右边空白宽度</param> public void InitControl(List<string> listTitleText, int rightSpace = 0) { if (listTitleText.Count == 0) { return; } var btnTemp = new NormalViewControl(10, 10, false); btnTemp.TextSize = 16; @@ -69,6 +72,8 @@ //开始初始化 XX = this.InitTitleTextControl(i, listTitleText[i], btnTemp.GetRealWidthByText(), XX); } //调整控件宽度 this.Width = XX + Application.GetRealWidth(rightSpace); //回调方法 this.frameDefult.ButtonClickEvent?.Invoke(null, null); } @@ -109,7 +114,7 @@ //底线 var btnLine = new NormalViewControl(40, 10, true); btnLine.Y = btnName.Bottom + Application.GetRealHeight(14); btnLine.Y = btnName.Bottom + Application.GetRealHeight(6); btnLine.X = btnName.X + btnName.Width / 2 - Application.GetRealWidth(40) / 2; btnLine.Radius = (uint)Application.GetRealHeight(10) / 2; btnLine.BackgroundColor = UserCenterColor.Current.TextOrangeColor; ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlGatewayReceiveLogic.cs
@@ -600,8 +600,7 @@ /// <param name="receiveData"></param> private void DoorLockDeviceReportPush(JObject receiveData) { //只有徐梅的门锁界面没有打开的情况下,才会处理这个东西 if (ControlCommonResourse.IsDoorLockPageOpen == false && UserCenterResourse.UserInfo.AuthorityNo == 1) if (UserCenterResourse.UserInfo.AuthorityNo == 1) { var device = Common.LocalDevice.Current.GetDevice(receiveData.Value<string>("DeviceAddr"), receiveData.Value<int>("Epoint")); if (device.Type != DeviceType.DoorLock) @@ -609,31 +608,27 @@ //它不是门锁 return; } var info = Newtonsoft.Json.JsonConvert.DeserializeObject<DoorLockAlarmsResult>(receiveData["Data"].ToString()); if (info.Clusterid == 257) { //常开模式关闭 if (info.AlarmCode == 217 || info.AlarmCode == 219) //216:锁上设置的常开 if (info.AlarmCode == 216) { HdlThreadLogic.Current.RunThread(async () => HdlThreadLogic.Current.RunMain(() => { //温居城的要网关中是否有逻辑存在 //参数:2-常开自动化;3-失效时间自动化 var result = await Shared.Phone.Device.Logic.SkipView.Exist(3, (ZigBee.Device.DoorLock)device); HdlThreadLogic.Current.RunMain(() => //更新门锁涉及的常开/常关的界面 if (UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction != null) { //弹出徐梅的那个窗口 DoorLock.DoorLockCommonInfo.NomallyOpenModeInvalidDialog((ZigBee.Device.DoorLock)device, DoorLock.DoorLockCommonInfo.DoorLockMessType.ServicePush, result != 0 ? true : false, null); }); UserCenter.DoorLock.DoorLockCommonInfo.UpdateCurrentDoorlockAction(device.DeviceAddr + device.DeviceEpoint, true); } }); } } //显示有新消息的特效 this.ShowHadNewMessageAppeal(); } //显示有新消息的特效 this.ShowHadNewMessageAppeal(); } #endregion #region ■ 设备在线状态更新反馈_______________ @@ -642,7 +637,7 @@ /// 设备在线状态更新反馈 /// </summary> /// <param name="receiveData"></param> private void DeviceOnlineChangePush (JObject receiveData) private void DeviceOnlineChangePush(JObject receiveData) { if (this.dicDeviceEvent.Count == 0) { @@ -827,29 +822,36 @@ //显示有新消息的特效 this.ShowHadNewMessageAppeal(); //这个东西暂时不处理 ////只有徐梅的门锁界面没有打开的情况下,才会处理这个东西 //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 (UserCenterResourse.UserInfo.AuthorityNo == 1) { //自动化执行 常开关闭 var data = Newtonsoft.Json.JsonConvert.DeserializeObject<LogicPushResult>(receiveData["Data"].ToString()); if (data != null && data.ActionData != null) { if (data.ActionData.Actiontype == 8 && data.ActionData.PassDataString == "055704010113") { var deviceAddr = data.ActionData.MacStr; var device = Common.LocalDevice.Current.GetDevicesByMac(deviceAddr, false); if (device.Count > 0 && device[0].Type != DeviceType.DoorLock) { return; } HdlThreadLogic.Current.RunThread(async () => { var result = await Shared.Phone.Device.Logic.SkipView.Exist(3, (ZigBee.Device.DoorLock)device[0]); HdlThreadLogic.Current.RunMain(() => { //弹出徐梅的那个窗口 DoorLock.DoorLockCommonInfo.NomallyOpenModeInvalidDialog((ZigBee.Device.DoorLock)device[0], DoorLock.DoorLockCommonInfo.DoorLockMessType.ServicePush, result != 0 ? true : false, ControlCommonResourse.UpdateDoorLockStatusAction); }); }); } } } } #endregion #region ■ 场景触发上报_______________________ ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Resourse/ControlCommonResourse.cs
@@ -65,9 +65,9 @@ /// </summary> public static int BottomLineHeight = 1; /// <summary> /// 徐梅的门锁界面是否是打开的状态 /// 门锁界面是否是更新状态 /// </summary> public static bool IsDoorLockPageOpen = false; public static Action<bool> UpdateDoorLockStatusAction = null; /// <summary> /// 是否是界面正在加载中(底层专用,不需要理) /// </summary> ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs
@@ -1164,6 +1164,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) { ZigbeeApp/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; @@ -217,12 +221,6 @@ //上报“常开模式”已被取消 Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); }); if (haveLogic) { //此处删除温居城的常开模式特殊逻辑 var resTemp1 = await Shared.Phone.Device.Logic.SkipView.GetLogicAll(doorLock); } //app重新开启“常开模式” var result = await doorLock.SetNormallyOpenModeFuncAsync(true); if (result == null || result.defaultControlResponseData == null) @@ -262,8 +260,6 @@ } else { //创建常开模式的特殊逻辑 var resu = await Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime, doorLock); Application.RunOnMainThread(() => { string msg0 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeSuccess); ZigbeeApp/Shared/Phone/UserCenter/DoorLock/FunctionSetting.cs
@@ -73,12 +73,6 @@ EventHandler<MouseEventArgs> eHandlerBack = (sender, e) => { RemoveFromParent(); UserDoorLockPage.canShowDialog = true; //暂时不考虑下级界面等推送导致常开模式失效的问题 //var userDoorLockPage = new UserDoorLockPage(currentRoom, deviceUI); //HomePage.Instance.AddChidren(userDoorLockPage); //HomePage.Instance.PageIndex += 1; //userDoorLockPage.Show(); }; this.btnBack.MouseUpEventHandler += eHandlerBack; this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack; ZigbeeApp/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 变量申明 @@ -42,11 +59,6 @@ /// 逻辑中是否有常开模式 /// </summary> private bool haveLogicNormallyOpenMode = false; /// <summary> /// 门锁深度控制上报窗口是否弹出 /// </summary> public static bool canShowDialog = true; /// <summary> /// 当前电量 @@ -626,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) @@ -668,7 +709,7 @@ canOpenNormallyMode = DoorLockCommonInfo.CanNormallyOpen(doorLock); if (canOpenNormallyMode) { //获取门锁常开模式 //1、获取门锁常开模式 var resultRes = await DoorLockCommonInfo.GetNormallyOpenMode(doorLock); if (resultRes == null) { @@ -692,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 @@ -718,7 +760,7 @@ canVolume = DoorLockCommonInfo.CanVolume(doorLock); if (canVolume) { //读取音量 //2、读取音量 var resultRes = await doorLock.GetVolumeAsync(); if (resultRes == null || resultRes.volumeResponseData == null) { @@ -752,7 +794,7 @@ }); } //读取门锁电量:簇ID:1 属性ID 33 //3、读取门锁电量:簇ID:1 属性ID 33 doorLock.ReadAttri(Cluster_ID.Power, AttriButeId.DoorLockPower); //上报电量等1秒 System.Threading.Thread.Sleep(1000); @@ -798,7 +840,7 @@ Shared.Phone.UserView.HomePage.Instance.AddChidren(functionSetting); Shared.Phone.UserView.HomePage.Instance.PageIndex += 1; functionSetting.Show(); canShowDialog = false; //DoorLockCommonInfo.canShowDialog = false; functionSetting.devicNameAction += (deviceRename) => { if (!string.IsNullOrEmpty(deviceRename)) @@ -829,7 +871,7 @@ //历史记录 ---- stan var form = new DeviceDoorLock.DoorLockHistoryLogForm(); form.AddForm(this.doorLock.DeviceAddr); canShowDialog = false; //DoorLockCommonInfo.canShowDialog = false; }; btnRecordFrameLayout.MouseDownEventHandler += handerRecord; btnRecord.MouseDownEventHandler += handerRecord; @@ -853,7 +895,6 @@ //开锁事件 EventHandler<MouseEventArgs> hander1 = async (sender, e) => { canShowDialog = true; if (doorLock.IsDoorLockNormallyMode) { if (canOpenNormallyMode) @@ -887,7 +928,6 @@ //关锁事件 EventHandler<MouseEventArgs> hander2 = (sender, e) => { canShowDialog = true; if (canOpenNormallyMode) { if (doorLock.IsDoorLockNormallyMode) @@ -1093,249 +1133,6 @@ } /// <summary> /// 常开模式失效处理 /// </summary> private void NomallyOpenModeInvalidDialog(bool IsFromReport = false) { if (!canShowDialog) { return; } if (UserCenterResourse.UserInfo.AuthorityNo != 1) { this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.OnlyMasterOperate)); return; } string msg = Language.StringByID(R.MyInternationalizationString.NomallyModeIsCanceled).Replace("{0}", "\r\n"); var confirm = Language.StringByID(R.MyInternationalizationString.SureCancel); var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.NomallyOpenMode, msg, confirm); if (haveLogicNormallyOpenMode) { //有逻辑设置的弹窗 alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.CancelNomallyOpenModeWithLogic, msg, confirm); } alert.Show(); alert.MsgControlClickEvent += async () => { if (IsFromReport) { //上报“常开模式”已被取消,app默认了“常开模式”被取消 DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false); Application.RunOnMainThread(() => { UpdateNomallyOpenStatus(); }); if (haveLogicNormallyOpenMode) { //此处删除温居城的常开模式特殊逻辑 var resTemp1 = await Shared.Phone.Device.Logic.SkipView.GetLogicAll(doorLock); } } else { //app默认“常开模式”还是开启 DoorLockCommonInfo.NormallyOpenModeValue(doorLock, true); Application.RunOnMainThread(() => { UpdateNomallyOpenStatus(); }); } }; alert.CancelClickEvent += async () => { if (IsFromReport) { //上报“常开模式”已被取消 Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); }); if (haveLogicNormallyOpenMode) { //此处删除温居城的常开模式特殊逻辑 var resTemp1 = await Shared.Phone.Device.Logic.SkipView.GetLogicAll(doorLock); } //app重新开启“常开模式” var result = await doorLock.SetNormallyOpenModeFuncAsync(true); if (result == null || result.defaultControlResponseData == null) { Application.RunOnMainThread(() => { string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime); this.ShowTipMsg(msg0); DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false); UpdateNomallyOpenStatus(); }); return; } if (result.defaultControlResponseData.status != 0) { string msg1 = Language.StringByID(R.MyInternationalizationString.OpenNormallyOpenModeFailed); this.ShowTipMsg(msg1); DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false); Application.RunOnMainThread(() => { UpdateNomallyOpenStatus(); }); return; } else { //保持“常开成功” DoorLockCommonInfo.NormallyOpenModeValue(doorLock, true); Application.RunOnMainThread(() => { UpdateNomallyOpenStatus(); }); //创建常开模式的特殊逻辑 var resu = await Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime, doorLock); //if (!resu) //{ // string msg0 = Language.StringByID(R.MyInternationalizationString.AddLogicNormallyModeFailed); // this.ShowTipMsg(msg0); //} CommonPage.Loading.Hide(); } } else { //app操作不取消“常开模式” DoorLockCommonInfo.NormallyOpenModeValue(doorLock, true); Application.RunOnMainThread(() => { UpdateNomallyOpenStatus(); }); } }; alert.ConfirmClickEvent += async () => { if (IsFromReport) { //上报门锁“常开模式”已经取消,现在app确认“常开模式”取消 DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false); Application.RunOnMainThread(() => { UpdateNomallyOpenStatus(); }); if (haveLogicNormallyOpenMode) { //此处删除温居城的常开模式特殊逻辑 var resTemp1 = await Shared.Phone.Device.Logic.SkipView.GetLogicAll(doorLock); } } else { //app操作取消“常开模式” Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); }); var result = await doorLock.SetNormallyOpenModeFuncAsync(false); if (result == null || result.defaultControlResponseData == null) { string msg0 = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime); this.ShowTipMsg(msg0); return; } if (result.defaultControlResponseData.status != 0) { string msg1 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeFailed); this.ShowTipMsg(msg1); return; } else { //添加App开启常开模式的历史记录 HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(this.doorLock, 9002, string.Empty); //app确认取消“常开模式”成功 DoorLockCommonInfo.NormallyOpenModeValue(doorLock, false); Application.RunOnMainThread(() => { UpdateNomallyOpenStatus(); }); if (haveLogicNormallyOpenMode) { //此处删除温居城的常开模式特殊逻辑 var resTemp1 = await Shared.Phone.Device.Logic.SkipView.GetLogicAll(doorLock); } string msg2 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeSuccess); this.ShowTipMsg(msg2); } } }; } /// <summary> /// 已经开启常开模式提示 /// </summary> public void AlreadyOpenNormallyMode() { //常开模式开启提示 string msgNomallyModeIsTurnOn = Language.StringByID(R.MyInternationalizationString.NomallyModeIsTurnOn); var doorLockInValidSetting = Language.StringByID(R.MyInternationalizationString.DoorLockInValidSetting); var alertNomallyModeIsTurnOn = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.DoorLockLogic, msgNomallyModeIsTurnOn, doorLockInValidSetting); alertNomallyModeIsTurnOn.Show(); alertNomallyModeIsTurnOn.MsgControlClickEvent += async () => { //默认创建常开模式的特殊逻辑 var res = await Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime, doorLock); //if (!res) //{ //string msg0 = Language.StringByID(R.MyInternationalizationString.AddLogicNormallyModeFailed); // this.ShowTipMsg(msg0); //return; //} }; //点击自动化 alertNomallyModeIsTurnOn.LogicClickEvent += () => { //逻辑调用前记得移除 ZbGateway.StatusList.Remove(this); //调用逻辑界面 Shared.Phone.Device.Logic.SkipView.SkipAddLogic(2, doorLock); }; alertNomallyModeIsTurnOn.InvalidClickEvent += async () => { NomallyOpenModeInvalidTimeDialog(); }; } /// <summary> /// 常开模式失效时间处理 /// </summary> private void NomallyOpenModeInvalidTimeDialog() { //失效设置 string msgTimeInValidSetting = Language.StringByID(R.MyInternationalizationString.DoorLockOpenAllTheTime); var timeConfrim = Language.StringByID(R.MyInternationalizationString.Confrim); var alertTimeInValidSetting = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.InValid, msgTimeInValidSetting, timeConfrim); alertTimeInValidSetting.Show(); alertTimeInValidSetting.InvalidTimeAction += async (obj) => { //常开模式失效时间设置成功 var temp = int.Parse(obj); DoorLockCommonInfo.NormallyOpenModeInvalidTime = temp; //默认创建常开模式的特殊逻辑 var res = await Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime, doorLock); if (res == 0) { //默认创建常开模式失败 string msg0 = Language.StringByID(R.MyInternationalizationString.AddLogicNormallyModeFailed); var alert = new UserCenter.ShowMsgControl(UserCenter.ShowMsgType.Normal, msg0, Language.StringByID(R.MyInternationalizationString.confrim)); alert.Show(); //二次加载弹窗 常开模式开启提示 NomallyOpenModeInvalidTimeDialog(); } }; } /// <summary> /// 常开模式状态更新 /// </summary> private void UpdateNomallyOpenStatus() @@ -1436,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; ZigbeeApp/Shared/Phone/ZigBee/Common/Application.cs
@@ -334,10 +334,6 @@ { //本地Socket public static Socket busSocket; /// <summary> /// 计时器 /// </summary> private static int timeCount = 0; /// <summary> /// 启动Socket接收和发送功能 @@ -395,52 +391,10 @@ { try { //检测连接状态 CheckConnectiton(); Start(7624); busSocket.BeginSendTo(bytes, 0, bytes.Length, SocketFlags.None, iPEndPoint, new AsyncCallback(asyncEndSend), null); } catch { } } /// <summary> /// 检测连接状态 /// </summary> private static void CheckConnectiton() { if (busSocket == null) { return; } timeCount++; if (timeCount < 20) { //每10秒检测一次 return; } timeCount = 0; bool blockingState = busSocket.Blocking; try { byte[] tmp = new byte[1]; busSocket.Blocking = false; busSocket.Send(tmp, 0, 0); //tcp还在连接着 busSocket.Blocking = blockingState; } catch (SocketException e) { // 10035 == WSAEWOULDBLOCK if (e.NativeErrorCode.Equals(10035)) { //Still Connected, but the Send would block } else { //tcp已经断开了连接 Stop(); } } } /// <summary>