1 """Helper functions for webOS Smart TV."""
3 from __future__
import annotations
5 from aiowebostv
import WebOsClient
11 from .
import async_control_connect
12 from .const
import DATA_CONFIG_ENTRY, DOMAIN, LIVE_TV_APP_ID, WEBOSTV_EXCEPTIONS
17 hass: HomeAssistant, device_id: str
19 """Get Device Entry from Device Registry by device ID.
21 Raises ValueError if device ID is invalid.
23 device_reg = dr.async_get(hass)
24 if (device := device_reg.async_get(device_id))
is None:
25 raise ValueError(f
"Device {device_id} is not a valid {DOMAIN} device.")
32 """Get device ID from an entity ID.
34 Raises ValueError if entity or device ID is invalid.
36 ent_reg = er.async_get(hass)
37 entity_entry = ent_reg.async_get(entity_id)
41 or entity_entry.device_id
is None
42 or entity_entry.platform != DOMAIN
44 raise ValueError(f
"Entity {entity_id} is not a valid {DOMAIN} entity.")
46 return entity_entry.device_id
51 hass: HomeAssistant, device: DeviceEntry
53 """Get WebOsClient from Device Registry by device entry.
55 Raises ValueError if client is not found.
57 for config_entry_id
in device.config_entries:
58 if client := hass.data[DOMAIN][DATA_CONFIG_ENTRY].
get(config_entry_id):
63 f
"Device {device.id} is not from an existing {DOMAIN} config entry"
70 """Construct sources list."""
73 except WEBOSTV_EXCEPTIONS:
78 for app
in client.apps.values():
79 sources.append(app[
"title"])
80 if app[
"id"] == LIVE_TV_APP_ID:
83 for source
in client.inputs.values():
84 sources.append(source[
"label"])
85 if source[
"appId"] == LIVE_TV_APP_ID:
89 sources.append(
"Live TV")
92 return list(dict.fromkeys(sources))
web.Response get(self, web.Request request, str config_key)
WebOsClient async_get_client_by_device_entry(HomeAssistant hass, DeviceEntry device)
list[str] async_get_sources(str host, str key)
str async_get_device_id_from_entity_id(HomeAssistant hass, str entity_id)
DeviceEntry async_get_device_entry_by_device_id(HomeAssistant hass, str device_id)
WebOsClient async_control_connect(str host, str|None key)