Add LG webOS Smart TV config flow support (#64117)
* 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>
This commit is contained in:
parent
043b9c66b0
commit
dee843bf6e
24 changed files with 1668 additions and 324 deletions
88
homeassistant/components/webostv/triggers/turn_on.py
Normal file
88
homeassistant/components/webostv/triggers/turn_on.py
Normal file
|
@ -0,0 +1,88 @@
|
|||
"""webOS Smart TV device turn on trigger."""
|
||||
from __future__ import annotations
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.automation import (
|
||||
AutomationActionType,
|
||||
AutomationTriggerInfo,
|
||||
)
|
||||
from homeassistant.const import ATTR_DEVICE_ID, ATTR_ENTITY_ID, CONF_PLATFORM
|
||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
|
||||
from homeassistant.helpers import config_validation as cv
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
|
||||
from ..const import DOMAIN
|
||||
from ..helpers import (
|
||||
async_get_client_wrapper_by_device_entry,
|
||||
async_get_device_entry_by_device_id,
|
||||
async_get_device_id_from_entity_id,
|
||||
)
|
||||
|
||||
# Platform type should be <DOMAIN>.<SUBMODULE_NAME>
|
||||
PLATFORM_TYPE = f"{DOMAIN}.{__name__.rsplit('.', maxsplit=1)[-1]}"
|
||||
|
||||
TRIGGER_TYPE_TURN_ON = "turn_on"
|
||||
|
||||
TRIGGER_SCHEMA = vol.All(
|
||||
cv.TRIGGER_BASE_SCHEMA.extend(
|
||||
{
|
||||
vol.Required(CONF_PLATFORM): PLATFORM_TYPE,
|
||||
vol.Optional(ATTR_DEVICE_ID): vol.All(cv.ensure_list, [cv.string]),
|
||||
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
|
||||
},
|
||||
),
|
||||
cv.has_at_least_one_key(ATTR_ENTITY_ID, ATTR_DEVICE_ID),
|
||||
)
|
||||
|
||||
|
||||
async def async_attach_trigger(
|
||||
hass: HomeAssistant,
|
||||
config: ConfigType,
|
||||
action: AutomationActionType,
|
||||
automation_info: AutomationTriggerInfo,
|
||||
*,
|
||||
platform_type: str = PLATFORM_TYPE,
|
||||
) -> CALLBACK_TYPE | None:
|
||||
"""Attach a trigger."""
|
||||
device_ids = set()
|
||||
if ATTR_DEVICE_ID in config:
|
||||
device_ids.update(config.get(ATTR_DEVICE_ID, []))
|
||||
|
||||
if ATTR_ENTITY_ID in config:
|
||||
device_ids.update(
|
||||
{
|
||||
async_get_device_id_from_entity_id(hass, entity_id)
|
||||
for entity_id in config.get(ATTR_ENTITY_ID, [])
|
||||
}
|
||||
)
|
||||
|
||||
trigger_data = automation_info["trigger_data"]
|
||||
|
||||
unsubs = []
|
||||
|
||||
for device_id in device_ids:
|
||||
device = async_get_device_entry_by_device_id(hass, device_id)
|
||||
device_name = device.name_by_user or device.name
|
||||
|
||||
variables = {
|
||||
**trigger_data,
|
||||
CONF_PLATFORM: platform_type,
|
||||
ATTR_DEVICE_ID: device_id,
|
||||
"description": f"webostv turn on trigger for {device_name}",
|
||||
}
|
||||
|
||||
client_wrapper = async_get_client_wrapper_by_device_entry(hass, device)
|
||||
|
||||
unsubs.append(
|
||||
client_wrapper.turn_on.async_attach(action, {"trigger": variables})
|
||||
)
|
||||
|
||||
@callback
|
||||
def async_remove() -> None:
|
||||
"""Remove state listeners async."""
|
||||
for unsub in unsubs:
|
||||
unsub()
|
||||
unsubs.clear()
|
||||
|
||||
return async_remove
|
Loading…
Add table
Add a link
Reference in a new issue