mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	[mqtt] Reduce flash usage by optimizing ArduinoJson assignments
This commit is contained in:
		| @@ -140,11 +140,8 @@ void MQTTClientComponent::send_device_info_() { | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_API_NOISE | #ifdef USE_API_NOISE | ||||||
|         if (api::global_api_server->get_noise_ctx()->has_psk()) { |         root[api::global_api_server->get_noise_ctx()->has_psk() ? "api_encryption" : "api_encryption_supported"] = | ||||||
|           root["api_encryption"] = "Noise_NNpsk0_25519_ChaChaPoly_SHA256"; |             "Noise_NNpsk0_25519_ChaChaPoly_SHA256"; | ||||||
|         } else { |  | ||||||
|           root["api_encryption_supported"] = "Noise_NNpsk0_25519_ChaChaPoly_SHA256"; |  | ||||||
|         } |  | ||||||
| #endif | #endif | ||||||
|       }, |       }, | ||||||
|       2, this->discovery_info_.retain); |       2, this->discovery_info_.retain); | ||||||
|   | |||||||
| @@ -85,24 +85,20 @@ bool MQTTComponent::send_discovery_() { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Fields from EntityBase |         // Fields from EntityBase | ||||||
|         if (this->get_entity()->has_own_name()) { |         root[MQTT_NAME] = this->get_entity()->has_own_name() ? this->friendly_name() : ""; | ||||||
|           root[MQTT_NAME] = this->friendly_name(); |  | ||||||
|         } else { |  | ||||||
|           root[MQTT_NAME] = ""; |  | ||||||
|         } |  | ||||||
|         if (this->is_disabled_by_default()) |         if (this->is_disabled_by_default()) | ||||||
|           root[MQTT_ENABLED_BY_DEFAULT] = false; |           root[MQTT_ENABLED_BY_DEFAULT] = false; | ||||||
|         if (!this->get_icon().empty()) |         if (!this->get_icon().empty()) | ||||||
|           root[MQTT_ICON] = this->get_icon(); |           root[MQTT_ICON] = this->get_icon(); | ||||||
|  |  | ||||||
|         switch (this->get_entity()->get_entity_category()) { |         const auto entity_category = this->get_entity()->get_entity_category(); | ||||||
|  |         switch (entity_category) { | ||||||
|           case ENTITY_CATEGORY_NONE: |           case ENTITY_CATEGORY_NONE: | ||||||
|             break; |             break; | ||||||
|           case ENTITY_CATEGORY_CONFIG: |           case ENTITY_CATEGORY_CONFIG: | ||||||
|             root[MQTT_ENTITY_CATEGORY] = "config"; |  | ||||||
|             break; |  | ||||||
|           case ENTITY_CATEGORY_DIAGNOSTIC: |           case ENTITY_CATEGORY_DIAGNOSTIC: | ||||||
|             root[MQTT_ENTITY_CATEGORY] = "diagnostic"; |             root[MQTT_ENTITY_CATEGORY] = entity_category == ENTITY_CATEGORY_CONFIG ? "config" : "diagnostic"; | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -113,20 +109,14 @@ bool MQTTComponent::send_discovery_() { | |||||||
|         if (this->command_retain_) |         if (this->command_retain_) | ||||||
|           root[MQTT_COMMAND_RETAIN] = true; |           root[MQTT_COMMAND_RETAIN] = true; | ||||||
|  |  | ||||||
|         if (this->availability_ == nullptr) { |         const Availability &avail = | ||||||
|           if (!global_mqtt_client->get_availability().topic.empty()) { |             this->availability_ == nullptr ? global_mqtt_client->get_availability() : *this->availability_; | ||||||
|             root[MQTT_AVAILABILITY_TOPIC] = global_mqtt_client->get_availability().topic; |         if (!avail.topic.empty()) { | ||||||
|             if (global_mqtt_client->get_availability().payload_available != "online") |           root[MQTT_AVAILABILITY_TOPIC] = avail.topic; | ||||||
|               root[MQTT_PAYLOAD_AVAILABLE] = global_mqtt_client->get_availability().payload_available; |           if (avail.payload_available != "online") | ||||||
|             if (global_mqtt_client->get_availability().payload_not_available != "offline") |             root[MQTT_PAYLOAD_AVAILABLE] = avail.payload_available; | ||||||
|               root[MQTT_PAYLOAD_NOT_AVAILABLE] = global_mqtt_client->get_availability().payload_not_available; |           if (avail.payload_not_available != "offline") | ||||||
|           } |             root[MQTT_PAYLOAD_NOT_AVAILABLE] = avail.payload_not_available; | ||||||
|         } else if (!this->availability_->topic.empty()) { |  | ||||||
|           root[MQTT_AVAILABILITY_TOPIC] = this->availability_->topic; |  | ||||||
|           if (this->availability_->payload_available != "online") |  | ||||||
|             root[MQTT_PAYLOAD_AVAILABLE] = this->availability_->payload_available; |  | ||||||
|           if (this->availability_->payload_not_available != "offline") |  | ||||||
|             root[MQTT_PAYLOAD_NOT_AVAILABLE] = this->availability_->payload_not_available; |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         const MQTTDiscoveryInfo &discovery_info = global_mqtt_client->get_discovery_info(); |         const MQTTDiscoveryInfo &discovery_info = global_mqtt_client->get_discovery_info(); | ||||||
| @@ -145,10 +135,7 @@ bool MQTTComponent::send_discovery_() { | |||||||
|         if (discovery_info.object_id_generator == MQTT_DEVICE_NAME_OBJECT_ID_GENERATOR) |         if (discovery_info.object_id_generator == MQTT_DEVICE_NAME_OBJECT_ID_GENERATOR) | ||||||
|           root[MQTT_OBJECT_ID] = node_name + "_" + this->get_default_object_id_(); |           root[MQTT_OBJECT_ID] = node_name + "_" + this->get_default_object_id_(); | ||||||
|  |  | ||||||
|         std::string node_friendly_name = App.get_friendly_name(); |         const std::string &node_friendly_name = App.get_friendly_name().empty() ? node_name : App.get_friendly_name(); | ||||||
|         if (node_friendly_name.empty()) { |  | ||||||
|           node_friendly_name = node_name; |  | ||||||
|         } |  | ||||||
|         std::string node_area = App.get_area(); |         std::string node_area = App.get_area(); | ||||||
|  |  | ||||||
|         JsonObject device_info = root[MQTT_DEVICE].to<JsonObject>(); |         JsonObject device_info = root[MQTT_DEVICE].to<JsonObject>(); | ||||||
| @@ -158,13 +145,9 @@ bool MQTTComponent::send_discovery_() { | |||||||
| #ifdef ESPHOME_PROJECT_NAME | #ifdef ESPHOME_PROJECT_NAME | ||||||
|         device_info[MQTT_DEVICE_SW_VERSION] = ESPHOME_PROJECT_VERSION " (ESPHome " ESPHOME_VERSION ")"; |         device_info[MQTT_DEVICE_SW_VERSION] = ESPHOME_PROJECT_VERSION " (ESPHome " ESPHOME_VERSION ")"; | ||||||
|         const char *model = std::strchr(ESPHOME_PROJECT_NAME, '.'); |         const char *model = std::strchr(ESPHOME_PROJECT_NAME, '.'); | ||||||
|         if (model == nullptr) {  // must never happen but check anyway |         device_info[MQTT_DEVICE_MODEL] = model == nullptr ? ESPHOME_BOARD : model + 1; | ||||||
|           device_info[MQTT_DEVICE_MODEL] = ESPHOME_BOARD; |         device_info[MQTT_DEVICE_MANUFACTURER] = | ||||||
|           device_info[MQTT_DEVICE_MANUFACTURER] = ESPHOME_PROJECT_NAME; |             model == nullptr ? ESPHOME_PROJECT_NAME : std::string(ESPHOME_PROJECT_NAME, model - ESPHOME_PROJECT_NAME); | ||||||
|         } else { |  | ||||||
|           device_info[MQTT_DEVICE_MODEL] = model + 1; |  | ||||||
|           device_info[MQTT_DEVICE_MANUFACTURER] = std::string(ESPHOME_PROJECT_NAME, model - ESPHOME_PROJECT_NAME); |  | ||||||
|         } |  | ||||||
| #else | #else | ||||||
|         device_info[MQTT_DEVICE_SW_VERSION] = ESPHOME_VERSION " (" + App.get_compilation_time() + ")"; |         device_info[MQTT_DEVICE_SW_VERSION] = ESPHOME_VERSION " (" + App.get_compilation_time() + ")"; | ||||||
|         device_info[MQTT_DEVICE_MODEL] = ESPHOME_BOARD; |         device_info[MQTT_DEVICE_MODEL] = ESPHOME_BOARD; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user