/// <summary> /// 添加选区告警 /// </summary> /// <param name="selection">选区</param> /// <param name="alarm">告警</param> private void AddAlarm(Models.Selections.Selection selection, Models.Alarm alarm) { var data = new Repository.Entities.Alarm() { cellName = cell.cell.name, selectionName = selection.Entity.name, startTime = DateTime.Now, // AlarmType = alarm.type, // TemperatureType = alarm.temperatureType, // Alarmlevel = alarm.level, detail = "", imageUrl = "", temperatureUrl = "", videoUrl = "", // IrCameraParameters = irCameraParameters }; Repository.Repository.AddAlarm(data); }
/// <summary> /// 添加选区告警 /// </summary> /// <param name="selection">选区</param> /// <param name="alarm">告警</param> private void AddAlarm(Models.Selections.Selection selection, Models.Alarm alarm) { var data = new Repository.Entities.Alarm() { cellName = service.cell.name, selectionName = selection.Entity.name, startTime = DateTime.Now, alarmType = alarm.type, temperatureType = alarm.temperatureType, level = alarm.level, detail = "", imageUrl = "", temperatureUrl = "", videoUrl = "", irCameraParameters = irCameraParameters }; using var db = new Repository.Repository.RepositoyContext(); db.AddAlarm(data); }
/// <summary> /// 添加选区告警 /// </summary> /// <param name="selection">选区</param> /// <param name="alarm">告警</param> private void AddAlarm(Models.Selections.Selection selection, Models.Alarm alarm) { // TODO: 触发告警录像 var data = new Alarm() { cellName = cell.cell.name, selectionName = selection?.Entity.name ?? null, startTime = DateTime.Now, type = alarm.type, temperatureType = alarm.temperatureType, level = alarm.level, area = JsonUtils.ObjectToJson(alarm.area), point = JsonUtils.ObjectToJson(alarm.point), detail = alarm.detail, solved = false, temperatureUrl = Repository.Repository.SaveAlarmTemperature(alarm.temperature), irImageUrl = Repository.Repository.SaveYV12Image(alarm.irImage), imageUrl = Repository.Repository.SaveYV12Image(alarm.image), videoUrl = null, irCameraParameters = JsonUtils.ObjectToJson(irCameraParameters) }; if (!Repository.Repository.AddAlarm(data)) { alarms.Enqueue(alarm); } WebMethod.AddAlarm(new WebMethod.Alarm() { serialNumber = configuration.information.clientId, datetime = alarm.startTime.ToString(), image = ImageUtils.ImageFileToBase64(data.imageUrl), irImage = ImageUtils.ImageFileToBase64(data.irImageUrl), temperature = ImageUtils.ImageFileToBase64(data.temperatureUrl), data = alarm.detail }); }
/// <summary> /// 检查选区告警 /// </summary> /// <param name="selection">选区</param> /// <param name="configuration">告警配置</param> private void CheckSelectionAlarm(Models.Selections.Selection selection, Repository.Entities.Alarm.AlarmConfiguration configuration) { float temperture; if (configuration.temperatureType == Repository.Entities.Selections.TemperatureType.min) { temperture = selection.minTemperature; } else if (configuration.temperatureType == Repository.Entities.Selections.TemperatureType.max) { temperture = selection.minTemperature; } else if (configuration.temperatureType == Repository.Entities.Selections.TemperatureType.average) { temperture = selection.averageTemperature; } else { return; } var alarm = selection.alarms.First(a => a.temperatureType == configuration.temperatureType); if (alarm == null) { return; } var level = alarm.level; alarm.temperatures.Enqueue(temperture); // TODO: 通过算法计算温度 if (configuration.type == Repository.Entities.Alarm.AlarmType.High) { if (temperture >= configuration.criticalThreshold) { alarm.level = Repository.Entities.Alarm.Level.Critical; } else if (temperture >= configuration.seriousThreshold) { alarm.level = Repository.Entities.Alarm.Level.Serious; } else if (temperture >= configuration.generalThreshold) { alarm.level = Repository.Entities.Alarm.Level.General; } else { alarm.level = Repository.Entities.Alarm.Level.None; } } else if (configuration.type == Repository.Entities.Alarm.AlarmType.Low) { if (temperture <= configuration.criticalThreshold) { alarm.level = Repository.Entities.Alarm.Level.Critical; } else if (temperture <= configuration.seriousThreshold) { alarm.level = Repository.Entities.Alarm.Level.Serious; } else if (temperture <= configuration.generalThreshold) { alarm.level = Repository.Entities.Alarm.Level.General; } else { alarm.level = Repository.Entities.Alarm.Level.None; } } if (level != alarm.level) { if (level == Repository.Entities.Alarm.Level.None) { // 启动告警保存数据 alarm.temperature = Arrays.Clone(this.temperature, alarm.temperature, sizeof(float)); alarm.irImage = Arrays.Clone(this.irImage, alarm.irImage, sizeof(byte)); alarm.image = Arrays.Clone(this.image, alarm.image, sizeof(byte)); } else { // TODO: 结束告警停止告警自动录像 } // 添加选区告警 AddAlarm(selection, alarm); } }