private async Task HandleNewSensorMeasurementAsync(int sensorId, DateTime time)
        {
            var run = await DaoProvider.RunDao.GetCurrentRun();

            if (run == null)
            {
                return;
            }

            var sensorMeasurement = new SensorMeasurement
            {
                SensorId  = sensorId,
                Run       = run,
                Timestamp = (time - UnixEpoch).TotalMilliseconds / 1000
            };

            var sensorMeasurements = (await DaoProvider.SensorMeasurementDao.GetMeasurementsForRun(run)).ToArray();

            if (sensorId > 0 && sensorMeasurements.Length == 0)
            {
                return;
            }

            if (
                // First measurement
                sensorId == 0 && sensorMeasurements.Length == 0 ||

                // Sequential measurement
                sensorMeasurements.Length > 0 && sensorId == sensorMeasurements.Last().SensorId + 1
                )
            {
                await DaoProvider.SensorMeasurementDao.Insert(sensorMeasurement);

                if (sensorId > 0)
                {
                    var interimTime = sensorMeasurement.Timestamp - sensorMeasurements.Last().Timestamp;
                    var timeSpan    = TimeSpan.FromMilliseconds(interimTime * 1000);
                    SensorMeasurementAdded?.Invoke(run.Race, run.RunNumber, run.Skier, timeSpan);
                }
                else if (sensorId == 0)
                {
                    RunStarted?.Invoke(run.Race, run.RunNumber, run.Skier);
                }
            }

            // Last measurement
            if (sensorId == run.Race.NumberOfSensors - 1)
            {
                run.TotalTime = run.RunNumber == 2
                    ? run.TotalTime + sensorMeasurement.Timestamp - sensorMeasurements[0].Timestamp
                    : sensorMeasurement.Timestamp - sensorMeasurements[0].Timestamp;
                run.Status = RunStatus.Completed;
                await DaoProvider.RunDao.Update(run);

                var newLeaderBoard = await GetLeaderBoard(run.Race, run.RunNumber);

                RunStatusChanged?.Invoke(run.Race, run.RunNumber, run.Skier, run.Status);
                LeaderBoardUpdated?.Invoke(run.Race, run.RunNumber, newLeaderBoard);
            }
        }
Beispiel #2
0
        public async void TestInsert()
        {
            ConnectionFactory connectionFactory = new ConnectionFactory(Environment.Testing);

            SensorMeasurement sensorMeasurement = await InsertSensorMeasurement(connectionFactory);

            Assert.True(sensorMeasurement.Id > 0);
        }
Beispiel #3
0
        public async void TestFindById()
        {
            ConnectionFactory     connectionFactory    = new ConnectionFactory(Environment.Testing);
            ISensorMeasurementDao sensorMeasurementDao = new SensorMeasurementDao(connectionFactory);

            SensorMeasurement sensorMeasurement = await InsertSensorMeasurement(connectionFactory);

            SensorMeasurement sensorMeasurementFound = await sensorMeasurementDao.FindById(sensorMeasurement.Id);

            Assert.Equal(sensorMeasurement.Timestamp, sensorMeasurementFound.Timestamp);
        }
Beispiel #4
0
        public async void TestDelete()
        {
            ConnectionFactory     connectionFactory    = new ConnectionFactory(Environment.Testing);
            ISensorMeasurementDao sensorMeasurementDao = new SensorMeasurementDao(connectionFactory);

            SensorMeasurement sensorMeasurement = await InsertSensorMeasurement(connectionFactory);

            Assert.NotNull(await sensorMeasurementDao.FindById(sensorMeasurement.Id));

            await sensorMeasurementDao.Delete(sensorMeasurement.Id);

            Assert.Null(await sensorMeasurementDao.FindById(sensorMeasurement.Id));
        }
