示例#1
0
async def async_attach_trigger(
    hass: HomeAssistant,
    config: ConfigType,
    action: AutomationActionType,
    automation_info: dict,
) -> CALLBACK_TYPE:
    """Attach a trigger."""
    trigger_type = config[CONF_TYPE]

    if trigger_type == "hvac_mode_changed":
        state_config = {
            state_trigger.CONF_PLATFORM:
            "state",
            state_trigger.CONF_ENTITY_ID:
            config[CONF_ENTITY_ID],
            state_trigger.CONF_TO:
            config[state_trigger.CONF_TO],
            state_trigger.CONF_FROM: [
                mode for mode in const.HVAC_MODES
                if mode != config[state_trigger.CONF_TO]
            ],
        }
        if CONF_FOR in config:
            state_config[CONF_FOR] = config[CONF_FOR]
        state_config = state_trigger.TRIGGER_SCHEMA(state_config)
        return await state_trigger.async_attach_trigger(hass,
                                                        state_config,
                                                        action,
                                                        automation_info,
                                                        platform_type="device")

    numeric_state_config = {
        numeric_state_trigger.CONF_PLATFORM: "numeric_state",
        numeric_state_trigger.CONF_ENTITY_ID: config[CONF_ENTITY_ID],
    }

    if trigger_type == "current_temperature_changed":
        numeric_state_config[
            numeric_state_trigger.
            CONF_VALUE_TEMPLATE] = "{{ state.attributes.current_temperature }}"
    else:
        numeric_state_config[
            numeric_state_trigger.
            CONF_VALUE_TEMPLATE] = "{{ state.attributes.current_humidity }}"

    if CONF_ABOVE in config:
        numeric_state_config[CONF_ABOVE] = config[CONF_ABOVE]
    if CONF_BELOW in config:
        numeric_state_config[CONF_BELOW] = config[CONF_BELOW]
    if CONF_FOR in config:
        numeric_state_config[CONF_FOR] = config[CONF_FOR]

    numeric_state_config = numeric_state_trigger.TRIGGER_SCHEMA(
        numeric_state_config)
    return await numeric_state_trigger.async_attach_trigger(
        hass,
        numeric_state_config,
        action,
        automation_info,
        platform_type="device")
示例#2
0
async def async_attach_trigger(
    hass: HomeAssistant,
    config: ConfigType,
    action: AutomationActionType,
    automation_info: AutomationTriggerInfo,
) -> CALLBACK_TYPE:
    """Attach a trigger."""
    if config[CONF_TYPE] == "target_humidity_changed":
        numeric_state_config = {
            numeric_state_trigger.CONF_PLATFORM:
            "numeric_state",
            numeric_state_trigger.CONF_ENTITY_ID:
            config[CONF_ENTITY_ID],
            numeric_state_trigger.CONF_VALUE_TEMPLATE:
            "{{ state.attributes.humidity }}",
        }

        if CONF_ABOVE in config:
            numeric_state_config[CONF_ABOVE] = config[CONF_ABOVE]
        if CONF_BELOW in config:
            numeric_state_config[CONF_BELOW] = config[CONF_BELOW]
        if CONF_FOR in config:
            numeric_state_config[CONF_FOR] = config[CONF_FOR]

        numeric_state_config = numeric_state_trigger.TRIGGER_SCHEMA(
            numeric_state_config)
        return await numeric_state_trigger.async_attach_trigger(
            hass,
            numeric_state_config,
            action,
            automation_info,
            platform_type="device")

    return await toggle_entity.async_attach_trigger(hass, config, action,
                                                    automation_info)
