private void Submit(object param)
        {
            Sensor sensor;

            switch (SelectedItem)
            {
            case "Temperature":
                sensor = new TemperatureSensor(Name, Url, Description, Latitude, Longitude, Tracking, MinValue, MaxValue);
                break;

            case "Humidity":
                sensor = new HumiditySensor(Name, Url, Description, Latitude, Longitude, Tracking, MinValue, MaxValue);
                break;

            case "Electricity Consumption":
                sensor = new PowerConsumptionSensor(Name, Url, Description, Latitude, Longitude, Tracking, MinValue, MaxValue);
                break;

            case "Noise":
                sensor = new TemperatureSensor(Name, Url, Description, Latitude, Longitude, Tracking, MinValue, MaxValue);
                break;

            case "Window/Door":
                sensor = new WindowDoorSensor(Name, Url, Description, Latitude, Longitude, Tracking, Opened);
                break;

            default:
                sensor = null;
                break;
            }

            sensors.List.Add(sensor);
            UpdateXml(sensors);
        }
예제 #2
0
        /// <summary>
        /// Updates the sensors used in ZipatoSensors.
        /// </summary>
        public void Update()
        {
            for (int i = 0; i < VirtualMeters.Count; ++i)
            {
                var uuid = VirtualMeters[i].Uuid;
                VirtualMeters[i] = new VirtualMeter(_zipato, uuid);
            }

            for (int i = 0; i < ConsumptionMeters.Count; ++i)
            {
                var uuid = ConsumptionMeters[i].Uuid;
                ConsumptionMeters[i] = new ConsumptionMeter(_zipato, uuid);
            }

            for (int i = 0; i < TemperatureSensors.Count; ++i)
            {
                var uuid = TemperatureSensors[i].Uuid;
                TemperatureSensors[i] = new TemperatureSensor(_zipato, uuid);
            }

            for (int i = 0; i < HumiditySensors.Count; ++i)
            {
                var uuid = HumiditySensors[i].Uuid;
                HumiditySensors[i] = new HumiditySensor(_zipato, uuid);
            }

            for (int i = 0; i < LuminanceSensors.Count; ++i)
            {
                var uuid = LuminanceSensors[i].Uuid;
                LuminanceSensors[i] = new LuminanceSensor(_zipato, uuid);
            }

            Status = _zipato?.Data?.Status ?? Uncertain;
        }
예제 #3
0
        private async void btnReadData_Click(object sender, RoutedEventArgs e)
        {
            byte[] tempValue = await tempSen.ReadValue();

            double ambientTemp = IRTemperatureSensor.CalculateAmbientTemperature(tempValue, TemperatureScale.Celsius);
            double targetTemp  = IRTemperatureSensor.CalculateTargetTemperature(tempValue, ambientTemp, TemperatureScale.Celsius);
            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                tbTemperature.Text       = ambientTemp.ToString("0.00");
                tbTargetTemperature.Text = targetTemp.ToString("0.00");
            });

            byte[] accValue = await acc.ReadValue();

            double[] accAxis = Accelerometer.CalculateCoordinates(accValue, 1 / 64.0);
            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                tbAccelerometer.Text = "X: " + accAxis[0].ToString("0.00") + " Y: " + accAxis[1].ToString("0.00") + " Z: " + accAxis[2].ToString("0.00");
            });

            byte[] humValue = await hum.ReadValue();

            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                tbHumidity.Text = HumiditySensor.CalculateHumidityInPercent(humValue).ToString("0.00") + "%";
            });
        }
예제 #4
0
        public async Task <string> GetSensorData()
        {
            HumiditySensor      hum  = new HumiditySensor();
            IRTemperatureSensor temp = new IRTemperatureSensor();

            //hum.SensorValueChanged += SensorValueChanged;
            //temp.SensorValueChanged += SensorValueChanged;

            await hum.Initialize();

            await hum.EnableSensor();

            //await hum.EnableNotifications();


            await temp.Initialize();

            await temp.EnableSensor();

            //await temp.EnableNotifications();



            hum.SensorValueChanged  += SensorValueChanged;
            temp.SensorValueChanged += SensorValueChanged;

            await hum.EnableNotifications();

            await temp.EnableNotifications();


            return("done");
        }
