From 3e93dd6a01ab2b73b96a6b5478fbe7a0379250c4 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Wed, 24 May 2023 09:00:37 -0400 Subject: [PATCH] Update name for Notification CC sensors and buttons (#93019) * Update name for Notification CC sensors and buttons * Add comment with reference to names --- homeassistant/components/zwave_js/button.py | 4 +++- homeassistant/components/zwave_js/entity.py | 7 +++++-- homeassistant/components/zwave_js/sensor.py | 22 +++++++++++++++++++++ tests/components/zwave_js/common.py | 2 +- tests/components/zwave_js/test_button.py | 9 ++++++--- tests/components/zwave_js/test_init.py | 6 ++++-- 6 files changed, 41 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/zwave_js/button.py b/homeassistant/components/zwave_js/button.py index e743284abdd..ae6cca03c3d 100644 --- a/homeassistant/components/zwave_js/button.py +++ b/homeassistant/components/zwave_js/button.py @@ -122,7 +122,9 @@ class ZWaveNotificationIdleButton(ZWaveBaseEntity, ButtonEntity): """Initialize a ZWaveNotificationIdleButton entity.""" super().__init__(config_entry, driver, info) self._attr_name = self.generate_name( - include_value_name=True, name_prefix="Idle" + alternate_value_name=self.info.primary_value.property_name, + additional_info=[self.info.primary_value.property_key_name], + name_prefix="Idle", ) self._attr_unique_id = f"{self._attr_unique_id}.notification_idle" diff --git a/homeassistant/components/zwave_js/entity.py b/homeassistant/components/zwave_js/entity.py index 1f43f9f5bdb..379fe4a1825 100644 --- a/homeassistant/components/zwave_js/entity.py +++ b/homeassistant/components/zwave_js/entity.py @@ -126,7 +126,7 @@ class ZWaveBaseEntity(Entity): self, include_value_name: bool = False, alternate_value_name: str | None = None, - additional_info: list[str] | None = None, + additional_info: list[str | None] | None = None, name_prefix: str | None = None, ) -> str: """Generate entity name.""" @@ -155,8 +155,11 @@ class ZWaveBaseEntity(Entity): or self.info.primary_value.property_name or "" ) + name = f"{name} {value_name}".strip() - name = f"{name} {' '.join(additional_info or [])}".strip() + # Only include non empty additional info + if additional_info := [item for item in (additional_info or []) if item]: + name = f"{name} {' '.join(additional_info)}" # append endpoint if > 1 if ( self.info.primary_value.endpoint is not None diff --git a/homeassistant/components/zwave_js/sensor.py b/homeassistant/components/zwave_js/sensor.py index 313110169c3..a9f83dcad42 100644 --- a/homeassistant/components/zwave_js/sensor.py +++ b/homeassistant/components/zwave_js/sensor.py @@ -468,6 +468,28 @@ class ZWaveMeterSensor(ZWaveNumericSensor): class ZWaveListSensor(ZwaveSensor): """Representation of a Z-Wave Numeric sensor with multiple states.""" + def __init__( + self, + config_entry: ConfigEntry, + driver: Driver, + info: ZwaveDiscoveryInfo, + entity_description: SensorEntityDescription, + unit_of_measurement: str | None = None, + ) -> None: + """Initialize a ZWaveListSensor entity.""" + super().__init__( + config_entry, driver, info, entity_description, unit_of_measurement + ) + + # Entity class attributes + # Notification sensors have the following name mapping (variables are property + # keys, name is property) + # https://github.com/zwave-js/node-zwave-js/blob/master/packages/config/config/notifications.json + self._attr_name = self.generate_name( + alternate_value_name=self.info.primary_value.property_name, + additional_info=[self.info.primary_value.property_key_name], + ) + @property def device_class(self) -> SensorDeviceClass | None: """Return sensor device class.""" diff --git a/tests/components/zwave_js/common.py b/tests/components/zwave_js/common.py index 49fbe96f162..aee2322b2af 100644 --- a/tests/components/zwave_js/common.py +++ b/tests/components/zwave_js/common.py @@ -24,7 +24,7 @@ LOW_BATTERY_BINARY_SENSOR = "binary_sensor.multisensor_6_low_battery_level" ENABLED_LEGACY_BINARY_SENSOR = "binary_sensor.z_wave_door_window_sensor_any" DISABLED_LEGACY_BINARY_SENSOR = "binary_sensor.multisensor_6_any" NOTIFICATION_MOTION_BINARY_SENSOR = "binary_sensor.multisensor_6_motion_detection" -NOTIFICATION_MOTION_SENSOR = "sensor.multisensor_6_motion_sensor_status" +NOTIFICATION_MOTION_SENSOR = "sensor.multisensor_6_home_security_motion_sensor_status" INDICATOR_SENSOR = "sensor.z_wave_thermostat_indicator_value" BASIC_NUMBER_ENTITY = "number.livingroomlight_basic" PROPERTY_DOOR_STATUS_BINARY_SENSOR = ( diff --git a/tests/components/zwave_js/test_button.py b/tests/components/zwave_js/test_button.py index 9e2c5187218..e4c33e313c6 100644 --- a/tests/components/zwave_js/test_button.py +++ b/tests/components/zwave_js/test_button.py @@ -67,17 +67,20 @@ async def test_notification_idle_button( ) -> None: """Test Notification idle button.""" node = multisensor_6 - state = hass.states.get("button.multisensor_6_idle_cover_status") + state = hass.states.get("button.multisensor_6_idle_home_security_cover_status") assert state assert state.state == "unknown" - assert state.attributes["friendly_name"] == "Multisensor 6 Idle Cover status" + assert ( + state.attributes["friendly_name"] + == "Multisensor 6 Idle Home Security Cover status" + ) # Test successful idle call await hass.services.async_call( BUTTON_DOMAIN, SERVICE_PRESS, { - ATTR_ENTITY_ID: "button.multisensor_6_idle_cover_status", + ATTR_ENTITY_ID: "button.multisensor_6_idle_home_security_cover_status", }, blocking=True, ) diff --git a/tests/components/zwave_js/test_init.py b/tests/components/zwave_js/test_init.py index 22cbe87d0b4..a6fbebf4b64 100644 --- a/tests/components/zwave_js/test_init.py +++ b/tests/components/zwave_js/test_init.py @@ -1362,8 +1362,10 @@ async def test_disabled_entity_on_value_removed( er_reg = er.async_get(hass) # re-enable this default-disabled entity - sensor_cover_entity = "sensor.4_in_1_sensor_cover_status" - idle_cover_status_button_entity = "button.4_in_1_sensor_idle_cover_status" + sensor_cover_entity = "sensor.4_in_1_sensor_home_security_cover_status" + idle_cover_status_button_entity = ( + "button.4_in_1_sensor_idle_home_security_cover_status" + ) er_reg.async_update_entity(entity_id=sensor_cover_entity, disabled_by=None) await hass.async_block_till_done()