1 """Support for IPMA sensors."""
3 from __future__
import annotations
6 from collections.abc
import Callable, Coroutine
7 from dataclasses
import dataclass
10 from pyipma.api
import IPMA_API
11 from pyipma.location
import Location
12 from pyipma.rcm
import RCM
13 from pyipma.uv
import UV
21 from .const
import DATA_API, DATA_LOCATION, DOMAIN, MIN_TIME_BETWEEN_UPDATES
22 from .entity
import IPMADevice
24 _LOGGER = logging.getLogger(__name__)
27 @dataclass(frozen=True, kw_only=True)
29 """Describes a IPMA sensor entity."""
31 value_fn: Callable[[Location, IPMA_API], Coroutine[Location, IPMA_API, int |
None]]
36 fire_risk: RCM = await location.fire_risk(api)
44 uv_risk: UV = await location.uv_risk(api)
46 return round(uv_risk.iUv)
50 SENSOR_TYPES: tuple[IPMASensorEntityDescription, ...] = (
53 translation_key=
"fire_risk",
54 value_fn=async_retrieve_rcm,
58 translation_key=
"uv_index",
59 value_fn=async_retrieve_uvi,
65 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
67 """Set up the IPMA sensor platform."""
68 api = hass.data[DOMAIN][entry.entry_id][DATA_API]
69 location = hass.data[DOMAIN][entry.entry_id][DATA_LOCATION]
71 entities = [
IPMASensor(api, location, description)
for description
in SENSOR_TYPES]
77 """Representation of an IPMA sensor."""
79 entity_description: IPMASensorEntityDescription
80 _attr_has_entity_name =
True
86 description: IPMASensorEntityDescription,
88 """Initialize the IPMA Sensor."""
89 IPMADevice.__init__(self, api, location)
91 self.
_attr_unique_id_attr_unique_id = f
"{self._location.station_latitude}, {self._location.station_longitude}, {self.entity_description.key}"
93 @Throttle(MIN_TIME_BETWEEN_UPDATES)
96 async
with asyncio.timeout(10):
None __init__(self, IPMA_API api, Location location, IPMASensorEntityDescription description)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
int|None async_retrieve_rcm(Location location, IPMA_API api)
int|None async_retrieve_uvi(Location location, IPMA_API api)