public GetGroupedSensorDataResponse GetData(GetGroupedSensorDataRequest request)
        {
            var sensorIds = context.Users.Where(x => x.Login == request.UserName)
                            .SelectMany(x => x.Devices
                                        .SelectMany(y => y.Sensors.Select(z => z.Id))).ToArray();
            var data = context.SensorDataView
                       .Where(x => x.EventDateTime >= request.FromDate && x.EventDateTime <= request.ToDate &&
                              sensorIds.Contains(x.SensorId))
                       .AsNoTracking();

            if (request.FilterByTime == FilterByTime.Day)
            {
                data = data.Where(x => x.time >= Constants.SunRize && x.time < Constants.SunSet);
            }
            else if (request.FilterByTime == FilterByTime.Night)
            {
                data = data.Where(x => x.time >= Constants.SunSet && x.time < Constants.SunRize);
            }


            var grouped = GroupSensorDataQuery(data, request.GroupByTime)
                          .ToList();

            var dates = grouped.Select(x => x.EventTime).Distinct().ToList();

            EnrichWithEmptyPoints(grouped, dates, sensorIds);

            var lables = context.Sensors.Where(x => sensorIds.Contains(x.Id))
                         .Select(x => new
            {
                SensorId   = x.Id,
                DeviceName = x.Device.Name,
                SensorName = x.Name,
                Dimension  = x.SensorType.Dimension
            })
                         .ToDictionary(x => x.SensorId, x =>
                                       NameHelper.GetDataChartLineName(x.DeviceName, x.SensorName, x.Dimension)
                                       );

            var response = new GetGroupedSensorDataResponse
            {
                GroupedData    = grouped.OrderBy(x => x.EventTime),
                SensorIdLabels = lables
            };

            return(response);
        }
Example #2
0
        public static SensorDataViewModel GetDataSets(GetGroupedSensorDataResponse gropedData)
        {
            var timeStamps = gropedData.GroupedData.Select(x => x.EventTime.ToString()).Distinct().ToArray();
            var dataSets   = gropedData.GroupedData
                             .GroupBy(x => x.SensorId)
                             .Select(x => new DataSet
            {
                Data             = x.Select(y => (float?)y.AverageValue).ToArray(),
                Label            = gropedData.SensorIdLabels[x.Key],
                LineColor        = GetColor(gropedData.SensorIdLabels[x.Key]),
                PointBorderColor = GetColor(gropedData.SensorIdLabels[x.Key])
            }).ToArray();

            var model = new SensorDataViewModel
            {
                Timestamps = timeStamps,
                DataSets   = dataSets
            };

            return(model);
        }