Beispiel #5
0
        public async void TestUpdate()
        {
            ConnectionFactory     connectionFactory    = new ConnectionFactory(Environment.Testing);
            ISensorMeasurementDao sensorMeasurementDao = new SensorMeasurementDao(connectionFactory);

            SensorMeasurement sensorMeasurement = await InsertSensorMeasurement(connectionFactory);

            sensorMeasurement.Timestamp = 1576850015.2222;
            await sensorMeasurementDao.Update(sensorMeasurement);

            SensorMeasurement sensorMeasurementAfter = await sensorMeasurementDao.FindById(sensorMeasurement.Id);

            Assert.Equal(sensorMeasurement.Timestamp, sensorMeasurementAfter.Timestamp);
        }
Beispiel #6
0
        public ApiResult <string> Save(int Value, string SensorId, SensorType?sensorType)
        {
            SensorMeasurement obj = new SensorMeasurement {
                Vrijednost = Value,
                Date       = DateTime.Now,
                SensorId   = SensorId,
                SensorType = sensorType
            };

            _db.SensorMeasurement.Add(obj);
            _db.SaveChanges();

            return(ApiResult <string> .OK(null));
        }
Beispiel #7
0
        public static async Task <SensorMeasurement> InsertSensorMeasurement(ConnectionFactory connectionFactory,
                                                                             Run run = null)
        {
            ISensorMeasurementDao sensorMeasurementDao = new SensorMeasurementDao(connectionFactory);

            run ??= await RunDaoTests.InsertRun(connectionFactory);

            SensorMeasurement sensorMeasurement = new SensorMeasurement
            {
                SensorId  = 1,
                Timestamp = 1576850015.1111,
                Run       = run,
            };

            sensorMeasurement.Id = await sensorMeasurementDao.Insert(sensorMeasurement);

            return(sensorMeasurement);
        }
Beispiel #8
0
        public bool GenerateData()
        {
            var now = DateTime.Now;

            using (var dbContext = new Entities())
            {
                var devices = new List <Device>()
                {
                    new Device()
                    {
                        Name = "Piata Unirii - Eroilor", Lat = 46.769304, Long = 23.590888
                    },
                    new Device()
                    {
                        Name = "Piata Unirii - Ferdinand", Lat = 46.771023, Long = 23.589949
                    },
                    new Device()
                    {
                        Name = "Memorandumului - Ioan Ratiu", Lat = 46.769770, Long = 23.587349
                    },
                    new Device()
                    {
                        Name = "Ioan Ratiu - Episcop Ioan Bob", Lat = 46.768794, Long = 23.588102
                    },
                };
                for (int i = 0; i < 3600; i++)
                {
                    var sensorData = new SensorMeasurement()
                    {
                        Device      = devices[0],
                        Lat         = devices[0].Lat,
                        Long        = devices[0].Long,
                        MeasureDate = now.AddSeconds(i),
                        SensorId    = 1,
                        Value       = 22
                    };

                    dbContext.SensorMeasurements.Add(sensorData);
                    dbContext.SaveChanges();
                }
            }
            return(true);
        }
Beispiel #9
0
        /// <summary>
        /// Sends an analog reading to the cloud.
        /// </summary>
        /// <param name="ratio">
        /// The ratio of the analog sensor.
        /// </param>
        /// <returns>
        /// A <see cref="SendResult"/> that indicates the result of the operation.
        /// </returns>
        static public SendResult ReportAnalog(double ratio)
        {
            // Ensure the sender has been created
            EnsureSender();

            // Create the measurement
            var measurement = new SensorMeasurement()
            {
                DisplayName   = "Office",
                Guid          = Guid.NewGuid(),
                Location      = "Houston",
                MeasureName   = "Analog",
                UnitOfMeasure = "Ratio",
                Value         = ratio
            };

            // Send the measurement
            return(sender.Send(measurement));
        }
Beispiel #10
0
 public SendResult Send(SensorMeasurement measurement)
 {
     var json = JsonConvert.SerializeObject(measurement);
     return Send(json);
 }