Compare commits

...

1 Commits

Author SHA1 Message Date
mib1185 c6f70bc101 consider current connection type in reconnect action 2026-06-29 15:33:13 +00:00
2 changed files with 39 additions and 17 deletions
+14 -5
View File
@@ -11,7 +11,7 @@ from typing import Any, TypedDict, cast, override
from xml.etree.ElementTree import ParseError
from fritzconnection import FritzConnection
from fritzconnection.core.exceptions import FritzActionError
from fritzconnection.core.exceptions import FritzActionError, FritzConnectionException
from fritzconnection.lib.fritzcall import FritzCall
from fritzconnection.lib.fritzhosts import FritzHosts
from fritzconnection.lib.fritzstatus import FritzStatus
@@ -267,9 +267,7 @@ class FritzBoxTools(DataUpdateCoordinator[UpdateCoordinatorDataType]):
) = self._update_device_info()
if self.fritz_status.has_wan_support:
self.device_conn_type = (
self.fritz_status.get_default_connection_service().connection_service
)
self.device_conn_type = self.fritz_status.connection_service
self.device_is_router = self.fritz_status.has_wan_enabled
self.has_call_deflections = "X_AVM-DE_OnTel1" in self.connection.services
@@ -682,7 +680,18 @@ class FritzBoxTools(DataUpdateCoordinator[UpdateCoordinatorDataType]):
async def async_trigger_reconnect(self) -> None:
"""Trigger device reconnect."""
await self.hass.async_add_executor_job(self.connection.reconnect)
try:
await self.hass.async_add_executor_job(
self.connection.call_action,
f"{self.device_conn_type}1",
"ForceTermination",
)
except FritzConnectionException as ex:
# ignore UPnPError:
# errorCode: 707
# errorDescription: DisconnectInProgress
if "disconnectinprogress" not in str(ex).lower():
raise
async def async_trigger_set_guest_password(
self, password: str | None, length: int
+25 -12
View File
@@ -483,31 +483,44 @@ async def test_trigger_methods(
) -> None:
"""Test trigger methods delegate to correct underlying calls."""
# test async_trigger_firmware_update
fritz_tools.connection.call_action = MagicMock(
return_value={"NewX_AVM-DE_UpdateState": True}
)
assert await fritz_tools.async_trigger_firmware_update() is True
# test async_trigger_reboot
fritz_tools.connection.reboot = MagicMock()
fritz_tools.connection.reconnect = MagicMock()
await fritz_tools.async_trigger_reboot()
fritz_tools.connection.reboot.assert_called_once()
# test async_trigger_set_guest_password
fritz_tools.fritz_guest_wifi.set_password = MagicMock()
await fritz_tools.async_trigger_set_guest_password("new-password", 20)
fritz_tools.fritz_guest_wifi.set_password.assert_called_once_with(
"new-password", 20
)
# test async_trigger_reconnect
fritz_tools.connection.call_action = MagicMock(
side_effect=FritzConnectionException(
"UPnPError:\nerrorCode: 707\nerrorDescription: DisconnectInProgress"
)
)
await fritz_tools.async_trigger_reconnect()
fritz_tools.connection.call_action.assert_called_with(
"WANPPPConnection1", "ForceTermination"
)
# test async_trigger_dial
fritz_tools.fritz_call.dial = MagicMock()
fritz_tools.fritz_call.hangup = MagicMock()
assert await fritz_tools.async_trigger_firmware_update() is True
await fritz_tools.async_trigger_reboot()
await fritz_tools.async_trigger_reconnect()
await fritz_tools.async_trigger_set_guest_password("new-password", 20)
with patch(
"homeassistant.components.fritz.coordinator.asyncio.sleep",
new=AsyncMock(),
) as sleep_mock:
await fritz_tools.async_trigger_dial("012345", 1)
fritz_tools.connection.reboot.assert_called_once()
fritz_tools.connection.reconnect.assert_called_once()
fritz_tools.fritz_guest_wifi.set_password.assert_called_once_with(
"new-password", 20
)
fritz_tools.fritz_call.dial.assert_called_once_with("012345")
sleep_mock.assert_awaited_once_with(1)
fritz_tools.fritz_call.hangup.assert_called_once()