mirror of
https://github.com/home-assistant/core.git
synced 2025-07-15 17:27:10 +00:00
Add turn on/off support to HomeKit TVs (#140957)
* Add turn on/off support to HomeKit TVs * 0 = off, 1 = on, not a bool * add coverage * update snapshot
This commit is contained in:
parent
100e4425e4
commit
a600bc5e57
@ -83,7 +83,7 @@ class HomeKitTelevision(HomeKitEntity, MediaPlayerEntity):
|
||||
@property
|
||||
def supported_features(self) -> MediaPlayerEntityFeature:
|
||||
"""Flag media player features that are supported."""
|
||||
features = MediaPlayerEntityFeature(0)
|
||||
features = MediaPlayerEntityFeature.TURN_OFF | MediaPlayerEntityFeature.TURN_ON
|
||||
|
||||
if self.service.has(CharacteristicsTypes.ACTIVE_IDENTIFIER):
|
||||
features |= MediaPlayerEntityFeature.SELECT_SOURCE
|
||||
@ -177,6 +177,14 @@ class HomeKitTelevision(HomeKitEntity, MediaPlayerEntity):
|
||||
|
||||
return MediaPlayerState.ON
|
||||
|
||||
async def async_turn_on(self) -> None:
|
||||
"""Turn the tv on."""
|
||||
await self.async_put_characteristics({CharacteristicsTypes.ACTIVE: 1})
|
||||
|
||||
async def async_turn_off(self) -> None:
|
||||
"""Turn the tv off."""
|
||||
await self.async_put_characteristics({CharacteristicsTypes.ACTIVE: 0})
|
||||
|
||||
async def async_media_play(self) -> None:
|
||||
"""Send play command."""
|
||||
if self.state == MediaPlayerState.PLAYING:
|
||||
|
@ -14352,7 +14352,7 @@
|
||||
'original_name': 'LG webOS TV AF80',
|
||||
'platform': 'homekit_controller',
|
||||
'previous_unique_id': None,
|
||||
'supported_features': <MediaPlayerEntityFeature: 18433>,
|
||||
'supported_features': <MediaPlayerEntityFeature: 18817>,
|
||||
'translation_key': None,
|
||||
'unique_id': '00:00:00:00:00:00_1_48',
|
||||
'unit_of_measurement': None,
|
||||
@ -14371,7 +14371,7 @@
|
||||
'AV',
|
||||
'HDMI 4',
|
||||
]),
|
||||
'supported_features': <MediaPlayerEntityFeature: 18433>,
|
||||
'supported_features': <MediaPlayerEntityFeature: 18817>,
|
||||
}),
|
||||
'entity_id': 'media_player.lg_webos_tv_af80',
|
||||
'state': 'on',
|
||||
|
@ -0,0 +1,56 @@
|
||||
"""Test against characteristics captured from an LG TV."""
|
||||
|
||||
from homeassistant.components.media_player import (
|
||||
ATTR_INPUT_SOURCE_LIST,
|
||||
MediaPlayerEntityFeature,
|
||||
)
|
||||
from homeassistant.const import ATTR_SUPPORTED_FEATURES, STATE_ON
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from ..common import (
|
||||
HUB_TEST_ACCESSORY_ID,
|
||||
DeviceTestInfo,
|
||||
assert_devices_and_entities_created,
|
||||
setup_accessories_from_file,
|
||||
setup_test_accessories,
|
||||
)
|
||||
|
||||
|
||||
async def test_lg_tv_setup(hass: HomeAssistant) -> None:
|
||||
"""Test that a LG TV can be correctly setup in HA."""
|
||||
accessories = await setup_accessories_from_file(hass, "lg_tv.json")
|
||||
await setup_test_accessories(hass, accessories)
|
||||
|
||||
await assert_devices_and_entities_created(
|
||||
hass,
|
||||
DeviceTestInfo(
|
||||
unique_id=HUB_TEST_ACCESSORY_ID,
|
||||
name="LG webOS TV AF80",
|
||||
model="OLED55B9PUA",
|
||||
manufacturer="LG Electronics",
|
||||
sw_version="04.71.04",
|
||||
hw_version="1",
|
||||
serial_number="A0000A000000000A",
|
||||
devices=[],
|
||||
entities=[],
|
||||
),
|
||||
)
|
||||
|
||||
state = hass.states.get("media_player.lg_webos_tv_af80")
|
||||
assert state is not None
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes[ATTR_INPUT_SOURCE_LIST] == [
|
||||
"AirPlay",
|
||||
"Live TV",
|
||||
"HDMI 1",
|
||||
"Sony",
|
||||
"Apple",
|
||||
"AV",
|
||||
"HDMI 4",
|
||||
]
|
||||
features = state.attributes[ATTR_SUPPORTED_FEATURES]
|
||||
assert features & MediaPlayerEntityFeature.TURN_ON
|
||||
assert features & MediaPlayerEntityFeature.TURN_OFF
|
||||
assert features & MediaPlayerEntityFeature.SELECT_SOURCE
|
||||
assert features & MediaPlayerEntityFeature.PLAY
|
||||
assert features & MediaPlayerEntityFeature.PAUSE
|
@ -10,6 +10,11 @@ from aiohomekit.model.characteristics import (
|
||||
from aiohomekit.model.services import Service, ServicesTypes
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.media_player import (
|
||||
DOMAIN as MEDIA_PLAYER_DOMAIN,
|
||||
SERVICE_TURN_OFF,
|
||||
SERVICE_TURN_ON,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
@ -408,3 +413,57 @@ async def test_migrate_unique_id(
|
||||
entity_registry.async_get(media_player_entry.entity_id).unique_id
|
||||
== f"00:00:00:00:00:00_{aid}_8"
|
||||
)
|
||||
|
||||
|
||||
async def test_turn_on(hass: HomeAssistant, get_next_aid: Callable[[], int]) -> None:
|
||||
"""Test that we can turn on a media player."""
|
||||
helper = await setup_test_component(
|
||||
hass, get_next_aid(), create_tv_service_with_target_media_state
|
||||
)
|
||||
|
||||
await helper.async_update(
|
||||
ServicesTypes.TELEVISION,
|
||||
{
|
||||
CharacteristicsTypes.CURRENT_MEDIA_STATE: 0,
|
||||
},
|
||||
)
|
||||
|
||||
await hass.services.async_call(
|
||||
MEDIA_PLAYER_DOMAIN,
|
||||
SERVICE_TURN_ON,
|
||||
{"entity_id": "media_player.testdevice"},
|
||||
blocking=True,
|
||||
)
|
||||
helper.async_assert_service_values(
|
||||
ServicesTypes.TELEVISION,
|
||||
{
|
||||
CharacteristicsTypes.ACTIVE: 1,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
async def test_turn_off(hass: HomeAssistant, get_next_aid: Callable[[], int]) -> None:
|
||||
"""Test that we can turn off a media player."""
|
||||
helper = await setup_test_component(
|
||||
hass, get_next_aid(), create_tv_service_with_target_media_state
|
||||
)
|
||||
|
||||
await helper.async_update(
|
||||
ServicesTypes.TELEVISION,
|
||||
{
|
||||
CharacteristicsTypes.CURRENT_MEDIA_STATE: 0,
|
||||
},
|
||||
)
|
||||
|
||||
await hass.services.async_call(
|
||||
MEDIA_PLAYER_DOMAIN,
|
||||
SERVICE_TURN_OFF,
|
||||
{"entity_id": "media_player.testdevice"},
|
||||
blocking=True,
|
||||
)
|
||||
helper.async_assert_service_values(
|
||||
ServicesTypes.TELEVISION,
|
||||
{
|
||||
CharacteristicsTypes.ACTIVE: 0,
|
||||
},
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user