diff --git a/esphome/core/base_automation.h b/esphome/core/base_automation.h index e87a4a2765..6ac6e596c1 100644 --- a/esphome/core/base_automation.h +++ b/esphome/core/base_automation.h @@ -93,7 +93,12 @@ class StartupTrigger : public Trigger<>, public Component { class ShutdownTrigger : public Trigger<>, public Component { public: + explicit ShutdownTrigger(float setup_priority) : setup_priority_(setup_priority) {} void on_shutdown() override { this->trigger(); } + float get_setup_priority() const override { return this->setup_priority_; } + + protected: + float setup_priority_; }; class LoopTrigger : public Trigger<>, public Component { diff --git a/esphome/core/config.py b/esphome/core/config.py index 68c253f7b4..f1337be04b 100644 --- a/esphome/core/config.py +++ b/esphome/core/config.py @@ -117,6 +117,7 @@ CONFIG_SCHEMA = cv.All( cv.Optional(CONF_ON_SHUTDOWN): automation.validate_automation( { cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ShutdownTrigger), + cv.Optional(CONF_PRIORITY, default=600.0): cv.float_, } ), cv.Optional(CONF_ON_LOOP): automation.validate_automation( @@ -291,7 +292,7 @@ async def _add_automations(config): await automation.build_automation(trigger, [], conf) for conf in config.get(CONF_ON_SHUTDOWN, []): - trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID]) + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], conf.get(CONF_PRIORITY)) await cg.register_component(trigger, conf) await automation.build_automation(trigger, [], conf)