コード例 #1
0
        public async Task <StationGraphDto> StationGraphData(int stationId, int variableId, DateTime?date, bool isMetricUnits)
        {
            StationGraphDto stationGraphDto = new StationGraphDto {
                Title      = "24 hour graph of Air Temperature at 1.5m (4.92ft)",
                YAxisTitle = "Degrees Fahrenheit",
                Series     = new List <StationGraphSeriesDto> {
                    new StationGraphSeriesDto {
                        Name      = "Temperature",
                        LineWidth = 0.5,
                        Data      = new List <List <double> >()
                    }
                }
            };

            DateTime dateStart   = new DateTime(2019, 11, 1, 0, 0, 0);
            DateTime dateToReach = new DateTime(2019, 11, 2, 0, 0, 0);

            Random random = new Random();

            double i = 0.1;

            while (dateStart < dateToReach)
            {
                stationGraphDto.Series[0].Data.Add(new List <double>()
                {
                    (double)new DateTimeOffset(dateStart.ToUniversalTime()).ToUnixTimeMilliseconds(),
                    75 + i
                });
                dateStart = dateStart.AddMinutes(1);

                i += 0.1;

                if (i > 25)
                {
                    i = 15;
                }
            }

            return(stationGraphDto);
        }
コード例 #2
0
        /// <summary>
        /// Gets data for station info displays.
        /// </summary>
        /// <param name="stationId">Station Id filter</param>
        /// <param name="variableId">Variable Id filter</param>
        /// <param name="date">Timestamp filter</param>
        /// <param name="isMetricUnits">Returns data in metric units if true, english units if false</param>
        /// <returns>A StationGraphDto for a station</returns>
        public async Task <StationGraphDto> StationGraphData(int stationId, int variableId, DateTime?date, bool isMetricUnits)
        {
            // Get the VariableDescription with the VariableType
            var variableDescription = await _dbContext.VariableDescription
                                      .AsNoTracking()
                                      .Include(x => x.VariableType)
                                      .Where(x => x.Id == variableId)
                                      .SingleAsync();

            // Build the StationGraphDto
            var stationGraphDto = new StationGraphDto
            {
                Title      = "24 hour graph of " + variableDescription.VariableDescription1,
                YAxisTitle = isMetricUnits ? variableDescription.VariableType.MetricUnit : variableDescription.VariableType.EnglishUnit,
                Series     = new List <StationGraphSeriesDto> {
                    new StationGraphSeriesDto {
                        Name      = variableDescription.VariableType.VariableType1.Replace("_", " "),
                        LineWidth = 1
                    }
                }
            };

            // Get the first datetime data entry for the station
            stationGraphDto.FirstDateTimeEntry = await _dbContext.StationData
                                                 .AsNoTracking()
                                                 .Where(x => x.Station.Id == stationId)
                                                 .OrderBy(x => x.Ts)
                                                 .Select(x => x.Ts)
                                                 .FirstOrDefaultAsync();

            // Get the last datetime data entry for the station
            stationGraphDto.LastDateTimeEntry = await _dbContext.StationData
                                                .AsNoTracking()
                                                .Where(x => x.Station.Id == stationId)
                                                .OrderByDescending(x => x.Ts)
                                                .Select(x => x.Ts)
                                                .FirstOrDefaultAsync();

            // Set first and last datetime entries null if defaulted
            if (stationGraphDto.FirstDateTimeEntry == DateTime.MinValue)
            {
                stationGraphDto.FirstDateTimeEntry = null;
            }
            // Set first and last datetime entries null if defaulted
            if (stationGraphDto.LastDateTimeEntry == DateTime.MinValue)
            {
                stationGraphDto.LastDateTimeEntry = null;
            }

            // Default date to LastDateTimeEntry
            if (!date.HasValue)
            {
                date = stationGraphDto.LastDateTimeEntry;
            }

            // Get the VariableEnum and VariableTypeEnum values based on the Variable
            // Retrive the data entries for the station and variable in a timespan of 24 hours from the date
            if (date != null)
            {
                if (System.Enum.TryParse(variableDescription.VariableName, out VariableEnum variableEnum))
                {
                    if (System.Enum.TryParse(variableDescription.VariableType.VariableType1, out VariableTypeEnum variableTypeEnum))
                    {
                        stationGraphDto.Series[0].Data = await _dbContext.StationData
                                                         .AsNoTracking()
                                                         .Where(x => x.Ts >= date.Value.Date && x.Ts < date.Value.Date.AddDays(1))
                                                         .Where(x => x.Station.Id == stationId)
                                                         .OrderBy(x => x.Ts)
                                                         .Select(x => new List <double>()
                        {
                            (double)new DateTimeOffset(x.Ts).ToUnixTimeMilliseconds(),
                            x.ValueForVariable(isMetricUnits, false, variableTypeEnum, variableEnum) ?? 0
                        })
                                                         .ToListAsync();
                    }
                }
            }

            return(stationGraphDto);
        }