* Add webOS Smart TV config flow support (#53256) * Add Webostv config flow * Fix tests mocks and apply review comments * Apply review comments * Change config flow to use ssdp UDN as unique_id * Fix device info * More review comments * Fix _async_check_configured_entry * Remove turn on script * Add webOS Smart TV device triggers (#53752) * Add webOS Smart TV config flow support (#53256) * Add Webostv config flow * Fix tests mocks and apply review comments * Apply review comments * Change config flow to use ssdp UDN as unique_id * Fix device info * More review comments * Fix _async_check_configured_entry * Remove turn on script * Add webOS Smart TV device triggers (#53752) * Fix webOS Smart TV mypy and pylint errors (#62620) * Change webOS Smart TV PyPi aiopylgtv package to bscpylgtv (#62633) * Change webOS Smart TV PyPi aiopylgtv package to bscpylgtv * Update bscpylgtv to 0.2.8 (revised websockets requirment) * Change webOS Smart TV PyPi package to aiowebostv (#63759) * Change webOS Smart TV PyPi package to aiowebostv * Apply suggestions from code review Co-authored-by: Martin Hjelmare <marhje52@gmail.com> Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * webOS TV check UUID for user added device (#63817) * webOS TV check uuid when for user added device * Apply suggestions from code review Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Add test for form abort and host update Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Rework webOS Smart TV device trigger to custom trigger platform (#63950) * Rework webOS Smart TV device trigger to custom trigger platform * Review comments and add tests * Fix webOS TV import from YAML (#63996) * Fix webOS TV import from YAML * Fix requirements * Migrate YAML entities unique id to UUID * Add backoff to migration task delay * Assert result data and unique_id * Apply suggestions from code review Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Add codeowner Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
"""Support for LG WebOS TV notification service."""
|
|
import logging
|
|
|
|
from aiowebostv import WebOsTvPairError
|
|
|
|
from homeassistant.components.notify import ATTR_DATA, BaseNotificationService
|
|
from homeassistant.const import CONF_ICON, CONF_NAME
|
|
|
|
from .const import ATTR_CONFIG_ENTRY_ID, DATA_CONFIG_ENTRY, DOMAIN, WEBOSTV_EXCEPTIONS
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
async def async_get_service(hass, _config, discovery_info=None):
|
|
"""Return the notify service."""
|
|
|
|
if discovery_info is None:
|
|
return None
|
|
|
|
name = discovery_info.get(CONF_NAME)
|
|
client = hass.data[DOMAIN][DATA_CONFIG_ENTRY][
|
|
discovery_info[ATTR_CONFIG_ENTRY_ID]
|
|
].client
|
|
|
|
return LgWebOSNotificationService(client, name)
|
|
|
|
|
|
class LgWebOSNotificationService(BaseNotificationService):
|
|
"""Implement the notification service for LG WebOS TV."""
|
|
|
|
def __init__(self, client, name):
|
|
"""Initialize the service."""
|
|
self._name = name
|
|
self._client = client
|
|
|
|
async def async_send_message(self, message="", **kwargs):
|
|
"""Send a message to the tv."""
|
|
try:
|
|
if not self._client.is_connected():
|
|
await self._client.connect()
|
|
|
|
data = kwargs.get(ATTR_DATA)
|
|
icon_path = data.get(CONF_ICON, "") if data else None
|
|
await self._client.send_message(message, icon_path=icon_path)
|
|
except WebOsTvPairError:
|
|
_LOGGER.error("Pairing with TV failed")
|
|
except FileNotFoundError:
|
|
_LOGGER.error("Icon %s not found", icon_path)
|
|
except WEBOSTV_EXCEPTIONS:
|
|
_LOGGER.error("TV unreachable")
|