mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-06-06 04:48:27 +02:00
[voice_assistant] Timers (#6821)
Co-authored-by: Keith Burzinski <kbx81x@gmail.com>
This commit is contained in:
@@ -44,6 +44,12 @@ CONF_VOLUME_MULTIPLIER = "volume_multiplier"
|
||||
|
||||
CONF_WAKE_WORD = "wake_word"
|
||||
|
||||
CONF_ON_TIMER_STARTED = "on_timer_started"
|
||||
CONF_ON_TIMER_UPDATED = "on_timer_updated"
|
||||
CONF_ON_TIMER_CANCELLED = "on_timer_cancelled"
|
||||
CONF_ON_TIMER_FINISHED = "on_timer_finished"
|
||||
CONF_ON_TIMER_TICK = "on_timer_tick"
|
||||
|
||||
|
||||
voice_assistant_ns = cg.esphome_ns.namespace("voice_assistant")
|
||||
VoiceAssistant = voice_assistant_ns.class_("VoiceAssistant", cg.Component)
|
||||
@@ -64,6 +70,8 @@ ConnectedCondition = voice_assistant_ns.class_(
|
||||
"ConnectedCondition", automation.Condition, cg.Parented.template(VoiceAssistant)
|
||||
)
|
||||
|
||||
Timer = voice_assistant_ns.struct("Timer")
|
||||
|
||||
|
||||
def tts_stream_validate(config):
|
||||
if CONF_SPEAKER not in config and (
|
||||
@@ -131,6 +139,21 @@ CONFIG_SCHEMA = cv.All(
|
||||
single=True
|
||||
),
|
||||
cv.Optional(CONF_ON_IDLE): automation.validate_automation(single=True),
|
||||
cv.Optional(CONF_ON_TIMER_STARTED): automation.validate_automation(
|
||||
single=True
|
||||
),
|
||||
cv.Optional(CONF_ON_TIMER_UPDATED): automation.validate_automation(
|
||||
single=True
|
||||
),
|
||||
cv.Optional(CONF_ON_TIMER_CANCELLED): automation.validate_automation(
|
||||
single=True
|
||||
),
|
||||
cv.Optional(CONF_ON_TIMER_FINISHED): automation.validate_automation(
|
||||
single=True
|
||||
),
|
||||
cv.Optional(CONF_ON_TIMER_TICK): automation.validate_automation(
|
||||
single=True
|
||||
),
|
||||
}
|
||||
).extend(cv.COMPONENT_SCHEMA),
|
||||
tts_stream_validate,
|
||||
@@ -270,6 +293,49 @@ async def to_code(config):
|
||||
config[CONF_ON_IDLE],
|
||||
)
|
||||
|
||||
has_timers = False
|
||||
if on_timer_started := config.get(CONF_ON_TIMER_STARTED):
|
||||
await automation.build_automation(
|
||||
var.get_timer_started_trigger(),
|
||||
[(Timer, "timer")],
|
||||
on_timer_started,
|
||||
)
|
||||
has_timers = True
|
||||
|
||||
if on_timer_updated := config.get(CONF_ON_TIMER_UPDATED):
|
||||
await automation.build_automation(
|
||||
var.get_timer_updated_trigger(),
|
||||
[(Timer, "timer")],
|
||||
on_timer_updated,
|
||||
)
|
||||
has_timers = True
|
||||
|
||||
if on_timer_cancelled := config.get(CONF_ON_TIMER_CANCELLED):
|
||||
await automation.build_automation(
|
||||
var.get_timer_cancelled_trigger(),
|
||||
[(Timer, "timer")],
|
||||
on_timer_cancelled,
|
||||
)
|
||||
has_timers = True
|
||||
|
||||
if on_timer_finished := config.get(CONF_ON_TIMER_FINISHED):
|
||||
await automation.build_automation(
|
||||
var.get_timer_finished_trigger(),
|
||||
[(Timer, "timer")],
|
||||
on_timer_finished,
|
||||
)
|
||||
has_timers = True
|
||||
|
||||
if on_timer_tick := config.get(CONF_ON_TIMER_TICK):
|
||||
await automation.build_automation(
|
||||
var.get_timer_tick_trigger(),
|
||||
[(cg.std_vector.template(Timer), "timers")],
|
||||
on_timer_tick,
|
||||
)
|
||||
has_timers = True
|
||||
|
||||
cg.add(var.set_has_timers(has_timers))
|
||||
|
||||
cg.add_define("USE_VOICE_ASSISTANT")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user