/// <summary>To be used internaly</summary> /// <param name="values"></param> private bool CreateDevice(KeyValuePair <Guid, SensorMessage[]> values, string devicename) { var db = new MainDbContext(); //Make sure that it is good and proper to create this device if (SettingsService.Instance.IsLoggedIn == false || SettingsService.Instance.LastSuccessfulGeneralDbGet == default(DateTimeOffset) || _dbDevices.Any(dev => dev.SerialNumber == values.Key)) { return(false); } //Make sure this device is reporting valid sensor Id's var sensorTypes = db.SensorTypes.ToList(); foreach (var sensor in values.Value) { if (sensorTypes.FirstOrDefault(st => st.ID == sensor.SensorTypeID) == null) { Util.LoggingService.LogInfo($"Receieved message with sensor ID {sensor.SensorTypeID}, but it is invalid - there is no such ID", Windows.Foundation.Diagnostics.LoggingLevel.Error); return(false); //If any of the sensors are invalid, then return; } } LoggingService.LogInfo("Adding a new Device", Windows.Foundation.Diagnostics.LoggingLevel.Information); var device = new Device { ID = Guid.NewGuid(), SerialNumber = values.Key, Deleted = false, CreatedAt = DateTimeOffset.Now, UpdatedAt = DateTimeOffset.Now, Name = $"{devicename} {_dbDevices.Count}", Relays = new List <Relay>(), Sensors = new List <Sensor>(), Version = new byte[32], Location = new Location { ID = Guid.NewGuid(), Deleted = false, Name = $"{devicename} {_dbDevices.Count}", PersonId = SettingsService.Instance.CredStableSid, //TODO use the thing from settings! Version = new byte[32], CropCycles = new List <CropCycle>(), Devices = new List <Device>(), RelayHistory = new List <RelayHistory>(), SensorHistory = new List <SensorHistory>(), CreatedAt = DateTimeOffset.Now, UpdatedAt = DateTimeOffset.Now } }; db.Devices.Add(device); db.Locations.Add(device.Location); //Add sensors foreach (var inSensors in values.Value) { //Todo check correctness of hte sensorType var newSensor = new Sensor { CreatedAt = DateTimeOffset.Now, UpdatedAt = DateTimeOffset.Now, ID = Guid.NewGuid(), DeviceID = device.ID, Deleted = false, SensorTypeID = inSensors.SensorTypeID, Enabled = true, Multiplier = 1, Offset = 0, Version = new byte[32] }; device.Sensors.Add(newSensor); } db.SaveChanges(); //Add the device to the cached data? _dbDevices.Add(device); foreach (var sensor in device.Sensors) { _sensorBuffer.Add(new SensorBuffer(sensor)); } db.Dispose(); ToastService.NotifyUserOfInformation($"A new Device has been Created - {device.Name}"); return(true); }