예제 #5
0
        public HumidityPage()
        {
            Model = new HumidityModel
            {
                IsSupported = HumiditySensor.IsSupported,
                SensorCount = HumiditySensor.Count
            };

            InitializeComponent();

            if (Model.IsSupported)
            {
                Humidity              = new HumiditySensor();
                Humidity.DataUpdated += Humidity_DataUpdated;

                canvas.Series = new List <Series>()
                {
                    new Series()
                    {
                        Color         = SKColors.Red,
                        Name          = "Humidity",
                        FormattedText = "Humidity={0}",
                    },
                };
            }
        }
예제 #6
0
        public void Update(IDeviceState state, bool fromDatabase = false)
        {
            //TODO: update more properties?

            if (!fromDatabase)
            {
                if (Name == null && state.Name != null)
                {
                    Name = state.Name;
                }

                if ((Type == null || Type.Equals(DeviceType.Unknown)) && state.Type != null)
                {
                    Type = state.Type;
                }
            }

            Location = (state.Location == null) ? null : new Location(state.Location.GetParts());

            IsConnected   = state.IsConnected;
            CurrentAction = state.CurrentAction;

            BinarySwitch.Update(state.BinarySwitchState ?? ReadOnlyBinarySwitchSwitchState.Blank());
            MultilevelSwitch.Update(state.MultilevelSwitchState ?? ReadOnlyMultilevelSwitchState.Blank());
            ColorSwitch.Update(state.ColorSwitchState ?? ReadOnlyColorSwitchState.Blank());
            BinarySensor.Update(state.BinarySensorState ?? ReadOnlyBinarySensorState.Blank());
            PowerSensor.Update(state.PowerSensorState ?? ReadOnlyMultilevelSensorState <IPower> .Blank());
            TemperatureSensor.Update(state.TemperatureSensorState ?? ReadOnlyMultilevelSensorState <ITemperature> .Blank());
            HumiditySensor.Update(state.HumiditySensorState ?? ReadOnlyMultilevelSensorState <IHumidity> .Blank());
            IlluminanceSensor.Update(state.IlluminanceSensorState ?? ReadOnlyMultilevelSensorState <IIlluminance> .Blank());
            Thermostat.Update(state.ThermostatState ?? ReadOnlyThermostatState.Blank());
        }
예제 #7
0
        public int AddHumiditySensorHistory(HumiditySensor sensor)
        {
            if (sensor == null)
            {
                throw new Exception("Sensore object cannot be null");
            }

            sensorHistory = new SensorHistory
            {
                HouseId  = sensor.HouseId,
                SensorId = sensor.SensorId,
                Type     = sensor.Type,
                Name     = sensor.Name,
                Humidity = sensor.Humidity,
                IsOn     = sensor.IsOn
            };

            try
            {
                _databaseContext.SensorHistories.Add(sensorHistory);
                _databaseContext.SaveChanges();
            }

            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
            }


            return(sensorHistory.SensorHistoryId);
        }
예제 #8
0
        async void SensorValueChanged(object sender, X2CodingLab.SensorTag.SensorValueChangedEventArgs e)
        {
            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() =>
            {
                switch (e.Origin)
                {
                case SensorName.Accelerometer:
                    double[] accValues   = Accelerometer.CalculateCoordinates(e.RawData, 1 / 64.0);
                    tbAccelerometer.Text = "X: " + accValues[0].ToString("0.00") + " Y: " + accValues[1].ToString("0.00") + " Z: " + accValues[2].ToString("0.00");
                    break;

                case SensorName.Gyroscope:
                    float[] axisValues = Gyroscope.CalculateAxisValue(e.RawData, GyroscopeAxis.XYZ);
                    tbGyroscope.Text   = "X: " + axisValues[0].ToString("0.00") + " Y: " + axisValues[1].ToString("0.00") + " Z: " + axisValues[2].ToString("0.00");
                    break;

                case SensorName.HumiditySensor:
                    tbHumidity.Text = HumiditySensor.CalculateHumidityInPercent(e.RawData).ToString("0.00") + "%";
                    break;

                case SensorName.Magnetometer:
                    float[] magnetValues = Magnetometer.CalculateCoordinates(e.RawData);
                    tbMagnetometer.Text  = "X: " + magnetValues[0].ToString("0.00") + " Y: " + magnetValues[1].ToString("0.00") + " Z: " + magnetValues[2].ToString("0.00");
                    break;

                case SensorName.PressureSensor:
                    try
                    {
                        tbPressure.Text = (PressureSensor.CalculatePressure(e.RawData, ps.CalibrationData) / 100).ToString("0.00");
                    }
                    catch (NullReferenceException)
                    {
                        // in case another(!) setup is executed, so ps is null
                    }
                    break;

                case SensorName.SimpleKeyService:
                    if (SimpleKeyService.LeftKeyHit(e.RawData))
                    {
                        tbLeftKey.Text = "hit!";
                        await Task.Delay(200);
                        tbLeftKey.Text = "";
                    }
                    else if (SimpleKeyService.RightKeyHit(e.RawData))
                    {
                        tbRightKey.Text = "hit!";
                        await Task.Delay(200);
                        tbRightKey.Text = "";
                    }
                    break;

                case SensorName.TemperatureSensor:
                    double ambient           = IRTemperatureSensor.CalculateAmbientTemperature(e.RawData, TemperatureScale.Celsius);
                    double target            = IRTemperatureSensor.CalculateTargetTemperature(e.RawData, ambient, TemperatureScale.Celsius);
                    tbTemperature.Text       = ambient.ToString("0.00");
                    tbTargetTemperature.Text = target.ToString("0.00");
                    break;
                }
            });
        }
