ESPHome 2026.1.5
Loading...
Searching...
No Matches
esphome::mqtt::MQTTComponent Class Referenceabstract

MQTTComponent is the base class for all components that interact with MQTT to expose certain functionality or data from actuators or sensors to clients. More...

#include <mqtt_component.h>

Inheritance diagram for esphome::mqtt::MQTTComponent:
esphome::Component esphome::mqtt::MQTTAlarmControlPanelComponent esphome::mqtt::MQTTBinarySensorComponent esphome::mqtt::MQTTButtonComponent esphome::mqtt::MQTTClimateComponent esphome::mqtt::MQTTCoverComponent esphome::mqtt::MQTTDateComponent esphome::mqtt::MQTTDateTimeComponent esphome::mqtt::MQTTEventComponent esphome::mqtt::MQTTFanComponent esphome::mqtt::MQTTJSONLightComponent esphome::mqtt::MQTTLockComponent esphome::mqtt::MQTTNumberComponent esphome::mqtt::MQTTSelectComponent esphome::mqtt::MQTTSensorComponent esphome::mqtt::MQTTSwitchComponent esphome::mqtt::MQTTTextComponent esphome::mqtt::MQTTTextSensor esphome::mqtt::MQTTTimeComponent esphome::mqtt::MQTTUpdateComponent esphome::mqtt::MQTTValveComponent

Public Member Functions

 MQTTComponent ()
 Constructs a MQTTComponent.
 
void call_setup () override
 Override setup_ so that we can call send_discovery() when needed.
 
void call_loop () override
 
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
 
virtual bool is_internal ()
 
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.
 
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_json (const std::string &topic, const json::json_build_t &f)
 Construct and send a JSON MQTT message.
 
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.
 
- Public Member Functions inherited from esphome::Component
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)
 

Protected Member Functions

std::string get_discovery_topic_ (const MQTTDiscoveryInfo &discovery_info) const
 Helper method to get the discovery topic for this component.
 
std::string get_default_topic_for_ (const std::string &suffix) const
 Get this components state/command/... topic.
 
virtual const EntityBaseget_entity () const =0
 Gets the Entity served by this MQTT component.
 
std::string 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.
 
std::string get_state_topic_ () const
 Get the MQTT topic that new states will be shared to.
 
std::string get_command_topic_ () const
 Get the MQTT topic for listening to commands.
 
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.
 
- Protected Member Functions inherited from esphome::Component
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 (uint32_t interval, std::function< void()> &&f)
 
bool cancel_interval (uint32_t id)
 
void set_retry (uint32_t id, uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f)
 Set a retry function with a numeric ID (zero heap allocation).
 
void set_retry (uint32_t initial_wait_time, uint8_t max_attempts, std::function< RetryResult(uint8_t)> &&f, float backoff_increase_factor=1.0f)
 
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 (uint32_t timeout, std::function< void()> &&f)
 
bool cancel_timeout (uint32_t 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)
 

Protected Attributes

TemplatableValue< std::string > custom_state_topic_ {}
 
TemplatableValue< std::string > custom_command_topic_ {}
 
std::unique_ptr< Availabilityavailability_
 
bool command_retain_ {false}
 
bool retain_ {true}
 
uint8_t qos_ {0}
 
uint8_t subscribe_qos_ {0}
 
bool discovery_enabled_ {true}
 
bool resend_state_ {false}
 
