Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Meteoclimatic sensor."""
2 
4  SensorDeviceClass,
5  SensorEntity,
6  SensorEntityDescription,
7  SensorStateClass,
8 )
9 from homeassistant.config_entries import ConfigEntry
10 from homeassistant.const import (
11  DEGREE,
12  PERCENTAGE,
13  UnitOfPrecipitationDepth,
14  UnitOfPressure,
15  UnitOfSpeed,
16  UnitOfTemperature,
17 )
18 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
20 from homeassistant.helpers.entity_platform import AddEntitiesCallback
22  CoordinatorEntity,
23  DataUpdateCoordinator,
24 )
25 
26 from .const import ATTRIBUTION, DOMAIN, MANUFACTURER, MODEL
27 
28 SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
30  key="temp_current",
31  name="Temperature",
32  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
33  device_class=SensorDeviceClass.TEMPERATURE,
34  state_class=SensorStateClass.MEASUREMENT,
35  ),
37  key="temp_max",
38  name="Daily Max Temperature",
39  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
40  device_class=SensorDeviceClass.TEMPERATURE,
41  ),
43  key="temp_min",
44  name="Daily Min Temperature",
45  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
46  device_class=SensorDeviceClass.TEMPERATURE,
47  ),
49  key="humidity_current",
50  name="Humidity",
51  native_unit_of_measurement=PERCENTAGE,
52  device_class=SensorDeviceClass.HUMIDITY,
53  state_class=SensorStateClass.MEASUREMENT,
54  ),
56  key="humidity_max",
57  name="Daily Max Humidity",
58  native_unit_of_measurement=PERCENTAGE,
59  device_class=SensorDeviceClass.HUMIDITY,
60  ),
62  key="humidity_min",
63  name="Daily Min Humidity",
64  native_unit_of_measurement=PERCENTAGE,
65  device_class=SensorDeviceClass.HUMIDITY,
66  ),
68  key="pressure_current",
69  name="Pressure",
70  native_unit_of_measurement=UnitOfPressure.HPA,
71  device_class=SensorDeviceClass.PRESSURE,
72  state_class=SensorStateClass.MEASUREMENT,
73  ),
75  key="pressure_max",
76  name="Daily Max Pressure",
77  native_unit_of_measurement=UnitOfPressure.HPA,
78  device_class=SensorDeviceClass.PRESSURE,
79  ),
81  key="pressure_min",
82  name="Daily Min Pressure",
83  native_unit_of_measurement=UnitOfPressure.HPA,
84  device_class=SensorDeviceClass.PRESSURE,
85  ),
87  key="wind_current",
88  name="Wind Speed",
89  native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
90  device_class=SensorDeviceClass.WIND_SPEED,
91  state_class=SensorStateClass.MEASUREMENT,
92  ),
94  key="wind_max",
95  name="Daily Max Wind Speed",
96  native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
97  device_class=SensorDeviceClass.WIND_SPEED,
98  ),
100  key="wind_bearing",
101  name="Wind Bearing",
102  native_unit_of_measurement=DEGREE,
103  icon="mdi:weather-windy",
104  ),
106  key="rain",
107  name="Daily Precipitation",
108  native_unit_of_measurement=UnitOfPrecipitationDepth.MILLIMETERS,
109  device_class=SensorDeviceClass.PRECIPITATION,
110  ),
111 )
112 
113 
115  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
116 ) -> None:
117  """Set up the Meteoclimatic sensor platform."""
118  coordinator = hass.data[DOMAIN][entry.entry_id]
119 
121  [MeteoclimaticSensor(coordinator, description) for description in SENSOR_TYPES],
122  False,
123  )
124 
125 
127  """Representation of a Meteoclimatic sensor."""
128 
129  _attr_attribution = ATTRIBUTION
130 
131  def __init__(
132  self, coordinator: DataUpdateCoordinator, description: SensorEntityDescription
133  ) -> None:
134  """Initialize the Meteoclimatic sensor."""
135  super().__init__(coordinator)
136  self.entity_descriptionentity_description = description
137  station = self.coordinator.data["station"]
138  self._attr_name_attr_name = f"{station.name} {description.name}"
139  self._attr_unique_id_attr_unique_id = f"{station.code}_{description.key}"
140 
141  @property
142  def device_info(self):
143  """Return the device info."""
144  return DeviceInfo(
145  entry_type=DeviceEntryType.SERVICE,
146  identifiers={(DOMAIN, self.platformplatform.config_entry.unique_id)},
147  manufacturer=MANUFACTURER,
148  model=MODEL,
149  name=self.coordinator.name,
150  )
151 
152  @property
153  def native_value(self):
154  """Return the state of the sensor."""
155  return (
156  getattr(self.coordinator.data["weather"], self.entity_descriptionentity_description.key)
157  if self.coordinator.data
158  else None
159  )
None __init__(self, DataUpdateCoordinator coordinator, SensorEntityDescription description)
Definition: sensor.py:133
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:116