Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }