14#elif defined(USE_ESP8266)
16#elif defined(USE_LIBRETINY)
19#include "lwip/ip_addr.h"
35using mqtt_callback_t = std::function<void(
const std::string &,
const std::string &)>;
137#if ASYNC_TCP_SSL_ENABLED
168 void set_topic_prefix(
const std::string &topic_prefix,
const std::string &check_topic_prefix);
219 bool publish(
const std::string &topic,
const std::string &payload, uint8_t qos = 0,
bool retain =
false);
221 bool publish(
const std::string &topic,
const char *payload,
size_t payload_length, uint8_t qos = 0,
222 bool retain =
false);
240 void on_message(
const std::string &topic,
const std::string &payload);
277#if defined(USE_ESP8266) && LWIP_VERSION_MAJOR == 1
304 .prefix =
"homeassistant",
317#if defined(USE_ESP32)
319#elif defined(USE_ESP8266)
321#elif defined(USE_LIBRETINY)
361 topic, [
this](
const std::string &topic, JsonObject root) { this->
trigger(root); }, qos);
382 TEMPLATABLE_VALUE(std::string, topic)
383 TEMPLATABLE_VALUE(std::string, payload)
384 TEMPLATABLE_VALUE(uint8_t, qos)
385 TEMPLATABLE_VALUE(
bool, retain)
387 void play(Ts...
x)
override {
388 this->parent_->publish(this->topic_.value(
x...), this->payload_.value(
x...), this->qos_.value(
x...),
389 this->retain_.value(
x...));
393 MQTTClientComponent *parent_;
403 void set_payload(std::function<
void(Ts..., JsonObject)> payload) { this->
payload_ = payload; }
407 auto topic = this->topic_.value(
x...);
408 auto qos = this->qos_.value(
x...);
409 auto retain = this->retain_.value(
x...);
virtual void play(Ts... x)=0
Base class for all automation conditions.
void set_ca_certificate(const std::string &cert)
void set_cl_key(const std::string &key)
void set_cl_certificate(const std::string &cert)
void set_skip_cert_cn_check(bool skip_check)
void set_birth_message(MQTTMessage &&message)
Set the birth message.
MQTTMessage shutdown_message_
bool is_log_message_enabled() const
void start_connect_()
Reconnect to the MQTT broker if not already connected.
void setup() override
Setup the MQTT client, registering a bunch of callbacks and attempting to connect.
void set_password(const std::string &password)
void set_clean_session(const bool &clean_session)
void disable_discovery()
Globally disable Home Assistant discovery.
void recalculate_availability_()
Re-calculate the availability property.
void set_discovery_info(std::string &&prefix, MQTTDiscoveryUniqueIdGenerator unique_id_generator, MQTTDiscoveryObjectIdGenerator object_id_generator, bool retain, bool discover_ip, bool clean=false)
Set the Home Assistant discovery info.
void set_reboot_timeout(uint32_t reboot_timeout)
bool can_proceed() override
float get_setup_priority() const override
MQTT client setup priority.
void disable_log_message()
Get the topic used for logging. Defaults to "<topic_prefix>/debug" and the value is cached for speed.
const std::string & get_topic_prefix() const
Get the topic prefix of this device, using default if necessary.
void set_cl_certificate(const char *cert)
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 register_mqtt_component(MQTTComponent *component)
bool is_discovery_ip_enabled() const
void set_last_will(MQTTMessage &&message)
Set the last will testament message.
void set_skip_cert_cn_check(bool skip_check)
bool publish(const MQTTMessage &message)
Publish a MQTTMessage.
const MQTTDiscoveryInfo & get_discovery_info() const
Get Home Assistant discovery info.
void add_ssl_fingerprint(const std::array< uint8_t, SHA1_SIZE > &fingerprint)
Add a SSL fingerprint to use for TCP SSL connections to the MQTT broker.
void disable_birth_message()
Remove the birth message.
static void dns_found_callback(const char *name, ip_addr_t *ipaddr, void *callback_arg)
void subscribe(const std::string &topic, mqtt_callback_t callback, uint8_t qos=0)
Subscribe to an MQTT topic and call callback when a message is received.
void set_broker_address(const std::string &address)
void on_shutdown() override
MQTTMessage last_will_
The last will message.
void set_topic_prefix(const std::string &topic_prefix, const std::string &check_topic_prefix)
Set the topic prefix that will be prepended to all topics together with "/".
void set_shutdown_message(MQTTMessage &&message)
MQTTBackendLibreTiny mqtt_backend_
MQTTMessage birth_message_
The birth message (e.g.
MQTTCredentials credentials_
std::vector< MQTTComponent * > children_
void dump_config() override
void set_on_connect(mqtt_on_connect_callback_t &&callback)
static void dns_found_callback(const char *name, const ip_addr_t *ipaddr, void *callback_arg)
void set_ca_certificate(const char *cert)
bool publish(const std::string &topic, const std::string &payload, uint8_t qos=0, bool retain=false)
Publish a MQTT message.
void set_enable_on_boot(bool enable_on_boot)
void set_cl_key(const char *key)
optional< MQTTClientDisconnectReason > disconnect_reason_
bool is_publish_nan_as_none() const
void set_username(const std::string &username)
void resubscribe_subscriptions_()
void disable_shutdown_message()
void unsubscribe(const std::string &topic)
Unsubscribe from an MQTT topic.
void set_publish_nan_as_none(bool publish_nan_as_none)
void on_message(const std::string &topic, const std::string &payload)
void set_log_message_template(MQTTMessage &&message)
Manually set the topic used for logging.
void set_log_level(int level)
MQTTBackendESP8266 mqtt_backend_
void resubscribe_subscription_(MQTTSubscription *sub)
void set_on_disconnect(mqtt_on_disconnect_callback_t &&callback)
bool subscribe_(const char *topic, uint8_t qos)
bool publish_nan_as_none_
void set_broker_port(uint16_t port)
const Availability & get_availability()
std::string topic_prefix_
std::vector< MQTTSubscription > subscriptions_
bool publish_json(const std::string &topic, const json::json_build_t &f, uint8_t qos=0, bool retain=false)
Construct and send a JSON MQTT message.
bool is_discovery_enabled() const
MQTTBackendESP32 mqtt_backend_
void set_client_id(const std::string &client_id)
void disable_last_will()
Remove the last will testament message.
void set_keep_alive(uint16_t keep_alive_s)
Set the keep alive time in seconds, every 0.7*keep_alive a ping will be sent.
void loop() override
Reconnect if required.
std::string payload_buffer_
MQTTDiscoveryInfo discovery_info_
The discovery info options for Home Assistant.
Availability availability_
Caches availability.
bool publish(const std::string &topic, const char *payload, size_t payload_length, uint8_t qos=0, bool retain=false)
MQTTComponent is the base class for all components that interact with MQTT to expose certain function...
MQTTConnectTrigger(MQTTClientComponent *&client)
MQTTConnectedCondition(MQTTClientComponent *parent)
bool check(Ts... x) override
MQTTClientComponent * parent_
MQTTDisableAction(MQTTClientComponent *parent)
void play(Ts... x) override
MQTTClientComponent * parent_
MQTTDisconnectTrigger(MQTTClientComponent *&client)
MQTTEnableAction(MQTTClientComponent *parent)
MQTTClientComponent * parent_
void play(Ts... x) override
MQTTJsonMessageTrigger(const std::string &topic, uint8_t qos)
void set_qos(uint8_t qos)
MQTTMessageTrigger(std::string topic)
float get_setup_priority() const override
void dump_config() override
void set_payload(const std::string &payload)
optional< std::string > payload_
MQTTPublishAction(MQTTClientComponent *parent)
TEMPLATABLE_VALUE(std::string, topic) TEMPLATABLE_VALUE(uint8_t
MQTTPublishJsonAction(MQTTClientComponent *parent)
void encode_(Ts... x, JsonObject root)
void play(Ts... x) override
MQTTClientComponent * parent_
std::function< void(Ts..., JsonObject)> payload_
std::function< void(JsonObject)> json_build_t
Callback function typedef for building JsonObjects.
std::function< MQTTBackend::on_disconnect_callback_t > mqtt_on_disconnect_callback_t
MQTTDiscoveryObjectIdGenerator
available discovery object_id generators
@ MQTT_DEVICE_NAME_OBJECT_ID_GENERATOR
@ MQTT_NONE_OBJECT_ID_GENERATOR
MQTTDiscoveryUniqueIdGenerator
available discovery unique_id generators
@ MQTT_MAC_ADDRESS_UNIQUE_ID_GENERATOR
@ MQTT_LEGACY_UNIQUE_ID_GENERATOR
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.
MQTTClientDisconnectReason
MQTTClientComponent * global_mqtt_client
@ MQTT_CLIENT_DISCONNECTED
@ MQTT_CLIENT_RESOLVING_ADDRESS
std::function< MQTTBackend::on_connect_callback_t > mqtt_on_connect_callback_t
Callback for MQTT events.
Providing packet encoding functions for exchanging data with a remote host.
Simple data struct for Home Assistant component availability.
std::string payload_not_available
std::string topic
Empty means disabled.
std::string payload_available
internal struct for MQTT credentials.
uint16_t port
The port number of the server.
std::string address
The address of the server without port number.
bool clean_session
Whether the session will be cleaned or remembered between connects.
std::string client_id
The client ID. Will automatically be truncated to 23 characters.
Internal struct for MQTT Home Assistant discovery.
MQTTDiscoveryUniqueIdGenerator unique_id_generator
bool discover_ip
Enable the Home Assistant device discovery.
std::string prefix
The Home Assistant discovery prefix. Empty means disabled.
MQTTDiscoveryObjectIdGenerator object_id_generator
bool retain
Whether to retain discovery messages.
internal struct for MQTT messages.
internal struct for MQTT subscriptions.
uint32_t resubscribe_timeout