mirror of
https://github.com/home-assistant/core.git
synced 2025-07-28 23:57:06 +00:00
Fix missing port in samsungtv (#147962)
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
This commit is contained in:
parent
142c10cccc
commit
a6962e9e1e
@ -124,6 +124,7 @@ class SamsungTVConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
self._model: str | None = None
|
self._model: str | None = None
|
||||||
self._connect_result: str | None = None
|
self._connect_result: str | None = None
|
||||||
self._method: str | None = None
|
self._method: str | None = None
|
||||||
|
self._port: int | None = None
|
||||||
self._name: str | None = None
|
self._name: str | None = None
|
||||||
self._title: str = ""
|
self._title: str = ""
|
||||||
self._id: int | None = None
|
self._id: int | None = None
|
||||||
@ -199,33 +200,37 @@ class SamsungTVConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
|
|
||||||
async def _async_create_bridge(self) -> None:
|
async def _async_create_bridge(self) -> None:
|
||||||
"""Create the bridge."""
|
"""Create the bridge."""
|
||||||
result, method, _info = await self._async_get_device_info_and_method()
|
result = await self._async_load_device_info()
|
||||||
if result not in SUCCESSFUL_RESULTS:
|
if result not in SUCCESSFUL_RESULTS:
|
||||||
LOGGER.debug("No working config found for %s", self._host)
|
LOGGER.debug("No working config found for %s", self._host)
|
||||||
raise AbortFlow(result)
|
raise AbortFlow(result)
|
||||||
assert method is not None
|
assert self._method is not None
|
||||||
self._bridge = SamsungTVBridge.get_bridge(self.hass, method, self._host)
|
self._bridge = SamsungTVBridge.get_bridge(
|
||||||
|
self.hass, self._method, self._host, self._port
|
||||||
|
)
|
||||||
|
|
||||||
async def _async_get_device_info_and_method(
|
async def _async_load_device_info(
|
||||||
self,
|
self,
|
||||||
) -> tuple[str, str | None, dict[str, Any] | None]:
|
) -> str:
|
||||||
"""Get device info and method only once."""
|
"""Get device info and method only once."""
|
||||||
if self._connect_result is None:
|
if self._connect_result is None:
|
||||||
result, _, method, info = await async_get_device_info(self.hass, self._host)
|
result, port, method, info = await async_get_device_info(
|
||||||
|
self.hass, self._host
|
||||||
|
)
|
||||||
self._connect_result = result
|
self._connect_result = result
|
||||||
self._method = method
|
self._method = method
|
||||||
|
self._port = port
|
||||||
self._device_info = info
|
self._device_info = info
|
||||||
if not method:
|
if not method:
|
||||||
LOGGER.debug("Host:%s did not return device info", self._host)
|
LOGGER.debug("Host:%s did not return device info", self._host)
|
||||||
return result, None, None
|
return self._connect_result
|
||||||
return self._connect_result, self._method, self._device_info
|
|
||||||
|
|
||||||
async def _async_get_and_check_device_info(self) -> bool:
|
async def _async_get_and_check_device_info(self) -> bool:
|
||||||
"""Try to get the device info."""
|
"""Try to get the device info."""
|
||||||
result, _method, info = await self._async_get_device_info_and_method()
|
result = await self._async_load_device_info()
|
||||||
if result not in SUCCESSFUL_RESULTS:
|
if result not in SUCCESSFUL_RESULTS:
|
||||||
raise AbortFlow(result)
|
raise AbortFlow(result)
|
||||||
if not info:
|
if not (info := self._device_info):
|
||||||
return False
|
return False
|
||||||
dev_info = info.get("device", {})
|
dev_info = info.get("device", {})
|
||||||
assert dev_info is not None
|
assert dev_info is not None
|
||||||
|
@ -161,6 +161,7 @@ async def test_user_legacy(hass: HomeAssistant) -> None:
|
|||||||
assert result["data"][CONF_METHOD] == METHOD_LEGACY
|
assert result["data"][CONF_METHOD] == METHOD_LEGACY
|
||||||
assert result["data"][CONF_MANUFACTURER] == DEFAULT_MANUFACTURER
|
assert result["data"][CONF_MANUFACTURER] == DEFAULT_MANUFACTURER
|
||||||
assert result["data"][CONF_MODEL] is None
|
assert result["data"][CONF_MODEL] is None
|
||||||
|
assert result["data"][CONF_PORT] == 55000
|
||||||
assert result["result"].unique_id is None
|
assert result["result"].unique_id is None
|
||||||
|
|
||||||
|
|
||||||
@ -195,6 +196,7 @@ async def test_user_legacy_does_not_ok_first_time(hass: HomeAssistant) -> None:
|
|||||||
assert result3["data"][CONF_METHOD] == METHOD_LEGACY
|
assert result3["data"][CONF_METHOD] == METHOD_LEGACY
|
||||||
assert result3["data"][CONF_MANUFACTURER] == DEFAULT_MANUFACTURER
|
assert result3["data"][CONF_MANUFACTURER] == DEFAULT_MANUFACTURER
|
||||||
assert result3["data"][CONF_MODEL] is None
|
assert result3["data"][CONF_MODEL] is None
|
||||||
|
assert result3["data"][CONF_PORT] == 55000
|
||||||
assert result3["result"].unique_id is None
|
assert result3["result"].unique_id is None
|
||||||
|
|
||||||
|
|
||||||
@ -224,6 +226,7 @@ async def test_user_websocket(hass: HomeAssistant) -> None:
|
|||||||
assert result["data"][CONF_METHOD] == "websocket"
|
assert result["data"][CONF_METHOD] == "websocket"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
||||||
assert result["data"][CONF_MODEL] == "82GXARRS"
|
assert result["data"][CONF_MODEL] == "82GXARRS"
|
||||||
|
assert result["data"][CONF_PORT] == 8002
|
||||||
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
|
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
|
||||||
|
|
||||||
|
|
||||||
@ -272,6 +275,7 @@ async def test_user_encrypted_websocket(
|
|||||||
assert result4["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
assert result4["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
||||||
assert result4["data"][CONF_MANUFACTURER] == "Samsung"
|
assert result4["data"][CONF_MANUFACTURER] == "Samsung"
|
||||||
assert result4["data"][CONF_MODEL] == "UE48JU6400"
|
assert result4["data"][CONF_MODEL] == "UE48JU6400"
|
||||||
|
assert result4["data"][CONF_PORT] == 8000
|
||||||
assert result4["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION] is None
|
assert result4["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION] is None
|
||||||
assert result4["data"][CONF_TOKEN] == "037739871315caef138547b03e348b72"
|
assert result4["data"][CONF_TOKEN] == "037739871315caef138547b03e348b72"
|
||||||
assert result4["data"][CONF_SESSION_ID] == "1"
|
assert result4["data"][CONF_SESSION_ID] == "1"
|
||||||
@ -402,6 +406,7 @@ async def test_user_websocket_auth_retry(hass: HomeAssistant) -> None:
|
|||||||
assert result["data"][CONF_HOST] == "10.20.43.21"
|
assert result["data"][CONF_HOST] == "10.20.43.21"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
||||||
assert result["data"][CONF_MODEL] == "82GXARRS"
|
assert result["data"][CONF_MODEL] == "82GXARRS"
|
||||||
|
assert result["data"][CONF_PORT] == 8002
|
||||||
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
|
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
|
||||||
|
|
||||||
|
|
||||||
@ -464,6 +469,7 @@ async def test_ssdp(hass: HomeAssistant) -> None:
|
|||||||
assert result["data"][CONF_HOST] == "10.10.12.34"
|
assert result["data"][CONF_HOST] == "10.10.12.34"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
||||||
assert result["data"][CONF_MODEL] == "UE55H6400"
|
assert result["data"][CONF_MODEL] == "UE55H6400"
|
||||||
|
assert result["data"][CONF_PORT] == 55000
|
||||||
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
|
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
|
||||||
|
|
||||||
|
|
||||||
@ -522,6 +528,7 @@ async def test_ssdp_noprefix(hass: HomeAssistant) -> None:
|
|||||||
assert result["data"][CONF_HOST] == "10.10.12.34"
|
assert result["data"][CONF_HOST] == "10.10.12.34"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
||||||
assert result["data"][CONF_MODEL] == "UE55H6400"
|
assert result["data"][CONF_MODEL] == "UE55H6400"
|
||||||
|
assert result["data"][CONF_PORT] == 55000
|
||||||
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
|
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
|
||||||
|
|
||||||
|
|
||||||
@ -557,6 +564,7 @@ async def test_ssdp_legacy_missing_auth(hass: HomeAssistant) -> None:
|
|||||||
assert result["data"][CONF_HOST] == "10.10.12.34"
|
assert result["data"][CONF_HOST] == "10.10.12.34"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
||||||
assert result["data"][CONF_MODEL] == "UE55H6400"
|
assert result["data"][CONF_MODEL] == "UE55H6400"
|
||||||
|
assert result["data"][CONF_PORT] == 55000
|
||||||
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
|
assert result["result"].unique_id == "068e7781-006e-1000-bbbf-84a4668d8423"
|
||||||
|
|
||||||
|
|
||||||
@ -599,6 +607,7 @@ async def test_ssdp_websocket_success_populates_mac_address_and_ssdp_location(
|
|||||||
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
||||||
assert result["data"][CONF_MODEL] == "82GXARRS"
|
assert result["data"][CONF_MODEL] == "82GXARRS"
|
||||||
|
assert result["data"][CONF_PORT] == 8002
|
||||||
assert (
|
assert (
|
||||||
result["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION]
|
result["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION]
|
||||||
== "http://10.10.12.34:7676/smp_15_"
|
== "http://10.10.12.34:7676/smp_15_"
|
||||||
@ -630,6 +639,7 @@ async def test_ssdp_websocket_success_populates_mac_address_and_main_tv_ssdp_loc
|
|||||||
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
||||||
assert result["data"][CONF_MODEL] == "82GXARRS"
|
assert result["data"][CONF_MODEL] == "82GXARRS"
|
||||||
|
assert result["data"][CONF_PORT] == 8002
|
||||||
assert (
|
assert (
|
||||||
result["data"][CONF_SSDP_MAIN_TV_AGENT_LOCATION]
|
result["data"][CONF_SSDP_MAIN_TV_AGENT_LOCATION]
|
||||||
== "http://10.10.12.34:7676/smp_2_"
|
== "http://10.10.12.34:7676/smp_2_"
|
||||||
@ -681,6 +691,7 @@ async def test_ssdp_encrypted_websocket_success_populates_mac_address_and_ssdp_l
|
|||||||
assert result4["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
assert result4["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
||||||
assert result4["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
assert result4["data"][CONF_MANUFACTURER] == "Samsung Electronics"
|
||||||
assert result4["data"][CONF_MODEL] == "UE48JU6400"
|
assert result4["data"][CONF_MODEL] == "UE48JU6400"
|
||||||
|
assert result4["data"][CONF_PORT] == 8000
|
||||||
assert (
|
assert (
|
||||||
result4["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION]
|
result4["data"][CONF_SSDP_RENDERING_CONTROL_LOCATION]
|
||||||
== "http://10.10.12.34:7676/smp_15_"
|
== "http://10.10.12.34:7676/smp_15_"
|
||||||
@ -887,6 +898,7 @@ async def test_dhcp_wireless(hass: HomeAssistant) -> None:
|
|||||||
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
||||||
assert result["data"][CONF_MODEL] == "UE48JU6400"
|
assert result["data"][CONF_MODEL] == "UE48JU6400"
|
||||||
|
assert result["data"][CONF_PORT] == 8002
|
||||||
assert result["result"].unique_id == "223da676-497a-4e06-9507-5e27ec4f0fb3"
|
assert result["result"].unique_id == "223da676-497a-4e06-9507-5e27ec4f0fb3"
|
||||||
|
|
||||||
|
|
||||||
@ -919,6 +931,7 @@ async def test_dhcp_wired(hass: HomeAssistant, rest_api: Mock) -> None:
|
|||||||
assert result["data"][CONF_MAC] == "aa:ee:tt:hh:ee:rr"
|
assert result["data"][CONF_MAC] == "aa:ee:tt:hh:ee:rr"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
||||||
assert result["data"][CONF_MODEL] == "UE43LS003"
|
assert result["data"][CONF_MODEL] == "UE43LS003"
|
||||||
|
assert result["data"][CONF_PORT] == 8002
|
||||||
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
|
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
|
||||||
|
|
||||||
|
|
||||||
@ -1020,6 +1033,7 @@ async def test_zeroconf(hass: HomeAssistant) -> None:
|
|||||||
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
assert result["data"][CONF_MAC] == "aa:bb:aa:aa:aa:aa"
|
||||||
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
assert result["data"][CONF_MANUFACTURER] == "Samsung"
|
||||||
assert result["data"][CONF_MODEL] == "82GXARRS"
|
assert result["data"][CONF_MODEL] == "82GXARRS"
|
||||||
|
assert result["data"][CONF_PORT] == 8002
|
||||||
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
|
assert result["result"].unique_id == "be9554b9-c9fb-41f4-8920-22da015376a4"
|
||||||
|
|
||||||
|
|
||||||
@ -1129,6 +1143,7 @@ async def test_autodetect_websocket(hass: HomeAssistant) -> None:
|
|||||||
assert result["type"] is FlowResultType.CREATE_ENTRY
|
assert result["type"] is FlowResultType.CREATE_ENTRY
|
||||||
assert result["data"][CONF_METHOD] == "websocket"
|
assert result["data"][CONF_METHOD] == "websocket"
|
||||||
assert result["data"][CONF_TOKEN] == "123456789"
|
assert result["data"][CONF_TOKEN] == "123456789"
|
||||||
|
assert result["data"][CONF_PORT] == 8002
|
||||||
remote_websocket.assert_called_once_with(**AUTODETECT_WEBSOCKET_SSL)
|
remote_websocket.assert_called_once_with(**AUTODETECT_WEBSOCKET_SSL)
|
||||||
rest_api_class.assert_called_once_with(**DEVICEINFO_WEBSOCKET_SSL)
|
rest_api_class.assert_called_once_with(**DEVICEINFO_WEBSOCKET_SSL)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@ -1180,6 +1195,7 @@ async def test_websocket_no_mac(hass: HomeAssistant, mac_address: Mock) -> None:
|
|||||||
assert result["data"][CONF_METHOD] == "websocket"
|
assert result["data"][CONF_METHOD] == "websocket"
|
||||||
assert result["data"][CONF_TOKEN] == "123456789"
|
assert result["data"][CONF_TOKEN] == "123456789"
|
||||||
assert result["data"][CONF_MAC] == "gg:ee:tt:mm:aa:cc"
|
assert result["data"][CONF_MAC] == "gg:ee:tt:mm:aa:cc"
|
||||||
|
assert result["data"][CONF_PORT] == 8002
|
||||||
remote_websocket.assert_called_once_with(**AUTODETECT_WEBSOCKET_SSL)
|
remote_websocket.assert_called_once_with(**AUTODETECT_WEBSOCKET_SSL)
|
||||||
rest_api_class.assert_called_once_with(**DEVICEINFO_WEBSOCKET_SSL)
|
rest_api_class.assert_called_once_with(**DEVICEINFO_WEBSOCKET_SSL)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@ -2091,6 +2107,7 @@ async def test_ssdp_update_mac(hass: HomeAssistant) -> None:
|
|||||||
assert entry.data[CONF_MANUFACTURER] == DEFAULT_MANUFACTURER
|
assert entry.data[CONF_MANUFACTURER] == DEFAULT_MANUFACTURER
|
||||||
assert entry.data[CONF_MODEL] == "fake_model"
|
assert entry.data[CONF_MODEL] == "fake_model"
|
||||||
assert entry.data[CONF_MAC] is None
|
assert entry.data[CONF_MAC] is None
|
||||||
|
assert entry.data[CONF_PORT] == 8002
|
||||||
assert entry.unique_id == "123"
|
assert entry.unique_id == "123"
|
||||||
|
|
||||||
device_info = deepcopy(MOCK_DEVICE_INFO)
|
device_info = deepcopy(MOCK_DEVICE_INFO)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user