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); } }
public async void TestInsert() { ConnectionFactory connectionFactory = new ConnectionFactory(Environment.Testing); SensorMeasurement sensorMeasurement = await InsertSensorMeasurement(connectionFactory); Assert.True(sensorMeasurement.Id > 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); }
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)); }
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); }
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)); }
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); }
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); }
/// <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)); }
public SendResult Send(SensorMeasurement measurement) { var json = JsonConvert.SerializeObject(measurement); return Send(json); }