mirror of
https://github.com/home-assistant/core
synced 2024-09-09 12:51:22 +02:00
Migrate openweathermap to native_* (#73913)
This commit is contained in:
parent
00a79635c1
commit
e57f34f0f2
@ -22,11 +22,11 @@ from homeassistant.components.weather import (
|
||||
ATTR_CONDITION_WINDY,
|
||||
ATTR_CONDITION_WINDY_VARIANT,
|
||||
ATTR_FORECAST_CONDITION,
|
||||
ATTR_FORECAST_PRECIPITATION,
|
||||
ATTR_FORECAST_NATIVE_PRECIPITATION,
|
||||
ATTR_FORECAST_NATIVE_PRESSURE,
|
||||
ATTR_FORECAST_NATIVE_TEMP,
|
||||
ATTR_FORECAST_NATIVE_TEMP_LOW,
|
||||
ATTR_FORECAST_PRECIPITATION_PROBABILITY,
|
||||
ATTR_FORECAST_PRESSURE,
|
||||
ATTR_FORECAST_TEMP,
|
||||
ATTR_FORECAST_TEMP_LOW,
|
||||
ATTR_FORECAST_TIME,
|
||||
)
|
||||
from homeassistant.const import (
|
||||
@ -266,7 +266,7 @@ FORECAST_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
|
||||
name="Condition",
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key=ATTR_FORECAST_PRECIPITATION,
|
||||
key=ATTR_FORECAST_NATIVE_PRECIPITATION,
|
||||
name="Precipitation",
|
||||
native_unit_of_measurement=LENGTH_MILLIMETERS,
|
||||
),
|
||||
@ -276,19 +276,19 @@ FORECAST_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key=ATTR_FORECAST_PRESSURE,
|
||||
key=ATTR_FORECAST_NATIVE_PRESSURE,
|
||||
name="Pressure",
|
||||
native_unit_of_measurement=PRESSURE_HPA,
|
||||
device_class=SensorDeviceClass.PRESSURE,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key=ATTR_FORECAST_TEMP,
|
||||
key=ATTR_FORECAST_NATIVE_TEMP,
|
||||
name="Temperature",
|
||||
native_unit_of_measurement=TEMP_CELSIUS,
|
||||
device_class=SensorDeviceClass.TEMPERATURE,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key=ATTR_FORECAST_TEMP_LOW,
|
||||
key=ATTR_FORECAST_NATIVE_TEMP_LOW,
|
||||
name="Temperature Low",
|
||||
native_unit_of_measurement=TEMP_CELSIUS,
|
||||
device_class=SensorDeviceClass.TEMPERATURE,
|
||||
|
@ -3,12 +3,16 @@ from __future__ import annotations
|
||||
|
||||
from homeassistant.components.weather import Forecast, WeatherEntity
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import PRESSURE_HPA, PRESSURE_INHG, TEMP_CELSIUS
|
||||
from homeassistant.const import (
|
||||
LENGTH_MILLIMETERS,
|
||||
PRESSURE_HPA,
|
||||
SPEED_METERS_PER_SECOND,
|
||||
TEMP_CELSIUS,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.device_registry import DeviceEntryType
|
||||
from homeassistant.helpers.entity import DeviceInfo
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.util.pressure import convert as pressure_convert
|
||||
|
||||
from .const import (
|
||||
ATTR_API_CONDITION,
|
||||
@ -49,7 +53,11 @@ class OpenWeatherMapWeather(WeatherEntity):
|
||||
|
||||
_attr_attribution = ATTRIBUTION
|
||||
_attr_should_poll = False
|
||||
_attr_temperature_unit = TEMP_CELSIUS
|
||||
|
||||
_attr_native_precipitation_unit = LENGTH_MILLIMETERS
|
||||
_attr_native_pressure_unit = PRESSURE_HPA
|
||||
_attr_native_temperature_unit = TEMP_CELSIUS
|
||||
_attr_native_wind_speed_unit = SPEED_METERS_PER_SECOND
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
@ -74,19 +82,14 @@ class OpenWeatherMapWeather(WeatherEntity):
|
||||
return self._weather_coordinator.data[ATTR_API_CONDITION]
|
||||
|
||||
@property
|
||||
def temperature(self) -> float | None:
|
||||
def native_temperature(self) -> float | None:
|
||||
"""Return the temperature."""
|
||||
return self._weather_coordinator.data[ATTR_API_TEMPERATURE]
|
||||
|
||||
@property
|
||||
def pressure(self) -> float | None:
|
||||
def native_pressure(self) -> float | None:
|
||||
"""Return the pressure."""
|
||||
pressure = self._weather_coordinator.data[ATTR_API_PRESSURE]
|
||||
# OpenWeatherMap returns pressure in hPA, so convert to
|
||||
# inHg if we aren't using metric.
|
||||
if not self.hass.config.units.is_metric and pressure:
|
||||
return pressure_convert(pressure, PRESSURE_HPA, PRESSURE_INHG)
|
||||
return pressure
|
||||
return self._weather_coordinator.data[ATTR_API_PRESSURE]
|
||||
|
||||
@property
|
||||
def humidity(self) -> float | None:
|
||||
@ -94,12 +97,9 @@ class OpenWeatherMapWeather(WeatherEntity):
|
||||
return self._weather_coordinator.data[ATTR_API_HUMIDITY]
|
||||
|
||||
@property
|
||||
def wind_speed(self) -> float | None:
|
||||
def native_wind_speed(self) -> float | None:
|
||||
"""Return the wind speed."""
|
||||
wind_speed = self._weather_coordinator.data[ATTR_API_WIND_SPEED]
|
||||
if self.hass.config.units.name == "imperial":
|
||||
return round(wind_speed * 2.24, 2)
|
||||
return round(wind_speed * 3.6, 2)
|
||||
return self._weather_coordinator.data[ATTR_API_WIND_SPEED]
|
||||
|
||||
@property
|
||||
def wind_bearing(self) -> float | str | None:
|
||||
|
@ -9,14 +9,14 @@ from homeassistant.components.weather import (
|
||||
ATTR_CONDITION_CLEAR_NIGHT,
|
||||
ATTR_CONDITION_SUNNY,
|
||||
ATTR_FORECAST_CONDITION,
|
||||
ATTR_FORECAST_PRECIPITATION,
|
||||
ATTR_FORECAST_NATIVE_PRECIPITATION,
|
||||
ATTR_FORECAST_NATIVE_PRESSURE,
|
||||
ATTR_FORECAST_NATIVE_TEMP,
|
||||
ATTR_FORECAST_NATIVE_TEMP_LOW,
|
||||
ATTR_FORECAST_NATIVE_WIND_SPEED,
|
||||
ATTR_FORECAST_PRECIPITATION_PROBABILITY,
|
||||
ATTR_FORECAST_PRESSURE,
|
||||
ATTR_FORECAST_TEMP,
|
||||
ATTR_FORECAST_TEMP_LOW,
|
||||
ATTR_FORECAST_TIME,
|
||||
ATTR_FORECAST_WIND_BEARING,
|
||||
ATTR_FORECAST_WIND_SPEED,
|
||||
)
|
||||
from homeassistant.helpers import sun
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
@ -161,14 +161,14 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator):
|
||||
ATTR_FORECAST_TIME: dt.utc_from_timestamp(
|
||||
entry.reference_time("unix")
|
||||
).isoformat(),
|
||||
ATTR_FORECAST_PRECIPITATION: self._calc_precipitation(
|
||||
ATTR_FORECAST_NATIVE_PRECIPITATION: self._calc_precipitation(
|
||||
entry.rain, entry.snow
|
||||
),
|
||||
ATTR_FORECAST_PRECIPITATION_PROBABILITY: (
|
||||
round(entry.precipitation_probability * 100)
|
||||
),
|
||||
ATTR_FORECAST_PRESSURE: entry.pressure.get("press"),
|
||||
ATTR_FORECAST_WIND_SPEED: entry.wind().get("speed"),
|
||||
ATTR_FORECAST_NATIVE_PRESSURE: entry.pressure.get("press"),
|
||||
ATTR_FORECAST_NATIVE_WIND_SPEED: entry.wind().get("speed"),
|
||||
ATTR_FORECAST_WIND_BEARING: entry.wind().get("deg"),
|
||||
ATTR_FORECAST_CONDITION: self._get_condition(
|
||||
entry.weather_code, entry.reference_time("unix")
|
||||
@ -178,10 +178,16 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator):
|
||||
|
||||
temperature_dict = entry.temperature("celsius")
|
||||
if "max" in temperature_dict and "min" in temperature_dict:
|
||||
forecast[ATTR_FORECAST_TEMP] = entry.temperature("celsius").get("max")
|
||||
forecast[ATTR_FORECAST_TEMP_LOW] = entry.temperature("celsius").get("min")
|
||||
forecast[ATTR_FORECAST_NATIVE_TEMP] = entry.temperature("celsius").get(
|
||||
"max"
|
||||
)
|
||||
forecast[ATTR_FORECAST_NATIVE_TEMP_LOW] = entry.temperature("celsius").get(
|
||||
"min"
|
||||
)
|
||||
else:
|
||||
forecast[ATTR_FORECAST_TEMP] = entry.temperature("celsius").get("temp")
|
||||
forecast[ATTR_FORECAST_NATIVE_TEMP] = entry.temperature("celsius").get(
|
||||
"temp"
|
||||
)
|
||||
|
||||
return forecast
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user