Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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
            });
        }
Example #4
0
        /// <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);
            }
        }