| | |
| | | /// 安防数据缓存
|
| | | /// </summary>
|
| | | private Dictionary<int, SafeguardZoneInfo> dicAllZoneInfo = new Dictionary<int, SafeguardZoneInfo>();
|
| | | /// <summary>
|
| | | /// 安防上报信息
|
| | | /// </summary>
|
| | | public List<SafeguardAlarmInfo> listAlarmInfo = new List<SafeguardAlarmInfo>();
|
| | | /// <summary>
|
| | | /// 上一次安防上报信息保存的文件名字(考虑到用户有可能24点的时候,不退出APP)
|
| | | /// </summary>
|
| | | private string oldDeviceAlarmFile = string.Empty;
|
| | | /// <summary>
|
| | | /// 锁
|
| | | /// </summary>
|
| | | private object objLock = new object();
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 刷新安防___________________________
|
| | |
| | | this.ShowTipMsg(msg);
|
| | | return false;
|
| | | }
|
| | | var mainWayId = HdlGatewayLogic.Current.GetGatewayId(mainGateway);
|
| | | var mainWayId = mainGateway.GwId;
|
| | |
|
| | | //主题数固定5+3+1
|
| | | int topicCount = 9;
|
| | |
| | | {
|
| | | var jobject = Newtonsoft.Json.Linq.JObject.Parse(message);
|
| | |
|
| | | var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<ZigBee.Device.Safeguard.ErrorResponData>(jobject["Data"].ToString());
|
| | | var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.ErrorResponData>(jobject["Data"].ToString());
|
| | | if (temp != null)
|
| | | {
|
| | | string msg = HdlCheckLogic.Current.CheckCommonErrorCode(temp.Error);
|
| | |
| | | try
|
| | | {
|
| | | var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4036 } };
|
| | | await mainGateway.Send("Security/GetSecurityInfo", jObject.ToString());
|
| | | mainGateway.Send("Security/GetSecurityInfo", jObject.ToString());
|
| | | }
|
| | | catch { }
|
| | |
|
| | |
| | | //处理设备
|
| | | foreach (var data2 in allData.DeviceList)
|
| | | {
|
| | | string mainKey = data2.MacAddr + data2.Epoint;
|
| | | string mainKey = LocalDevice.Current.GetDeviceMainKeys(data2.MacAddr, data2.Epoint);
|
| | | //传感器设备信息
|
| | | var Deviceinfo = new Safeguard.ZoneDeviceListData();
|
| | | Deviceinfo.IsBypass = data2.IsBypass;
|
| | |
| | | if (data.Type == 0)
|
| | | {
|
| | | //本地是否有这个设备
|
| | | string mainKey = data.DeviceAddr + data.Epoint;
|
| | | string mainKey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
|
| | | //报警信息
|
| | | zoneInfo.dicAlarmDevice[mainKey] = data;
|
| | | CommonDevice device = LocalDevice.Current.GetDevice(mainKey);
|
| | |
| | | //一批设备里面,成功添加的
|
| | | if (data.Status == 0)
|
| | | {
|
| | | listSuccess.Add(data.MacAddr + data.Epoint);
|
| | | listSuccess.Add(LocalDevice.Current.GetDeviceMainKeys(data.MacAddr, data.Epoint));
|
| | | }
|
| | | else if (data.Status == 1)
|
| | | {
|
| | |
| | | {
|
| | | if (data.Status == 0)
|
| | | {
|
| | | listKeys.Add(data.MacAddr + data.Epoint);
|
| | | listKeys.Add(LocalDevice.Current.GetDeviceMainKeys(data.MacAddr, data.Epoint));
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | /// <summary>
|
| | | /// 修改用户密码(不存在时,则新建)
|
| | | /// </summary>
|
| | | /// <param name="userId"></param>
|
| | | /// <param name="password"></param>
|
| | | /// <param name="userId">用户ID</param>
|
| | | /// <param name="password">密码</param>
|
| | | /// <param name="passWordTips">密码提示</param>
|
| | | /// <returns></returns>
|
| | | public async Task<bool> ChangedUserPassword(int userId, string password)
|
| | | public async Task<bool> ChangedUserPassword(int userId, string password, string passWordTips)
|
| | | {
|
| | | //创建新用户
|
| | | var result = await Safeguard.SetUserPasswordAsync(userId, password, this.GetLoginToken());
|
| | | var result = await Safeguard.SetUserPasswordAsync(userId, password, passWordTips, this.GetLoginToken());
|
| | | if (result == null || result.setUserPasswordResponseData == null)
|
| | | {
|
| | | if (userId != 5)
|
| | |
| | | return 0;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 添加密码的备注
|
| | | /// </summary>
|
| | | /// <param name="userId">用户ID</param>
|
| | | /// <param name="password">网关说需要原来的密码,也不知道为什么</param>
|
| | | /// <param name="passWordTips">密码备注</param>
|
| | | /// <returns></returns>
|
| | | public async Task<bool> AddPassWordTips(int userId, string password, string passWordTips)
|
| | | {
|
| | | var result = await Safeguard.SetPassWordTipsAsync(userId, password, passWordTips, this.GetLoginToken());
|
| | | if (result == null || result.setUserPasswordResponseData == null)
|
| | | {
|
| | | //修改备注信息失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uEditorNoteInformationFail);
|
| | | //拼接上【网关回复超时】的Msg
|
| | | msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
|
| | |
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | if (result.setUserPasswordResponseData.Result != 0)
|
| | | {
|
| | | //修改备注信息失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uEditorNoteInformationFail);
|
| | |
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | return true;
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 报警目标___________________________
|
| | |
| | | }
|
| | | else if (data.Type == "1")
|
| | | {
|
| | | var scene = Common.SceneRoomUI.AllSceneRoomUIList.Find((obj) => obj.sceneUI.Id == data.ScenesId);
|
| | | var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(data.ScenesId);
|
| | | if (scene != null)
|
| | | {
|
| | | string msg = scene.sceneUI.Name + "\r\n";
|
| | | string msg = scene.Name + "\r\n";
|
| | | //目标场景不存在
|
| | | msg += Language.StringByID(R.MyInternationalizationString.uTargetSceneIsNotExsit);
|
| | | this.ShowTipMsg(msg);
|
| | |
| | | {
|
| | | return GarrisonMode.None;
|
| | | }
|
| | | //判断有没有其他逻辑去修改了布防模式
|
| | | //所以再次获取模式
|
| | | var safetyMode = await this.GetSafetyMode();
|
| | | if (safetyMode != null)
|
| | | {
|
| | | return GarrisonMode.None;
|
| | | }
|
| | |
|
| | | //参数
|
| | | var Pra = new Safeguard.EnableModeData();
|
| | |
| | | this.ShowErrorMsg(msg);
|
| | | return GarrisonMode.RemoveGarrison;
|
| | | }
|
| | |
|
| | | //保存布防操作信息到本地
|
| | | HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison);
|
| | |
|
| | | return garrison;
|
| | | }
|
| | |
|
| | |
| | | this.ShowErrorMsg(msg);
|
| | | return -1;
|
| | | }
|
| | |
|
| | | if (garrison == GarrisonMode.RemoveGarrison)
|
| | | {
|
| | | //保存布防操作信息到本地
|
| | | HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(garrison);
|
| | | }
|
| | |
|
| | | return 1;
|
| | | }
|
| | |
|
| | |
| | | /// </summary>
|
| | | public async Task<string> ShowInputUserPasswordForm()
|
| | | {
|
| | | //获取当前正在激活的画面
|
| | | var form = UserCenterLogic.GetNowActionForm();
|
| | | if (form == null)
|
| | | {
|
| | | //这种情况应该不存在
|
| | | this.ShowErrorMsg("ERROR:Not Found The ActionForm!");
|
| | | return null;
|
| | | }
|
| | |
|
| | | DialogInputFrameControl Dialogform = null;
|
| | | NumberPswInputDialogForm Dialogform = null;
|
| | |
|
| | | bool isShowingProgressBar = false;
|
| | | string ProgressBarText = string.Empty;
|
| | |
|
| | | string pasword = null;
|
| | | Application.RunOnMainThread(() =>
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | isShowingProgressBar = CommonPage.Loading.Visible;
|
| | | ProgressBarText = CommonPage.Loading.Text;
|
| | |
| | | CommonPage.Loading.Hide();
|
| | | }
|
| | |
|
| | | Dialogform = new DialogInputFrameControl(form, DialogFrameMode.OnlyPassword);
|
| | | //用户密码
|
| | | Dialogform.SetTitleText(Language.StringByID(R.MyInternationalizationString.uUserPassword));
|
| | | //设置提示信息:请输入用户密码
|
| | | Dialogform.SetTipText(Language.StringByID(R.MyInternationalizationString.uPleaseInputUserPassword));
|
| | | Dialogform = new NumberPswInputDialogForm();
|
| | | Dialogform.AddForm(Language.StringByID(R.MyInternationalizationString.uPleaseInputUserPassword), 4);
|
| | | //确认按钮
|
| | | Dialogform.ComfirmClickEvent += ((textValue) =>
|
| | | Dialogform.FinishInputEvent += ((textValue) =>
|
| | | {
|
| | | if (textValue == string.Empty)
|
| | | {
|
| | | this.ShowErrorMsg(Language.StringByID(R.MyInternationalizationString.uPleaseInputUserPassword));
|
| | | return;
|
| | | }
|
| | | Dialogform.CloseDialog();
|
| | |
|
| | | Dialogform.CloseForm();
|
| | | //用户密码
|
| | | pasword = textValue;
|
| | | //加密密码
|
| | |
| | | /// <summary>
|
| | | /// 设置胁迫的联系人方式
|
| | | /// </summary>
|
| | | /// <param name="dicPhone">keys:联系方式 values:地区码</param>
|
| | | /// <param name="listPhone">地区码-联系方式</param>
|
| | | /// <param name="listNote">联系人备注</param>
|
| | | /// <param name="addPhone">是否是新建联系人,false的时候,只改备注</param>
|
| | | /// <returns></returns>
|
| | | public async Task<bool> SetCoercePhoneNumber(Dictionary<string, string> dicPhone)
|
| | | public async Task<bool> SetCoercePhoneNumber(List<string> listPhone, List<string> listNote, bool addPhone = true)
|
| | | {
|
| | | var Pra = new Safeguard.SetCoercePhoneNumberData();
|
| | | var Actonobj = new Safeguard.PushTargetActionObj();
|
| | | Actonobj.Type = 2;
|
| | | Pra.Actions.Add(Actonobj);
|
| | | Pra.LoginToken = this.GetLoginToken();
|
| | |
|
| | | foreach (string phoneNum in dicPhone.Keys)
|
| | | if (addPhone == true)
|
| | | {
|
| | | var phoneInfo = new Safeguard.PushTargetInfo();
|
| | | Actonobj.PushTarget.Add(phoneInfo);
|
| | | //电话号码
|
| | | phoneInfo.PushNumber = dicPhone[phoneNum] + "-" + phoneNum;
|
| | | }
|
| | | var Pra = new Safeguard.SetCoercePhoneNumberData();
|
| | | var Actonobj = new Safeguard.PushTargetActionObj();
|
| | | Actonobj.Type = 2;
|
| | | Pra.Actions.Add(Actonobj);
|
| | | Pra.LoginToken = this.GetLoginToken();
|
| | |
|
| | | var result = await Safeguard.SetCoercePhoneNumberAsync(Pra);
|
| | | if (result == null || result.setCoercePhoneNumberResponseData == null || result.setCoercePhoneNumberResponseData.Result != 0)
|
| | | for (int i = 0; i < listPhone.Count; i++)
|
| | | {
|
| | | var phoneInfo = new Safeguard.PushTargetInfo();
|
| | | Actonobj.PushTarget.Add(phoneInfo);
|
| | | //电话号码
|
| | | phoneInfo.PushNumber = listPhone[i];
|
| | | }
|
| | | var result = await Safeguard.SetCoercePhoneNumberAsync(Pra);
|
| | | if (result == null || result.setCoercePhoneNumberResponseData == null || result.setCoercePhoneNumberResponseData.Result != 0)
|
| | | {
|
| | | //修改胁迫联系方式失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uChangedCoercePhoneNumberFail);
|
| | | //拼接上【网关回复超时】的Msg
|
| | | msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
|
| | |
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | }
|
| | | for (int i = 0; i < listNote.Count; i++)
|
| | | {
|
| | | //修改胁迫联系方式失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uChangedCoercePhoneNumberFail);
|
| | | //拼接上【网关回复超时】的Msg
|
| | | msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
|
| | |
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | var result = await Safeguard.SetCoercePhoneNumberNoteAsync(listPhone[i], listNote[i]);
|
| | | if (result == null)
|
| | | {
|
| | | //修改备注信息失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uEditorNoteInformationFail);
|
| | | //拼接上【网关回复超时】的Msg
|
| | | msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, null, "回复超时");
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | if (result.Result == -2)
|
| | | {
|
| | | //错误:网关对象丢失
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uErrorGatewayLostMsg);
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | if (result.Result != 0)
|
| | | {
|
| | | //修改备注信息失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uEditorNoteInformationFail);
|
| | | this.ShowErrorMsg(msg);
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | return true;
|
| | | }
|
| | |
|
| | |
| | | return true;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 给联系号码添加备注的信息
|
| | | /// </summary>
|
| | | private class AddPushNumberNoteInfo
|
| | | {
|
| | | /// <summary>
|
| | | /// 固定253
|
| | | /// </summary>
|
| | | public int ActionType = 253;
|
| | | /// <summary>
|
| | | /// LoginToken
|
| | | /// </summary>
|
| | | public string LoginToken = string.Empty;
|
| | | /// <summary>
|
| | | /// 地区码-联系方式
|
| | | /// </summary>
|
| | | public string PushNumber = string.Empty;
|
| | | /// <summary>
|
| | | /// 联系人号码备注,最大63byte
|
| | | /// </summary>
|
| | | public string PushNumberNote = string.Empty;
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 报警目标状态的翻译文本_____________
|
| | | #region ■ 执行目标状态的翻译文本_____________
|
| | |
|
| | | /// <summary>
|
| | | /// 获取灯光类型的报警目标的状态文本
|
| | | /// 获取执行目标的状态文本
|
| | | /// </summary>
|
| | | /// <param name="listTaskInfo">动作对象,可以为空</param>
|
| | | /// <returns></returns>
|
| | | public string GetLightAlarmStatuText(List<Safeguard.TaskListInfo> listTaskInfo)
|
| | | public string GetAdjustTargetStatuText(List<Safeguard.TaskListInfo> listTaskInfo)
|
| | | {
|
| | | if (listTaskInfo == null)
|
| | | if (listTaskInfo == null || listTaskInfo.Count == 0)
|
| | | {
|
| | | //无动作
|
| | | return Language.StringByID(R.MyInternationalizationString.uNotAction);
|
| | | }
|
| | | //要考虑它的排列顺序(可以按需求变更编号)
|
| | | Dictionary<int, string> dicSort = new Dictionary<int, string>();
|
| | | //最大编号
|
| | | int MaxNo = 4;
|
| | | //开关的位置编号
|
| | | int ControlNo = 0;
|
| | | //百分比的位置编号
|
| | | int persentNo = 1;
|
| | | //空调温度的位置编号
|
| | | int temparetureNo = 2;
|
| | | //空调模式的位置编号
|
| | | int modelNo = 3;
|
| | | //空调风速的位置编号
|
| | | int windNo = 4;
|
| | |
|
| | | foreach (var info in listTaskInfo)
|
| | | {
|
| | | #region ■ 开关控制____
|
| | | //开关控制
|
| | | if (info.TaskType == 1)
|
| | | {
|
| | |
| | | dicSort[ControlNo] = Language.StringByID(R.MyInternationalizationString.uSimpleClose);
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | #region ■ 亮度调节____
|
| | | //亮度调节
|
| | | else if (info.TaskType == 3)
|
| | | {
|
| | | dicSort[persentNo] = info.Data1 + "%";
|
| | | if (info.Data1 == 0)
|
| | | {
|
| | | //关
|
| | | dicSort[persentNo] = Language.StringByID(R.MyInternationalizationString.uSimpleClose);
|
| | | }
|
| | | else
|
| | | {
|
| | | dicSort[persentNo] = $"{(int)(info.Data1 * 1.0 / 254 * 100)}%";
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | #region ■ 窗帘设备____
|
| | | //窗帘设备(它的开关和开关控制是反过来的)
|
| | | else if (info.TaskType == 6)
|
| | | {
|
| | |
| | | dicSort[persentNo] = info.Data2 + "%";
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | #region ■ 空调设备____
|
| | | //空调设备
|
| | | else if (info.TaskType == 5)
|
| | | {
|
| | | if (info.Data1 == 3)
|
| | | {
|
| | | if (info.Data2 == 0)
|
| | | {
|
| | | return Language.StringByID(R.MyInternationalizationString.uSimpleClose);
|
| | | }
|
| | | else if (info.Data2 == 1)
|
| | | {
|
| | | //自动
|
| | | dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_Auto);
|
| | | }
|
| | | else if (info.Data2 == 3)
|
| | | {
|
| | | //制冷
|
| | | dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_Cool);
|
| | | }
|
| | | else if (info.Data2 == 4)
|
| | | {
|
| | | //制热
|
| | | dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_Heat);
|
| | | }
|
| | | else if (info.Data2 == 7)
|
| | | {
|
| | | //送风
|
| | | dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_FanOnly);
|
| | | }
|
| | | else if (info.Data2 == 8)
|
| | | {
|
| | | //除湿
|
| | | dicSort[modelNo] = Language.StringByID(R.MyInternationalizationString.Mode_Dry);
|
| | | }
|
| | | }
|
| | | else if (info.Data1 == 4 || info.Data1 == 5|| info.Data1 == 7)
|
| | | {
|
| | | //温度
|
| | | dicSort[temparetureNo] = $"{ info.Data2 / 100}℃";
|
| | | }
|
| | | else if (info.Data1 == 6)
|
| | | {
|
| | | if (info.Data2 == 1)
|
| | | {
|
| | | //低风
|
| | | dicSort[windNo] = Language.StringByID(R.MyInternationalizationString.Fan_Low);
|
| | | }
|
| | | else if (info.Data2 == 2)
|
| | | {
|
| | | //中风
|
| | | dicSort[windNo] = Language.StringByID(R.MyInternationalizationString.Fan_Middle);
|
| | | }
|
| | | else if (info.Data2 == 3)
|
| | | {
|
| | | //高风
|
| | | dicSort[windNo] = Language.StringByID(R.MyInternationalizationString.Fan_Height);
|
| | | }
|
| | | }
|
| | | }
|
| | | #endregion
|
| | | }
|
| | | //如果开关和百分比一起存在的话,则不显示开关文字
|
| | | if (dicSort.ContainsKey(ControlNo) == true && dicSort.ContainsKey(persentNo) == true)
|
| | | {
|
| | | dicSort.Remove(ControlNo);
|
| | | }
|
| | |
|
| | | //拼接文本
|
| | | string txtvalue = string.Empty;
|
| | | for (int i = 0; i < dicSort.Count; i++)
|
| | | for (int i = 0; i <= MaxNo; i++)
|
| | | {
|
| | | txtvalue += dicSort[i] + " ";
|
| | | if (dicSort.ContainsKey(i) == true)
|
| | | {
|
| | | txtvalue += dicSort[i] + " ";
|
| | | }
|
| | | }
|
| | |
|
| | | return txtvalue.Trim();
|
| | |
| | | bool success = false;
|
| | | //超时时间
|
| | | int TimeOut = 0;
|
| | | string checkTopic = HdlGatewayLogic.Current.GetGatewayId(realWay) + "/Security/AdminSetNewPassword_Respon";
|
| | | string checkTopic = realWay.GwId + "/Security/AdminSetNewPassword_Respon";
|
| | | Action<string, string> getResultAction = (topic, message) =>
|
| | | {
|
| | | try
|
| | |
| | | var jObject = new Newtonsoft.Json.Linq.JObject { { "Cluster_ID", 0 }, { "Command", 4033 } };
|
| | | var data = new Newtonsoft.Json.Linq.JObject { { "HomeId", Common.Config.Instance.HomeId }, { "Password", password } };
|
| | | jObject.Add("Data", data);
|
| | | await realWay.Send("Security/AdminSetNewPassword", jObject.ToString());
|
| | | realWay.Send("Security/AdminSetNewPassword", jObject.ToString());
|
| | | }
|
| | | catch
|
| | | {
|
| | |
| | | /// 获取登陆者的Token(好像管理员登陆的时候,需要变更Token,所以暂且定义一个函数出来)
|
| | | /// </summary>
|
| | | /// <returns></returns>
|
| | | private string GetLoginToken()
|
| | | public string GetLoginToken()
|
| | | {
|
| | | //获取控制主人账号的Token
|
| | | return UserCenterLogic.GetConnectMainToken();
|
| | | //return UserCenterLogic.GetConnectMainToken();
|
| | | return Config.Instance.Token;
|
| | | }
|
| | |
|
| | | #endregion
|