Use EntityDescription - point (#54363)

This commit is contained in:
Marc Mueller 2021-08-16 22:54:56 +02:00 committed by GitHub
parent f9fbcd4aec
commit 236ccb933c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,14 @@
"""Support for Minut Point sensors."""
from __future__ import annotations
from dataclasses import dataclass
import logging
from homeassistant.components.sensor import DOMAIN, SensorEntity
from homeassistant.components.sensor import (
DOMAIN,
SensorEntity,
SensorEntityDescription,
)
from homeassistant.const import (
DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_PRESSURE,
@ -21,12 +28,48 @@ _LOGGER = logging.getLogger(__name__)
DEVICE_CLASS_SOUND = "sound_level"
SENSOR_TYPES = {
DEVICE_CLASS_TEMPERATURE: (None, 1, TEMP_CELSIUS),
DEVICE_CLASS_PRESSURE: (None, 0, PRESSURE_HPA),
DEVICE_CLASS_HUMIDITY: (None, 1, PERCENTAGE),
DEVICE_CLASS_SOUND: ("mdi:ear-hearing", 1, SOUND_PRESSURE_WEIGHTED_DBA),
}
@dataclass
class MinutPointRequiredKeysMixin:
"""Mixin for required keys."""
precision: int
@dataclass
class MinutPointSensorEntityDescription(
SensorEntityDescription, MinutPointRequiredKeysMixin
):
"""Describes MinutPoint sensor entity."""
SENSOR_TYPES: tuple[MinutPointSensorEntityDescription, ...] = (
MinutPointSensorEntityDescription(
key="temperature",
precision=1,
device_class=DEVICE_CLASS_TEMPERATURE,
native_unit_of_measurement=TEMP_CELSIUS,
),
MinutPointSensorEntityDescription(
key="pressure",
precision=0,
device_class=DEVICE_CLASS_PRESSURE,
native_unit_of_measurement=PRESSURE_HPA,
),
MinutPointSensorEntityDescription(
key="humidity",
precision=1,
device_class=DEVICE_CLASS_HUMIDITY,
native_unit_of_measurement=PERCENTAGE,
),
MinutPointSensorEntityDescription(
key="sound",
precision=1,
device_class=DEVICE_CLASS_SOUND,
icon="mdi:ear-hearing",
native_unit_of_measurement=SOUND_PRESSURE_WEIGHTED_DBA,
),
)
async def async_setup_entry(hass, config_entry, async_add_entities):
@ -36,10 +79,10 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
"""Discover and add a discovered sensor."""
client = hass.data[POINT_DOMAIN][config_entry.entry_id]
async_add_entities(
(
MinutPointSensor(client, device_id, sensor_type)
for sensor_type in SENSOR_TYPES
),
[
MinutPointSensor(client, device_id, description)
for description in SENSOR_TYPES
],
True,
)
@ -51,10 +94,14 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
class MinutPointSensor(MinutPointEntity, SensorEntity):
"""The platform class required by Home Assistant."""
def __init__(self, point_client, device_id, device_class):
entity_description: MinutPointSensorEntityDescription
def __init__(
self, point_client, device_id, description: MinutPointSensorEntityDescription
):
"""Initialize the sensor."""
super().__init__(point_client, device_id, device_class)
self._device_prop = SENSOR_TYPES[device_class]
super().__init__(point_client, device_id, description.device_class)
self.entity_description = description
async def _update_callback(self):
"""Update the value of the sensor."""
@ -64,19 +111,9 @@ class MinutPointSensor(MinutPointEntity, SensorEntity):
self._updated = parse_datetime(self.device.last_update)
self.async_write_ha_state()
@property
def icon(self):
"""Return the icon representation."""
return self._device_prop[0]
@property
def native_value(self):
"""Return the state of the sensor."""
if self.value is None:
return None
return round(self.value, self._device_prop[1])
@property
def native_unit_of_measurement(self):
"""Return the unit of measurement."""
return self._device_prop[2]
return round(self.value, self.entity_description.precision)