public async Task <IViewComponentResult> InvokeAsync(int sensor) { var dbData = await _context.Sensors.FindAsync(sensor); var model = _mapper.Map <SensorDetailViewModel>(dbData); var now = DateTime.Now; model.ActualValue = await _context.SensorData .Where(x => x.SensorId == sensor) .OrderByDescending(x => x.Timestamp) .Take(1) .Select(x => new SensorDataViewModel(sensor, x.Timestamp, x.Value)) .FirstOrDefaultAsync(); model.TodayMin = await _context.SensorData .Where(x => x.SensorId == sensor && x.Timestamp >= now.Date && x.Timestamp < now.Date.AddDays(1)) .OrderBy(x => x.Value) .Take(1) .Select(x => new SensorDataViewModel(sensor, x.Timestamp, x.Value)) .FirstOrDefaultAsync(); model.TodayMax = await _context.SensorData .Where(x => x.SensorId == sensor && x.Timestamp >= now.Date && x.Timestamp < now.Date.AddDays(1)) .OrderByDescending(x => x.Value) .Take(1) .Select(x => new SensorDataViewModel(sensor, x.Timestamp, x.Value)) .FirstOrDefaultAsync(); model.LastConnection = await _context.SensorData .Where(x => x.SensorId == sensor) .MaxAsync(x => (DateTime?)x.Timestamp) ?? DateTime.MinValue; model.ChartFrom = now.AddHours(-6); model.ChartTo = now; var avg = await _context.SensorData .Where(x => x.SensorId == sensor) .OrderByDescending(x => x.Timestamp) .Take(3) .AverageAsync(x => (float?)x.Value) ?? 0; model.Trend = TrendExtensions.GetTrend(model.ActualValue?.Value ?? 0, avg); return(View("~/Views/Sensors/Components/SensorDataDetailComponent.cshtml", model)); }
public async Task <IViewComponentResult> InvokeAsync() { var dbData = await _context .Sensors .Select(s => new { Sensor = s, ActualValue = s.Data.OrderByDescending(x => x.Timestamp).FirstOrDefault(), Last3 = s.Data.OrderByDescending(x => x.Timestamp).Take(3), }) .ToListAsync(); var models = dbData.Select(d => _mapper.Map <SensorDetailViewModel>(d.Sensor)).ToList(); for (int i = 0; i < dbData.Count(); i++) { models[i].ActualValue = _mapper.Map <SensorDataViewModel>(dbData[i].ActualValue); models[i].Trend = TrendExtensions.GetTrend(models[i].ActualValue?.Value ?? 0, dbData[i].Last3.Average(x => (float?)x.Value) ?? 0); } return(View("~/Views/Sensors/Components/SensorsOverviewComponent.cshtml", models)); }