Move MQTT ip discovery to deticated config option. (#6673)

This commit is contained in:
Markus 2024-07-21 23:36:46 +02:00 committed by GitHub
parent fbc830176f
commit 368662969e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 28 additions and 4 deletions

View file

@ -61,6 +61,7 @@ def AUTO_LOAD():
return ["json"] return ["json"]
CONF_DISCOVER_IP = "discover_ip"
CONF_IDF_SEND_ASYNC = "idf_send_async" CONF_IDF_SEND_ASYNC = "idf_send_async"
CONF_SKIP_CERT_CN_CHECK = "skip_cert_cn_check" CONF_SKIP_CERT_CN_CHECK = "skip_cert_cn_check"
@ -225,6 +226,7 @@ CONFIG_SCHEMA = cv.All(
cv.boolean, cv.one_of("CLEAN", upper=True) cv.boolean, cv.one_of("CLEAN", upper=True)
), ),
cv.Optional(CONF_DISCOVERY_RETAIN, default=True): cv.boolean, cv.Optional(CONF_DISCOVERY_RETAIN, default=True): cv.boolean,
cv.Optional(CONF_DISCOVER_IP, default=True): cv.boolean,
cv.Optional( cv.Optional(
CONF_DISCOVERY_PREFIX, default="homeassistant" CONF_DISCOVERY_PREFIX, default="homeassistant"
): cv.publish_topic, ): cv.publish_topic,
@ -328,8 +330,12 @@ async def to_code(config):
discovery_prefix = config[CONF_DISCOVERY_PREFIX] discovery_prefix = config[CONF_DISCOVERY_PREFIX]
discovery_unique_id_generator = config[CONF_DISCOVERY_UNIQUE_ID_GENERATOR] discovery_unique_id_generator = config[CONF_DISCOVERY_UNIQUE_ID_GENERATOR]
discovery_object_id_generator = config[CONF_DISCOVERY_OBJECT_ID_GENERATOR] discovery_object_id_generator = config[CONF_DISCOVERY_OBJECT_ID_GENERATOR]
discover_ip = config[CONF_DISCOVER_IP]
if not discovery: if not discovery:
discovery_prefix = ""
if not discovery and not discover_ip:
cg.add(var.disable_discovery()) cg.add(var.disable_discovery())
elif discovery == "CLEAN": elif discovery == "CLEAN":
cg.add( cg.add(
@ -338,6 +344,7 @@ async def to_code(config):
discovery_unique_id_generator, discovery_unique_id_generator,
discovery_object_id_generator, discovery_object_id_generator,
discovery_retain, discovery_retain,
discover_ip,
True, True,
) )
) )
@ -348,6 +355,7 @@ async def to_code(config):
discovery_unique_id_generator, discovery_unique_id_generator,
discovery_object_id_generator, discovery_object_id_generator,
discovery_retain, discovery_retain,
discover_ip,
) )
) )

View file

