From a434760a8047aa02bb9fa45706a29c11f96a0883 Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Mon, 12 Jan 2026 15:43:28 +0100 Subject: [PATCH] Complete entity name and icon translations in FRITZ!Box Tools (#160746) Co-authored-by: Joost Lekkerkerker Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- homeassistant/components/fritz/button.py | 3 +- .../components/fritz/device_tracker.py | 2 + homeassistant/components/fritz/entity.py | 10 ++--- homeassistant/components/fritz/icons.json | 8 ++++ homeassistant/components/fritz/manifest.json | 1 + .../components/fritz/quality_scale.yaml | 4 +- homeassistant/components/fritz/strings.json | 8 ++++ homeassistant/components/fritz/switch.py | 3 +- script/hassfest/quality_scale.py | 1 - .../fritz/snapshots/test_button.ambr | 9 ++-- .../fritz/snapshots/test_switch.ambr | 44 +++++++++---------- 11 files changed, 49 insertions(+), 44 deletions(-) diff --git a/homeassistant/components/fritz/button.py b/homeassistant/components/fritz/button.py index 7fd158f3224..af5c1b0e869 100644 --- a/homeassistant/components/fritz/button.py +++ b/homeassistant/components/fritz/button.py @@ -164,13 +164,12 @@ def _async_wol_buttons_list( class FritzBoxWOLButton(FritzDeviceBase, ButtonEntity): """Defines a FRITZ!Box Tools Wake On LAN button.""" - _attr_icon = "mdi:lan-pending" _attr_entity_registry_enabled_default = False + _attr_translation_key = "wake_on_lan" def __init__(self, avm_wrapper: AvmWrapper, device: FritzDevice) -> None: """Initialize Fritz!Box WOL button.""" super().__init__(avm_wrapper, device) - self._name = f"{self.hostname} Wake on LAN" self._attr_unique_id = f"{self._mac}_wake_on_lan" self._is_available = True diff --git a/homeassistant/components/fritz/device_tracker.py b/homeassistant/components/fritz/device_tracker.py index a658f5d19cb..aa3dcf1370a 100644 --- a/homeassistant/components/fritz/device_tracker.py +++ b/homeassistant/components/fritz/device_tracker.py @@ -10,6 +10,7 @@ from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback +from .const import DEFAULT_DEVICE_NAME from .coordinator import FRITZ_DATA_KEY, AvmWrapper, FritzConfigEntry, FritzData from .entity import FritzDeviceBase from .helpers import device_filter_out_from_trackers @@ -71,6 +72,7 @@ class FritzBoxTracker(FritzDeviceBase, ScannerEntity): def __init__(self, avm_wrapper: AvmWrapper, device: FritzDevice) -> None: """Initialize a FRITZ!Box device.""" super().__init__(avm_wrapper, device) + self._attr_name: str = device.hostname or DEFAULT_DEVICE_NAME self._last_activity: datetime.datetime | None = device.last_activity @property diff --git a/homeassistant/components/fritz/entity.py b/homeassistant/components/fritz/entity.py index eb3d5b600dd..ad2a4d831d0 100644 --- a/homeassistant/components/fritz/entity.py +++ b/homeassistant/components/fritz/entity.py @@ -13,7 +13,7 @@ from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity import EntityDescription from homeassistant.helpers.update_coordinator import CoordinatorEntity -from .const import DEFAULT_DEVICE_NAME, DOMAIN +from .const import DOMAIN from .coordinator import AvmWrapper from .models import FritzDevice @@ -21,21 +21,17 @@ from .models import FritzDevice class FritzDeviceBase(CoordinatorEntity[AvmWrapper]): """Entity base class for a device connected to a FRITZ!Box device.""" + _attr_has_entity_name = True + def __init__(self, avm_wrapper: AvmWrapper, device: FritzDevice) -> None: """Initialize a FRITZ!Box device.""" super().__init__(avm_wrapper) self._avm_wrapper = avm_wrapper self._mac: str = device.mac_address - self._name: str = device.hostname or DEFAULT_DEVICE_NAME self._attr_device_info = DeviceInfo( connections={(dr.CONNECTION_NETWORK_MAC, device.mac_address)} ) - @property - def name(self) -> str: - """Return device name.""" - return self._name - @property def ip_address(self) -> str | None: """Return the primary ip address of the device.""" diff --git a/homeassistant/components/fritz/icons.json b/homeassistant/components/fritz/icons.json index c20a8518b10..837c9b51095 100644 --- a/homeassistant/components/fritz/icons.json +++ b/homeassistant/components/fritz/icons.json @@ -3,6 +3,9 @@ "button": { "cleanup": { "default": "mdi:broom" + }, + "wake_on_lan": { + "default": "mdi:lan-pending" } }, "sensor": { @@ -48,6 +51,11 @@ "max_kb_s_sent": { "default": "mdi:upload" } + }, + "switch": { + "internet_access": { + "default": "mdi:router-wireless-settings" + } } }, "services": { diff --git a/homeassistant/components/fritz/manifest.json b/homeassistant/components/fritz/manifest.json index 45d9c6a0d5f..183bb931a14 100644 --- a/homeassistant/components/fritz/manifest.json +++ b/homeassistant/components/fritz/manifest.json @@ -8,6 +8,7 @@ "integration_type": "hub", "iot_class": "local_polling", "loggers": ["fritzconnection"], + "quality_scale": "bronze", "requirements": ["fritzconnection[qr]==1.15.0", "xmltodict==1.0.2"], "ssdp": [ { diff --git a/homeassistant/components/fritz/quality_scale.yaml b/homeassistant/components/fritz/quality_scale.yaml index c2d18a0be84..f1893ef317f 100644 --- a/homeassistant/components/fritz/quality_scale.yaml +++ b/homeassistant/components/fritz/quality_scale.yaml @@ -13,9 +13,7 @@ rules: docs-removal-instructions: done entity-event-setup: done entity-unique-id: done - has-entity-name: - status: todo - comment: partially done + has-entity-name: done runtime-data: done test-before-configure: done test-before-setup: done diff --git a/homeassistant/components/fritz/strings.json b/homeassistant/components/fritz/strings.json index baff078bc41..c2aa92818b1 100644 --- a/homeassistant/components/fritz/strings.json +++ b/homeassistant/components/fritz/strings.json @@ -108,6 +108,9 @@ }, "reconnect": { "name": "Reconnect" + }, + "wake_on_lan": { + "name": "Wake on LAN" } }, "sensor": { @@ -162,6 +165,11 @@ "max_kb_s_sent": { "name": "Max connection upload throughput" } + }, + "switch": { + "internet_access": { + "name": "Internet access" + } } }, "exceptions": { diff --git a/homeassistant/components/fritz/switch.py b/homeassistant/components/fritz/switch.py index 9c143ad9471..45afbb45eb8 100644 --- a/homeassistant/components/fritz/switch.py +++ b/homeassistant/components/fritz/switch.py @@ -499,13 +499,12 @@ class FritzBoxDeflectionSwitch(FritzBoxBaseCoordinatorSwitch): class FritzBoxProfileSwitch(FritzDeviceBase, SwitchEntity): """Defines a FRITZ!Box Tools DeviceProfile switch.""" - _attr_icon = "mdi:router-wireless-settings" + _attr_translation_key = "internet_access" def __init__(self, avm_wrapper: AvmWrapper, device: FritzDevice) -> None: """Init Fritz profile.""" super().__init__(avm_wrapper, device) self._attr_is_on: bool = False - self._name = f"{device.hostname} Internet Access" self._attr_unique_id = f"{self._mac}_internet_access" self._attr_entity_category = EntityCategory.CONFIG diff --git a/script/hassfest/quality_scale.py b/script/hassfest/quality_scale.py index e1a4831ae0a..bc97db995f3 100644 --- a/script/hassfest/quality_scale.py +++ b/script/hassfest/quality_scale.py @@ -1390,7 +1390,6 @@ INTEGRATIONS_WITHOUT_SCALE = [ "freebox", "freedns", "freedompro", - "fritz", "fritzbox", "fritzbox_callmonitor", "frontier_silicon", diff --git a/tests/components/fritz/snapshots/test_button.ambr b/tests/components/fritz/snapshots/test_button.ambr index ac222fa72d3..25ceb72017b 100644 --- a/tests/components/fritz/snapshots/test_button.ambr +++ b/tests/components/fritz/snapshots/test_button.ambr @@ -208,7 +208,7 @@ 'domain': 'button', 'entity_category': None, 'entity_id': 'button.printer_wake_on_lan', - 'has_entity_name': False, + 'has_entity_name': True, 'hidden_by': None, 'icon': None, 'id': , @@ -218,13 +218,13 @@ 'options': dict({ }), 'original_device_class': None, - 'original_icon': 'mdi:lan-pending', - 'original_name': 'printer Wake on LAN', + 'original_icon': None, + 'original_name': 'Wake on LAN', 'platform': 'fritz', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': None, + 'translation_key': 'wake_on_lan', 'unique_id': 'AA:BB:CC:00:11:22_wake_on_lan', 'unit_of_measurement': None, }) @@ -233,7 +233,6 @@ StateSnapshot({ 'attributes': ReadOnlyDict({ 'friendly_name': 'printer Wake on LAN', - 'icon': 'mdi:lan-pending', }), 'context': , 'entity_id': 'button.printer_wake_on_lan', diff --git a/tests/components/fritz/snapshots/test_switch.ambr b/tests/components/fritz/snapshots/test_switch.ambr index 08046c988d6..282df1f0d2c 100644 --- a/tests/components/fritz/snapshots/test_switch.ambr +++ b/tests/components/fritz/snapshots/test_switch.ambr @@ -111,7 +111,7 @@ 'domain': 'switch', 'entity_category': , 'entity_id': 'switch.printer_internet_access', - 'has_entity_name': False, + 'has_entity_name': True, 'hidden_by': None, 'icon': None, 'id': , @@ -121,13 +121,13 @@ 'options': dict({ }), 'original_device_class': None, - 'original_icon': 'mdi:router-wireless-settings', - 'original_name': 'printer Internet Access', + 'original_icon': None, + 'original_name': 'Internet access', 'platform': 'fritz', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': None, + 'translation_key': 'internet_access', 'unique_id': 'AA:BB:CC:00:11:22_internet_access', 'unit_of_measurement': None, }) @@ -135,8 +135,7 @@ # name: test_switch_setup[fc_data0][switch.printer_internet_access-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'printer Internet Access', - 'icon': 'mdi:router-wireless-settings', + 'friendly_name': 'printer Internet access', }), 'context': , 'entity_id': 'switch.printer_internet_access', @@ -258,7 +257,7 @@ 'domain': 'switch', 'entity_category': , 'entity_id': 'switch.printer_internet_access', - 'has_entity_name': False, + 'has_entity_name': True, 'hidden_by': None, 'icon': None, 'id': , @@ -268,13 +267,13 @@ 'options': dict({ }), 'original_device_class': None, - 'original_icon': 'mdi:router-wireless-settings', - 'original_name': 'printer Internet Access', + 'original_icon': None, + 'original_name': 'Internet access', 'platform': 'fritz', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': None, + 'translation_key': 'internet_access', 'unique_id': 'AA:BB:CC:00:11:22_internet_access', 'unit_of_measurement': None, }) @@ -282,8 +281,7 @@ # name: test_switch_setup[fc_data1][switch.printer_internet_access-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'printer Internet Access', - 'icon': 'mdi:router-wireless-settings', + 'friendly_name': 'printer Internet access', }), 'context': , 'entity_id': 'switch.printer_internet_access', @@ -405,7 +403,7 @@ 'domain': 'switch', 'entity_category': , 'entity_id': 'switch.printer_internet_access', - 'has_entity_name': False, + 'has_entity_name': True, 'hidden_by': None, 'icon': None, 'id': , @@ -415,13 +413,13 @@ 'options': dict({ }), 'original_device_class': None, - 'original_icon': 'mdi:router-wireless-settings', - 'original_name': 'printer Internet Access', + 'original_icon': None, + 'original_name': 'Internet access', 'platform': 'fritz', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': None, + 'translation_key': 'internet_access', 'unique_id': 'AA:BB:CC:00:11:22_internet_access', 'unit_of_measurement': None, }) @@ -429,8 +427,7 @@ # name: test_switch_setup[fc_data2][switch.printer_internet_access-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'printer Internet Access', - 'icon': 'mdi:router-wireless-settings', + 'friendly_name': 'printer Internet access', }), 'context': , 'entity_id': 'switch.printer_internet_access', @@ -558,7 +555,7 @@ 'domain': 'switch', 'entity_category': , 'entity_id': 'switch.printer_internet_access', - 'has_entity_name': False, + 'has_entity_name': True, 'hidden_by': None, 'icon': None, 'id': , @@ -568,13 +565,13 @@ 'options': dict({ }), 'original_device_class': None, - 'original_icon': 'mdi:router-wireless-settings', - 'original_name': 'printer Internet Access', + 'original_icon': None, + 'original_name': 'Internet access', 'platform': 'fritz', 'previous_unique_id': None, 'suggested_object_id': None, 'supported_features': 0, - 'translation_key': None, + 'translation_key': 'internet_access', 'unique_id': 'AA:BB:CC:00:11:22_internet_access', 'unit_of_measurement': None, }) @@ -582,8 +579,7 @@ # name: test_switch_setup[fc_data3][switch.printer_internet_access-state] StateSnapshot({ 'attributes': ReadOnlyDict({ - 'friendly_name': 'printer Internet Access', - 'icon': 'mdi:router-wireless-settings', + 'friendly_name': 'printer Internet access', }), 'context': , 'entity_id': 'switch.printer_internet_access',