Revert "Weather units: climacell (1.3/4) (#61472)" (#63842)

This reverts commit 48057e1dfb49774ce11dff2a323ecb033988b69b.
This commit is contained in:
Franck Nijhof 2022-01-12 17:58:33 +01:00 committed by GitHub
parent 28d49e69c1
commit f93d999260
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 116 additions and 79 deletions

View File

@ -31,8 +31,11 @@ from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( from homeassistant.const import (
CONF_API_VERSION, CONF_API_VERSION,
CONF_NAME, CONF_NAME,
LENGTH_INCHES, LENGTH_FEET,
LENGTH_KILOMETERS,
LENGTH_METERS,
LENGTH_MILES, LENGTH_MILES,
PRESSURE_HPA,
PRESSURE_INHG, PRESSURE_INHG,
SPEED_KILOMETERS_PER_HOUR, SPEED_KILOMETERS_PER_HOUR,
SPEED_MILES_PER_HOUR, SPEED_MILES_PER_HOUR,
@ -42,6 +45,8 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.sun import is_up from homeassistant.helpers.sun import is_up
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
from homeassistant.util.distance import convert as distance_convert
from homeassistant.util.pressure import convert as pressure_convert
from homeassistant.util.speed import convert as speed_convert from homeassistant.util.speed import convert as speed_convert
from . import ClimaCellDataUpdateCoordinator, ClimaCellEntity from . import ClimaCellDataUpdateCoordinator, ClimaCellEntity
@ -112,12 +117,6 @@ async def async_setup_entry(
class BaseClimaCellWeatherEntity(ClimaCellEntity, WeatherEntity): class BaseClimaCellWeatherEntity(ClimaCellEntity, WeatherEntity):
"""Base ClimaCell weather entity.""" """Base ClimaCell weather entity."""
_attr_temperature_unit = TEMP_FAHRENHEIT
_attr_pressure_unit = PRESSURE_INHG
_attr_wind_speed_unit = SPEED_MILES_PER_HOUR
_attr_visibility_unit = LENGTH_MILES
_attr_precipitation_unit = LENGTH_INCHES
def __init__( def __init__(
self, self,
config_entry: ConfigEntry, config_entry: ConfigEntry,
@ -161,6 +160,21 @@ class BaseClimaCellWeatherEntity(ClimaCellEntity, WeatherEntity):
else: else:
translated_condition = self._translate_condition(condition, True) translated_condition = self._translate_condition(condition, True)
if self.hass.config.units.is_metric:
if precipitation:
precipitation = round(
distance_convert(precipitation / 12, LENGTH_FEET, LENGTH_METERS)
* 1000,
4,
)
if wind_speed:
wind_speed = round(
speed_convert(
wind_speed, SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR
),
4,
)
data = { data = {
ATTR_FORECAST_TIME: forecast_dt.isoformat(), ATTR_FORECAST_TIME: forecast_dt.isoformat(),
ATTR_FORECAST_CONDITION: translated_condition, ATTR_FORECAST_CONDITION: translated_condition,
@ -209,23 +223,55 @@ class BaseClimaCellWeatherEntity(ClimaCellEntity, WeatherEntity):
@property @property
@abstractmethod @abstractmethod
def pressure(self): def _pressure(self):
"""Return the raw pressure.""" """Return the raw pressure."""
@property @property
@abstractmethod def pressure(self):
def wind_speed(self): """Return the pressure."""
"""Return the raw wind speed.""" if self.hass.config.units.is_metric and self._pressure:
return round(
pressure_convert(self._pressure, PRESSURE_INHG, PRESSURE_HPA), 4
)
return self._pressure
@property @property
@abstractmethod @abstractmethod
def visibility(self): def _wind_speed(self):
"""Return the raw wind speed."""
@property
def wind_speed(self):
"""Return the wind speed."""
if self.hass.config.units.is_metric and self._wind_speed:
return round(
speed_convert(
self._wind_speed, SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR
),
4,
)
return self._wind_speed
@property
@abstractmethod
def _visibility(self):
"""Return the raw visibility.""" """Return the raw visibility."""
@property
def visibility(self):
"""Return the visibility."""
if self.hass.config.units.is_metric and self._visibility:
return round(
distance_convert(self._visibility, LENGTH_MILES, LENGTH_KILOMETERS), 4
)
return self._visibility
class ClimaCellWeatherEntity(BaseClimaCellWeatherEntity): class ClimaCellWeatherEntity(BaseClimaCellWeatherEntity):
"""Entity that talks to ClimaCell v4 API to retrieve weather data.""" """Entity that talks to ClimaCell v4 API to retrieve weather data."""
_attr_temperature_unit = TEMP_FAHRENHEIT
@staticmethod @staticmethod
def _translate_condition( def _translate_condition(
condition: int | str | None, sun_is_up: bool = True condition: int | str | None, sun_is_up: bool = True
@ -247,7 +293,7 @@ class ClimaCellWeatherEntity(BaseClimaCellWeatherEntity):
return self._get_current_property(CC_ATTR_TEMPERATURE) return self._get_current_property(CC_ATTR_TEMPERATURE)
@property @property
def pressure(self): def _pressure(self):
"""Return the raw pressure.""" """Return the raw pressure."""
return self._get_current_property(CC_ATTR_PRESSURE) return self._get_current_property(CC_ATTR_PRESSURE)
@ -275,7 +321,7 @@ class ClimaCellWeatherEntity(BaseClimaCellWeatherEntity):
return PrecipitationType(precipitation_type).name.lower() return PrecipitationType(precipitation_type).name.lower()
@property @property
def wind_speed(self): def _wind_speed(self):
"""Return the raw wind speed.""" """Return the raw wind speed."""
return self._get_current_property(CC_ATTR_WIND_SPEED) return self._get_current_property(CC_ATTR_WIND_SPEED)
@ -298,7 +344,7 @@ class ClimaCellWeatherEntity(BaseClimaCellWeatherEntity):
) )
@property @property
def visibility(self): def _visibility(self):
"""Return the raw visibility.""" """Return the raw visibility."""
return self._get_current_property(CC_ATTR_VISIBILITY) return self._get_current_property(CC_ATTR_VISIBILITY)
@ -372,6 +418,8 @@ class ClimaCellWeatherEntity(BaseClimaCellWeatherEntity):
class ClimaCellV3WeatherEntity(BaseClimaCellWeatherEntity): class ClimaCellV3WeatherEntity(BaseClimaCellWeatherEntity):
"""Entity that talks to ClimaCell v3 API to retrieve weather data.""" """Entity that talks to ClimaCell v3 API to retrieve weather data."""
_attr_temperature_unit = TEMP_FAHRENHEIT
@staticmethod @staticmethod
def _translate_condition( def _translate_condition(
condition: int | str | None, sun_is_up: bool = True condition: int | str | None, sun_is_up: bool = True
@ -394,7 +442,7 @@ class ClimaCellV3WeatherEntity(BaseClimaCellWeatherEntity):
) )
@property @property
def pressure(self): def _pressure(self):
"""Return the raw pressure.""" """Return the raw pressure."""
return self._get_cc_value(self.coordinator.data[CURRENT], CC_V3_ATTR_PRESSURE) return self._get_cc_value(self.coordinator.data[CURRENT], CC_V3_ATTR_PRESSURE)
@ -423,7 +471,7 @@ class ClimaCellV3WeatherEntity(BaseClimaCellWeatherEntity):
) )
@property @property
def wind_speed(self): def _wind_speed(self):
"""Return the raw wind speed.""" """Return the raw wind speed."""
return self._get_cc_value(self.coordinator.data[CURRENT], CC_V3_ATTR_WIND_SPEED) return self._get_cc_value(self.coordinator.data[CURRENT], CC_V3_ATTR_WIND_SPEED)
@ -448,7 +496,7 @@ class ClimaCellV3WeatherEntity(BaseClimaCellWeatherEntity):
) )
@property @property
def visibility(self): def _visibility(self):
"""Return the raw visibility.""" """Return the raw visibility."""
return self._get_cc_value(self.coordinator.data[CURRENT], CC_V3_ATTR_VISIBILITY) return self._get_cc_value(self.coordinator.data[CURRENT], CC_V3_ATTR_VISIBILITY)

View File

@ -41,12 +41,7 @@ from homeassistant.components.weather import (
ATTR_WEATHER_WIND_SPEED, ATTR_WEATHER_WIND_SPEED,
DOMAIN as WEATHER_DOMAIN, DOMAIN as WEATHER_DOMAIN,
) )
from homeassistant.const import ( from homeassistant.const import ATTR_ATTRIBUTION, ATTR_FRIENDLY_NAME
ATTR_ATTRIBUTION,
ATTR_FRIENDLY_NAME,
PRESSURE_HPA,
SPEED_KILOMETERS_PER_HOUR,
)
from homeassistant.core import HomeAssistant, State, callback from homeassistant.core import HomeAssistant, State, callback
from homeassistant.helpers.entity_registry import async_get from homeassistant.helpers.entity_registry import async_get
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
@ -97,9 +92,6 @@ async def test_v3_weather(
climacell_config_entry_update: pytest.fixture, climacell_config_entry_update: pytest.fixture,
) -> None: ) -> None:
"""Test v3 weather data.""" """Test v3 weather data."""
hass.config.units.wind_speed_unit = SPEED_KILOMETERS_PER_HOUR
hass.config.units.pressure_unit = PRESSURE_HPA
weather_state = await _setup(hass, API_V3_ENTRY_DATA) weather_state = await _setup(hass, API_V3_ENTRY_DATA)
assert weather_state.state == ATTR_CONDITION_SUNNY assert weather_state.state == ATTR_CONDITION_SUNNY
assert weather_state.attributes[ATTR_ATTRIBUTION] == ATTRIBUTION assert weather_state.attributes[ATTR_ATTRIBUTION] == ATTRIBUTION
@ -107,7 +99,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_SUNNY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_SUNNY,
ATTR_FORECAST_TIME: "2021-03-07T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-07T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 7, ATTR_FORECAST_TEMP: 7,
ATTR_FORECAST_TEMP_LOW: -5, ATTR_FORECAST_TEMP_LOW: -5,
@ -115,7 +107,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-08T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-08T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 10, ATTR_FORECAST_TEMP: 10,
ATTR_FORECAST_TEMP_LOW: -4, ATTR_FORECAST_TEMP_LOW: -4,
@ -123,7 +115,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-09T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-09T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 19, ATTR_FORECAST_TEMP: 19,
ATTR_FORECAST_TEMP_LOW: 0, ATTR_FORECAST_TEMP_LOW: 0,
@ -131,7 +123,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-10T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-10T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 18, ATTR_FORECAST_TEMP: 18,
ATTR_FORECAST_TEMP_LOW: 3, ATTR_FORECAST_TEMP_LOW: 3,
@ -139,7 +131,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-11T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-11T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 5, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 5,
ATTR_FORECAST_TEMP: 20, ATTR_FORECAST_TEMP: 20,
ATTR_FORECAST_TEMP_LOW: 9, ATTR_FORECAST_TEMP_LOW: 9,
@ -147,7 +139,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-12T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-12T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0.0457, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0.0457,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25,
ATTR_FORECAST_TEMP: 20, ATTR_FORECAST_TEMP: 20,
ATTR_FORECAST_TEMP_LOW: 12, ATTR_FORECAST_TEMP_LOW: 12,
@ -155,7 +147,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-13T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-13T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25,
ATTR_FORECAST_TEMP: 16, ATTR_FORECAST_TEMP: 16,
ATTR_FORECAST_TEMP_LOW: 7, ATTR_FORECAST_TEMP_LOW: 7,
@ -163,7 +155,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_RAINY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_RAINY,
ATTR_FORECAST_TIME: "2021-03-14T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-14T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(1.0744, abs=0.01), ATTR_FORECAST_PRECIPITATION: 1.0744,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 75, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 75,
ATTR_FORECAST_TEMP: 6, ATTR_FORECAST_TEMP: 6,
ATTR_FORECAST_TEMP_LOW: 3, ATTR_FORECAST_TEMP_LOW: 3,
@ -171,7 +163,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_SNOWY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_SNOWY,
ATTR_FORECAST_TIME: "2021-03-15T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-15T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(7.3050, abs=0.01), ATTR_FORECAST_PRECIPITATION: 7.3050,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 95, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 95,
ATTR_FORECAST_TEMP: 1, ATTR_FORECAST_TEMP: 1,
ATTR_FORECAST_TEMP_LOW: 0, ATTR_FORECAST_TEMP_LOW: 0,
@ -179,7 +171,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-16T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-16T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0.0051, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0.0051,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 5, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 5,
ATTR_FORECAST_TEMP: 6, ATTR_FORECAST_TEMP: 6,
ATTR_FORECAST_TEMP_LOW: -2, ATTR_FORECAST_TEMP_LOW: -2,
@ -187,7 +179,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-17T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-17T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 11, ATTR_FORECAST_TEMP: 11,
ATTR_FORECAST_TEMP_LOW: 1, ATTR_FORECAST_TEMP_LOW: 1,
@ -195,7 +187,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-18T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-18T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 5, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 5,
ATTR_FORECAST_TEMP: 12, ATTR_FORECAST_TEMP: 12,
ATTR_FORECAST_TEMP_LOW: 6, ATTR_FORECAST_TEMP_LOW: 6,
@ -203,7 +195,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-19T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-19T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0.1778, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0.1778,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 45, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 45,
ATTR_FORECAST_TEMP: 9, ATTR_FORECAST_TEMP: 9,
ATTR_FORECAST_TEMP_LOW: 5, ATTR_FORECAST_TEMP_LOW: 5,
@ -211,7 +203,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_RAINY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_RAINY,
ATTR_FORECAST_TIME: "2021-03-20T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-20T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(1.2319, abs=0.01), ATTR_FORECAST_PRECIPITATION: 1.2319,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 55, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 55,
ATTR_FORECAST_TEMP: 5, ATTR_FORECAST_TEMP: 5,
ATTR_FORECAST_TEMP_LOW: 3, ATTR_FORECAST_TEMP_LOW: 3,
@ -219,7 +211,7 @@ async def test_v3_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_CLOUDY,
ATTR_FORECAST_TIME: "2021-03-21T00:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-21T00:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0.0432, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0.0432,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 20, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 20,
ATTR_FORECAST_TEMP: 7, ATTR_FORECAST_TEMP: 7,
ATTR_FORECAST_TEMP_LOW: 1, ATTR_FORECAST_TEMP_LOW: 1,
@ -228,11 +220,11 @@ async def test_v3_weather(
assert weather_state.attributes[ATTR_FRIENDLY_NAME] == "ClimaCell - Daily" assert weather_state.attributes[ATTR_FRIENDLY_NAME] == "ClimaCell - Daily"
assert weather_state.attributes[ATTR_WEATHER_HUMIDITY] == 24 assert weather_state.attributes[ATTR_WEATHER_HUMIDITY] == 24
assert weather_state.attributes[ATTR_WEATHER_OZONE] == 52.625 assert weather_state.attributes[ATTR_WEATHER_OZONE] == 52.625
assert weather_state.attributes[ATTR_WEATHER_PRESSURE] == 1028.12 assert weather_state.attributes[ATTR_WEATHER_PRESSURE] == 1028.1246
assert weather_state.attributes[ATTR_WEATHER_TEMPERATURE] == 7 assert weather_state.attributes[ATTR_WEATHER_TEMPERATURE] == 7
assert weather_state.attributes[ATTR_WEATHER_VISIBILITY] == 9.99 assert weather_state.attributes[ATTR_WEATHER_VISIBILITY] == 9.9940
assert weather_state.attributes[ATTR_WEATHER_WIND_BEARING] == 320.31 assert weather_state.attributes[ATTR_WEATHER_WIND_BEARING] == 320.31
assert weather_state.attributes[ATTR_WEATHER_WIND_SPEED] == 14.63 assert weather_state.attributes[ATTR_WEATHER_WIND_SPEED] == 14.6289
assert weather_state.attributes[ATTR_CLOUD_COVER] == 100 assert weather_state.attributes[ATTR_CLOUD_COVER] == 100
assert weather_state.attributes[ATTR_WIND_GUST] == 24.0758 assert weather_state.attributes[ATTR_WIND_GUST] == 24.0758
assert weather_state.attributes[ATTR_PRECIPITATION_TYPE] == "rain" assert weather_state.attributes[ATTR_PRECIPITATION_TYPE] == "rain"
@ -243,9 +235,6 @@ async def test_v4_weather(
climacell_config_entry_update: pytest.fixture, climacell_config_entry_update: pytest.fixture,
) -> None: ) -> None:
"""Test v4 weather data.""" """Test v4 weather data."""
hass.config.units.wind_speed_unit = SPEED_KILOMETERS_PER_HOUR
hass.config.units.pressure_unit = PRESSURE_HPA
weather_state = await _setup(hass, API_V4_ENTRY_DATA) weather_state = await _setup(hass, API_V4_ENTRY_DATA)
assert weather_state.state == ATTR_CONDITION_SUNNY assert weather_state.state == ATTR_CONDITION_SUNNY
assert weather_state.attributes[ATTR_ATTRIBUTION] == ATTRIBUTION assert weather_state.attributes[ATTR_ATTRIBUTION] == ATTRIBUTION
@ -253,152 +242,152 @@ async def test_v4_weather(
{ {
ATTR_FORECAST_CONDITION: ATTR_CONDITION_SUNNY, ATTR_FORECAST_CONDITION: ATTR_CONDITION_SUNNY,
ATTR_FORECAST_TIME: "2021-03-07T11:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-07T11:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 8, ATTR_FORECAST_TEMP: 8,
ATTR_FORECAST_TEMP_LOW: -3, ATTR_FORECAST_TEMP_LOW: -3,
ATTR_FORECAST_WIND_BEARING: 239.6, ATTR_FORECAST_WIND_BEARING: 239.6,
ATTR_FORECAST_WIND_SPEED: pytest.approx(15.2727, abs=0.01), ATTR_FORECAST_WIND_SPEED: 15.2727,
}, },
{ {
ATTR_FORECAST_CONDITION: "cloudy", ATTR_FORECAST_CONDITION: "cloudy",
ATTR_FORECAST_TIME: "2021-03-08T11:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-08T11:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 10, ATTR_FORECAST_TEMP: 10,
ATTR_FORECAST_TEMP_LOW: -3, ATTR_FORECAST_TEMP_LOW: -3,
ATTR_FORECAST_WIND_BEARING: 262.82, ATTR_FORECAST_WIND_BEARING: 262.82,
ATTR_FORECAST_WIND_SPEED: pytest.approx(11.6517, abs=0.01), ATTR_FORECAST_WIND_SPEED: 11.6517,
}, },
{ {
ATTR_FORECAST_CONDITION: "cloudy", ATTR_FORECAST_CONDITION: "cloudy",
ATTR_FORECAST_TIME: "2021-03-09T11:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-09T11:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 19, ATTR_FORECAST_TEMP: 19,
ATTR_FORECAST_TEMP_LOW: 0, ATTR_FORECAST_TEMP_LOW: 0,
ATTR_FORECAST_WIND_BEARING: 229.3, ATTR_FORECAST_WIND_BEARING: 229.3,
ATTR_FORECAST_WIND_SPEED: pytest.approx(11.3459, abs=0.01), ATTR_FORECAST_WIND_SPEED: 11.3459,
}, },
{ {
ATTR_FORECAST_CONDITION: "cloudy", ATTR_FORECAST_CONDITION: "cloudy",
ATTR_FORECAST_TIME: "2021-03-10T11:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-10T11:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 18, ATTR_FORECAST_TEMP: 18,
ATTR_FORECAST_TEMP_LOW: 3, ATTR_FORECAST_TEMP_LOW: 3,
ATTR_FORECAST_WIND_BEARING: 149.91, ATTR_FORECAST_WIND_BEARING: 149.91,
ATTR_FORECAST_WIND_SPEED: pytest.approx(17.1234, abs=0.01), ATTR_FORECAST_WIND_SPEED: 17.1234,
}, },
{ {
ATTR_FORECAST_CONDITION: "cloudy", ATTR_FORECAST_CONDITION: "cloudy",
ATTR_FORECAST_TIME: "2021-03-11T11:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-11T11:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 19, ATTR_FORECAST_TEMP: 19,
ATTR_FORECAST_TEMP_LOW: 9, ATTR_FORECAST_TEMP_LOW: 9,
ATTR_FORECAST_WIND_BEARING: 210.45, ATTR_FORECAST_WIND_BEARING: 210.45,
ATTR_FORECAST_WIND_SPEED: pytest.approx(25.2506, abs=0.01), ATTR_FORECAST_WIND_SPEED: 25.2506,
}, },
{ {
ATTR_FORECAST_CONDITION: "rainy", ATTR_FORECAST_CONDITION: "rainy",
ATTR_FORECAST_TIME: "2021-03-12T11:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-12T11:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0.1219, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0.1219,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25,
ATTR_FORECAST_TEMP: 20, ATTR_FORECAST_TEMP: 20,
ATTR_FORECAST_TEMP_LOW: 12, ATTR_FORECAST_TEMP_LOW: 12,
ATTR_FORECAST_WIND_BEARING: 217.98, ATTR_FORECAST_WIND_BEARING: 217.98,
ATTR_FORECAST_WIND_SPEED: pytest.approx(19.7949, abs=0.01), ATTR_FORECAST_WIND_SPEED: 19.7949,
}, },
{ {
ATTR_FORECAST_CONDITION: "cloudy", ATTR_FORECAST_CONDITION: "cloudy",
ATTR_FORECAST_TIME: "2021-03-13T11:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-13T11:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 25,
ATTR_FORECAST_TEMP: 12, ATTR_FORECAST_TEMP: 12,
ATTR_FORECAST_TEMP_LOW: 6, ATTR_FORECAST_TEMP_LOW: 6,
ATTR_FORECAST_WIND_BEARING: 58.79, ATTR_FORECAST_WIND_BEARING: 58.79,
ATTR_FORECAST_WIND_SPEED: pytest.approx(15.6428, abs=0.01), ATTR_FORECAST_WIND_SPEED: 15.6428,
}, },
{ {
ATTR_FORECAST_CONDITION: "snowy", ATTR_FORECAST_CONDITION: "snowy",
ATTR_FORECAST_TIME: "2021-03-14T10:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-14T10:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(23.9573, abs=0.01), ATTR_FORECAST_PRECIPITATION: 23.9573,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 95, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 95,
ATTR_FORECAST_TEMP: 6, ATTR_FORECAST_TEMP: 6,
ATTR_FORECAST_TEMP_LOW: 1, ATTR_FORECAST_TEMP_LOW: 1,
ATTR_FORECAST_WIND_BEARING: 70.25, ATTR_FORECAST_WIND_BEARING: 70.25,
ATTR_FORECAST_WIND_SPEED: pytest.approx(26.1518, abs=0.01), ATTR_FORECAST_WIND_SPEED: 26.1518,
}, },
{ {
ATTR_FORECAST_CONDITION: "snowy", ATTR_FORECAST_CONDITION: "snowy",
ATTR_FORECAST_TIME: "2021-03-15T10:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-15T10:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(1.4630, abs=0.01), ATTR_FORECAST_PRECIPITATION: 1.4630,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 55, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 55,
ATTR_FORECAST_TEMP: 6, ATTR_FORECAST_TEMP: 6,
ATTR_FORECAST_TEMP_LOW: -1, ATTR_FORECAST_TEMP_LOW: -1,
ATTR_FORECAST_WIND_BEARING: 84.47, ATTR_FORECAST_WIND_BEARING: 84.47,
ATTR_FORECAST_WIND_SPEED: pytest.approx(25.5725, abs=0.01), ATTR_FORECAST_WIND_SPEED: 25.5725,
}, },
{ {
ATTR_FORECAST_CONDITION: "cloudy", ATTR_FORECAST_CONDITION: "cloudy",
ATTR_FORECAST_TIME: "2021-03-16T10:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-16T10:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 6, ATTR_FORECAST_TEMP: 6,
ATTR_FORECAST_TEMP_LOW: -2, ATTR_FORECAST_TEMP_LOW: -2,
ATTR_FORECAST_WIND_BEARING: 103.85, ATTR_FORECAST_WIND_BEARING: 103.85,
ATTR_FORECAST_WIND_SPEED: pytest.approx(10.7987, abs=0.01), ATTR_FORECAST_WIND_SPEED: 10.7987,
}, },
{ {
ATTR_FORECAST_CONDITION: "cloudy", ATTR_FORECAST_CONDITION: "cloudy",
ATTR_FORECAST_TIME: "2021-03-17T10:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-17T10:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 0,
ATTR_FORECAST_TEMP: 11, ATTR_FORECAST_TEMP: 11,
ATTR_FORECAST_TEMP_LOW: 1, ATTR_FORECAST_TEMP_LOW: 1,
ATTR_FORECAST_WIND_BEARING: 145.41, ATTR_FORECAST_WIND_BEARING: 145.41,
ATTR_FORECAST_WIND_SPEED: pytest.approx(11.6999, abs=0.01), ATTR_FORECAST_WIND_SPEED: 11.6999,
}, },
{ {
ATTR_FORECAST_CONDITION: "cloudy", ATTR_FORECAST_CONDITION: "cloudy",
ATTR_FORECAST_TIME: "2021-03-18T10:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-18T10:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(0, abs=0.01), ATTR_FORECAST_PRECIPITATION: 0,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 10, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 10,
ATTR_FORECAST_TEMP: 12, ATTR_FORECAST_TEMP: 12,
ATTR_FORECAST_TEMP_LOW: 5, ATTR_FORECAST_TEMP_LOW: 5,
ATTR_FORECAST_WIND_BEARING: 62.99, ATTR_FORECAST_WIND_BEARING: 62.99,
ATTR_FORECAST_WIND_SPEED: pytest.approx(10.5895, abs=0.01), ATTR_FORECAST_WIND_SPEED: 10.5895,
}, },
{ {
ATTR_FORECAST_CONDITION: "rainy", ATTR_FORECAST_CONDITION: "rainy",
ATTR_FORECAST_TIME: "2021-03-19T10:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-19T10:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(2.9261, abs=0.01), ATTR_FORECAST_PRECIPITATION: 2.9261,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 55, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 55,
ATTR_FORECAST_TEMP: 9, ATTR_FORECAST_TEMP: 9,
ATTR_FORECAST_TEMP_LOW: 4, ATTR_FORECAST_TEMP_LOW: 4,
ATTR_FORECAST_WIND_BEARING: 68.54, ATTR_FORECAST_WIND_BEARING: 68.54,
ATTR_FORECAST_WIND_SPEED: pytest.approx(22.3860, abs=0.01), ATTR_FORECAST_WIND_SPEED: 22.3860,
}, },
{ {
ATTR_FORECAST_CONDITION: "snowy", ATTR_FORECAST_CONDITION: "snowy",
ATTR_FORECAST_TIME: "2021-03-20T10:00:00+00:00", ATTR_FORECAST_TIME: "2021-03-20T10:00:00+00:00",
ATTR_FORECAST_PRECIPITATION: pytest.approx(1.2192, abs=0.01), ATTR_FORECAST_PRECIPITATION: 1.2192,
ATTR_FORECAST_PRECIPITATION_PROBABILITY: 33.3, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 33.3,
ATTR_FORECAST_TEMP: 5, ATTR_FORECAST_TEMP: 5,
ATTR_FORECAST_TEMP_LOW: 2, ATTR_FORECAST_TEMP_LOW: 2,
ATTR_FORECAST_WIND_BEARING: 56.98, ATTR_FORECAST_WIND_BEARING: 56.98,
ATTR_FORECAST_WIND_SPEED: pytest.approx(27.9221, abs=0.01), ATTR_FORECAST_WIND_SPEED: 27.9221,
}, },
] ]
assert weather_state.attributes[ATTR_FRIENDLY_NAME] == "ClimaCell - Daily" assert weather_state.attributes[ATTR_FRIENDLY_NAME] == "ClimaCell - Daily"
assert weather_state.attributes[ATTR_WEATHER_HUMIDITY] == 23 assert weather_state.attributes[ATTR_WEATHER_HUMIDITY] == 23
assert weather_state.attributes[ATTR_WEATHER_OZONE] == 46.53 assert weather_state.attributes[ATTR_WEATHER_OZONE] == 46.53
assert weather_state.attributes[ATTR_WEATHER_PRESSURE] == 1027.77 assert weather_state.attributes[ATTR_WEATHER_PRESSURE] == 1027.7691
assert weather_state.attributes[ATTR_WEATHER_TEMPERATURE] == 7 assert weather_state.attributes[ATTR_WEATHER_TEMPERATURE] == 7
assert weather_state.attributes[ATTR_WEATHER_VISIBILITY] == 13.12 assert weather_state.attributes[ATTR_WEATHER_VISIBILITY] == 13.1162
assert weather_state.attributes[ATTR_WEATHER_WIND_BEARING] == 315.14 assert weather_state.attributes[ATTR_WEATHER_WIND_BEARING] == 315.14
assert weather_state.attributes[ATTR_WEATHER_WIND_SPEED] == 15.02 assert weather_state.attributes[ATTR_WEATHER_WIND_SPEED] == 15.0152
assert weather_state.attributes[ATTR_CLOUD_COVER] == 100 assert weather_state.attributes[ATTR_CLOUD_COVER] == 100
assert weather_state.attributes[ATTR_WIND_GUST] == 20.3421 assert weather_state.attributes[ATTR_WIND_GUST] == 20.3421
assert weather_state.attributes[ATTR_PRECIPITATION_TYPE] == "rain" assert weather_state.attributes[ATTR_PRECIPITATION_TYPE] == "rain"