Пример #1
0
        public async Task <AlignedTripData> GetTripDataAligned(Guid deviceId, PrimitiveDataPoints dataPoints, DateTimeOffset?start = null, DateTimeOffset?end = null, string interval = "1m", CancellationToken cancellationToken = default(CancellationToken))
        {
            var data = await GetTripData(deviceId, dataPoints, start, end, interval, cancellationToken);

            var aligned = new AlignedTripData()
            {
                DeviceId            = deviceId,
                Start               = start.Value,
                End                 = end.Value,
                PrimitiveDataPoints = dataPoints,
                AlignedDataPoints   = new List <TripDataPoint>()
            };

            if (dataPoints.HasFlag(PrimitiveDataPoints.Voltage))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.Voltage, PrimitiveDataPoints.Voltage);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.CoolantTemp))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.CoolantTemp, PrimitiveDataPoints.CoolantTemp);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.EngineLoad))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.EngineLoad, PrimitiveDataPoints.EngineLoad);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.FuelLevel))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.FuelLevel, PrimitiveDataPoints.FuelLevel);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.FuelRate))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.FuelRate, PrimitiveDataPoints.FuelRate);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.IntakeTemp))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.IntakeTemp, PrimitiveDataPoints.IntakeTemp);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.Position))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.Position, PrimitiveDataPoints.Position);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.RpiTemperature))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.RpiTemperature, PrimitiveDataPoints.RpiTemperature);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.Speed))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.Speed, PrimitiveDataPoints.Speed);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.AccelerometerX))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.AccelerometerX, PrimitiveDataPoints.AccelerometerX);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.AccelerometerY))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.AccelerometerY, PrimitiveDataPoints.AccelerometerY);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.AccelerometerZ))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.AccelerometerZ, PrimitiveDataPoints.AccelerometerZ);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.Altitude))
            {
                aligned.AlignedDataPoints = AlignData(aligned.AlignedDataPoints, data.Altitude, PrimitiveDataPoints.Altitude);
            }
            return(aligned);
        }
Пример #2
0
        private List <TripDataPoint> AlignData(List <TripDataPoint> first, IReadOnlyCollection <StorageDataResponse> second, PrimitiveDataPoints dataPoint)
        {
            if (first == null)
            {
                first = new List <TripDataPoint>();
            }

            int threshold = 20;

            foreach (var newPoint in second)
            {
                var existing = (from f in first where Math.Abs((f.Timestamp - newPoint.Ts).TotalSeconds) < threshold select f)?.FirstOrDefault();
                if (existing == null)
                {
                    //datapoint isnt there yet, add it
                    existing = new TripDataPoint()
                    {
                        Timestamp = newPoint.Ts
                    };
                    first.Add(existing);
                }
                else
                {
                    if (dataPoint == PrimitiveDataPoints.CoolantTemp)
                    {
                        existing.CoolantTemp = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.EngineLoad)
                    {
                        existing.EngineLoad = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.FuelLevel)
                    {
                        existing.FuelLevel = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.FuelRate)
                    {
                        existing.FuelRate = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.IntakeTemp)
                    {
                        existing.IntakeTemp = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.Position)
                    {
                        existing.Position = newPoint.Location;
                    }
                    if (dataPoint == PrimitiveDataPoints.RpiTemperature)
                    {
                        existing.RpiTemperature = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.Speed)
                    {
                        existing.Speed = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.Voltage)
                    {
                        existing.Voltage = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.AccelerometerX)
                    {
                        existing.AccelerometerX = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.AccelerometerY)
                    {
                        existing.AccelerometerY = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.AccelerometerZ)
                    {
                        existing.AccelerometerZ = newPoint.Value;
                    }
                    if (dataPoint == PrimitiveDataPoints.Altitude)
                    {
                        existing.Altitude = newPoint.Value;
                    }
                }
            }

            first = PolyFill(first.OrderBy(t => t.Timestamp));
            first = PolyFill(first.OrderByDescending(t => t.Timestamp));
            return(first);
        }
Пример #3
0
        public async Task <TripData> GetTripData(Guid deviceId, PrimitiveDataPoints dataPoints, DateTimeOffset?start = null, DateTimeOffset?end = null, string interval = "1m", CancellationToken cancellationToken = default(CancellationToken))
        {
            if (start == null || start >= DateTimeOffset.UtcNow)
            {
                start = DateTimeOffset.UtcNow.AddDays(-1);
            }
            if (end == null || end >= DateTimeOffset.UtcNow)
            {
                end = DateTimeOffset.UtcNow;
            }
            var data = new TripData()
            {
                Start               = start.Value,
                End                 = end.Value,
                DeviceId            = deviceId,
                PrimitiveDataPoints = dataPoints
            };

            if (dataPoints.HasFlag(PrimitiveDataPoints.Position))
            {
                data.Position = await GetPositionData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.CoolantTemp))
            {
                data.CoolantTemp = await GetEngineCoolantTemperatureData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.EngineLoad))
            {
                data.EngineLoad = await GetEngineLoadLevelsData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.FuelLevel))
            {
                data.FuelLevel = await GetFuelLevelData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.FuelRate))
            {
                data.FuelRate = await GetFuelRateData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.IntakeTemp))
            {
                data.IntakeTemp = await GetIntakeTempData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.RpiTemperature))
            {
                data.RpiTemperature = await GetRpiTemperatureData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.Speed))
            {
                data.Speed = await GetSpeedData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.Voltage))
            {
                data.Voltage = await GetVoltageData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.AccelerometerX))
            {
                data.AccelerometerX = await GetAccelerometerXData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.AccelerometerY))
            {
                data.AccelerometerY = await GetAccelerometerYData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.AccelerometerZ))
            {
                data.AccelerometerZ = await GetAccelerometerZData(deviceId, start, end, interval, cancellationToken);
            }
            if (dataPoints.HasFlag(PrimitiveDataPoints.Altitude))
            {
                data.Altitude = await GetAltitudeData(deviceId, start, end, interval, cancellationToken);
            }

            return(data);
        }