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); }
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); }