@ -66,7 +66,7 @@ void MQTTClientComponent::setup() {
} }
#endif #endif
if (this->is_discovery_enabled()) { if (this->is_discovery_ip_enabled()) {
this->subscribe( this->subscribe(
"esphome/discover", [this](const std::string &topic, const std::string &payload) { this->send_device_info_(); }, "esphome/discover", [this](const std::string &topic, const std::string &payload) { this->send_device_info_(); },
2); 2);
@ -82,7 +82,7 @@ void MQTTClientComponent::setup() {
} }
void MQTTClientComponent::send_device_info_() { void MQTTClientComponent::send_device_info_() {
if (!this->is_connected() or !this->is_discovery_enabled()) { if (!this->is_connected() or !this->is_discovery_ip_enabled()) {
return; return;
} }
std::string topic = "esphome/discover/"; std::string topic = "esphome/discover/";
@ -99,6 +99,9 @@ void MQTTClientComponent::send_device_info_() {
} }
} }
root["name"] = App.get_name(); root["name"] = App.get_name();
if (!App.get_friendly_name().empty()) {
root["friendly_name"] = App.get_friendly_name();
}
#ifdef USE_API #ifdef USE_API
root["port"] = api::global_api_server->get_port(); root["port"] = api::global_api_server->get_port();
#endif #endif
@ -130,6 +133,10 @@ void MQTTClientComponent::send_device_info_() {
#ifdef USE_DASHBOARD_IMPORT #ifdef USE_DASHBOARD_IMPORT
root["package_import_url"] = dashboard_import::get_package_import_url(); root["package_import_url"] = dashboard_import::get_package_import_url();
#endif #endif
#ifdef USE_API_NOISE
root["api_encryption"] = "Noise_NNpsk0_25519_ChaChaPoly_SHA256";
#endif
}, },
2, this->discovery_info_.retain); 2, this->discovery_info_.retain);
} }
@ -140,6 +147,9 @@ void MQTTClientComponent::dump_config() {
this->ip_.str().c_str()); this->ip_.str().c_str());
ESP_LOGCONFIG(TAG, " Username: " LOG_SECRET("'%s'"), this->credentials_.username.c_str()); ESP_LOGCONFIG(TAG, " Username: " LOG_SECRET("'%s'"), this->credentials_.username.c_str());
ESP_LOGCONFIG(TAG, " Client ID: " LOG_SECRET("'%s'"), this->credentials_.client_id.c_str()); ESP_LOGCONFIG(TAG, " Client ID: " LOG_SECRET("'%s'"), this->credentials_.client_id.c_str());
if (this->is_discovery_ip_enabled()) {
ESP_LOGCONFIG(TAG, " Discovery IP enabled");
}
if (!this->discovery_info_.prefix.empty()) { if (!this->discovery_info_.prefix.empty()) {
ESP_LOGCONFIG(TAG, " Discovery prefix: '%s'", this->discovery_info_.prefix.c_str()); ESP_LOGCONFIG(TAG, " Discovery prefix: '%s'", this->discovery_info_.prefix.c_str());
ESP_LOGCONFIG(TAG, " Discovery retain: %s", YESNO(this->discovery_info_.retain)); ESP_LOGCONFIG(TAG, " Discovery retain: %s", YESNO(this->discovery_info_.retain));
@ -581,6 +591,7 @@ void MQTTClientComponent::disable_shutdown_message() {
this->recalculate_availability_(); this->recalculate_availability_();
} }
bool MQTTClientComponent::is_discovery_enabled() const { return !this->discovery_info_.prefix.empty(); } bool MQTTClientComponent::is_discovery_enabled() const { return !this->discovery_info_.prefix.empty(); }
bool MQTTClientComponent::is_discovery_ip_enabled() const { return this->discovery_info_.discover_ip; }
const Availability &MQTTClientComponent::get_availability() { return this->availability_; } const Availability &MQTTClientComponent::get_availability() { return this->availability_; }
void MQTTClientComponent::recalculate_availability_() { void MQTTClientComponent::recalculate_availability_() {
if (this->birth_message_.topic.empty() || this->birth_message_.topic != this->last_will_.topic) { if (this->birth_message_.topic.empty() || this->birth_message_.topic != this->last_will_.topic) {
@ -606,8 +617,9 @@ void MQTTClientComponent::set_shutdown_message(MQTTMessage &&message) { this->sh
void MQTTClientComponent::set_discovery_info(std::string &&prefix, MQTTDiscoveryUniqueIdGenerator unique_id_generator, void MQTTClientComponent::set_discovery_info(std::string &&prefix, MQTTDiscoveryUniqueIdGenerator unique_id_generator,
MQTTDiscoveryObjectIdGenerator object_id_generator, bool retain, MQTTDiscoveryObjectIdGenerator object_id_generator, bool retain,
bool clean) { bool discover_ip, bool clean) {
this->discovery_info_.prefix = std::move(prefix); this->discovery_info_.prefix = std::move(prefix);
this->discovery_info_.discover_ip = discover_ip;
this->discovery_info_.unique_id_generator = unique_id_generator; this->discovery_info_.unique_id_generator = unique_id_generator;
this->discovery_info_.object_id_generator = object_id_generator; this->discovery_info_.object_id_generator = object_id_generator;
this->discovery_info_.retain = retain; this->discovery_info_.retain = retain;

View file

@ -79,6 +79,7 @@ enum MQTTDiscoveryObjectIdGenerator {
struct MQTTDiscoveryInfo { struct MQTTDiscoveryInfo {
std::string prefix; ///< The Home Assistant discovery prefix. Empty means disabled. std::string prefix; ///< The Home Assistant discovery prefix. Empty means disabled.
bool retain; ///< Whether to retain discovery messages. bool retain; ///< Whether to retain discovery messages.
bool discover_ip; ///< Enable the Home Assistant device discovery.
bool clean; bool clean;
MQTTDiscoveryUniqueIdGenerator unique_id_generator; MQTTDiscoveryUniqueIdGenerator unique_id_generator;
MQTTDiscoveryObjectIdGenerator object_id_generator; MQTTDiscoveryObjectIdGenerator object_id_generator;
@ -122,12 +123,14 @@ class MQTTClientComponent : public Component {
* @param retain Whether to retain discovery messages. * @param retain Whether to retain discovery messages.
*/ */
void set_discovery_info(std::string &&prefix, MQTTDiscoveryUniqueIdGenerator unique_id_generator, void set_discovery_info(std::string &&prefix, MQTTDiscoveryUniqueIdGenerator unique_id_generator,
MQTTDiscoveryObjectIdGenerator object_id_generator, bool retain, bool clean = false); MQTTDiscoveryObjectIdGenerator object_id_generator, bool retain, bool discover_ip,
bool clean = false);
/// Get Home Assistant discovery info. /// Get Home Assistant discovery info.
const MQTTDiscoveryInfo &get_discovery_info() const; const MQTTDiscoveryInfo &get_discovery_info() const;
/// Globally disable Home Assistant discovery. /// Globally disable Home Assistant discovery.
void disable_discovery(); void disable_discovery();
bool is_discovery_enabled() const; bool is_discovery_enabled() const;
bool is_discovery_ip_enabled() const;
#if ASYNC_TCP_SSL_ENABLED #if ASYNC_TCP_SSL_ENABLED
/** Add a SSL fingerprint to use for TCP SSL connections to the MQTT broker. /** Add a SSL fingerprint to use for TCP SSL connections to the MQTT broker.
@ -290,6 +293,7 @@ class MQTTClientComponent : public Component {
MQTTDiscoveryInfo discovery_info_{ MQTTDiscoveryInfo discovery_info_{
.prefix = "homeassistant", .prefix = "homeassistant",
.retain = true, .retain = true,
.discover_ip = true,
.clean = false, .clean = false,
.unique_id_generator = MQTT_LEGACY_UNIQUE_ID_GENERATOR, .unique_id_generator = MQTT_LEGACY_UNIQUE_ID_GENERATOR,
.object_id_generator = MQTT_NONE_OBJECT_ID_GENERATOR, .object_id_generator = MQTT_NONE_OBJECT_ID_GENERATOR,