|
ESPHome 2026.1.5
|
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>
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 EntityBase * | get_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< Availability > | availability_ |
| 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. | |
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:
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.
|
explicitdefault |
Constructs a MQTTComponent.
|
overridevirtual |
Reimplemented from esphome::Component.
Definition at line 331 of file mqtt_component.cpp.
|
overridevirtual |
Reimplemented from esphome::Component.
Definition at line 311 of file mqtt_component.cpp.
|
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.
|
pure virtual |
Override this method to return the component type (e.g. "light", "sensor", ...)
Implemented in 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, and esphome::mqtt::MQTTValveComponent.
| void esphome::mqtt::MQTTComponent::disable_availability | ( | ) |
Definition at line 289 of file mqtt_component.cpp.
| void esphome::mqtt::MQTTComponent::disable_discovery | ( | ) |
Disable discovery. Sets friendly name to "".
Definition at line 279 of file mqtt_component.cpp.
|
protected |
Get the friendly name of this MQTT component.
Definition at line 341 of file mqtt_component.cpp.
|
protected |
Get the MQTT topic for listening to commands.
Definition at line 102 of file mqtt_component.cpp.
|
protected |
Get the object ID for this MQTT component, writing to the provided buffer.
Definition at line 342 of file mqtt_component.cpp.
|
protected |
Get this components state/command/... topic.
| suffix | The suffix/key such as "state" or "command". |
Definition at line 71 of file mqtt_component.cpp.
|
protected |
Helper method to get the discovery topic for this component.
Definition at line 50 of file mqtt_component.cpp.
|
protectedpure virtual |
Gets the Entity served by this MQTT component.
Implemented in esphome::mqtt::MQTTAlarmControlPanelComponent, esphome::mqtt::MQTTBinarySensorComponent, esphome::mqtt::MQTTButtonComponent, 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, and esphome::mqtt::MQTTValveComponent.
|
protected |
Get the icon field of this component as StringRef.
Definition at line 345 of file mqtt_component.cpp.
| uint8_t esphome::mqtt::MQTTComponent::get_qos | ( | ) | const |
Definition at line 260 of file mqtt_component.cpp.
| bool esphome::mqtt::MQTTComponent::get_retain | ( | ) | const |
Definition at line 262 of file mqtt_component.cpp.
|
overridevirtual |
MQTT_COMPONENT setup priority.
Reimplemented from esphome::Component.
Definition at line 278 of file mqtt_component.cpp.
|
protected |
Get the MQTT topic that new states will be shared to.
Definition at line 96 of file mqtt_component.cpp.
|
protected |
Definition at line 338 of file mqtt_component.cpp.
|
protected |
Get whether the underlying Entity is disabled by default.
Definition at line 346 of file mqtt_component.cpp.
| bool esphome::mqtt::MQTTComponent::is_discovery_enabled | ( | ) | const |
Definition at line 264 of file mqtt_component.cpp.
|
virtual |
Definition at line 347 of file mqtt_component.cpp.
| bool esphome::mqtt::MQTTComponent::publish | ( | const std::string & | topic, |
| const char * | payload, | ||
| size_t | payload_length ) |
Send a MQTT message.
| topic | The topic. |
| payload | The payload buffer. |
| payload_length | The length of the payload. |
Definition at line 112 of file mqtt_component.cpp.
| bool esphome::mqtt::MQTTComponent::publish | ( | const std::string & | topic, |
| const std::string & | payload ) |
Send a MQTT message.
| topic | The topic. |
| payload | The payload. |
Definition at line 108 of file mqtt_component.cpp.
| bool esphome::mqtt::MQTTComponent::publish_json | ( | const std::string & | topic, |
| const json::json_build_t & | f ) |
Construct and send a JSON MQTT message.
| topic | The topic. |
| f | The Json Message builder. |
Definition at line 118 of file mqtt_component.cpp.
| 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.
|
pure virtual |
Send discovery info the Home Assistant, override this.
Implemented in 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, and esphome::mqtt::MQTTValveComponent.
|
protected |
Internal method to start sending discovery info, this will call send_discovery().
Definition at line 124 of file mqtt_component.cpp.
|
pure virtual |
Implemented in 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, and esphome::mqtt::MQTTValveComponent.
| 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.
| 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.
|
inline |
Definition at line 117 of file mqtt_component.h.
|
inline |
Set a custom state topic. Do not set for default behavior.
Definition at line 114 of file mqtt_component.h.
| void esphome::mqtt::MQTTComponent::set_qos | ( | uint8_t | qos | ) |
Set QOS for state messages.
Definition at line 44 of file mqtt_component.cpp.
| void esphome::mqtt::MQTTComponent::set_retain | ( | bool | retain | ) |
Set whether state message should be retained.
Definition at line 48 of file mqtt_component.cpp.
| 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.
| void esphome::mqtt::MQTTComponent::subscribe | ( | const std::string & | topic, |
| mqtt_callback_t | callback, | ||
| uint8_t | qos = 0 ) |
Subscribe to a MQTT topic.
| topic | The topic. Wildcards are currently not supported. |
| callback | The callback that will be called when a message with matching topic is received. |
| qos | The MQTT quality of service. Defaults to 0. |
Definition at line 268 of file mqtt_component.cpp.
| 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.
| topic | The topic. Wildcards are currently not supported. |
| callback | The callback with a parsed JsonObject that will be called when a message with matching topic is received. |
| qos | The MQTT quality of service. Defaults to 0. |
Definition at line 272 of file mqtt_component.cpp.
|
protected |
Definition at line 221 of file mqtt_component.h.
|
protected |
Definition at line 223 of file mqtt_component.h.
|
protected |
Definition at line 219 of file mqtt_component.h.
|
protected |
Definition at line 218 of file mqtt_component.h.
|
protected |
Definition at line 227 of file mqtt_component.h.
|
protected |
Definition at line 225 of file mqtt_component.h.
|
protected |
Definition at line 228 of file mqtt_component.h.
|
protected |
Definition at line 224 of file mqtt_component.h.
|
protected |
Definition at line 226 of file mqtt_component.h.