Automation trigger info type hint improvements (#55402)
* Make automation trigger info a TypedDict * zwave_js trigger type hint fixes * Remove redundant automation trigger info field presence checks * Use async_initialize_triggers in mqtt and tasmota device_trigger tests
This commit is contained in:
parent
0749e045bb
commit
b10fc89a6b
46 changed files with 344 additions and 210 deletions
|
@ -11,7 +11,10 @@ from homeassistant.components.alarm_control_panel.const import (
|
||||||
SUPPORT_ALARM_ARM_NIGHT,
|
SUPPORT_ALARM_ARM_NIGHT,
|
||||||
SUPPORT_ALARM_ARM_VACATION,
|
SUPPORT_ALARM_ARM_VACATION,
|
||||||
)
|
)
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.homeassistant.triggers import state as state_trigger
|
from homeassistant.components.homeassistant.triggers import state as state_trigger
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
@ -129,7 +132,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
if config[CONF_TYPE] == "triggered":
|
if config[CONF_TYPE] == "triggered":
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_ENTITY_ID,
|
ATTR_ENTITY_ID,
|
||||||
|
@ -57,10 +60,10 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
||||||
if config[CONF_TYPE] == "turn_on":
|
if config[CONF_TYPE] == "turn_on":
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Awaitable, Callable, Dict, cast
|
from typing import Any, Awaitable, Callable, Dict, TypedDict, cast
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
from voluptuous.humanize import humanize_error
|
from voluptuous.humanize import humanize_error
|
||||||
|
@ -106,6 +106,23 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
AutomationActionType = Callable[[HomeAssistant, TemplateVarsType], Awaitable[None]]
|
AutomationActionType = Callable[[HomeAssistant, TemplateVarsType], Awaitable[None]]
|
||||||
|
|
||||||
|
|
||||||
|
class AutomationTriggerData(TypedDict):
|
||||||
|
"""Automation trigger data."""
|
||||||
|
|
||||||
|
id: str
|
||||||
|
idx: str
|
||||||
|
|
||||||
|
|
||||||
|
class AutomationTriggerInfo(TypedDict):
|
||||||
|
"""Information about automation trigger."""
|
||||||
|
|
||||||
|
domain: str
|
||||||
|
name: str
|
||||||
|
home_assistant_start: bool
|
||||||
|
variables: TemplateVarsType
|
||||||
|
trigger_data: AutomationTriggerData
|
||||||
|
|
||||||
|
|
||||||
@bind_hass
|
@bind_hass
|
||||||
def is_on(hass, entity_id):
|
def is_on(hass, entity_id):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.homeassistant.triggers import (
|
from homeassistant.components.homeassistant.triggers import (
|
||||||
numeric_state as numeric_state_trigger,
|
numeric_state as numeric_state_trigger,
|
||||||
|
@ -112,7 +115,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
trigger_type = config[CONF_TYPE]
|
trigger_type = config[CONF_TYPE]
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.homeassistant.triggers import (
|
from homeassistant.components.homeassistant.triggers import (
|
||||||
numeric_state as numeric_state_trigger,
|
numeric_state as numeric_state_trigger,
|
||||||
|
@ -147,7 +150,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
if config[CONF_TYPE] in STATE_TRIGGER_TYPES:
|
if config[CONF_TYPE] in STATE_TRIGGER_TYPES:
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation.const import (
|
from homeassistant.components.device_automation.const import (
|
||||||
CONF_IS_OFF,
|
CONF_IS_OFF,
|
||||||
CONF_IS_ON,
|
CONF_IS_ON,
|
||||||
|
@ -146,7 +149,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_type = config[CONF_TYPE]
|
trigger_type = config[CONF_TYPE]
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any, Final
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.zone import DOMAIN as DOMAIN_ZONE, trigger as zone
|
from homeassistant.components.zone import DOMAIN as DOMAIN_ZONE, trigger as zone
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
@ -72,7 +75,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
if config[CONF_TYPE] == "enters":
|
if config[CONF_TYPE] == "enters":
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import toggle_entity
|
from homeassistant.components.device_automation import toggle_entity
|
||||||
from homeassistant.const import CONF_DOMAIN
|
from homeassistant.const import CONF_DOMAIN
|
||||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
||||||
|
@ -36,7 +39,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
return await toggle_entity.async_attach_trigger(
|
return await toggle_entity.async_attach_trigger(
|
||||||
|
|
|
@ -37,7 +37,7 @@ def source_match(state, source):
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(hass, config, action, automation_info):
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
source = config.get(CONF_SOURCE).lower()
|
source = config.get(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)
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_EVENT_DATA, CONF_PLATFORM
|
from homeassistant.const import CONF_EVENT_DATA, CONF_PLATFORM
|
||||||
from homeassistant.core import CALLBACK_TYPE, Event, HassJob, HomeAssistant, callback
|
from homeassistant.core import CALLBACK_TYPE, Event, HassJob, HomeAssistant, callback
|
||||||
from homeassistant.helpers import config_validation as cv, template
|
from homeassistant.helpers import config_validation as cv, template
|
||||||
|
@ -35,15 +38,13 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict[str, Any],
|
automation_info: AutomationTriggerInfo,
|
||||||
*,
|
*,
|
||||||
platform_type: str = "event",
|
platform_type: str = "event",
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for events based on configuration."""
|
"""Listen for events based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
variables = None
|
variables = automation_info["variables"]
|
||||||
if automation_info:
|
|
||||||
variables = automation_info.get("variables")
|
|
||||||
|
|
||||||
template.attach(hass, config[CONF_EVENT_TYPE])
|
template.attach(hass, config[CONF_EVENT_TYPE])
|
||||||
event_types = template.render_complex(
|
event_types = template.render_complex(
|
||||||
|
|
|
@ -20,7 +20,7 @@ TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(hass, config, action, automation_info):
|
||||||
"""Listen for events based on configuration."""
|
"""Listen for events based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
event = config.get(CONF_EVENT)
|
event = config.get(CONF_EVENT)
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
||||||
|
|
|
@ -78,10 +78,8 @@ async def async_attach_trigger(
|
||||||
attribute = config.get(CONF_ATTRIBUTE)
|
attribute = config.get(CONF_ATTRIBUTE)
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
_variables: dict = {}
|
_variables = automation_info["variables"] or {}
|
||||||
if automation_info:
|
|
||||||
_variables = automation_info.get("variables") or {}
|
|
||||||
|
|
||||||
if value_template is not None:
|
if value_template is not None:
|
||||||
value_template.hass = hass
|
value_template.hass = hass
|
||||||
|
|
|
@ -87,10 +87,8 @@ async def async_attach_trigger(
|
||||||
attribute = config.get(CONF_ATTRIBUTE)
|
attribute = config.get(CONF_ATTRIBUTE)
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
_variables: dict = {}
|
_variables = automation_info["variables"] or {}
|
||||||
if automation_info:
|
|
||||||
_variables = automation_info.get("variables") or {}
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def state_automation_listener(event: Event):
|
def state_automation_listener(event: Event):
|
||||||
|
|
|
@ -39,7 +39,7 @@ TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(hass, config, action, automation_info):
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
entities = {}
|
entities = {}
|
||||||
removes = []
|
removes = []
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
|
@ -57,7 +57,7 @@ TRIGGER_SCHEMA = vol.All(
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(hass, config, action, automation_info):
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
hours = config.get(CONF_HOURS)
|
hours = config.get(CONF_HOURS)
|
||||||
minutes = config.get(CONF_MINUTES)
|
minutes = config.get(CONF_MINUTES)
|
||||||
seconds = config.get(CONF_SECONDS)
|
seconds = config.get(CONF_SECONDS)
|
||||||
|
|
|
@ -9,7 +9,10 @@ from aiohomekit.model.services import ServicesTypes
|
||||||
from aiohomekit.utils import clamp_enum_to_char
|
from aiohomekit.utils import clamp_enum_to_char
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.const import CONF_DEVICE_ID, CONF_DOMAIN, CONF_PLATFORM, CONF_TYPE
|
from homeassistant.const import CONF_DEVICE_ID, CONF_DOMAIN, CONF_PLATFORM, CONF_TYPE
|
||||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
|
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
|
||||||
|
@ -75,12 +78,10 @@ class TriggerSource:
|
||||||
self,
|
self,
|
||||||
config: TRIGGER_SCHEMA,
|
config: TRIGGER_SCHEMA,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
trigger_data = (
|
trigger_data = automation_info["trigger_data"]
|
||||||
automation_info.get("trigger_data", {}) if automation_info else {}
|
|
||||||
)
|
|
||||||
|
|
||||||
def event_handler(char):
|
def event_handler(char):
|
||||||
if config[CONF_SUBTYPE] != HK_TO_HA_INPUT_EVENT_VALUES[char["value"]]:
|
if config[CONF_SUBTYPE] != HK_TO_HA_INPUT_EVENT_VALUES[char["value"]]:
|
||||||
|
@ -260,7 +261,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
device_id = config[CONF_DEVICE_ID]
|
device_id = config[CONF_DEVICE_ID]
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import (
|
from homeassistant.components.device_automation import (
|
||||||
DEVICE_TRIGGER_BASE_SCHEMA,
|
DEVICE_TRIGGER_BASE_SCHEMA,
|
||||||
toggle_entity,
|
toggle_entity,
|
||||||
|
@ -80,7 +83,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
trigger_type = config[CONF_TYPE]
|
trigger_type = config[CONF_TYPE]
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_ENTITY_ID,
|
ATTR_ENTITY_ID,
|
||||||
|
@ -69,9 +72,9 @@ def _attach_trigger(
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
event_type,
|
event_type,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
):
|
):
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
@ -90,7 +93,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
if config[CONF_TYPE] == "turn_on":
|
if config[CONF_TYPE] == "turn_on":
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import toggle_entity
|
from homeassistant.components.device_automation import toggle_entity
|
||||||
from homeassistant.const import CONF_DOMAIN
|
from homeassistant.const import CONF_DOMAIN
|
||||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
||||||
|
@ -22,7 +25,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
return await toggle_entity.async_attach_trigger(
|
return await toggle_entity.async_attach_trigger(
|
||||||
|
|
|
@ -31,7 +31,7 @@ TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(hass, config, action, automation_info):
|
||||||
"""Listen for events based on configuration."""
|
"""Listen for events based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
number = config.get(CONF_NUMBER)
|
number = config.get(CONF_NUMBER)
|
||||||
held_more_than = config.get(CONF_HELD_MORE_THAN)
|
held_more_than = config.get(CONF_HELD_MORE_THAN)
|
||||||
held_less_than = config.get(CONF_HELD_LESS_THAN)
|
held_less_than = config.get(CONF_HELD_LESS_THAN)
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.homeassistant.triggers import state as state_trigger
|
from homeassistant.components.homeassistant.triggers import state as state_trigger
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
@ -80,7 +83,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
if config[CONF_TYPE] == "jammed":
|
if config[CONF_TYPE] == "jammed":
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.device_automation.exceptions import (
|
from homeassistant.components.device_automation.exceptions import (
|
||||||
InvalidDeviceAutomationConfig,
|
InvalidDeviceAutomationConfig,
|
||||||
|
@ -258,7 +261,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
device = get_button_device_by_dr_id(hass, config[CONF_DEVICE_ID])
|
device = get_button_device_by_dr_id(hass, config[CONF_DEVICE_ID])
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.homeassistant.triggers import state as state_trigger
|
from homeassistant.components.homeassistant.triggers import state as state_trigger
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
@ -80,7 +83,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
if config[CONF_TYPE] == "turned_on":
|
if config[CONF_TYPE] == "turned_on":
|
||||||
|
|
|
@ -7,7 +7,10 @@ from typing import Any, Callable
|
||||||
import attr
|
import attr
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_DEVICE,
|
CONF_DEVICE,
|
||||||
|
@ -86,7 +89,7 @@ class TriggerInstance:
|
||||||
"""Attached trigger settings."""
|
"""Attached trigger settings."""
|
||||||
|
|
||||||
action: AutomationActionType = attr.ib()
|
action: AutomationActionType = attr.ib()
|
||||||
automation_info: dict = attr.ib()
|
automation_info: AutomationTriggerInfo = attr.ib()
|
||||||
trigger: Trigger = attr.ib()
|
trigger: Trigger = attr.ib()
|
||||||
remove: CALLBACK_TYPE | None = attr.ib(default=None)
|
remove: CALLBACK_TYPE | None = attr.ib(default=None)
|
||||||
|
|
||||||
|
@ -316,7 +319,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
if DEVICE_TRIGGERS not in hass.data:
|
if DEVICE_TRIGGERS not in hass.data:
|
||||||
|
|
|
@ -37,7 +37,7 @@ _LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(hass, config, action, automation_info):
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
topic = config[CONF_TOPIC]
|
topic = config[CONF_TOPIC]
|
||||||
wanted_payload = config.get(CONF_PAYLOAD)
|
wanted_payload = config.get(CONF_PAYLOAD)
|
||||||
value_template = config.get(CONF_VALUE_TEMPLATE)
|
value_template = config.get(CONF_VALUE_TEMPLATE)
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.device_automation.exceptions import (
|
from homeassistant.components.device_automation.exceptions import (
|
||||||
InvalidDeviceAutomationConfig,
|
InvalidDeviceAutomationConfig,
|
||||||
|
@ -87,7 +90,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
event_config = event_trigger.TRIGGER_SCHEMA(
|
event_config = event_trigger.TRIGGER_SCHEMA(
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.device_automation.exceptions import (
|
from homeassistant.components.device_automation.exceptions import (
|
||||||
InvalidDeviceAutomationConfig,
|
InvalidDeviceAutomationConfig,
|
||||||
|
@ -128,7 +131,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
device_registry = await hass.helpers.device_registry.async_get_registry()
|
device_registry = await hass.helpers.device_registry.async_get_registry()
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.const import CONF_DEVICE_ID, CONF_DOMAIN, CONF_PLATFORM, CONF_TYPE
|
from homeassistant.const import CONF_DEVICE_ID, CONF_DOMAIN, CONF_PLATFORM, CONF_TYPE
|
||||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
||||||
|
@ -46,10 +49,10 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE | None:
|
) -> CALLBACK_TYPE | None:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
registry: DeviceRegistry = await async_get_registry(hass)
|
registry: DeviceRegistry = await async_get_registry(hass)
|
||||||
if config[CONF_TYPE] == TRIGGER_TYPE_TURN_ON:
|
if config[CONF_TYPE] == TRIGGER_TYPE_TURN_ON:
|
||||||
variables = {
|
variables = {
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import toggle_entity
|
from homeassistant.components.device_automation import toggle_entity
|
||||||
from homeassistant.const import CONF_DOMAIN
|
from homeassistant.const import CONF_DOMAIN
|
||||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
||||||
|
@ -22,7 +25,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
return await toggle_entity.async_attach_trigger(
|
return await toggle_entity.async_attach_trigger(
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.homeassistant.triggers.state import (
|
from homeassistant.components.homeassistant.triggers.state import (
|
||||||
CONF_FOR,
|
CONF_FOR,
|
||||||
|
@ -64,7 +67,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
state_config = {
|
state_config = {
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any, Final
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.device_automation.exceptions import (
|
from homeassistant.components.device_automation.exceptions import (
|
||||||
InvalidDeviceAutomationConfig,
|
InvalidDeviceAutomationConfig,
|
||||||
|
@ -111,7 +114,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
event_config = {
|
event_config = {
|
||||||
|
|
|
@ -26,7 +26,7 @@ TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(hass, config, action, automation_info):
|
||||||
"""Listen for events based on configuration."""
|
"""Listen for events based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
event = config.get(CONF_EVENT)
|
event = config.get(CONF_EVENT)
|
||||||
offset = config.get(CONF_OFFSET)
|
offset = config.get(CONF_OFFSET)
|
||||||
description = event
|
description = event
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import toggle_entity
|
from homeassistant.components.device_automation import toggle_entity
|
||||||
from homeassistant.const import CONF_DOMAIN
|
from homeassistant.const import CONF_DOMAIN
|
||||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
||||||
|
@ -22,7 +25,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
return await toggle_entity.async_attach_trigger(
|
return await toggle_entity.async_attach_trigger(
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
"""Support for tag triggers."""
|
"""Support for tag triggers."""
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_PLATFORM
|
from homeassistant.const import CONF_PLATFORM
|
||||||
from homeassistant.core import CALLBACK_TYPE, Event, HassJob, HomeAssistant
|
from homeassistant.core import CALLBACK_TYPE, Event, HassJob, HomeAssistant
|
||||||
from homeassistant.helpers import config_validation as cv
|
from homeassistant.helpers import config_validation as cv
|
||||||
|
@ -22,10 +25,10 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Listen for tag_scanned events based on configuration."""
|
"""Listen for tag_scanned events based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
tag_ids = set(config[TAG_ID])
|
tag_ids = set(config[TAG_ID])
|
||||||
device_ids = set(config[DEVICE_ID]) if DEVICE_ID in config else None
|
device_ids = set(config[DEVICE_ID]) if DEVICE_ID in config else None
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,10 @@ from hatasmota.models import DiscoveryHashType
|
||||||
from hatasmota.trigger import TasmotaTrigger, TasmotaTriggerConfig
|
from hatasmota.trigger import TasmotaTrigger, TasmotaTriggerConfig
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.homeassistant.triggers import event as event_trigger
|
from homeassistant.components.homeassistant.triggers import event as event_trigger
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
@ -49,7 +52,7 @@ class TriggerInstance:
|
||||||
"""Attached trigger settings."""
|
"""Attached trigger settings."""
|
||||||
|
|
||||||
action: AutomationActionType = attr.ib()
|
action: AutomationActionType = attr.ib()
|
||||||
automation_info: dict = attr.ib()
|
automation_info: AutomationTriggerInfo = attr.ib()
|
||||||
trigger: Trigger = attr.ib()
|
trigger: Trigger = attr.ib()
|
||||||
remove: CALLBACK_TYPE | None = attr.ib(default=None)
|
remove: CALLBACK_TYPE | None = attr.ib(default=None)
|
||||||
|
|
||||||
|
@ -93,7 +96,7 @@ class Trigger:
|
||||||
trigger_instances: list[TriggerInstance] = attr.ib(factory=list)
|
trigger_instances: list[TriggerInstance] = attr.ib(factory=list)
|
||||||
|
|
||||||
async def add_trigger(
|
async def add_trigger(
|
||||||
self, action: AutomationActionType, automation_info: dict
|
self, action: AutomationActionType, automation_info: AutomationTriggerInfo
|
||||||
) -> Callable[[], None]:
|
) -> Callable[[], None]:
|
||||||
"""Add Tasmota trigger."""
|
"""Add Tasmota trigger."""
|
||||||
instance = TriggerInstance(action, automation_info, self)
|
instance = TriggerInstance(action, automation_info, self)
|
||||||
|
@ -289,7 +292,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: Callable,
|
action: Callable,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a device trigger."""
|
"""Attach a device trigger."""
|
||||||
if DEVICE_TRIGGERS not in hass.data:
|
if DEVICE_TRIGGERS not in hass.data:
|
||||||
|
|
|
@ -31,7 +31,7 @@ async def async_attach_trigger(
|
||||||
hass, config, action, automation_info, *, platform_type="template"
|
hass, config, action, automation_info, *, platform_type="template"
|
||||||
):
|
):
|
||||||
"""Listen for state changes based on configuration."""
|
"""Listen for state changes based on configuration."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
value_template = config.get(CONF_VALUE_TEMPLATE)
|
value_template = config.get(CONF_VALUE_TEMPLATE)
|
||||||
value_template.hass = hass
|
value_template.hass = hass
|
||||||
time_delta = config.get(CONF_FOR)
|
time_delta = config.get(CONF_FOR)
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.homeassistant.triggers import state as state_trigger
|
from homeassistant.components.homeassistant.triggers import state as state_trigger
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
@ -74,7 +77,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
if config[CONF_TYPE] == "cleaning":
|
if config[CONF_TYPE] == "cleaning":
|
||||||
|
|
|
@ -37,7 +37,7 @@ async def _handle_webhook(job, trigger_data, hass, webhook_id, request):
|
||||||
|
|
||||||
async def async_attach_trigger(hass, config, action, automation_info):
|
async def async_attach_trigger(hass, config, action, automation_info):
|
||||||
"""Trigger based on incoming webhooks."""
|
"""Trigger based on incoming webhooks."""
|
||||||
trigger_data = automation_info.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
webhook_id = config.get(CONF_WEBHOOK_ID)
|
webhook_id = config.get(CONF_WEBHOOK_ID)
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
hass.components.webhook.async_register(
|
hass.components.webhook.async_register(
|
||||||
|
|
|
@ -37,7 +37,7 @@ async def async_attach_trigger(
|
||||||
hass, config, action, automation_info, *, platform_type: str = "zone"
|
hass, config, action, automation_info, *, 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.get("trigger_data", {}) if automation_info else {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
entity_id = config.get(CONF_ENTITY_ID)
|
entity_id = config.get(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)
|
||||||
|
|
|
@ -6,7 +6,10 @@ from typing import Any
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
from zwave_js_server.const import CommandClass
|
from zwave_js_server.const import CommandClass
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.device_automation.exceptions import (
|
from homeassistant.components.device_automation.exceptions import (
|
||||||
InvalidDeviceAutomationConfig,
|
InvalidDeviceAutomationConfig,
|
||||||
|
@ -358,7 +361,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
trigger_type = config[CONF_TYPE]
|
trigger_type = config[CONF_TYPE]
|
||||||
|
|
|
@ -2,10 +2,14 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import Any, Callable, cast
|
from typing import cast
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.const import CONF_PLATFORM
|
from homeassistant.const import CONF_PLATFORM
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
from .triggers import value_updated
|
from .triggers import value_updated
|
||||||
|
@ -40,14 +44,14 @@ async def async_validate_trigger_config(
|
||||||
async def async_attach_trigger(
|
async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: Callable,
|
action: AutomationActionType,
|
||||||
automation_info: dict[str, Any],
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> Callable:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach trigger of specified platform."""
|
"""Attach trigger of specified platform."""
|
||||||
platform = _get_trigger_platform(config)
|
platform = _get_trigger_platform(config)
|
||||||
assert hasattr(platform, "async_attach_trigger")
|
assert hasattr(platform, "async_attach_trigger")
|
||||||
return cast(
|
return cast(
|
||||||
Callable,
|
CALLBACK_TYPE,
|
||||||
await getattr(platform, "async_attach_trigger")(
|
await getattr(platform, "async_attach_trigger")(
|
||||||
hass, config, action, automation_info
|
hass, config, action, automation_info
|
||||||
),
|
),
|
||||||
|
|
|
@ -3,7 +3,6 @@ from __future__ import annotations
|
||||||
|
|
||||||
import functools
|
import functools
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, Callable
|
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
from zwave_js_server.const import CommandClass
|
from zwave_js_server.const import CommandClass
|
||||||
|
@ -11,6 +10,10 @@ from zwave_js_server.event import Event
|
||||||
from zwave_js_server.model.node import Node
|
from zwave_js_server.model.node import Node
|
||||||
from zwave_js_server.model.value import Value, get_value_id
|
from zwave_js_server.model.value import Value, get_value_id
|
||||||
|
|
||||||
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.zwave_js.const import (
|
from homeassistant.components.zwave_js.const import (
|
||||||
ATTR_COMMAND_CLASS,
|
ATTR_COMMAND_CLASS,
|
||||||
ATTR_COMMAND_CLASS_NAME,
|
ATTR_COMMAND_CLASS_NAME,
|
||||||
|
@ -79,8 +82,8 @@ TRIGGER_SCHEMA = vol.All(
|
||||||
async def async_attach_trigger(
|
async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: Callable,
|
action: AutomationActionType,
|
||||||
automation_info: dict[str, Any],
|
automation_info: AutomationTriggerInfo,
|
||||||
*,
|
*,
|
||||||
platform_type: str = PLATFORM_TYPE,
|
platform_type: str = PLATFORM_TYPE,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
|
@ -110,9 +113,7 @@ async def async_attach_trigger(
|
||||||
unsubs = []
|
unsubs = []
|
||||||
job = HassJob(action)
|
job = HassJob(action)
|
||||||
|
|
||||||
trigger_data: dict = {}
|
trigger_data = automation_info["trigger_data"]
|
||||||
if automation_info:
|
|
||||||
trigger_data = automation_info.get("trigger_data", {})
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_on_value_updated(
|
def async_on_value_updated(
|
||||||
|
|
|
@ -3,7 +3,6 @@ from __future__ import annotations
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
from types import MappingProxyType
|
|
||||||
from typing import Any, Callable
|
from typing import Any, Callable
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
@ -11,7 +10,7 @@ import voluptuous as vol
|
||||||
from homeassistant.const import CONF_ID, CONF_PLATFORM
|
from homeassistant.const import CONF_ID, CONF_PLATFORM
|
||||||
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
|
from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType, TemplateVarsType
|
||||||
from homeassistant.loader import IntegrationNotFound, async_get_integration
|
from homeassistant.loader import IntegrationNotFound, async_get_integration
|
||||||
|
|
||||||
_PLATFORM_ALIASES = {
|
_PLATFORM_ALIASES = {
|
||||||
|
@ -62,15 +61,9 @@ async def async_initialize_triggers(
|
||||||
name: str,
|
name: str,
|
||||||
log_cb: Callable,
|
log_cb: Callable,
|
||||||
home_assistant_start: bool = False,
|
home_assistant_start: bool = False,
|
||||||
variables: dict[str, Any] | MappingProxyType | None = None,
|
variables: TemplateVarsType = None,
|
||||||
) -> CALLBACK_TYPE | None:
|
) -> CALLBACK_TYPE | None:
|
||||||
"""Initialize triggers."""
|
"""Initialize triggers."""
|
||||||
info = {
|
|
||||||
"domain": domain,
|
|
||||||
"name": name,
|
|
||||||
"home_assistant_start": home_assistant_start,
|
|
||||||
"variables": variables,
|
|
||||||
}
|
|
||||||
|
|
||||||
triggers = []
|
triggers = []
|
||||||
for idx, conf in enumerate(trigger_config):
|
for idx, conf in enumerate(trigger_config):
|
||||||
|
@ -78,7 +71,13 @@ async def async_initialize_triggers(
|
||||||
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 = {"id": trigger_id, "idx": trigger_idx}
|
||||||
info = {**info, "trigger_data": trigger_data}
|
info = {
|
||||||
|
"domain": domain,
|
||||||
|
"name": name,
|
||||||
|
"home_assistant_start": home_assistant_start,
|
||||||
|
"variables": variables,
|
||||||
|
"trigger_data": trigger_data,
|
||||||
|
}
|
||||||
triggers.append(platform.async_attach_trigger(hass, conf, action, info))
|
triggers.append(platform.async_attach_trigger(hass, conf, action, info))
|
||||||
|
|
||||||
attach_results = await asyncio.gather(*triggers, return_exceptions=True)
|
attach_results = await asyncio.gather(*triggers, return_exceptions=True)
|
||||||
|
|
|
@ -5,7 +5,10 @@ from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.automation import AutomationActionType
|
from homeassistant.components.automation import (
|
||||||
|
AutomationActionType,
|
||||||
|
AutomationTriggerInfo,
|
||||||
|
)
|
||||||
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
|
||||||
from homeassistant.components.homeassistant.triggers import state
|
from homeassistant.components.homeassistant.triggers import state
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
@ -71,7 +74,7 @@ async def async_attach_trigger(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: ConfigType,
|
config: ConfigType,
|
||||||
action: AutomationActionType,
|
action: AutomationActionType,
|
||||||
automation_info: dict,
|
automation_info: AutomationTriggerInfo,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Attach a trigger."""
|
"""Attach a trigger."""
|
||||||
# TODO Implement your own logic to attach triggers.
|
# TODO Implement your own logic to attach triggers.
|
||||||
|
|
|
@ -4,9 +4,9 @@ import json
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
import homeassistant.components.automation as automation
|
import homeassistant.components.automation as automation
|
||||||
from homeassistant.components.mqtt import DOMAIN, debug_info
|
from homeassistant.components.mqtt import _LOGGER, DOMAIN, debug_info
|
||||||
from homeassistant.components.mqtt.device_trigger import async_attach_trigger
|
|
||||||
from homeassistant.helpers import device_registry as dr
|
from homeassistant.helpers import device_registry as dr
|
||||||
|
from homeassistant.helpers.trigger import async_initialize_triggers
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from tests.common import (
|
from tests.common import (
|
||||||
|
@ -697,18 +697,22 @@ async def test_attach_remove(hass, device_reg, mqtt_mock):
|
||||||
def callback(trigger):
|
def callback(trigger):
|
||||||
calls.append(trigger["trigger"]["payload"])
|
calls.append(trigger["trigger"]["payload"])
|
||||||
|
|
||||||
remove = await async_attach_trigger(
|
remove = await async_initialize_triggers(
|
||||||
hass,
|
hass,
|
||||||
{
|
[
|
||||||
"platform": "device",
|
{
|
||||||
"domain": DOMAIN,
|
"platform": "device",
|
||||||
"device_id": device_entry.id,
|
"domain": DOMAIN,
|
||||||
"discovery_id": "bla1",
|
"device_id": device_entry.id,
|
||||||
"type": "button_short_press",
|
"discovery_id": "bla1",
|
||||||
"subtype": "button_1",
|
"type": "button_short_press",
|
||||||
},
|
"subtype": "button_1",
|
||||||
|
},
|
||||||
|
],
|
||||||
callback,
|
callback,
|
||||||
None,
|
DOMAIN,
|
||||||
|
"mock-name",
|
||||||
|
_LOGGER.log,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Fake short press.
|
# Fake short press.
|
||||||
|
@ -751,18 +755,22 @@ async def test_attach_remove_late(hass, device_reg, mqtt_mock):
|
||||||
def callback(trigger):
|
def callback(trigger):
|
||||||
calls.append(trigger["trigger"]["payload"])
|
calls.append(trigger["trigger"]["payload"])
|
||||||
|
|
||||||
remove = await async_attach_trigger(
|
remove = await async_initialize_triggers(
|
||||||
hass,
|
hass,
|
||||||
{
|
[
|
||||||
"platform": "device",
|
{
|
||||||
"domain": DOMAIN,
|
"platform": "device",
|
||||||
"device_id": device_entry.id,
|
"domain": DOMAIN,
|
||||||
"discovery_id": "bla1",
|
"device_id": device_entry.id,
|
||||||
"type": "button_short_press",
|
"discovery_id": "bla1",
|
||||||
"subtype": "button_1",
|
"type": "button_short_press",
|
||||||
},
|
"subtype": "button_1",
|
||||||
|
},
|
||||||
|
],
|
||||||
callback,
|
callback,
|
||||||
None,
|
DOMAIN,
|
||||||
|
"mock-name",
|
||||||
|
_LOGGER.log,
|
||||||
)
|
)
|
||||||
|
|
||||||
async_fire_mqtt_message(hass, "homeassistant/device_automation/bla1/config", data1)
|
async_fire_mqtt_message(hass, "homeassistant/device_automation/bla1/config", data1)
|
||||||
|
@ -808,18 +816,22 @@ async def test_attach_remove_late2(hass, device_reg, mqtt_mock):
|
||||||
def callback(trigger):
|
def callback(trigger):
|
||||||
calls.append(trigger["trigger"]["payload"])
|
calls.append(trigger["trigger"]["payload"])
|
||||||
|
|
||||||
remove = await async_attach_trigger(
|
remove = await async_initialize_triggers(
|
||||||
hass,
|
hass,
|
||||||
{
|
[
|
||||||
"platform": "device",
|
{
|
||||||
"domain": DOMAIN,
|
"platform": "device",
|
||||||
"device_id": device_entry.id,
|
"domain": DOMAIN,
|
||||||
"discovery_id": "bla1",
|
"device_id": device_entry.id,
|
||||||
"type": "button_short_press",
|
"discovery_id": "bla1",
|
||||||
"subtype": "button_1",
|
"type": "button_short_press",
|
||||||
},
|
"subtype": "button_1",
|
||||||
|
},
|
||||||
|
],
|
||||||
callback,
|
callback,
|
||||||
None,
|
DOMAIN,
|
||||||
|
"mock-name",
|
||||||
|
_LOGGER.log,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Remove the trigger
|
# Remove the trigger
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
"""The tests for MQTT device triggers."""
|
"""The tests for Tasmota device triggers."""
|
||||||
import copy
|
import copy
|
||||||
import json
|
import json
|
||||||
from unittest.mock import patch
|
from unittest.mock import Mock, patch
|
||||||
|
|
||||||
from hatasmota.switch import TasmotaSwitchTriggerConfig
|
from hatasmota.switch import TasmotaSwitchTriggerConfig
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
import homeassistant.components.automation as automation
|
import homeassistant.components.automation as automation
|
||||||
|
from homeassistant.components.tasmota import _LOGGER
|
||||||
from homeassistant.components.tasmota.const import DEFAULT_PREFIX, DOMAIN
|
from homeassistant.components.tasmota.const import DEFAULT_PREFIX, DOMAIN
|
||||||
from homeassistant.components.tasmota.device_trigger import async_attach_trigger
|
|
||||||
from homeassistant.helpers import device_registry as dr
|
from homeassistant.helpers import device_registry as dr
|
||||||
|
from homeassistant.helpers.trigger import async_initialize_triggers
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from .test_common import DEFAULT_CONFIG
|
from .test_common import DEFAULT_CONFIG
|
||||||
|
@ -812,18 +813,22 @@ async def test_attach_remove(hass, device_reg, mqtt_mock, setup_tasmota):
|
||||||
def callback(trigger, context):
|
def callback(trigger, context):
|
||||||
calls.append(trigger["trigger"]["description"])
|
calls.append(trigger["trigger"]["description"])
|
||||||
|
|
||||||
remove = await async_attach_trigger(
|
remove = await async_initialize_triggers(
|
||||||
hass,
|
hass,
|
||||||
{
|
[
|
||||||
"platform": "device",
|
{
|
||||||
"domain": DOMAIN,
|
"platform": "device",
|
||||||
"device_id": device_entry.id,
|
"domain": DOMAIN,
|
||||||
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
"device_id": device_entry.id,
|
||||||
"type": "button_short_press",
|
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
||||||
"subtype": "switch_1",
|
"type": "button_short_press",
|
||||||
},
|
"subtype": "switch_1",
|
||||||
|
},
|
||||||
|
],
|
||||||
callback,
|
callback,
|
||||||
None,
|
DOMAIN,
|
||||||
|
"mock-name",
|
||||||
|
_LOGGER.log,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Fake short press.
|
# Fake short press.
|
||||||
|
@ -869,18 +874,22 @@ async def test_attach_remove_late(hass, device_reg, mqtt_mock, setup_tasmota):
|
||||||
def callback(trigger, context):
|
def callback(trigger, context):
|
||||||
calls.append(trigger["trigger"]["description"])
|
calls.append(trigger["trigger"]["description"])
|
||||||
|
|
||||||
remove = await async_attach_trigger(
|
remove = await async_initialize_triggers(
|
||||||
hass,
|
hass,
|
||||||
{
|
[
|
||||||
"platform": "device",
|
{
|
||||||
"domain": DOMAIN,
|
"platform": "device",
|
||||||
"device_id": device_entry.id,
|
"domain": DOMAIN,
|
||||||
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
"device_id": device_entry.id,
|
||||||
"type": "button_short_press",
|
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
||||||
"subtype": "switch_1",
|
"type": "button_short_press",
|
||||||
},
|
"subtype": "switch_1",
|
||||||
|
},
|
||||||
|
],
|
||||||
callback,
|
callback,
|
||||||
None,
|
DOMAIN,
|
||||||
|
"mock-name",
|
||||||
|
_LOGGER.log,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Fake short press.
|
# Fake short press.
|
||||||
|
@ -936,18 +945,22 @@ async def test_attach_remove_late2(hass, device_reg, mqtt_mock, setup_tasmota):
|
||||||
def callback(trigger, context):
|
def callback(trigger, context):
|
||||||
calls.append(trigger["trigger"]["description"])
|
calls.append(trigger["trigger"]["description"])
|
||||||
|
|
||||||
remove = await async_attach_trigger(
|
remove = await async_initialize_triggers(
|
||||||
hass,
|
hass,
|
||||||
{
|
[
|
||||||
"platform": "device",
|
{
|
||||||
"domain": DOMAIN,
|
"platform": "device",
|
||||||
"device_id": device_entry.id,
|
"domain": DOMAIN,
|
||||||
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
"device_id": device_entry.id,
|
||||||
"type": "button_short_press",
|
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
||||||
"subtype": "switch_1",
|
"type": "button_short_press",
|
||||||
},
|
"subtype": "switch_1",
|
||||||
|
},
|
||||||
|
],
|
||||||
callback,
|
callback,
|
||||||
None,
|
DOMAIN,
|
||||||
|
"mock-name",
|
||||||
|
_LOGGER.log,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Remove the trigger
|
# Remove the trigger
|
||||||
|
@ -979,18 +992,22 @@ async def test_attach_remove_unknown1(hass, device_reg, mqtt_mock, setup_tasmota
|
||||||
set(), {(dr.CONNECTION_NETWORK_MAC, mac)}
|
set(), {(dr.CONNECTION_NETWORK_MAC, mac)}
|
||||||
)
|
)
|
||||||
|
|
||||||
remove = await async_attach_trigger(
|
remove = await async_initialize_triggers(
|
||||||
hass,
|
hass,
|
||||||
{
|
[
|
||||||
"platform": "device",
|
{
|
||||||
"domain": DOMAIN,
|
"platform": "device",
|
||||||
"device_id": device_entry.id,
|
"domain": DOMAIN,
|
||||||
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
"device_id": device_entry.id,
|
||||||
"type": "button_short_press",
|
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
||||||
"subtype": "switch_1",
|
"type": "button_short_press",
|
||||||
},
|
"subtype": "switch_1",
|
||||||
None,
|
},
|
||||||
None,
|
],
|
||||||
|
Mock(),
|
||||||
|
DOMAIN,
|
||||||
|
"mock-name",
|
||||||
|
_LOGGER.log,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Remove the trigger
|
# Remove the trigger
|
||||||
|
@ -1023,18 +1040,22 @@ async def test_attach_unknown_remove_device_from_registry(
|
||||||
set(), {(dr.CONNECTION_NETWORK_MAC, mac)}
|
set(), {(dr.CONNECTION_NETWORK_MAC, mac)}
|
||||||
)
|
)
|
||||||
|
|
||||||
await async_attach_trigger(
|
await async_initialize_triggers(
|
||||||
hass,
|
hass,
|
||||||
{
|
[
|
||||||
"platform": "device",
|
{
|
||||||
"domain": DOMAIN,
|
"platform": "device",
|
||||||
"device_id": device_entry.id,
|
"domain": DOMAIN,
|
||||||
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
"device_id": device_entry.id,
|
||||||
"type": "button_short_press",
|
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
||||||
"subtype": "switch_1",
|
"type": "button_short_press",
|
||||||
},
|
"subtype": "switch_1",
|
||||||
None,
|
},
|
||||||
None,
|
],
|
||||||
|
Mock(),
|
||||||
|
DOMAIN,
|
||||||
|
"mock-name",
|
||||||
|
_LOGGER.log,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Remove the device
|
# Remove the device
|
||||||
|
@ -1063,18 +1084,22 @@ async def test_attach_remove_config_entry(hass, device_reg, mqtt_mock, setup_tas
|
||||||
def callback(trigger, context):
|
def callback(trigger, context):
|
||||||
calls.append(trigger["trigger"]["description"])
|
calls.append(trigger["trigger"]["description"])
|
||||||
|
|
||||||
await async_attach_trigger(
|
await async_initialize_triggers(
|
||||||
hass,
|
hass,
|
||||||
{
|
[
|
||||||
"platform": "device",
|
{
|
||||||
"domain": DOMAIN,
|
"platform": "device",
|
||||||
"device_id": device_entry.id,
|
"domain": DOMAIN,
|
||||||
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
"device_id": device_entry.id,
|
||||||
"type": "button_short_press",
|
"discovery_id": "00000049A3BC_switch_1_TOGGLE",
|
||||||
"subtype": "switch_1",
|
"type": "button_short_press",
|
||||||
},
|
"subtype": "switch_1",
|
||||||
|
},
|
||||||
|
],
|
||||||
callback,
|
callback,
|
||||||
None,
|
DOMAIN,
|
||||||
|
"mock-name",
|
||||||
|
_LOGGER.log,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Fake short press.
|
# Fake short press.
|
||||||
|
|
Loading…
Add table
Reference in a new issue