From 96455c74f03206c02ba46d662e4c4e861dd8aefa Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Fri, 28 Apr 2023 23:24:35 -0400 Subject: [PATCH] Use enum sensor device class in Z-Wave (#92029) * Use enum sensor device class where appropriate * update docstring --- homeassistant/components/zwave_js/sensor.py | 61 +++++++++++++++------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/zwave_js/sensor.py b/homeassistant/components/zwave_js/sensor.py index 7a0532f00eb..f7fe5f52d79 100644 --- a/homeassistant/components/zwave_js/sensor.py +++ b/homeassistant/components/zwave_js/sensor.py @@ -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: