diff --git a/homeassistant/components/ads/sensor.py b/homeassistant/components/ads/sensor.py index 9df2fb1ee84..40a61da6657 100644 --- a/homeassistant/components/ads/sensor.py +++ b/homeassistant/components/ads/sensor.py @@ -5,10 +5,15 @@ from __future__ import annotations import voluptuous as vol from homeassistant.components.sensor import ( + CONF_STATE_CLASS, + DEVICE_CLASSES_SCHEMA as SENSOR_DEVICE_CLASSES_SCHEMA, PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA, + STATE_CLASSES_SCHEMA as SENSOR_STATE_CLASSES_SCHEMA, + SensorDeviceClass, SensorEntity, + SensorStateClass, ) -from homeassistant.const import CONF_NAME, CONF_UNIT_OF_MEASUREMENT +from homeassistant.const import CONF_DEVICE_CLASS, CONF_NAME, CONF_UNIT_OF_MEASUREMENT from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback @@ -19,21 +24,31 @@ from . import ADS_TYPEMAP, CONF_ADS_FACTOR, CONF_ADS_TYPE, CONF_ADS_VAR, STATE_K from .entity import AdsEntity DEFAULT_NAME = "ADS sensor" + PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend( { vol.Required(CONF_ADS_VAR): cv.string, vol.Optional(CONF_ADS_FACTOR): cv.positive_int, vol.Optional(CONF_ADS_TYPE, default=ads.ADSTYPE_INT): vol.In( [ + ads.ADSTYPE_BOOL, + ads.ADSTYPE_BYTE, ads.ADSTYPE_INT, ads.ADSTYPE_UINT, - ads.ADSTYPE_BYTE, + ads.ADSTYPE_SINT, + ads.ADSTYPE_USINT, ads.ADSTYPE_DINT, ads.ADSTYPE_UDINT, + ads.ADSTYPE_WORD, + ads.ADSTYPE_DWORD, + ads.ADSTYPE_LREAL, + ads.ADSTYPE_REAL, ] ), vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_UNIT_OF_MEASUREMENT, default=""): cv.string, + vol.Optional(CONF_DEVICE_CLASS): SENSOR_DEVICE_CLASSES_SCHEMA, + vol.Optional(CONF_STATE_CLASS): SENSOR_STATE_CLASSES_SCHEMA, + vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string, } ) @@ -45,15 +60,25 @@ def setup_platform( discovery_info: DiscoveryInfoType | None = None, ) -> None: """Set up an ADS sensor device.""" - ads_hub = hass.data.get(ads.DATA_ADS) - + ads_hub: ads.AdsHub = hass.data[ads.DATA_ADS] ads_var = config[CONF_ADS_VAR] ads_type = config[CONF_ADS_TYPE] name = config[CONF_NAME] - unit_of_measurement = config.get(CONF_UNIT_OF_MEASUREMENT) factor = config.get(CONF_ADS_FACTOR) + device_class = config.get(CONF_DEVICE_CLASS) + state_class = config.get(CONF_STATE_CLASS) + unit_of_measurement = config.get(CONF_UNIT_OF_MEASUREMENT) - entity = AdsSensor(ads_hub, ads_var, ads_type, name, unit_of_measurement, factor) + entity = AdsSensor( + ads_hub, + ads_var, + ads_type, + name, + factor, + device_class, + state_class, + unit_of_measurement, + ) add_entities([entity]) @@ -61,12 +86,24 @@ def setup_platform( class AdsSensor(AdsEntity, SensorEntity): """Representation of an ADS sensor entity.""" - def __init__(self, ads_hub, ads_var, ads_type, name, unit_of_measurement, factor): + def __init__( + self, + ads_hub: ads.AdsHub, + ads_var: str, + ads_type: str, + name: str, + factor: int | None, + device_class: SensorDeviceClass | None, + state_class: SensorStateClass | None, + unit_of_measurement: str | None, + ) -> None: """Initialize AdsSensor entity.""" super().__init__(ads_hub, name, ads_var) - self._attr_native_unit_of_measurement = unit_of_measurement self._ads_type = ads_type self._factor = factor + self._attr_device_class = device_class + self._attr_state_class = state_class + self._attr_native_unit_of_measurement = unit_of_measurement async def async_added_to_hass(self) -> None: """Register device notification."""