public void ClimateItem_MeanValueTest()
        {
            ClimateItem left = new ClimateItem()
            {
                IndoorValue = "18.5", OutdoorValue = "-20.0"
            };
            ClimateItem right = new ClimateItem()
            {
                IndoorValue = "19.3", OutdoorValue = "22.0"
            };
            ClimateItem resultValue = ClimateItem.ClimateMeanValues(left, right);

            Assert.Equal("18.9", resultValue.IndoorValue);
            Assert.Equal("1.0", resultValue.OutdoorValue);
        }
        public IActionResult GetBySource(string source)
        {
            _logger.LogInformation("The source is {Source}", source);

            ClimateItem item = null;

            if (source.Equals("Nibe"))
            {
                // Read data from Nibe, if reading works we get data, if not we get null and try to do a login
                item = nibe.CurrentReading(AppConfigs);

                if (item == null)
                {
                    _logger.LogInformation("Logging in to Nibe");
                    var uri = new UriBuilder(AppConfigs.NibeHost)
                    {
                        Path  = $"/oauth/authorize",
                        Query = "response_type=code&client_id=" + AppConfigs.NibeClientId + "&scope=READSYSTEM&redirect_uri=" + AppConfigs.NibeRedirectURI + "&state=12345"
                    }.Uri;
                    _logger.LogInformation("Connecting to {uri}", uri);

                    return(Redirect(uri.AbsoluteUri));
                }
            }

            if (source.Equals("Netatmo"))
            {
                item = netatmo.CurrentReading(AppConfigs);
            }

            if (source.Equals("Reading"))
            {
                ClimateItem netatmoItem = netatmo.CurrentReading(AppConfigs);

                ClimateItem nibeItem = null;
                nibeItem = nibe.CurrentReading(AppConfigs);
                if (nibeItem == null)
                {
                    var uri = new UriBuilder(AppConfigs.NibeHost)
                    {
                        Path  = $"/oauth/authorize",
                        Query = "response_type=code&client_id=" + AppConfigs.NibeClientId + "&scope=READSYSTEM&redirect_uri=" + AppConfigs.NibeRedirectURI + "&state=12345"
                    }.Uri;

                    _logger.LogInformation("redirecting to {redirect}", uri.AbsoluteUri);
                    return(Redirect(uri.AbsoluteUri));
                }
                item = ClimateItem.ClimateMeanValues(netatmoItem, nibeItem);
            }
            if (source.Equals("Ping"))
            {
                item = new ClimateItem()
                {
                    IndoorValue = "20.5", OutdoorValue = "11.1", TimeStamp = DateTime.Now
                };
                _logger.LogInformation("Ping returning {item}", item.ToString());
            }
            if (source.Equals("Version"))
            {
                item = new ClimateItem()
                {
                    IndoorValue = AppConfigs.BuildVersion, OutdoorValue = AppConfigs.BuildVersion, TimeStamp = DateTime.Now
                };
                _logger.LogInformation("Version returning {item}", AppConfigs.BuildVersion);
            }

            if (item == null)
            {
                return(new Microsoft.AspNetCore.Mvc.NoContentResult());
            }
            else
            {
                return(Json(item));
            }
        }