diff --git a/homeassistant/components/envirophat/sensor.py b/homeassistant/components/envirophat/sensor.py index 48f53709c40e..cff3e95f3555 100644 --- a/homeassistant/components/envirophat/sensor.py +++ b/homeassistant/components/envirophat/sensor.py @@ -126,9 +126,7 @@ SENSOR_KEYS: list[str] = [desc.key for desc in SENSOR_TYPES] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { - vol.Required(CONF_DISPLAY_OPTIONS, default=list(SENSOR_KEYS)): [ - vol.In(SENSOR_KEYS) - ], + vol.Required(CONF_DISPLAY_OPTIONS, default=SENSOR_KEYS): [vol.In(SENSOR_KEYS)], vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_USE_LEDS, default=False): cv.boolean, } diff --git a/homeassistant/components/sensehat/sensor.py b/homeassistant/components/sensehat/sensor.py index 9274f133441b..8dc74ae4e08d 100644 --- a/homeassistant/components/sensehat/sensor.py +++ b/homeassistant/components/sensehat/sensor.py @@ -1,4 +1,6 @@ """Support for Sense HAT sensors.""" +from __future__ import annotations + from datetime import timedelta import logging from pathlib import Path @@ -6,7 +8,11 @@ from pathlib import Path from sense_hat import SenseHat import voluptuous as vol -from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity +from homeassistant.components.sensor import ( + PLATFORM_SCHEMA, + SensorEntity, + SensorEntityDescription, +) from homeassistant.const import ( CONF_DISPLAY_OPTIONS, CONF_NAME, @@ -24,17 +30,30 @@ CONF_IS_HAT_ATTACHED = "is_hat_attached" MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=60) -SENSOR_TYPES = { - "temperature": ["temperature", TEMP_CELSIUS, DEVICE_CLASS_TEMPERATURE], - "humidity": ["humidity", PERCENTAGE, None], - "pressure": ["pressure", "mb", None], -} +SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( + SensorEntityDescription( + key="temperature", + name="temperature", + native_unit_of_measurement=TEMP_CELSIUS, + device_class=DEVICE_CLASS_TEMPERATURE, + ), + SensorEntityDescription( + key="humidity", + name="humidity", + native_unit_of_measurement=PERCENTAGE, + ), + SensorEntityDescription( + key="pressure", + name="pressure", + native_unit_of_measurement="mb", + ), +) + +SENSOR_KEYS: list[str] = [desc.key for desc in SENSOR_TYPES] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { - vol.Required(CONF_DISPLAY_OPTIONS, default=list(SENSOR_TYPES)): [ - vol.In(SENSOR_TYPES) - ], + vol.Required(CONF_DISPLAY_OPTIONS, default=SENSOR_KEYS): [vol.In(SENSOR_KEYS)], vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_IS_HAT_ATTACHED, default=True): cv.boolean, } @@ -61,39 +80,23 @@ def get_average(temp_base): def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Sense HAT sensor platform.""" data = SenseHatData(config.get(CONF_IS_HAT_ATTACHED)) - dev = [] - for variable in config[CONF_DISPLAY_OPTIONS]: - dev.append(SenseHatSensor(data, variable)) + display_options = config[CONF_DISPLAY_OPTIONS] + entities = [ + SenseHatSensor(data, description) + for description in SENSOR_TYPES + if description.key in display_options + ] - add_entities(dev, True) + add_entities(entities, True) class SenseHatSensor(SensorEntity): """Representation of a Sense HAT sensor.""" - def __init__(self, data, sensor_types): + def __init__(self, data, description: SensorEntityDescription): """Initialize the sensor.""" + self.entity_description = description self.data = data - self._name = SENSOR_TYPES[sensor_types][0] - self._unit_of_measurement = SENSOR_TYPES[sensor_types][1] - self.type = sensor_types - self._state = None - self._attr_device_class = SENSOR_TYPES[sensor_types][2] - - @property - def name(self): - """Return the name of the sensor.""" - return self._name - - @property - def native_value(self): - """Return the state of the sensor.""" - return self._state - - @property - def native_unit_of_measurement(self): - """Return the unit the value is expressed in.""" - return self._unit_of_measurement def update(self): """Get the latest data and updates the states.""" @@ -102,12 +105,13 @@ class SenseHatSensor(SensorEntity): _LOGGER.error("Don't receive data") return - if self.type == "temperature": - self._state = self.data.temperature - if self.type == "humidity": - self._state = self.data.humidity - if self.type == "pressure": - self._state = self.data.pressure + sensor_type = self.entity_description.key + if sensor_type == "temperature": + self._attr_native_value = self.data.temperature + elif sensor_type == "humidity": + self._attr_native_value = self.data.humidity + elif sensor_type == "pressure": + self._attr_native_value = self.data.pressure class SenseHatData: