/// <summary> /// 获取要分析的数据 /// </summary> /// <param name="sensorResult">传感器采集结果</param> /// <returns>数据列表</returns> public AnalyzingData GetAnalyzingData(SensorAcqResult sensorResult) { var data2Analyze = new AnalyzingData { SensorId = sensorResult.Sensor.SensorID }; var themeColums = sensorResult.Sensor.TableColums.Split(','); List <double?> data = new List <double?>(themeColums.Length); if (sensorResult.Data.ThemeValues.Count() >= themeColums.Length) { for (int i = 0; i < themeColums.Length; i++) { data.Add(sensorResult.Data.ThemeValues[i]); } } else { for (int i = 0; i < themeColums.Length; i++) { if (i > sensorResult.Data.ThemeValues.Count() - 1) { data.Add(0); } else { data.Add(sensorResult.Data.ThemeValues[i]); } } } data2Analyze.Data = data; return(data2Analyze); }
/// <summary> /// 数据分析(默认满分) /// </summary> /// <param name="data"></param> /// <param name="thresholds"></param> public SensorAnalyzeResult AnalyzeSensorData(AnalyzingData data, IList <SensorThreshold> thresholds) { var rslt = new SensorAnalyzeResult(); rslt.SensorId = (int)data.SensorId; rslt.Score = 100; rslt.ThresholdAlarm = null; if (!thresholds.Any() || data.Data == null) { // 未配置阈值,默认以无告警处理 return(rslt); } var sensor = DbAccessor.GetSensorInfo((int)data.SensorId).AsEnumerable().FirstOrDefault(); var sensorData = data.Data; var alarm = new ThresholdAlarm((int)data.SensorId); // 遍历各监测项 for (int i = 0; i < sensorData.Count(); i++) { int itemId = i + 1; var threshold = thresholds.FirstOrDefault(t => t.ItemId == itemId); if (threshold != null) { var itemName = this.GetItemName(sensor, itemId); var totalLvl = threshold.LevelNumber; // 查询落在哪个阈值区域 foreach (var sensorThreshold in threshold.Thresholds) { if (sensorData[i] >= sensorThreshold.Down && sensorData[i] <= sensorThreshold.Up) { rslt.Score -= (int)((1 - (double)sensorThreshold.Level / totalLvl) / sensorData.Count * 100); var alarmDetail = new ThresholdAlarmDetail(itemName, sensorThreshold.Level); alarm.AlarmDetails.Add(alarmDetail); break; } } } } if (alarm.AlarmDetails.Count > 0) { rslt.ThresholdAlarm = alarm; } return(rslt); }
public MovingAverageConvergenceDivergence(AnalyzingData analyzingData) { this.analyzingData = analyzingData; }
public void TestAnalyzeSensorData() { DataAnalyzer da = new DataAnalyzer(); var analyzingData = new AnalyzingData { SensorId = 17, Data = new double?[] { 1, 2, 3 } }; var thresholds = new List <SensorThreshold>(); var act0 = da.AnalyzeSensorData(analyzingData, thresholds); Assert.AreEqual(100, act0.Score); Assert.IsNull(act0.ThresholdAlarm); thresholds.Add( new SensorThreshold { SensorId = 17, ItemId = 1, LevelNumber = 3, Thresholds = new List <Threshold> { new Threshold { Level = 1, Down = 1.5, Up = double.MaxValue }, new Threshold { Level = 2, Down = 0.8, Up = 1.5 }, new Threshold { Level = 3, Down = 0.5, Up = 0.8 } } }); var act1 = da.AnalyzeSensorData(analyzingData, thresholds); Assert.AreEqual(100 - (int)((1 - (double)2 / 3) / 3 * 100), act1.Score); Assert.AreEqual(1, act1.ThresholdAlarm.AlarmDetails.Count); Console.WriteLine(act1.ThresholdAlarm); thresholds.Add( new SensorThreshold { SensorId = 17, ItemId = 2, LevelNumber = 4, Thresholds = new List <Threshold> { new Threshold { Level = 1, Down = 1.5, Up = double.MaxValue }, new Threshold { Level = 2, Down = 0.8, Up = 1 }, new Threshold { Level = 3, Down = 0.5, Up = 0.8 }, new Threshold { Level = 4, Down = 0.3, Up = 0.5 } } }); var act2 = da.AnalyzeSensorData(analyzingData, thresholds); Assert.AreEqual( 100 - (int)((1 - (double)2 / 3) / 3 * 100) - (int)((1 - (double)1 / 4) / 3 * 100), act2.Score); Assert.AreEqual(2, act2.ThresholdAlarm.AlarmDetails.Count); Console.WriteLine(act2.ThresholdAlarm); }
public LoadAppData(AnalyzingData analyzingData) : this() { this.analyzingData = analyzingData; }
public OshIndicaror(AnalyzingData analyzingData) { this.analyzingData = analyzingData; }
public RsiIndicator(AnalyzingData analyzingData) { this.analyzingData = analyzingData; }