1 """Support for repeating alerts when conditions are met."""
3 from __future__
import annotations
5 import voluptuous
as vol
35 from .entity
import AlertEntity
37 ALERT_SCHEMA = vol.Schema(
39 vol.Required(CONF_NAME): cv.string,
40 vol.Required(CONF_ENTITY_ID): cv.entity_id,
41 vol.Optional(CONF_STATE, default=STATE_ON): cv.string,
42 vol.Required(CONF_REPEAT): vol.All(
46 [vol.Range(min=0.016)],
48 vol.Optional(CONF_CAN_ACK, default=DEFAULT_CAN_ACK): cv.boolean,
49 vol.Optional(CONF_SKIP_FIRST, default=DEFAULT_SKIP_FIRST): cv.boolean,
50 vol.Optional(CONF_ALERT_MESSAGE): cv.template,
51 vol.Optional(CONF_DONE_MESSAGE): cv.template,
52 vol.Optional(CONF_TITLE): cv.template,
53 vol.Optional(CONF_DATA): dict,
54 vol.Optional(CONF_NOTIFIERS, default=list): vol.All(
55 cv.ensure_list, [cv.string]
60 CONFIG_SCHEMA = vol.Schema(
61 {DOMAIN: cv.schema_with_slug_keys(ALERT_SCHEMA)}, extra=vol.ALLOW_EXTRA
65 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
66 """Set up the Alert component."""
67 component = EntityComponent[AlertEntity](LOGGER, DOMAIN, hass)
69 entities: list[AlertEntity] = []
71 for object_id, cfg
in config[DOMAIN].items():
76 watched_entity_id = cfg[CONF_ENTITY_ID]
77 alert_state = cfg[CONF_STATE]
78 repeat = cfg[CONF_REPEAT]
79 skip_first = cfg[CONF_SKIP_FIRST]
80 message_template = cfg.get(CONF_ALERT_MESSAGE)
81 done_message_template = cfg.get(CONF_DONE_MESSAGE)
82 notifiers = cfg[CONF_NOTIFIERS]
83 can_ack = cfg[CONF_CAN_ACK]
84 title_template = cfg.get(CONF_TITLE)
85 data = cfg.get(CONF_DATA)
97 done_message_template,
108 component.async_register_entity_service(SERVICE_TURN_OFF,
None,
"async_turn_off")
109 component.async_register_entity_service(SERVICE_TURN_ON,
None,
"async_turn_on")
110 component.async_register_entity_service(SERVICE_TOGGLE,
None,
"async_toggle")
112 await component.async_add_entities(entities)
bool async_setup(HomeAssistant hass, ConfigType config)