diff --git a/homeassistant/components/zwave_js/binary_sensor.py b/homeassistant/components/zwave_js/binary_sensor.py index 7fa20b2b1f5..dfb412ca6fa 100644 --- a/homeassistant/components/zwave_js/binary_sensor.py +++ b/homeassistant/components/zwave_js/binary_sensor.py @@ -376,9 +376,7 @@ class ZWaveNotificationBinarySensor(ZWaveBaseEntity, BinarySensorEntity): # Entity class attributes self._attr_name = self.generate_name( - include_value_name=True, - alternate_value_name=self.info.primary_value.property_name, - additional_info=[self.info.primary_value.metadata.states[self.state_key]], + alternate_value_name=self.info.primary_value.metadata.states[self.state_key] ) self._attr_unique_id = f"{self._attr_unique_id}.{self.state_key}" diff --git a/homeassistant/components/zwave_js/button.py b/homeassistant/components/zwave_js/button.py index 1d97ed05da5..c759471670b 100644 --- a/homeassistant/components/zwave_js/button.py +++ b/homeassistant/components/zwave_js/button.py @@ -47,15 +47,14 @@ class ZWaveNodePingButton(ButtonEntity): _attr_should_poll = False _attr_entity_category = EntityCategory.CONFIG + _attr_has_entity_name = True def __init__(self, driver: Driver, node: ZwaveNode) -> None: """Initialize a ping Z-Wave device button entity.""" self.node = node - name: str = ( - node.name or node.device_config.description or f"Node {node.node_id}" - ) + # Entity class attributes - self._attr_name = f"{name}: Ping" + self._attr_name = "Ping" self._base_unique_id = get_valueless_base_unique_id(driver, node) self._attr_unique_id = f"{self._base_unique_id}.ping" # device may not be precreated in main handler yet diff --git a/homeassistant/components/zwave_js/entity.py b/homeassistant/components/zwave_js/entity.py index 65f00b5022a..621316a166f 100644 --- a/homeassistant/components/zwave_js/entity.py +++ b/homeassistant/components/zwave_js/entity.py @@ -24,6 +24,7 @@ class ZWaveBaseEntity(Entity): """Generic Entity Class for a Z-Wave Device.""" _attr_should_poll = False + _attr_has_entity_name = True def __init__( self, config_entry: ConfigEntry, driver: Driver, info: ZwaveDiscoveryInfo @@ -126,29 +127,32 @@ class ZWaveBaseEntity(Entity): include_value_name: bool = False, alternate_value_name: str | None = None, additional_info: list[str] | None = None, - name_suffix: str | None = None, + name_prefix: str | None = None, ) -> str: """Generate entity name.""" - if additional_info is None: - additional_info = [] - name: str = ( - self.info.node.name - or self.info.node.device_config.description - or f"Node {self.info.node.node_id}" - ) - if name_suffix: - name = f"{name} {name_suffix}" - if include_value_name: + name = "" + if ( + hasattr(self, "entity_description") + and self.entity_description + and self.entity_description.name + ): + name = self.entity_description.name + + if name_prefix: + name = f"{name_prefix} {name}".strip() + + value_name = "" + if alternate_value_name: + value_name = alternate_value_name + elif include_value_name: value_name = ( - alternate_value_name - or self.info.primary_value.metadata.label + self.info.primary_value.metadata.label or self.info.primary_value.property_key_name or self.info.primary_value.property_name + or "" ) - name = f"{name}: {value_name}" - for item in additional_info: - if item: - name += f" - {item}" + name = f"{name} {value_name}".strip() + name = f"{name} {' '.join(additional_info or [])}".strip() # append endpoint if > 1 if ( self.info.primary_value.endpoint is not None diff --git a/homeassistant/components/zwave_js/number.py b/homeassistant/components/zwave_js/number.py index 1b17fa35024..f898170e308 100644 --- a/homeassistant/components/zwave_js/number.py +++ b/homeassistant/components/zwave_js/number.py @@ -66,9 +66,7 @@ class ZwaveNumberEntity(ZWaveBaseEntity, NumberEntity): self._target_value = self.get_zwave_value(TARGET_VALUE_PROPERTY) # Entity class attributes - self._attr_name = self.generate_name( - include_value_name=True, alternate_value_name=info.platform_hint - ) + self._attr_name = self.generate_name(alternate_value_name=info.platform_hint) @property def native_min_value(self) -> float: diff --git a/homeassistant/components/zwave_js/select.py b/homeassistant/components/zwave_js/select.py index 81e60582764..0360b968173 100644 --- a/homeassistant/components/zwave_js/select.py +++ b/homeassistant/components/zwave_js/select.py @@ -107,9 +107,7 @@ class ZwaveDefaultToneSelectEntity(ZWaveBaseEntity, SelectEntity): ) # Entity class attributes - self._attr_name = self.generate_name( - include_value_name=True, alternate_value_name=info.platform_hint - ) + self._attr_name = self.generate_name(alternate_value_name=info.platform_hint) @property def options(self) -> list[str]: diff --git a/homeassistant/components/zwave_js/sensor.py b/homeassistant/components/zwave_js/sensor.py index 75d8066d595..4592a6518b8 100644 --- a/homeassistant/components/zwave_js/sensor.py +++ b/homeassistant/components/zwave_js/sensor.py @@ -386,13 +386,8 @@ class ZWaveListSensor(ZwaveSensorBase): config_entry, driver, info, entity_description, unit_of_measurement ) - property_key_name = self.info.primary_value.property_key_name # Entity class attributes - self._attr_name = self.generate_name( - include_value_name=True, - alternate_value_name=self.info.primary_value.property_name, - additional_info=[property_key_name] if property_key_name else None, - ) + self._attr_name = self.generate_name(include_value_name=True) @property def native_value(self) -> str | None: @@ -437,10 +432,9 @@ class ZWaveConfigParameterSensor(ZwaveSensorBase): property_key_name = self.info.primary_value.property_key_name # Entity class attributes self._attr_name = self.generate_name( - include_value_name=True, alternate_value_name=self.info.primary_value.property_name, additional_info=[property_key_name] if property_key_name else None, - name_suffix="Config Parameter", + name_prefix="Config parameter", ) @property @@ -477,6 +471,7 @@ class ZWaveNodeStatusSensor(SensorEntity): _attr_should_poll = False _attr_entity_category = EntityCategory.DIAGNOSTIC + _attr_has_entity_name = True def __init__( self, config_entry: ConfigEntry, driver: Driver, node: ZwaveNode @@ -484,18 +479,13 @@ class ZWaveNodeStatusSensor(SensorEntity): """Initialize a generic Z-Wave device entity.""" self.config_entry = config_entry self.node = node - name: str = ( - self.node.name - or self.node.device_config.description - or f"Node {self.node.node_id}" - ) + # Entity class attributes - self._attr_name = f"{name}: Node Status" + self._attr_name = "Node status" self._base_unique_id = get_valueless_base_unique_id(driver, node) self._attr_unique_id = f"{self._base_unique_id}.node_status" # device may not be precreated in main handler yet self._attr_device_info = get_device_info(driver, node) - self._attr_native_value: str = node.status.name.lower() async def async_poll_value(self, _: bool) -> None: """Poll a value.""" @@ -534,4 +524,5 @@ class ZWaveNodeStatusSensor(SensorEntity): self.async_remove, ) ) + self._attr_native_value: str = self.node.status.name.lower() self.async_write_ha_state() diff --git a/tests/components/zwave_js/common.py b/tests/components/zwave_js/common.py index aea895d03bb..c2079564dcf 100644 --- a/tests/components/zwave_js/common.py +++ b/tests/components/zwave_js/common.py @@ -1,9 +1,7 @@ """Provide common test tools for Z-Wave JS.""" AIR_TEMPERATURE_SENSOR = "sensor.multisensor_6_air_temperature" BATTERY_SENSOR = "sensor.multisensor_6_battery_level" -TAMPER_SENSOR = ( - "binary_sensor.multisensor_6_home_security_tampering_product_cover_removed" -) +TAMPER_SENSOR = "binary_sensor.multisensor_6_tampering_product_cover_removed" HUMIDITY_SENSOR = "sensor.multisensor_6_humidity" POWER_SENSOR = "sensor.smart_plug_with_two_usb_ports_value_electric_consumed" ENERGY_SENSOR = "sensor.smart_plug_with_two_usb_ports_value_electric_consumed_2" @@ -13,10 +11,8 @@ SWITCH_ENTITY = "switch.smart_plug_with_two_usb_ports" 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_home_security_motion_detection" -) -NOTIFICATION_MOTION_SENSOR = "sensor.multisensor_6_home_security_motion_sensor_status" +NOTIFICATION_MOTION_BINARY_SENSOR = "binary_sensor.multisensor_6_motion_detection" +NOTIFICATION_MOTION_SENSOR = "sensor.multisensor_6_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_binary_sensor.py b/tests/components/zwave_js/test_binary_sensor.py index 292bbc2da37..2a1c13b0db2 100644 --- a/tests/components/zwave_js/test_binary_sensor.py +++ b/tests/components/zwave_js/test_binary_sensor.py @@ -141,7 +141,7 @@ async def test_notification_off_state( state = door_states[0] assert state - assert state.entity_id == "binary_sensor.node_62_access_control_window_door_is_open" + assert state.entity_id == "binary_sensor.node_62_window_door_is_open" async def test_property_sensor_door_status(hass, lock_august_pro, integration): diff --git a/tests/components/zwave_js/test_init.py b/tests/components/zwave_js/test_init.py index 63cbc090e7d..5929657f595 100644 --- a/tests/components/zwave_js/test_init.py +++ b/tests/components/zwave_js/test_init.py @@ -347,10 +347,10 @@ async def test_existing_node_not_replaced_when_not_ready( assert not device.area_id assert device == dev_reg.async_get_device(identifiers={(DOMAIN, device_id_ext)}) - motion_entity = "binary_sensor.4_in_1_sensor_home_security_motion_detection" + motion_entity = "binary_sensor.4_in_1_sensor_motion_detection" state = hass.states.get(motion_entity) assert state - assert state.name == "4-in-1 Sensor: Home Security - Motion detection" + assert state.name == "4-in-1 Sensor Motion detection" dev_reg.async_update_device( device.id, name_by_user="Custom Device Name", area_id=kitchen_area.id @@ -1179,10 +1179,10 @@ async def test_node_model_change(hass, zp3111, client, integration): dev_id = device.id - motion_entity = "binary_sensor.4_in_1_sensor_home_security_motion_detection" + motion_entity = "binary_sensor.4_in_1_sensor_motion_detection" state = hass.states.get(motion_entity) assert state - assert state.name == "4-in-1 Sensor: Home Security - Motion detection" + assert state.name == "4-in-1 Sensor Motion detection" # Customize device and entity names/ids dev_reg.async_update_device(device.id, name_by_user="Custom Device Name") @@ -1267,7 +1267,7 @@ async def test_disabled_entity_on_value_removed(hass, zp3111, client, integratio er_reg = er.async_get(hass) # re-enable this default-disabled entity - sensor_cover_entity = "sensor.4_in_1_sensor_home_security_cover_status" + sensor_cover_entity = "sensor.4_in_1_sensor_cover_status" er_reg.async_update_entity(entity_id=sensor_cover_entity, disabled_by=None) await hass.async_block_till_done() @@ -1285,9 +1285,7 @@ async def test_disabled_entity_on_value_removed(hass, zp3111, client, integratio assert state.state != STATE_UNAVAILABLE # check for expected entities - binary_cover_entity = ( - "binary_sensor.4_in_1_sensor_home_security_tampering_product_cover_removed" - ) + binary_cover_entity = "binary_sensor.4_in_1_sensor_tampering_product_cover_removed" state = hass.states.get(binary_cover_entity) assert state assert state.state != STATE_UNAVAILABLE