Use enum sensor device class in Z-Wave (#92029)

* Use enum sensor device class where appropriate

* update docstring
pull/92222/head
Raman Gupta 2023-04-28 23:24:35 -04:00 committed by GitHub
parent 65837c9075
commit 96455c74f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 44 additions and 17 deletions

View File

@ -491,7 +491,7 @@ class ZWaveMeterSensor(ZWaveNumericSensor):
class ZWaveListSensor(ZwaveSensorBase):
"""Representation of a Z-Wave Numeric sensor with multiple states."""
"""Representation of a Z-Wave List sensor with multiple states."""
def __init__(
self,
@ -509,19 +509,31 @@ class ZWaveListSensor(ZwaveSensorBase):
# Entity class attributes
self._attr_name = self.generate_name(include_value_name=True)
@property
def device_class(self) -> SensorDeviceClass | None:
"""Return sensor device class."""
if super().device_class is not None:
return super().device_class
if self.info.primary_value.metadata.states:
return SensorDeviceClass.ENUM
return None
@property
def options(self) -> list[str] | None:
"""Return options for enum sensor."""
if self.device_class == SensorDeviceClass.ENUM:
return list(self.info.primary_value.metadata.states.values())
return None
@property
def native_value(self) -> str | None:
"""Return state of the sensor."""
if self.info.primary_value.value is None:
return None
if (
str(self.info.primary_value.value)
not in self.info.primary_value.metadata.states
):
return str(self.info.primary_value.value)
return str(
self.info.primary_value.metadata.states[str(self.info.primary_value.value)]
)
key = str(self.info.primary_value.value)
if key not in self.info.primary_value.metadata.states:
return key
return str(self.info.primary_value.metadata.states[key])
@property
def extra_state_attributes(self) -> dict[str, str] | None:
@ -557,22 +569,37 @@ class ZWaveConfigParameterSensor(ZwaveSensorBase):
name_prefix="Config parameter",
)
@property
def device_class(self) -> SensorDeviceClass | None:
"""Return sensor device class."""
if super().device_class is not None:
return super().device_class
if (
self._primary_value.configuration_value_type
== ConfigurationValueType.ENUMERATED
):
return SensorDeviceClass.ENUM
return None
@property
def options(self) -> list[str] | None:
"""Return options for enum sensor."""
if self.device_class == SensorDeviceClass.ENUM:
return list(self.info.primary_value.metadata.states.values())
return None
@property
def native_value(self) -> str | None:
"""Return state of the sensor."""
if self.info.primary_value.value is None:
return None
key = str(self.info.primary_value.value)
if (
self._primary_value.configuration_value_type == ConfigurationValueType.RANGE
or (
str(self.info.primary_value.value)
not in self.info.primary_value.metadata.states
)
or (key not in self.info.primary_value.metadata.states)
):
return str(self.info.primary_value.value)
return str(
self.info.primary_value.metadata.states[str(self.info.primary_value.value)]
)
return key
return str(self.info.primary_value.metadata.states[key])
@property
def extra_state_attributes(self) -> dict[str, str] | None: