From 2f375458af436062f18009c6765f2aae74cf211a Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Mon, 7 Sep 2026 10:06:08 -0400 Subject: [PATCH] Fix Vizio soundbars requiring authentication (#181556) --- homeassistant/components/vizio/coordinator.py | 6 +++--- tests/components/vizio/test_init.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/vizio/coordinator.py b/homeassistant/components/vizio/coordinator.py index 939d067cc201..140f9aba9759 100644 --- a/homeassistant/components/vizio/coordinator.py +++ b/homeassistant/components/vizio/coordinator.py @@ -151,10 +151,10 @@ class VizioDeviceCoordinator(DataUpdateCoordinator[VizioDeviceData]): update_interval=SCAN_INTERVAL, ) self.device = device - # Modern firmware bundles power/input/app state into one endpoint; + # Modern TV firmware bundles power/input/app state into one endpoint; # firmware without it never gains it, so probe only until the first - # URI_NOT_FOUND response. - self._use_state_extended = True + # URI_NOT_FOUND response. Audio devices do not support this endpoint. + self._use_state_extended = device.profile.has_inputs @override async def _async_setup(self) -> None: diff --git a/tests/components/vizio/test_init.py b/tests/components/vizio/test_init.py index d0aaee209110..62fcc12a9abc 100644 --- a/tests/components/vizio/test_init.py +++ b/tests/components/vizio/test_init.py @@ -13,6 +13,7 @@ from vizaio import ( VizioConnectionError, VizioNotFoundError, ) +from vizaio.profiles import SOUNDBAR_PROFILE from homeassistant.components.media_player import ( DOMAIN as MEDIA_PLAYER_DOMAIN, @@ -226,6 +227,23 @@ async def test_state_extended_polling( mock_vizio.get_current_app_config.assert_not_called() +@pytest.mark.usefixtures("vizio_connect") +async def test_soundbar_does_not_poll_state_extended( + hass: HomeAssistant, + mock_speaker_config_entry: MockConfigEntry, + mock_vizio: AsyncMock, +) -> None: + """Test soundbars use the unauthenticated power endpoint.""" + mock_vizio.profile = SOUNDBAR_PROFILE + mock_vizio.get_state_extended.side_effect = VizioAuthError("token required") + + await setup_integration(hass, mock_speaker_config_entry) + + mock_vizio.get_state_extended.assert_not_called() + mock_vizio.get_power_state.assert_called_once() + assert not hass.config_entries.flow.async_progress_by_handler(DOMAIN) + + @pytest.mark.usefixtures("vizio_connect") async def test_state_extended_power_off( hass: HomeAssistant,