mirror of
https://github.com/esphome/esphome.git
synced 2024-11-21 22:48:10 +01:00
Move MQTT ip discovery to deticated config option. (#6673)
This commit is contained in:
parent
fbc830176f
commit
368662969e
3 changed files with 28 additions and 4 deletions
|
@ -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,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue