22 #define LOG_MQTT_COMPONENT(state_topic, command_topic) \ 24 ESP_LOGCONFIG(TAG, " State Topic: '%s'", this->get_state_topic_().c_str()); \ 26 if (command_topic) { \ 27 ESP_LOGCONFIG(TAG, " Command Topic: '%s'", this->get_command_topic_().c_str()); \ 30 #define MQTT_COMPONENT_CUSTOM_TOPIC_(name, type) \ 32 std::string custom_##name##_##type##_topic_{}; \ 35 void set_custom_##name##_##type##_topic(const std::string &topic) { this->custom_##name##_##type##_topic_ = topic; } \ 36 std::string get_##name##_##type##_topic() const { \ 37 if (this->custom_##name##_##type##_topic_.empty()) \ 38 return this->get_default_topic_for_(#name "/" #type); \ 39 return this->custom_##name##_##type##_topic_; \ 42 #define MQTT_COMPONENT_CUSTOM_TOPIC(name, type) MQTT_COMPONENT_CUSTOM_TOPIC_(name, type) 66 void call_setup()
override;
68 void call_loop()
override;
70 void call_dump_config()
override;
75 virtual bool send_initial_state() = 0;
77 virtual bool is_internal();
80 void set_retain(
bool retain);
81 bool get_retain()
const;
84 void disable_discovery();
85 bool is_discovery_enabled()
const;
88 virtual std::string component_type()
const = 0;
91 void set_custom_state_topic(
const std::string &custom_state_topic);
93 void set_custom_command_topic(
const std::string &custom_command_topic);
95 void set_command_retain(
bool command_retain);
98 float get_setup_priority()
const override;
104 void set_availability(std::string topic, std::string payload_available, std::string payload_not_available);
105 void disable_availability();
108 void schedule_resend_state();
115 bool publish(
const std::string &topic,
const std::string &payload);
130 void subscribe(
const std::string &topic,
mqtt_callback_t callback, uint8_t qos = 0);
141 void subscribe_json(
const std::string &topic,
const mqtt_json_callback_t &callback, uint8_t qos = 0);
152 std::string get_default_topic_for_(
const std::string &suffix)
const;
157 virtual const EntityBase *get_entity()
const = 0;
164 virtual std::string unique_id();
167 virtual std::string friendly_name()
const;
170 virtual std::string get_icon()
const;
173 virtual bool is_disabled_by_default()
const;
176 std::string get_state_topic_()
const;
179 std::string get_command_topic_()
const;
181 bool is_connected_()
const;
184 bool send_discovery_();
189 std::string get_default_object_id_()
const;
191 std::string custom_state_topic_{};
192 std::string custom_command_topic_{};
193 bool has_custom_state_topic_{
false};
194 bool has_custom_command_topic_{
false};
196 bool command_retain_{
false};
198 bool discovery_enabled_{
true};
200 bool resend_state_{
false};
Internal struct for MQTT Home Assistant discovery.
std::function< void(const std::string &, const std::string &)> mqtt_callback_t
Callback for MQTT subscriptions.
bool state_topic
If the state topic should be included. Defaults to true.
bool command_topic
If the command topic should be included. Default to true.
Simple Helper struct used for Home Assistant MQTT send_discovery().
std::function< void(JsonObject)> json_build_t
Callback function typedef for building JsonObjects.
std::unique_ptr< Availability > availability_
Implementation of SPI Controller mode.
std::function< void(const std::string &, JsonObject)> mqtt_json_callback_t
MQTTComponent is the base class for all components that interact with MQTT to expose certain function...