|
| | MQTTComponent () |
| | Constructs a MQTTComponent.
|
| |
| void | call_setup () override |
| | Override setup_ so that we can call send_discovery() when needed.
|
| |
| void | call_dump_config () override |
| |
| virtual void | send_discovery (JsonObject root, SendDiscoveryConfig &config)=0 |
| | Send discovery info the Home Assistant, override this.
|
| |
| virtual bool | send_initial_state ()=0 |
| |
| bool | is_internal () const |
| | Returns cached is_internal result (computed once during setup).
|
| |
| void | set_qos (uint8_t qos) |
| | Set QOS for state messages.
|
| |
| uint8_t | get_qos () const |
| |
| void | set_retain (bool retain) |
| | Set whether state message should be retained.
|
| |
| bool | get_retain () const |
| |
| void | disable_discovery () |
| | Disable discovery. Sets friendly name to "".
|
| |
| bool | is_discovery_enabled () const |
| |
| void | set_subscribe_qos (uint8_t qos) |
| | Set the QOS for subscribe messages (used in discovery).
|
| |
| virtual const char * | component_type () const =0 |
| | Override this method to return the component type (e.g. "light", "sensor", ...)
|
| |
| template<typename T > |
| void | set_custom_state_topic (T &&custom_state_topic) |
| | Set a custom state topic. Do not set for default behavior.
|
| |
| template<typename T > |
| void | set_custom_command_topic (T &&custom_command_topic) |
| |
| void | set_command_retain (bool command_retain) |
| | Set whether command message should be retained.
|
| |
| float | get_setup_priority () const override |
| | MQTT_COMPONENT setup priority.
|
| |
| void | set_availability (std::string topic, std::string payload_available, std::string payload_not_available) |
| | Set the Home Assistant availability data.
|
| |
| void | disable_availability () |
| |
| void | schedule_resend_state () |
| | Internal method for the MQTT client base to schedule a resend of the state on reconnect.
|
| |
| void | process_resend () |
| | Process pending resend if needed (called by MQTTClientComponent)
|
| |
| bool | publish (const std::string &topic, const std::string &payload) |
| | Send a MQTT message.
|
| |
| bool | publish (const std::string &topic, const char *payload, size_t payload_length) |
| | Send a MQTT message.
|
| |
| bool | publish (const std::string &topic, const char *payload) |
| | Send a MQTT message.
|
| |
| bool | publish (const char *topic, const char *payload, size_t payload_length) |
| | Send a MQTT message (no heap allocation for topic).
|
| |
| bool | publish (StringRef topic, const char *payload, size_t payload_length) |
| | Send a MQTT message (no heap allocation for topic).
|
| |
| bool | publish (const char *topic, const char *payload) |
| | Send a MQTT message (no heap allocation for topic).
|
| |
| bool | publish (StringRef topic, const char *payload) |
| | Send a MQTT message (no heap allocation for topic).
|
| |
| bool | publish (const std::string &topic, ProgmemStr payload) |
| | Send a MQTT message with a PROGMEM string payload.
|
| |
| bool | publish (const char *topic, ProgmemStr payload) |
| | Send a MQTT message with a PROGMEM string payload (no heap allocation for topic).
|
| |
| bool | publish (StringRef topic, ProgmemStr payload) |
| | Send a MQTT message with a PROGMEM string payload (no heap allocation for topic).
|
| |
| bool | publish_json (const std::string &topic, const json::json_build_t &f) |
| | Construct and send a JSON MQTT message.
|
| |
| bool | publish_json (const char *topic, const json::json_build_t &f) |
| | Construct and send a JSON MQTT message (no heap allocation for topic).
|
| |
| bool | publish_json (StringRef topic, const json::json_build_t &f) |
| | Construct and send a JSON MQTT message (no heap allocation for topic).
|
| |
| void | subscribe (const std::string &topic, mqtt_callback_t callback, uint8_t qos=0) |
| | Subscribe to a MQTT topic.
|
| |
| void | subscribe_json (const std::string &topic, const mqtt_json_callback_t &callback, uint8_t qos=0) |
| | Subscribe to a MQTT topic and automatically parse JSON payload.
|
| |
| virtual void | setup () |
| | Where the component's initialization should happen.
|
| |
| virtual void | loop () |
| | This method will be called repeatedly.
|
| |
| virtual void | dump_config () |
| |
| float | get_actual_setup_priority () const |
| |
| void | set_setup_priority (float priority) |
| |
| virtual float | get_loop_priority () const |
| | priority of loop().
|
| |
| void | call () |
| |
| virtual void | on_shutdown () |
| |
| virtual void | on_safe_shutdown () |
| |
| virtual bool | teardown () |
| | Called during teardown to allow component to gracefully finish operations.
|
| |
| virtual void | on_powerdown () |
| | Called after teardown is complete to power down hardware.
|
| |
| uint8_t | get_component_state () const |
| |
| void | reset_to_construction_state () |
| | Reset this component back to the construction state to allow setup to run again.
|
| |
| bool | is_in_loop_state () const |
| | Check if this component has completed setup and is in the loop state.
|
| |
| bool | is_idle () const |
| | Check if this component is idle.
|
| |
| virtual void | mark_failed () |
| | Mark this component as failed.
|
| |
| | ESPDEPRECATED ("Use mark_failed(LOG_STR(\"static string literal\")) instead. Do NOT use .c_str() from temporary " "strings. Will stop working in 2026.6.0", "2025.12.0") void mark_failed(const char *message) |
| |
| void | mark_failed (const LogString *message) |
| |
| void | disable_loop () |
| | Disable this component's loop.
|
| |
| void | enable_loop () |
| | Enable this component's loop.
|
| |
| void | enable_loop_soon_any_context () |
| | Thread and ISR-safe version of enable_loop() that can be called from any context.
|
| |
| bool | is_failed () const |
| |
| bool | is_ready () const |
| |
| virtual bool | can_proceed () |
| |
| bool | status_has_warning () const |
| |
| bool | status_has_error () const |
| |
| void | status_set_warning (const char *message=nullptr) |
| |
| void | status_set_warning (const LogString *message) |
| |
| void | status_set_error () |
| |
| | ESPDEPRECATED ("Use status_set_error(LOG_STR(\"static string literal\")) instead. Do NOT use .c_str() from temporary " "strings. Will stop working in 2026.6.0", "2025.12.0") void status_set_error(const char *message) |
| |
| void | status_set_error (const LogString *message) |
| |
| void | status_clear_warning () |
| |
| void | status_clear_error () |
| |
| void | status_momentary_warning (const char *name, uint32_t length=5000) |
| | Set warning status flag and automatically clear it after a timeout.
|
| |
| void | status_momentary_error (const char *name, uint32_t length=5000) |
| | Set error status flag and automatically clear it after a timeout.
|
| |
| bool | has_overridden_loop () const |
| |
| void | set_component_source (const LogString *source) |
| | Set where this component was loaded from for some debug messages.
|
| |
| const LogString * | get_component_log_str () const |
| | Get the integration where this component was declared as a LogString for logging.
|
| |
| bool | should_warn_of_blocking (uint32_t blocking_time) |
| |
|
| StringRef | get_discovery_topic_to_ (std::span< char, MQTT_DISCOVERY_TOPIC_MAX_LEN > buf, const MQTTDiscoveryInfo &discovery_info) const |
| | Helper method to get the discovery topic for this component into a buffer.
|
| |
| StringRef | get_default_topic_for_to_ (std::span< char, MQTT_DEFAULT_TOPIC_MAX_LEN > buf, const char *suffix, size_t suffix_len) const |
| | Get this components state/command/... topic into a buffer.
|
| |
| std::string | get_default_topic_for_ (const std::string &suffix) const |
| | Get this components state/command/... topic (allocates std::string).
|
| |
| virtual const EntityBase * | get_entity () const =0 |
| | Gets the Entity served by this MQTT component.
|
| |
| const StringRef & | friendly_name_ () const |
| | Get the friendly name of this MQTT component.
|
| |
| StringRef | get_icon_ref_ () const |
| | Get the icon field of this component as StringRef.
|
| |
| bool | is_disabled_by_default_ () const |
| | Get whether the underlying Entity is disabled by default.
|
| |
| StringRef | get_state_topic_to_ (std::span< char, MQTT_DEFAULT_TOPIC_MAX_LEN > buf) const |
| | Get the MQTT state topic into a buffer (no heap allocation for non-lambda custom topics).
|
| |
| StringRef | get_command_topic_to_ (std::span< char, MQTT_DEFAULT_TOPIC_MAX_LEN > buf) const |
| | Get the MQTT command topic into a buffer (no heap allocation for non-lambda custom topics).
|
| |
| std::string | get_state_topic_ () const |
| | Get the MQTT topic that new states will be shared to (allocates std::string).
|
| |
| std::string | get_command_topic_ () const |
| | Get the MQTT topic for listening to commands (allocates std::string).
|
| |
| bool | is_connected_ () const |
| |
| bool | send_discovery_ () |
| | Internal method to start sending discovery info, this will call send_discovery().
|
| |
| StringRef | get_default_object_id_to_ (std::span< char, OBJECT_ID_MAX_LEN > buf) const |
| | Get the object ID for this MQTT component, writing to the provided buffer.
|
| |
| bool | compute_is_internal_ () |
| | Compute is_internal status based on topics and entity state.
|
| |
| virtual void | call_loop () |
| |
| void | set_component_state_ (uint8_t state) |
| | Helper to set component state (clears state bits and sets new state)
|
| |
| void | set_interval (uint32_t id, uint32_t interval, std::function< void()> &&f) |
| | Set an interval function with a numeric ID (zero heap allocation).
|
| |
| void | set_interval (InternalSchedulerID id, uint32_t interval, std::function< void()> &&f) |
| |
| void | set_interval (uint32_t interval, std::function< void()> &&f) |
| |
| bool | cancel_interval (uint32_t id) |
| |
| bool | cancel_interval (InternalSchedulerID id) |
| |
| ESPDEPRECATED("set_retry is deprecated and will be removed in 2026.8.0. Use set_timeout or set_interval instead.", "2026.2.0") void set_retry(const std | ESPDEPRECATED ("set_retry is deprecated and will be removed in 2026.8.0. Use set_timeout or set_interval instead.", "2026.2.0") void set_retry(const char *name |
| |
| | ESPDEPRECATED ("set_retry is deprecated and will be removed in 2026.8.0. Use set_timeout or set_interval instead.", "2026.2.0") void set_retry(uint32_t id |
| |
| | ESPDEPRECATED ("set_retry is deprecated and will be removed in 2026.8.0. Use set_timeout or set_interval instead.", "2026.2.0") void set_retry(uint32_t initial_wait_time |
| |
| ESPDEPRECATED("cancel_retry is deprecated and will be removed in 2026.8.0.", "2026.2.0") bool cancel_retry(const std | ESPDEPRECATED ("cancel_retry is deprecated and will be removed in 2026.8.0.", "2026.2.0") bool cancel_retry(const char *name) |
| |
| | ESPDEPRECATED ("cancel_retry is deprecated and will be removed in 2026.8.0.", "2026.2.0") bool cancel_retry(uint32_t id) |
| |
| void | set_timeout (uint32_t id, uint32_t timeout, std::function< void()> &&f) |
| | Set a timeout function with a numeric ID (zero heap allocation).
|
| |
| void | set_timeout (InternalSchedulerID id, uint32_t timeout, std::function< void()> &&f) |
| |
| void | set_timeout (uint32_t timeout, std::function< void()> &&f) |
| |
| bool | cancel_timeout (uint32_t id) |
| |
| bool | cancel_timeout (InternalSchedulerID id) |
| |
| void | defer (std::function< void()> &&f) |
| | Defer a callback to the next loop() call.
|
| |
| void | defer (uint32_t id, std::function< void()> &&f) |
| | Defer a callback with a numeric ID (zero heap allocation)
|
| |
| bool | cancel_defer (uint32_t id) |
| |
|
| TemplatableValue< std::string > | custom_state_topic_ {} |
| |
| TemplatableValue< std::string > | custom_command_topic_ {} |
| |
| std::unique_ptr< Availability > | availability_ |
| |
| uint8_t | qos_: 2 {0} |
| |
| uint8_t | subscribe_qos_: 2 {0} |
| |
| bool | command_retain_: 1 {false} |
| |
| bool | retain_: 1 {true} |
| |
| bool | discovery_enabled_: 1 {true} |
| |
| bool | resend_state_: 1 {false} |
| |
| bool | is_internal_: 1 {false} |
| | Cached result of compute_is_internal_(), set during setup.
|
| |
| ESPDEPRECATED("Use const char* or uint32_t overload instead. Removed in 2026.7.0", "2026.1.0") void set_interval(const std voi | set_interval )(const char *name, uint32_t interval, std::function< void()> &&f) |
| | Set an interval function with a unique name.
|
| |
| ESPDEPRECATED("Use const char* or uint32_t overload instead. Removed in 2026.7.0", "2026.1.0") bool cancel_interval(const std boo | cancel_interval )(const char *name) |
| | Cancel an interval function.
|
| |
| ESPDEPRECATED("set_retry is deprecated and will be removed in 2026.8.0. Use set_timeout or set_interval instead.", "2026.2.0") void set_retry(const std uint32_t | initial_wait_time |
| |
| ESPDEPRECATED("set_retry is deprecated and will be removed in 2026.8.0. Use set_timeout or set_interval instead.", "2026.2.0") void set_retry(const std uint32_t uint8_t | max_attempts |
| |
| ESPDEPRECATED("set_retry is deprecated and will be removed in 2026.8.0. Use set_timeout or set_interval instead.", "2026.2.0") void set_retry(const std uint32_t uint8_t std::function< RetryResult(uint8_t)> && | f |
| |
| ESPDEPRECATED("set_retry is deprecated and will be removed in 2026.8.0. Use set_timeout or set_interval instead.", "2026.2.0") void set_retry(const std uint32_t uint8_t std::function< RetryResult(uint8_t)> float | backoff_increase_factor = 1.0f) |
| |
| uint32_t | initial_wait_time |
| |
| uint32_t uint8_t | max_attempts |
| |
| uint32_t uint8_t std::function< RetryResult(uint8_t)> && | f |
| |
| uint32_t uint8_t std::function< RetryResult(uint8_t)> float | backoff_increase_factor = 1.0f) |
| |
| uint8_t | max_attempts |
| |
| uint8_t std::function< RetryResult(uint8_t)> && | f |
| |
| uint8_t std::function< RetryResult(uint8_t)> float | backoff_increase_factor = 1.0f) |
| |
| ESPDEPRECATED("Use const char* or uint32_t overload instead. Removed in 2026.7.0", "2026.1.0") void set_timeout(const std voi | set_timeout )(const char *name, uint32_t timeout, std::function< void()> &&f) |
| | Set a timeout function with a unique name.
|
| |
| ESPDEPRECATED("Use const char* or uint32_t overload instead. Removed in 2026.7.0", "2026.1.0") bool cancel_timeout(const std boo | cancel_timeout )(const char *name) |
| | Cancel a timeout function.
|
| |
| ESPDEPRECATED("Use const char* overload instead. Removed in 2026.7.0", "2026.1.0") void defer(const std voi | defer )(const char *name, std::function< void()> &&f) |
| | Defer a callback to the next loop() call.
|
| |
| ESPDEPRECATED("Use const char* overload instead. Removed in 2026.7.0", "2026.1.0") bool cancel_defer(const std boo | cancel_defer )(const char *name) |
| | Cancel a defer callback using the specified name, name must not be empty.
|
| |
| const LogString * | component_source_ {nullptr} |
| |
| uint16_t | warn_if_blocking_over_ {WARN_IF_BLOCKING_OVER_MS} |
| | Warn if blocked for this many ms (max 65.5s)
|
| |
| uint8_t | component_state_ {0x00} |
| | State of this component - each bit has a purpose: Bits 0-2: Component state (0x00=CONSTRUCTION, 0x01=SETUP, 0x02=LOOP, 0x03=FAILED, 0x04=LOOP_DONE) Bit 3: STATUS_LED_WARNING Bit 4: STATUS_LED_ERROR Bits 5-7: Unused - reserved for future expansion.
|
| |
| volatile bool | pending_enable_loop_ {false} |
| | ISR-safe flag for enable_loop_soon_any_context.
|
| |
MQTTComponent is the base class for all components that interact with MQTT to expose certain functionality or data from actuators or sensors to clients.
Although this class should work with all MQTT solutions, it has been specifically designed for use with Home Assistant. For example, this class supports Home Assistant MQTT discovery out of the box.
In order to implement automatic Home Assistant discovery, all sub-classes should:
- Implement send_discovery that creates a Home Assistant discovery payload.
- Override component_type() to return the appropriate component type such as "light" or "sensor".
- Subscribe to command topics using subscribe() or subscribe_json() during setup().
In order to best separate the front- and back-end of ESPHome, all sub-classes should only parse/send MQTT messages and interact with back-end components via callbacks to ensure a clean separation.
Definition at line 91 of file mqtt_component.h.