/// <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);
        }