示例#3
0
async def async_attach_trigger(
    hass: HomeAssistant,
    config: ConfigType,
    action: AutomationActionType,
    automation_info: dict,
) -> CALLBACK_TYPE:
    """Attach a trigger."""
    if config[CONF_TYPE] in STATE_TRIGGER_TYPES:
        if config[CONF_TYPE] == "opened":
            to_state = STATE_OPEN
        elif config[CONF_TYPE] == "closed":
            to_state = STATE_CLOSED
        elif config[CONF_TYPE] == "opening":
            to_state = STATE_OPENING
        elif config[CONF_TYPE] == "closing":
            to_state = STATE_CLOSING

        state_config = {
            CONF_PLATFORM: "state",
            CONF_ENTITY_ID: config[CONF_ENTITY_ID],
            state_trigger.CONF_TO: to_state,
        }
        if CONF_FOR in config:
            state_config[CONF_FOR] = config[CONF_FOR]
        state_config = state_trigger.TRIGGER_SCHEMA(state_config)
        return await state_trigger.async_attach_trigger(hass,
                                                        state_config,
                                                        action,
                                                        automation_info,
                                                        platform_type="device")

    if config[CONF_TYPE] == "position":
        position = "current_position"
    if config[CONF_TYPE] == "tilt_position":
        position = "current_tilt_position"
    min_pos = config.get(CONF_ABOVE, -1)
    max_pos = config.get(CONF_BELOW, 101)
    value_template = f"{{{{ state.attributes.{position} }}}}"

    numeric_state_config = {
        CONF_PLATFORM: "numeric_state",
        CONF_ENTITY_ID: config[CONF_ENTITY_ID],
        CONF_BELOW: max_pos,
        CONF_ABOVE: min_pos,
        CONF_VALUE_TEMPLATE: value_template,
    }
    numeric_state_config = numeric_state_trigger.TRIGGER_SCHEMA(
        numeric_state_config)
    return await numeric_state_trigger.async_attach_trigger(
        hass,
        numeric_state_config,
        action,
        automation_info,
        platform_type="device")
示例#4
0
async def async_attach_trigger(hass, config, action, automation_info):
    """Listen for state changes based on configuration."""
    numeric_state_config = {
        numeric_state_trigger.CONF_PLATFORM: "numeric_state",
        numeric_state_trigger.CONF_ENTITY_ID: config[CONF_ENTITY_ID],
    }
    if CONF_ABOVE in config:
        numeric_state_config[numeric_state_trigger.CONF_ABOVE] = config[CONF_ABOVE]
    if CONF_BELOW in config:
        numeric_state_config[numeric_state_trigger.CONF_BELOW] = config[CONF_BELOW]
    if CONF_FOR in config:
        numeric_state_config[CONF_FOR] = config[CONF_FOR]

    numeric_state_config = numeric_state_trigger.TRIGGER_SCHEMA(numeric_state_config)
    return await numeric_state_trigger.async_attach_trigger(
        hass, numeric_state_config, action, automation_info, platform_type="device"
    )
示例#5
0
def test_below_above():
    """Test above cannot be above below."""
    with pytest.raises(vol.Invalid):
        numeric_state_trigger.TRIGGER_SCHEMA(
            {"platform": "numeric_state", "above": 1200, "below": 1000}
        )
示例#6
0
        numeric_state_config[
            numeric_state_trigger.
            CONF_VALUE_TEMPLATE] = "{{ state.attributes.current_temperature }}"
    else:
        numeric_state_config[
            numeric_state_trigger.
            CONF_VALUE_TEMPLATE] = "{{ state.attributes.current_humidity }}"

    if CONF_ABOVE in config:
        numeric_state_config[CONF_ABOVE] = config[CONF_ABOVE]
    if CONF_BELOW in config:
        numeric_state_config[CONF_BELOW] = config[CONF_BELOW]
    if CONF_FOR in config:
        numeric_state_config[CONF_FOR] = config[CONF_FOR]

    numeric_state_config = numeric_state_trigger.TRIGGER_SCHEMA(
        numeric_state_config)
    return await numeric_state_trigger.async_attach_trigger(
        hass,
        numeric_state_config,
        action,
        automation_info,
        platform_type="device")


async def async_get_trigger_capabilities(
        hass: HomeAssistant, config: ConfigType) -> dict[str, vol.Schema]:
    """List trigger capabilities."""
    trigger_type = config[CONF_TYPE]

    if trigger_type == "hvac_action_changed":
        return {}