예제 #9
0
        public async Task <IActionResult> GetSecondaryDataAsync()
        {
            var temperatureSensor   = new TemperatureSensor(_temperatureStorage);
            var pressureSensor      = new PressureSensor(_pressureStorage);
            var humiditySensor      = new HumiditySensor(_humidityStorage);
            var windDirectionSensor = new WindDirectionSensor(_windStorage);
            var windSpeedSensor     = new WindSpeedSensor(_windStorage);
            var windChill           = new WindChill(temperatureSensor, windSpeedSensor);
            var dewPoint            = new DewPoint(temperatureSensor, humiditySensor);
            var timeSpan            = new TimeSpan(3, 0, 0);

            var result = new SecondaryDataDTO()
            {
                WindChill              = (int)windChill.CalculateWindChill(),
                DewPoint               = (int)dewPoint.CalculateDewPoint(),
                MaximalTemperature     = (int)temperatureSensor.HighValue().Value,
                MinimalTemperature     = (int)temperatureSensor.LowValue().Value,
                MaximalHumidity        = (int)humiditySensor.HighValue().Value,
                MinimalHumidity        = (int)humiditySensor.LowValue().Value,
                MinimalPressure        = (int)pressureSensor.LowValue().Value,
                MaximalPressure        = (int)pressureSensor.HighValue().Value,
                MinimalTemperatureTime = temperatureSensor.TimeOfLowValue().TimeOfDay.Add(timeSpan).ToString().Substring(0, 5),
                MaximalTemperatureTime = temperatureSensor.TimeOfHighValue().TimeOfDay.Add(timeSpan).ToString().Substring(0, 5),
                MinimalHumidityTime    = humiditySensor.TimeOfLowValue().TimeOfDay.Add(timeSpan).ToString().Substring(0, 5),
                MaximalHumidityTime    = humiditySensor.TimeOfHighValue().TimeOfDay.Add(timeSpan).ToString().Substring(0, 5),
                MinimalPressureTime    = pressureSensor.TimeOfLowValue().TimeOfDay.Add(timeSpan).ToString().Substring(0, 5),
                MaximalPressureTime    = pressureSensor.TimeOfHighValue().TimeOfDay.Add(timeSpan).ToString().Substring(0, 5),
            };

            return(Ok(result));
        }
예제 #10
0
        public IObservable <double> WhenReadingTaken()
        {
            this.observable = this.observable ?? Observable.Create <double>(ob =>
            {
                var handler = new EventHandler <HumiditySensorDataUpdatedEventArgs>((sender, args) =>
                                                                                    ob.OnNext(args.Humidity)
                                                                                    );
                var sensor = new HumiditySensor
                {
                    Interval = 250
                };
                sensor.DataUpdated += handler;
                sensor.Start();

                return(() =>
                {
                    sensor.Stop();
                    sensor.DataUpdated -= handler;
                    sensor.Dispose();
                });
            })
                              .Publish()
                              .RefCount();

            return(this.observable);
        }
        public HumidityGaugeCtrl(HumiditySensor sensor)
        {
            InitializeComponent();
            ToolTip          = sensor.Name;
            lbl_Name.Content = sensor.Name;
            this.sensor      = sensor;

            try
            {
                model = HttpService.SensorList.First(item => item.Tag == sensor.Link);;

                timer = new DispatcherTimer
                {
                    Interval = TimeSpan.FromSeconds(model.MinPollingIntervalInSeconds)
                };
                timer.Tick += Timer_Tick;
                timer.Start();
                FirstTick();
            }
            catch
            {
                label.Foreground = new SolidColorBrush(Colors.LightGray);
                unit.Foreground  = new SolidColorBrush(Colors.LightGray);
            }
        }
