diff --git a/homeassistant/components/zwave_js/icons.json b/homeassistant/components/zwave_js/icons.json new file mode 100644 index 00000000000..2280811d3da --- /dev/null +++ b/homeassistant/components/zwave_js/icons.json @@ -0,0 +1,24 @@ +{ + "entity": { + "sensor": { + "controller_status": { + "default": "mdi:help-rhombus", + "state": { + "ready": "mdi:check", + "unresponsive": "mdi:bell-off", + "jammed": "mdi:lock" + } + }, + "node_status": { + "default": "mdi:help-rhombus", + "state": { + "alive": "mdi:heart-pulse", + "asleep": "mdi:sleep", + "awake": "mdi:eye", + "dead": "mdi:robot-dead", + "unknown": "mdi:help-rhombus" + } + } + } + } +} diff --git a/homeassistant/components/zwave_js/sensor.py b/homeassistant/components/zwave_js/sensor.py index 9e95d430a4c..f89498af72b 100644 --- a/homeassistant/components/zwave_js/sensor.py +++ b/homeassistant/components/zwave_js/sensor.py @@ -6,7 +6,7 @@ from typing import cast import voluptuous as vol from zwave_js_server.client import Client as ZwaveClient -from zwave_js_server.const import CommandClass, ControllerStatus, NodeStatus +from zwave_js_server.const import CommandClass from zwave_js_server.const.command_class.meter import ( RESET_METER_OPTION_TARGET_VALUE, RESET_METER_OPTION_TYPE, @@ -91,20 +91,6 @@ from .helpers import get_device_info, get_valueless_base_unique_id PARALLEL_UPDATES = 0 -CONTROLLER_STATUS_ICON: dict[ControllerStatus, str] = { - ControllerStatus.READY: "mdi:check", - ControllerStatus.UNRESPONSIVE: "mdi:bell-off", - ControllerStatus.JAMMED: "mdi:lock", -} - -NODE_STATUS_ICON: dict[NodeStatus, str] = { - NodeStatus.ALIVE: "mdi:heart-pulse", - NodeStatus.ASLEEP: "mdi:sleep", - NodeStatus.AWAKE: "mdi:eye", - NodeStatus.DEAD: "mdi:robot-dead", - NodeStatus.UNKNOWN: "mdi:help-rhombus", -} - # These descriptions should include device class. ENTITY_DESCRIPTION_KEY_DEVICE_CLASS_MAP: dict[ @@ -784,6 +770,7 @@ class ZWaveNodeStatusSensor(SensorEntity): _attr_should_poll = False _attr_entity_category = EntityCategory.DIAGNOSTIC _attr_has_entity_name = True + _attr_translation_key = "node_status" def __init__( self, config_entry: ConfigEntry, driver: Driver, node: ZwaveNode @@ -793,7 +780,6 @@ class ZWaveNodeStatusSensor(SensorEntity): self.node = node # Entity class attributes - 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 @@ -815,11 +801,6 @@ class ZWaveNodeStatusSensor(SensorEntity): self._attr_native_value = self.node.status.name.lower() self.async_write_ha_state() - @property - def icon(self) -> str | None: - """Icon of the entity.""" - return NODE_STATUS_ICON[self.node.status] - async def async_added_to_hass(self) -> None: """Call when entity is added.""" # Add value_changed callbacks. @@ -852,6 +833,7 @@ class ZWaveControllerStatusSensor(SensorEntity): _attr_should_poll = False _attr_entity_category = EntityCategory.DIAGNOSTIC _attr_has_entity_name = True + _attr_translation_key = "controller_status" def __init__(self, config_entry: ConfigEntry, driver: Driver) -> None: """Initialize a generic Z-Wave device entity.""" @@ -861,7 +843,6 @@ class ZWaveControllerStatusSensor(SensorEntity): assert node # Entity class attributes - self._attr_name = "Status" self._base_unique_id = get_valueless_base_unique_id(driver, node) self._attr_unique_id = f"{self._base_unique_id}.controller_status" # device may not be precreated in main handler yet @@ -883,11 +864,6 @@ class ZWaveControllerStatusSensor(SensorEntity): self._attr_native_value = self.controller.status.name.lower() self.async_write_ha_state() - @property - def icon(self) -> str | None: - """Icon of the entity.""" - return CONTROLLER_STATUS_ICON[self.controller.status] - async def async_added_to_hass(self) -> None: """Call when entity is added.""" # Add value_changed callbacks. diff --git a/homeassistant/components/zwave_js/strings.json b/homeassistant/components/zwave_js/strings.json index 8dadac12af1..db19c0fceeb 100644 --- a/homeassistant/components/zwave_js/strings.json +++ b/homeassistant/components/zwave_js/strings.json @@ -1,4 +1,26 @@ { + "entity": { + "sensor": { + "node_status": { + "name": "Node status", + "state": { + "alive": "Alive", + "asleep": "Asleep", + "awake": "Awake", + "dead": "Dead", + "unknown": "Unknown" + } + }, + "controller_status": { + "name": "Status", + "state": { + "ready": "Ready", + "unresponsive": "Unresponsive", + "jammed": "Jammed" + } + } + } + }, "config": { "flow_title": "{name}", "step": { diff --git a/tests/components/zwave_js/test_sensor.py b/tests/components/zwave_js/test_sensor.py index 0fe3e32043b..96ad8bfa82c 100644 --- a/tests/components/zwave_js/test_sensor.py +++ b/tests/components/zwave_js/test_sensor.py @@ -25,7 +25,6 @@ from homeassistant.components.zwave_js.helpers import get_valueless_base_unique_ from homeassistant.const import ( ATTR_DEVICE_CLASS, ATTR_ENTITY_ID, - ATTR_ICON, ATTR_UNIT_OF_MEASUREMENT, PERCENTAGE, STATE_UNAVAILABLE, @@ -318,7 +317,6 @@ async def test_controller_status_sensor( state = hass.states.get(entity_id) assert state assert state.state == "ready" - assert state.attributes[ATTR_ICON] == "mdi:check" event = Event( "status changed", @@ -328,7 +326,6 @@ async def test_controller_status_sensor( state = hass.states.get(entity_id) assert state assert state.state == "unresponsive" - assert state.attributes[ATTR_ICON] == "mdi:bell-off" # Test transitions work event = Event( @@ -339,7 +336,6 @@ async def test_controller_status_sensor( state = hass.states.get(entity_id) assert state assert state.state == "jammed" - assert state.attributes[ATTR_ICON] == "mdi:lock" # Disconnect the client and make sure the entity is still available await client.disconnect() @@ -365,33 +361,24 @@ async def test_node_status_sensor( ) node.receive_event(event) assert hass.states.get(node_status_entity_id).state == "dead" - assert ( - hass.states.get(node_status_entity_id).attributes[ATTR_ICON] == "mdi:robot-dead" - ) event = Event( "wake up", data={"source": "node", "event": "wake up", "nodeId": node.node_id} ) node.receive_event(event) assert hass.states.get(node_status_entity_id).state == "awake" - assert hass.states.get(node_status_entity_id).attributes[ATTR_ICON] == "mdi:eye" event = Event( "sleep", data={"source": "node", "event": "sleep", "nodeId": node.node_id} ) node.receive_event(event) assert hass.states.get(node_status_entity_id).state == "asleep" - assert hass.states.get(node_status_entity_id).attributes[ATTR_ICON] == "mdi:sleep" event = Event( "alive", data={"source": "node", "event": "alive", "nodeId": node.node_id} ) node.receive_event(event) assert hass.states.get(node_status_entity_id).state == "alive" - assert ( - hass.states.get(node_status_entity_id).attributes[ATTR_ICON] - == "mdi:heart-pulse" - ) # Disconnect the client and make sure the entity is still available await client.disconnect()