public async Task <ActionResult <DeviceDetailsApiModel> > Show(string name) { var device = await _service.GetDeviceByNameAsync(name); var sensors = new List <Sensor>(); var valsBySensorId = new Dictionary <long, List <(double, Instant)> >(); await foreach (var sensor in _service.ListSensorsByDeviceAsync(device)) { sensors.Add(sensor); valsBySensorId[sensor.Id] = new List <(double, Instant)>(); } await foreach (var(sensor, value, createdAt) in _valueService.GetLastNumberOfValuesBySensorsAsync(sensors, 10)) { valsBySensorId[sensor.Id].Add((value, createdAt)); } var sensorList = new List <SensorDetailsApiModel>(); sensorList.AddRange(sensors.Select(s => new SensorDetailsApiModel(s, valsBySensorId[s.Id]))); var sensorNamesFromMqtt = await _mqttService.ListSensorNamesByDeviceNameAsync(device.Name); var registeredSensorNames = sensors.Select(s => s.Name); sensorList.AddRange(sensorNamesFromMqtt.Except(registeredSensorNames).Select(n => new SensorDetailsApiModel(n, device.Name))); var info = await GetBrokerConnectionInfoAsync(); var res = new DeviceDetailsApiModel(device, sensorList, info); return(Ok(res)); }
public async Task ProcessCommonMessageAsync_RegistersDeviceAndSensorName() { await SeedDefaultSensor(); var message = new MqttMessage("iot/device-new/sensor-new", "120", _clock.GetCurrentInstant()); await _service.ProcessCommonMessageAsync(message); Assert.Contains("device-new", await _mqttIdentifierService.ListDeviceNamesAsync()); Assert.Contains("sensor-new", await _mqttIdentifierService.ListSensorNamesByDeviceNameAsync("device-new")); }
public async Task <string?> GetOneIdentifierCandidateForSensorAsync(string deviceName) { var names = await _mqttIdentifierService.ListSensorNamesByDeviceNameAsync(deviceName); var candidates = names.ToList(); if (candidates.Count == 0) { return(null); } #pragma warning disable SCS0005 // Weak random generator: name doesn't need to be secure var idx = _rand.Next(candidates.Count); #pragma warning restore SCS0005 // Weak random generator return(candidates[idx]); }
public async Task CreateSensorByDeviceAndNameAsync(Device device, string sensorName) { var legalNames = await _identifierService.ListSensorNamesByDeviceNameAsync(device.Name); if (!legalNames.Contains(sensorName)) { throw new EntityNotFoundException($"We can't find messages from sensor {device.Name}/{sensorName}.", nameof(sensorName)); } var found = await _dbContext.Sensors.Where(s => s.NormalizedName == Sensor.NormalizeName(sensorName) && s.DeviceId == device.Id).CountAsync(); if (found > 0) { throw new EntityExistException($"The sensor {sensorName} was created. You can't create a new one.", nameof(sensorName)); } _dbContext.Sensors.Add(new Sensor { Name = sensorName, NormalizedName = Sensor.NormalizeName(sensorName), DeviceId = device.Id }); await _dbContext.SaveChangesAsync(); }