예제 #12
0
        public void ShouldKeepSensor_WhenAllValuesWithinOnePercentOfReference()
        {
            var sensor = new HumiditySensor("myHumiditySensor", 50m);

            sensor.AddReading("50.1");
            sensor.AddReading("49.2");
            Assert.That(sensor.GetStatus(), Is.EqualTo("keep"));
        }
예제 #13
0
 /// <summary>
 /// Constructor of HumiditySensorAdapter.
 /// </summary>
 public HumiditySensorAdapter()
 {
     sensor = new HumiditySensor
     {
         Interval    = 100,
         PausePolicy = SensorPausePolicy.None
     };
 }
예제 #14
0
        public async Task <IActionResult> GetForecastAsync()
        {
            var temperatureSensor   = new TemperatureSensor(_temperatureStorage);
            var pressureSensor      = new PressureSensor(_pressureStorage);
            var humiditySensor      = new HumiditySensor(_humidityStorage);
            var windDirectionSensor = new WindDirectionSensor(_windStorage);
            var windSpeedSensor     = new WindSpeedSensor(_windStorage);

            var windDirectionStr = "";
            var direct           = windDirectionSensor.CurrentDirection();
            {
                if (direct >= 337 || direct < 22)
                {
                    windDirectionStr = "N";
                }
                if (direct >= 22 && direct < 67)
                {
                    windDirectionStr = "NE";
                }
                if (direct >= 67 && direct < 112)
                {
                    windDirectionStr = "E";
                }
                if (direct >= 112 && direct < 157)
                {
                    windDirectionStr = "SE";
                }
                if (direct >= 157 && direct < 202)
                {
                    windDirectionStr = "S";
                }
                if (direct >= 202 && direct < 247)
                {
                    windDirectionStr = "SW";
                }
                if (direct >= 247 && direct < 292)
                {
                    windDirectionStr = "W";
                }
                if (direct >= 292 && direct < 337)
                {
                    windDirectionStr = "NW";
                }
            }
            var result = new PrimaryDataDTO()
            {
                Date             = DateTime.UtcNow.AddDays(-7).ToShortDateString(),
                Time             = DateTime.Now.TimeOfDay.ToString().Substring(0, 5),
                Humidity         = (int)humiditySensor.CurrentHumidity().Value,
                Pressure         = pressureSensor.CurrentPressure().Value,
                Temperature      = (int)temperatureSensor.CurrentTemperature().Value,
                WindDirection    = windDirectionSensor.CurrentDirection(),
                WindSpeed        = windSpeedSensor.CurrentSpeed().Value,
                WindDirectionStr = windDirectionStr
            };

            return(Ok(result));
        }
예제 #15
0
        public void ShouldDiscardSensor_WhenAnyReadingGreaterThanOrEqualToOne()
        {
            var sensor = new HumiditySensor("myHumiditySensor", 50m);

            sensor.AddReading("50.1");
            sensor.AddReading("49.2");
            sensor.AddReading("49");
            Assert.That(sensor.GetStatus(), Is.EqualTo("discard"));
        }
예제 #16
0
 private void initializeSensors()
 {
     _humiditySensor = new HumiditySensor();
     _mechanicalContaminationSensor = new MechanicalContaminationSensor();
     _overheatSensor           = new OverheatSensor();
     _poisonContaminantsSensor = new PoisonContaminantsSensor();
     _smokeSensor          = new SmokeSensor();
     _airSpeedSensor       = new AirSpeedSensor();
     _airTemperatureSensor = new AirTemperatureSensor();
 }
예제 #17
0
        IPhidgetViewModel CreateViewModel(HumiditySensor phidget)
        {
            var phigitViewModel = new HumidityPhidgetViewModel(phidget);

            if (phidget.DeviceClassName == "Humidity Phidget")
            {
                return(new HumidityPhidgetViewModel(phidget));
            }
            phigitViewModel.AddPhidget(new HumiditySensorViewModel(phidget));
            return(phigitViewModel);
        }