- Protected Attributes inherited from esphome::Component
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("Use const char* or uint32_t overload instead. Removed in 2026.7.0", "2026.1.0") void set_retry(const std voi set_retry )(const char *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.
 
ESPDEPRECATED("Use const char* or uint32_t overload instead. Removed in 2026.7.0", "2026.1.0") bool cancel_retry(const std boo cancel_retry )(const char *name)
 Cancel a retry function.
 
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.
 

Detailed Description

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:

  1. Implement send_discovery that creates a Home Assistant discovery payload.
  2. Override component_type() to return the appropriate component type such as "light" or "sensor".
  3. 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 76 of file mqtt_component.h.

Constructor & Destructor Documentation

◆ MQTTComponent()

esphome::mqtt::MQTTComponent::MQTTComponent ( )
explicitdefault

Constructs a MQTTComponent.

Member Function Documentation

◆ call_dump_config()

void esphome::mqtt::MQTTComponent::call_dump_config ( )
overridevirtual

Reimplemented from esphome::Component.

Definition at line 331 of file mqtt_component.cpp.

◆ call_loop()

void esphome::mqtt::MQTTComponent::call_loop ( )
overridevirtual

Reimplemented from esphome::Component.

Definition at line 311 of file mqtt_component.cpp.

◆ call_setup()

void esphome::mqtt::MQTTComponent::call_setup ( )
overridevirtual

Override setup_ so that we can call send_discovery() when needed.

Reimplemented from esphome::Component.

Definition at line 290 of file mqtt_component.cpp.

◆ component_type()

◆ disable_availability()

void esphome::mqtt::MQTTComponent::disable_availability ( )

Definition at line 289 of file mqtt_component.cpp.

◆ disable_discovery()

void esphome::mqtt::MQTTComponent::disable_discovery ( )

Disable discovery. Sets friendly name to "".

Definition at line 279 of file mqtt_component.cpp.

◆ friendly_name_()

std::string esphome::mqtt::MQTTComponent::friendly_name_ ( ) const
protected

Get the friendly name of this MQTT component.

Definition at line 341 of file mqtt_component.cpp.

◆ get_command_topic_()

std::string esphome::mqtt::MQTTComponent::get_command_topic_ ( ) const
protected

Get the MQTT topic for listening to commands.

Definition at line 102 of file mqtt_component.cpp.

◆ get_default_object_id_to_()

StringRef esphome::mqtt::MQTTComponent::get_default_object_id_to_ ( std::span< char, OBJECT_ID_MAX_LEN > buf) const
protected

Get the object ID for this MQTT component, writing to the provided buffer.

Definition at line 342 of file mqtt_component.cpp.

◆ get_default_topic_for_()

std::string esphome::mqtt::MQTTComponent::get_default_topic_for_ ( const std::string & suffix) const
protected

Get this components state/command/... topic.

Parameters
suffixThe suffix/key such as "state" or "command".
Returns
The full topic.

Definition at line 71 of file mqtt_component.cpp.

◆ get_discovery_topic_()

std::string esphome::mqtt::MQTTComponent::get_discovery_topic_ ( const MQTTDiscoveryInfo & discovery_info) const
protected

Helper method to get the discovery topic for this component.

Definition at line 50 of file mqtt_component.cpp.

◆ get_entity()

◆ get_icon_ref_()

StringRef esphome::mqtt::MQTTComponent::get_icon_ref_ ( ) const
protected

Get the icon field of this component as StringRef.

Definition at line 345 of file mqtt_component.cpp.

◆ get_qos()

uint8_t esphome::mqtt::MQTTComponent::get_qos ( ) const

Definition at line 260 of file mqtt_component.cpp.

◆ get_retain()

bool esphome::mqtt::MQTTComponent::get_retain ( ) const

Definition at line 262 of file mqtt_component.cpp.

◆ get_setup_priority()

float esphome::mqtt::MQTTComponent::get_setup_priority ( ) const
overridevirtual

MQTT_COMPONENT setup priority.

Reimplemented from esphome::Component.

Definition at line 278 of file mqtt_component.cpp.

◆ get_state_topic_()

std::string esphome::mqtt::MQTTComponent::get_state_topic_ ( ) const
protected

Get the MQTT topic that new states will be shared to.

Definition at line 96 of file mqtt_component.cpp.

◆ is_connected_()

bool esphome::mqtt::MQTTComponent::is_connected_ ( ) const
protected

Definition at line 338 of file mqtt_component.cpp.

◆ is_disabled_by_default_()

bool esphome::mqtt::MQTTComponent::is_disabled_by_default_ ( ) const
protected

Get whether the underlying Entity is disabled by default.

Definition at line 346 of file mqtt_component.cpp.

◆ is_discovery_enabled()

bool esphome::mqtt::MQTTComponent::is_discovery_enabled ( ) const

Definition at line 264 of file mqtt_component.cpp.

◆ is_internal()

bool esphome::mqtt::MQTTComponent::is_internal ( )
virtual

Definition at line 347 of file mqtt_component.cpp.

◆ publish() [1/2]

bool esphome::mqtt::MQTTComponent::publish ( const std::string & topic,
const char * payload,
size_t payload_length )

Send a MQTT message.

Parameters
topicThe topic.
payloadThe payload buffer.
payload_lengthThe length of the payload.

Definition at line 112 of file mqtt_component.cpp.

◆ publish() [2/2]

bool esphome::mqtt::MQTTComponent::publish ( const std::string & topic,
const std::string & payload )

Send a MQTT message.

Parameters
topicThe topic.
payloadThe payload.

Definition at line 108 of file mqtt_component.cpp.

◆ publish_json()

bool esphome::mqtt::MQTTComponent::publish_json ( const std::string & topic,
const json::json_build_t & f )

Construct and send a JSON MQTT message.

Parameters
topicThe topic.
fThe Json Message builder.

Definition at line 118 of file mqtt_component.cpp.

◆ schedule_resend_state()

void esphome::mqtt::MQTTComponent::schedule_resend_state ( )

Internal method for the MQTT client base to schedule a resend of the state on reconnect.

Definition at line 337 of file mqtt_component.cpp.

◆ send_discovery()

◆ send_discovery_()

bool esphome::mqtt::MQTTComponent::send_discovery_ ( )
protected

Internal method to start sending discovery info, this will call send_discovery().

Definition at line 124 of file mqtt_component.cpp.

◆ send_initial_state()

◆ set_availability()

void esphome::mqtt::MQTTComponent::set_availability ( std::string topic,
std::string payload_available,
std::string payload_not_available )

Set the Home Assistant availability data.

See See Home Assistant for more info.

Definition at line 282 of file mqtt_component.cpp.

◆ set_command_retain()

void esphome::mqtt::MQTTComponent::set_command_retain ( bool command_retain)

Set whether command message should be retained.

Definition at line 280 of file mqtt_component.cpp.

◆ set_custom_command_topic()

template<typename T >
void esphome::mqtt::MQTTComponent::set_custom_command_topic ( T && custom_command_topic)
inline

Definition at line 117 of file mqtt_component.h.

◆ set_custom_state_topic()

template<typename T >
void esphome::mqtt::MQTTComponent::set_custom_state_topic ( T && custom_state_topic)
inline

Set a custom state topic. Do not set for default behavior.

Definition at line 114 of file mqtt_component.h.

◆ set_qos()

void esphome::mqtt::MQTTComponent::set_qos ( uint8_t qos)

Set QOS for state messages.

Definition at line 44 of file mqtt_component.cpp.

◆ set_retain()

void esphome::mqtt::MQTTComponent::set_retain ( bool retain)

Set whether state message should be retained.

Definition at line 48 of file mqtt_component.cpp.

◆ set_subscribe_qos()

void esphome::mqtt::MQTTComponent::set_subscribe_qos ( uint8_t qos)

Set the QOS for subscribe messages (used in discovery).

Definition at line 46 of file mqtt_component.cpp.

◆ subscribe()

void esphome::mqtt::MQTTComponent::subscribe ( const std::string & topic,
mqtt_callback_t callback,
uint8_t qos = 0 )

Subscribe to a MQTT topic.

Parameters
topicThe topic. Wildcards are currently not supported.
callbackThe callback that will be called when a message with matching topic is received.
qosThe MQTT quality of service. Defaults to 0.

Definition at line 268 of file mqtt_component.cpp.

◆ subscribe_json()

void esphome::mqtt::MQTTComponent::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.

If an invalid JSON payload is received, the callback will not be called.

Parameters
topicThe topic. Wildcards are currently not supported.
callbackThe callback with a parsed JsonObject that will be called when a message with matching topic is received.
qosThe MQTT quality of service. Defaults to 0.

Definition at line 272 of file mqtt_component.cpp.

Field Documentation

◆ availability_

std::unique_ptr<Availability> esphome::mqtt::MQTTComponent::availability_
protected

Definition at line 221 of file mqtt_component.h.

◆ command_retain_

bool esphome::mqtt::MQTTComponent::command_retain_ {false}
protected

Definition at line 223 of file mqtt_component.h.

◆ custom_command_topic_

TemplatableValue<std::string> esphome::mqtt::MQTTComponent::custom_command_topic_ {}
protected

Definition at line 219 of file mqtt_component.h.

◆ custom_state_topic_

TemplatableValue<std::string> esphome::mqtt::MQTTComponent::custom_state_topic_ {}
protected

Definition at line 218 of file mqtt_component.h.

◆ discovery_enabled_

bool esphome::mqtt::MQTTComponent::discovery_enabled_ {true}
protected

Definition at line 227 of file mqtt_component.h.

◆ qos_

uint8_t esphome::mqtt::MQTTComponent::qos_ {0}
protected

Definition at line 225 of file mqtt_component.h.

◆ resend_state_

bool esphome::mqtt::MQTTComponent::resend_state_ {false}
protected

Definition at line 228 of file mqtt_component.h.

◆ retain_

bool esphome::mqtt::MQTTComponent::retain_ {true}
protected

Definition at line 224 of file mqtt_component.h.

◆ subscribe_qos_

uint8_t esphome::mqtt::MQTTComponent::subscribe_qos_ {0}
protected

Definition at line 226 of file mqtt_component.h.


The documentation for this class was generated from the following files: