From 4ef86fe5341d6789074a89afcb49ab9d41d62860 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 8 Oct 2026 16:57:25 -1000 Subject: [PATCH] [core] Keep entity names in flash on ESP8266 On ESP8266 codegen emits entity names with PSTR and EntityBase::get_name() is removed there. get_name_to() copies the name into a caller buffer and get_log_name() returns it for %s log arguments; both exist on every platform. --- .../absolute_humidity/absolute_humidity.cpp | 7 +++-- esphome/components/adc/adc_sensor_common.cpp | 2 +- .../ads1115/sensor/ads1115_sensor.cpp | 2 +- .../ads1118/sensor/ads1118_sensor.cpp | 2 +- .../alarm_control_panel.cpp | 2 +- esphome/components/am43/cover/am43_cover.cpp | 29 ++++++++++--------- esphome/components/anova/anova.cpp | 8 +++-- esphome/components/api/api_connection.cpp | 3 +- esphome/components/aqi/aqi_sensor.cpp | 4 +-- esphome/components/atm90e32/atm90e32.cpp | 2 +- .../atm90e32/button/atm90e32_button.cpp | 27 +++++++++-------- .../bedjet/climate/bedjet_climate.cpp | 14 ++++----- esphome/components/bedjet/fan/bedjet_fan.cpp | 6 ++-- esphome/components/bh1750/bh1750.cpp | 4 +-- .../binary_sensor/binary_sensor.cpp | 4 +-- esphome/components/bl0940/bl0940.cpp | 2 +- .../ble_client/sensor/ble_rssi_sensor.cpp | 2 +- .../ble_client/sensor/ble_sensor.cpp | 14 ++++----- .../text_sensor/ble_text_sensor.cpp | 12 ++++---- esphome/components/button/button.cpp | 4 +-- esphome/components/climate/climate.cpp | 17 ++++++----- esphome/components/climate/climate.h | 2 +- .../components/combination/combination.cpp | 4 +-- esphome/components/cover/cover.cpp | 8 ++--- esphome/components/cover/cover.h | 2 +- .../components/dallas_temp/dallas_temp.cpp | 4 +-- esphome/components/datetime/date_entity.cpp | 4 +-- esphome/components/datetime/date_entity.h | 2 +- .../components/datetime/datetime_entity.cpp | 4 +-- esphome/components/datetime/datetime_entity.h | 2 +- esphome/components/datetime/time_entity.cpp | 4 +-- esphome/components/datetime/time_entity.h | 2 +- esphome/components/dew_point/dew_point.cpp | 7 +++-- .../duty_cycle/duty_cycle_sensor.cpp | 2 +- .../components/esp32_touch/esp32_touch.cpp | 13 +++++---- esphome/components/event/event.cpp | 4 +-- esphome/components/event/event.h | 2 +- esphome/components/fan/fan.cpp | 13 +++++---- esphome/components/fan/fan.h | 2 +- .../components/gpio/switch/gpio_switch.cpp | 2 +- .../button/homeassistant_button.cpp | 2 +- .../number/homeassistant_number.cpp | 8 ++--- .../select/homeassistant_select.cpp | 2 +- .../switch/homeassistant_switch.cpp | 2 +- .../homeassistant/text/homeassistant_text.cpp | 2 +- esphome/components/infrared/infrared.cpp | 2 +- esphome/components/ir_rf_base/ir_rf_base.cpp | 7 +++-- .../components/ir_rf_proxy/ir_rf_proxy.cpp | 4 +-- esphome/components/ld6002b/ld6002b.cpp | 4 +-- .../components/light/addressable_light.cpp | 2 +- esphome/components/light/light_call.cpp | 16 +++++----- esphome/components/light/light_state.cpp | 2 +- esphome/components/lock/lock.cpp | 10 +++---- esphome/components/lock/lock.h | 2 +- .../components/media_player/media_player.cpp | 4 +-- esphome/components/mlx90614/mlx90614.cpp | 2 +- .../number/modbus_number.cpp | 8 +++-- .../select/modbus_select.cpp | 3 +- .../switch/modbus_switch.cpp | 12 ++++---- .../mqtt/mqtt_alarm_control_panel.cpp | 8 ++--- .../components/mqtt/mqtt_binary_sensor.cpp | 2 +- esphome/components/mqtt/mqtt_button.cpp | 4 +-- esphome/components/mqtt/mqtt_component.cpp | 11 +++---- esphome/components/mqtt/mqtt_component.h | 2 +- esphome/components/mqtt/mqtt_cover.cpp | 2 +- esphome/components/mqtt/mqtt_date.cpp | 2 +- esphome/components/mqtt/mqtt_datetime.cpp | 2 +- esphome/components/mqtt/mqtt_event.cpp | 2 +- esphome/components/mqtt/mqtt_fan.cpp | 18 ++++++------ esphome/components/mqtt/mqtt_light.cpp | 2 +- esphome/components/mqtt/mqtt_lock.cpp | 4 +-- esphome/components/mqtt/mqtt_number.cpp | 2 +- esphome/components/mqtt/mqtt_select.cpp | 2 +- esphome/components/mqtt/mqtt_sensor.cpp | 2 +- esphome/components/mqtt/mqtt_switch.cpp | 5 ++-- esphome/components/mqtt/mqtt_text.cpp | 2 +- esphome/components/mqtt/mqtt_text_sensor.cpp | 2 +- esphome/components/mqtt/mqtt_time.cpp | 2 +- esphome/components/mqtt/mqtt_update.cpp | 4 +-- esphome/components/mqtt/mqtt_valve.cpp | 2 +- esphome/components/nau7802/nau7802.cpp | 2 +- esphome/components/number/number.cpp | 4 +-- esphome/components/number/number_call.cpp | 6 ++-- .../opentherm/switch/opentherm_switch.cpp | 4 +-- esphome/components/opt3001/opt3001.cpp | 2 +- esphome/components/pid/pid_climate.cpp | 7 +++-- .../prometheus/prometheus_handler.cpp | 5 +++- .../pulse_counter/pulse_counter_sensor.cpp | 4 +-- .../radio_frequency/radio_frequency.cpp | 2 +- esphome/components/scd4x/scd4x.cpp | 2 +- esphome/components/select/select.cpp | 6 ++-- esphome/components/select/select.h | 2 +- esphome/components/select/select_call.cpp | 4 +-- esphome/components/sensor/sensor.cpp | 8 ++--- esphome/components/sonoff_d1/sonoff_d1.cpp | 4 +-- esphome/components/sprinkler/sprinkler.cpp | 2 +- .../status_led/light/status_led_light.cpp | 4 +-- esphome/components/stcc4/stcc4.cpp | 6 ++-- esphome/components/switch/switch.cpp | 10 +++---- .../template_alarm_control_panel.cpp | 5 ++-- .../template/climate/template_climate.cpp | 13 +++++---- esphome/components/text/text.cpp | 4 +-- esphome/components/text/text.h | 2 +- esphome/components/text/text_call.cpp | 8 ++--- .../components/text_sensor/text_sensor.cpp | 8 ++--- .../components/uart/button/uart_button.cpp | 2 +- .../components/uart/switch/uart_switch.cpp | 4 +-- esphome/components/update/update_entity.cpp | 2 +- esphome/components/valve/valve.cpp | 12 ++++---- esphome/components/valve/valve.h | 2 +- esphome/components/veml3235/veml3235.cpp | 8 ++--- .../components/water_heater/water_heater.cpp | 24 ++++++++------- esphome/components/web_server/web_server.cpp | 6 ++-- .../components/web_server/web_server_v1.cpp | 6 ++-- .../xiaomi_mccgq02hl/xiaomi_mccgq02hl.cpp | 2 +- esphome/core/entity_base.cpp | 25 ++++++++++++++-- esphome/core/entity_base.h | 17 +++++++++-- esphome/core/entity_helpers.py | 11 ++++++- tests/components/light/common.yaml | 2 +- tests/unit_tests/core/test_entity_helpers.py | 23 +++++++++++++++ 120 files changed, 399 insertions(+), 297 deletions(-) diff --git a/esphome/components/absolute_humidity/absolute_humidity.cpp b/esphome/components/absolute_humidity/absolute_humidity.cpp index 36b6534c0de..c927afcd509 100644 --- a/esphome/components/absolute_humidity/absolute_humidity.cpp +++ b/esphome/components/absolute_humidity/absolute_humidity.cpp @@ -10,7 +10,7 @@ void AbsoluteHumidityComponent::setup() { this->temperature_ = state; this->enable_loop(); }); - ESP_LOGD(TAG, " Added callback for temperature '%s'", this->temperature_sensor_->get_name().c_str()); + ESP_LOGD(TAG, " Added callback for temperature '%s'", LOG_STR_ARG(this->temperature_sensor_->get_log_name())); // Get initial value if (this->temperature_sensor_->has_state()) { this->temperature_ = this->temperature_sensor_->get_state(); @@ -20,7 +20,7 @@ void AbsoluteHumidityComponent::setup() { this->humidity_ = state; this->enable_loop(); }); - ESP_LOGD(TAG, " Added callback for relative humidity '%s'", this->humidity_sensor_->get_name().c_str()); + ESP_LOGD(TAG, " Added callback for relative humidity '%s'", LOG_STR_ARG(this->humidity_sensor_->get_log_name())); // Get initial value if (this->humidity_sensor_->has_state()) { this->humidity_ = this->humidity_sensor_->get_state(); @@ -49,7 +49,8 @@ void AbsoluteHumidityComponent::dump_config() { "Sources\n" " Temperature: '%s'\n" " Relative Humidity: '%s'", - this->temperature_sensor_->get_name().c_str(), this->humidity_sensor_->get_name().c_str()); + LOG_STR_ARG(this->temperature_sensor_->get_log_name()), + LOG_STR_ARG(this->humidity_sensor_->get_log_name())); } void AbsoluteHumidityComponent::loop() { diff --git a/esphome/components/adc/adc_sensor_common.cpp b/esphome/components/adc/adc_sensor_common.cpp index dcb41382015..86c864ea2a1 100644 --- a/esphome/components/adc/adc_sensor_common.cpp +++ b/esphome/components/adc/adc_sensor_common.cpp @@ -66,7 +66,7 @@ template class Aggregator; void ADCSensor::update() { float value_v = this->sample(); - ESP_LOGV(TAG, "'%s': Voltage=%.4fV", this->get_name().c_str(), value_v); + ESP_LOGV(TAG, "'%s': Voltage=%.4fV", LOG_STR_ARG(this->get_log_name()), value_v); this->publish_state(value_v); } diff --git a/esphome/components/ads1115/sensor/ads1115_sensor.cpp b/esphome/components/ads1115/sensor/ads1115_sensor.cpp index 776346171b7..d2f18142970 100644 --- a/esphome/components/ads1115/sensor/ads1115_sensor.cpp +++ b/esphome/components/ads1115/sensor/ads1115_sensor.cpp @@ -13,7 +13,7 @@ float ADS1115Sensor::sample() { void ADS1115Sensor::update() { float v = this->sample(); if (!std::isnan(v)) { - ESP_LOGD(TAG, "'%s': Got Voltage=%fV", this->get_name().c_str(), v); + ESP_LOGD(TAG, "'%s': Got Voltage=%fV", LOG_STR_ARG(this->get_log_name()), v); this->publish_state(v); } } diff --git a/esphome/components/ads1118/sensor/ads1118_sensor.cpp b/esphome/components/ads1118/sensor/ads1118_sensor.cpp index 2b3d68d1f40..74d25214155 100644 --- a/esphome/components/ads1118/sensor/ads1118_sensor.cpp +++ b/esphome/components/ads1118/sensor/ads1118_sensor.cpp @@ -21,7 +21,7 @@ float ADS1118Sensor::sample() { void ADS1118Sensor::update() { float v = this->sample(); if (!std::isnan(v)) { - ESP_LOGD(TAG, "'%s': Got Voltage=%fV", this->get_name().c_str(), v); + ESP_LOGD(TAG, "'%s': Got Voltage=%fV", LOG_STR_ARG(this->get_log_name()), v); this->publish_state(v); } } diff --git a/esphome/components/alarm_control_panel/alarm_control_panel.cpp b/esphome/components/alarm_control_panel/alarm_control_panel.cpp index 6f23b1aca89..730cb80fd17 100644 --- a/esphome/components/alarm_control_panel/alarm_control_panel.cpp +++ b/esphome/components/alarm_control_panel/alarm_control_panel.cpp @@ -31,7 +31,7 @@ void AlarmControlPanel::publish_state(AlarmControlPanelState state) { this->last_update_ = millis(); if (state != this->current_state_) { auto prev_state = this->current_state_; - ESP_LOGV(TAG, "'%s' >> %s (was %s)", this->get_name().c_str(), + ESP_LOGV(TAG, "'%s' >> %s (was %s)", LOG_STR_ARG(this->get_log_name()), LOG_STR_ARG(alarm_control_panel_state_to_string(state)), LOG_STR_ARG(alarm_control_panel_state_to_string(prev_state))); this->current_state_ = state; diff --git a/esphome/components/am43/cover/am43_cover.cpp b/esphome/components/am43/cover/am43_cover.cpp index 6fb8c0c7eba..7fac19b50f1 100644 --- a/esphome/components/am43/cover/am43_cover.cpp +++ b/esphome/components/am43/cover/am43_cover.cpp @@ -30,9 +30,9 @@ void Am43Component::loop() { auto status = esp_ble_gattc_write_char(this->parent_->get_gattc_if(), this->parent_->get_conn_id(), this->char_handle_, packet->length, packet->data, ESP_GATT_WRITE_TYPE_NO_RSP, ESP_GATT_AUTH_REQ_NONE); - ESP_LOGI(TAG, "[%s] Logging into AM43", this->get_name().c_str()); + ESP_LOGI(TAG, "[%s] Logging into AM43", LOG_STR_ARG(this->get_log_name())); if (status) { - ESP_LOGW(TAG, "[%s] Error writing set_pin to device, error = %d", this->get_name().c_str(), status); + ESP_LOGW(TAG, "[%s] Error writing set_pin to device, error = %d", LOG_STR_ARG(this->get_log_name()), status); } else { this->logged_in_ = true; } @@ -50,7 +50,7 @@ CoverTraits Am43Component::get_traits() { void Am43Component::control(const CoverCall &call) { if (this->node_state != espbt::ClientState::ESTABLISHED) { - ESP_LOGW(TAG, "[%s] Cannot send cover control, not connected", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] Cannot send cover control, not connected", LOG_STR_ARG(this->get_log_name())); return; } if (call.get_stop()) { @@ -59,7 +59,7 @@ void Am43Component::control(const CoverCall &call) { esp_ble_gattc_write_char(this->parent_->get_gattc_if(), this->parent_->get_conn_id(), this->char_handle_, packet->length, packet->data, ESP_GATT_WRITE_TYPE_NO_RSP, ESP_GATT_AUTH_REQ_NONE); if (status) { - ESP_LOGW(TAG, "[%s] Error writing stop command to device, error = %d", this->get_name().c_str(), status); + ESP_LOGW(TAG, "[%s] Error writing stop command to device, error = %d", LOG_STR_ARG(this->get_log_name()), status); } } auto opt_pos = call.get_position(); @@ -73,7 +73,8 @@ void Am43Component::control(const CoverCall &call) { esp_ble_gattc_write_char(this->parent_->get_gattc_if(), this->parent_->get_conn_id(), this->char_handle_, packet->length, packet->data, ESP_GATT_WRITE_TYPE_NO_RSP, ESP_GATT_AUTH_REQ_NONE); if (status) { - ESP_LOGW(TAG, "[%s] Error writing set_position command to device, error = %d", this->get_name().c_str(), status); + ESP_LOGW(TAG, "[%s] Error writing set_position command to device, error = %d", LOG_STR_ARG(this->get_log_name()), + status); } } } @@ -89,9 +90,9 @@ void Am43Component::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_ auto *chr = this->parent_->get_characteristic(AM43_SERVICE_UUID, AM43_CHARACTERISTIC_UUID); if (chr == nullptr) { if (this->parent_->get_characteristic(AM43_TUYA_SERVICE_UUID, AM43_TUYA_CHARACTERISTIC_UUID) != nullptr) { - ESP_LOGE(TAG, "[%s] Detected a Tuya AM43 which is not supported, sorry.", this->get_name().c_str()); + ESP_LOGE(TAG, "[%s] Detected a Tuya AM43 which is not supported, sorry.", LOG_STR_ARG(this->get_log_name())); } else { - ESP_LOGE(TAG, "[%s] No control service found at device, not an AM43..?", this->get_name().c_str()); + ESP_LOGE(TAG, "[%s] No control service found at device, not an AM43..?", LOG_STR_ARG(this->get_log_name())); } break; } @@ -100,7 +101,8 @@ void Am43Component::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_ auto status = esp_ble_gattc_register_for_notify(this->parent_->get_gattc_if(), this->parent_->get_remote_bda(), chr->handle); if (status) { - ESP_LOGW(TAG, "[%s] esp_ble_gattc_register_for_notify failed, status=%d", this->get_name().c_str(), status); + ESP_LOGW(TAG, "[%s] esp_ble_gattc_register_for_notify failed, status=%d", LOG_STR_ARG(this->get_log_name()), + status); } break; } @@ -126,25 +128,26 @@ void Am43Component::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_ if (this->decoder_->has_pin_response()) { if (this->decoder_->pin_ok_) { - ESP_LOGI(TAG, "[%s] AM43 pin accepted.", this->get_name().c_str()); + ESP_LOGI(TAG, "[%s] AM43 pin accepted.", LOG_STR_ARG(this->get_log_name())); auto *packet = this->encoder_->get_position_request(); auto status = esp_ble_gattc_write_char(this->parent_->get_gattc_if(), this->parent_->get_conn_id(), this->char_handle_, packet->length, packet->data, ESP_GATT_WRITE_TYPE_NO_RSP, ESP_GATT_AUTH_REQ_NONE); if (status) { - ESP_LOGW(TAG, "[%s] Error writing set_position to device, error = %d", this->get_name().c_str(), status); + ESP_LOGW(TAG, "[%s] Error writing set_position to device, error = %d", LOG_STR_ARG(this->get_log_name()), + status); } } else { - ESP_LOGW(TAG, "[%s] AM43 pin rejected!", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] AM43 pin rejected!", LOG_STR_ARG(this->get_log_name())); } } if (this->decoder_->has_set_position_response() && !this->decoder_->set_position_ok_) { - ESP_LOGW(TAG, "[%s] Got nack after sending set_position. Bad pin?", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] Got nack after sending set_position. Bad pin?", LOG_STR_ARG(this->get_log_name())); } if (this->decoder_->has_set_state_response() && !this->decoder_->set_state_ok_) { - ESP_LOGW(TAG, "[%s] Got nack after sending set_state. Bad pin?", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] Got nack after sending set_state. Bad pin?", LOG_STR_ARG(this->get_log_name())); } break; } diff --git a/esphome/components/anova/anova.cpp b/esphome/components/anova/anova.cpp index 28e2da93e93..72a29607599 100644 --- a/esphome/components/anova/anova.cpp +++ b/esphome/components/anova/anova.cpp @@ -67,8 +67,9 @@ void Anova::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_ case ESP_GATTC_SEARCH_CMPL_EVT: { auto *chr = this->parent_->get_characteristic(ANOVA_SERVICE_UUID, ANOVA_CHARACTERISTIC_UUID); if (chr == nullptr) { - ESP_LOGW(TAG, "[%s] No control service found at device, not an Anova..?", this->get_name().c_str()); - ESP_LOGW(TAG, "[%s] Note, this component does not currently support Anova Nano.", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] No control service found at device, not an Anova..?", LOG_STR_ARG(this->get_log_name())); + ESP_LOGW(TAG, "[%s] Note, this component does not currently support Anova Nano.", + LOG_STR_ARG(this->get_log_name())); break; } this->char_handle_ = chr->handle; @@ -76,7 +77,8 @@ void Anova::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_ auto status = esp_ble_gattc_register_for_notify(this->parent_->get_gattc_if(), this->parent_->get_remote_bda(), chr->handle); if (status) { - ESP_LOGW(TAG, "[%s] esp_ble_gattc_register_for_notify failed, status=%d", this->get_name().c_str(), status); + ESP_LOGW(TAG, "[%s] esp_ble_gattc_register_for_notify failed, status=%d", LOG_STR_ARG(this->get_log_name()), + status); } break; } diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index 940c8847edd..031b93bbd72 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -473,8 +473,9 @@ uint16_t APIConnection::fill_and_encode_entity_info(EntityBase *entity, InfoResp // Set common fields that are shared by all entity types msg.key = entity->get_object_id_hash(); + char name_buf[ENTITY_NAME_BUF_SIZE]; if (entity->has_own_name()) { - msg.name = entity->get_name(); + msg.name = entity->get_name_to(name_buf); } // Set common EntityBase properties diff --git a/esphome/components/aqi/aqi_sensor.cpp b/esphome/components/aqi/aqi_sensor.cpp index d7fb120741b..d94ee61e5c9 100644 --- a/esphome/components/aqi/aqi_sensor.cpp +++ b/esphome/components/aqi/aqi_sensor.cpp @@ -28,10 +28,10 @@ void AQISensor::dump_config() { ESP_LOGCONFIG(TAG, " Extended Range: %s", this->extended_range_ ? LOG_STR_LITERAL("enabled") : LOG_STR_LITERAL("disabled")); if (this->pm_2_5_sensor_ != nullptr) { - ESP_LOGCONFIG(TAG, " PM2.5 Sensor: '%s'", this->pm_2_5_sensor_->get_name().c_str()); + ESP_LOGCONFIG(TAG, " PM2.5 Sensor: '%s'", LOG_STR_ARG(this->pm_2_5_sensor_->get_log_name())); } if (this->pm_10_0_sensor_ != nullptr) { - ESP_LOGCONFIG(TAG, " PM10 Sensor: '%s'", this->pm_10_0_sensor_->get_name().c_str()); + ESP_LOGCONFIG(TAG, " PM10 Sensor: '%s'", LOG_STR_ARG(this->pm_10_0_sensor_->get_log_name())); } LOG_SENSOR(" ", "AQI", this); } diff --git a/esphome/components/atm90e32/atm90e32.cpp b/esphome/components/atm90e32/atm90e32.cpp index 0c4f095ab57..937011c048a 100644 --- a/esphome/components/atm90e32/atm90e32.cpp +++ b/esphome/components/atm90e32/atm90e32.cpp @@ -1289,7 +1289,7 @@ void ATM90E32Component::check_phase_status() { if (!status.empty()) { status.pop_back(); // remove space status.pop_back(); // remove semicolon - ESP_LOGW(TAG, "%s: %s", sensor->get_name().c_str(), status.c_str()); + ESP_LOGW(TAG, "%s: %s", LOG_STR_ARG(sensor->get_log_name()), status.c_str()); sensor->publish_state(status); } else { sensor->publish_state("Okay"); diff --git a/esphome/components/atm90e32/button/atm90e32_button.cpp b/esphome/components/atm90e32/button/atm90e32_button.cpp index 03871495214..765dd7f9f3d 100644 --- a/esphome/components/atm90e32/button/atm90e32_button.cpp +++ b/esphome/components/atm90e32/button/atm90e32_button.cpp @@ -8,11 +8,12 @@ ESPHOME_LOG_TAG(TAG, "atm90e32.button"); void ATM90E32GainCalibrationButton::press_action() { if (this->parent_ == nullptr) { - ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Gain Calibration button [%s]", this->get_name().c_str()); + ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Gain Calibration button [%s]", + LOG_STR_ARG(this->get_log_name())); return; } - ESP_LOGI(TAG, "%s", this->get_name().c_str()); + ESP_LOGI(TAG, "%s", LOG_STR_ARG(this->get_log_name())); ESP_LOGI(TAG, "[CALIBRATION] Use gain_ct: & gain_voltage: under each phase_x: in your config file to save these values"); this->parent_->run_gain_calibrations(); @@ -20,21 +21,22 @@ void ATM90E32GainCalibrationButton::press_action() { void ATM90E32ClearGainCalibrationButton::press_action() { if (this->parent_ == nullptr) { - ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Clear Gain button [%s]", this->get_name().c_str()); + ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Clear Gain button [%s]", LOG_STR_ARG(this->get_log_name())); return; } - ESP_LOGI(TAG, "%s", this->get_name().c_str()); + ESP_LOGI(TAG, "%s", LOG_STR_ARG(this->get_log_name())); this->parent_->clear_gain_calibrations(); } void ATM90E32OffsetCalibrationButton::press_action() { if (this->parent_ == nullptr) { - ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Offset Calibration button [%s]", this->get_name().c_str()); + ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Offset Calibration button [%s]", + LOG_STR_ARG(this->get_log_name())); return; } - ESP_LOGI(TAG, "%s", this->get_name().c_str()); + ESP_LOGI(TAG, "%s", LOG_STR_ARG(this->get_log_name())); ESP_LOGI(TAG, "[CALIBRATION] **NOTE: CTs and ACVs must be 0 during this process. USB power only**"); ESP_LOGI(TAG, "[CALIBRATION] Use offset_voltage: & offset_current: under each phase_x: in your config file to save " "these values"); @@ -43,21 +45,22 @@ void ATM90E32OffsetCalibrationButton::press_action() { void ATM90E32ClearOffsetCalibrationButton::press_action() { if (this->parent_ == nullptr) { - ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Clear Offset button [%s]", this->get_name().c_str()); + ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Clear Offset button [%s]", LOG_STR_ARG(this->get_log_name())); return; } - ESP_LOGI(TAG, "%s", this->get_name().c_str()); + ESP_LOGI(TAG, "%s", LOG_STR_ARG(this->get_log_name())); this->parent_->clear_offset_calibrations(); } void ATM90E32PowerOffsetCalibrationButton::press_action() { if (this->parent_ == nullptr) { - ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Power Calibration button [%s]", this->get_name().c_str()); + ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Power Calibration button [%s]", + LOG_STR_ARG(this->get_log_name())); return; } - ESP_LOGI(TAG, "%s", this->get_name().c_str()); + ESP_LOGI(TAG, "%s", LOG_STR_ARG(this->get_log_name())); ESP_LOGI(TAG, "[CALIBRATION] **NOTE: CTs must be 0 during this process. Voltage reference should be present**"); ESP_LOGI(TAG, "[CALIBRATION] Use offset_active_power: & offset_reactive_power: under each phase_x: in your config " "file to save these values"); @@ -66,11 +69,11 @@ void ATM90E32PowerOffsetCalibrationButton::press_action() { void ATM90E32ClearPowerOffsetCalibrationButton::press_action() { if (this->parent_ == nullptr) { - ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Clear Power button [%s]", this->get_name().c_str()); + ESP_LOGW(TAG, "[CALIBRATION] No meters assigned to Clear Power button [%s]", LOG_STR_ARG(this->get_log_name())); return; } - ESP_LOGI(TAG, "%s", this->get_name().c_str()); + ESP_LOGI(TAG, "%s", LOG_STR_ARG(this->get_log_name())); this->parent_->clear_power_offset_calibrations(); } diff --git a/esphome/components/bedjet/climate/bedjet_climate.cpp b/esphome/components/bedjet/climate/bedjet_climate.cpp index 196d4785e98..40c26a49278 100644 --- a/esphome/components/bedjet/climate/bedjet_climate.cpp +++ b/esphome/components/bedjet/climate/bedjet_climate.cpp @@ -211,7 +211,7 @@ void BedJetClimate::control(const ClimateCall &call) { } else if (fan_mode == CLIMATE_FAN_HIGH) { result = this->parent_->set_fan_speed(75); } else { - ESP_LOGW(TAG, "[%s] Unsupported fan mode: %s", this->get_name().c_str(), + ESP_LOGW(TAG, "[%s] Unsupported fan mode: %s", LOG_STR_ARG(this->get_log_name()), LOG_STR_ARG(climate_fan_mode_to_string(fan_mode))); return; } @@ -223,7 +223,7 @@ void BedJetClimate::control(const ClimateCall &call) { auto fan_mode = call.get_custom_fan_mode(); auto fan_index = bedjet_fan_speed_to_step(fan_mode.c_str()); if (fan_index <= 19) { - ESP_LOGV(TAG, "[%s] Converted fan mode %.*s to bedjet fan step %d", this->get_name().c_str(), + ESP_LOGV(TAG, "[%s] Converted fan mode %.*s to bedjet fan step %d", LOG_STR_ARG(this->get_log_name()), (int) fan_mode.size(), fan_mode.c_str(), fan_index); bool result = this->parent_->set_fan_index(fan_index); if (result) { @@ -236,7 +236,7 @@ void BedJetClimate::control(const ClimateCall &call) { void BedJetClimate::on_bedjet_state(bool is_ready) {} void BedJetClimate::on_status(const BedjetStatusPacket *data) { - ESP_LOGV(TAG, "[%s] Handling on_status with data=%p", this->get_name().c_str(), (void *) data); + ESP_LOGV(TAG, "[%s] Handling on_status with data=%p", LOG_STR_ARG(this->get_log_name()), (void *) data); auto converted_temp = bedjet_temp_to_c(data->target_temp_step); if (converted_temp > 0) @@ -310,11 +310,11 @@ void BedJetClimate::on_status(const BedjetStatusPacket *data) { break; default: - ESP_LOGW(TAG, "[%s] Unexpected mode: 0x%02X", this->get_name().c_str(), data->mode); + ESP_LOGW(TAG, "[%s] Unexpected mode: 0x%02X", LOG_STR_ARG(this->get_log_name()), data->mode); break; } - ESP_LOGV(TAG, "[%s] After on_status, new mode=%s", this->get_name().c_str(), + ESP_LOGV(TAG, "[%s] After on_status, new mode=%s", LOG_STR_ARG(this->get_log_name()), LOG_STR_ARG(climate_mode_to_string(this->mode))); // FIXME: compare new state to previous state. this->publish_state(); @@ -351,11 +351,11 @@ bool BedJetClimate::update_status_() { } void BedJetClimate::update() { - ESP_LOGD(TAG, "[%s] update()", this->get_name().c_str()); + ESP_LOGD(TAG, "[%s] update()", LOG_STR_ARG(this->get_log_name())); // TODO: if the hub component is already polling, do we also need to include polling? // We're already going to get on_status() at the hub's polling interval. auto result = this->update_status_(); - ESP_LOGD(TAG, "[%s] update_status result=%s", this->get_name().c_str(), result ? "true" : "false"); + ESP_LOGD(TAG, "[%s] update_status result=%s", LOG_STR_ARG(this->get_log_name()), result ? "true" : "false"); } } // namespace esphome::bedjet diff --git a/esphome/components/bedjet/fan/bedjet_fan.cpp b/esphome/components/bedjet/fan/bedjet_fan.cpp index 4b1bd14ae34..1f0762e40ce 100644 --- a/esphome/components/bedjet/fan/bedjet_fan.cpp +++ b/esphome/components/bedjet/fan/bedjet_fan.cpp @@ -53,7 +53,7 @@ void BedJetFan::control(const fan::FanCall &call) { } void BedJetFan::on_status(const BedjetStatusPacket *data) { - ESP_LOGVV(TAG, "[%s] Handling on_status with data=%p", this->get_name().c_str(), (void *) data); + ESP_LOGVV(TAG, "[%s] Handling on_status with data=%p", LOG_STR_ARG(this->get_log_name()), (void *) data); bool did_change = false; bool new_state = data->mode != MODE_STANDBY && data->mode != MODE_WAIT; @@ -96,11 +96,11 @@ bool BedJetFan::update_status_() { } void BedJetFan::update() { - ESP_LOGD(TAG, "[%s] update()", this->get_name().c_str()); + ESP_LOGD(TAG, "[%s] update()", LOG_STR_ARG(this->get_log_name())); // TODO: if the hub component is already polling, do we also need to include polling? // We're already going to get on_status() at the hub's polling interval. auto result = this->update_status_(); - ESP_LOGD(TAG, "[%s] update_status result=%s", this->get_name().c_str(), result ? "true" : "false"); + ESP_LOGD(TAG, "[%s] update_status result=%s", LOG_STR_ARG(this->get_log_name()), result ? "true" : "false"); } /** Resets states to defaults. */ diff --git a/esphome/components/bh1750/bh1750.cpp b/esphome/components/bh1750/bh1750.cpp index 2d9709f4228..ddd56d42147 100644 --- a/esphome/components/bh1750/bh1750.cpp +++ b/esphome/components/bh1750/bh1750.cpp @@ -75,7 +75,7 @@ void BH1750Sensor::dump_config() { LOG_SENSOR("", "BH1750", this); LOG_I2C_DEVICE(this); if (this->is_failed()) { - ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL_FOR, this->get_name().c_str()); + ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL_FOR, LOG_STR_ARG(this->get_log_name())); } LOG_UPDATE_INTERVAL(this); @@ -154,7 +154,7 @@ void BH1750Sensor::loop() { break; } - ESP_LOGV(TAG, "'%s': Illuminance=%.1flx", this->get_name().c_str(), lx); + ESP_LOGV(TAG, "'%s': Illuminance=%.1flx", LOG_STR_ARG(this->get_log_name()), lx); this->status_clear_warning(); this->publish_state(lx); this->state_ = IDLE; diff --git a/esphome/components/binary_sensor/binary_sensor.cpp b/esphome/components/binary_sensor/binary_sensor.cpp index 43915c4e17b..b4da1a15b6e 100644 --- a/esphome/components/binary_sensor/binary_sensor.cpp +++ b/esphome/components/binary_sensor/binary_sensor.cpp @@ -13,7 +13,7 @@ void log_binary_sensor(const char *tag, const char *prefix, const char *type, Bi return; } - ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str()); + ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, LOG_STR_ARG(obj->get_log_name())); LOG_ENTITY_DEVICE_CLASS(tag, prefix, *obj); } @@ -38,7 +38,7 @@ bool BinarySensor::set_new_state(const optional &new_state) { #if defined(USE_BINARY_SENSOR) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_binary_sensor_update(this); #endif - ESP_LOGV(TAG, "'%s' >> %s", this->get_name().c_str(), ONOFFMAYBE(new_state)); + ESP_LOGV(TAG, "'%s' >> %s", LOG_STR_ARG(this->get_log_name()), ONOFFMAYBE(new_state)); return true; } return false; diff --git a/esphome/components/bl0940/bl0940.cpp b/esphome/components/bl0940/bl0940.cpp index a8b470de7ec..82ea176c37d 100644 --- a/esphome/components/bl0940/bl0940.cpp +++ b/esphome/components/bl0940/bl0940.cpp @@ -195,7 +195,7 @@ float BL0940::update_temp_(sensor::Sensor *sensor, uint16_le_t temperature) cons if (sensor != nullptr) { if (sensor->has_state() && std::abs(converted_temp - sensor->get_state()) > max_temperature_diff_) { ESP_LOGD(TAG, "Invalid temperature change. Sensor: '%s', Old temperature: %f, New temperature: %f", - sensor->get_name().c_str(), sensor->get_state(), converted_temp); + LOG_STR_ARG(sensor->get_log_name()), sensor->get_state(), converted_temp); return 0.0f; } sensor->publish_state(converted_temp); diff --git a/esphome/components/ble_client/sensor/ble_rssi_sensor.cpp b/esphome/components/ble_client/sensor/ble_rssi_sensor.cpp index 69e7450dc20..f3f3b180fe9 100644 --- a/esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +++ b/esphome/components/ble_client/sensor/ble_rssi_sensor.cpp @@ -63,7 +63,7 @@ void BLEClientRSSISensor::gap_event_handler(esp_gap_ble_cb_event_t event, esp_bl void BLEClientRSSISensor::update() { if (this->node_state != espbt::ClientState::ESTABLISHED) { - ESP_LOGW(TAG, "[%s] Cannot poll, not connected", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] Cannot poll, not connected", LOG_STR_ARG(this->get_log_name())); this->should_update_ = true; return; } diff --git a/esphome/components/ble_client/sensor/ble_sensor.cpp b/esphome/components/ble_client/sensor/ble_sensor.cpp index 1ddd50c3079..cca77e6fd79 100644 --- a/esphome/components/ble_client/sensor/ble_sensor.cpp +++ b/esphome/components/ble_client/sensor/ble_sensor.cpp @@ -37,13 +37,13 @@ void BLESensor::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t ga switch (event) { case ESP_GATTC_OPEN_EVT: { if (param->open.status == ESP_GATT_OK) { - ESP_LOGI(TAG, "[%s] Connected successfully!", this->get_name().c_str()); + ESP_LOGI(TAG, "[%s] Connected successfully!", LOG_STR_ARG(this->get_log_name())); break; } break; } case ESP_GATTC_CLOSE_EVT: { - ESP_LOGW(TAG, "[%s] Disconnected!", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] Disconnected!", LOG_STR_ARG(this->get_log_name())); this->status_set_warning(); this->publish_state(NAN); break; @@ -102,10 +102,10 @@ void BLESensor::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t ga } case ESP_GATTC_NOTIFY_EVT: { if (param->notify.value_len == 0) { - ESP_LOGW(TAG, "[%s] ESP_GATTC_NOTIFY_EVT: empty value", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] ESP_GATTC_NOTIFY_EVT: empty value", LOG_STR_ARG(this->get_log_name())); break; } - ESP_LOGD(TAG, "[%s] ESP_GATTC_NOTIFY_EVT: handle=0x%x, value=0x%x", this->get_name().c_str(), + ESP_LOGD(TAG, "[%s] ESP_GATTC_NOTIFY_EVT: handle=0x%x, value=0x%x", LOG_STR_ARG(this->get_log_name()), param->notify.handle, param->notify.value[0]); if (param->notify.handle != this->handle) break; @@ -143,11 +143,11 @@ float BLESensor::parse_data_(uint8_t *value, uint16_t value_len) { void BLESensor::update() { if (this->node_state != espbt::ClientState::ESTABLISHED) { - ESP_LOGW(TAG, "[%s] Cannot poll, not connected", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] Cannot poll, not connected", LOG_STR_ARG(this->get_log_name())); return; } if (this->handle == 0) { - ESP_LOGW(TAG, "[%s] Cannot poll, no service or characteristic found", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] Cannot poll, no service or characteristic found", LOG_STR_ARG(this->get_log_name())); return; } @@ -156,7 +156,7 @@ void BLESensor::update() { if (status) { this->status_set_warning(); this->publish_state(NAN); - ESP_LOGW(TAG, "[%s] Error sending read request for sensor, status=%d", this->get_name().c_str(), status); + ESP_LOGW(TAG, "[%s] Error sending read request for sensor, status=%d", LOG_STR_ARG(this->get_log_name()), status); } } diff --git a/esphome/components/ble_client/text_sensor/ble_text_sensor.cpp b/esphome/components/ble_client/text_sensor/ble_text_sensor.cpp index f6df7b43364..c82822d4296 100644 --- a/esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +++ b/esphome/components/ble_client/text_sensor/ble_text_sensor.cpp @@ -38,7 +38,7 @@ void BLETextSensor::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_ switch (event) { case ESP_GATTC_OPEN_EVT: { if (param->open.status == ESP_GATT_OK) { - ESP_LOGI(TAG, "[%s] Connected successfully!", this->get_name().c_str()); + ESP_LOGI(TAG, "[%s] Connected successfully!", LOG_STR_ARG(this->get_log_name())); break; } break; @@ -104,10 +104,10 @@ void BLETextSensor::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_ if (param->notify.handle != this->handle) break; if (param->notify.value_len == 0) { - ESP_LOGW(TAG, "[%s] ESP_GATTC_NOTIFY_EVT: empty value", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] ESP_GATTC_NOTIFY_EVT: empty value", LOG_STR_ARG(this->get_log_name())); break; } - ESP_LOGV(TAG, "[%s] ESP_GATTC_NOTIFY_EVT: handle=0x%x, value=0x%x", this->get_name().c_str(), + ESP_LOGV(TAG, "[%s] ESP_GATTC_NOTIFY_EVT: handle=0x%x, value=0x%x", LOG_STR_ARG(this->get_log_name()), param->notify.handle, param->notify.value[0]); this->publish_state(reinterpret_cast(param->notify.value), param->notify.value_len); break; @@ -124,11 +124,11 @@ void BLETextSensor::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_ void BLETextSensor::update() { if (this->node_state != espbt::ClientState::ESTABLISHED) { - ESP_LOGW(TAG, "[%s] Cannot poll, not connected", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] Cannot poll, not connected", LOG_STR_ARG(this->get_log_name())); return; } if (this->handle == 0) { - ESP_LOGW(TAG, "[%s] Cannot poll, no service or characteristic found", this->get_name().c_str()); + ESP_LOGW(TAG, "[%s] Cannot poll, no service or characteristic found", LOG_STR_ARG(this->get_log_name())); return; } @@ -137,7 +137,7 @@ void BLETextSensor::update() { if (status) { this->status_set_warning(); this->publish_state(""); - ESP_LOGW(TAG, "[%s] Error sending read request for sensor, status=%d", this->get_name().c_str(), status); + ESP_LOGW(TAG, "[%s] Error sending read request for sensor, status=%d", LOG_STR_ARG(this->get_log_name()), status); } } diff --git a/esphome/components/button/button.cpp b/esphome/components/button/button.cpp index e85ce60df6e..157693fffe9 100644 --- a/esphome/components/button/button.cpp +++ b/esphome/components/button/button.cpp @@ -11,12 +11,12 @@ void log_button(const char *tag, const char *prefix, const char *type, Button *o return; } - ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str()); + ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, LOG_STR_ARG(obj->get_log_name())); LOG_ENTITY_ICON(tag, prefix, *obj); } void Button::press() { - ESP_LOGV(TAG, "'%s' Pressed.", this->get_name().c_str()); + ESP_LOGV(TAG, "'%s' Pressed.", LOG_STR_ARG(this->get_log_name())); this->press_action(); this->press_callback_.call(); } diff --git a/esphome/components/climate/climate.cpp b/esphome/components/climate/climate.cpp index 790307cec14..0403b5ad013 100644 --- a/esphome/components/climate/climate.cpp +++ b/esphome/components/climate/climate.cpp @@ -46,7 +46,7 @@ constexpr StringToUint8 CLIMATE_SWING_MODES_BY_STR[] = { void ClimateCall::perform() { this->parent_->control_callback_.call(*this); - ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting", LOG_STR_ARG(this->parent_->get_log_name())); this->validate_(); if (this->mode_.has_value()) { const LogString *mode_s = climate_mode_to_string(*this->mode_); @@ -183,7 +183,7 @@ ClimateCall &ClimateCall::set_mode(const char *mode, size_t len) { return *this; } } - ESP_LOGW(TAG, "'%s' - Unrecognized mode %.*s", this->parent_->get_name().c_str(), (int) len, mode); + ESP_LOGW(TAG, "'%s' - Unrecognized mode %.*s", LOG_STR_ARG(this->parent_->get_log_name()), (int) len, mode); return *this; } @@ -214,7 +214,8 @@ ClimateCall &ClimateCall::set_fan_mode(const char *custom_fan_mode, size_t len) this->fan_mode_.reset(); return *this; } - ESP_LOGW(TAG, "'%s' - Unrecognized fan mode %.*s", this->parent_->get_name().c_str(), (int) len, custom_fan_mode); + ESP_LOGW(TAG, "'%s' - Unrecognized fan mode %.*s", LOG_STR_ARG(this->parent_->get_log_name()), (int) len, + custom_fan_mode); return *this; } @@ -252,7 +253,8 @@ ClimateCall &ClimateCall::set_preset(const char *custom_preset, size_t len) { this->preset_.reset(); return *this; } - ESP_LOGW(TAG, "'%s' - Unrecognized preset %.*s", this->parent_->get_name().c_str(), (int) len, custom_preset); + ESP_LOGW(TAG, "'%s' - Unrecognized preset %.*s", LOG_STR_ARG(this->parent_->get_log_name()), (int) len, + custom_preset); return *this; } @@ -280,7 +282,8 @@ ClimateCall &ClimateCall::set_swing_mode(const char *swing_mode, size_t len) { return *this; } } - ESP_LOGW(TAG, "'%s' - Unrecognized swing mode %.*s", this->parent_->get_name().c_str(), (int) len, swing_mode); + ESP_LOGW(TAG, "'%s' - Unrecognized swing mode %.*s", LOG_STR_ARG(this->parent_->get_log_name()), (int) len, + swing_mode); return *this; } @@ -428,7 +431,7 @@ void Climate::save_state_(const ClimateTraits &traits) { void Climate::publish_state() { this->set_has_state(true); - ESP_LOGV(TAG, "'%s' >>", this->name_.c_str()); + ESP_LOGV(TAG, "'%s' >>", LOG_STR_ARG(this->get_log_name())); auto traits = this->get_traits(); ESP_LOGV(TAG, " Mode: %s", LOG_STR_ARG(climate_mode_to_string(this->mode))); @@ -549,7 +552,7 @@ void ClimateDeviceRestoreState::apply(Climate *climate) { if (traits.supports_mode(this->mode)) { climate->mode = this->mode; } else { - ESP_LOGW(TAG, "'%s' - Saved mode %s is no longer supported, keeping %s", climate->get_name().c_str(), + ESP_LOGW(TAG, "'%s' - Saved mode %s is no longer supported, keeping %s", LOG_STR_ARG(climate->get_log_name()), LOG_STR_ARG(climate_mode_to_string(this->mode)), LOG_STR_ARG(climate_mode_to_string(climate->mode))); } if (traits.has_feature_flags(CLIMATE_SUPPORTS_TWO_POINT_TARGET_TEMPERATURE | diff --git a/esphome/components/climate/climate.h b/esphome/components/climate/climate.h index a9068972356..c6146f96aef 100644 --- a/esphome/components/climate/climate.h +++ b/esphome/components/climate/climate.h @@ -14,7 +14,7 @@ namespace esphome::climate { #define LOG_CLIMATE(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ } class Climate; diff --git a/esphome/components/combination/combination.cpp b/esphome/components/combination/combination.cpp index d10490a20ce..62f08acf55e 100644 --- a/esphome/components/combination/combination.cpp +++ b/esphome/components/combination/combination.cpp @@ -28,14 +28,14 @@ void CombinationOneParameterComponent::add_source(Sensor *sensor, float value) { void CombinationNoParameterComponent::log_source_sensors() { ESP_LOGCONFIG(TAG, " Source Sensors:"); for (const auto &sensor : this->sensors_) { - ESP_LOGCONFIG(TAG, " - %s", sensor->get_name().c_str()); + ESP_LOGCONFIG(TAG, " - %s", LOG_STR_ARG(sensor->get_log_name())); } } void CombinationOneParameterComponent::log_source_sensors() { ESP_LOGCONFIG(TAG, " Source Sensors:"); for (const auto &source : this->sensor_sources_) { - ESP_LOGCONFIG(TAG, " - %s", source.sensor->get_name().c_str()); + ESP_LOGCONFIG(TAG, " - %s", LOG_STR_ARG(source.sensor->get_log_name())); } } diff --git a/esphome/components/cover/cover.cpp b/esphome/components/cover/cover.cpp index 30e7f70b02b..e71dd1c89f5 100644 --- a/esphome/components/cover/cover.cpp +++ b/esphome/components/cover/cover.cpp @@ -39,7 +39,7 @@ CoverCall &CoverCall::set_command(const char *command) { } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("TOGGLE")) == 0) { this->set_command_toggle(); } else { - ESP_LOGW(TAG, "'%s' - Unrecognized command %s", this->parent_->get_name().c_str(), command); + ESP_LOGW(TAG, "'%s' - Unrecognized command %s", LOG_STR_ARG(this->parent_->get_log_name()), command); } return *this; } @@ -68,7 +68,7 @@ CoverCall &CoverCall::set_tilt(float tilt) { return *this; } void CoverCall::perform() { - ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting", LOG_STR_ARG(this->parent_->get_log_name())); auto traits = this->parent_->get_traits(); this->validate_(); if (this->stop_) { @@ -94,7 +94,7 @@ const optional &CoverCall::get_tilt() const { return this->tilt_; } const optional &CoverCall::get_toggle() const { return this->toggle_; } void CoverCall::validate_() { auto traits = this->parent_->get_traits(); - const char *name = this->parent_->get_name().c_str(); + const char *name = LOG_STR_ARG(this->parent_->get_log_name()); if (this->position_.has_value()) { auto pos = *this->position_; @@ -139,7 +139,7 @@ void Cover::publish_state(bool save) { this->position = clamp(this->position, 0.0f, 1.0f); this->tilt = clamp(this->tilt, 0.0f, 1.0f); - ESP_LOGV(TAG, "'%s' >>", this->name_.c_str()); + ESP_LOGV(TAG, "'%s' >>", LOG_STR_ARG(this->get_log_name())); auto traits = this->get_traits(); if (traits.get_supports_position()) { ESP_LOGV(TAG, " Position: %.0f%%", this->position * 100.0f); diff --git a/esphome/components/cover/cover.h b/esphome/components/cover/cover.h index 8bf45cfb579..d7f6df16d97 100644 --- a/esphome/components/cover/cover.h +++ b/esphome/components/cover/cover.h @@ -15,7 +15,7 @@ static constexpr float COVER_CLOSED = 0.0f; #define LOG_COVER(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ auto traits_ = (obj)->get_traits(); \ if (traits_.get_is_assumed_state()) { \ ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \ diff --git a/esphome/components/dallas_temp/dallas_temp.cpp b/esphome/components/dallas_temp/dallas_temp.cpp index 2721383ae84..04be0382544 100644 --- a/esphome/components/dallas_temp/dallas_temp.cpp +++ b/esphome/components/dallas_temp/dallas_temp.cpp @@ -51,7 +51,7 @@ void DallasTemperatureSensor::update() { } float tempc = this->get_temp_c_(); - ESP_LOGD(TAG, "'%s': Got Temperature=%f°C", this->get_name().c_str(), tempc); + ESP_LOGD(TAG, "'%s': Got Temperature=%f°C", LOG_STR_ARG(this->get_log_name()), tempc); this->publish_state(tempc); }); } @@ -63,7 +63,7 @@ bool DallasTemperatureSensor::read_scratch_pad_() { i = this->bus_->read8(); } } else { - ESP_LOGW(TAG, "'%s' - reading scratch pad failed bus reset", this->get_name().c_str()); + ESP_LOGW(TAG, "'%s' - reading scratch pad failed bus reset", LOG_STR_ARG(this->get_log_name())); this->status_set_warning(LOG_STR("bus reset failed")); } return success; diff --git a/esphome/components/datetime/date_entity.cpp b/esphome/components/datetime/date_entity.cpp index 795d54afd90..91b7303d6c4 100644 --- a/esphome/components/datetime/date_entity.cpp +++ b/esphome/components/datetime/date_entity.cpp @@ -30,7 +30,7 @@ void DateEntity::publish_state() { return; } this->set_has_state(true); - ESP_LOGV(TAG, "'%s' >> %d-%d-%d", this->get_name().c_str(), this->year_, this->month_, this->day_); + ESP_LOGV(TAG, "'%s' >> %d-%d-%d", LOG_STR_ARG(this->get_log_name()), this->year_, this->month_, this->day_); this->state_callback_.call(); #if defined(USE_DATETIME_DATE) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_date_update(this); @@ -81,7 +81,7 @@ void DateCall::validate_() { void DateCall::perform() { this->validate_(); - ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting", LOG_STR_ARG(this->parent_->get_log_name())); if (this->year_.has_value()) { ESP_LOGV(TAG, " Year: %d", *this->year_); diff --git a/esphome/components/datetime/date_entity.h b/esphome/components/datetime/date_entity.h index 9404d215120..83ef76ce275 100644 --- a/esphome/components/datetime/date_entity.h +++ b/esphome/components/datetime/date_entity.h @@ -14,7 +14,7 @@ namespace esphome::datetime { #define LOG_DATETIME_DATE(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ LOG_ENTITY_ICON(TAG, prefix, *(obj)); \ } diff --git a/esphome/components/datetime/datetime_entity.cpp b/esphome/components/datetime/datetime_entity.cpp index 6aa14163430..b3bb7c12eaa 100644 --- a/esphome/components/datetime/datetime_entity.cpp +++ b/esphome/components/datetime/datetime_entity.cpp @@ -45,7 +45,7 @@ void DateTimeEntity::publish_state() { return; } this->set_has_state(true); - ESP_LOGV(TAG, "'%s' >> %04u-%02u-%02u %02d:%02d:%02d", this->get_name().c_str(), this->year_, this->month_, + ESP_LOGV(TAG, "'%s' >> %04u-%02u-%02u %02d:%02d:%02d", LOG_STR_ARG(this->get_log_name()), this->year_, this->month_, this->day_, this->hour_, this->minute_, this->second_); this->state_callback_.call(); #if defined(USE_DATETIME_DATETIME) && defined(USE_CONTROLLER_REGISTRY) @@ -125,7 +125,7 @@ void DateTimeCall::validate_() { void DateTimeCall::perform() { this->validate_(); - ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting", LOG_STR_ARG(this->parent_->get_log_name())); if (this->year_.has_value()) { ESP_LOGV(TAG, " Year: %d", *this->year_); diff --git a/esphome/components/datetime/datetime_entity.h b/esphome/components/datetime/datetime_entity.h index 57d305cb52b..75a677d67ba 100644 --- a/esphome/components/datetime/datetime_entity.h +++ b/esphome/components/datetime/datetime_entity.h @@ -14,7 +14,7 @@ namespace esphome::datetime { #define LOG_DATETIME_DATETIME(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ LOG_ENTITY_ICON(TAG, prefix, *(obj)); \ } diff --git a/esphome/components/datetime/time_entity.cpp b/esphome/components/datetime/time_entity.cpp index ea1a97256cd..8dcbe0ee1ca 100644 --- a/esphome/components/datetime/time_entity.cpp +++ b/esphome/components/datetime/time_entity.cpp @@ -26,7 +26,7 @@ void TimeEntity::publish_state() { return; } this->set_has_state(true); - ESP_LOGV(TAG, "'%s' >> %02d:%02d:%02d", this->get_name().c_str(), this->hour_, this->minute_, this->second_); + ESP_LOGV(TAG, "'%s' >> %02d:%02d:%02d", LOG_STR_ARG(this->get_log_name()), this->hour_, this->minute_, this->second_); this->state_callback_.call(); #if defined(USE_DATETIME_TIME) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_time_update(this); @@ -50,7 +50,7 @@ void TimeCall::validate_() { void TimeCall::perform() { this->validate_(); - ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting", LOG_STR_ARG(this->parent_->get_log_name())); if (this->hour_.has_value()) { ESP_LOGV(TAG, " Hour: %d", *this->hour_); } diff --git a/esphome/components/datetime/time_entity.h b/esphome/components/datetime/time_entity.h index fd31318ce5f..64b3b331e99 100644 --- a/esphome/components/datetime/time_entity.h +++ b/esphome/components/datetime/time_entity.h @@ -14,7 +14,7 @@ namespace esphome::datetime { #define LOG_DATETIME_TIME(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ LOG_ENTITY_ICON(TAG, prefix, *(obj)); \ } diff --git a/esphome/components/dew_point/dew_point.cpp b/esphome/components/dew_point/dew_point.cpp index 7012bcbb755..6c6a852334d 100644 --- a/esphome/components/dew_point/dew_point.cpp +++ b/esphome/components/dew_point/dew_point.cpp @@ -36,7 +36,8 @@ void DewPointComponent::dump_config() { "Sources\n" " Temperature: '%s'\n" " Humidity: '%s'", - this->temperature_sensor_->get_name().c_str(), this->humidity_sensor_->get_name().c_str()); + LOG_STR_ARG(this->temperature_sensor_->get_log_name()), + LOG_STR_ARG(this->humidity_sensor_->get_log_name())); } float DewPointComponent::get_setup_priority() const { return setup_priority::DATA; } @@ -75,8 +76,8 @@ void DewPointComponent::loop() { // Publish the calculated dew point this->publish_state(dew_point); - ESP_LOGD(TAG, "'%s' >> %.1f°C (T: %.1f°C, RH: %.1f%%)", this->get_name().c_str(), dew_point, this->temperature_value_, - this->humidity_value_); + ESP_LOGD(TAG, "'%s' >> %.1f°C (T: %.1f°C, RH: %.1f%%)", LOG_STR_ARG(this->get_log_name()), dew_point, + this->temperature_value_, this->humidity_value_); } } // namespace esphome::dew_point diff --git a/esphome/components/duty_cycle/duty_cycle_sensor.cpp b/esphome/components/duty_cycle/duty_cycle_sensor.cpp index 69a41eb548d..9c986192b1d 100644 --- a/esphome/components/duty_cycle/duty_cycle_sensor.cpp +++ b/esphome/components/duty_cycle/duty_cycle_sensor.cpp @@ -36,7 +36,7 @@ void DutyCycleSensor::update() { const float total_time = float(now - this->last_update_); const float value = (on_time * 100.0f) / total_time; - ESP_LOGD(TAG, "'%s' Got duty cycle=%.1f%%", this->get_name().c_str(), value); + ESP_LOGD(TAG, "'%s' Got duty cycle=%.1f%%", LOG_STR_ARG(this->get_log_name()), value); this->publish_state(value); } this->last_update_ = now; diff --git a/esphome/components/esp32_touch/esp32_touch.cpp b/esphome/components/esp32_touch/esp32_touch.cpp index ed7d0bd7cb2..2de201ccf7a 100644 --- a/esphome/components/esp32_touch/esp32_touch.cpp +++ b/esphome/components/esp32_touch/esp32_touch.cpp @@ -346,13 +346,13 @@ void ESP32TouchComponent::loop() { child->publish_state(new_state); #ifdef USE_ESP32_VARIANT_ESP32 ESP_LOGV(TAG, "Touch Pad '%s' state: %s (value: %" PRIu32 ", threshold: %" PRIu32 ")", - child->get_name().c_str(), ONOFF(new_state), value, child->get_threshold()); + LOG_STR_ARG(child->get_log_name()), ONOFF(new_state), value, child->get_threshold()); #else if (new_state) { ESP_LOGV(TAG, "Touch Pad '%s' state: ON (value: %" PRIu32 ", benchmark: %" PRIu32 ", threshold: %" PRIu32 ")", - child->get_name().c_str(), value, benchmark, child->get_threshold()); + LOG_STR_ARG(child->get_log_name()), value, benchmark, child->get_threshold()); } else { - ESP_LOGV(TAG, "Touch Pad '%s' state: OFF", child->get_name().c_str()); + ESP_LOGV(TAG, "Touch Pad '%s' state: OFF", LOG_STR_ARG(child->get_log_name())); } #endif } @@ -475,7 +475,8 @@ void ESP32TouchComponent::process_setup_mode_logging_(uint32_t now) { child->value_ = smooth_value; #ifdef USE_ESP32_VARIANT_ESP32 - ESP_LOGD(TAG, "Touch Pad '%s' (Ch%d): %" PRIu32, child->get_name().c_str(), child->channel_id_, smooth_value); + ESP_LOGD(TAG, "Touch Pad '%s' (Ch%d): %" PRIu32, LOG_STR_ARG(child->get_log_name()), child->channel_id_, + smooth_value); #else uint32_t benchmark = 0; touch_channel_read_data(child->chan_handle_, TOUCH_CHAN_DATA_TYPE_BENCHMARK, &benchmark); @@ -484,7 +485,7 @@ void ESP32TouchComponent::process_setup_mode_logging_(uint32_t now) { ESP_LOGD(TAG, "Touch Pad '%s' (Ch%d): value=%" PRIu32 ", benchmark=%" PRIu32 ", difference=%" PRId32 " (set threshold < %" PRId32 " to detect touch)", - child->get_name().c_str(), child->channel_id_, smooth_value, benchmark, difference, difference); + LOG_STR_ARG(child->get_log_name()), child->channel_id_, smooth_value, benchmark, difference, difference); #endif } this->setup_mode_last_log_print_ = now; @@ -496,7 +497,7 @@ void ESP32TouchComponent::publish_initial_state_if_needed_(ESP32TouchBinarySenso if (now > INITIAL_STATE_DELAY_MS) { child->publish_initial_state(false); child->initial_state_published_ = true; - ESP_LOGV(TAG, "Touch Pad '%s' state: OFF (initial)", child->get_name().c_str()); + ESP_LOGV(TAG, "Touch Pad '%s' state: OFF (initial)", LOG_STR_ARG(child->get_log_name())); } } } diff --git a/esphome/components/event/event.cpp b/esphome/components/event/event.cpp index 3170c7a8dd0..f664fb3dbc5 100644 --- a/esphome/components/event/event.cpp +++ b/esphome/components/event/event.cpp @@ -17,11 +17,11 @@ void Event::trigger(const char *event_type) { } } if (found == nullptr) { - ESP_LOGE(TAG, "'%s': invalid event type for trigger(): %s", this->get_name().c_str(), event_type); + ESP_LOGE(TAG, "'%s': invalid event type for trigger(): %s", LOG_STR_ARG(this->get_log_name()), event_type); return; } this->last_event_type_ = found; - ESP_LOGV(TAG, "'%s' >> '%s'", this->get_name().c_str(), this->last_event_type_); + ESP_LOGV(TAG, "'%s' >> '%s'", LOG_STR_ARG(this->get_log_name()), this->last_event_type_); this->event_callback_.call(StringRef(found)); #if defined(USE_EVENT) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_event(this); diff --git a/esphome/components/event/event.h b/esphome/components/event/event.h index f57327e33f0..5be8c67045d 100644 --- a/esphome/components/event/event.h +++ b/esphome/components/event/event.h @@ -13,7 +13,7 @@ namespace esphome::event { #define LOG_EVENT(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ LOG_ENTITY_ICON(TAG, prefix, *(obj)); \ LOG_ENTITY_DEVICE_CLASS(TAG, prefix, *(obj)); \ } diff --git a/esphome/components/fan/fan.cpp b/esphome/components/fan/fan.cpp index 866f5eb0cda..c2023780643 100644 --- a/esphome/components/fan/fan.cpp +++ b/esphome/components/fan/fan.cpp @@ -52,14 +52,15 @@ FanCall &FanCall::set_preset_mode(const char *preset_mode, size_t len) { this->preset_mode_ = validated_mode; // Store pointer from traits } else { // Preset mode not found in traits - log warning and don't set - ESP_LOGW(TAG, "%s: Preset mode '%.*s' not supported", this->parent_.get_name().c_str(), (int) len, preset_mode); + ESP_LOGW(TAG, "%s: Preset mode '%.*s' not supported", LOG_STR_ARG(this->parent_.get_log_name()), (int) len, + preset_mode); this->preset_mode_ = nullptr; } return *this; } void FanCall::perform() { - ESP_LOGV(TAG, "'%s' - Setting:", this->parent_.get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting:", LOG_STR_ARG(this->parent_.get_log_name())); this->validate_(); if (this->binary_state_.has_value()) { ESP_LOGV(TAG, " State: %s", ONOFF(*this->binary_state_)); @@ -103,17 +104,17 @@ void FanCall::validate_() { } if (this->oscillating_.has_value() && !traits.supports_oscillation()) { - ESP_LOGW(TAG, "%s: Oscillation not supported", this->parent_.get_name().c_str()); + ESP_LOGW(TAG, "%s: Oscillation not supported", LOG_STR_ARG(this->parent_.get_log_name())); this->oscillating_.reset(); } if (this->speed_.has_value() && !traits.supports_speed()) { - ESP_LOGW(TAG, "%s: Speed control not supported", this->parent_.get_name().c_str()); + ESP_LOGW(TAG, "%s: Speed control not supported", LOG_STR_ARG(this->parent_.get_log_name())); this->speed_.reset(); } if (this->direction_.has_value() && !traits.supports_direction()) { - ESP_LOGW(TAG, "%s: Direction control not supported", this->parent_.get_name().c_str()); + ESP_LOGW(TAG, "%s: Direction control not supported", LOG_STR_ARG(this->parent_.get_log_name())); this->direction_.reset(); } } @@ -221,7 +222,7 @@ void Fan::publish_state() { ESP_LOGV(TAG, "'%s' >>\n" " State: %s", - this->name_.c_str(), ONOFF(this->state)); + LOG_STR_ARG(this->get_log_name()), ONOFF(this->state)); if (traits.supports_speed()) { ESP_LOGV(TAG, " Speed: %d", this->speed); } diff --git a/esphome/components/fan/fan.h b/esphome/components/fan/fan.h index 7e21971639e..150d143dbeb 100644 --- a/esphome/components/fan/fan.h +++ b/esphome/components/fan/fan.h @@ -12,7 +12,7 @@ namespace esphome::fan { #define LOG_FAN(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ (obj)->dump_traits_(TAG, prefix); \ } diff --git a/esphome/components/gpio/switch/gpio_switch.cpp b/esphome/components/gpio/switch/gpio_switch.cpp index 4daea8d877b..57ba0d58fbf 100644 --- a/esphome/components/gpio/switch/gpio_switch.cpp +++ b/esphome/components/gpio/switch/gpio_switch.cpp @@ -27,7 +27,7 @@ void GPIOSwitch::dump_config() { for (auto *lock : this->interlock_) { if (lock == this) continue; - ESP_LOGCONFIG(TAG, " %s", lock->get_name().c_str()); + ESP_LOGCONFIG(TAG, " %s", LOG_STR_ARG(lock->get_log_name())); } } #endif diff --git a/esphome/components/homeassistant/button/homeassistant_button.cpp b/esphome/components/homeassistant/button/homeassistant_button.cpp index 6cf1c87eaa5..85ed0c42e99 100644 --- a/esphome/components/homeassistant/button/homeassistant_button.cpp +++ b/esphome/components/homeassistant/button/homeassistant_button.cpp @@ -26,7 +26,7 @@ void HomeassistantButton::press_action() { #ifdef USE_API_WIZARD_LINKED_INPUTS if (this->entity_id_[0] == '\0') { - ESP_LOGW(TAG, "'%s': No entity ID set yet", this->get_name().c_str()); + ESP_LOGW(TAG, "'%s': No entity ID set yet", LOG_STR_ARG(this->get_log_name())); return; } #endif diff --git a/esphome/components/homeassistant/number/homeassistant_number.cpp b/esphome/components/homeassistant/number/homeassistant_number.cpp index df92aad38eb..fabe2d87364 100644 --- a/esphome/components/homeassistant/number/homeassistant_number.cpp +++ b/esphome/components/homeassistant/number/homeassistant_number.cpp @@ -31,7 +31,7 @@ void HomeassistantNumber::min_retrieved_(StringRef min) { ESP_LOGE(TAG, "'%s': Can't convert 'min' value '%s' to number!", this->entity_id_, min.c_str()); return; } - ESP_LOGD(TAG, "'%s': Min retrieved: %s", get_name().c_str(), min.c_str()); + ESP_LOGD(TAG, "'%s': Min retrieved: %s", LOG_STR_ARG(this->get_log_name()), min.c_str()); this->traits.set_min_value(min_value.value()); } @@ -41,7 +41,7 @@ void HomeassistantNumber::max_retrieved_(StringRef max) { ESP_LOGE(TAG, "'%s': Can't convert 'max' value '%s' to number!", this->entity_id_, max.c_str()); return; } - ESP_LOGD(TAG, "'%s': Max retrieved: %s", get_name().c_str(), max.c_str()); + ESP_LOGD(TAG, "'%s': Max retrieved: %s", LOG_STR_ARG(this->get_log_name()), max.c_str()); this->traits.set_max_value(max_value.value()); } @@ -51,7 +51,7 @@ void HomeassistantNumber::step_retrieved_(StringRef step) { ESP_LOGE(TAG, "'%s': Can't convert 'step' value '%s' to number!", this->entity_id_, step.c_str()); return; } - ESP_LOGD(TAG, "'%s': Step Retrieved %s", get_name().c_str(), step.c_str()); + ESP_LOGD(TAG, "'%s': Step Retrieved %s", LOG_STR_ARG(this->get_log_name()), step.c_str()); this->traits.set_step(step_value.value()); } @@ -82,7 +82,7 @@ void HomeassistantNumber::control(float value) { #ifdef USE_API_WIZARD_LINKED_INPUTS if (this->entity_id_[0] == '\0') { - ESP_LOGW(TAG, "'%s': No entity ID set yet", this->get_name().c_str()); + ESP_LOGW(TAG, "'%s': No entity ID set yet", LOG_STR_ARG(this->get_log_name())); return; } #endif diff --git a/esphome/components/homeassistant/select/homeassistant_select.cpp b/esphome/components/homeassistant/select/homeassistant_select.cpp index 189a6b1f376..f8e658ac8f6 100644 --- a/esphome/components/homeassistant/select/homeassistant_select.cpp +++ b/esphome/components/homeassistant/select/homeassistant_select.cpp @@ -232,7 +232,7 @@ void HomeassistantSelect::control(size_t index) { #ifdef USE_API_WIZARD_LINKED_INPUTS if (this->entity_id_[0] == '\0') { - ESP_LOGW(TAG, "'%s': No entity ID set yet", this->get_name().c_str()); + ESP_LOGW(TAG, "'%s': No entity ID set yet", LOG_STR_ARG(this->get_log_name())); return; } #endif diff --git a/esphome/components/homeassistant/switch/homeassistant_switch.cpp b/esphome/components/homeassistant/switch/homeassistant_switch.cpp index 841f16df200..584573d8818 100644 --- a/esphome/components/homeassistant/switch/homeassistant_switch.cpp +++ b/esphome/components/homeassistant/switch/homeassistant_switch.cpp @@ -42,7 +42,7 @@ void HomeassistantSwitch::write_state(bool state) { #ifdef USE_API_WIZARD_LINKED_INPUTS if (this->entity_id_[0] == '\0') { - ESP_LOGW(TAG, "'%s': No entity ID set yet", this->get_name().c_str()); + ESP_LOGW(TAG, "'%s': No entity ID set yet", LOG_STR_ARG(this->get_log_name())); return; } #endif diff --git a/esphome/components/homeassistant/text/homeassistant_text.cpp b/esphome/components/homeassistant/text/homeassistant_text.cpp index 7155f6ee189..6c006224dc6 100644 --- a/esphome/components/homeassistant/text/homeassistant_text.cpp +++ b/esphome/components/homeassistant/text/homeassistant_text.cpp @@ -81,7 +81,7 @@ void HomeassistantText::control(const std::string &value) { #ifdef USE_API_WIZARD_LINKED_INPUTS if (this->entity_id_[0] == '\0') { - ESP_LOGW(TAG, "'%s': No entity ID set yet", this->get_name().c_str()); + ESP_LOGW(TAG, "'%s': No entity ID set yet", LOG_STR_ARG(this->get_log_name())); return; } #endif diff --git a/esphome/components/infrared/infrared.cpp b/esphome/components/infrared/infrared.cpp index 9b766a8996c..78077af8fb8 100644 --- a/esphome/components/infrared/infrared.cpp +++ b/esphome/components/infrared/infrared.cpp @@ -11,7 +11,7 @@ void Infrared::dump_config() { "Infrared '%s'\n" " Supports Transmitter: %s\n" " Supports Receiver: %s", - this->get_name().c_str(), YESNO(this->get_supports_transmitter()), + LOG_STR_ARG(this->get_log_name()), YESNO(this->get_supports_transmitter()), YESNO(this->get_supports_receiver())); } diff --git a/esphome/components/ir_rf_base/ir_rf_base.cpp b/esphome/components/ir_rf_base/ir_rf_base.cpp index 91db4252c07..4bfdc7b7ef6 100644 --- a/esphome/components/ir_rf_base/ir_rf_base.cpp +++ b/esphome/components/ir_rf_base/ir_rf_base.cpp @@ -143,7 +143,7 @@ bool IrRfEntity::expect_api_reply_(api::APIConnection *conn) { if (this->api_reply_ == ApiReply::API_REPLY_WAITING) this->finish_api_reply_(false); if (this->api_reply_ != ApiReply::API_REPLY_NONE && !this->send_api_reply_()) { - ESP_LOGW(TAG, "'%s': transmit %s", this->get_name().c_str(), LOG_STR_LITERAL("refused, reply still owed")); + ESP_LOGW(TAG, "'%s': transmit %s", LOG_STR_ARG(this->get_log_name()), LOG_STR_LITERAL("refused, reply still owed")); this->refuse_api_call_(conn); return false; } @@ -198,13 +198,14 @@ void IrRfEntity::loop() { if (this->api_reply_ != ApiReply::API_REPLY_WAITING) { if (this->send_api_reply_() || remaining > 0) return; - ESP_LOGW(TAG, "'%s': transmit %s", this->get_name().c_str(), LOG_STR_LITERAL("reply dropped, client not reading")); + ESP_LOGW(TAG, "'%s': transmit %s", LOG_STR_ARG(this->get_log_name()), + LOG_STR_LITERAL("reply dropped, client not reading")); this->clear_api_reply_(); return; } if (remaining > 0) return; - ESP_LOGW(TAG, "'%s': transmit %s", this->get_name().c_str(), LOG_STR_LITERAL("never reported completion")); + ESP_LOGW(TAG, "'%s': transmit %s", LOG_STR_ARG(this->get_log_name()), LOG_STR_LITERAL("never reported completion")); this->finish_api_reply_(false); } diff --git a/esphome/components/ir_rf_proxy/ir_rf_proxy.cpp b/esphome/components/ir_rf_proxy/ir_rf_proxy.cpp index 0eae11d1a51..c88f1315916 100644 --- a/esphome/components/ir_rf_proxy/ir_rf_proxy.cpp +++ b/esphome/components/ir_rf_proxy/ir_rf_proxy.cpp @@ -17,7 +17,7 @@ void IrRfProxy::dump_config() { "IR Proxy '%s'\n" " Supports Transmitter: %s\n" " Supports Receiver: %s", - this->get_name().c_str(), YESNO(this->get_supports_transmitter()), + LOG_STR_ARG(this->get_log_name()), YESNO(this->get_supports_transmitter()), YESNO(this->get_supports_receiver())); if (this->is_rf()) { @@ -44,7 +44,7 @@ void RfProxy::dump_config() { "RF Proxy '%s'\n" " Supports Transmitter: %s\n" " Supports Receiver: %s", - this->get_name().c_str(), YESNO(this->get_supports_transmitter()), + LOG_STR_ARG(this->get_log_name()), YESNO(this->get_supports_transmitter()), YESNO(this->get_supports_receiver())); const auto &traits = this->traits_; diff --git a/esphome/components/ld6002b/ld6002b.cpp b/esphome/components/ld6002b/ld6002b.cpp index fdf1b15d06c..ca7b0d77267 100644 --- a/esphome/components/ld6002b/ld6002b.cpp +++ b/esphome/components/ld6002b/ld6002b.cpp @@ -1058,8 +1058,8 @@ void LD6002BComponent::publish_number_clamped_(number::Number *number, float val // Outside the declared range the user cannot write the value back, so publish // what they can reach and say what the module actually sent. if (value < min_value || value > max_value) { - ESP_LOGW(TAG, "'%s': module reported %.1f, clamped to %.1f..%.1f", number->get_name().c_str(), value, min_value, - max_value); + ESP_LOGW(TAG, "'%s': module reported %.1f, clamped to %.1f..%.1f", LOG_STR_ARG(number->get_log_name()), value, + min_value, max_value); value = std::clamp(value, min_value, max_value); } number->publish_state(value); diff --git a/esphome/components/light/addressable_light.cpp b/esphome/components/light/addressable_light.cpp index a6440700fa9..86faac3a08b 100644 --- a/esphome/components/light/addressable_light.cpp +++ b/esphome/components/light/addressable_light.cpp @@ -10,7 +10,7 @@ void AddressableLight::call_setup() { #ifdef ESPHOME_LOG_HAS_VERY_VERBOSE this->set_interval(5000, [this]() { - const char *name = this->state_parent_ == nullptr ? "" : this->state_parent_->get_name().c_str(); + const char *name = this->state_parent_ == nullptr ? "" : LOG_STR_ARG(this->state_parent_->get_log_name()); ESP_LOGVV(TAG, "Addressable Light '%s' (effect_active=%s)", name, YESNO(this->effect_active_)); for (int i = 0; i < this->size(); i++) { auto color = this->get(i); diff --git a/esphome/components/light/light_call.cpp b/esphome/components/light/light_call.cpp index 5ad9215eedf..89c15ec8113 100644 --- a/esphome/components/light/light_call.cpp +++ b/esphome/components/light/light_call.cpp @@ -74,7 +74,7 @@ static void log_percent(const LogString *param, float value) { #endif void LightCall::perform() { - const char *name = this->parent_->get_name().c_str(); + const char *name = LOG_STR_ARG(this->parent_->get_log_name()); LightColorValues v = this->validate_(); const bool publish = this->get_publish_(); @@ -182,7 +182,7 @@ void LightCall::perform() { } void LightCall::log_and_clear_unsupported_(FieldFlags flag, const LogString *feature, bool use_color_mode_log) { - auto *name = this->parent_->get_name().c_str(); + auto *name = LOG_STR_ARG(this->parent_->get_log_name()); if (use_color_mode_log) { log_color_mode_not_supported(name, feature); } else { @@ -192,7 +192,7 @@ void LightCall::log_and_clear_unsupported_(FieldFlags flag, const LogString *fea } LightColorValues LightCall::validate_() { - auto *name = this->parent_->get_name().c_str(); + auto *name = LOG_STR_ARG(this->parent_->get_log_name()); auto traits = this->parent_->get_traits(); // Snapshot before the adjustments below add flags of their own @@ -446,7 +446,7 @@ void LightCall::transform_parameters_(const LightTraits &traits) { !(this->color_mode_ & ColorCapability::COLOR_TEMPERATURE) && // min_mireds > 0.0f && max_mireds > 0.0f) { ESP_LOGV(TAG, "'%s': setting cold/warm white channels using white/color temperature values", - this->parent_->get_name().c_str()); + LOG_STR_ARG(this->parent_->get_log_name())); // Only compute cold_white/warm_white from color_temperature if they're not already explicitly set. // This is important for state restoration, where both color_temperature and cold_white/warm_white // are restored from flash - we want to preserve the saved cold_white/warm_white values. @@ -492,7 +492,7 @@ ColorMode LightCall::compute_color_mode_(const LightTraits &traits) { // Don't change if the current mode is in the intersection (suitable AND supported) if (ColorModeMask::mask_contains(intersection, current_mode)) { - ESP_LOGV(TAG, "'%s': color mode not specified; retaining %s", this->parent_->get_name().c_str(), + ESP_LOGV(TAG, "'%s': color mode not specified; retaining %s", LOG_STR_ARG(this->parent_->get_log_name()), LOG_STR_ARG(color_mode_to_human(current_mode))); return current_mode; } @@ -500,7 +500,7 @@ ColorMode LightCall::compute_color_mode_(const LightTraits &traits) { // Use the preferred suitable mode. if (intersection != 0) { ColorMode mode = ColorModeMask::first_value_from_mask(intersection); - ESP_LOGV(TAG, "'%s': color mode not specified; using %s", this->parent_->get_name().c_str(), + ESP_LOGV(TAG, "'%s': color mode not specified; using %s", LOG_STR_ARG(this->parent_->get_log_name()), LOG_STR_ARG(color_mode_to_human(mode))); return mode; } @@ -508,7 +508,7 @@ ColorMode LightCall::compute_color_mode_(const LightTraits &traits) { // There's no supported mode for this call, so warn, use the current more or a mode at random and let validation strip // out whatever we don't support. auto color_mode = current_mode != ColorMode::UNKNOWN ? current_mode : *supported_modes.begin(); - ESP_LOGW(TAG, "'%s': no suitable color mode supported; defaulting to %s", this->parent_->get_name().c_str(), + ESP_LOGW(TAG, "'%s': no suitable color mode supported; defaulting to %s", LOG_STR_ARG(this->parent_->get_log_name()), LOG_STR_ARG(color_mode_to_human(color_mode))); return color_mode; } @@ -587,7 +587,7 @@ LightCall &LightCall::set_effect(const char *effect, size_t len) { } } if (!found) { - ESP_LOGW(TAG, "'%s': no such effect '%.*s'", this->parent_->get_name().c_str(), (int) len, effect); + ESP_LOGW(TAG, "'%s': no such effect '%.*s'", LOG_STR_ARG(this->parent_->get_log_name()), (int) len, effect); } return *this; } diff --git a/esphome/components/light/light_state.cpp b/esphome/components/light/light_state.cpp index 9fe483a291c..2de35e81da1 100644 --- a/esphome/components/light/light_state.cpp +++ b/esphome/components/light/light_state.cpp @@ -93,7 +93,7 @@ void LightState::setup() { call.perform(); } void LightState::dump_config() { - ESP_LOGCONFIG(TAG, "Light '%s'", this->get_name().c_str()); + ESP_LOGCONFIG(TAG, "Light '%s'", LOG_STR_ARG(this->get_log_name())); auto traits = this->get_traits(); if (traits.supports_color_capability(ColorCapability::BRIGHTNESS)) { #ifdef USE_LIGHT_GAMMA_LUT diff --git a/esphome/components/lock/lock.cpp b/esphome/components/lock/lock.cpp index aca3a3b0248..ff6bb71c291 100644 --- a/esphome/components/lock/lock.cpp +++ b/esphome/components/lock/lock.cpp @@ -30,10 +30,10 @@ void Lock::lock() { this->set_state_(LOCK_STATE_LOCKED); } void Lock::unlock() { this->set_state_(LOCK_STATE_UNLOCKED); } void Lock::open() { if (traits.get_supports_open()) { - ESP_LOGD(TAG, "'%s' Opening.", this->get_name().c_str()); + ESP_LOGD(TAG, "'%s' Opening.", LOG_STR_ARG(this->get_log_name())); this->open_latch(); } else { - ESP_LOGW(TAG, "'%s' Does not support Open.", this->get_name().c_str()); + ESP_LOGW(TAG, "'%s' Does not support Open.", LOG_STR_ARG(this->get_log_name())); } } void Lock::publish_state(LockState state) { @@ -42,7 +42,7 @@ void Lock::publish_state(LockState state) { this->state = state; this->rtc_.save(&this->state); - ESP_LOGV(TAG, "'%s' >> %s", this->name_.c_str(), LOG_STR_ARG(lock_state_to_string(state))); + ESP_LOGV(TAG, "'%s' >> %s", LOG_STR_ARG(this->get_log_name()), LOG_STR_ARG(lock_state_to_string(state))); this->state_callback_.call(state); #if defined(USE_LOCK) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_lock_update(this); @@ -50,7 +50,7 @@ void Lock::publish_state(LockState state) { } void LockCall::perform() { - ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting", LOG_STR_ARG(this->parent_->get_log_name())); this->validate_(); if (this->state_.has_value()) { ESP_LOGV(TAG, " State: %s", LOG_STR_ARG(lock_state_to_string(*this->state_))); @@ -92,7 +92,7 @@ LockCall &LockCall::set_state(const char *state) { } else if (ESPHOME_strcasecmp_P(state, ESPHOME_PSTR("NONE")) == 0) { this->set_state(LOCK_STATE_NONE); } else { - ESP_LOGW(TAG, "'%s' - Unrecognized state %s", this->parent_->get_name().c_str(), state); + ESP_LOGW(TAG, "'%s' - Unrecognized state %s", LOG_STR_ARG(this->parent_->get_log_name()), state); } return *this; } diff --git a/esphome/components/lock/lock.h b/esphome/components/lock/lock.h index b32d0da8e74..2862c33955f 100644 --- a/esphome/components/lock/lock.h +++ b/esphome/components/lock/lock.h @@ -13,7 +13,7 @@ class Lock; #define LOG_LOCK(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ LOG_ENTITY_ICON(TAG, prefix, *(obj)); \ if ((obj)->traits.get_assumed_state()) { \ ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \ diff --git a/esphome/components/media_player/media_player.cpp b/esphome/components/media_player/media_player.cpp index 423832dd2ff..1716a054c71 100644 --- a/esphome/components/media_player/media_player.cpp +++ b/esphome/components/media_player/media_player.cpp @@ -109,7 +109,7 @@ void MediaPlayerCall::validate_() { } void MediaPlayerCall::perform() { - ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting", LOG_STR_ARG(this->parent_->get_log_name())); this->validate_(); if (this->command_.has_value()) { const char *command_s = media_player_command_to_string(this->command_.value()); @@ -177,7 +177,7 @@ MediaPlayerCall &MediaPlayerCall::set_command(const char *command) { } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("GROUP_JOIN")) == 0) { this->set_command(MEDIA_PLAYER_COMMAND_GROUP_JOIN); } else { - ESP_LOGW(TAG, "'%s' - Unrecognized command %s", this->parent_->get_name().c_str(), command); + ESP_LOGW(TAG, "'%s' - Unrecognized command %s", LOG_STR_ARG(this->parent_->get_log_name()), command); } return *this; } diff --git a/esphome/components/mlx90614/mlx90614.cpp b/esphome/components/mlx90614/mlx90614.cpp index a67d770cc3d..c85223b142b 100644 --- a/esphome/components/mlx90614/mlx90614.cpp +++ b/esphome/components/mlx90614/mlx90614.cpp @@ -174,7 +174,7 @@ void MLX90614Component::update() { // Bit 15 set means the device flagged the reading as invalid const float temperature = (raw & 0x8000) ? NAN : raw * 0.02f - 273.15f; - ESP_LOGD(TAG, "'%s': Got temperature=%.1f°C", sensor->get_name().c_str(), temperature); + ESP_LOGD(TAG, "'%s': Got temperature=%.1f°C", LOG_STR_ARG(sensor->get_log_name()), temperature); sensor->publish_state(temperature); return ec; }; diff --git a/esphome/components/modbus_controller/number/modbus_number.cpp b/esphome/components/modbus_controller/number/modbus_number.cpp index f33fc36b0a1..6d228872443 100644 --- a/esphome/components/modbus_controller/number/modbus_number.cpp +++ b/esphome/components/modbus_controller/number/modbus_number.cpp @@ -57,7 +57,8 @@ void ModbusNumber::control(float value) { bytes.push_back(word_bytes[1]); } if (!this->send_raw_frame_deprecated_(std::span(bytes.data(), bytes.size()))) { - ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", this->get_name().c_str()); + ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", + LOG_STR_ARG(this->get_log_name())); return; } this->publish_state(value); @@ -82,7 +83,7 @@ void ModbusNumber::control(float value) { ESP_LOGD(TAG, "Updating register: connected Sensor=%s start address=0x%X register count=%d new value=%.02f (val=%.02f)", - this->get_name().c_str(), this->start_address, this->entity_count(), value, write_value); + LOG_STR_ARG(this->get_log_name()), this->start_address, this->entity_count(), value, write_value); bool queued; if (this->entity_count() == 1 && !this->use_write_multiple_) { @@ -91,7 +92,8 @@ void ModbusNumber::control(float value) { queued = this->write_multiple_registers(this->write_address(), data); } if (!queued) { - ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", this->get_name().c_str()); + ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", + LOG_STR_ARG(this->get_log_name())); return; } this->publish_state(value); diff --git a/esphome/components/modbus_controller/select/modbus_select.cpp b/esphome/components/modbus_controller/select/modbus_select.cpp index 793aa8e9ea4..a68bb0c9318 100644 --- a/esphome/components/modbus_controller/select/modbus_select.cpp +++ b/esphome/components/modbus_controller/select/modbus_select.cpp @@ -100,7 +100,8 @@ void ModbusSelect::control(size_t index) { } if (!queued) { - ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", this->get_name().c_str()); + ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", + LOG_STR_ARG(this->get_log_name())); return; } if (this->optimistic_) diff --git a/esphome/components/modbus_controller/switch/modbus_switch.cpp b/esphome/components/modbus_controller/switch/modbus_switch.cpp index fe2b2762313..7a9f51395ea 100644 --- a/esphome/components/modbus_controller/switch/modbus_switch.cpp +++ b/esphome/components/modbus_controller/switch/modbus_switch.cpp @@ -48,7 +48,7 @@ void ModbusSwitch::parse_and_publish(std::span data) { } } - ESP_LOGV(TAG, "Publish '%s': new value = %s type = %d address = %X offset = %zx", this->get_name().c_str(), + ESP_LOGV(TAG, "Publish '%s': new value = %s type = %d address = %X offset = %zx", LOG_STR_ARG(this->get_log_name()), ONOFF(value), (int) this->register_type, this->start_address, offset); this->publish_state(value); } @@ -77,7 +77,8 @@ void ModbusSwitch::write_state(bool state) { format_hex_pretty_to(hex_buf, sizeof(hex_buf), data.data(), data.size())); // The lambda filled a legacy raw frame (device address + function code + data). if (!this->send_raw_frame_deprecated_(data)) { - ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", this->get_name().c_str()); + ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", + LOG_STR_ARG(this->get_log_name())); return; } this->publish_state(state); @@ -93,8 +94,8 @@ void ModbusSwitch::write_state(bool state) { write_value = val.value(); } ESP_LOGV(TAG, "write_state '%s': new value = %s (wire = %s) type = %d address = %X offset = %x", - this->get_name().c_str(), ONOFF(state), ONOFF(write_value), (int) this->register_type, this->start_address, - this->offset); + LOG_STR_ARG(this->get_log_name()), ONOFF(state), ONOFF(write_value), (int) this->register_type, + this->start_address, this->offset); bool queued; if (this->register_type == EntityType::COIL) { // offset for coil and discrete inputs is the coil/register number not bytes @@ -113,7 +114,8 @@ void ModbusSwitch::write_state(bool state) { } } if (!queued) { - ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", this->get_name().c_str()); + ESP_LOGW(TAG, "Modbus write for '%s' was refused by the hub; state not published", + LOG_STR_ARG(this->get_log_name())); return; } this->publish_state(state); diff --git a/esphome/components/mqtt/mqtt_alarm_control_panel.cpp b/esphome/components/mqtt/mqtt_alarm_control_panel.cpp index 225f8396339..474c36ba3bd 100644 --- a/esphome/components/mqtt/mqtt_alarm_control_panel.cpp +++ b/esphome/components/mqtt/mqtt_alarm_control_panel.cpp @@ -59,9 +59,9 @@ void MQTTAlarmControlPanelComponent::setup() { if (!root.isNull()) { const char *state = root[ESPHOME_F("state")]; if (state == nullptr) { - ESP_LOGW(TAG, "'%s': JSON payload missing 'state' key", this->friendly_name_().c_str()); + ESP_LOGW(TAG, "'%s': JSON payload missing 'state' key", LOG_STR_ARG(this->friendly_name_())); } else if (!apply_command(call, state)) { - ESP_LOGW(TAG, "'%s': Received unknown state in JSON payload: %s", this->friendly_name_().c_str(), state); + ESP_LOGW(TAG, "'%s': Received unknown state in JSON payload: %s", LOG_STR_ARG(this->friendly_name_()), state); } else { const char *code = root[ESPHOME_F("code")]; if (code != nullptr) { @@ -70,14 +70,14 @@ void MQTTAlarmControlPanelComponent::setup() { } } } else if (!apply_command(call, payload.c_str())) { - ESP_LOGW(TAG, "'%s': Received unknown command payload %s", this->friendly_name_().c_str(), payload.c_str()); + ESP_LOGW(TAG, "'%s': Received unknown command payload %s", LOG_STR_ARG(this->friendly_name_()), payload.c_str()); } call.perform(); }); } void MQTTAlarmControlPanelComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT alarm_control_panel '%s':", this->alarm_control_panel_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT alarm_control_panel '%s':", LOG_STR_ARG(this->alarm_control_panel_->get_log_name())); LOG_MQTT_COMPONENT(true, true); ESP_LOGCONFIG(TAG, " Supported Features: %" PRIu32 "\n" diff --git a/esphome/components/mqtt/mqtt_binary_sensor.cpp b/esphome/components/mqtt/mqtt_binary_sensor.cpp index 7a75cca6e88..7e9bf9e7bc7 100644 --- a/esphome/components/mqtt/mqtt_binary_sensor.cpp +++ b/esphome/components/mqtt/mqtt_binary_sensor.cpp @@ -18,7 +18,7 @@ void MQTTBinarySensorComponent::setup() { } void MQTTBinarySensorComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Binary Sensor '%s':", this->binary_sensor_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Binary Sensor '%s':", LOG_STR_ARG(this->binary_sensor_->get_log_name())); LOG_MQTT_COMPONENT(true, false); } MQTTBinarySensorComponent::MQTTBinarySensorComponent(binary_sensor::BinarySensor *binary_sensor) diff --git a/esphome/components/mqtt/mqtt_button.cpp b/esphome/components/mqtt/mqtt_button.cpp index 906913723cc..738fc064ccc 100644 --- a/esphome/components/mqtt/mqtt_button.cpp +++ b/esphome/components/mqtt/mqtt_button.cpp @@ -19,13 +19,13 @@ void MQTTButtonComponent::setup() { if (payload == "PRESS") { this->button_->press(); } else { - ESP_LOGW(TAG, "'%s': Received unknown status payload: %s", this->friendly_name_().c_str(), payload.c_str()); + ESP_LOGW(TAG, "'%s': Received unknown status payload: %s", LOG_STR_ARG(this->friendly_name_()), payload.c_str()); this->status_momentary_warning("state", 5000); } }); } void MQTTButtonComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Button '%s': ", this->button_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Button '%s': ", LOG_STR_ARG(this->button_->get_log_name())); LOG_MQTT_COMPONENT(false, true); } diff --git a/esphome/components/mqtt/mqtt_component.cpp b/esphome/components/mqtt/mqtt_component.cpp index adb5a958287..02b9e5821f2 100644 --- a/esphome/components/mqtt/mqtt_component.cpp +++ b/esphome/components/mqtt/mqtt_component.cpp @@ -186,11 +186,11 @@ bool MQTTComponent::send_discovery_() { StringRef discovery_topic = this->get_discovery_topic_to_(discovery_topic_buf, discovery_info); if (discovery_info.clean) { - ESP_LOGV(TAG, "'%s': Cleaning discovery", this->friendly_name_().c_str()); + ESP_LOGV(TAG, "'%s': Cleaning discovery", LOG_STR_ARG(this->friendly_name_())); return global_mqtt_client->publish(discovery_topic.c_str(), "", 0, this->qos_, true); } - ESP_LOGV(TAG, "'%s': Sending discovery", this->friendly_name_().c_str()); + ESP_LOGV(TAG, "'%s': Sending discovery", LOG_STR_ARG(this->friendly_name_())); // NOLINTBEGIN(clang-analyzer-cplusplus.NewDeleteLeaks) false positive with ArduinoJson return global_mqtt_client->publish_json( @@ -207,7 +207,8 @@ bool MQTTComponent::send_discovery_() { } // Fields from EntityBase - root[MQTT_NAME] = this->get_entity()->has_own_name() ? this->friendly_name_() : StringRef(); + char name_buf[ENTITY_NAME_BUF_SIZE]; + root[MQTT_NAME] = this->get_entity()->has_own_name() ? this->get_entity()->get_name_to(name_buf) : StringRef(); if (this->is_disabled_by_default_()) root[MQTT_ENABLED_BY_DEFAULT] = false; @@ -255,7 +256,7 @@ bool MQTTComponent::send_discovery_() { if (discovery_info.unique_id_generator == MQTT_MAC_ADDRESS_UNIQUE_ID_GENERATOR) { char friendly_name_hash[9]; buf_append_printf(friendly_name_hash, sizeof(friendly_name_hash), 0, "%08" PRIx32, - fnv1_hash(this->friendly_name_().c_str())); + fnv1_hash(this->get_entity()->get_name_to(name_buf).c_str())); // Format: mac-component_type-hash (e.g. "aabbccddeeff-sensor-12345678") // MAC (12) + "-" (1) + domain (max 20) + "-" (1) + hash (8) + null (1) = 43 char unique_id[MAC_ADDRESS_BUFFER_SIZE + ESPHOME_DOMAIN_MAX_LEN + 11]; @@ -407,7 +408,7 @@ void MQTTComponent::schedule_resend_state() { this->resend_state_ = true; } bool MQTTComponent::is_connected_() const { return global_mqtt_client->is_connected(); } // Pull these properties from EntityBase if not overridden -const StringRef &MQTTComponent::friendly_name_() const { return this->get_entity()->get_name(); } +const LogString *MQTTComponent::friendly_name_() const { return this->get_entity()->get_log_name(); } StringRef MQTTComponent::get_default_object_id_to_(std::span buf) const { return this->get_entity()->get_object_id_to(buf); } diff --git a/esphome/components/mqtt/mqtt_component.h b/esphome/components/mqtt/mqtt_component.h index b4ae6244048..4ee25c410de 100644 --- a/esphome/components/mqtt/mqtt_component.h +++ b/esphome/components/mqtt/mqtt_component.h @@ -299,7 +299,7 @@ class MQTTComponent : public Component { virtual const EntityBase *get_entity() const = 0; /// Get the friendly name of this MQTT component. - const StringRef &friendly_name_() const; + const LogString *friendly_name_() const; /// Get the icon field of this component into a stack buffer const char *get_icon_to_(std::span buf) const { return this->get_entity()->get_icon_to(buf); } diff --git a/esphome/components/mqtt/mqtt_cover.cpp b/esphome/components/mqtt/mqtt_cover.cpp index a7da9a1b228..c05c8d1ceb2 100644 --- a/esphome/components/mqtt/mqtt_cover.cpp +++ b/esphome/components/mqtt/mqtt_cover.cpp @@ -63,7 +63,7 @@ void MQTTCoverComponent::setup() { } void MQTTCoverComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT cover '%s':", this->cover_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT cover '%s':", LOG_STR_ARG(this->cover_->get_log_name())); auto traits = this->cover_->get_traits(); bool has_command_topic = traits.get_supports_position() || !traits.get_supports_tilt(); LOG_MQTT_COMPONENT(true, has_command_topic); diff --git a/esphome/components/mqtt/mqtt_date.cpp b/esphome/components/mqtt/mqtt_date.cpp index b5f1cf8fb8b..43ee3fc2eae 100644 --- a/esphome/components/mqtt/mqtt_date.cpp +++ b/esphome/components/mqtt/mqtt_date.cpp @@ -35,7 +35,7 @@ void MQTTDateComponent::setup() { } void MQTTDateComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Date '%s':", this->date_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Date '%s':", LOG_STR_ARG(this->date_->get_log_name())); LOG_MQTT_COMPONENT(true, true); } diff --git a/esphome/components/mqtt/mqtt_datetime.cpp b/esphome/components/mqtt/mqtt_datetime.cpp index 82755809387..d54e0581077 100644 --- a/esphome/components/mqtt/mqtt_datetime.cpp +++ b/esphome/components/mqtt/mqtt_datetime.cpp @@ -46,7 +46,7 @@ void MQTTDateTimeComponent::setup() { } void MQTTDateTimeComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT DateTime '%s':", this->datetime_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT DateTime '%s':", LOG_STR_ARG(this->datetime_->get_log_name())); LOG_MQTT_COMPONENT(true, true); } diff --git a/esphome/components/mqtt/mqtt_event.cpp b/esphome/components/mqtt/mqtt_event.cpp index 4266722ca82..e5484d03164 100644 --- a/esphome/components/mqtt/mqtt_event.cpp +++ b/esphome/components/mqtt/mqtt_event.cpp @@ -28,7 +28,7 @@ void MQTTEventComponent::setup() { } void MQTTEventComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Event '%s': ", this->event_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Event '%s': ", LOG_STR_ARG(this->event_->get_log_name())); ESP_LOGCONFIG(TAG, "Event Types: "); for (const char *event_type : this->event_->get_event_types()) { ESP_LOGCONFIG(TAG, "- %s", event_type); diff --git a/esphome/components/mqtt/mqtt_fan.cpp b/esphome/components/mqtt/mqtt_fan.cpp index 90f51cf6cec..cfb6f50784a 100644 --- a/esphome/components/mqtt/mqtt_fan.cpp +++ b/esphome/components/mqtt/mqtt_fan.cpp @@ -32,15 +32,15 @@ void MQTTFanComponent::setup() { auto val = parse_on_off(payload.c_str()); switch (val) { case PARSE_ON: - ESP_LOGD(TAG, "'%s' Turning Fan ON.", this->friendly_name_().c_str()); + ESP_LOGD(TAG, "'%s' Turning Fan ON.", LOG_STR_ARG(this->friendly_name_())); this->state_->turn_on().perform(); break; case PARSE_OFF: - ESP_LOGD(TAG, "'%s' Turning Fan OFF.", this->friendly_name_().c_str()); + ESP_LOGD(TAG, "'%s' Turning Fan OFF.", LOG_STR_ARG(this->friendly_name_())); this->state_->turn_off().perform(); break; case PARSE_TOGGLE: - ESP_LOGD(TAG, "'%s' Toggling Fan.", this->friendly_name_().c_str()); + ESP_LOGD(TAG, "'%s' Toggling Fan.", LOG_STR_ARG(this->friendly_name_())); this->state_->toggle().perform(); break; case PARSE_NONE: @@ -56,11 +56,11 @@ void MQTTFanComponent::setup() { auto val = parse_on_off(payload.c_str(), "forward", "reverse"); switch (val) { case PARSE_ON: - ESP_LOGD(TAG, "'%s': Setting direction FORWARD", this->friendly_name_().c_str()); + ESP_LOGD(TAG, "'%s': Setting direction FORWARD", LOG_STR_ARG(this->friendly_name_())); this->state_->make_call().set_direction(fan::FanDirection::FORWARD).perform(); break; case PARSE_OFF: - ESP_LOGD(TAG, "'%s': Setting direction REVERSE", this->friendly_name_().c_str()); + ESP_LOGD(TAG, "'%s': Setting direction REVERSE", LOG_STR_ARG(this->friendly_name_())); this->state_->make_call().set_direction(fan::FanDirection::REVERSE).perform(); break; case PARSE_TOGGLE: @@ -83,11 +83,11 @@ void MQTTFanComponent::setup() { auto val = parse_on_off(payload.c_str(), "oscillate_on", "oscillate_off"); switch (val) { case PARSE_ON: - ESP_LOGD(TAG, "'%s': Setting oscillating ON", this->friendly_name_().c_str()); + ESP_LOGD(TAG, "'%s': Setting oscillating ON", LOG_STR_ARG(this->friendly_name_())); this->state_->make_call().set_oscillating(true).perform(); break; case PARSE_OFF: - ESP_LOGD(TAG, "'%s': Setting oscillating OFF", this->friendly_name_().c_str()); + ESP_LOGD(TAG, "'%s': Setting oscillating OFF", LOG_STR_ARG(this->friendly_name_())); this->state_->make_call().set_oscillating(false).perform(); break; case PARSE_TOGGLE: @@ -125,7 +125,7 @@ void MQTTFanComponent::setup() { } void MQTTFanComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Fan '%s': ", this->state_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Fan '%s': ", LOG_STR_ARG(this->state_->get_log_name())); LOG_MQTT_COMPONENT(true, true); if (this->state_->get_traits().supports_direction()) { ESP_LOGCONFIG(TAG, @@ -168,7 +168,7 @@ void MQTTFanComponent::send_discovery(JsonObject root, mqtt::SendDiscoveryConfig bool MQTTFanComponent::publish_state() { char topic_buf[MQTT_DEFAULT_TOPIC_MAX_LEN]; const char *state_s = this->state_->state ? "ON" : "OFF"; - ESP_LOGD(TAG, "'%s' Sending state %s.", this->state_->get_name().c_str(), state_s); + ESP_LOGD(TAG, "'%s' Sending state %s.", LOG_STR_ARG(this->state_->get_log_name()), state_s); this->publish(this->get_state_topic_to_(topic_buf), state_s); bool failed = false; if (this->state_->get_traits().supports_direction()) { diff --git a/esphome/components/mqtt/mqtt_light.cpp b/esphome/components/mqtt/mqtt_light.cpp index e9058eb642d..253aa082893 100644 --- a/esphome/components/mqtt/mqtt_light.cpp +++ b/esphome/components/mqtt/mqtt_light.cpp @@ -88,7 +88,7 @@ void MQTTJSONLightComponent::send_discovery(JsonObject root, mqtt::SendDiscovery } bool MQTTJSONLightComponent::send_initial_state() { return this->publish_state_(); } void MQTTJSONLightComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Light '%s':", this->state_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Light '%s':", LOG_STR_ARG(this->state_->get_log_name())); LOG_MQTT_COMPONENT(true, true); } diff --git a/esphome/components/mqtt/mqtt_lock.cpp b/esphome/components/mqtt/mqtt_lock.cpp index 8d8b4c38e88..a634a3bf4fd 100644 --- a/esphome/components/mqtt/mqtt_lock.cpp +++ b/esphome/components/mqtt/mqtt_lock.cpp @@ -24,7 +24,7 @@ void MQTTLockComponent::setup() { } else if (ESPHOME_strcasecmp_P(payload.c_str(), ESPHOME_PSTR("OPEN")) == 0) { this->lock_->open(); } else { - ESP_LOGW(TAG, "'%s': Received unknown status payload: %s", this->friendly_name_().c_str(), payload.c_str()); + ESP_LOGW(TAG, "'%s': Received unknown status payload: %s", LOG_STR_ARG(this->friendly_name_()), payload.c_str()); this->status_momentary_warning("state", 5000); } }); @@ -32,7 +32,7 @@ void MQTTLockComponent::setup() { [this](LockState /*state*/) { this->defer("send", [this]() { this->publish_state(); }); }); } void MQTTLockComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Lock '%s': ", this->lock_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Lock '%s': ", LOG_STR_ARG(this->lock_->get_log_name())); LOG_MQTT_COMPONENT(true, true); } diff --git a/esphome/components/mqtt/mqtt_number.cpp b/esphome/components/mqtt/mqtt_number.cpp index 3b2bebf291d..53306ef02e9 100644 --- a/esphome/components/mqtt/mqtt_number.cpp +++ b/esphome/components/mqtt/mqtt_number.cpp @@ -33,7 +33,7 @@ void MQTTNumberComponent::setup() { } void MQTTNumberComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Number '%s':", this->number_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Number '%s':", LOG_STR_ARG(this->number_->get_log_name())); LOG_MQTT_COMPONENT(true, false); } diff --git a/esphome/components/mqtt/mqtt_select.cpp b/esphome/components/mqtt/mqtt_select.cpp index 42c0ae002e4..892a6a3fbc8 100644 --- a/esphome/components/mqtt/mqtt_select.cpp +++ b/esphome/components/mqtt/mqtt_select.cpp @@ -24,7 +24,7 @@ void MQTTSelectComponent::setup() { } void MQTTSelectComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Select '%s':", this->select_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Select '%s':", LOG_STR_ARG(this->select_->get_log_name())); LOG_MQTT_COMPONENT(true, false); } diff --git a/esphome/components/mqtt/mqtt_sensor.cpp b/esphome/components/mqtt/mqtt_sensor.cpp index bdaaa47e8f4..794eab5e867 100644 --- a/esphome/components/mqtt/mqtt_sensor.cpp +++ b/esphome/components/mqtt/mqtt_sensor.cpp @@ -25,7 +25,7 @@ void MQTTSensorComponent::setup() { } void MQTTSensorComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Sensor '%s':", this->sensor_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Sensor '%s':", LOG_STR_ARG(this->sensor_->get_log_name())); if (this->get_expire_after() > 0) { ESP_LOGCONFIG(TAG, " Expire After: %" PRIu32 "s", this->get_expire_after() / 1000); } diff --git a/esphome/components/mqtt/mqtt_switch.cpp b/esphome/components/mqtt/mqtt_switch.cpp index b786b4412e6..11af1940a81 100644 --- a/esphome/components/mqtt/mqtt_switch.cpp +++ b/esphome/components/mqtt/mqtt_switch.cpp @@ -28,7 +28,8 @@ void MQTTSwitchComponent::setup() { break; case PARSE_NONE: default: - ESP_LOGW(TAG, "'%s': Received unknown status payload: %s", this->friendly_name_().c_str(), payload.c_str()); + ESP_LOGW(TAG, "'%s': Received unknown status payload: %s", LOG_STR_ARG(this->friendly_name_()), + payload.c_str()); this->status_momentary_warning("state", 5000); break; } @@ -37,7 +38,7 @@ void MQTTSwitchComponent::setup() { [this](bool enabled) { this->defer("send", [this, enabled]() { this->publish_state(enabled); }); }); } void MQTTSwitchComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Switch '%s': ", this->switch_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Switch '%s': ", LOG_STR_ARG(this->switch_->get_log_name())); LOG_MQTT_COMPONENT(true, true); } diff --git a/esphome/components/mqtt/mqtt_text.cpp b/esphome/components/mqtt/mqtt_text.cpp index dd43a8e2cb3..95813a25b32 100644 --- a/esphome/components/mqtt/mqtt_text.cpp +++ b/esphome/components/mqtt/mqtt_text.cpp @@ -29,7 +29,7 @@ void MQTTTextComponent::setup() { } void MQTTTextComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT text '%s':", this->text_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT text '%s':", LOG_STR_ARG(this->text_->get_log_name())); LOG_MQTT_COMPONENT(true, true); } diff --git a/esphome/components/mqtt/mqtt_text_sensor.cpp b/esphome/components/mqtt/mqtt_text_sensor.cpp index d105aaac992..3cf501d054f 100644 --- a/esphome/components/mqtt/mqtt_text_sensor.cpp +++ b/esphome/components/mqtt/mqtt_text_sensor.cpp @@ -21,7 +21,7 @@ void MQTTTextSensor::setup() { } void MQTTTextSensor::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Text Sensor '%s':", this->sensor_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Text Sensor '%s':", LOG_STR_ARG(this->sensor_->get_log_name())); LOG_MQTT_COMPONENT(true, false); } diff --git a/esphome/components/mqtt/mqtt_time.cpp b/esphome/components/mqtt/mqtt_time.cpp index 889ee2bf349..f572f887891 100644 --- a/esphome/components/mqtt/mqtt_time.cpp +++ b/esphome/components/mqtt/mqtt_time.cpp @@ -35,7 +35,7 @@ void MQTTTimeComponent::setup() { } void MQTTTimeComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Time '%s':", this->time_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Time '%s':", LOG_STR_ARG(this->time_->get_log_name())); LOG_MQTT_COMPONENT(true, true); } diff --git a/esphome/components/mqtt/mqtt_update.cpp b/esphome/components/mqtt/mqtt_update.cpp index a4565058ea2..4811d6c21f2 100644 --- a/esphome/components/mqtt/mqtt_update.cpp +++ b/esphome/components/mqtt/mqtt_update.cpp @@ -19,7 +19,7 @@ void MQTTUpdateComponent::setup() { if (payload == "INSTALL") { this->update_->perform(); } else { - ESP_LOGW(TAG, "'%s': Received unknown update payload: %s", this->friendly_name_().c_str(), payload.c_str()); + ESP_LOGW(TAG, "'%s': Received unknown update payload: %s", LOG_STR_ARG(this->friendly_name_()), payload.c_str()); this->status_momentary_warning("state", 5000); } }); @@ -49,7 +49,7 @@ void MQTTUpdateComponent::send_discovery(JsonObject root, mqtt::SendDiscoveryCon bool MQTTUpdateComponent::send_initial_state() { return this->publish_state(); } void MQTTUpdateComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT Update '%s': ", this->update_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT Update '%s': ", LOG_STR_ARG(this->update_->get_log_name())); LOG_MQTT_COMPONENT(true, true); } diff --git a/esphome/components/mqtt/mqtt_valve.cpp b/esphome/components/mqtt/mqtt_valve.cpp index b41a482de94..7ca3e959b40 100644 --- a/esphome/components/mqtt/mqtt_valve.cpp +++ b/esphome/components/mqtt/mqtt_valve.cpp @@ -51,7 +51,7 @@ void MQTTValveComponent::setup() { } void MQTTValveComponent::dump_config() { - ESP_LOGCONFIG(TAG, "MQTT valve '%s':", this->valve_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "MQTT valve '%s':", LOG_STR_ARG(this->valve_->get_log_name())); auto traits = this->valve_->get_traits(); bool has_command_topic = traits.get_supports_position(); LOG_MQTT_COMPONENT(true, has_command_topic); diff --git a/esphome/components/nau7802/nau7802.cpp b/esphome/components/nau7802/nau7802.cpp index ad1a569e0fa..c9940916d46 100644 --- a/esphome/components/nau7802/nau7802.cpp +++ b/esphome/components/nau7802/nau7802.cpp @@ -125,7 +125,7 @@ void NAU7802Sensor::dump_config() { LOG_I2C_DEVICE(this); if (this->is_failed()) { - ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL_FOR, this->get_name().c_str()); + ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL_FOR, LOG_STR_ARG(this->get_log_name())); return; } // Note these may differ from the values on the device if calbration has been run diff --git a/esphome/components/number/number.cpp b/esphome/components/number/number.cpp index 1d5533c423b..d21d757b863 100644 --- a/esphome/components/number/number.cpp +++ b/esphome/components/number/number.cpp @@ -13,7 +13,7 @@ void log_number(const char *tag, const char *prefix, const char *type, Number *o return; } - ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str()); + ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, LOG_STR_ARG(obj->get_log_name())); LOG_ENTITY_ICON(tag, prefix, *obj); LOG_ENTITY_UNIT_OF_MEASUREMENT(tag, prefix, *obj); LOG_ENTITY_DEVICE_CLASS(tag, prefix, *obj); @@ -22,7 +22,7 @@ void log_number(const char *tag, const char *prefix, const char *type, Number *o void Number::publish_state(float state) { this->set_has_state(true); this->state = state; - ESP_LOGV(TAG, "'%s' >> %.2f", this->get_name().c_str(), state); + ESP_LOGV(TAG, "'%s' >> %.2f", LOG_STR_ARG(this->get_log_name()), state); this->state_callback_.call(state); #if defined(USE_NUMBER) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_number_update(this); diff --git a/esphome/components/number/number_call.cpp b/esphome/components/number/number_call.cpp index a928eaf3fa4..4079d775227 100644 --- a/esphome/components/number/number_call.cpp +++ b/esphome/components/number/number_call.cpp @@ -8,12 +8,12 @@ ESPHOME_LOG_TAG(TAG, "number"); // Helper functions to reduce code size for logging void NumberCall::log_perform_warning_(const LogString *message) { - ESP_LOGW(TAG, "'%s': %s", this->parent_->get_name().c_str(), LOG_STR_ARG(message)); + ESP_LOGW(TAG, "'%s': %s", LOG_STR_ARG(this->parent_->get_log_name()), LOG_STR_ARG(message)); } void NumberCall::log_perform_warning_value_range_(const LogString *comparison, const LogString *limit_type, float val, float limit) { - ESP_LOGW(TAG, "'%s': %f %s %s %f", this->parent_->get_name().c_str(), val, LOG_STR_ARG(comparison), + ESP_LOGW(TAG, "'%s': %f %s %s %f", LOG_STR_ARG(this->parent_->get_log_name()), val, LOG_STR_ARG(comparison), LOG_STR_ARG(limit_type), limit); } @@ -48,7 +48,7 @@ NumberCall &NumberCall::with_cycle(bool cycle) { void NumberCall::perform() { auto *parent = this->parent_; - const auto *name = parent->get_name().c_str(); + const auto *name = LOG_STR_ARG(parent->get_log_name()); const auto &traits = parent->traits; if (this->operation_ == NUMBER_OP_NONE) { diff --git a/esphome/components/opentherm/switch/opentherm_switch.cpp b/esphome/components/opentherm/switch/opentherm_switch.cpp index 6bf06f825e9..17640dc7180 100644 --- a/esphome/components/opentherm/switch/opentherm_switch.cpp +++ b/esphome/components/opentherm/switch/opentherm_switch.cpp @@ -10,9 +10,9 @@ void OpenthermSwitch::setup() { auto restored = this->get_initial_state_with_restore_mode(); bool state = false; if (!restored.has_value()) { - ESP_LOGD(TAG, "Couldn't restore state for OpenTherm switch '%s'", this->get_name().c_str()); + ESP_LOGD(TAG, "Couldn't restore state for OpenTherm switch '%s'", LOG_STR_ARG(this->get_log_name())); } else { - ESP_LOGD(TAG, "Restored state for OpenTherm switch '%s': %d", this->get_name().c_str(), restored.value()); + ESP_LOGD(TAG, "Restored state for OpenTherm switch '%s': %d", LOG_STR_ARG(this->get_log_name()), restored.value()); state = restored.value(); } this->write_state(state); diff --git a/esphome/components/opt3001/opt3001.cpp b/esphome/components/opt3001/opt3001.cpp index c6692d8dadb..adc53d3f3c8 100644 --- a/esphome/components/opt3001/opt3001.cpp +++ b/esphome/components/opt3001/opt3001.cpp @@ -109,7 +109,7 @@ void OPT3001Sensor::update() { this->publish_state(NAN); return; } - ESP_LOGD(TAG, "'%s': Illuminance=%.1flx", this->get_name().c_str(), val); + ESP_LOGD(TAG, "'%s': Illuminance=%.1flx", LOG_STR_ARG(this->get_log_name()), val); this->status_clear_warning(); this->publish_state(val); }); diff --git a/esphome/components/pid/pid_climate.cpp b/esphome/components/pid/pid_climate.cpp index 67585f65e8c..963f22e1d6c 100644 --- a/esphome/components/pid/pid_climate.cpp +++ b/esphome/components/pid/pid_climate.cpp @@ -182,14 +182,15 @@ void PIDClimate::start_autotune(std::unique_ptr &&autotune) { float min_value = this->supports_cool_() ? -1.0f : 0.0f; float max_value = this->supports_heat_() ? 1.0f : 0.0f; this->autotuner_->config(min_value, max_value); - this->autotuner_->set_autotuner_id(this->get_name()); + char name_buf[ENTITY_NAME_BUF_SIZE]; + this->autotuner_->set_autotuner_id(this->get_name_to(name_buf).str()); ESP_LOGI(TAG, "%s: Autotune has started. This can take a long time depending on the " "responsiveness of your system. Your system " "output will be altered to deliberately oscillate above and below the setpoint multiple times. " "Until your sensor provides a reading, the autotuner may display \'nan\'", - this->get_name().c_str()); + LOG_STR_ARG(this->get_log_name())); this->set_interval("autotune-progress", 10000, [this]() { if (this->autotuner_ != nullptr && !this->autotuner_->is_finished()) @@ -198,7 +199,7 @@ void PIDClimate::start_autotune(std::unique_ptr &&autotune) { if (mode != climate::CLIMATE_MODE_HEAT_COOL) { ESP_LOGW(TAG, "%s: !!! For PID autotuner you need to set AUTO (also called heat/cool) mode!", - this->get_name().c_str()); + LOG_STR_ARG(this->get_log_name())); } } diff --git a/esphome/components/prometheus/prometheus_handler.cpp b/esphome/components/prometheus/prometheus_handler.cpp index 00c2e043102..309df75a0c3 100644 --- a/esphome/components/prometheus/prometheus_handler.cpp +++ b/esphome/components/prometheus/prometheus_handler.cpp @@ -120,7 +120,10 @@ std::string PrometheusHandler::relabel_id_(EntityBase *obj) { std::string PrometheusHandler::relabel_name_(EntityBase *obj) { auto item = relabel_map_name_.find(obj); - return item == relabel_map_name_.end() ? obj->get_name() : item->second; + if (item != relabel_map_name_.end()) + return item->second; + char name_buf[ENTITY_NAME_BUF_SIZE]; + return obj->get_name_to(name_buf).str(); } void PrometheusHandler::add_area_label_(AsyncResponseStream *stream, std::string &area) { diff --git a/esphome/components/pulse_counter/pulse_counter_sensor.cpp b/esphome/components/pulse_counter/pulse_counter_sensor.cpp index b104016fb8f..42771a50bc9 100644 --- a/esphome/components/pulse_counter/pulse_counter_sensor.cpp +++ b/esphome/components/pulse_counter/pulse_counter_sensor.cpp @@ -197,13 +197,13 @@ void PulseCounterSensor::update() { if (this->last_time_ != 0) { uint32_t interval = now - this->last_time_; float value = (60000.0f * raw) / float(interval); // per minute - ESP_LOGD(TAG, "'%s': Retrieved counter: %0.2f pulses/min", this->get_name().c_str(), value); + ESP_LOGD(TAG, "'%s': Retrieved counter: %0.2f pulses/min", LOG_STR_ARG(this->get_log_name()), value); this->publish_state(value); } if (this->total_sensor_ != nullptr) { current_total_ += raw; - ESP_LOGD(TAG, "'%s': Total : %" PRIu32 " pulses", this->get_name().c_str(), current_total_); + ESP_LOGD(TAG, "'%s': Total : %" PRIu32 " pulses", LOG_STR_ARG(this->get_log_name()), current_total_); this->total_sensor_->publish_state(current_total_); } this->last_time_ = now; diff --git a/esphome/components/radio_frequency/radio_frequency.cpp b/esphome/components/radio_frequency/radio_frequency.cpp index 231d6c3f898..5f379790f3d 100644 --- a/esphome/components/radio_frequency/radio_frequency.cpp +++ b/esphome/components/radio_frequency/radio_frequency.cpp @@ -13,7 +13,7 @@ void RadioFrequency::dump_config() { "Radio Frequency '%s'\n" " Supports Transmitter: %s\n" " Supports Receiver: %s", - this->get_name().c_str(), YESNO(this->get_supports_transmitter()), + LOG_STR_ARG(this->get_log_name()), YESNO(this->get_supports_transmitter()), YESNO(this->get_supports_receiver())); if (this->traits_.get_frequency_min_hz() > 0) { if (this->traits_.get_frequency_min_hz() == this->traits_.get_frequency_max_hz()) { diff --git a/esphome/components/scd4x/scd4x.cpp b/esphome/components/scd4x/scd4x.cpp index 8249a6feb1e..2cfb2705c41 100644 --- a/esphome/components/scd4x/scd4x.cpp +++ b/esphome/components/scd4x/scd4x.cpp @@ -133,7 +133,7 @@ void SCD4XComponent::dump_config() { ONOFF(this->enable_asc_), measurement_mode_str, this->temperature_offset_); if (this->ambient_pressure_source_ != nullptr) { ESP_LOGCONFIG(TAG, " Dynamic ambient pressure compensation using '%s'", - this->ambient_pressure_source_->get_name().c_str()); + LOG_STR_ARG(this->ambient_pressure_source_->get_log_name())); } else { if (this->ambient_pressure_) { ESP_LOGCONFIG(TAG, diff --git a/esphome/components/select/select.cpp b/esphome/components/select/select.cpp index 4d77c6d6f6c..acbb1b3a915 100644 --- a/esphome/components/select/select.cpp +++ b/esphome/components/select/select.cpp @@ -13,19 +13,19 @@ void Select::publish_state(const char *state) { if (index.has_value()) { this->publish_state(index.value()); } else { - ESP_LOGE(TAG, "'%s': Invalid option %s", this->get_name().c_str(), state); + ESP_LOGE(TAG, "'%s': Invalid option %s", LOG_STR_ARG(this->get_log_name()), state); } } void Select::publish_state(size_t index) { if (!this->has_index(index)) { - ESP_LOGE(TAG, "'%s': Invalid index %zu", this->get_name().c_str(), index); + ESP_LOGE(TAG, "'%s': Invalid index %zu", LOG_STR_ARG(this->get_log_name()), index); return; } const char *option = this->option_at(index); this->set_has_state(true); this->active_index_ = index; - ESP_LOGV(TAG, "'%s' >> %s (%zu)", this->get_name().c_str(), option, index); + ESP_LOGV(TAG, "'%s' >> %s (%zu)", LOG_STR_ARG(this->get_log_name()), option, index); this->state_callback_.call(index); #if defined(USE_SELECT) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_select_update(this); diff --git a/esphome/components/select/select.h b/esphome/components/select/select.h index 2294f34e624..7a801d6b207 100644 --- a/esphome/components/select/select.h +++ b/esphome/components/select/select.h @@ -11,7 +11,7 @@ namespace esphome::select { #define LOG_SELECT(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ LOG_ENTITY_ICON(TAG, prefix, *(obj)); \ } diff --git a/esphome/components/select/select_call.cpp b/esphome/components/select/select_call.cpp index 167e6769a4a..9841dbde792 100644 --- a/esphome/components/select/select_call.cpp +++ b/esphome/components/select/select_call.cpp @@ -40,7 +40,7 @@ SelectCall &SelectCall::with_option(const char *option, size_t len) { SelectCall &SelectCall::with_index(size_t index) { this->operation_ = SELECT_OP_SET; if (index >= this->parent_->size()) { - ESP_LOGW(TAG, "'%s' - Index value %zu out of bounds", this->parent_->get_name().c_str(), index); + ESP_LOGW(TAG, "'%s' - Index value %zu out of bounds", LOG_STR_ARG(this->parent_->get_log_name()), index); this->index_ = nullopt; // Store nullopt for invalid index } else { this->index_ = index; @@ -101,7 +101,7 @@ optional SelectCall::calculate_target_index_(const char *name) { void SelectCall::perform() { auto *parent = this->parent_; - const auto *name = parent->get_name().c_str(); + const auto *name = LOG_STR_ARG(parent->get_log_name()); if (this->operation_ == SELECT_OP_NONE) { ESP_LOGW(TAG, "'%s' - SelectCall performed without selecting an operation", name); diff --git a/esphome/components/sensor/sensor.cpp b/esphome/components/sensor/sensor.cpp index df73e2c481a..c235ff08f5e 100644 --- a/esphome/components/sensor/sensor.cpp +++ b/esphome/components/sensor/sensor.cpp @@ -19,7 +19,7 @@ void log_sensor(const char *tag, const char *prefix, const char *type, Sensor *o "%s State Class: '%s'\n" "%s Unit of Measurement: '%s'\n" "%s Accuracy Decimals: %d", - prefix, type, obj->get_name().c_str(), prefix, + prefix, type, LOG_STR_ARG(obj->get_log_name()), prefix, LOG_STR_ARG(state_class_to_string(obj->get_state_class())), prefix, obj->get_unit_of_measurement_ref().c_str(), prefix, obj->get_accuracy_decimals()); @@ -68,7 +68,7 @@ void Sensor::publish_state(float state) { this->raw_callback_.call(state); #endif - ESP_LOGV(TAG, "'%s': Received new state %f", this->name_.c_str(), state); + ESP_LOGV(TAG, "'%s': Received new state %f", LOG_STR_ARG(this->get_log_name()), state); #ifdef USE_SENSOR_FILTER if (this->filter_list_ == nullptr) { @@ -116,8 +116,8 @@ void Sensor::clear_filters() { void Sensor::internal_send_state_to_frontend(float state) { this->set_has_state(true); this->state = state; - ESP_LOGV(TAG, "'%s' >> %.*f %s", this->get_name().c_str(), std::max(0, (int) this->get_accuracy_decimals()), state, - this->get_unit_of_measurement_ref().c_str()); + ESP_LOGV(TAG, "'%s' >> %.*f %s", LOG_STR_ARG(this->get_log_name()), std::max(0, (int) this->get_accuracy_decimals()), + state, this->get_unit_of_measurement_ref().c_str()); this->callback_.call(state); #if defined(USE_SENSOR) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_sensor_update(this); diff --git a/esphome/components/sonoff_d1/sonoff_d1.cpp b/esphome/components/sonoff_d1/sonoff_d1.cpp index 02282fef9ca..a2e319f039a 100644 --- a/esphome/components/sonoff_d1/sonoff_d1.cpp +++ b/esphome/components/sonoff_d1/sonoff_d1.cpp @@ -303,8 +303,8 @@ void SonoffD1Output::dump_config() { " Use RM433 Remote: %s\n" " Minimal brightness: %d\n" " Maximal brightness: %d", - this->light_state_ ? this->light_state_->get_name().c_str() : "", ONOFF(this->use_rm433_remote_), - this->min_value_, this->max_value_); + this->light_state_ ? LOG_STR_ARG(this->light_state_->get_log_name()) : "", + ONOFF(this->use_rm433_remote_), this->min_value_, this->max_value_); } void SonoffD1Output::loop() { diff --git a/esphome/components/sprinkler/sprinkler.cpp b/esphome/components/sprinkler/sprinkler.cpp index a3c264da582..c00240d9d80 100644 --- a/esphome/components/sprinkler/sprinkler.cpp +++ b/esphome/components/sprinkler/sprinkler.cpp @@ -872,7 +872,7 @@ void Sprinkler::reset_resume() { const char *Sprinkler::valve_name(const size_t valve_number) { if (this->is_a_valid_valve(valve_number)) { - return this->valve_[valve_number].controller_switch->get_name().c_str(); + return LOG_STR_ARG(this->valve_[valve_number].controller_switch->get_log_name()); } return nullptr; } diff --git a/esphome/components/status_led/light/status_led_light.cpp b/esphome/components/status_led/light/status_led_light.cpp index 6eeb9732a47..5877dcfb76f 100644 --- a/esphome/components/status_led/light/status_led_light.cpp +++ b/esphome/components/status_led/light/status_led_light.cpp @@ -35,7 +35,7 @@ void StatusLEDLightOutput::loop() { void StatusLEDLightOutput::setup_state(light::LightState *state) { lightstate_ = state; - ESP_LOGD(TAG, "'%s': Setting initial state", state->get_name().c_str()); + ESP_LOGD(TAG, "'%s': Setting initial state", LOG_STR_ARG(state->get_log_name())); this->write_state(state); } @@ -46,7 +46,7 @@ void StatusLEDLightOutput::write_state(light::LightState *state) { // if in warning/error, don't overwrite the status_led // once it is back to OK, the loop will restore the state if ((App.get_app_state() & (STATUS_LED_ERROR | STATUS_LED_WARNING)) == 0u) { - ESP_LOGD(TAG, "'%s': Setting state %s", state->get_name().c_str(), ONOFF(binary)); + ESP_LOGD(TAG, "'%s': Setting state %s", LOG_STR_ARG(state->get_log_name()), ONOFF(binary)); this->output_state_(binary); } } diff --git a/esphome/components/stcc4/stcc4.cpp b/esphome/components/stcc4/stcc4.cpp index ac7a998e5d6..e14daeb0005 100644 --- a/esphome/components/stcc4/stcc4.cpp +++ b/esphome/components/stcc4/stcc4.cpp @@ -151,16 +151,16 @@ void STCC4Component::dump_config() { : LOG_STR_LITERAL("Single shot")); if (this->ambient_pressure_source_ != nullptr) { ESP_LOGCONFIG(TAG, " Dynamic ambient pressure compensation using '%s'", - this->ambient_pressure_source_->get_name().c_str()); + LOG_STR_ARG(this->ambient_pressure_source_->get_log_name())); } else if (this->ambient_pressure_in_pa_2_ != 0) { ESP_LOGCONFIG(TAG, " Ambient pressure compensation: %f hPa", pressure_in_pa_2_to_hpa(this->ambient_pressure_in_pa_2_)); } if (this->temperature_source_ != nullptr) { - ESP_LOGCONFIG(TAG, " Temperature compensation using '%s'", this->temperature_source_->get_name().c_str()); + ESP_LOGCONFIG(TAG, " Temperature compensation using '%s'", LOG_STR_ARG(this->temperature_source_->get_log_name())); } if (this->humidity_source_ != nullptr) { - ESP_LOGCONFIG(TAG, " Humidity compensation using '%s'", this->humidity_source_->get_name().c_str()); + ESP_LOGCONFIG(TAG, " Humidity compensation using '%s'", LOG_STR_ARG(this->humidity_source_->get_log_name())); } LOG_UPDATE_INTERVAL(this); LOG_SENSOR(" ", "CO2", this->co2_sensor_); diff --git a/esphome/components/switch/switch.cpp b/esphome/components/switch/switch.cpp index 179ef2ce35d..c5ca8e24be3 100644 --- a/esphome/components/switch/switch.cpp +++ b/esphome/components/switch/switch.cpp @@ -17,15 +17,15 @@ void Switch::control(bool target_state) { } } void Switch::turn_on() { - ESP_LOGV(TAG, "'%s' Turning ON.", this->get_name().c_str()); + ESP_LOGV(TAG, "'%s' Turning ON.", LOG_STR_ARG(this->get_log_name())); this->write_state(!this->inverted_); } void Switch::turn_off() { - ESP_LOGV(TAG, "'%s' Turning OFF.", this->get_name().c_str()); + ESP_LOGV(TAG, "'%s' Turning OFF.", LOG_STR_ARG(this->get_log_name())); this->write_state(this->inverted_); } void Switch::toggle() { - ESP_LOGV(TAG, "'%s' Toggling %s.", this->get_name().c_str(), + ESP_LOGV(TAG, "'%s' Toggling %s.", LOG_STR_ARG(this->get_log_name()), this->state ? LOG_STR_LITERAL("OFF") : LOG_STR_LITERAL("ON")); this->write_state(this->inverted_ == this->state); } @@ -62,7 +62,7 @@ void Switch::publish_state(bool state) { if (restore_mode & RESTORE_MODE_PERSISTENT_MASK) this->rtc_.save(&this->state); - ESP_LOGV(TAG, "'%s' >> %s", this->name_.c_str(), ONOFF(this->state)); + ESP_LOGV(TAG, "'%s' >> %s", LOG_STR_ARG(this->get_log_name()), ONOFF(this->state)); this->state_callback_.call(this->state); #if defined(USE_SWITCH) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_switch_update(this); @@ -86,7 +86,7 @@ void log_switch(const char *tag, const char *prefix, const char *type, Switch *o ESP_LOGCONFIG(tag, "%s%s '%s'\n" "%s Restore Mode: %s%s %s", - prefix, type, obj->get_name().c_str(), prefix, LOG_STR_ARG(inverted), LOG_STR_ARG(restore), + prefix, type, LOG_STR_ARG(obj->get_log_name()), prefix, LOG_STR_ARG(inverted), LOG_STR_ARG(restore), LOG_STR_ARG(onoff)); // Add optional fields separately diff --git a/esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp b/esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp index 293f0255278..05ed3be0df5 100644 --- a/esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +++ b/esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp @@ -62,7 +62,8 @@ void TemplateAlarmControlPanel::dump_config() { " Armed night bypass: %s\n" " Auto bypass: %s\n" " Chime mode: %s", - alarm_sensor.sensor->get_name().c_str(), LOG_STR_ARG(sensor_type_to_string(alarm_sensor.info.type)), + LOG_STR_ARG(alarm_sensor.sensor->get_log_name()), + LOG_STR_ARG(sensor_type_to_string(alarm_sensor.info.type)), TRUEFALSE(flags & BINARY_SENSOR_MODE_BYPASS_ARMED_HOME), TRUEFALSE(flags & BINARY_SENSOR_MODE_BYPASS_ARMED_NIGHT), TRUEFALSE(flags & BINARY_SENSOR_MODE_BYPASS_AUTO), TRUEFALSE(flags & BINARY_SENSOR_MODE_CHIME)); @@ -248,7 +249,7 @@ void TemplateAlarmControlPanel::auto_bypass_sensors_() { auto *sensor = alarm_sensor.sensor; // Check for faulted bypass_auto sensors and remove them from monitoring if ((info.flags & BINARY_SENSOR_MODE_BYPASS_AUTO) && (sensor->state)) { - ESP_LOGW(TAG, "'%s' is faulted and will be automatically bypassed", sensor->get_name().c_str()); + ESP_LOGW(TAG, "'%s' is faulted and will be automatically bypassed", LOG_STR_ARG(sensor->get_log_name())); info.auto_bypassed = true; } } diff --git a/esphome/components/template/climate/template_climate.cpp b/esphome/components/template/climate/template_climate.cpp index a731f037e32..9345cf2ac20 100644 --- a/esphome/components/template/climate/template_climate.cpp +++ b/esphome/components/template/climate/template_climate.cpp @@ -115,7 +115,7 @@ void TemplateClimate::control(const climate::ClimateCall &call) { // so check here instead -- otherwise a typo is published as state the receiving end will reject. void TemplateClimate::set_mode(climate::ClimateMode mode) { if (!this->traits_.supports_mode(mode)) { - ESP_LOGW(TAG, "'%s' - Unsupported mode %u", this->get_name().c_str(), static_cast(mode)); + ESP_LOGW(TAG, "'%s' - Unsupported mode %u", LOG_STR_ARG(this->get_log_name()), static_cast(mode)); return; } this->mode = mode; @@ -123,7 +123,8 @@ void TemplateClimate::set_mode(climate::ClimateMode mode) { void TemplateClimate::set_swing_mode(climate::ClimateSwingMode swing_mode) { if (!this->traits_.supports_swing_mode(swing_mode)) { - ESP_LOGW(TAG, "'%s' - Unsupported swing mode %u", this->get_name().c_str(), static_cast(swing_mode)); + ESP_LOGW(TAG, "'%s' - Unsupported swing mode %u", LOG_STR_ARG(this->get_log_name()), + static_cast(swing_mode)); return; } this->swing_mode = swing_mode; @@ -131,7 +132,7 @@ void TemplateClimate::set_swing_mode(climate::ClimateSwingMode swing_mode) { void TemplateClimate::set_fan_mode(climate::ClimateFanMode fan_mode) { if (!this->traits_.supports_fan_mode(fan_mode)) { - ESP_LOGW(TAG, "'%s' - Unsupported fan mode %u", this->get_name().c_str(), static_cast(fan_mode)); + ESP_LOGW(TAG, "'%s' - Unsupported fan mode %u", LOG_STR_ARG(this->get_log_name()), static_cast(fan_mode)); return; } this->set_fan_mode_(fan_mode); @@ -139,7 +140,7 @@ void TemplateClimate::set_fan_mode(climate::ClimateFanMode fan_mode) { void TemplateClimate::set_preset(climate::ClimatePreset preset) { if (!this->traits_.supports_preset(preset)) { - ESP_LOGW(TAG, "'%s' - Unsupported preset %u", this->get_name().c_str(), static_cast(preset)); + ESP_LOGW(TAG, "'%s' - Unsupported preset %u", LOG_STR_ARG(this->get_log_name()), static_cast(preset)); return; } this->set_preset_(preset); @@ -147,7 +148,7 @@ void TemplateClimate::set_preset(climate::ClimatePreset preset) { void TemplateClimate::set_custom_fan_mode(StringRef mode) { if (this->find_custom_fan_mode_(mode.c_str(), mode.size()) == nullptr) { - ESP_LOGW(TAG, "'%s' - Unsupported custom fan mode '%s'", this->get_name().c_str(), mode.c_str()); + ESP_LOGW(TAG, "'%s' - Unsupported custom fan mode '%s'", LOG_STR_ARG(this->get_log_name()), mode.c_str()); return; } this->set_custom_fan_mode_(mode); @@ -155,7 +156,7 @@ void TemplateClimate::set_custom_fan_mode(StringRef mode) { void TemplateClimate::set_custom_preset(StringRef preset) { if (this->find_custom_preset_(preset.c_str(), preset.size()) == nullptr) { - ESP_LOGW(TAG, "'%s' - Unsupported custom preset '%s'", this->get_name().c_str(), preset.c_str()); + ESP_LOGW(TAG, "'%s' - Unsupported custom preset '%s'", LOG_STR_ARG(this->get_log_name()), preset.c_str()); return; } this->set_custom_preset_(preset); diff --git a/esphome/components/text/text.cpp b/esphome/components/text/text.cpp index 58ab300b904..809ee57e0a6 100644 --- a/esphome/components/text/text.cpp +++ b/esphome/components/text/text.cpp @@ -15,9 +15,9 @@ void Text::publish_state(const char *state, size_t len) { this->state.assign(state, len); } if (this->traits.get_mode() == TEXT_MODE_PASSWORD) { - ESP_LOGV(TAG, "'%s' >> " LOG_SECRET("'%s'"), this->get_name().c_str(), this->state.c_str()); + ESP_LOGV(TAG, "'%s' >> " LOG_SECRET("'%s'"), LOG_STR_ARG(this->get_log_name()), this->state.c_str()); } else { - ESP_LOGV(TAG, "'%s' >> '%s'", this->get_name().c_str(), this->state.c_str()); + ESP_LOGV(TAG, "'%s' >> '%s'", LOG_STR_ARG(this->get_log_name()), this->state.c_str()); } this->state_callback_.call(this->state); #if defined(USE_TEXT) && defined(USE_CONTROLLER_REGISTRY) diff --git a/esphome/components/text/text.h b/esphome/components/text/text.h index 54afb8db8f2..5cb0916a312 100644 --- a/esphome/components/text/text.h +++ b/esphome/components/text/text.h @@ -10,7 +10,7 @@ namespace esphome::text { #define LOG_TEXT(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ LOG_ENTITY_ICON(TAG, prefix, *(obj)); \ } diff --git a/esphome/components/text/text_call.cpp b/esphome/components/text/text_call.cpp index 93f0610d7d6..c4283af318d 100644 --- a/esphome/components/text/text_call.cpp +++ b/esphome/components/text/text_call.cpp @@ -17,7 +17,7 @@ TextCall &TextCall::set_value(const char *value, size_t len) { } void TextCall::validate_() { - const auto *name = this->parent_->get_name().c_str(); + const auto *name = LOG_STR_ARG(this->parent_->get_log_name()); if (!this->value_.has_value()) { ESP_LOGW(TAG, "'%s' - No value set for TextCall", name); @@ -42,16 +42,16 @@ void TextCall::validate_() { void TextCall::perform() { this->validate_(); if (!this->value_.has_value()) { - ESP_LOGW(TAG, "'%s' - No value set for TextCall", this->parent_->get_name().c_str()); + ESP_LOGW(TAG, "'%s' - No value set for TextCall", LOG_STR_ARG(this->parent_->get_log_name())); return; } std::string target_value = this->value_.value(); if (this->parent_->traits.get_mode() == TEXT_MODE_PASSWORD) { - ESP_LOGV(TAG, "'%s' - Setting password value: " LOG_SECRET("'%s'"), this->parent_->get_name().c_str(), + ESP_LOGV(TAG, "'%s' - Setting password value: " LOG_SECRET("'%s'"), LOG_STR_ARG(this->parent_->get_log_name()), target_value.c_str()); } else { - ESP_LOGV(TAG, "'%s' - Setting text value: %s", this->parent_->get_name().c_str(), target_value.c_str()); + ESP_LOGV(TAG, "'%s' - Setting text value: %s", LOG_STR_ARG(this->parent_->get_log_name()), target_value.c_str()); } this->parent_->control(target_value); } diff --git a/esphome/components/text_sensor/text_sensor.cpp b/esphome/components/text_sensor/text_sensor.cpp index af4c5fd0816..1dde0981948 100644 --- a/esphome/components/text_sensor/text_sensor.cpp +++ b/esphome/components/text_sensor/text_sensor.cpp @@ -13,7 +13,7 @@ void log_text_sensor(const char *tag, const char *prefix, const char *type, Text return; } - ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str()); + ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, LOG_STR_ARG(obj->get_log_name())); LOG_ENTITY_DEVICE_CLASS(tag, prefix, *obj); LOG_ENTITY_ICON(tag, prefix, *obj); } @@ -30,7 +30,7 @@ void TextSensor::publish_state(const char *state, size_t len) { #ifdef USE_TEXT_SENSOR_FILTER this->raw_callback_.call(this->state); #endif - ESP_LOGV(TAG, "'%s': Received new state %s", this->name_.c_str(), this->state.c_str()); + ESP_LOGV(TAG, "'%s': Received new state %s", LOG_STR_ARG(this->get_log_name()), this->state.c_str()); this->notify_frontend_(); #ifdef USE_TEXT_SENSOR_FILTER } else { @@ -40,7 +40,7 @@ void TextSensor::publish_state(const char *state, size_t len) { this->raw_state_.assign(state, len); } this->raw_callback_.call(this->raw_state_); - ESP_LOGV(TAG, "'%s': Received new state %s", this->name_.c_str(), this->raw_state_.c_str()); + ESP_LOGV(TAG, "'%s': Received new state %s", LOG_STR_ARG(this->get_log_name()), this->raw_state_.c_str()); this->filter_list_->input(this->raw_state_); } #endif @@ -97,7 +97,7 @@ void TextSensor::internal_send_state_to_frontend(const char *state, size_t len) void TextSensor::notify_frontend_() { this->set_has_state(true); - ESP_LOGV(TAG, "'%s' >> '%s'", this->name_.c_str(), this->state.c_str()); + ESP_LOGV(TAG, "'%s' >> '%s'", LOG_STR_ARG(this->get_log_name()), this->state.c_str()); this->callback_.call(this->state); #if defined(USE_TEXT_SENSOR) && defined(USE_CONTROLLER_REGISTRY) ControllerRegistry::notify_text_sensor_update(this); diff --git a/esphome/components/uart/button/uart_button.cpp b/esphome/components/uart/button/uart_button.cpp index b55207cb46e..1db5ec66c2d 100644 --- a/esphome/components/uart/button/uart_button.cpp +++ b/esphome/components/uart/button/uart_button.cpp @@ -6,7 +6,7 @@ namespace esphome::uart { ESPHOME_LOG_TAG(TAG, "uart.button"); void UARTButton::press_action() { - ESP_LOGD(TAG, "'%s': Sending data", this->get_name().c_str()); + ESP_LOGD(TAG, "'%s': Sending data", LOG_STR_ARG(this->get_log_name())); this->write_array(this->data_.data(), this->data_.size()); } diff --git a/esphome/components/uart/switch/uart_switch.cpp b/esphome/components/uart/switch/uart_switch.cpp index 6b6aa273f7a..d30adf0daa4 100644 --- a/esphome/components/uart/switch/uart_switch.cpp +++ b/esphome/components/uart/switch/uart_switch.cpp @@ -18,11 +18,11 @@ void UARTSwitch::loop() { void UARTSwitch::write_command_(bool state) { if (state && !this->data_on_.empty()) { - ESP_LOGD(TAG, "'%s': Sending on data", this->get_name().c_str()); + ESP_LOGD(TAG, "'%s': Sending on data", LOG_STR_ARG(this->get_log_name())); this->write_array(this->data_on_.data(), this->data_on_.size()); } if (!state && !this->data_off_.empty()) { - ESP_LOGD(TAG, "'%s': Sending off data", this->get_name().c_str()); + ESP_LOGD(TAG, "'%s': Sending off data", LOG_STR_ARG(this->get_log_name())); this->write_array(this->data_off_.data(), this->data_off_.size()); } } diff --git a/esphome/components/update/update_entity.cpp b/esphome/components/update/update_entity.cpp index 33c33ccb621..89608c797d6 100644 --- a/esphome/components/update/update_entity.cpp +++ b/esphome/components/update/update_entity.cpp @@ -20,7 +20,7 @@ void UpdateEntity::publish_state() { ESP_LOGV(TAG, "'%s' >>\n" " Current Version: %s", - this->name_.c_str(), this->update_info_.current_version.c_str()); + LOG_STR_ARG(this->get_log_name()), this->update_info_.current_version.c_str()); if (!this->update_info_.md5.empty()) { ESP_LOGV(TAG, " Latest Version: %s", this->update_info_.latest_version.c_str()); diff --git a/esphome/components/valve/valve.cpp b/esphome/components/valve/valve.cpp index a5ad9817df7..017ecf9495e 100644 --- a/esphome/components/valve/valve.cpp +++ b/esphome/components/valve/valve.cpp @@ -42,7 +42,7 @@ ValveCall &ValveCall::set_command(const char *command) { } else if (ESPHOME_strcasecmp_P(command, ESPHOME_PSTR("TOGGLE")) == 0) { this->set_command_toggle(); } else { - ESP_LOGW(TAG, "'%s' - Unrecognized command %s", this->parent_->get_name().c_str(), command); + ESP_LOGW(TAG, "'%s' - Unrecognized command %s", LOG_STR_ARG(this->parent_->get_log_name()), command); } return *this; } @@ -67,7 +67,7 @@ ValveCall &ValveCall::set_position(float position) { return *this; } void ValveCall::perform() { - ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting", LOG_STR_ARG(this->parent_->get_log_name())); auto traits = this->parent_->get_traits(); this->validate_(); if (this->stop_) { @@ -92,16 +92,18 @@ void ValveCall::validate_() { if (this->position_.has_value()) { auto pos = *this->position_; if (!traits.get_supports_position() && pos != VALVE_OPEN && pos != VALVE_CLOSED) { - ESP_LOGW(TAG, "'%s' - This valve device does not support setting position!", this->parent_->get_name().c_str()); + ESP_LOGW(TAG, "'%s' - This valve device does not support setting position!", + LOG_STR_ARG(this->parent_->get_log_name())); this->position_.reset(); } else if (pos < 0.0f || pos > 1.0f) { - ESP_LOGW(TAG, "'%s' - Position %.2f is out of range [0.0 - 1.0]", this->parent_->get_name().c_str(), pos); + ESP_LOGW(TAG, "'%s' - Position %.2f is out of range [0.0 - 1.0]", LOG_STR_ARG(this->parent_->get_log_name()), + pos); this->position_ = clamp(pos, 0.0f, 1.0f); } } if (this->toggle_.has_value()) { if (!traits.get_supports_toggle()) { - ESP_LOGW(TAG, "'%s' - This valve device does not support toggle!", this->parent_->get_name().c_str()); + ESP_LOGW(TAG, "'%s' - This valve device does not support toggle!", LOG_STR_ARG(this->parent_->get_log_name())); this->toggle_.reset(); } } diff --git a/esphome/components/valve/valve.h b/esphome/components/valve/valve.h index 183680e5e4a..2316870d3b6 100644 --- a/esphome/components/valve/valve.h +++ b/esphome/components/valve/valve.h @@ -14,7 +14,7 @@ const extern float VALVE_CLOSED; #define LOG_VALVE(prefix, type, obj) \ if ((obj) != nullptr) { \ - ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), LOG_STR_ARG((obj)->get_log_name())); \ auto traits_ = (obj)->get_traits(); \ if (traits_.get_is_assumed_state()) { \ ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \ diff --git a/esphome/components/veml3235/veml3235.cpp b/esphome/components/veml3235/veml3235.cpp index 3d555bc469a..669c3fcb625 100644 --- a/esphome/components/veml3235/veml3235.cpp +++ b/esphome/components/veml3235/veml3235.cpp @@ -45,7 +45,7 @@ bool VEML3235Sensor::refresh_config_reg() { void VEML3235Sensor::update() { if (this->measurement_in_progress_) { - ESP_LOGV(TAG, "'%s': Previous measurement still in progress; skipping update", this->get_name().c_str()); + ESP_LOGV(TAG, "'%s': Previous measurement still in progress; skipping update", LOG_STR_ARG(this->get_log_name())); return; } this->measurement_in_progress_ = true; @@ -78,9 +78,9 @@ void VEML3235Sensor::read_and_publish_(uint8_t adjustments_left) { } float lux = this->counts_to_lux_(als_counts); - ESP_LOGVV(TAG, "'%s': ALS counts = %u, sensitivity = %ux", this->get_name().c_str(), als_counts, + ESP_LOGVV(TAG, "'%s': ALS counts = %u, sensitivity = %ux", LOG_STR_ARG(this->get_log_name()), als_counts, this->sensitivity_factor_()); - ESP_LOGV(TAG, "'%s': Illuminance = %.4flx", this->get_name().c_str(), lux); + ESP_LOGV(TAG, "'%s': Illuminance = %.4flx", LOG_STR_ARG(this->get_log_name()), lux); this->publish_state(lux); this->measurement_in_progress_ = false; } @@ -175,7 +175,7 @@ bool VEML3235Sensor::adjust_sensitivity_(uint16_t counts) { return false; } - ESP_LOGV(TAG, "'%s': Sensitivity adjusted from %ux to %ux (ALS counts = %u)", this->get_name().c_str(), + ESP_LOGV(TAG, "'%s': Sensitivity adjusted from %ux to %ux (ALS counts = %u)", LOG_STR_ARG(this->get_log_name()), current_factor, new_factor, counts); return true; } diff --git a/esphome/components/water_heater/water_heater.cpp b/esphome/components/water_heater/water_heater.cpp index e5236a04916..db7051754a6 100644 --- a/esphome/components/water_heater/water_heater.cpp +++ b/esphome/components/water_heater/water_heater.cpp @@ -15,7 +15,7 @@ ESPHOME_LOG_TAG(TAG, "water_heater"); void log_water_heater(const char *tag, const char *prefix, const char *type, WaterHeater *obj) { if (obj != nullptr) { - ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str()); + ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, LOG_STR_ARG(obj->get_log_name())); } } @@ -44,7 +44,7 @@ WaterHeaterCall &WaterHeaterCall::set_mode(const char *mode, size_t len) { } else if (len == 3 && ESPHOME_strncasecmp_P(mode, ESPHOME_PSTR("GAS"), 3) == 0) { this->set_mode(WATER_HEATER_MODE_GAS); } else { - ESP_LOGW(TAG, "'%s' - Unrecognized mode %.*s", this->parent_->get_name().c_str(), (int) len, mode); + ESP_LOGW(TAG, "'%s' - Unrecognized mode %.*s", LOG_STR_ARG(this->parent_->get_log_name()), (int) len, mode); } return *this; } @@ -85,7 +85,7 @@ WaterHeaterCall &WaterHeaterCall::set_on(bool on) { } void WaterHeaterCall::perform() { - ESP_LOGV(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + ESP_LOGV(TAG, "'%s' - Setting", LOG_STR_ARG(this->parent_->get_log_name())); this->validate_(); if (this->mode_.has_value()) { ESP_LOGV(TAG, " Mode: %s", LOG_STR_ARG(water_heater_mode_to_string(*this->mode_))); @@ -113,7 +113,7 @@ void WaterHeaterCall::validate_() { auto traits = this->parent_->get_traits(); if (this->mode_.has_value()) { if (!traits.supports_mode(*this->mode_)) { - ESP_LOGW(TAG, "'%s' - Mode %" PRIu32 " not supported", this->parent_->get_name().c_str(), + ESP_LOGW(TAG, "'%s' - Mode %" PRIu32 " not supported", LOG_STR_ARG(this->parent_->get_log_name()), static_cast(*this->mode_)); this->mode_.reset(); } @@ -121,34 +121,36 @@ void WaterHeaterCall::validate_() { if (!std::isnan(this->target_temperature_)) { if (traits.get_supports_two_point_target_temperature()) { ESP_LOGW(TAG, "'%s' - Cannot set target temperature for device with two-point target temperature", - this->parent_->get_name().c_str()); + LOG_STR_ARG(this->parent_->get_log_name())); this->target_temperature_ = NAN; } else if (this->target_temperature_ < traits.get_min_temperature() || this->target_temperature_ > traits.get_max_temperature()) { - ESP_LOGW(TAG, "'%s' - Target temperature %.1f is out of range [%.1f - %.1f]", this->parent_->get_name().c_str(), - this->target_temperature_, traits.get_min_temperature(), traits.get_max_temperature()); + ESP_LOGW(TAG, "'%s' - Target temperature %.1f is out of range [%.1f - %.1f]", + LOG_STR_ARG(this->parent_->get_log_name()), this->target_temperature_, traits.get_min_temperature(), + traits.get_max_temperature()); this->target_temperature_ = std::max(traits.get_min_temperature(), std::min(this->target_temperature_, traits.get_max_temperature())); } } if (!std::isnan(this->target_temperature_low_) || !std::isnan(this->target_temperature_high_)) { if (!traits.get_supports_two_point_target_temperature()) { - ESP_LOGW(TAG, "'%s' - Cannot set low/high target temperature", this->parent_->get_name().c_str()); + ESP_LOGW(TAG, "'%s' - Cannot set low/high target temperature", LOG_STR_ARG(this->parent_->get_log_name())); this->target_temperature_low_ = NAN; this->target_temperature_high_ = NAN; } } if (!std::isnan(this->target_temperature_low_) && !std::isnan(this->target_temperature_high_)) { if (this->target_temperature_low_ > this->target_temperature_high_) { - ESP_LOGW(TAG, "'%s' - Target temperature low %.2f must be less than high %.2f", this->parent_->get_name().c_str(), - this->target_temperature_low_, this->target_temperature_high_); + ESP_LOGW(TAG, "'%s' - Target temperature low %.2f must be less than high %.2f", + LOG_STR_ARG(this->parent_->get_log_name()), this->target_temperature_low_, + this->target_temperature_high_); this->target_temperature_low_ = NAN; this->target_temperature_high_ = NAN; } } if (!traits.get_supports_away_mode()) { if (this->state_ & WATER_HEATER_STATE_AWAY) { - ESP_LOGW(TAG, "'%s' - Away mode not supported", this->parent_->get_name().c_str()); + ESP_LOGW(TAG, "'%s' - Away mode not supported", LOG_STR_ARG(this->parent_->get_log_name())); } this->state_ &= ~WATER_HEATER_STATE_AWAY; this->state_mask_ &= ~WATER_HEATER_STATE_AWAY; diff --git a/esphome/components/web_server/web_server.cpp b/esphome/components/web_server/web_server.cpp index 062007b02e0..b6995bd0e6b 100644 --- a/esphome/components/web_server/web_server.cpp +++ b/esphome/components/web_server/web_server.cpp @@ -176,7 +176,8 @@ EntityMatchResult UrlMatch::match_entity(EntityBase *entity) const { #endif // Match by entity name - if (this->id == entity->get_name()) { + char name_buf[ENTITY_NAME_BUF_SIZE]; + if (this->id == entity->get_name_to(name_buf)) { result.matched = true; } @@ -558,7 +559,8 @@ void WebServer::handle_js_request(AsyncWebServerRequest *request) { // Build unique id as: {domain}/{device_name}/{entity_name} or {domain}/{entity_name} // Uses names (not object_id) to avoid UTF-8 collision issues static void set_json_id(JsonObject root, EntityBase *obj, const char *prefix, JsonDetail start_config) { - const StringRef &name = obj->get_name(); + char name_buf[ENTITY_NAME_BUF_SIZE]; + StringRef name = obj->get_name_to(name_buf); size_t prefix_len = strlen(prefix); size_t name_len = name.size(); diff --git a/esphome/components/web_server/web_server_v1.cpp b/esphome/components/web_server/web_server_v1.cpp index 08654e353a9..e49cb76ffa2 100644 --- a/esphome/components/web_server/web_server_v1.cpp +++ b/esphome/components/web_server/web_server_v1.cpp @@ -42,8 +42,10 @@ void write_row(AsyncResponseStream *stream, EntityBase *obj, const std::string & // Add data attributes for hierarchical URL support stream->print("\" data-domain=\""); stream->print(klass.c_str()); + char name_buf[ENTITY_NAME_BUF_SIZE]; + const char *name = obj->get_name_to(name_buf).c_str(); stream->print("\" data-name=\""); - write_html_escaped(stream, obj->get_name().c_str()); + write_html_escaped(stream, name); #ifdef USE_DEVICES Device *device = obj->get_device(); if (device != nullptr) { @@ -59,7 +61,7 @@ void write_row(AsyncResponseStream *stream, EntityBase *obj, const std::string & stream->print("] "); } #endif - write_html_escaped(stream, obj->get_name().c_str()); + write_html_escaped(stream, name); stream->print(""); stream->print(action.c_str()); if (action_func) { diff --git a/esphome/components/xiaomi_mccgq02hl/xiaomi_mccgq02hl.cpp b/esphome/components/xiaomi_mccgq02hl/xiaomi_mccgq02hl.cpp index 519358270d3..84e406a7ab0 100644 --- a/esphome/components/xiaomi_mccgq02hl/xiaomi_mccgq02hl.cpp +++ b/esphome/components/xiaomi_mccgq02hl/xiaomi_mccgq02hl.cpp @@ -60,7 +60,7 @@ bool XiaomiMCCGQ02HL::parse_device(const ble_device_base::ESPBTDevice &device) { if (!this->parse_service_data_(service_data.data, reading)) continue; - ESP_LOGD(TAG, "%s: open=%s light=%s battery=%s", this->get_name().c_str(), + ESP_LOGD(TAG, "%s: open=%s light=%s battery=%s", LOG_STR_ARG(this->get_log_name()), reading.open.has_value() ? (*reading.open ? LOG_STR_LITERAL("yes") : LOG_STR_LITERAL("no")) : LOG_STR_LITERAL("-"), reading.light.has_value() ? (*reading.light ? LOG_STR_LITERAL("yes") : LOG_STR_LITERAL("no")) diff --git a/esphome/core/entity_base.cpp b/esphome/core/entity_base.cpp index cbb14a37302..339f6af2dff 100644 --- a/esphome/core/entity_base.cpp +++ b/esphome/core/entity_base.cpp @@ -1,5 +1,6 @@ #include "esphome/core/entity_base.h" #include "esphome/core/application.h" +#include "esphome/core/hal.h" #include "esphome/core/helpers.h" #include "esphome/core/log.h" #include "esphome/core/progmem.h" @@ -10,7 +11,11 @@ namespace esphome { ESPHOME_LOG_TAG(TAG, "entity_base"); void EntityBase::configure_entity_(const char *name, uint32_t object_id_hash, uint32_t entity_fields) { +#ifdef USE_ESP8266 + this->name_ = StringRef(name, strlen_P(name)); // codegen names are in flash +#else this->name_ = StringRef(name); +#endif if (this->name_.empty()) { #ifdef USE_DEVICES if (this->device_ != nullptr) { @@ -61,7 +66,7 @@ void EntityBase::set_internal(bool internal) { // Remove the after-setup path in 2027.3.0 and ignore the call instead. if (App.is_setup_complete()) { ESP_LOGE(TAG, "'%s': set_internal() after setup is undefined behavior, stops working in 2027.3.0", - this->get_name().c_str()); + LOG_STR_ARG(this->get_log_name())); } this->flags_.internal = internal; } @@ -119,13 +124,27 @@ const char *EntityBase::get_icon_to([[maybe_unused]] std::spanobject_id_hash_ = fnv1_hash_object_id(this->name_.c_str(), this->name_.size()); + char buf[ENTITY_NAME_BUF_SIZE]; + StringRef name = this->get_name_to(buf); + this->object_id_hash_ = fnv1_hash_object_id(name.c_str(), name.size()); +} + +StringRef EntityBase::get_name_to([[maybe_unused]] std::span buffer) const { +#ifdef USE_ESP8266 + size_t len = std::min(this->name_.size(), buffer.size() - 1); + progmem_memcpy(buffer.data(), this->name_.c_str(), len); + buffer[len] = '\0'; + return StringRef(buffer.data(), len); +#else + return this->name_; +#endif } size_t EntityBase::write_object_id_to(char *buf, size_t buf_size) const { size_t len = std::min(this->name_.size(), buf_size - 1); + const auto *name = reinterpret_cast(this->name_.c_str()); for (size_t i = 0; i < len; i++) { - buf[i] = to_sanitized_char(to_snake_case_char(this->name_[i])); + buf[i] = to_sanitized_char(to_snake_case_char(static_cast(progmem_read_byte(name + i)))); } buf[len] = '\0'; return len; diff --git a/esphome/core/entity_base.h b/esphome/core/entity_base.h index 8796e9f067a..245438b763e 100644 --- a/esphome/core/entity_base.h +++ b/esphome/core/entity_base.h @@ -31,6 +31,9 @@ static constexpr size_t ESPHOME_DEVICE_NAME_MAX_LEN = 31; // esphome/core/config.py static constexpr size_t ESPHOME_FRIENDLY_NAME_MAX_LEN = 120; +// Buffer size for EntityBase::get_name_to() +static constexpr size_t ENTITY_NAME_BUF_SIZE = ESPHOME_FRIENDLY_NAME_MAX_LEN + 1; + // Maximum domain length (longest: "alarm_control_panel" = 19) static constexpr size_t ESPHOME_DOMAIN_MAX_LEN = 20; @@ -67,8 +70,18 @@ static constexpr uint8_t ENTITY_FIELD_ENTITY_CATEGORY_SHIFT = 26; // The generic Entity base class that provides an interface common to all Entities. class EntityBase { public: - // Get the name of this Entity +#ifndef USE_ESP8266 + // Get the name of this Entity. Not available on ESP8266, where the name lives in flash; + // use get_name_to() or get_log_name() instead. const StringRef &get_name() const { return this->name_; } +#endif + + /// Get the name of this Entity. On ESP8266 it is copied out of flash into buffer; + /// elsewhere the stored name is returned and buffer is unused. + StringRef get_name_to(std::span buffer) const; + + /// Get the name for a "%s" log argument (LOG_STR_ARG); may point to flash on ESP8266. + const LogString *get_log_name() const { return reinterpret_cast(this->name_.c_str()); } // Get whether this Entity has its own name or it should use the device friendly_name. bool has_own_name() const { return this->flags_.has_own_name; } @@ -212,7 +225,7 @@ class EntityBase { void calc_object_id_(); - StringRef name_; + StringRef name_; // May point to flash on ESP8266; only pass it to "%s" log arguments there uint32_t object_id_hash_{}; #ifdef USE_DEVICES Device *device_{}; diff --git a/esphome/core/entity_helpers.py b/esphome/core/entity_helpers.py index 4f446050253..d45161b88c1 100644 --- a/esphome/core/entity_helpers.py +++ b/esphome/core/entity_helpers.py @@ -23,7 +23,13 @@ from esphome.core.config import ( ICON_MAX_LENGTH, UNIT_OF_MEASUREMENT_MAX_LENGTH, ) -from esphome.cpp_generator import MockObj, RawStatement, add, get_variable +from esphome.cpp_generator import ( + MockObj, + RawExpression, + RawStatement, + add, + get_variable, +) from esphome.cpp_types import App import esphome.final_validate as fv from esphome.helpers import ( @@ -324,6 +330,9 @@ def finalize_entity_strings(var: MockObj, config: ConfigType) -> None: ) # Build inline comment describing the packed flags for readability comment = _describe_packed_flags(config, entity_category) + if entity_name and CORE.is_esp8266: + # The C++ side reads entity names with flash-safe accessors on ESP8266 + entity_name = RawExpression(f"PSTR({cpp_string_escape(entity_name)})") register_method = config.get(_KEY_REGISTER_METHOD) if register_method is not None: expr = getattr(App, f"register_{register_method}")( diff --git a/tests/components/light/common.yaml b/tests/components/light/common.yaml index 64406afda86..5a166467df7 100644 --- a/tests/components/light/common.yaml +++ b/tests/components/light/common.yaml @@ -293,7 +293,7 @@ light: if (state == 4) state = 0; if (initial_run) { - ESP_LOGD("custom_effect", "Effect %s started", it.get_name().c_str()); + ESP_LOGD("custom_effect", "Effect %s started", LOG_STR_ARG(it.get_log_name())); } - pulse: transition_length: 10s diff --git a/tests/unit_tests/core/test_entity_helpers.py b/tests/unit_tests/core/test_entity_helpers.py index cd6b3315178..68dd534b2b0 100644 --- a/tests/unit_tests/core/test_entity_helpers.py +++ b/tests/unit_tests/core/test_entity_helpers.py @@ -18,6 +18,10 @@ from esphome.const import ( CONF_INTERNAL, CONF_NAME, CONF_UNIT_OF_MEASUREMENT, + KEY_CORE, + KEY_TARGET_PLATFORM, + PLATFORM_ESP32, + PLATFORM_ESP8266, ) from esphome.core import CORE, ID, entity_helpers from esphome.core.entity_helpers import ( @@ -268,6 +272,7 @@ def setup_test_environment() -> Generator[list[str], None, None]: # Set CORE state for tests CORE.name = "test-device" CORE.friendly_name = "Test Device" + CORE.data[KEY_CORE] = {KEY_TARGET_PLATFORM: PLATFORM_ESP32} # Store original add function original_add = entity_helpers.add @@ -283,6 +288,7 @@ def setup_test_environment() -> Generator[list[str], None, None]: yield added_expressions # Clean up entity_helpers.add = original_add + CORE.data.pop(KEY_CORE, None) def extract_object_id_from_config(config: dict[str, Any]) -> str | None: @@ -1078,6 +1084,23 @@ async def test_finalize_no_flags(setup_test_environment: list[str]) -> None: assert "//" not in added_expressions[0] +@pytest.mark.asyncio +async def test_finalize_name_in_flash_on_esp8266( + setup_test_environment: list[str], +) -> None: + """Test entity names are emitted with PSTR on ESP8266.""" + added_expressions = setup_test_environment + CORE.data[KEY_CORE][KEY_TARGET_PLATFORM] = PLATFORM_ESP8266 + var = MockObj("sensor1") + config = { + CONF_NAME: "Test", + CONF_DISABLED_BY_DEFAULT: False, + } + await _setup_entity_impl(var, config, "sensor") + finalize_entity_strings(var, config) + assert 'PSTR("Test")' in added_expressions[0] + + @pytest.mark.asyncio async def test_finalize_internal(setup_test_environment: list[str]) -> None: """Test entity with internal=True packs the internal flag."""