diff --git a/homeassistant/components/fritz/switch.py b/homeassistant/components/fritz/switch.py index 6d188c65538d..551cebc833cf 100644 --- a/homeassistant/components/fritz/switch.py +++ b/homeassistant/components/fritz/switch.py @@ -133,26 +133,20 @@ async def _async_wifi_entities_list( ] ) _LOGGER.debug("WiFi networks count: %s", wifi_count) - networks: dict = {} + networks: dict[int, dict[str, Any]] = {} for i in range(1, wifi_count + 1): network_info = await avm_wrapper.async_get_wlan_configuration(i) # Devices with 4 WLAN services, use the 2nd for internal communications if not (wifi_count == 4 and i == 2): - networks[i] = { - "ssid": network_info["NewSSID"], - "bssid": network_info["NewBSSID"], - "standard": network_info["NewStandard"], - "enabled": network_info["NewEnable"], - "status": network_info["NewStatus"], - } + networks[i] = network_info for i, network in networks.copy().items(): - networks[i]["switch_name"] = network["ssid"] + networks[i]["switch_name"] = network["NewSSID"] if ( len( [ j for j, n in networks.items() - if slugify(n["ssid"]) == slugify(network["ssid"]) + if slugify(n["NewSSID"]) == slugify(network["NewSSID"]) ] ) > 1 @@ -434,13 +428,11 @@ class FritzBoxPortSwitch(FritzBoxBaseSwitch): for key, attr in attributes_dict.items(): self._attributes[attr] = self.port_mapping[key] - async def _async_switch_on_off_executor(self, turn_on: bool) -> bool: + async def _async_switch_on_off_executor(self, turn_on: bool) -> None: self.port_mapping["NewEnabled"] = "1" if turn_on else "0" - - resp = await self._avm_wrapper.async_add_port_mapping( + await self._avm_wrapper.async_add_port_mapping( self.connection_type, self.port_mapping ) - return bool(resp is not None) class FritzBoxDeflectionSwitch(FritzBoxBaseCoordinatorSwitch): @@ -525,12 +517,11 @@ class FritzBoxProfileSwitch(FritzDeviceBase, SwitchEntity): """Turn off switch.""" await self._async_handle_turn_on_off(turn_on=False) - async def _async_handle_turn_on_off(self, turn_on: bool) -> bool: + async def _async_handle_turn_on_off(self, turn_on: bool) -> None: """Handle switch state change request.""" await self._avm_wrapper.async_set_allow_wan_access(self.ip_address, turn_on) self._avm_wrapper.devices[self._mac].wan_access = turn_on self.async_write_ha_state() - return True class FritzBoxWifiSwitch(FritzBoxBaseSwitch): @@ -541,10 +532,11 @@ class FritzBoxWifiSwitch(FritzBoxBaseSwitch): avm_wrapper: AvmWrapper, device_friendly_name: str, network_num: int, - network_data: dict, + network_data: dict[str, Any], ) -> None: """Init Fritz Wifi switch.""" self._avm_wrapper = avm_wrapper + self._wifi_info = network_data self._attributes = {} self._attr_entity_category = EntityCategory.CONFIG @@ -560,7 +552,7 @@ class FritzBoxWifiSwitch(FritzBoxBaseSwitch): type=SWITCH_TYPE_WIFINETWORK, callback_update=self._async_fetch_update, callback_switch=self._async_switch_on_off_executor, - init_state=network_data["enabled"], + init_state=network_data["NewEnable"], ) super().__init__(self._avm_wrapper, device_friendly_name, switch_info) @@ -587,7 +579,9 @@ class FritzBoxWifiSwitch(FritzBoxBaseSwitch): self._attributes["mac_address_control"] = wifi_info[ "NewMACAddressControlEnabled" ] + self._wifi_info = wifi_info async def _async_switch_on_off_executor(self, turn_on: bool) -> None: """Handle wifi switch.""" + self._wifi_info["NewEnable"] = turn_on await self._avm_wrapper.async_set_wlan_configuration(self._network_num, turn_on) diff --git a/tests/components/fritz/test_switch.py b/tests/components/fritz/test_switch.py index 0e990ed9c399..df32344ee04f 100644 --- a/tests/components/fritz/test_switch.py +++ b/tests/components/fritz/test_switch.py @@ -396,6 +396,11 @@ async def test_switch_device_no_ip_address( "async_set_deflection_enable", STATE_ON, ), + ( + "switch.mock_title_wi_fi_mywifi", + "async_set_wlan_configuration", + STATE_ON, + ), ], ) async def test_switch_turn_on_off(