예제 #18
0
        public IActionResult UpdateHumiditySensor([FromBody] HumiditySensor sensor)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _sensorRepository.UpdateHumiditySensor(sensor);

            return(new JsonResult(sensor.SensorId));
        }
예제 #19
0
        public int UpdateHumiditySensor(HumiditySensor sensor)
        {
            if (sensor == null)
            {
                throw new Exception("Sensore object cannot be null");
            }

            _databaseContext.Sensors.Update(sensor);
            _databaseContext.SaveChanges();

            return(sensor.SensorId);
        }
예제 #20
0
        private static async Task <ISenseHat> GetSenseHatTask()
        {
            MainI2CDevice mainI2CDevice = await CreateDisplayJoystickI2CDevice().ConfigureAwait(false);

            ImuSensor imuSensor = await CreateImuSensor().ConfigureAwait(false);

            PressureSensor pressureSensor = await CreatePressureSensor().ConfigureAwait(false);

            HumiditySensor humiditySensor = await CreateHumiditySensor().ConfigureAwait(false);

            return(new SenseHat(mainI2CDevice, imuSensor, pressureSensor, humiditySensor));
        }
        private static ISenseHat CreateSenseHat()
        {
            MainI2CDevice mainI2CDevice = CreateDisplayJoystickI2CDevice();

            ImuSensor imuSensor = CreateImuSensor();

            PressureSensor pressureSensor = CreatePressureSensor();

            HumiditySensor humiditySensor = CreateHumiditySensor();

            return(new SenseHat(mainI2CDevice, imuSensor, pressureSensor, humiditySensor));
        }
예제 #22
0
        public SenseHat(
            MainI2CDevice mainI2CDevice,
            ImuSensor imuSensor,
            PressureSensor pressureSensor,
            HumiditySensor humiditySensor)
        {
            _mainI2CDevice = mainI2CDevice;

            Display  = new SenseHatDisplay(_mainI2CDevice);
            Joystick = new SenseHatJoystick(_mainI2CDevice);
            Sensors  = new SenseHatSensors(imuSensor, pressureSensor, humiditySensor);
        }
예제 #23
0
        public async Task <string> GetSensorDataNew()
        {
            byte[] x = await hum.ReadValue();

            SensorValues.Humidity = HumiditySensor.CalculateHumidityInPercent(x).ToString("0.00");;

            x = await temp.ReadValue();

            SensorValues.AmbientTemperature = IRTemperatureSensor.CalculateAmbientTemperature(x, TemperatureScale.Farenheit);
            SensorValues.TargetTemperature  = IRTemperatureSensor.CalculateTargetTemperature(x, TemperatureScale.Farenheit);

            return("done");
        }
예제 #24
0
        public SenseHatSensors(
            ImuSensor imuSensor,
            PressureSensor pressureSensor,
            HumiditySensor humiditySensor)
        {
            ImuSensor      = imuSensor;
            PressureSensor = pressureSensor;
            HumiditySensor = humiditySensor;

            ImuSensor.OnReadingsChanged      += (s, e) => ImuReadingsChanged();
            PressureSensor.OnReadingsChanged += (s, e) => PressureReadingsChanged();
            HumiditySensor.OnReadingsChanged += (s, e) => HumidityReadingsChanged();
        }
        private void Submit(object param)
        {
            Sensor sensor;

            CheckForBlanks();
            //check for errors
            if (ErrorCollection.Count == 0)
            {
                switch (SelectedItem)
                {
                case "Temperature":
                    sensor = new TemperatureSensor(Name, ToLinkWith.Tag, Description, Convert.ToDouble(Latitude),
                                                   Convert.ToDouble(Longitude), Tracking,
                                                   Convert.ToDecimal(MinValue), Convert.ToDecimal(MaxValue));
                    break;

                case "Humidity":
                    sensor = new HumiditySensor(Name, ToLinkWith.Tag, Description, Convert.ToDouble(Latitude),
                                                Convert.ToDouble(Longitude), Tracking,
                                                Convert.ToDecimal(MinValue), Convert.ToDecimal(MaxValue));
                    break;

                case "Electricity Consumption":
                    sensor = new PowerConsumptionSensor(Name, ToLinkWith.Tag, Description, Convert.ToDouble(Latitude),
                                                        Convert.ToDouble(Longitude), Tracking,
                                                        Convert.ToDecimal(MinValue), Convert.ToDecimal(MaxValue));
                    break;

                case "Noise":
                    sensor = new NoiseSensor(Name, ToLinkWith.Tag, Description, Convert.ToDouble(Latitude),
                                             Convert.ToDouble(Longitude), Tracking,
                                             Convert.ToDecimal(MinValue), Convert.ToDecimal(MaxValue));
                    break;

                case "Window/Door":
                    sensor = new WindowDoorSensor(Name, ToLinkWith.Tag, Description, Convert.ToDouble(Latitude),
                                                  Convert.ToDouble(Longitude), Tracking,
                                                  Open);
                    break;

                default:
                    sensor = null;
                    break;
                }

                sensors.List.Add(sensor);
                UpdateXml(sensors);
                Snackbar.Enqueue($"{sensor.Name} added");
                DialogHost.CloseDialogCommand.Execute(null, null);
            }
        }
