mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	Move MQTT ip discovery to deticated config option. (#6673)
This commit is contained in:
		| @@ -61,6 +61,7 @@ def AUTO_LOAD(): | ||||
|     return ["json"] | ||||
|  | ||||
|  | ||||
| CONF_DISCOVER_IP = "discover_ip" | ||||
| CONF_IDF_SEND_ASYNC = "idf_send_async" | ||||
| 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.Optional(CONF_DISCOVERY_RETAIN, default=True): cv.boolean, | ||||
|             cv.Optional(CONF_DISCOVER_IP, default=True): cv.boolean, | ||||
|             cv.Optional( | ||||
|                 CONF_DISCOVERY_PREFIX, default="homeassistant" | ||||
|             ): cv.publish_topic, | ||||
| @@ -328,8 +330,12 @@ async def to_code(config): | ||||
|     discovery_prefix = config[CONF_DISCOVERY_PREFIX] | ||||
|     discovery_unique_id_generator = config[CONF_DISCOVERY_UNIQUE_ID_GENERATOR] | ||||
|     discovery_object_id_generator = config[CONF_DISCOVERY_OBJECT_ID_GENERATOR] | ||||
|     discover_ip = config[CONF_DISCOVER_IP] | ||||
|  | ||||
|     if not discovery: | ||||
|         discovery_prefix = "" | ||||
|  | ||||
|     if not discovery and not discover_ip: | ||||
|         cg.add(var.disable_discovery()) | ||||
|     elif discovery == "CLEAN": | ||||
|         cg.add( | ||||
| @@ -338,6 +344,7 @@ async def to_code(config): | ||||
|                 discovery_unique_id_generator, | ||||
|                 discovery_object_id_generator, | ||||
|                 discovery_retain, | ||||
|                 discover_ip, | ||||
|                 True, | ||||
|             ) | ||||
|         ) | ||||
| @@ -348,6 +355,7 @@ async def to_code(config): | ||||
|                 discovery_unique_id_generator, | ||||
|                 discovery_object_id_generator, | ||||
|                 discovery_retain, | ||||
|                 discover_ip, | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|   | ||||
| @@ -66,7 +66,7 @@ void MQTTClientComponent::setup() { | ||||
|   } | ||||
| #endif | ||||
|  | ||||
|   if (this->is_discovery_enabled()) { | ||||
|   if (this->is_discovery_ip_enabled()) { | ||||
|     this->subscribe( | ||||
|         "esphome/discover", [this](const std::string &topic, const std::string &payload) { this->send_device_info_(); }, | ||||
|         2); | ||||
| @@ -82,7 +82,7 @@ void MQTTClientComponent::setup() { | ||||
| } | ||||
|  | ||||
| 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; | ||||
|   } | ||||
|   std::string topic = "esphome/discover/"; | ||||
| @@ -99,6 +99,9 @@ void MQTTClientComponent::send_device_info_() { | ||||
|           } | ||||
|         } | ||||
|         root["name"] = App.get_name(); | ||||
|         if (!App.get_friendly_name().empty()) { | ||||
|           root["friendly_name"] = App.get_friendly_name(); | ||||
|         } | ||||
| #ifdef USE_API | ||||
|         root["port"] = api::global_api_server->get_port(); | ||||
| #endif | ||||
| @@ -130,6 +133,10 @@ void MQTTClientComponent::send_device_info_() { | ||||
| #ifdef USE_DASHBOARD_IMPORT | ||||
|         root["package_import_url"] = dashboard_import::get_package_import_url(); | ||||
| #endif | ||||
|  | ||||
| #ifdef USE_API_NOISE | ||||
|         root["api_encryption"] = "Noise_NNpsk0_25519_ChaChaPoly_SHA256"; | ||||
| #endif | ||||
|       }, | ||||
|       2, this->discovery_info_.retain); | ||||
| } | ||||
| @@ -140,6 +147,9 @@ void MQTTClientComponent::dump_config() { | ||||
|                 this->ip_.str().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()); | ||||
|   if (this->is_discovery_ip_enabled()) { | ||||
|     ESP_LOGCONFIG(TAG, "  Discovery IP enabled"); | ||||
|   } | ||||
|   if (!this->discovery_info_.prefix.empty()) { | ||||
|     ESP_LOGCONFIG(TAG, "  Discovery prefix: '%s'", this->discovery_info_.prefix.c_str()); | ||||
|     ESP_LOGCONFIG(TAG, "  Discovery retain: %s", YESNO(this->discovery_info_.retain)); | ||||
| @@ -581,6 +591,7 @@ void MQTTClientComponent::disable_shutdown_message() { | ||||
|   this->recalculate_availability_(); | ||||
| } | ||||
| 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_; } | ||||
| void MQTTClientComponent::recalculate_availability_() { | ||||
|   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, | ||||
|                                              MQTTDiscoveryObjectIdGenerator object_id_generator, bool retain, | ||||
|                                              bool clean) { | ||||
|                                              bool discover_ip, bool clean) { | ||||
|   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_.object_id_generator = object_id_generator; | ||||
|   this->discovery_info_.retain = retain; | ||||
|   | ||||
| @@ -79,6 +79,7 @@ enum MQTTDiscoveryObjectIdGenerator { | ||||
| struct MQTTDiscoveryInfo { | ||||
|   std::string prefix;  ///< The Home Assistant discovery prefix. Empty means disabled. | ||||
|   bool retain;         ///< Whether to retain discovery messages. | ||||
|   bool discover_ip;    ///< Enable the Home Assistant device discovery. | ||||
|   bool clean; | ||||
|   MQTTDiscoveryUniqueIdGenerator unique_id_generator; | ||||
|   MQTTDiscoveryObjectIdGenerator object_id_generator; | ||||
| @@ -122,12 +123,14 @@ class MQTTClientComponent : public Component { | ||||
|    * @param retain Whether to retain discovery messages. | ||||
|    */ | ||||
|   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. | ||||
|   const MQTTDiscoveryInfo &get_discovery_info() const; | ||||
|   /// Globally disable Home Assistant discovery. | ||||
|   void disable_discovery(); | ||||
|   bool is_discovery_enabled() const; | ||||
|   bool is_discovery_ip_enabled() const; | ||||
|  | ||||
| #if ASYNC_TCP_SSL_ENABLED | ||||
|   /** 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_{ | ||||
|       .prefix = "homeassistant", | ||||
|       .retain = true, | ||||
|       .discover_ip = true, | ||||
|       .clean = false, | ||||
|       .unique_id_generator = MQTT_LEGACY_UNIQUE_ID_GENERATOR, | ||||
|       .object_id_generator = MQTT_NONE_OBJECT_ID_GENERATOR, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user