Adjust device_automation type hints in core components (#72207)
This commit is contained in:
parent
fb53e39f05
commit
5cfb31d28a
16 changed files with 176 additions and 51 deletions
|
@ -1,8 +1,6 @@
|
||||||
"""Device automation helpers for entity."""
|
"""Device automation helpers for entity."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import (
|
from homeassistant.components.automation import (
|
||||||
|
@ -91,7 +89,7 @@ async def _async_get_automations(
|
||||||
|
|
||||||
async def async_get_triggers(
|
async def async_get_triggers(
|
||||||
hass: HomeAssistant, device_id: str, domain: str
|
hass: HomeAssistant, device_id: str, domain: str
|
||||||
) -> list[dict[str, Any]]:
|
) -> list[dict[str, str]]:
|
||||||
"""List device triggers."""
|
"""List device triggers."""
|
||||||
return await _async_get_automations(hass, device_id, ENTITY_TRIGGERS, domain)
|
return await _async_get_automations(hass, device_id, ENTITY_TRIGGERS, domain)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
"""Device automation helpers for toggle entity."""
|
"""Device automation helpers for toggle entity."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import (
|
from homeassistant.components.automation import (
|
||||||
|
@ -228,7 +226,7 @@ async def async_get_conditions(
|
||||||
|
|
||||||
async def async_get_triggers(
|
async def async_get_triggers(
|
||||||
hass: HomeAssistant, device_id: str, domain: str
|
hass: HomeAssistant, device_id: str, domain: str
|
||||||
) -> list[dict[str, Any]]:
|
) -> list[dict[str, str]]:
|
||||||
"""List device triggers."""
|
"""List device triggers."""
|
||||||
triggers = await entity.async_get_triggers(hass, device_id, domain)
|
triggers = await entity.async_get_triggers(hass, device_id, domain)
|
||||||
triggers.extend(
|
triggers.extend(
|
||||||
|
|
|
@ -3,11 +3,16 @@ import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_EVENT, CONF_PLATFORM, CONF_SOURCE, CONF_ZONE
|
from homeassistant.const import CONF_EVENT, CONF_PLATFORM, CONF_SOURCE, CONF_ZONE
|
||||||
from homeassistant.core import HassJob, callback
|
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||||
from homeassistant.helpers import condition, config_validation as cv
|
from homeassistant.helpers import condition, config_validation as cv
|
||||||
from homeassistant.helpers.config_validation import entity_domain
|
from homeassistant.helpers.config_validation import entity_domain
|
||||||
from homeassistant.helpers.event import TrackStates, async_track_state_change_filtered
|
from homeassistant.helpers.event import TrackStates, async_track_state_change_filtered
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
from . import DOMAIN
|
from . import DOMAIN
|
||||||
|
|
||||||
|
@ -36,10 +41,15 @@ def source_match(state, source):
|
||||||
return state and state.attributes.get("source") == source
|
return state and state.attributes.get("source") == source
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
source = config.get(CONF_SOURCE).lower()
|
source: str = config[CONF_SOURCE].lower()
|
||||||
zone_entity_id = config.get(CONF_ZONE)
|
zone_entity_id = config.get(CONF_ZONE)
|
||||||
trigger_event = config.get(CONF_EVENT)
|
trigger_event = config.get(CONF_EVENT)
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
|
@ -1,14 +1,25 @@
|
||||||
"""Home Assistant trigger dispatcher."""
|
"""Home Assistant trigger dispatcher."""
|
||||||
import importlib
|
import importlib
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
|
from homeassistant.components.device_automation.trigger import (
|
||||||
|
DeviceAutomationTriggerProtocol,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_PLATFORM
|
from homeassistant.const import CONF_PLATFORM
|
||||||
|
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
|
|
||||||
def _get_trigger_platform(config):
|
def _get_trigger_platform(config: ConfigType) -> DeviceAutomationTriggerProtocol:
|
||||||
return importlib.import_module(f"..triggers.{config[CONF_PLATFORM]}", __name__)
|
return importlib.import_module(f"..triggers.{config[CONF_PLATFORM]}", __name__)
|
||||||
|
|
||||||
|
|
||||||
async def async_validate_trigger_config(hass, config):
|
async def async_validate_trigger_config(
|
||||||
|
hass: HomeAssistant, config: ConfigType
|
||||||
|
) -> ConfigType:
|
||||||
"""Validate config."""
|
"""Validate config."""
|
||||||
platform = _get_trigger_platform(config)
|
platform = _get_trigger_platform(config)
|
||||||
if hasattr(platform, "async_validate_trigger_config"):
|
if hasattr(platform, "async_validate_trigger_config"):
|
||||||
|
@ -17,7 +28,12 @@ async def async_validate_trigger_config(hass, config):
|
||||||
return platform.TRIGGER_SCHEMA(config)
|
return platform.TRIGGER_SCHEMA(config)
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach trigger of specified platform."""
|
"""Attach trigger of specified platform."""
|
||||||
platform = _get_trigger_platform(config)
|
platform = _get_trigger_platform(config)
|
||||||
return await platform.async_attach_trigger(hass, config, action, automation_info)
|
return await platform.async_attach_trigger(hass, config, action, automation_info)
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
"""Offer Home Assistant core automation rules."""
|
"""Offer Home Assistant core automation rules."""
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_EVENT, CONF_PLATFORM, EVENT_HOMEASSISTANT_STOP
|
from homeassistant.const import CONF_EVENT, CONF_PLATFORM, EVENT_HOMEASSISTANT_STOP
|
||||||
from homeassistant.core import HassJob, callback
|
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||||
from homeassistant.helpers import config_validation as cv
|
from homeassistant.helpers import config_validation as cv
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
# mypy: allow-untyped-defs
|
# mypy: allow-untyped-defs
|
||||||
|
|
||||||
|
@ -18,7 +23,12 @@ TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for events based on configuration."""
|
"""Listen for events based on configuration."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
event = config.get(CONF_EVENT)
|
event = config.get(CONF_EVENT)
|
||||||
|
|
|
@ -4,6 +4,10 @@ import logging
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import exceptions
|
from homeassistant import exceptions
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_ABOVE,
|
CONF_ABOVE,
|
||||||
CONF_ATTRIBUTE,
|
CONF_ATTRIBUTE,
|
||||||
|
@ -81,10 +85,15 @@ async def async_validate_trigger_config(
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(
|
async def async_attach_trigger(
|
||||||
hass, config, action, automation_info, *, platform_type="numeric_state"
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
*,
|
||||||
|
platform_type: str = "numeric_state",
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
entity_ids = config.get(CONF_ENTITY_ID)
|
entity_ids: list[str] = config[CONF_ENTITY_ID]
|
||||||
below = config.get(CONF_BELOW)
|
below = config.get(CONF_BELOW)
|
||||||
above = config.get(CONF_ABOVE)
|
above = config.get(CONF_ABOVE)
|
||||||
time_delta = config.get(CONF_FOR)
|
time_delta = config.get(CONF_FOR)
|
||||||
|
|
|
@ -7,6 +7,10 @@ import logging
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import exceptions
|
from homeassistant import exceptions
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_ATTRIBUTE, CONF_FOR, CONF_PLATFORM, MATCH_ALL
|
from homeassistant.const import CONF_ATTRIBUTE, CONF_FOR, CONF_PLATFORM, MATCH_ALL
|
||||||
from homeassistant.core import (
|
from homeassistant.core import (
|
||||||
CALLBACK_TYPE,
|
CALLBACK_TYPE,
|
||||||
|
@ -92,9 +96,9 @@ async def async_validate_trigger_config(
|
||||||
|
|
||||||
async def async_attach_trigger(
|
async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config,
|
config: ConfigType,
|
||||||
action,
|
action: AutomationActionType,
|
||||||
automation_info,
|
automation_info: AutomationTriggerInfo,
|
||||||
*,
|
*,
|
||||||
platform_type: str = "state",
|
platform_type: str = "state",
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
|
|
|
@ -5,6 +5,10 @@ from functools import partial
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components import sensor
|
from homeassistant.components import sensor
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_DEVICE_CLASS,
|
ATTR_DEVICE_CLASS,
|
||||||
CONF_AT,
|
CONF_AT,
|
||||||
|
@ -12,13 +16,14 @@ from homeassistant.const import (
|
||||||
STATE_UNAVAILABLE,
|
STATE_UNAVAILABLE,
|
||||||
STATE_UNKNOWN,
|
STATE_UNKNOWN,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HassJob, callback
|
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||||
from homeassistant.helpers import config_validation as cv
|
from homeassistant.helpers import config_validation as cv
|
||||||
from homeassistant.helpers.event import (
|
from homeassistant.helpers.event import (
|
||||||
async_track_point_in_time,
|
async_track_point_in_time,
|
||||||
async_track_state_change_event,
|
async_track_state_change_event,
|
||||||
async_track_time_change,
|
async_track_time_change,
|
||||||
)
|
)
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
# mypy: allow-untyped-defs, no-check-untyped-defs
|
# mypy: allow-untyped-defs, no-check-untyped-defs
|
||||||
|
@ -37,10 +42,15 @@ TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
entities = {}
|
entities: dict[str, CALLBACK_TYPE] = {}
|
||||||
removes = []
|
removes = []
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
"""Offer time listening automation rules."""
|
"""Offer time listening automation rules."""
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_PLATFORM
|
from homeassistant.const import CONF_PLATFORM
|
||||||
from homeassistant.core import HassJob, callback
|
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||||
from homeassistant.helpers import config_validation as cv
|
from homeassistant.helpers import config_validation as cv
|
||||||
from homeassistant.helpers.event import async_track_time_change
|
from homeassistant.helpers.event import async_track_time_change
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
# mypy: allow-untyped-defs, no-check-untyped-defs
|
# mypy: allow-untyped-defs, no-check-untyped-defs
|
||||||
|
|
||||||
|
@ -55,7 +60,12 @@ TRIGGER_SCHEMA = vol.All(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
hours = config.get(CONF_HOURS)
|
hours = config.get(CONF_HOURS)
|
||||||
|
|
|
@ -3,7 +3,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, cast
|
from typing import cast
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
@ -290,9 +290,9 @@ async def async_removed_from_device(hass: HomeAssistant, device_id: str) -> None
|
||||||
|
|
||||||
async def async_get_triggers(
|
async def async_get_triggers(
|
||||||
hass: HomeAssistant, device_id: str
|
hass: HomeAssistant, device_id: str
|
||||||
) -> list[dict[str, Any]]:
|
) -> list[dict[str, str]]:
|
||||||
"""List device triggers for MQTT devices."""
|
"""List device triggers for MQTT devices."""
|
||||||
triggers: list[dict] = []
|
triggers: list[dict[str, str]] = []
|
||||||
|
|
||||||
if DEVICE_TRIGGERS not in hass.data:
|
if DEVICE_TRIGGERS not in hass.data:
|
||||||
return triggers
|
return triggers
|
||||||
|
|
|
@ -5,9 +5,14 @@ import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_PAYLOAD, CONF_PLATFORM, CONF_VALUE_TEMPLATE
|
from homeassistant.const import CONF_PAYLOAD, CONF_PLATFORM, CONF_VALUE_TEMPLATE
|
||||||
from homeassistant.core import HassJob, callback
|
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||||
from homeassistant.helpers import config_validation as cv, template
|
from homeassistant.helpers import config_validation as cv, template
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
from .. import mqtt
|
from .. import mqtt
|
||||||
from .const import CONF_ENCODING, CONF_QOS, CONF_TOPIC, DEFAULT_ENCODING, DEFAULT_QOS
|
from .const import CONF_ENCODING, CONF_QOS, CONF_TOPIC, DEFAULT_ENCODING, DEFAULT_QOS
|
||||||
|
@ -31,7 +36,12 @@ TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
topic = config[CONF_TOPIC]
|
topic = config[CONF_TOPIC]
|
||||||
|
|
|
@ -3,15 +3,20 @@ from datetime import timedelta
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_EVENT,
|
CONF_EVENT,
|
||||||
CONF_OFFSET,
|
CONF_OFFSET,
|
||||||
CONF_PLATFORM,
|
CONF_PLATFORM,
|
||||||
SUN_EVENT_SUNRISE,
|
SUN_EVENT_SUNRISE,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HassJob, callback
|
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.event import async_track_sunrise, async_track_sunset
|
from homeassistant.helpers.event import async_track_sunrise, async_track_sunset
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
# mypy: allow-untyped-defs, no-check-untyped-defs
|
# mypy: allow-untyped-defs, no-check-untyped-defs
|
||||||
|
|
||||||
|
@ -24,7 +29,12 @@ TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for events based on configuration."""
|
"""Listen for events based on configuration."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
event = config.get(CONF_EVENT)
|
event = config.get(CONF_EVENT)
|
||||||
|
|
|
@ -4,15 +4,20 @@ import logging
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import exceptions
|
from homeassistant import exceptions
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_FOR, CONF_PLATFORM, CONF_VALUE_TEMPLATE
|
from homeassistant.const import CONF_FOR, CONF_PLATFORM, CONF_VALUE_TEMPLATE
|
||||||
from homeassistant.core import HassJob, callback
|
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||||
from homeassistant.helpers import config_validation as cv, template
|
from homeassistant.helpers import config_validation as cv, template
|
||||||
from homeassistant.helpers.event import (
|
from homeassistant.helpers.event import (
|
||||||
TrackTemplate,
|
TrackTemplate,
|
||||||
async_call_later,
|
async_call_later,
|
||||||
async_track_template_result,
|
async_track_template_result,
|
||||||
)
|
)
|
||||||
from homeassistant.helpers.template import result_as_boolean
|
from homeassistant.helpers.template import Template, result_as_boolean
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
# mypy: allow-untyped-defs, no-check-untyped-defs
|
# mypy: allow-untyped-defs, no-check-untyped-defs
|
||||||
|
|
||||||
|
@ -28,11 +33,16 @@ TRIGGER_SCHEMA = IF_ACTION_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(
|
async def async_attach_trigger(
|
||||||
hass, config, action, automation_info, *, platform_type="template"
|
hass: HomeAssistant,
|
||||||
):
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
*,
|
||||||
|
platform_type: str = "template",
|
||||||
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
value_template = config.get(CONF_VALUE_TEMPLATE)
|
value_template: Template = config[CONF_VALUE_TEMPLATE]
|
||||||
value_template.hass = hass
|
value_template.hass = hass
|
||||||
time_delta = config.get(CONF_FOR)
|
time_delta = config.get(CONF_FOR)
|
||||||
template.attach(hass, time_delta)
|
template.attach(hass, time_delta)
|
||||||
|
|
|
@ -4,9 +4,14 @@ from functools import partial
|
||||||
from aiohttp import hdrs
|
from aiohttp import hdrs
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_PLATFORM, CONF_WEBHOOK_ID
|
from homeassistant.const import CONF_PLATFORM, CONF_WEBHOOK_ID
|
||||||
from homeassistant.core import HassJob, callback
|
from homeassistant.core import CALLBACK_TYPE, HassJob, HomeAssistant, callback
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
from . import async_register, async_unregister
|
from . import async_register, async_unregister
|
||||||
|
|
||||||
|
@ -37,10 +42,15 @@ async def _handle_webhook(job, trigger_data, hass, webhook_id, request):
|
||||||
hass.async_run_hass_job(job, {"trigger": result})
|
hass.async_run_hass_job(job, {"trigger": result})
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
) -> CALLBACK_TYPE:
|
||||||
"""Trigger based on incoming webhooks."""
|
"""Trigger based on incoming webhooks."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
webhook_id = config.get(CONF_WEBHOOK_ID)
|
webhook_id: str = config[CONF_WEBHOOK_ID]
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
async_register(
|
async_register(
|
||||||
hass,
|
hass,
|
||||||
|
|
|
@ -3,6 +3,10 @@ import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_FRIENDLY_NAME,
|
ATTR_FRIENDLY_NAME,
|
||||||
CONF_ENTITY_ID,
|
CONF_ENTITY_ID,
|
||||||
|
@ -56,11 +60,16 @@ async def async_validate_trigger_config(
|
||||||
|
|
||||||
|
|
||||||
async def async_attach_trigger(
|
async def async_attach_trigger(
|
||||||
hass, config, action, automation_info, *, platform_type: str = "zone"
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
action: AutomationActionType,
|
||||||
|
automation_info: AutomationTriggerInfo,
|
||||||
|
*,
|
||||||
|
platform_type: str = "zone",
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info["trigger_data"]
|
trigger_data = automation_info["trigger_data"]
|
||||||
entity_id = config.get(CONF_ENTITY_ID)
|
entity_id: list[str] = config[CONF_ENTITY_ID]
|
||||||
zone_entity_id = config.get(CONF_ZONE)
|
zone_entity_id = config.get(CONF_ZONE)
|
||||||
event = config.get(CONF_EVENT)
|
event = config.get(CONF_EVENT)
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
|
@ -5,7 +5,7 @@ import asyncio
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
import functools
|
import functools
|
||||||
import logging
|
import logging
|
||||||
from typing import Any
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
@ -16,13 +16,20 @@ from homeassistant.loader import IntegrationNotFound, async_get_integration
|
||||||
|
|
||||||
from .typing import ConfigType, TemplateVarsType
|
from .typing import ConfigType, TemplateVarsType
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from homeassistant.components.device_automation.trigger import (
|
||||||
|
DeviceAutomationTriggerProtocol,
|
||||||
|
)
|
||||||
|
|
||||||
_PLATFORM_ALIASES = {
|
_PLATFORM_ALIASES = {
|
||||||
"device_automation": ("device",),
|
"device_automation": ("device",),
|
||||||
"homeassistant": ("event", "numeric_state", "state", "time_pattern", "time"),
|
"homeassistant": ("event", "numeric_state", "state", "time_pattern", "time"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async def _async_get_trigger_platform(hass: HomeAssistant, config: ConfigType) -> Any:
|
async def _async_get_trigger_platform(
|
||||||
|
hass: HomeAssistant, config: ConfigType
|
||||||
|
) -> DeviceAutomationTriggerProtocol:
|
||||||
platform_and_sub_type = config[CONF_PLATFORM].split(".")
|
platform_and_sub_type = config[CONF_PLATFORM].split(".")
|
||||||
platform = platform_and_sub_type[0]
|
platform = platform_and_sub_type[0]
|
||||||
for alias, triggers in _PLATFORM_ALIASES.items():
|
for alias, triggers in _PLATFORM_ALIASES.items():
|
||||||
|
@ -86,6 +93,10 @@ async def async_initialize_triggers(
|
||||||
variables: TemplateVarsType = None,
|
variables: TemplateVarsType = None,
|
||||||
) -> CALLBACK_TYPE | None:
|
) -> CALLBACK_TYPE | None:
|
||||||
"""Initialize triggers."""
|
"""Initialize triggers."""
|
||||||
|
from homeassistant.components.automation import ( # pylint:disable=[import-outside-toplevel]
|
||||||
|
AutomationTriggerData,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
|
|
||||||
triggers = []
|
triggers = []
|
||||||
for idx, conf in enumerate(trigger_config):
|
for idx, conf in enumerate(trigger_config):
|
||||||
|
@ -96,14 +107,14 @@ async def async_initialize_triggers(
|
||||||
platform = await _async_get_trigger_platform(hass, conf)
|
platform = await _async_get_trigger_platform(hass, conf)
|
||||||
trigger_id = conf.get(CONF_ID, f"{idx}")
|
trigger_id = conf.get(CONF_ID, f"{idx}")
|
||||||
trigger_idx = f"{idx}"
|
trigger_idx = f"{idx}"
|
||||||
trigger_data = {"id": trigger_id, "idx": trigger_idx}
|
trigger_data = AutomationTriggerData(id=trigger_id, idx=trigger_idx)
|
||||||
info = {
|
info = AutomationTriggerInfo(
|
||||||
"domain": domain,
|
domain=domain,
|
||||||
"name": name,
|
name=name,
|
||||||
"home_assistant_start": home_assistant_start,
|
home_assistant_start=home_assistant_start,
|
||||||
"variables": variables,
|
variables=variables,
|
||||||
"trigger_data": trigger_data,
|
trigger_data=trigger_data,
|
||||||
}
|
)
|
||||||
|
|
||||||
triggers.append(
|
triggers.append(
|
||||||
platform.async_attach_trigger(
|
platform.async_attach_trigger(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue