23#define LOG_MQTT_COMPONENT(state_topic, command_topic) \
25 ESP_LOGCONFIG(TAG, " State Topic: '%s'", this->get_state_topic_().c_str()); \
27 if (command_topic) { \
28 ESP_LOGCONFIG(TAG, " Command Topic: '%s'", this->get_command_topic_().c_str()); \
31#define MQTT_COMPONENT_CUSTOM_TOPIC_(name, type) \
33 std::string custom_##name##_##type##_topic_{}; \
36 void set_custom_##name##_##type##_topic(const std::string &topic) { this->custom_##name##_##type##_topic_ = topic; } \
37 std::string get_##name##_##type##_topic() const { \
38 if (this->custom_##name##_##type##_topic_.empty()) \
39 return this->get_default_topic_for_(#name "/" #type); \
40 return this->custom_##name##_##type##_topic_; \
43#define MQTT_COMPONENT_CUSTOM_TOPIC(name, type) MQTT_COMPONENT_CUSTOM_TOPIC_(name, type)
112 void set_availability(std::string topic, std::string payload_available, std::string payload_not_available);
123 bool publish(
const std::string &topic,
const std::string &payload);
178 virtual std::string
get_icon()
const;
StringRef is a reference to a string owned by something else.
MQTTComponent is the base class for all components that interact with MQTT to expose certain function...
void disable_availability()
std::unique_ptr< Availability > availability_
virtual bool is_internal()
bool is_connected_() const
void call_loop() override
MQTTComponent()
Constructs a MQTTComponent.
void set_custom_state_topic(const char *custom_state_topic)
Set a custom state topic. Set to "" for default behavior.
virtual bool is_disabled_by_default() const
Get whether the underlying Entity is disabled by default.
bool has_custom_command_topic_
std::string get_default_object_id_() const
Generate the Home Assistant MQTT discovery object id by automatically transforming the friendly name.
void set_qos(uint8_t qos)
Set QOS for state messages.
bool is_discovery_enabled() const
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.
void set_command_retain(bool command_retain)
Set whether command message should be retained.
bool send_discovery_()
Internal method to start sending discovery info, this will call send_discovery().
void set_subscribe_qos(uint8_t qos)
Set the QOS for subscribe messages (used in discovery).
virtual std::string unique_id()
A unique ID for this MQTT component, empty for no unique id.
void call_dump_config() override
StringRef custom_state_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.
void call_setup() override
Override setup_ so that we can call send_discovery() when needed.
bool publish_json(const std::string &topic, const json::json_build_t &f)
Construct and send a JSON MQTT message.
virtual std::string friendly_name() const
Get the friendly name of this MQTT component.
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 std::string get_icon() const
Get the icon field of this component.
virtual std::string component_type() const =0
Override this method to return the component type (e.g. "light", "sensor", ...)
void set_retain(bool retain)
Set whether state message should be retained.
virtual const EntityBase * get_entity() const =0
Gets the Entity served by this MQTT component.
std::string get_state_topic_() const
Get the MQTT topic that new states will be shared to.
virtual void send_discovery(JsonObject root, SendDiscoveryConfig &config)=0
Send discovery info the Home Assistant, override this.
bool has_custom_state_topic_
virtual bool send_initial_state()=0
void disable_discovery()
Disable discovery. Sets friendly name to "".
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 set_custom_command_topic(const char *custom_command_topic)
Set a custom command topic. Set to "" for default behavior.
std::string get_command_topic_() const
Get the MQTT topic for listening to commands.
void subscribe(const std::string &topic, mqtt_callback_t callback, uint8_t qos=0)
Subscribe to a MQTT topic.
StringRef custom_command_topic_
std::function< void(JsonObject)> json_build_t
Callback function typedef for building JsonObjects.
std::function< void(const std::string &, JsonObject)> mqtt_json_callback_t
std::function< void(const std::string &, const std::string &)> mqtt_callback_t
Callback for MQTT subscriptions.
Providing packet encoding functions for exchanging data with a remote host.
Internal struct for MQTT Home Assistant discovery.
Simple Helper struct used for Home Assistant MQTT send_discovery().
bool command_topic
If the command topic should be included. Default to true.
bool state_topic
If the state topic should be included. Defaults to true.