예제 #26
0
        public IHumiditySensor RegisterHumiditySensor(IArea area, Enum id, INumericSensorAdapter adapter)
        {
            if (area == null)
            {
                throw new ArgumentNullException(nameof(area));
            }
            if (adapter == null)
            {
                throw new ArgumentNullException(nameof(adapter));
            }

            var humditySensor = new HumiditySensor($"{area.Id}.{id}", adapter, _settingsService);

            area.RegisterComponent(humditySensor);

            return(humditySensor);
        }
예제 #27
0
        public IHumiditySensor RegisterHumiditySensor(IArea area, Enum id, INumericValueSensorEndpoint endpoint)
        {
            if (area == null)
            {
                throw new ArgumentNullException(nameof(area));
            }
            if (endpoint == null)
            {
                throw new ArgumentNullException(nameof(endpoint));
            }

            var humditySensor = new HumiditySensor(ComponentIdGenerator.Generate(area.Id, id), _settingsService, endpoint);

            area.AddComponent(humditySensor);

            return(humditySensor);
        }
예제 #28
0
        public StationViewModel()
        {
            light  = new Light();
            blinds = new Blinds();
            air    = new AirConditioner();

            Modules = new List <ITurnOnOffModule>();
            Modules.Add(light);
            Modules.Add(blinds);
            Modules.Add(air);


            term    = new Termomethre();
            humi    = new HumiditySensor();
            ligsens = new LightSensor();
            disp    = new Display();
        }
예제 #29
0
        public IActionResult AddHumiditySensor([FromBody] HumiditySensor sensor)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var house = _houseRepository.GetHouse(sensor.HouseId);

            if (house == null)
            {
                return(NotFound("Cannot find house with provided houseId."));
            }

            _sensorRepository.AddHumiditySensor(sensor, house);

            return(new JsonResult(sensor.SensorId));
        }
예제 #30
0
        /// <summary>
        /// Adds sensor with the given "data" to the Sensors List
        /// </summary>
        /// <param name="data"></param>
        /// <param name="rangeBoundaries"></param>
        /// <returns>True if the sensor is added successfully, False otherwise</returns>
        public bool AddSensor(SensorData data, RangeBoundaries <string> rangeBoundaries)
        {
            bool   success = true;
            Sensor sensor  = null;

            try
            {
                switch (data.Type)
                {
                case "DoorSensor":
                    sensor = new DoorSensor(data);
                    break;

                case "ElPowerSensor":
                    sensor = new ElPowerSensor(data, new RangeBoundaries <int>(int.Parse(rangeBoundaries.Min), int.Parse(rangeBoundaries.Max)));
                    break;

                case "NoiseSensor":
                    sensor = new NoiseSensor(data, new RangeBoundaries <int>(int.Parse(rangeBoundaries.Min), int.Parse(rangeBoundaries.Max)));
                    break;

                case "HumiditySensor":
                    sensor = new HumiditySensor(data, new RangeBoundaries <float>(float.Parse(rangeBoundaries.Min), float.Parse(rangeBoundaries.Max)));
                    break;

                case "TemperatureSensor":
                    sensor = new TemperatureSensor(data, new RangeBoundaries <double>(double.Parse(rangeBoundaries.Min), double.Parse(rangeBoundaries.Max)));
                    break;

                default:
                    break;
                }
                Sensors.Add(sensor);
                SaveState();
            }
            catch (Exception)
            {
                MessageBox.Show("Failed to add the sensor!", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                success = false;
            }

            return(success);
        }