using System; using System.Collections.Generic; using System.Text; using Newtonsoft.Json.Linq; namespace ZigBee.Device { [System.Serializable] public class Safeguard { /// /// 当前主网关的ID /// public string GateWayId; /// /// 网关返回场景的命令标识 /// public int DataID; /// /// 网关反馈的时间戳 /// public int Time; /// /// 等待从网关接收数据的时间 /// /// The wait receive data time. public static int WaitReceiveDataTime { get { var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { return 3000; } else if (mainGateway.IsVirtual) { return 6000; } else { return 3000; } } } /// /// 网关信息错误反馈内容 /// static string ErrorMess(int err) { string message = ""; switch (err) { case 1: message = " 网关无法解析命令数据。"; break; case 2: message = " 协调器正在升级或备份 / 恢复数据。"; break; case 3: message = "操作设备 / 组 / 场景不存在"; break; case 4: message = " 其他错误"; break; case 5: message = " 数据传输错误(在某次客户端向网关发送数据的过程中,网关在合理时间范围内接收客户端数据不完整导致该错误发生。如客户端向网关一次发送100个字节的数据,但网关等待接收了一秒只接收了80个字节。发生该错误,网关将主动关闭客户端连接)"; break; default: break; } return message; } #region *管理员密码登陆; /// /// *管理员密码登陆.(仅用于主网关接口). /// password:管理员密码,初始化密码为“admin”。 /// loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。如果登陆成功,网关将记录该标识,app需要管理员权限的指令都应该带有该标识,网关会根据该标识来判断是否为管理员操作,如果标识错误,将返回“Security/Error_Respon”主题数据。 。 /// 返回结果Result /// 0:登陆成功 /// 1:密码错误,登陆失败。 /// public static async System.Threading.Tasks.Task AdminLoginResponAsync(string password, string loginToken) { return await System.Threading.Tasks.Task.Run(async () => { AdminLoginResponAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new AdminLoginResponAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new AdminLoginResponAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new AdminLoginResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new AdminLoginResponAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } if (topic == gatewayID + "/" + "Security/AdminLogin_Respon") { var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (tempData == null) { d = new AdminLoginResponAllData { errorMessageBase = "网关返回的数据为空" }; } else { d = new AdminLoginResponAllData { Result = tempData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/AdminLogin_Actions 启动" + System.DateTime.Now.ToString()); try { var bytes = new byte[32]; var reamarkGwBytes = System.Text.Encoding.UTF8.GetBytes(password); System.Array.Copy(reamarkGwBytes, 0, bytes, 0, 32 < reamarkGwBytes.Length ? 32 : reamarkGwBytes.Length); password = System.Text.Encoding.UTF8.GetString(bytes); var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4001 } }; var data = new JObject { { "Password", password }, { "LoginToken", loginToken } }; jObject.Add("Data", data); mainGateway.Send("Security/AdminLogin", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new AdminLoginResponAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/AdminLogin_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 管理员密码登陆的数据,网关反馈信息 /// public AdminLoginResponAllData adminLoginResponAllData; /// /// 管理员密码登陆返回的数据,网关反馈信息 /// [System.Serializable] public class AdminLoginResponAllData : CommonDevice.ErrorResponCommon { /// /// 返回结果Result /// 0:登陆成功 /// 1:密码错误,登陆失败。 /// public int Result = 999; /// /// 返回错误结果 /// 1:网关不是主网关,无法进行该操作。 /// 2:该操作需要安防管理员权限,需先以管理员身份进行登陆。 /// public int Error; } #endregion #region 20修改管理员密码. /// /// 修改管理员密码(仅用于主网关接口) /// /// The admin password async. /// 新管理员密码 /// 旧密码/param> public static async System.Threading.Tasks.Task ChangeAdminPasswordAsync(string oldPassword, string password) { return await System.Threading.Tasks.Task.Run(async () => { ChangeAdminPasswordResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new ChangeAdminPasswordResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new ChangeAdminPasswordResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new ChangeAdminPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/ChangeAdminPassword_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var changeAdminPasswordResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (changeAdminPasswordResponseData != null) { d = new ChangeAdminPasswordResponseAllData { changeAdminPasswordResponseData = changeAdminPasswordResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } else { d = new ChangeAdminPasswordResponseAllData { }; var r = new ChangeAdminPasswordResponseData(); if (result == 1) { r.Result = result; d.errorMessageBase = "修改失败,原密码错误"; } if (result == 2) { r.Result = result; d.errorMessageBase = "2:修改失败,密码长度不正确"; } d.changeAdminPasswordResponseData = r; System.Console.WriteLine($"UI收到通知后的主题"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/ChangeAdminPassword_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4023} }; var data = new JObject { { "OldPassword", oldPassword }, { "Password", password} }; jObject.Add("Data", data); mainGateway.Send("Security/ChangeAdminPassword", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new ChangeAdminPasswordResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/ChangeAdminPassword_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 修改管理员密码返回的数据,网关反馈信息 /// public ChangeAdminPasswordResponseAllData changeAdminPasswordResponseAllData; /// /// 修改管理员密码返回的数据,网关反馈信息 /// [System.Serializable] public class ChangeAdminPasswordResponseAllData : CommonDevice.ErrorResponCommon { /// /// 修改管理员密码返回的数据 /// public ChangeAdminPasswordResponseData changeAdminPasswordResponseData; } /// /// 修改管理员密码返回的数据 /// public ChangeAdminPasswordResponseData changeAdminPasswordResponseData; /// /// 修改管理员密码返回的数据,网关反馈信息 /// [System.Serializable] public class ChangeAdminPasswordResponseData { /// /// 0:修改成功 ///1:修改失败,原密码错误 ///2:修改失败,密码长度不正确 /// public int Result = 999; /// /// 新密码,最大32个字符。(当Result = 0时存在。) /// public string NewPassword; } #endregion #region 16查看延时时间; /// /// 查看延时时间(仅用于主网关接口) /// public static async System.Threading.Tasks.Task CatDelayTimeAsync() { return await System.Threading.Tasks.Task.Run(async () => { CatDelayTimeResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new CatDelayTimeResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new CatDelayTimeResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new CatDelayTimeResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/CatDelayTime_Respon") { var catDelayTimeResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (catDelayTimeResponseData == null) { d = new CatDelayTimeResponseAllData { errorMessageBase = "网关返回的数据为空" }; } else { d = new CatDelayTimeResponseAllData { catDelayTimeResponseData = catDelayTimeResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/CatDelayTime_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4019} }; mainGateway.Send("Security/CatDelayTime", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new CatDelayTimeResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/CatDelayTime_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 查看延时时间返回的数据,网关反馈信息 /// public CatDelayTimeResponseAllData catDelayTimeResponseAllData; /// /// 查看延时时间返回的数据,网关反馈信息 /// [System.Serializable] public class CatDelayTimeResponseAllData : CommonDevice.ErrorResponCommon { /// /// 查看延时时间返回的数据 /// public CatDelayTimeResponseData catDelayTimeResponseData; } /// /// 查看延时时间返回的数据 /// public CatDelayTimeResponseData catDelayTimeResponseData; /// /// 查看延时时间返回的数据 /// [System.Serializable] public class CatDelayTimeResponseData { /// /// 进入延时时间,单位秒 范围:0-65535 /// public int EntranceDelayTime; /// /// 外出延时时间,单位秒 范围:0-65535 /// public int GoOutDelayTime; } #endregion #region 17*设置出入防区延时时; /// /// *设置出入防区延时时间(需要管理员权限)) /// entranceDelayTime:进入延时时间,单位秒范围:0-65535 /// goOutDelayTime:外出延时时间,单位秒范围:0-65535 /// loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。如果登陆成功,网关将记录该标识,app需要管理员权限的指令都应该带有该标识,网关会根据该标识来判断是否为管理员操作,如果标识错误,将返回“Security/Error_Respon”主题数据。 。 /// public static async System.Threading.Tasks.Task SetDelayTimeAsync(int entranceDelayTime, int goOutDelayTime, string loginToken) { return await System.Threading.Tasks.Task.Run(async () => { SetDelayTimeResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new SetDelayTimeResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new SetDelayTimeResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new SetDelayTimeResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var securityTemp = new Safeguard() { Time = jobject.Value("Time"), DataID = jobject.Value("Data_ID"), GateWayId = mainGateway.GwId }; var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new SetDelayTimeResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { d.errorMessageBase = "网关错误回复,且数据是空"; if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/SetDelayTime_Respon") { var setDelayTimeResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (setDelayTimeResponseData == null) { d = new SetDelayTimeResponseAllData { errorMessageBase = "网关返回的数据为空" }; } else { d = new SetDelayTimeResponseAllData { setDelayTimeResponseData = setDelayTimeResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/SetDelayTime_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4020} }; var data = new JObject { { "EntranceDelayTime", entranceDelayTime}, { "GoOutDelayTime", goOutDelayTime}, { "LoginToken", loginToken} }; jObject.Add("Data", data); mainGateway.Send("Security/SetDelayTime", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new SetDelayTimeResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/SetDelayTime_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 设置延时时间返回的数据,网关反馈信息 /// public SetDelayTimeResponseAllData setDelayTimeResponseAllData; /// /// 设置延时时间返回的数据,网关反馈信息 /// [System.Serializable] public class SetDelayTimeResponseAllData : CommonDevice.ErrorResponCommon { /// /// 设置延时时间返回的数据 /// public SetDelayTimeResponseData setDelayTimeResponseData; } /// /// 设置延时时间返回的数据 /// public SetDelayTimeResponseData setDelayTimeResponseData; /// /// 设置延时时间返回的数据 /// [System.Serializable] public class SetDelayTimeResponseData { /// /// 进入延时时间,单位秒 范围:0-65535 /// public int EntranceDelayTime; /// /// 外出延时时间,单位秒 范围:0-65535 /// public int GoOutDelayTime; } #endregion #region 21*查看用户密码和胁迫密码.; /// /// *查看用户密码和胁迫密码(需要管理员权限) /// loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public static async System.Threading.Tasks.Task CatUserPasswordAsync(string loginToken) { return await System.Threading.Tasks.Task.Run(async () => { CatUserPasswordResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new CatUserPasswordResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new CatUserPasswordResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new CatUserPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new CatUserPasswordResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/CatUserPassword_Respon") { var catUserPasswordResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (catUserPasswordResponseData == null) { d = new CatUserPasswordResponseAllData { errorMessageBase = "网关返回的数据为空" }; } else { d = new CatUserPasswordResponseAllData { catUserPasswordResponseData = catUserPasswordResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/CatUserPassword_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4024} }; var data = new JObject { { "LoginToken", loginToken} }; jObject.Add("Data", data); mainGateway.Send("Security/CatUserPassword", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new CatUserPasswordResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/CatDelayTime_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 查看用户密码和胁迫密码返回的数据,网关反馈信息 /// public CatUserPasswordResponseAllData catUserPasswordResponseAllData; /// /// 查看用户密码和胁迫密码返回的数据,网关反馈信息 /// [System.Serializable] public class CatUserPasswordResponseAllData : CommonDevice.ErrorResponCommon { /// /// 查看用户密码和胁迫密码返回的数据 /// public CatUserPasswordResponseData catUserPasswordResponseData; } /// /// 查看用户密码和胁迫密码返回的数据 /// public CatUserPasswordResponseData catUserPasswordResponseData; /// /// 查看用户密码和胁迫密码返回的数据 /// [System.Serializable] public class CatUserPasswordResponseData { /// /// 用户密码列表 /// public List UserPasswordList = new List(); } /// /// 用户密码列表数据 /// [System.Serializable] public class UserPasswordListObj { /// /// 用户id。Id为5时为胁迫密码 /// public int UserId; /// /// 最少4个字符,最大32个字符 /// public string Password; /// /// 用户密码提示语 /// public string PassWordTips = string.Empty; } #endregion #region 22*新增或重设用户密码.; /// /// *新增或重设用户密码(需要管理员权限) /// userId:用户id 如果用户id存在,则修改密码。如果用户id不存在,则为该id新增密码 /// 为0时,自动分配新的用户id。为5时,则修改胁迫密码。取值范围0-5。 /// password:新管理员密码 /// passWordTips:密码提示 /// loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public static async System.Threading.Tasks.Task SetUserPasswordAsync(int userId, string password, string passWordTips, string loginToken) { return await System.Threading.Tasks.Task.Run(async () => { SetUserPasswordResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new SetUserPasswordResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new SetUserPasswordResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new SetUserPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var securityTemp = new Safeguard() { Time = jobject.Value("Time"), DataID = jobject.Value("Data_ID"), GateWayId = mainGateway.GwId }; var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new SetUserPasswordResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/SetUserPassword_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var setUserPasswordResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (setUserPasswordResponseData != null) { d = new SetUserPasswordResponseAllData { setUserPasswordResponseData = setUserPasswordResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } else { d = new SetUserPasswordResponseAllData { }; var r = new SetUserPasswordResponseData(); r.Result = result; d.setUserPasswordResponseData = r; System.Console.WriteLine($"失败设置,收到通知后的主题"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/SetUserPassword_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4025} }; var data = new JObject { { "UserId", userId }, { "Password", password}, { "PassWordTips", passWordTips}, { "LoginToken", loginToken} }; jObject.Add("Data", data); mainGateway.Send("Security/SetUserPassword", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new SetUserPasswordResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/SetUserPassword_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// *新增或重设用户密码(需要管理员权限) /// userId:用户id 如果用户id存在,则修改密码。如果用户id不存在,则为该id新增密码 /// 为0时,自动分配新的用户id。为5时,则修改胁迫密码。取值范围0-5。 /// password:新管理员密码 /// passWordTips:密码提示 /// loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public static async System.Threading.Tasks.Task SetPassWordTipsAsync(int userId, string password, string passWordTips, string loginToken) { return await System.Threading.Tasks.Task.Run(async () => { SetUserPasswordResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new SetUserPasswordResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new SetUserPasswordResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new SetUserPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var securityTemp = new Safeguard() { Time = jobject.Value("Time"), DataID = jobject.Value("Data_ID"), GateWayId = mainGateway.GwId }; var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new SetUserPasswordResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/AddPassWordTips_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var setUserPasswordResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (setUserPasswordResponseData != null) { d = new SetUserPasswordResponseAllData { setUserPasswordResponseData = setUserPasswordResponseData }; } } else { d = new SetUserPasswordResponseAllData { }; var r = new SetUserPasswordResponseData(); r.Result = result; d.setUserPasswordResponseData = r; } } }; mainGateway.Actions += action; try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4037} }; var data = new JObject { { "UserId", userId }, { "Password", password}, { "PassWordTips", passWordTips}, { "LoginToken", loginToken} }; jObject.Add("Data", data); mainGateway.Send("Security/AddPassWordTips", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new SetUserPasswordResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; return d; }); } /// /// 新增或重设用户密码返回的数据,网关反馈信息 /// public SetUserPasswordResponseAllData setUserPasswordResponseAllData; /// /// 新增或重设用户密码返回的数据,网关反馈信息 /// [System.Serializable] public class SetUserPasswordResponseAllData : CommonDevice.ErrorResponCommon { /// /// 修改管理员密码返回的数据 /// public SetUserPasswordResponseData setUserPasswordResponseData; } /// /// 新增或重设用户密码返回的数据 /// public SetUserPasswordResponseData setUserPasswordResponseData; /// /// 新增或重设用户密码返回的数据,网关反馈信息 /// [System.Serializable] public class SetUserPasswordResponseData { /// /// 0:成功 ///1:失败,用户密码数已满(最大4个) ///2:失败,密码长度不正确。 ///3:失败,密码和已存在的用户密码重复,4个用户密码不能相同。 /// public int Result = 999; /// /// 用户id /// public int UserId; /// /// 新密码 ,最大32个字符,至少4个字符。 /// public string password; } #endregion #region 23*删除用户密码. /// /// *删除用户密码(需要管理员权限) /// userId:用户id 如果用户id存在,则修改密码。如果用户id不存在,则为该id新增密码 /// 为0时,自动分配新的用户id。为5时,则修改胁迫密码。取值范围0-5。 /// loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public static async System.Threading.Tasks.Task DelUserPasswordAsync(int userId, string loginToken) { return await System.Threading.Tasks.Task.Run(async () => { DelUserPasswordResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new DelUserPasswordResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new DelUserPasswordResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new DelUserPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new DelUserPasswordResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/DelUserPassword_Respon") { var delUserPasswordResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (delUserPasswordResponseData != null) { d = new DelUserPasswordResponseAllData { delUserPasswordResponseData = delUserPasswordResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new DelUserPasswordResponseAllData { errorMessageBase = "返回数据为空" }; System.Console.WriteLine("返回数据为空"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/DelUserPassword_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4026} }; var data = new JObject { { "UserId", userId }, { "LoginToken", loginToken} }; jObject.Add("Data", data); mainGateway.Send("Security/DelUserPassword", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new DelUserPasswordResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/DelUserPassword_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 删除用户密码返回的数据,网关反馈信息 /// public DelUserPasswordResponseAllData delUserPasswordResponseAllData; /// /// 删除用户密码返回的数据,网关反馈信息 /// [System.Serializable] public class DelUserPasswordResponseAllData : CommonDevice.ErrorResponCommon { /// /// 删除用户密码返回的数据 /// public DelUserPasswordResponseData delUserPasswordResponseData; } /// /// 删除用户密码返回的数据 /// public DelUserPasswordResponseData delUserPasswordResponseData; /// /// 删除用户密码返回的数据,网关反馈信息 /// [System.Serializable] public class DelUserPasswordResponseData { /// /// 0:成功 ///1:失败,用户id不存在。 /// public int Result = 999; /// /// 用户id /// public int UserId; } #endregion //#region 新建或修改防区. ///// ///// 新建或修改防区。 ///// ///// The new zone async. ///// 新建或修改防区的数据 //public static async System.Threading.Tasks.Task AddNewZoneAsync(AddNewZoneData addNewZoneData) //{ // return await System.Threading.Tasks.Task.Run(async () => // { // var d = new AddNewZoneDataResponseAllData { }; // if (ZbGateway.MainGateWay == null) // { // d.errorMessageBase = "当前没有主网关"; // return d; // } // Action 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("Time"), DataID = jobject.Value("Data_ID"), CurrentGateWayId = ZbGateway.MainGateWay.GwId }; // var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); // if (temp == null) // { // d.errorMessageBase = "网关错误回复,且数据是空"; // } // else // { // d.errorResponData = temp; // d.errorMessageBase = ErrorMess(temp.Error); // } // } // if (topic == gatewayID + "/" + "Security/AddNewZone_Respon") // { // var security = new Safeguard() { DataID = jobject.Value("Data_ID"), GateWayId = ZbGateway.MainGateWay.CurrentGateWayId }; // security.addNewZoneDataResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); // if (security.addNewZoneDataResponseData != null) // { // d.addNewZoneDataResponseData = security.addNewZoneDataResponseData; // System.Console.WriteLine($"收到通知后的主题_{ topic}"); // } // else // { // d.errorMessageBase = "网关返回的数据为空"; // } // } // }; // ZbGateway.MainGateWay.Actions += action; // System.Console.WriteLine("Security/AddNewZone_Actions 启动" + System.DateTime.Now.ToString()); // if (addNewZoneData != null) // { // var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4002 } }; // var data = new JObject // { // { "ZoneId", addNewZoneData.ZoneId }, // { "ZoneName", addNewZoneData.ZoneName }, // { "ZoneType", addNewZoneData.ZoneType }, // { "Bypass", addNewZoneData.Bypass }, // { "ElasticBypass", addNewZoneData.ElasticBypass } // }; // jObject.Add("Data", data); // ZbGateway.MainGateWay?.Send(("Security/AddNewZone"), jObject.ToString()); // } // var dateTime = DateTime.Now; // while ((DateTime.Now - dateTime).TotalMilliseconds < 1000) // { // await System.Threading.Tasks.Task.Delay(10); // if (d.addNewZoneDataResponseData != null) // { // break; // } // } // if ((DateTime.Now - dateTime).TotalMilliseconds > 10000) // { // d.errorMessageBase = " 回复超时,请重新操作"; // } // ZbGateway.MainGateWay.Actions -= action; // System.Console.WriteLine("Security/AddNewZone_Actions 退出" + System.DateTime.Now.ToString()); // return d; // }); //} ///// ///// 新建或修改防区返回的数据 ,网关反馈信息 ///// //public AddNewZoneDataResponseAllData addNewZoneDataResponseAllData; ///// ///// 新建或修改防区返回的数据,网关反馈信息 ///// //[System.Serializable] //public class AddNewZoneDataResponseAllData //{ // /// // /// 错误信息 // /// // public string errorMessageBase; // /// // /// 网关信息错误反馈 // /// 当网关接收到客户端信息后,出现以下异常情况将反馈错误。 // /// // public ErrorResponData errorResponData; // /// // ///新建或修改防区返回的数据 // /// // public AddNewZoneDataResponseData addNewZoneDataResponseData; //} ///// ///// 新建或修改防区返回的数据 ///// //public AddNewZoneDataResponseData addNewZoneDataResponseData; ///// ///// 新建或修改防区返回的数据 ///// //[System.Serializable] //public class AddNewZoneDataResponseData //{ // /// // /// 返回结果 // /// 0:添加或修改成功 // /// 1:失败,防区不存在 // /// // //public int Result = 2; // /// // /// 局部设防列表id // /// // public int ZoneId; // /// // /// 防区名称 ,最大32个字符(当Result = 0时才存在) // /// // public string ZoneName; // /// // /// 布防防区类型:(当Result = 0时才存在) // ///当Type=1时,该字段才存在。 // ///1:24小时防区。 // ///2:24小时静音防区。 // ///3:出入防区。 // ///4:内部防区。 // ///5:跟随防区。 // ///6:周界防区。 // ///7:周界延时防区。 // /// // public int ZoneType; // /// // /// 是否允许旁路(当Result = 0时才存在) // ///0:不允许旁路 // ///1:允许旁路 // /// // public int Bypass; // /// // /// 是否允许弹性旁路:(当Result = 0时才存在) // ///0:不允许弹性旁路 // ///1:允许弹性旁路 // /// // public int ElasticBypass; //} ///// ///// 新建或修改防区的数据 ///// //public AddNewZoneData addNewZone; ///// ///// 新建或修改防区的数据 ///// //[System.Serializable] //public class AddNewZoneData //{ // /// // /// 防区id。 // /// 0:0:新增防区 // /// 其他:要修改的防区id // /// // public int ZoneId; // /// // /// 防区名称 ,最大32个字符 // /// // public string ZoneName; // /// // /// 防区类型: // ///当Type=1时,该字段才存在。 // ///1:24小时防区。 // ///2:24小时静音防区。 // ///3:出入防区。 // ///4:内部防区。 // ///5:跟随防区。 // ///6:周界防区。 // ///7:周界延时防区。 // ///如果为24小时(静音)类型防区将自动加入24小时布防模式中,并从自定义模式中清除该防区。如果原来是24小时(静音)类型防区修改为非24小时类型,将原防区将自动从24小时布防模式中清除。 // /// // public int ZoneType; // /// // /// 是否允许旁路 // ///0:不允许旁路 // ///1:允许旁路 // ///若类型为24小时防区或24小时静音防区将不允许旁路,该字段将被忽略。 // /// // public int Bypass; // /// // /// 是否允许弹性旁路: // ///0:不允许弹性旁路 // ///1:允许弹性旁路 // ///若类型为24小时防区或24小时静音防区将不允许弹性旁路,该字段将被忽略。 // /// // public int ElasticBypass; //} //#endregion #region 2 *设备加入防区.; /// /// *设备加入防区(需要管理员权限) /// loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。如果登陆成功,网关将记录该标识,app需要管理员权限的指令都应该带有该标识,网关会根据该标识来判断是否为管理员操作,如果标识错误,将返回“Security/Error_Respon”主题数据。 。 /// /// The device to zone async. /// 设备加入防区的数据 public static async System.Threading.Tasks.Task AddDeviceToZoneAsync(AddDeviceToZoneData addDeviceToZoneData) { return await System.Threading.Tasks.Task.Run(async () => { AddDeviceToZoneResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new AddDeviceToZoneResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new AddDeviceToZoneResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new AddDeviceToZoneResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var securityTemp = new Safeguard() { Time = jobject.Value("Time"), DataID = jobject.Value("Data_ID"), GateWayId = mainGateway.GwId }; var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new AddDeviceToZoneResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/AddEqToZone_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var addDeviceToZoneResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (addDeviceToZoneResponseData != null) { d = new AddDeviceToZoneResponseAllData { addDeviceToPartResponseData = addDeviceToZoneResponseData }; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new AddDeviceToZoneResponseAllData { errorMessageBase = "添加失败" }; } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/AddEqToZone_Actions启动_{System.DateTime.Now.ToString()}"); try { if (addDeviceToZoneData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4003 } }; var deviceList = new JArray { }; foreach (var deviceInfo in addDeviceToZoneData.DeviceList) { var dInfo = new JObject{ { "MacAddr", deviceInfo.MacAddr}, { "Epoint",deviceInfo.Epoint}, { "MomentStatus",deviceInfo.MomentStatus}, { "TriggerZoneStatus",deviceInfo.TriggerZoneStatus} }; deviceList.Add(dInfo); } var data = new JObject { { "ZoneId", addDeviceToZoneData.ZoneId }, { "DeviceList", deviceList}, { "LoginToken", addDeviceToZoneData.LoginToken} }; jObject.Add("Data", data); mainGateway.Send(("Security/AddEqToZone_Actions 启动"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new AddDeviceToZoneResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/AddEqToZone_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 设备加入防区的返回数据 ,网关反馈信息 /// public AddDeviceToZoneResponseAllData addDeviceToPartResponseAllData; /// /// 设备加入防区的返回数据,网关反馈信息 /// [System.Serializable] public class AddDeviceToZoneResponseAllData : CommonDevice.ErrorResponCommon { /// /// 设备加入防区的返回数据 /// public AddDeviceToZoneResponseData addDeviceToPartResponseData; } /// /// 设备加入防区的返回数据 /// public AddDeviceToZoneResponseData addDeviceToZoneResponseData; /// /// 设备加入防区的返回数据 /// [System.Serializable] public class AddDeviceToZoneResponseData { /// /// 返回结果 /// 0:默认 /// 1:添加失败。(局部布防列表id不存在) /// public int Result = 999; /// /// 防区id /// public int ZoneId; /// /// 安防设备列表(Result=0时存在) /// public List DeviceList = new List(); } /// /// 安防设备列表回复的数据 /// [System.Serializable] public class DeviceListResponseObj { /// /// 0:添加成功 ///1:失败,设备不存在。 ///2:失败,设备已经加入了其他防区。 /// public int Status; /// /// 设备mac地址 /// public string MacAddr; /// /// 设备端口号 /// public int Epoint; /// /// 设备上报的状态是否为瞬间状态,用于配合下面的TriggerZoneStatus值使用。 ///0:非瞬间状态,该设备上报的安防状态可持续,直到状态被改变会再次报告安防状态信息。如门磁设备的开状态和关状态(开和关状态是能持续的)。 ///1:表示安防状态为瞬间量,设备警告激活状态才上报安防信息,设备恢复常态不发送通知。如人体红外传感器(当有人时触发警告,但人走了后,不会发送消除警告信息。无法知道人还在不在) /// public int MomentStatus; /// /// 当MomentStatus为0时,安防设备被触发上报安防信息的ZoneStatus值和TriggerZoneStatus进行与运算(&)结果不为0时激活防区警报,为0时解除激活。例如门磁设备,如果有人开门入侵将激活防区报警,可将TriggerZoneStatus设置为17,开门时上报的ZoneStatus值为1,(17 & 1)>0,此时说明有入侵,防区将被激活,发送警告信息到客户端和服务器并执行设定的警戒动作。 /// 当MomentStatus为1时,说明安防设备的激活状态只是瞬间的,只有在上报ZoneStatus值(和TriggerZoneStatus相与不为0时)的瞬间激活,激活后将立即自动恢复为常态。 /// 设置布防时,如果安防设备被触发,防区处于警告状态,要解除激活才能布防成功。如果上面MomentStatus为0,则需要安防设备再次上报的ZoneStatus值和TriggerZoneStatus值进行与运算结果为0才能解除激活状态 。如果MomentStatus为1,则说明设备已经自动恢复常态,布防可以成功。 /// 如门磁设备关门时上报的ZoneStatus值为32,(32&1)=0。则说明门已经关上,防区激活状态将解除,可对防区进行布防。如果MomentStatus为1,则忽略该设备的最近警告状态进行布防。 /// public int TriggerZoneStatus; } /// /// 新建或修改防区的数据 /// public AddDeviceToZoneData addDeviceToZoneData; /// /// 设备加入防区的数据 /// [System.Serializable] public class AddDeviceToZoneData { /// /// 防区id。 ///1:24小时防区。 ///2:24小时静音防区。 ///3:出入防区。 ///4:内部防区。 ///5:周界防区。 /// public int ZoneId; /// /// 安防设备列表 /// public List DeviceList = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } /// /// 安防设备列表数据 /// [System.Serializable] public class DeviceListObj { /// /// 设备mac地址 /// public string MacAddr; /// /// 设备端口号 /// public int Epoint; /// /// 设备上报的状态是否为瞬间状态,用于配合下面的TriggerZoneStatus值使用。 ///0:非瞬间状态,该设备上报的安防状态可持续,直到状态被改变会再次报告安防状态信息。如门磁设备的开状态和关状态(开和关状态是能持续的)。 ///1:表示安防状态为瞬间量,设备警告激活状态才上报安防信息,设备恢复常态不发送通知。如人体红外传感器(当有人时触发警告,但人走了后,不会发送消除警告信息。无法知道人还在不在) /// public int MomentStatus; /// /// /// 当MomentStatus为0时,安防设备被触发上报安防信息的ZoneStatus值和TriggerZoneStatus进行与运算(&)结果不为0时激活防区警报,为0时解除激活。例如门磁设备,如果有人开门入侵将激活防区报警,可将TriggerZoneStatus设置为17,开门时上报的ZoneStatus值为1,(17 & 1)>0,此时说明有入侵,防区将被激活,发送警告信息到客户端和服务器并执行设定的警戒动作。 /// 当MomentStatus为1时,说明安防设备的激活状态只是瞬间的,只有在上报ZoneStatus值(和TriggerZoneStatus相与不为0时)的瞬间激活,激活后将立即自动恢复为常态。 /// 设置布防时,如果安防设备被触发,防区处于警告状态,要解除激活才能布防成功。如果上面MomentStatus为0,则需要安防设备再次上报的ZoneStatus值和TriggerZoneStatus值进行与运算结果为0才能解除激活状态 。如果MomentStatus为1,则说明设备已经自动恢复常态,布防可以成功。 /// 如门磁设备关门时上报的ZoneStatus值为32,(32&1)=0。则说明门已经关上,防区激活状态将解除,可对防区进行布防。如果MomentStatus为1,则忽略该设备的最近警告状态进行布防。 /// public int TriggerZoneStatus; } #endregion #region 3 *新建或修改布防模式; /// /// *新建或修改布防模(需要管理员权限). /// /// The new mode async. /// 新建或修改布防模式的数据. public static async System.Threading.Tasks.Task AddNewModeAsync(AddNewModeData addNewModeData) { return await System.Threading.Tasks.Task.Run(async () => { AddNewModeResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new AddNewModeResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new AddNewModeResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new AddNewModeResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var securityTemp = new Safeguard() { Time = jobject.Value("Time"), DataID = jobject.Value("Data_ID"), GateWayId = mainGateway.GwId }; var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new AddNewModeResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/AddNewMode_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var addNewModeResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (addNewModeResponseData != null) { d = new AddNewModeResponseAllData { addNewModeResponseData = addNewModeResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{ topic}"); } } else { d = new AddNewModeResponseAllData { errorMessageBase = "新建或修改模式失败" }; } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/AddNewMode_Actions 启动" + System.DateTime.Now.ToString()); try { if (addNewModeData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4004 } }; var data = new JObject { { "ModeId", addNewModeData.ModeId }, { "ModeName", addNewModeData.ModeName }, { "AllowDisable", addNewModeData.AllowDisable }, { "LoginToken", addNewModeData.LoginToken } }; jObject.Add("Data", data); mainGateway.Send(("Security/AddNewMode"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new AddNewModeResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/AddNewMode_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 新建或修改防区返回的数据 ,网关反馈信息 /// public AddNewModeResponseAllData addNewModeResponseAllData; /// /// 新建或修改布防模式返回的数据,网关反馈信息 /// [System.Serializable] public class AddNewModeResponseAllData : CommonDevice.ErrorResponCommon { /// ///新建或修改布防模式返回的数据 /// public AddNewModeResponseData addNewModeResponseData; } /// /// 新建或修改布防模式返回的数据 /// public AddNewModeResponseData addNewModeResponseData; /// /// 新建或修改布防模式返回的数据 /// [System.Serializable] public class AddNewModeResponseData { /// /// 返回结果 /// 0:成功,修改或新增成功 ///1:失败,修改的布防模式不存在 ///2:失败,24小时布防模式不允许修改。(当修改ModeId为255时,将返回该错误) /// public int Result = 999; /// /// 布防模式ID /// public int ModeId; /// /// 布防模式名称 ,最大32个字符。 /// public string ModeName; /// /// 允许失能。 ///0:不允许失能。 ///1:允许失能 /// public int AllowDisable; } /// /// 新建或修改布防模式的数据 /// public AddNewModeData addNewModeData; /// /// 新建或修改布防模式的数据 /// [System.Serializable] public class AddNewModeData { /// /// 要修改的布防模式ID。 ///如果为0,则为新增布防模式。 ///系统内置了两种布防模式,分别为在家布防(ModeId为1)、离家布防(ModeId为2)。两种内置模式不可删除。 /// public int ModeId; /// /// 布防模式名称 ,最大32个字符。 ///不需要修改可忽略该字段。 /// public string ModeName; /// /// 允许失能。 ///0:不允许失能。 ///1:允许失能 ///如果不需要修改可忽略该字段。新增布防时,默认为0。 /// public int AllowDisable; /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } #endregion #region 4 *防区加入布防模式. /// /// *防区加入布防模式(需要管理员权限). /// /// The join mode async. /// 防区加入布防模式的数据 public static async System.Threading.Tasks.Task ZoneJoinModeAsync(ZoneJoinModeData zoneJoinModeData) { return await System.Threading.Tasks.Task.Run(async () => { ZoneJoinModeResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new ZoneJoinModeResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new ZoneJoinModeResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new ZoneJoinModeResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new ZoneJoinModeResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/ZoneJoinMode_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); var modeId = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["ModeId"].ToString()); if (result == 0) { var zoneJoinModeResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (zoneJoinModeResponseData != null) { d = new ZoneJoinModeResponseAllData { zoneJoinModeResponseData = zoneJoinModeResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{ topic}"); } } else { d = new ZoneJoinModeResponseAllData { }; var r = new ZoneJoinModeResponseData(); r.Result = result; r.ModeId = modeId; d.zoneJoinModeResponseData = r; System.Console.WriteLine($"UI收到通知后的主题_{ topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/ZoneJoinMode_Actions 启动" + System.DateTime.Now.ToString()); try { if (zoneJoinModeData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4005 } }; var zoneList = new JArray { }; foreach (var a in zoneJoinModeData.ZoneList) { var dInfo = new JObject{ { "ZoneId", a.ZoneId} }; zoneList.Add(dInfo); } var data = new JObject { { "ModeId", zoneJoinModeData.ModeId }, { "ZoneList", zoneList }, { "LoginToken", zoneJoinModeData.LoginToken } }; jObject.Add("Data", data); mainGateway.Send(("Security/ZoneJoinMode"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new ZoneJoinModeResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/ZoneJoinMode_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 防区加入布防模式返回的数据 ,网关反馈信息 /// public ZoneJoinModeResponseAllData zoneJoinModeResponseAllData; /// /// 防区加入布防模式返回的数据,网关反馈信息 /// [System.Serializable] public class ZoneJoinModeResponseAllData : CommonDevice.ErrorResponCommon { /// ///防区加入布防模式返回的数据 /// public ZoneJoinModeResponseData zoneJoinModeResponseData; } /// /// 防区加入布防模式返回的数据 /// public ZoneJoinModeResponseData zoneJoinModeResponseData; /// /// 防区加入布防模式返回的数据 /// [System.Serializable] public class ZoneJoinModeResponseData { /// /// 返回结果 /// 0:默认 /// 1:失败,防区ID不存在。 /// 2:24小时布防模式,不允许主动加入防区。(当ModeId设置为255时,将返回该错误) /// public int Result = 999; /// /// 布防模式ID /// public int ModeId; /// /// 防区列表(当Result = 0时存在。) /// public List ZoneList = new List(); } /// /// 防区列表 /// [System.Serializable] public class ZoneListResponseObj { /// /// 返回结果0:加入成功 ///1:失败,防区不存在 ///2:失败,防区已在模式中存在 ///3:失败,防区为24小时(静音)防区类型。 /// public int Status = 999; /// /// 防区ID /// public int ZoneId; } /// /// 防区加入布防模式的数据 /// public ZoneJoinModeData zoneJoinModeData; /// /// 防区加入布防模式的数据 /// [System.Serializable] public class ZoneJoinModeData { /// /// 布防模式ID。 /// public int ModeId; /// /// 防区列表 /// 不包括24小时防区、和24小时静音防区。24小时防区和24小时静音防区是脱离布防模式不受布撤防影响的运行,不加入任何一种模式。 /// public List ZoneList = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } /// /// 防区列表 /// [System.Serializable] public class ZoneListObj { /// /// 防区ID /// public int ZoneId; } #endregion #region 5 *从布防模式中移除防区. /// /// *从布防模式中移除防区(需要管理员权限). /// /// removeZoneFromModeData:从布防模式中移除防区的数据 /// Remove zone from mode data. public static async System.Threading.Tasks.Task RemoveZoneFromModeAsync(RemoveZoneFromModeData removeZoneFromModeData) { return await System.Threading.Tasks.Task.Run(async () => { RemoveZoneFromModeResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new RemoveZoneFromModeResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new RemoveZoneFromModeResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new RemoveZoneFromModeResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new RemoveZoneFromModeResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/RemoveZoneFromMode_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); var modeId = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["ModeId"].ToString()); if (result == 0) { var removeZoneFromModeResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (removeZoneFromModeResponseData != null) { d = new RemoveZoneFromModeResponseAllData { removeZoneFromModeResponseData = removeZoneFromModeResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{ topic}"); } } else { d = new RemoveZoneFromModeResponseAllData { }; var r = new RemoveZoneFromModeResponseData(); r.ModeId = modeId; r.Result = result; System.Console.WriteLine($"UI收到通知后的主题_{ topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/RemoveZoneFromMode_Actions 启动" + System.DateTime.Now.ToString()); try { if (removeZoneFromModeData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4006 } }; var zoneList = new JArray { }; foreach (var a in removeZoneFromModeData.ZoneList) { var dInfo = new JObject{ { "ZoneId", a.ZoneId} }; zoneList.Add(dInfo); } var data = new JObject { { "ModeId", removeZoneFromModeData.ModeId }, { "ZoneList", zoneList }, { "LoginToken", removeZoneFromModeData.LoginToken } }; jObject.Add("Data", data); mainGateway.Send(("Security/RemoveZoneFromMode"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new RemoveZoneFromModeResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/RemoveZoneFromMode_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 从布防模式中移除防区返回的数据 ,网关反馈信息 /// public RemoveZoneFromModeResponseAllData removeZoneFromModeResponseAllData; /// /// 从布防模式中移除防区返回的数据,网关反馈信息 /// [System.Serializable] public class RemoveZoneFromModeResponseAllData : CommonDevice.ErrorResponCommon { /// ///从布防模式中移除防区返回的数据 /// public RemoveZoneFromModeResponseData removeZoneFromModeResponseData; } /// /// 从布防模式中移除防区返回的数据 /// public RemoveZoneFromModeResponseData removeZoneFromModeResponseData; /// /// 从布防模式中移除防区返回的数据 /// [System.Serializable] public class RemoveZoneFromModeResponseData { /// /// 返回结果 /// 0:默认 /// 1:失败,防区ID不存在。 /// 2:24小时布防模式,不允许主动加入防区。(当ModeId设置为255时,将返回该错误) /// public int Result = 999; /// /// 布防模式ID /// public int ModeId; /// /// 防区列表(当Result = 0时存在。) /// public List ZoneList = new List(); } /// /// 防区列表 /// [System.Serializable] public class RemoveZoneListResponseObj { /// /// 返回结果0:移除成功 ///1:移除失败 /// public int Status; /// /// 防区ID /// public int ZoneId; } /// /// 从布防模式中移除防区 /// public RemoveZoneFromModeData removeZoneFromModeData; /// /// 从布防模式中移除防区 /// [System.Serializable] public class RemoveZoneFromModeData { /// /// 布防模式ID。 /// public int ModeId; /// /// 防区列表 /// 不包括24小时防区、和24小时静音防区。24小时防区和24小时静音防区是脱离布防模式不受布撤防影响的运行,不加入任何一种模式。 /// public List ZoneList = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } #endregion #region 6 *添加模式指示动作; /// /// *安防模式触发动作添加(需要管理员权限). /// /// The scene all info async. /// 安防模式触发动作添加的数据. public static async System.Threading.Tasks.Task AddModeActonAsync(AddModeActionData addModeActonData) { return await System.Threading.Tasks.Task.Run(async () => { AddModeActonResponAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new AddModeActonResponAllData { errorMessageBase = "当前没有主网关" }; return d; } var dateTime = DateTime.Now; Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new AddModeActonResponAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new AddModeActonResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new AddModeActonResponAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/AddModeActon_Respon") { dateTime = DateTime.Now; var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); var modeId = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["ModeId"].ToString()); var actionType = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["ActionType"].ToString()); if (result == 0) { var addModeActonResponData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (addModeActonResponData != null) { d = new AddModeActonResponAllData { addModeActonResponData = addModeActonResponData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } else { d = new AddModeActonResponAllData { }; var r = new AddModeActonResponData(); r.Result = result; r.ModeId = modeId; r.ActionType = actionType; d.addModeActonResponData = r; } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/AddModeActon_Actions 启动" + System.DateTime.Now.ToString()); try { if (addModeActonData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4007 } }; var acList = new JArray { }; foreach (var act in addModeActonData.Actions) { if (act.Type == 0) { var taskList = new JArray { }; foreach (var taskInfo in act.TaskList) { var tInfo = new JObject{ { "TaskType", taskInfo.TaskType}, { "Data1", taskInfo.Data1}, { "Data2",taskInfo.Data2} }; taskList.Add(tInfo); } var a = new JObject { { "Type",act.Type}, { "DeviceAddr", act.DeviceAddr} , { "Epoint",act.Epoint} , { "TaskList", taskList} }; acList.Add(a); } else if (act.Type == 1) { var b = new JObject { { "Type",act.Type}, { "ScenesId", act.ScenesId} }; acList.Add(b); } } var data = new JObject { { "ModeId",addModeActonData.ModeId}, { "ActionType", addModeActonData.ActionType} , { "Actions", acList}, { "LoginToken", addModeActonData.LoginToken} }; jObject.Add("Data", data); mainGateway.Send(("Security/AddModeActon"), jObject.ToString()); } } catch { } while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); } mainGateway.Actions -= action; System.Console.WriteLine("Security/AddModeActon_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 安防模式触发动作添加的返回数据数据,网关反馈信息 /// public AddModeActonResponAllData addModeActonResponAllData; /// /// 安防模式触发动作添加的数据,网关反馈信息 /// [System.Serializable] public class AddModeActonResponAllData : CommonDevice.ErrorResponCommon { /// /// 安防模式触发动作添加的数据 /// public AddModeActonResponData addModeActonResponData; } /// /// 安防模式触发动作添加的回复数据 /// public AddModeActonResponData addModeActonResponData; /// /// 安防模式触发动作添加的回复数据 /// [System.Serializable] public class AddModeActonResponData { /// /// 0:默认 ///1:失败,模式不存在。 /// public int Result = 999; /// /// 要修改的布防模式ID。 /// public int ModeId; /// /// 1:布防成功指示动作 ///2:布防失败指示动作 ///3:撤防成功指示动作 ///4:撤防失败指示动作 ///5:延时防区、周界延时防区被触发进入延时指示动作。如果延时过后还没撤防将触发模式安防动作。 ///6:模式安防动作,安防被最终激活后的报警动作(如延时防区被触发延时过后还没撤防、周界防区被触发、出入防区没触发却触发了内部防区等情况将执行该动作)。 /// public int ActionType; /// /// 布防成功指示动作。 ///如果不需要修改或新增时候可忽略该字段。 /// public List Actions = new List(); } /// /// 布防成功指示动作数据 /// public class ActionsResponseData { /// /// 动作类型 ///0:成功 ///1:失败,设备或场景不存在 /// public int Status = 999; /// /// 动作类型 ///0:节点设备动作 ///1:打开场景 /// public int Type; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 动作参数列表。(当Type=0和Status = 0时存在) /// public List TaskList = new List(); /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; /// /// 设备或场景名称,Status = 0时存在 /// public string ESName; } /// /// 安防模式触发动作添加的数据 /// public AddModeActionData addModeActionData; /// /// 安防模式触发动作添加的数据 /// [System.Serializable] public class AddModeActionData { /// /// 要修改的布防模式ID。 /// public int ModeId; /// /// 1:布防成功指示动作 ///2:布防失败指示动作 ///3:撤防成功指示动作 ///4:撤防失败指示动作 /// public int ActionType; /// /// 布防成功指示动作。 ///如果不需要修改或新增时候可忽略该字段。 /// public List Actions = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } /// /// 布防成功指示动作数据 /// public class ActionsData { /// /// 动作类型 ///0:节点设备动作 ///1:打开场景 /// public int Type = 999; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 动作参数列表。当Type=0时存在 ///同一个设备最多可设置8个动作。 /// public List TaskList = new List(); /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; } /// /// 任务列表中的数据 /// [System.Serializable] public class TaskListInfo { /// /// 任务类型。 ///1:开关 (设备具有开关功能时可用) ///3:亮度调整(设备具有亮度调节功能时可用) ///4:颜色调整 (设备具有颜色调节功能时可用) ///5:恒温器(设备具有恒温器功能时可用) ///6: 窗帘设备(设备具有窗帘功能时可用) ///7:设备identify识别。 ///8:开关报警模式 ///9:squawk command /// public int TaskType; /// /// Data1取值 /// 开关 :Data1(数值): 0关/1开 ///亮度调整 Data1(数值):亮度值 ///颜色调整 Data1(数值):色调 /// 恒温器 Data1(数值): 0加热/1制冷/2自动调节/3 设置工作模式/4 设置加热度数 5/设置制冷度数 6/设置风扇模式 /// 窗帘设备 Data1(数值): 0 打开/ 1关闭/ 2 停止转动/ 4 调整到指定高度/ 5 调整到指定的百分比处位置 / 7 调整到指定倾斜角/ 8 调整到指定的百分比倾斜度 /// 设备identify识别。Data1为identify闪烁闪烁时间(0-65535秒)。 /// 开关报警模式 Data1(数值,4字节整型)第1字节(bit0-bit7)表示报警模式,字节值0:停止蜂鸣器1:盗窃报警 2:火灾报警 3:紧急情况报警 4:警车发出的报警 5:消防车发出的报警 6:备用的报警。第2字节(bit8-bit15)表示是否启用报警灯,字节值 0:不启用 1:启用。第3字节(bit16-bit23)表示报警音量,字节值0:Low,1:Medium,2:high,3:very high。 /// squawk command Data1(数值,4字节整型)第1字节(bit0-bit7)表示报警模式,字节值0:安防系统“布防”音效” ,1:安防系统“撤防”音效。第2字节(bit8-bit15)表示是否启动报警灯,字节值0:不启动,1:启动。第3字节(bit16-bit23)表示报警音量,字节值0:Low ,1:Medium ,2:high ,3: very high。 /// public int Data1; /// /// Data2取值 /// 开关 Data2(数值): 0 /// 亮度调整 Data2(数值): 0 /// 颜色调整 Data2(数值):饱和度 /// 恒温器Data2数值如下: /// 【当Data1=0|1|2时,Data2为要变化的度数,单位:0.1℃ 。】 ///【若Data1=3,Data2为要设定的空调模式(0-9),0:off,1:auto,3:cool, 4:heat ,5:emergency heating, 6:precooling,7:fan only ,8:dry,9:sleep。】 ///【若Data1=4|5,Data2为加热或制冷度数,单位0.01摄氏度。】 ///【若Data1=6,Data2为要设定的风扇模式(0-6),0:off,1:low,2:medium,3:high,4:on,5:auto,6:smart】 ///窗帘设备,Data2数值如下 ///【当Data1=4或7,Data2为调整的高度或倾斜角度 倾斜角度单位为0.1°】。 ///【当Data1=5 或 8,Data2为百分比,0-100表示0%-100%】 ///设备identify识别。Data2(数值): 0 ///开关报警模式 Data2(数值,4字节整型)第1、2字节(bit0-bit15)表示报警时长,字节值 0-65535,单位:秒。第3字节(bit16-bit23)表示闪烁占空比,字节值0-100。第4字节(bit16-bit23)表示报警灯亮度,字节值0:Low ,1:Medium ,2:high ,3: very high。 ///squawk command:Data2(数值): 0 /// /// The type of the task. public int Data2; } #endregion #region 7 *将动作从布防模式中移除. /// /// *将动作从布防模式中移除(需要管理员权限). /// /// The acton from mode async. /// 将动作从布防模式中移除的数据 public static async System.Threading.Tasks.Task RemoveActionFromModeAsync(RemoveActonFromModeData removeActonFromModeData) { return await System.Threading.Tasks.Task.Run(async () => { RemoveActionFromModeAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new RemoveActionFromModeAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new RemoveActionFromModeAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new RemoveActionFromModeAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new RemoveActionFromModeAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/RemoveActonFromMode_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var removeActonFromModeResponData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (removeActonFromModeResponData != null) { d = new RemoveActionFromModeAllData { removeActonFromModeResponData = removeActonFromModeResponData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } else { d = new RemoveActionFromModeAllData { errorMessageBase = "网关返回的数据为空" }; } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/RemoveActonFromMode_Actions 启动" + System.DateTime.Now.ToString()); try { if (removeActonFromModeData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4008 } }; var acList = new JArray { }; foreach (var act in removeActonFromModeData.Actions) { if (act.Type == 0) { var a = new JObject { { "Type",act.Type}, { "DeviceAddr", act.DeviceAddr} , { "Epoint",act.Epoint} }; acList.Add(a); } else if (act.Type == 1) { var b = new JObject { { "Type",act.Type}, { "ScenesId", act.ScenesId} }; acList.Add(b); } } var data = new JObject { { "ModeId",removeActonFromModeData.ModeId}, { "ActionType", removeActonFromModeData.ActionType} , { "Actions", acList}, { "LoginToken", removeActonFromModeData.LoginToken} }; jObject.Add("Data", data); mainGateway.Send(("Security/RemoveActonFromMode"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new RemoveActionFromModeAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/RemoveActonFromMode_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 将动作从布防模式中移除的数据,网关反馈信息 /// public RemoveActionFromModeAllData removeActonFromModeAllData; /// /// 将动作从布防模式中移除的数据,网关反馈信息 /// [System.Serializable] public class RemoveActionFromModeAllData : CommonDevice.ErrorResponCommon { /// /// 将动作从布防模式中移除的回复数据 /// public RemoveActionFromModeResponData removeActonFromModeResponData; } /// /// 将动作从布防模式中移除的回复数据 /// public RemoveActionFromModeResponData removeActonFromModeResponData; /// /// 将动作从布防模式中移除的回复数据 /// [System.Serializable] public class RemoveActionFromModeResponData { /// /// 0:默认 ///1:失败,模式不存在。 /// public int Result = 999; /// /// 模式id /// public int ModeId; /// /// 1:布防成功指示动作 ///2:布防失败指示动作 ///3:撤防成功指示动作 ///4:撤防失败指示动作 /// public int ActionType; /// /// 动作列表 /// public List Actions = new List(); } /// /// 布防成功指示动作数据 /// public class RemoveActionsResponData { /// ///0:成功 ///1:失败,设备或场景不存在 /// public int Status = 999; /// /// 动作类型 ///0:节点设备动作 ///1:场景 /// public int Type; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; } /// /// 将动作从布防模式中移除的数据 /// public RemoveActonFromModeData removeActonFromModeData; /// /// 将动作从布防模式中移除的数据 /// [System.Serializable] public class RemoveActonFromModeData { /// /// 要修改的布防模式ID。 /// 如果为0,则为新增布防模式。 /// public int ModeId; /// /// 1:布防成功指示动作 ///2:布防失败指示动作 ///3:撤防成功指示动作 ///4:撤防失败指示动作 /// public int ActionType; /// /// 动作列表 /// public List Actions = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } /// /// 动作列表的数据 /// public class RemoveActionsData { /// /// 动作类型 ///0:节点设备动作 ///1:打开场景 /// public int Type = 999; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; } #endregion #region 8 获取布防(安防)模式列表.; /// /// 获取布防模式列表.(仅用于主网关接口) /// public static async System.Threading.Tasks.Task GetModeListAsync() { return await System.Threading.Tasks.Task.Run(async () => { GetModeListAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new GetModeListAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new GetModeListAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new GetModeListAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/GetModeList_Repon") { var getModeListData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (getModeListData == null) { d = new GetModeListAllData { errorMessageBase = "网关返回的数据为空" }; } else { d = new GetModeListAllData { getModeListData = getModeListData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/GetModeList_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4009 } }; mainGateway.Send("Security/GetModeList", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new GetModeListAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/GetModeList_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 获取布防模式列表返回的数据,网关反馈信息 /// public GetModeListAllData getModeListAllData; /// /// 获取布防模式列表返回的数据,网关反馈信息 /// [System.Serializable] public class GetModeListAllData : CommonDevice.ErrorResponCommon { /// /// 获取布防模式列表返回的数据 /// public GetModeListData getModeListData; } /// /// 获取布防模式列表返回的数据 /// public GetModeListData getModeListData; /// /// 获取布防模式列表返回的数据 /// [System.Serializable] public class GetModeListData { /// /// 布防模式总数 /// public int ModeSum; /// /// 动作列表 /// public List ModeList = new List(); } /// /// 布防模式列表数据 /// public class ModeListData { /// ///布防模式ID /// public int ModeId; /// /// 布防模式名称 ,最大32个字符 /// public string ModeName; /// /// 允许失能。 ///0:不允许失能。 ///1:允许失能 /// public string AllowDisable; /// /// 模式当前布撤防状态 ///0:撤防 ///1:布防 ///2:使能一次 ///3:失能一次 /// public int Setting; } #endregion #region 9 通过布防模式ID查看模式信息. /// /// 通过布防模式ID查看模式信息.(仅用于主网关接口) /// modeId:布防模式id /// public static async System.Threading.Tasks.Task GetModeInfoByIdAsync(int modeId) { return await System.Threading.Tasks.Task.Run(async () => { GetModeInfoByIdResponAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new GetModeInfoByIdResponAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new GetModeInfoByIdResponAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new GetModeInfoByIdResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/GetModeInfoById_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var getModeInfoByIdResponData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (getModeInfoByIdResponData != null) { d = new GetModeInfoByIdResponAllData { getModeInfoByIdResponData = getModeInfoByIdResponData }; } System.Console.WriteLine("已收到通知返回"); } else { d = new GetModeInfoByIdResponAllData { }; var r = new GetModeInfoByIdResponData(); r.Result = result; d.getModeInfoByIdResponData = r; System.Console.WriteLine("已收到通知返回"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/GetModeInfoById_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4010 } }; var data = new JObject { { "ModeId", modeId } }; jObject.Add("Data", data); mainGateway.Send("Security/GetModeInfoById", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new GetModeInfoByIdResponAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/GetModeInfoById_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 通过布防模式ID查看模式信息的数据,网关反馈信息 /// public GetModeInfoByIdResponAllData getModeInfoByIdResponAllData; /// /// 通过布防模式ID查看模式信息的数据,网关反馈信息 /// [System.Serializable] public class GetModeInfoByIdResponAllData : CommonDevice.ErrorResponCommon { /// /// 通过布防模式ID查看模式信息返回的数据 /// public GetModeInfoByIdResponData getModeInfoByIdResponData; } /// /// 通过布防模式ID查看模式信息返回的数据 /// public GetModeInfoByIdResponData getModeInfoByIdResponData; /// /// 通过布防模式ID查看模式信息返回的数据 /// [System.Serializable] public class GetModeInfoByIdResponData { /// /// 0:默认 ///1:失败,布防模式不存在 /// public int Result = 999; /// /// 布防模式ID /// public int ModeId; /// /// 布防模式名称 ,最大32个字符 /// (Result=0时值有效) /// public string ModeName; /// /// 允许失能。 ///0:不允许失能。 ///1:允许失能 /// (Result=0时值有效) /// public int AllowDisable = 100; /// /// 模式当前布撤防状态 ///0:撤防 ///1:布防 ///2:使能一次 ///3:失能一次 /// (Result=0时值有效) /// public int Setting = 100; /// /// 加入模式的防区数量 /// (Result=0时值有效) /// public int ZoneNum; /// /// 加入成功的防区列表,不包括24小时防区、和24小时静音防区。24小时防区和24小时静音防区是脱离布防模式不受布撤防影响的运行,加入任何一种模式。 /// (Result=0时值有效) /// public List ZoneList = new List(); /// /// 布防成功指示动作。 /// (Result=0时值有效) /// public List ProtectionSucceedActions = new List(); /// /// 布防失败指示动作。 /// (Result=0时值有效) /// public List ProtectionFailActions = new List(); /// /// 撤防成功指示动作。 /// (Result=0时值有效) /// public List WithdrawSucceedActions = new List(); /// /// 撤防失败指示动作。 /// (Result=0时值有效) /// public List WithdrawFailActions = new List(); } /// /// 加入成功的防区列表的数据 /// [System.Serializable] public class ZoneListData { /// /// 防区ID /// public int ZoneId; /// /// 防区名称 /// public string ZoneName; } /// /// 布防成功指示动作数据 /// public class ActionsInfo { /// /// 动作类型 ///0:节点设备动作 ///1:打开场景 /// public int Type = 999; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 动作参数列表。当Type=0时存在 /// public List TaskList = new List(); /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; /// /// 设备或场景名称 /// public string ESName; } #endregion #region 10查看当前正在使用的布防模. /// /// 查看当前正在使用的布防模式.(仅用于主网关接口) /// public static async System.Threading.Tasks.Task GetModeUsingAsync() { return await System.Threading.Tasks.Task.Run(async () => { GetModeUsingResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new GetModeUsingResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new GetModeUsingResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new GetModeUsingResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/GetModeUsing_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var getModeInfoByIdResponData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (getModeInfoByIdResponData != null) { d = new GetModeUsingResponseAllData { getModeUsingResponseData = getModeInfoByIdResponData }; } System.Console.WriteLine("已收到正确的通知返回"); } else { d = new GetModeUsingResponseAllData { }; var r = new GetModeUsingResponseData(); r.Result = result; d.getModeUsingResponseData = r; System.Console.WriteLine("已收到通知返回"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/GetModeUsing_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4011} }; mainGateway.Send("Security/GetModeUsing", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new GetModeUsingResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/GetModeUsing_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 查看当前正在使用的布防模式返回的数据,网关反馈信息 /// public GetModeUsingResponseAllData getModeUsingResponseAllData; /// /// 查看当前正在使用的布防模式返回的数据,网关反馈信息 /// [System.Serializable] public class GetModeUsingResponseAllData : CommonDevice.ErrorResponCommon { /// /// 查看当前正在使用的布防模式返回的数据 /// public GetModeUsingResponseData getModeUsingResponseData; } /// /// 查看当前正在使用的布防模式返回的数据 /// public GetModeUsingResponseData getModeUsingResponseData; /// /// 查看当前正在使用的布防模式返回的数据 /// [System.Serializable] public class GetModeUsingResponseData { /// /// 0:默认 /// 1:系统当前没有进行布防 /// public int Result = 999; /// /// 启用的布防模式id /// public int ModeId; /// /// 模式名称(Result =0时存在) /// public string ModeName; /// /// 设置 (Result = 0时存在) /// 1:永久布防,直到撤防 /// 2:使能一次,触发一次后将撤防。 /// 3:失能一次,第一次被激活不警告不触发动作。 /// public int Setting; } #endregion #region 11布防 ; /// /// 布防 (仅用于主网关接口) /// EnableModeData:布防的数据 /// public static async System.Threading.Tasks.Task EnableModeAsync(EnableModeData enableModeData) { return await System.Threading.Tasks.Task.Run(async () => { EnableModeResponAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new EnableModeResponAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new EnableModeResponAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new EnableModeResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/EnableMode_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); var modeId = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["ModeId"].ToString()); var enableModeResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (enableModeResponseData == null) { d = new EnableModeResponAllData { errorMessageBase = "网关返回的数据为空" }; } else { d = new EnableModeResponAllData { enableModeResponseData = enableModeResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/EnableMode_Actions 启动" + System.DateTime.Now.ToString()); try { if (enableModeData != null) { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4012 } }; var data = new JObject { { "Setting", enableModeData.Setting }, { "ModeId", enableModeData .ModeId}, { "CheckIASStatus", enableModeData.CheckIASStatus}, { "UserPassword", enableModeData .UserPassword } }; jObject.Add("Data", data); mainGateway.Send("Security/EnableMode", jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new EnableModeResponAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/EnableMode_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 布防返回的数据,,网关反馈信息 /// public EnableModeResponAllData enableModeResponAllData; /// /// 布防返回的数据,网关反馈信息 /// [System.Serializable] public class EnableModeResponAllData : CommonDevice.ErrorResponCommon { /// /// 布防返回的数据 /// public EnableModeResponseData enableModeResponseData; } /// /// 布防返回的数据 /// public EnableModeResponseData enableModeResponseData; /// /// 布防返回的数据 /// [System.Serializable] public class EnableModeResponseData { /// /// 0:设置成功 ///1:设置失败,布防模式不存在 ///2:设置失败,用户密码错误。 ///3:布防失败,安防设备未就绪。 ///4:布防失败,有其他布防模式正在启用(只能使用一种布防模式,需将正在启用的布防模式撤防才能布防新模式)。 ///5:失败,模式属性不允许失能(如果新建布防模式时,AllowDisable设置为0,则布防Setting值不能为2或3,否则将报告该错误) /// public int Result = 999; /// /// 启用的布防模式id /// public int ModeId; /// /// 模式名称(Result =0时存在) /// public string ModeName; /// /// 设置 /// 1:永久布防,直到撤防 /// 2:使能一次,触发一次后将撤防。 /// 3:失能一次,第一次被激活不警告不触发动作。 /// public int Setting; /// ///当前正在启用的布防模式ID(当Result = 4时存在。) /// public int ModeIdBeUsing; /// ///未就绪设备的mac地址(当Result =3时存在) /// public string IASMac; /// ///未就绪设备的端口号(当Result = 3时存在。) /// public int IASEpoint; /// ///未就绪设备名称(当Result = 3时存在) /// public string IASName; /// ///设备最近一次上报的安防状态值(当Result=3时存在) /// public int IASStatus; /// ///未就绪设备所在防区(当Result=3时存在) /// public int ZoneId; /// ///未就绪设备所在防区(当Result=3时存在当Result = 3时存在) /// public string ZoneName; } /// /// 布防 /// public EnableModeData enableModeData; /// /// 布防 /// [System.Serializable] public class EnableModeData { /// /// 1;永久布防,直到撤防 ///2:使能一次,触发一次后将撤防。 ///3:失能一次,第一次被激活不警告不触发动作。 /// public int Setting; /// /// 启用的布防模式id /// public int ModeId; /// ///检查防区设备最近上报的安防信息状态进行布防。 ///0:不检查 ///1:检查 /// public int CheckIASStatus; /// ///用户密码,最大32个字符 /// public string UserPassword; } #endregion #region 12撤防.; /// /// 撤防.(仅用于主网关接口) /// public static async System.Threading.Tasks.Task WithdrawModeAsync(string userPassword) { return await System.Threading.Tasks.Task.Run(async () => { WithdrawModeResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new WithdrawModeResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new WithdrawModeResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new WithdrawModeResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/WithdrawMode_Respon") { var withdrawModeResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (withdrawModeResponseData == null) { d = new WithdrawModeResponseAllData { errorMessageBase = "网关返回的数据为空" }; } else { d = new WithdrawModeResponseAllData { withdrawModeResponseData = withdrawModeResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/WithdrawMode_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4013} }; var data = new JObject { { "UserPassword", userPassword} }; jObject.Add("Data", data); mainGateway.Send("Security/WithdrawMode", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new WithdrawModeResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/WithdrawMode_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 撤防返回的数据,网关反馈信息 /// public WithdrawModeResponseAllData withdrawModeResponseAllData; /// /// 撤防返回的数据,网关反馈信息 /// [System.Serializable] public class WithdrawModeResponseAllData : CommonDevice.ErrorResponCommon { /// /// 撤防返回的数据 /// public WithdrawModeResponseData withdrawModeResponseData; } /// /// 撤防返回的数据 /// public WithdrawModeResponseData withdrawModeResponseData; /// /// 撤防返回的数据 /// [System.Serializable] public class WithdrawModeResponseData { /// /// 0:撤防成功。 ///1:失败,当前不存在布防。 ///2:撤防失败,密码错误。 ///3:撤防失败,模式不可撤防。(新建模式时,模式属性设为不可撤防则布防后将不能撤防) /// public int Result = 999; /// /// 被撤防的模式 /// public int ModeId; /// /// 被撤防的模式名称 /// public string ModeName; /// /// 撤防所用的密码类型: ///0:用户密码 ///1:胁迫密码 /// public int PasswordType; } #endregion #region 13删除布防模式. /// /// 删除布防模式(需要管理员权限). /// public static async System.Threading.Tasks.Task RemoveModeAsync(int modeId) { return await System.Threading.Tasks.Task.Run(async () => { RemoveModeResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new RemoveModeResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new RemoveModeResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new RemoveModeResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new RemoveModeResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/RemoveMode_Respon") { var removeModeResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (removeModeResponseData == null) { d = new RemoveModeResponseAllData { errorMessageBase = "网关返回的数据为空" }; } else { d = new RemoveModeResponseAllData { removeModeResponseData = removeModeResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/RemoveMode_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4014} }; var data = new JObject { { "ModeId", modeId} }; jObject.Add("Data", data); mainGateway.Send("Security/RemoveMode", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new RemoveModeResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/RemoveMode_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 删除布防模式返回的数据,网关反馈信息 /// public RemoveModeResponseAllData removeModeResponseAllData; /// /// 删除布防模式返回的数据,网关反馈信息 /// [System.Serializable] public class RemoveModeResponseAllData : CommonDevice.ErrorResponCommon { /// /// 删除布防模式返回的数据 /// public RemoveModeResponseData removeModeResponseData; } /// /// 删除布防模式返回的数据 /// public RemoveModeResponseData removeModeResponseData; /// /// 删除布防模式返回的数据 /// [System.Serializable] public class RemoveModeResponseData { /// /// 0:删除成功。 ///1:失败,不存在该布防模式。 ///2:删除失败,不允许删除。(当ModeId为1或2时,离家布防和在家布防模式不允许删除) /// public int Result = 999; /// /// 模式id /// public int ModeId; /// /// 模式名 (当Result=0时存在)。 /// public string ModeName; /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } #endregion #region *14将设备从防区中移除. /// /// *将设备从防区中移除(需要管理员权限). /// /// The device to zone async. /// 将设备从防区中移除的数据. public static async System.Threading.Tasks.Task RemoveDeviceToZoneAsync(RemoveEqToZoneData removeEqToZoneData) { return await System.Threading.Tasks.Task.Run(async () => { RemoveDeviceToZoneAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new RemoveDeviceToZoneAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new RemoveDeviceToZoneAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new RemoveDeviceToZoneAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new RemoveDeviceToZoneAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/RemoveEqToZone_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var removeDeviceToZoneResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (removeDeviceToZoneResponseData != null) { d = new RemoveDeviceToZoneAllData { removeDeviceToZoneResponseData = removeDeviceToZoneResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } else { d = new RemoveDeviceToZoneAllData { }; var r = new RemoveDeviceToZoneResponseData(); r.Result = result; d.removeDeviceToZoneResponseData = r; System.Console.WriteLine("已收到通知返回"); } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/RemoveEqToZone_Actions启动_{System.DateTime.Now.ToString()}"); try { if (removeEqToZoneData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4016 } }; var deviceList = new JArray { }; foreach (var deviceInfo in removeEqToZoneData.RemoveDeviceList) { var dInfo = new JObject{ { "MacAddr", deviceInfo.MacAddr}, { "Epoint",deviceInfo.Epoint} }; deviceList.Add(dInfo); } var data = new JObject { { "ZoneId", removeEqToZoneData.ZoneId }, { "RemoveDeviceList", deviceList}, { "LoginToken", removeEqToZoneData.LoginToken} }; jObject.Add("Data", data); mainGateway.Send(("Security/RemoveEqToZone_Actions 启动"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new RemoveDeviceToZoneAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/RemoveEqToZone_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 将设备从防区中移除的返回数据 ,网关反馈信息 /// public RemoveDeviceToZoneAllData removeDeviceToZoneAllData; /// /// 将设备从防区中移除的返回数据,网关反馈信息 /// [System.Serializable] public class RemoveDeviceToZoneAllData : CommonDevice.ErrorResponCommon { /// /// 将设备从防区中移除的返回数据 /// public RemoveDeviceToZoneResponseData removeDeviceToZoneResponseData; } /// /// 将设备从防区中移除的返回数据 /// public RemoveDeviceToZoneResponseData removeDeviceToZoneResponseData; /// /// 将设备从防区中移除的返回数据 /// [System.Serializable] public class RemoveDeviceToZoneResponseData { /// /// 返回结果 /// 0:默认 /// 1:添加失败。(局部布防列表id不存在) /// public int Result = 999; /// /// 安防设备列表(Result=0时存在) /// public List RemoveDeviceList = new List(); } /// /// 将设备从防区中移除的数据 /// [System.Serializable] public class RemoveDeviceListResponseObj { /// /// 设备mac地址 /// public string MacAddr; /// /// 设备端口号 /// public int Epoint; /// /// 设备被移除状态 /// public int Status; } /// /// 将设备从防区中移除的数据 /// public RemoveEqToZoneData removeEqToZoneData; /// /// 将设备从防区中移除的数据 /// [System.Serializable] public class RemoveEqToZoneData { /// /// 局部设防列表id /// public int ZoneId; /// /// 安防设备列表 /// public List RemoveDeviceList = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } /// /// 将设备从防区中移除的数据 /// [System.Serializable] public class RemoveDeviceListObj { /// /// 设备mac地址 /// public string MacAddr; /// /// 设备端口号 /// public int Epoint; } #endregion //#region 获取防区信息. ///// ///// 获取防区信息.(仅用于主网关接口) ///// //public static async System.Threading.Tasks.Task GetZoneInfoAsync() //{ // return await System.Threading.Tasks.Task.Run(async () => // { // var d = new GetZoneInfoResponAllData { }; // if (ZbGateway.MainGateWay == null) // { // d.errorMessageBase = "当前没有主网关"; // return d; // } // Action 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("Time"), DataID = jobject.Value("Data_ID"), CurrentGateWayId = ZbGateway.MainGateWay.GwId }; // var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); // if (temp == null) // { // d.errorMessageBase = "网关错误回复,且数据是空"; // } // else // { // d.errorResponData = temp; // d.errorMessageBase = ErrorMess(temp.Error); // } // } // if (topic == gatewayID + "/" + "Security/GetZoneInfo_Respon") // { // var security = new Safeguard() { DataID = jobject.Value("Data_ID"), GateWayId = ZbGateway.MainGateWay.CurrentGateWayId }; // security.getZoneInfoResponData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); // if (security.getZoneInfoResponData == null) // { // d.errorMessageBase = "网关返回的数据为空"; // } // else // { // d.getZoneInfoResponData = security.getZoneInfoResponData; // System.Console.WriteLine($"收到通知后的主题_{topic}"); // } // } // }; // ZbGateway.MainGateWay.Actions += action; // System.Console.WriteLine("Security/GetZoneInfo_Actions 启动" + System.DateTime.Now.ToString()); // var jObject = new Newtonsoft.Json.Linq.JObject() { // { "Cluster_ID", 0 }, // { "Command", 4017 } // }; // ZbGateway.MainGateWay?.Send("Security/GetZoneInfo", jObject.ToString()); // var dateTime = DateTime.Now; // while ((DateTime.Now - dateTime).TotalMilliseconds < 1000) // { // await System.Threading.Tasks.Task.Delay(10); // if (d.getZoneInfoResponData != null) // { // break; // } // } // if ((DateTime.Now - dateTime).TotalMilliseconds > 10000) // { // d.errorMessageBase = " 回复超时,请重新操作"; // } // ZbGateway.MainGateWay.Actions -= action; // System.Console.WriteLine("Security/GetZoneInfo_Actions 退出" + System.DateTime.Now.ToString()); // return d; // }); //} ///// ///// 获取防区信息返回的数据,网关反馈信息 ///// //public GetZoneInfoResponAllData getZoneInfoResponAllData; ///// ///// 获取防区信息返回的数据,网关反馈信息 ///// //[System.Serializable] //public class GetZoneInfoResponAllData //{ // /// // /// 错误信息 // /// // public string errorMessageBase; // /// // /// 网关信息错误反馈 // /// 当网关接收到客户端信息后,出现以下异常情况将反馈错误。 // /// // public ErrorResponData errorResponData; // /// // /// 获取防区信息返回的数据 // /// // public GetZoneInfoResponData getZoneInfoResponData; //} ///// ///// 获取防区信息返回的数据 ///// //public GetZoneInfoResponData getZoneInfoResponData; ///// ///// 获取防区信息返回的数据 ///// //[System.Serializable] //public class GetZoneInfoResponData //{ // /// // /// 防区总数 // /// // public int ZoneNum; // /// // /// 防区信息列表 // /// // public List ZoneList = new List(); //} ///// ///// 防区信息列表数据 ///// //public class ZoneInfoListData //{ // /// // ///局部设防列表id // /// // public int ZoneId; // /// // /// 布防防区名称 ,最大32个字符 // /// // public string ZoneName; // /// // /// 防区类型: // ///1:24小时防区。 // ///2:24小时静音防区。 // ///3:出入防区。 // ///4:内部防区。 // ///5:跟随防区。 // ///6:周界防区。 // ///7:周界延时防区。 // /// // public int ZoneType; // /// // /// 是否允许旁路 // ///0:不允许旁路 // ///1:允许旁路 // ///若类型为24小时防区或24小时静音防区将不允许旁路,该字段将被忽略。 // /// // public int Bypass; // /// // /// 是否允许弹性旁路: // ///0:不允许弹性旁路 // ///1:允许弹性旁路 // ///若类型为24小时防区或24小时静音防区将不允许弹性旁路,该字段将被忽略。 // /// // public int ElasticBypass; //} //#endregion #region 15通过防区ID查看防区设备列表.; /// /// 通过防区ID查看防区设备列表.(仅用于主网关接口) /// zoneId:布防模式id /// public static async System.Threading.Tasks.Task getZoneDeviceListByIdAsync(int zoneId) { return await System.Threading.Tasks.Task.Run(async () => { GetZoneDeviceListByIdResponAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new GetZoneDeviceListByIdResponAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new GetZoneDeviceListByIdResponAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new GetZoneDeviceListByIdResponAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/GetZoneDeviceListById_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var getZoneDeviceListByIdResponData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (getZoneDeviceListByIdResponData != null) { d = new GetZoneDeviceListByIdResponAllData { getZoneDeviceListByIdResponData = getZoneDeviceListByIdResponData }; } System.Console.WriteLine($"UI已收到通知的主题_{topic}"); } else { d = new GetZoneDeviceListByIdResponAllData { }; var r = new GetZoneDeviceListByIdResponData(); r.Result = result; d.getZoneDeviceListByIdResponData = r; System.Console.WriteLine("已收到通知返回"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/GetZoneDeviceListById_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4018 } }; var data = new JObject { { "ZoneId", zoneId } }; jObject.Add("Data", data); mainGateway.Send("Security/GetZoneDeviceListById", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new GetZoneDeviceListByIdResponAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/GetZoneDeviceListById_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 通过防区ID查看防区设备列表的数据,网关反馈信息 /// public GetZoneDeviceListByIdResponAllData getZoneDeviceListByIdResponAllData; /// /// 通过布防模式ID查看模式信息的数据,网关反馈信息 /// [System.Serializable] public class GetZoneDeviceListByIdResponAllData : CommonDevice.ErrorResponCommon { /// /// 通过布防模式ID查看模式信息返回的数据 /// public GetZoneDeviceListByIdResponData getZoneDeviceListByIdResponData; } /// /// 通过防区ID查看防区设备列表返回的数据 /// public GetZoneDeviceListByIdResponData getZoneDeviceListByIdResponData; /// /// 通过防区ID查看防区设备列表返回的数据 /// [System.Serializable] public class GetZoneDeviceListByIdResponData { /// /// 0:默认 ///1:失败,布防模式不存在 /// public int Result = 999; /// /// 防区id ///1:24小时防区。 ///2:24小时静音防区。 ///3:出入防区。 ///4:内部防区。 ///5:周界防区。v /// public int ZoneId; /// /// 防区名称 ,最大32个字符 /// public string ZoneName; /// /// 安防设备列表 /// (Result=0时值有效) /// public List DeviceList = new List(); } /// /// 通过防区ID查看防区设备列表的数据 /// [System.Serializable] public class ZoneDeviceListData { /// /// 设备mac地址 /// public string MacAddr; /// /// 设备端口号 /// public int Epoint; /// /// 设备上报的状态是否为瞬间状态,用于配合下面的TriggerZoneStatus值使用。 ///0:非瞬间状态,该设备上报的安防状态可持续,直到状态被改变会再次报告安防状态信息。如门磁设备的开状态和关状态(开和关状态是能持续的)。 ///1:表示安防状态为瞬间量,设备警告激活状态才上报安防信息,设备恢复常态不发送通知。如人体红外传感器(当有人时触发警告,但人走了后,不会发送消除警告信息。无法知道人还在不在) /// public int MomentStatus; /// /// 当MomentStatus为0时,安防设备被触发上报安防信息的ZoneStatus值和TriggerZoneStatus进行与运算(&)结果不为0时激活防区警报,为0时解除激活。例如门磁设备,如果有人开门入侵将激活防区报警,可将TriggerZoneStatus设置为17,开门时上报的ZoneStatus值为1,(17 & 1)>0,此时说明有入侵,防区将被激活,发送警告信息到客户端和服务器并执行设定的警戒动作。 /// 当MomentStatus为1时,说明安防设备的激活状态只是瞬间的,只有在上报ZoneStatus值(和TriggerZoneStatus相与不为0时)的瞬间激活,激活后将立即自动恢复为常态。 /// 设置布防时,如果安防设备被触发,防区处于警告状态,要解除激活才能布防成功。如果上面MomentStatus为0,则需要安防设备再次上报的ZoneStatus值和TriggerZoneStatus值进行与运算结果为0才能解除激活状态 。如果MomentStatus为1,则说明设备已经自动恢复常态,布防可以成功。 /// 如门磁设备关门时上报的ZoneStatus值为32,(32&1)=0。则说明门已经关上,防区激活状态将解除,可对防区进行布防。如果MomentStatus为1,则忽略该设备的最近警告状态进行布防。 /// public int TriggerZoneStatus; /// /// 是否旁路 ///0:不旁路 ///1:旁路 /// public int IsBypass = 999; } #endregion #region 24*执行安防模式动作. /// /// *执行安防模式动作(需要管理员权限). ///modeId:布防模式ID ///actionType:动作类型 ///1:布防成功指示动作 ///2:布防失败指示动作 ///3:撤防成功指示动作 ///4:撤防失败指示动作 ///loginToken:登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public static async System.Threading.Tasks.Task ActionTestAsync(int modeId, int actionType, string loginToken) { return await System.Threading.Tasks.Task.Run(async () => { ActionTestResponseAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new ActionTestResponseAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new ActionTestResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new ActionTestResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var securityTemp = new Safeguard() { Time = jobject.Value("Time"), DataID = jobject.Value("Data_ID"), GateWayId = mainGateway.GwId }; var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new ActionTestResponseAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/ActionTest_Respon") { var actionTestResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (actionTestResponseData != null) { d = new ActionTestResponseAllData { actionTestResponseData = actionTestResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new ActionTestResponseAllData { errorMessageBase = "网关返回的数据为空" }; System.Console.WriteLine($"回复数据为空"); } } }; mainGateway.Actions += action; System.Console.WriteLine("Security/ActionTest_Actions 启动" + System.DateTime.Now.ToString()); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4027} }; var data = new JObject { { "ModeId", modeId }, { "ActionType", actionType}, { "LoginToken", loginToken} }; jObject.Add("Data", data); mainGateway.Send("Security/ActionTest", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new ActionTestResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine("Security/ActionTest_Actions 退出" + System.DateTime.Now.ToString()); return d; }); } /// /// 执行安防模式动作返回的数据,网关反馈信息 /// public ActionTestResponseAllData actionTestResponseAllData; /// /// 执行安防模式动作返回的数据,网关反馈信息 /// [System.Serializable] public class ActionTestResponseAllData : CommonDevice.ErrorResponCommon { /// /// 执行安防模式动作返回的数据 /// public ActionTestResponseData actionTestResponseData; } /// /// 执行安防模式动作返回的数据 /// public ActionTestResponseData actionTestResponseData; /// /// 执行安防模式动作返回的数据,网关反馈信息 /// [System.Serializable] public class ActionTestResponseData { /// /// 0:成功 ///1:失败,安防模式不存在 /// public int Result = 999; /// /// 安防模式id /// public int ModeId; /// /// 1:布防成功指示动作 ///2:布防失败指示动作。 ///3:撤防成功指示动作。 ///4:撤防失败指示动作 /// public int ActionType; } /// /// 执行安防模式动作(仅用于主网关接口) ///modeId:布防模式ID ///actionType:动作类型 ///1:布防成功指示动作 ///2:布防失败指示动作 ///3:撤防成功指示动作 ///4:撤防失败指示动作 /// public static void ActionTest(int modeId, int actionType) { var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { return; } Action action = (topic, message) => { }; mainGateway.Actions += action; var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4027} }; var data = new JObject { { "ModeId", modeId }, { "ActionType", actionType} }; jObject.Add("Data", data); mainGateway.Send("Security/ActionTest", jObject.ToString()); mainGateway.Actions -= action; } #endregion #region 18防区被触发时报告 /// /// 防区被触发时报告 /// public ZoneTriggerReportData zoneTriggerReportData; /// /// 防区被触发时报告 /// 布防模式下的非旁路防区被触发时将反馈触发信息 /// [System.Serializable] public class ZoneTriggerReportData { /// /// 防区id /// public int ZoneId; /// /// 是否为强迫密码撤防触发静音防区 ///0:不是 ///1:是 /// public int ForceToWithdraw; /// /// 触发设备的mac地址,当ForceToWithdraw为0时存在 /// public string MacAddr; /// /// 触发设备的端口号,当ForceToWithdraw为0时存在 /// public int Epoint; /// ///触发设备上报的ZoneStatus值,当ForceToWithdraw为0时存在 /// public int ZoneStatus; } #endregion #region 19模式安防动作被最终激活时发送报警信息 /// /// 防区被触发时报告 /// public ModeTriggerReportData modeTriggerReportData; /// /// 模式安防动作被最终激活时发送报警信息 /// 如延时防区被触发延时过后还没撤防、周界防区被触发、出入防区没触发却触发了内部防区等情况都将激活模式安防动作,将发送以下给警报。 /// [System.Serializable] public class ModeTriggerReportData { /// /// 当前布防模式id /// public int ModeId; /// /// 报警时最后被激活的防区 /// public string ModeName; /// /// 报警时最后被激活的防区 /// public int ZoneId; /// /// 是否为强迫密码撤防触发静音防区 ///0:不是 ///1:是 /// public int ForceToWithdraw; /// /// 报警设备的mac地址(ForceToWithdraw为0时才存在) /// public string MacAddr; /// /// 报警设备的端口号(ForceToWithdraw为0时才存在) /// public int Epoint; /// /// 报警设备的名称 (ForceToWithdraw为0时才存在) /// public string DeviceName; /// /// 报警设备上报的ZoneStatus值 /// public int ZoneStatus; /// /// 信息推送目标 /// public List PushTarget = new List(); } #endregion #region 25通过外部方式布防撤防成功时报告 /// /// 通过外部方式布防撤防成功时报告 /// public EnOrWithdrawSucceedReportData enOrWithdrawSucceedReportData; /// /// 通过外部方式布防撤防成功时报告 /// 当用户通过外部方式(非app或云端操作,如逻辑触发执行撤防布防,按键操作布防撤防)进行布防撤防成功 /// [System.Serializable] public class EnOrWithdrawSucceedReportData { /// /// 0:布防成功 ///1:撤防成功 /// public int EnOrWithdraw; /// /// 安防模式id。 /// public int ModeId; /// /// 外部布撤防方式: ///0:执行逻辑动作 ///1:按键操作 /// public int OperationWay; } #endregion #region 26*对防区安防设备进行旁路或撤销旁路; /// /// *对防区安防设备进行旁路或撤销旁路(需要管理员权限). /// /// The device to zone async. /// 将设备从防区中移除的数据. public static async System.Threading.Tasks.Task EqByPassAllDataAsync(EqByPassData eqByPassData) { return await System.Threading.Tasks.Task.Run(async () => { EqByPassAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new EqByPassAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new EqByPassAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new EqByPassAllData { errorMessageBase = ErrorMess(temp.Error), errorResponData = temp }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new EqByPassAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/EqByPass_Respon") { var result = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"]["Result"].ToString()); if (result == 0) { var eqByPassResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (eqByPassResponseData != null) { d = new EqByPassAllData { eqByPassResponseData = eqByPassResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } } else { var r = new EqByPassResponseData(); r.Result = result; d = new EqByPassAllData { eqByPassResponseData = r }; System.Console.WriteLine("已收到通知返回"); } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/EqByPass_Actions启动_{System.DateTime.Now.ToString()}"); try { if (eqByPassData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4029 } }; var data = new JObject { { "ZoneId", eqByPassData.ZoneId }, { "MacAddr", eqByPassData.MacAddr }, { "Epoint", eqByPassData.Epoint }, { "IsByPass", eqByPassData.IsByPass}, { "LoginToken", eqByPassData.LoginToken} }; jObject.Add("Data", data); mainGateway.Send(("Security/EqByPass"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new EqByPassAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/EqByPass_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 对防区安防设备进行旁路或撤销旁路的返回数据 ,网关反馈信息 /// public EqByPassAllData eqByPassAllData; /// /// 对防区安防设备进行旁路或撤销旁路的返回数据,网关反馈信息 /// [System.Serializable] public class EqByPassAllData : CommonDevice.ErrorResponCommon { /// /// 对防区安防设备进行旁路或撤销旁路的返回数据 /// public EqByPassResponseData eqByPassResponseData; } /// /// 对防区安防设备进行旁路或撤销旁路的返回数据 /// public EqByPassResponseData eqByPassResponseData; /// /// 对防区安防设备进行旁路或撤销旁路的返回数据 /// [System.Serializable] public class EqByPassResponseData { /// /// 0:成功 ///1:失败,防区不存在 ///2:失败,设备不在防区中 ///3:失败,系统当前处于撤防状态。 /// public int Result = 999; /// /// 防区id。 ///1:24小时防区。 ///2:24小时静音防区。 ///3:出入防区。 ///4:内部防区。 ///5:周界防区。 /// public int ZoneId; /// /// 设备mac地址 /// public string MacAddr; /// /// 设备端口号 /// public int Epoint; /// /// 0:不旁路 ///1:旁路设备 /// public int IsByPass; } /// /// 对防区安防设备进行旁路或撤销旁路的数据 /// public EqByPassData eqByPassData; /// /// 将设备从防区中移除的数据 /// [System.Serializable] public class EqByPassData { /// /// 防区id。 ///1:24小时防区。 ///2:24小时静音防区。 ///3:出入防区。 ///4:内部防区。 ///5:周界防区。 /// public int ZoneId; /// /// 设备mac地址 /// public string MacAddr; /// /// 设备端口号 /// public int Epoint; /// /// 0:不旁路 ///1:旁路设备 /// public int IsByPass = 999; /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } #endregion #region 27*添加防区报警目标; /// /// *添加防区报警目标(需要管理员权限). /// public static async System.Threading.Tasks.Task AddZoneActionAsync(AddZoneActionData addZoneActionData) { return await System.Threading.Tasks.Task.Run(async () => { AddZoneActionAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new AddZoneActionAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new AddZoneActionAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new AddZoneActionAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new AddZoneActionAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/AddZoneAction_Respon") { var addZoneActionResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (addZoneActionResponseData != null) { d = new AddZoneActionAllData { addZoneActionResponseData = addZoneActionResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new AddZoneActionAllData { errorMessageBase = "网关回复数据是空" }; } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/AddZoneAction_Actions启动_{System.DateTime.Now.ToString()}"); try { if (addZoneActionData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4030 } }; var actionsList = new JArray { }; foreach (var act in addZoneActionData.Actions) { if (act.Type == 0) { var taskList = new JArray { }; foreach (var taskInfo in act.TaskList) { var tInfo = new JObject{ { "TaskType", taskInfo.TaskType}, { "Data1", taskInfo.Data1}, { "Data2",taskInfo.Data2} }; taskList.Add(tInfo); } var a = new JObject { { "Type",act.Type}, { "DeviceAddr", act.DeviceAddr} , { "Epoint",act.Epoint} , { "TaskList", taskList} }; actionsList.Add(a); } else if (act.Type == 1) { var b = new JObject { { "Type",act.Type}, { "ScenesId", act.ScenesId} }; actionsList.Add(b); } } var data = new JObject { { "ActionType", addZoneActionData.ActionType }, { "Actions", actionsList}, { "LoginToken", addZoneActionData.LoginToken} }; jObject.Add("Data", data); mainGateway.Send(("Security/AddZoneAction"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new AddZoneActionAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/AddZoneAction_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 添加防区报警目标的返回数据 ,网关反馈信息 /// public AddZoneActionAllData addZoneActionAllData; /// /// 添加防区报警目标的返回数据,网关反馈信息 /// [System.Serializable] public class AddZoneActionAllData : CommonDevice.ErrorResponCommon { /// /// 添加防区报警目标的返回数据 /// public AddZoneActionResponseData addZoneActionResponseData; } /// /// 添加防区报警目标的返回数据 /// public AddZoneActionResponseData addZoneActionResponseData; /// /// 添加防区报警目标的返回数据 /// [System.Serializable] public class AddZoneActionResponseData { /// /// 返回结果 /// 0:默认 /// 1:失败,ActionType不存在 /// public int Result = 999; /// /// 1:24小时防区触发动作。 ///2:24小时静音防区触发动作。 ///3:其他防区(出入防区、内部防区、周界防区)触发动作。 /// public int ActionType; /// /// 报警目标列表 /// public List Actions = new List(); } /// /// 添加防区报警目标的数据 /// [System.Serializable] public class AlarmActionResponseObj { /// /// 0:成功 ///1:失败,设备或场景不存在 /// public string Status; /// /// 动作类型 ///0:节点设备动作 ///1:打开场景 ///2:信息推送 /// public string Type; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 动作参数列表。(当Type=0和Status = 0时存在) /// public List TaskList = new List(); /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; /// /// 设备或场景名称,Status = 0时存在 /// public string ESName; } /// /// 添加防区报警目标的数据 /// public AddZoneActionData addZoneActionData; /// /// 将设备从防区中移除的数据 /// [System.Serializable] public class AddZoneActionData { /// /// 1:24小时防区触发动作。 ///2:24小时静音防区触发动作。 ///3:其他防区(出入防区、内部防区、周界防区)触发动作。 /// public int ActionType; /// /// 报警目标列表 /// public List Actions = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } /// /// 添加防区报警目标的数据 /// [System.Serializable] public class AlarmActionObj { /// /// 动作类型 ///0:节点设备动作 ///1:打开场景 /// public int Type; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 动作参数列表。(当Type=0和Status = 0时存在) /// public List TaskList = new List(); /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; } #endregion #region 28*删除防区报警目; /// /// *删除防区报警目标(需要管理员权限). /// public static async System.Threading.Tasks.Task DelZoneActionAsync(DelZoneActionData delZoneActionData) { return await System.Threading.Tasks.Task.Run(async () => { DelZoneActionResposeAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new DelZoneActionResposeAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new DelZoneActionResposeAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new DelZoneActionResposeAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new DelZoneActionResposeAllData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/DelZoneAction_Respon") { var delZoneActionResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (delZoneActionResponseData != null) { d = new DelZoneActionResposeAllData { delZoneActionResponseData = delZoneActionResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new DelZoneActionResposeAllData { errorMessageBase = "网关回复数据是空" }; } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/DelZoneAction_Actions启动_{System.DateTime.Now.ToString()}"); try { if (delZoneActionData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4031 } }; var actionsList = new JArray { }; foreach (var act in delZoneActionData.Actions) { if (act.Type == 0) { var a = new JObject { { "Type",act.Type}, { "DeviceAddr", act.DeviceAddr} , { "Epoint",act.Epoint} }; actionsList.Add(a); } else if (act.Type == 1) { var b = new JObject { { "Type",act.Type}, { "ScenesId", act.ScenesId} }; actionsList.Add(b); } } var data = new JObject { { "ActionType", delZoneActionData.ActionType }, { "Actions", actionsList}, { "LoginToken", delZoneActionData.LoginToken} }; jObject.Add("Data", data); mainGateway.Send(("Security/DelZoneAction"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new DelZoneActionResposeAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/DelZoneAction_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 删除防区报警目标的返回数据 ,网关反馈信息 /// public DelZoneActionResposeAllData delZoneActionResposeAllData; /// /// 删除防区报警目标的返回数据,网关反馈信息 /// [System.Serializable] public class DelZoneActionResposeAllData : CommonDevice.ErrorResponCommon { /// /// 删除防区报警目标的返回数据 /// public DelZoneActionResponseData delZoneActionResponseData; } /// /// 删除防区报警目标的返回数据 /// public DelZoneActionResponseData delZoneActionResponseData; /// /// 删除防区报警目标的返回数据 /// [System.Serializable] public class DelZoneActionResponseData { /// /// 返回结果 /// 0:成功 /// 1:失败,ActionType不存在 /// public int Result = 999; /// /// 1:24小时防区触发动作。 ///2:24小时静音防区触发动作。 ///3:其他防区(出入防区、内部防区、周界防区)触发动作。 /// public int ActionType; /// /// 报警目标列表 /// public List Actions = new List(); } /// /// 删除防区报警目标的数据 /// [System.Serializable] public class DelAlarmActionResponseObj { /// /// 0:成功 ///1:失败,设备或场景不存在 /// public string Status; /// /// 动作类型 ///0:节点设备动作 ///1:打开场景 /// public string Type; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; } /// /// 删除防区报警目标的数据 /// public DelZoneActionData delZoneActionData; /// /// 删除防区报警目标的数据 /// [System.Serializable] public class DelZoneActionData { /// /// 1:24小时防区触发动作。 ///2:24小时静音防区触发动作。 ///3:其他防区(出入防区、内部防区、周界防区)触发动作。 /// public int ActionType; /// /// 报警目标列表 /// public List Actions = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } /// /// 删除防区报警目标的数据 /// [System.Serializable] public class DelAlarmActionObj { /// /// 动作类型 ///0:节点设备动作 ///1:打开场景 /// public int Type; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; } #endregion #region 29查看防区报警目标; /// /// 查看防区报警目标 /// 1:24小时防区触发动作。 /// 2:24小时静音防区触发动作。 /// 3:其他防区(出入防区、内部防区、周界防区)触发动作。 /// public static async System.Threading.Tasks.Task CatZoneActionAsync(int actionType) { return await System.Threading.Tasks.Task.Run(async () => { CatZoneActionResposeAllData d = null; var mainGateWay = ZbGateway.MainGateWay; if (mainGateWay == null) { d = new CatZoneActionResposeAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new CatZoneActionResposeAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new CatZoneActionResposeAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/CatZoneAction_Respon") { var catZoneActionResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (catZoneActionResponseData != null) { d = new CatZoneActionResposeAllData { catZoneActionResponseData = catZoneActionResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new CatZoneActionResposeAllData { errorMessageBase = "网关回复数据是空" }; } } }; mainGateWay.Actions += action; System.Console.WriteLine($"Security/CatZoneAction_Actions启动_{System.DateTime.Now.ToString()}"); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4032 } }; var data = new JObject { { "ActionType", actionType } }; jObject.Add("Data", data); mainGateWay.Send("Security/CatZoneAction", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new CatZoneActionResposeAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateWay.Actions -= action; System.Console.WriteLine($"Security/CatZoneAction_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 查看防区报警目标的返回数据 ,网关反馈信息 /// public CatZoneActionResposeAllData catZoneActionResposeAllData; /// /// 查看防区报警目标的返回数据,网关反馈信息 /// [System.Serializable] public class CatZoneActionResposeAllData : CommonDevice.ErrorResponCommon { /// /// 查看防区报警目标的返回数据 /// public CatZoneActionResponseData catZoneActionResponseData; } /// /// 查看防区报警目标的返回数据 /// public CatZoneActionResponseData catZoneActionResponseData; /// /// 查看防区报警目标的返回数据 /// [System.Serializable] public class CatZoneActionResponseData { /// /// 返回结果 /// 0:默认 /// 1:失败,ActionType不存在 /// public int Result = 999; /// /// 1:24小时防区触发动作。 ///2:24小时静音防区触发动作。 ///3:其他防区(出入防区、内部防区、周界防区)触发动作。 /// public int ActionType; /// /// 是否禁用信息推送: ///0:不禁用 ///1:禁用 ///当防区的信息推送被禁用时,防区被触发时不会发送18小节的”防区被触发是报告”的主题信息。 /// public int IsDisablePushMessage = 999; /// /// 报警目标列表 /// public List Actions = new List(); } /// /// 查看防区报警目标的数据 /// [System.Serializable] public class CatActionResponseObj { /// /// 动作类型 ///0:节点设备动作 ///1:打开场景 /// public int Type; /// /// 设备mac地址 , ///当Type=0时存在。 /// public string DeviceAddr; /// /// 设备端口号 ///设备端口号 和mac地址共同标识唯一的zigbee设备 数值范围0-255。 当Type=0时存在。 /// public int Epoint; /// /// 动作参数列表。(当Type=0时存在) /// public List TaskList = new List(); /// /// 场景ID 。当Type=1时存在 /// public int ScenesId; /// /// 设备或场景名称(当Type=0 或Type=1时存在。) /// public string ESName; } #endregion #region 30*设置胁迫状态下被通知的联系号码; /// /// *设置胁迫状态下被通知的联系号码(需要管理员权限). /// public static async System.Threading.Tasks.Task SetCoercePhoneNumberAsync(SetCoercePhoneNumberData setCoercePhoneNumberData) { return await System.Threading.Tasks.Task.Run(async () => { SetCoercePhoneNumberAllResponseData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new SetCoercePhoneNumberAllResponseData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new SetCoercePhoneNumberAllResponseData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new SetCoercePhoneNumberAllResponseData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new SetCoercePhoneNumberAllResponseData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/AddZoneAction_Respon") { var setCoercePhoneNumberResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (setCoercePhoneNumberResponseData != null) { d = new SetCoercePhoneNumberAllResponseData { setCoercePhoneNumberResponseData = setCoercePhoneNumberResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new SetCoercePhoneNumberAllResponseData { errorMessageBase = "网关回复数据是空" }; } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/AddZoneAction(设置胁迫状态下的电话号码)_Actions启动_{System.DateTime.Now.ToString()}"); try { if (setCoercePhoneNumberData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4030 } }; var actionsList = new JArray { }; foreach (var act in setCoercePhoneNumberData.Actions) { if (act.Type == 2) { var pushTargetList = new JArray { }; foreach (var pushInfo in act.PushTarget) { var pInfo = new JObject{ { "PushNumber", pushInfo.PushNumber} }; pushTargetList.Add(pInfo); } var c = new JObject { { "Type",act.Type}, { "PushTarget", pushTargetList} }; actionsList.Add(c); } } var data = new JObject { { "ActionType", 253}, { "Actions", actionsList}, { "LoginToken", setCoercePhoneNumberData.LoginToken} }; jObject.Add("Data", data); mainGateway.Send(("Security/AddZoneAction"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new SetCoercePhoneNumberAllResponseData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/AddZoneAction(设置胁迫状态下的电话号码)_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// *设置胁迫状态下被通知的联系号码的备注(需要管理员权限). -2:主网关丢失 /// /// 地区码-联系方式 /// 备注,最大63byte /// public static async System.Threading.Tasks.Task SetCoercePhoneNumberNoteAsync(string strPhone, string strNote) { SetCoercePhoneNumberResponseData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new SetCoercePhoneNumberResponseData(); d.Result = -2; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; if (topic == gatewayID + "/" + "Security/AddPushNumberNote_Respon") { var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); d = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); } }; mainGateway.Actions += action; try { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4038 } }; var data = new JObject { { "ActionType", 253}, { "LoginToken", Shared.Phone.UserCenter.HdlSafeguardLogic.Current.GetLoginToken()}, { "PushNumber", strPhone}, { "PushNumberNote", strNote} }; jObject.Add("Data", data); mainGateway.Send("Security/AddPushNumberNote", jObject.ToString()); } catch { } int timeOut = 0; while (timeOut <= 60) { await System.Threading.Tasks.Task.Delay(50); if (d != null) { break; } timeOut++; } mainGateway.Actions -= action; return d; } /// /// 设置胁迫状态下被通知的联系号码的返回数据 ,网关反馈信息 /// public SetCoercePhoneNumberAllResponseData setCoercePhoneNumberAllResponseData; /// /// 设置胁迫状态下被通知的联系号码的返回数据,网关反馈信息 /// [System.Serializable] public class SetCoercePhoneNumberAllResponseData : CommonDevice.ErrorResponCommon { /// /// 设置胁迫状态下被通知的联系号码的返回数据 /// public SetCoercePhoneNumberResponseData setCoercePhoneNumberResponseData; } /// /// 设置胁迫状态下被通知的联系号码的返回数据 /// public SetCoercePhoneNumberResponseData setCoercePhoneNumberResponseData; /// /// 设置胁迫状态下被通知的联系号码的返回数据 /// [System.Serializable] public class SetCoercePhoneNumberResponseData { /// /// 返回结果 /// 0:默认 /// public int Result = 999; /// /// 类型 /// public int ActionType; /// /// 报警目标列表 /// public List Actions = new List(); } /// /// 设置胁迫状态下被通知的联系号码的数据 /// [System.Serializable] public class PushTargetActionResponseObj { /// /// 动作类型 ///2:信息推送 /// public string Type; /// /// 信息推送目标,当Type=2时存在。 /// public List PushTarget = new List(); } /// /// 任务列表中的数据 /// [System.Serializable] public class PushTargetInfo { /// /// 推送信息的目标手机号码 /// public string PushNumber; /// /// 备注信息 /// public string PushNumberNote; } /// /// 设置胁迫状态下被通知的联系号码的数据 /// public SetCoercePhoneNumberData setCoercePhoneNumberData; /// /// 设置胁迫状态下被通知的联系号码的数据 /// [System.Serializable] public class SetCoercePhoneNumberData { /// /// 动作类型 /// 设置胁迫状态下被通知的联系号码的数据 /// //public int ActionType = 253; /// /// 报警目标列表 /// public List Actions = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } /// /// 设置胁迫状态下被通知的联系号码的数据 /// [System.Serializable] public class PushTargetActionObj { /// /// 动作类型 ///2:信息推送 /// public int Type; /// /// 信息推送目标,当Type=2时存在。 /// public List PushTarget = new List(); } #endregion #region 31*删除胁迫状态下被通知的联系号码; /// /// *删除胁迫状态下被通知的联系号码(需要管理员权限). /// public static async System.Threading.Tasks.Task DelCoercePhoneNumberAsync(DelCoercePhoneNumberData delCoercePhoneNumberData) { return await System.Threading.Tasks.Task.Run(async () => { DelCoercePhoneNumberAllResponseData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new DelCoercePhoneNumberAllResponseData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new DelCoercePhoneNumberAllResponseData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new DelCoercePhoneNumberAllResponseData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); d = new DelCoercePhoneNumberAllResponseData { }; if (temp == null) { d.errorMessageBase = "网关错误回复,且数据是空"; } else { if (temp.Error == 1) { d.errorMessageBase = "网关不是主网关,无法进行该操作。"; } else if (temp.Error == 2) { d.errorMessageBase = "该操作需要安防管理员权限,需先以管理员身份进行登陆。"; } System.Console.WriteLine($"UI收到通知后的主题_{topic}"); d.errorResponData = temp; } } if (topic == gatewayID + "/" + "Security/DelZoneAction_Respon") { var delCoercePhoneNumberResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (delCoercePhoneNumberResponseData != null) { d = new DelCoercePhoneNumberAllResponseData { delCoercePhoneNumberResponseData = delCoercePhoneNumberResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new DelCoercePhoneNumberAllResponseData { errorMessageBase = "网关回复数据是空" }; } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/AddZoneAction(删除胁迫状态下的电话号码)_Actions启动_{System.DateTime.Now.ToString()}"); try { if (delCoercePhoneNumberData != null) { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4031 } }; var actionsList = new JArray { }; foreach (var act in delCoercePhoneNumberData.Actions) { if (act.Type == 2) { var pushTargetList = new JArray { }; foreach (var pushInfo in act.PushTarget) { var pInfo = new JObject{ { "PushNumber", pushInfo.PushNumber} }; pushTargetList.Add(pInfo); } var c = new JObject { { "Type",act.Type}, { "PushTarget", pushTargetList} }; actionsList.Add(c); } } var data = new JObject { { "ActionType", 253}, { "Actions", actionsList}, { "LoginToken", delCoercePhoneNumberData.LoginToken} }; jObject.Add("Data", data); mainGateway.Send(("Security/DelZoneAction"), jObject.ToString()); } } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new DelCoercePhoneNumberAllResponseData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/AddZoneAction(删除胁迫状态下的电话号码)_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 删除胁迫状态下被通知的联系号码的返回数据 ,网关反馈信息 /// public DelCoercePhoneNumberAllResponseData delCoercePhoneNumberAllResponseData; /// /// 删除胁迫状态下被通知的联系号码的返回数据,网关反馈信息 /// [System.Serializable] public class DelCoercePhoneNumberAllResponseData : CommonDevice.ErrorResponCommon { /// /// 删除胁迫状态下被通知的联系号码的返回数据 /// public DelCoercePhoneNumberResponseData delCoercePhoneNumberResponseData; } /// /// 删除胁迫状态下被通知的联系号码的返回数据 /// public DelCoercePhoneNumberResponseData delCoercePhoneNumberResponseData; /// /// 删除胁迫状态下被通知的联系号码的返回数据 /// [System.Serializable] public class DelCoercePhoneNumberResponseData { /// /// 返回结果 /// 0:默认 /// public int Result = 999; /// /// 类型 /// public int ActionType; /// /// 报警目标列表 /// public List Actions = new List(); } /// /// 删除胁迫状态下被通知的联系号码的数据 /// public DelCoercePhoneNumberData delCoercePhoneNumberData; /// /// 删除胁迫状态下被通知的联系号码的数据 /// [System.Serializable] public class DelCoercePhoneNumberData { /// /// 动作类型 /// //public int ActionType = 253; /// /// 报警目标列表 /// public List Actions = new List(); /// /// 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public string LoginToken; } #endregion #region 32查看胁迫状态下被通知的联系人; /// /// 查看胁迫状态下被通知的联系号码 /// public static async System.Threading.Tasks.Task CheckCoercePhoneNumberAsync(int actionType = 253) { return await System.Threading.Tasks.Task.Run(async () => { CheckCoercePhoneNumberAllResponseData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new CheckCoercePhoneNumberAllResponseData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new CheckCoercePhoneNumberAllResponseData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new CheckCoercePhoneNumberAllResponseData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/CatZoneAction_Respon") { var checkCoercePhoneNumberResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (checkCoercePhoneNumberResponseData != null) { d = new CheckCoercePhoneNumberAllResponseData { checkCoercePhoneNumberResponseData = checkCoercePhoneNumberResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new CheckCoercePhoneNumberAllResponseData { errorMessageBase = "网关回复数据是空" }; } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/CatZoneAction(查看胁迫状态下的电话号码)_Actions启动_{System.DateTime.Now.ToString()}"); try { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 4032 } }; var actionsList = new JArray { }; var data = new JObject { { "ActionType", actionType } }; jObject.Add("Data", data); mainGateway.Send(("Security/CatZoneAction"), jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new CheckCoercePhoneNumberAllResponseData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/CatZoneAction(查看胁迫状态下的电话号码)_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 查看胁迫状态下被通知的联系号码的返回数据 ,网关反馈信息 /// public CheckCoercePhoneNumberAllResponseData checkCoercePhoneNumberAllResponseData; /// /// 查看胁迫状态下被通知的联系号码的返回数据,网关反馈信息 /// [System.Serializable] public class CheckCoercePhoneNumberAllResponseData : CommonDevice.ErrorResponCommon { /// /// 查看胁迫状态下被通知的联系号码的返回数据 /// public CheckCoercePhoneNumberResponseData checkCoercePhoneNumberResponseData; } /// /// 查看胁迫状态下被通知的联系号码的返回数据 /// public CheckCoercePhoneNumberResponseData checkCoercePhoneNumberResponseData; /// /// 查看胁迫状态下被通知的联系号码的返回数据 /// [System.Serializable] public class CheckCoercePhoneNumberResponseData { /// /// 返回结果 /// 0:默认 /// 1:失败,ActionType不存在 /// public int Result = 999; /// /// 类型 /// public int ActionType; /// /// 报警目标列表 /// public List Actions = new List(); } #endregion #region 33胁迫密码撤防时短信推送; /// /// 胁迫密码撤防时短信推送 /// 当使用胁迫密码撤防时,网关将发送该信息到云端。(仅向云端发送) /// public CoercedPWDWithdrawReportData coercedPWDWithdrawReportData; /// /// 胁迫密码撤防时短信推送 /// 当用户通过外部方式(非app或云端操作,如逻辑触发执行撤防布防,按键操作布防撤防)进行布防撤防成功 /// [System.Serializable] public class CoercedPWDWithdrawReportData { /// /// 253:胁迫密码撤防触发推送短信 /// public int ActionType; /// /// 报警目标列表 /// public List Actions = new List(); } #endregion #region 34禁用或启用防区被触发时信息推送. /// /// 查看防区报警目标 /// ZoneType:防区ID。 /// 1:24小时防区。 ///2:24小时静音防区。 ///3:其他防区 /// isDisablePushMessage:是否禁用防区被触发时信息推送 ///0:不禁用 ///1:禁用 /// public static async System.Threading.Tasks.Task DisablePushMessageAsync(int zoneType, int isDisablePushMessage) { return await System.Threading.Tasks.Task.Run(async () => { DisablePushMessageResposeAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new DisablePushMessageResposeAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new DisablePushMessageResposeAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new DisablePushMessageResposeAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/DisablePushMessage_Respon") { var disablePushMessageResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (disablePushMessageResponseData != null) { d = new DisablePushMessageResposeAllData { disablePushMessageResponseData = disablePushMessageResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new DisablePushMessageResposeAllData { errorMessageBase = "网关回复数据是空" }; } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/DisablePushMessage_Actions启动_{System.DateTime.Now.ToString()}"); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4034 } }; var data = new JObject { { "ZoneType", zoneType }, { "IsDisablePushMessage", isDisablePushMessage } }; jObject.Add("Data", data); mainGateway.Send(("Security/DisablePushMessage"), jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new DisablePushMessageResposeAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/DisablePushMessage_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 查看防区报警目标的返回数据 ,网关反馈信息 /// public DisablePushMessageResposeAllData disablePushMessageResposeAllData; /// /// 查看防区报警目标的返回数据,网关反馈信息 /// [System.Serializable] public class DisablePushMessageResposeAllData : CommonDevice.ErrorResponCommon { /// /// 查看防区报警目标的返回数据 /// public DisablePushMessageResponseData disablePushMessageResponseData; } /// /// 查看防区报警目标的返回数据 /// public DisablePushMessageResponseData disablePushMessageResponseData; /// /// 查看防区报警目标的返回数据 /// [System.Serializable] public class DisablePushMessageResponseData { /// /// 返回结果 /// 0:正常 /// 1:防区不存在 /// public int Result = 999; /// /// 防区ID /// 1:24小时防区。 ///2:24小时静音防区。 ///其它防区。 /// public int ZoneType; /// /// 是否禁用防区被触发时信息推送 ///0:不禁用 ///1:禁用 /// public int IsDisablePushMessage; } #endregion #region 35 退出管理员登陆(app通过该指令将退出管理员登陆,原来的“LoginToken”字段将失效。) /// /// 退出管理员登陆(app通过该指令将退出管理员登陆,原来的“LoginToken”字段将失效。) ///loginToken: 登陆标识,最大32个字符。由app自动生成的唯一标识。与管理员登陆指令的“LoginToken”一致,否则将返回“Security/Error_Respon”错误。 /// public static async System.Threading.Tasks.Task AdminLogOutAsync(string loginToken) { return await System.Threading.Tasks.Task.Run(async () => { AdminLogOutResposeAllData d = null; var mainGateway = ZbGateway.MainGateWay; if (mainGateway == null) { d = new AdminLogOutResposeAllData { errorMessageBase = "当前没有主网关" }; return d; } Action action = (topic, message) => { var gatewayID = topic.Split('/')[0]; var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); if (topic == gatewayID + "/" + "Error_Respon") { var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (temp == null) { d = new AdminLogOutResposeAllData { errorMessageBase = "网关错误回复,且数据是空" }; } else { d = new AdminLogOutResposeAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; } } if (topic == gatewayID + "/" + "Security/AdminLogOut_Respon") { var adminLogOutResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); if (adminLogOutResponseData != null) { d = new AdminLogOutResposeAllData { adminLogOutResponseData = adminLogOutResponseData }; System.Console.WriteLine($"UI收到通知后的主题_{topic}"); } else { d = new AdminLogOutResposeAllData { errorMessageBase = "网关回复数据是空" }; } } }; mainGateway.Actions += action; System.Console.WriteLine($"Security/AdminLogOut_Actions启动_{System.DateTime.Now.ToString()}"); try { var jObject = new Newtonsoft.Json.Linq.JObject() { { "Cluster_ID", 0 }, { "Command", 4035 } }; var data = new JObject { { "LoginToken", loginToken } }; jObject.Add("Data", data); mainGateway.Send(("Security/AdminLogOut"), jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) { await System.Threading.Tasks.Task.Delay(10); if (d != null) { break; } } if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) { d = new AdminLogOutResposeAllData { errorMessageBase = " 回复超时,请重新操作" }; } mainGateway.Actions -= action; System.Console.WriteLine($"Security/AdminLogOut_Actions 退出_{System.DateTime.Now.ToString()}"); return d; }); } /// /// 退出管理员登陆的返回数据 ,网关反馈信息 /// public DisablePushMessageResposeAllData adminLogOutResposeAllData; /// /// 退出管理员登陆的返回数据,网关反馈信息 /// [System.Serializable] public class AdminLogOutResposeAllData : CommonDevice.ErrorResponCommon { /// /// 退出管理员登陆的返回数据 /// public AdminLogOutResponseData adminLogOutResponseData; } /// /// 退出管理员登陆的返回数据 /// public AdminLogOutResponseData adminLogOutResponseData; /// /// 退出管理员登陆的返回数据 /// [System.Serializable] public class AdminLogOutResponseData { /// /// 返回结果 /// 0:成功 /// 1:错误,不存在该“LoginToken”。 /// public int Result = -1; } #endregion } }