Skip to content

Commit

Permalink
Add play/pause functionality for Vizio Smartcast media_player entities (
Browse files Browse the repository at this point in the history
home-assistant#108896)

* Add play/pause functionality to vizio integration

Leverages existing pyvizio functionality. My impression is that it also
works for soundbars based on exiva/Vizio_SmartCast_API#19.

* Set vizio assumed_state to True

The Vizio API is only capable of indicating whether the device is on
or off and not whether it's playing/paused/idle. Setting assumed_state
to True gives us separate Play and Pause buttons versus the (useless)
merged Play/Pause button we would get otherwise.
  • Loading branch information
NasaGeek authored Apr 25, 2024
1 parent f2fe62d commit 12c2ed5
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 1 deletion.
4 changes: 3 additions & 1 deletion homeassistant/components/vizio/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@
DOMAIN = "vizio"

COMMON_SUPPORTED_COMMANDS = (
MediaPlayerEntityFeature.SELECT_SOURCE
MediaPlayerEntityFeature.PAUSE
| MediaPlayerEntityFeature.PLAY
| MediaPlayerEntityFeature.SELECT_SOURCE
| MediaPlayerEntityFeature.TURN_ON
| MediaPlayerEntityFeature.TURN_OFF
| MediaPlayerEntityFeature.VOLUME_MUTE
Expand Down
9 changes: 9 additions & 0 deletions homeassistant/components/vizio/media_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ def __init__(
)
self._device = device
self._max_volume = float(device.get_max_volume())
self._attr_assumed_state = True

# Entity class attributes that will change with each update (we only include
# the ones that are initialized differently from the defaults)
Expand Down Expand Up @@ -483,3 +484,11 @@ async def async_set_volume_level(self, volume: float) -> None:
num = int(self._max_volume * (self._attr_volume_level - volume))
await self._device.vol_down(num=num, log_api_exception=False)
self._attr_volume_level = volume

async def async_media_play(self) -> None:
"""Play whatever media is currently active."""
await self._device.play(log_api_exception=False)

async def async_media_pause(self) -> None:
"""Pause whatever media is currently active."""
await self._device.pause(log_api_exception=False)
4 changes: 4 additions & 0 deletions tests/components/vizio/test_media_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
ATTR_SOUND_MODE,
DOMAIN as MP_DOMAIN,
SERVICE_MEDIA_NEXT_TRACK,
SERVICE_MEDIA_PAUSE,
SERVICE_MEDIA_PLAY,
SERVICE_MEDIA_PREVIOUS_TRACK,
SERVICE_SELECT_SOUND_MODE,
SERVICE_SELECT_SOURCE,
Expand Down Expand Up @@ -443,6 +445,8 @@ async def test_services(
"eq",
"Music",
)
await _test_service(hass, MP_DOMAIN, "play", SERVICE_MEDIA_PLAY, None)
await _test_service(hass, MP_DOMAIN, "pause", SERVICE_MEDIA_PAUSE, None)


async def test_options_update(
Expand Down

0 comments on commit 12c2ed5

Please sign in to comment.