16namespace setup_priority {
19extern const float BUS;
25extern const float DATA;
32extern const float WIFI;
41extern const float LATE;
45static const uint32_t SCHEDULER_DONT_RUN = 4294967295UL;
47#define LOG_UPDATE_INTERVAL(this) \
48 if (this->get_update_interval() == SCHEDULER_DONT_RUN) { \
49 ESP_LOGCONFIG(TAG, " Update Interval: never"); \
50 } else if (this->get_update_interval() < 100) { \
51 ESP_LOGCONFIG(TAG, " Update Interval: %.3fs", this->get_update_interval() / 1000.0f); \
53 ESP_LOGCONFIG(TAG, " Update Interval: %.1fs", this->get_update_interval() / 1000.0f); \
264 void set_interval(
const std::string &name, uint32_t interval, std::function<
void()> &&f);
280 void set_interval(
const char *name, uint32_t interval, std::function<
void()> &&f);
282 void set_interval(uint32_t interval, std::function<
void()> &&f);
322 void set_retry(
const std::string &name, uint32_t initial_wait_time, uint8_t max_attempts,
323 std::function<
RetryResult(uint8_t)> &&f,
float backoff_increase_factor = 1.0f);
325 void set_retry(uint32_t initial_wait_time, uint8_t max_attempts, std::function<
RetryResult(uint8_t)> &&f,
326 float backoff_increase_factor = 1.0f);
349 void set_timeout(
const std::string &name, uint32_t timeout, std::function<
void()> &&f);
365 void set_timeout(
const char *name, uint32_t timeout, std::function<
void()> &&f);
367 void set_timeout(uint32_t timeout, std::function<
void()> &&f);
384 void defer(
const std::string &name, std::function<
void()> &&f);
399 void defer(
const char *name, std::function<
void()> &&f);
402 void defer(std::function<
void()> &&f);
virtual void mark_failed()
Mark this component as failed.
virtual void call_dump_config()
virtual float get_setup_priority() const
priority of setup().
virtual void setup()
Where the component's initialization should happen.
float get_actual_setup_priority() const
bool has_overridden_loop() const
virtual void on_powerdown()
Called after teardown is complete to power down hardware.
uint8_t get_component_state() const
void status_set_warning(const char *message=nullptr)
void set_interval(const std::string &name, uint32_t interval, std::function< void()> &&f)
Set an interval function with a unique name.
void set_component_source(const char *source)
Set where this component was loaded from for some debug messages.
bool should_warn_of_blocking(uint32_t blocking_time)
volatile bool pending_enable_loop_
ISR-safe flag for enable_loop_soon_any_context.
virtual bool can_proceed()
bool cancel_timeout(const std::string &name)
Cancel a timeout function.
virtual void on_safe_shutdown()
virtual float get_loop_priority() const
priority of loop().
void status_clear_error()
void enable_loop_soon_any_context()
Thread and ISR-safe version of enable_loop() that can be called from any context.
bool is_in_loop_state() const
Check if this component has completed setup and is in the loop state.
void status_momentary_error(const std::string &name, uint32_t length=5000)
virtual bool teardown()
Called during teardown to allow component to gracefully finish operations.
const char * get_component_source() const
Get the integration where this component was declared as a string.
uint16_t warn_if_blocking_over_
Warn if blocked for this many ms (max 65.5s)
bool cancel_retry(const std::string &name)
Cancel a retry function.
uint8_t component_state_
State of this component - each bit has a purpose: Bits 0-2: Component state (0x00=CONSTRUCTION,...
void status_momentary_warning(const std::string &name, uint32_t length=5000)
virtual void dump_config()
void enable_loop()
Enable this component's loop.
void set_component_state_(uint8_t state)
Helper to set component state (clears state bits and sets new state)
bool status_has_warning() const
bool status_has_error() const
bool cancel_interval(const std::string &name)
Cancel an interval function.
void disable_loop()
Disable this component's loop.
virtual void on_shutdown()
bool cancel_defer(const std::string &name)
Cancel a defer callback using the specified name, name must not be empty.
virtual void loop()
This method will be called repeatedly.
void mark_failed(const char *message)
void reset_to_construction_state()
Reset this component back to the construction state to allow setup to run again.
const char * component_source_
void set_setup_priority(float priority)
void defer(const std::string &name, std::function< void()> &&f)
Defer a callback to the next loop() call.
void status_clear_warning()
virtual void call_setup()
void set_timeout(const std::string &name, uint32_t timeout, std::function< void()> &&f)
Set a timeout function with a unique name.
void status_set_error(const char *message=nullptr)
void set_retry(const std::string &name, uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f)
Set an retry function with a unique name.
This class simplifies creating components that periodically check a state.
virtual uint32_t get_update_interval() const
Get the update interval in ms of this sensor.
void call_setup() override
virtual void set_update_interval(uint32_t update_interval)
Manually set the update interval in ms for this polling object.
uint32_t update_interval_
~WarnIfComponentBlockingGuard()
WarnIfComponentBlockingGuard(Component *component, uint32_t start_time)
const float BUS
For communication buses like i2c/spi.
const float HARDWARE_LATE
Alias for DATA (here for compatibility reasons)
const float AFTER_CONNECTION
For components that should be initialized after a data connection (API/MQTT) is connected.
const float DATA
For components that import data from directly connected sensors like DHT.
const float HARDWARE
For components that deal with hardware and are very important like GPIO switch.
const float BEFORE_CONNECTION
For components that should be initialized after WiFi and before API is connected.
const float IO
For components that represent GPIO pins like PCF8573.
const float LATE
For components that should be initialized at the very end of the setup process.
const float AFTER_WIFI
For components that should be initialized after WiFi is connected.
const float PROCESSOR
For components that use data from sensors like displays.
const float AFTER_BLUETOOTH
Providing packet encoding functions for exchanging data with a remote host.
const uint8_t COMPONENT_STATE_SETUP
const uint8_t COMPONENT_STATE_CONSTRUCTION
const uint8_t STATUS_LED_MASK
const uint8_t COMPONENT_STATE_FAILED
const uint8_t COMPONENT_STATE_MASK
const uint8_t COMPONENT_STATE_LOOP
const uint16_t WARN_IF_BLOCKING_OVER_MS
Initial blocking time allowed without warning.
void clear_setup_priority_overrides()
const uint8_t STATUS_LED_OK
const uint8_t STATUS_LED_WARNING
const uint8_t COMPONENT_STATE_LOOP_DONE
const uint8_t STATUS_LED_ERROR