diff --git a/esphome/components/debug/debug_component.h b/esphome/components/debug/debug_component.h index 3da6b800c6f..1484d08362a 100644 --- a/esphome/components/debug/debug_component.h +++ b/esphome/components/debug/debug_component.h @@ -45,6 +45,7 @@ class DebugComponent : public PollingComponent { void set_loop_time_sensor(sensor::Sensor *loop_time_sensor) { loop_time_sensor_ = loop_time_sensor; } #ifdef USE_ESP32 void set_psram_sensor(sensor::Sensor *psram_sensor) { this->psram_sensor_ = psram_sensor; } + void set_iram_sensor(sensor::Sensor *iram_sensor) { this->iram_sensor_ = iram_sensor; } #endif // USE_ESP32 void set_cpu_frequency_sensor(sensor::Sensor *cpu_frequency_sensor) { this->cpu_frequency_sensor_ = cpu_frequency_sensor; @@ -71,6 +72,7 @@ class DebugComponent : public PollingComponent { sensor::Sensor *loop_time_sensor_{nullptr}; #ifdef USE_ESP32 sensor::Sensor *psram_sensor_{nullptr}; + sensor::Sensor *iram_sensor_{nullptr}; #endif // USE_ESP32 sensor::Sensor *cpu_frequency_sensor_{nullptr}; #endif // USE_SENSOR diff --git a/esphome/components/debug/debug_esp32.cpp b/esphome/components/debug/debug_esp32.cpp index 2e04090749e..30c226940bf 100644 --- a/esphome/components/debug/debug_esp32.cpp +++ b/esphome/components/debug/debug_esp32.cpp @@ -301,6 +301,9 @@ void DebugComponent::update_platform_() { if (this->psram_sensor_ != nullptr) { this->psram_sensor_->publish_state(heap_caps_get_free_size(MALLOC_CAP_SPIRAM)); } + if (this->iram_sensor_ != nullptr) { + this->iram_sensor_->publish_state(heap_caps_get_free_size(MALLOC_CAP_IRAM_8BIT)); + } #endif } diff --git a/esphome/components/debug/sensor.py b/esphome/components/debug/sensor.py index a018ce5c3bd..b0b95478aee 100644 --- a/esphome/components/debug/sensor.py +++ b/esphome/components/debug/sensor.py @@ -32,6 +32,7 @@ DEPENDENCIES = ["debug"] CONF_MIN_FREE = "min_free" CONF_PSRAM = "psram" +CONF_IRAM = "iram" CONFIG_SCHEMA = { cv.GenerateID(CONF_DEBUG_ID): cv.use_id(DebugComponent), @@ -98,6 +99,16 @@ CONFIG_SCHEMA = { state_class=STATE_CLASS_MEASUREMENT, ), ), + cv.Optional(CONF_IRAM): cv.All( + cv.only_on_esp32, + sensor.sensor_schema( + unit_of_measurement=UNIT_BYTES, + icon=ICON_COUNTER, + accuracy_decimals=0, + entity_category=ENTITY_CATEGORY_DIAGNOSTIC, + state_class=STATE_CLASS_MEASUREMENT, + ), + ), cv.Optional(CONF_CPU_FREQUENCY): cv.All( sensor.sensor_schema( unit_of_measurement=UNIT_HERTZ, @@ -138,6 +149,10 @@ async def to_code(config): sens = await sensor.new_sensor(psram_conf) cg.add(debug_component.set_psram_sensor(sens)) + if iram_conf := config.get(CONF_IRAM): + sens = await sensor.new_sensor(iram_conf) + cg.add(debug_component.set_iram_sensor(sens)) + if cpu_freq_conf := config.get(CONF_CPU_FREQUENCY): sens = await sensor.new_sensor(cpu_freq_conf) cg.add(debug_component.set_cpu_frequency_sensor(sens)) diff --git a/tests/components/debug/test.esp32-ard.yaml b/tests/components/debug/test.esp32-ard.yaml index 8f93b0925eb..70b58d56da1 100644 --- a/tests/components/debug/test.esp32-ard.yaml +++ b/tests/components/debug/test.esp32-ard.yaml @@ -9,3 +9,5 @@ sensor: name: "Heap Fragmentation" min_free: name: "Heap Min Free" + iram: + name: "Free IRAM" diff --git a/tests/components/debug/test.esp32-idf.yaml b/tests/components/debug/test.esp32-idf.yaml index 6a9996ad065..925610bbd4d 100644 --- a/tests/components/debug/test.esp32-idf.yaml +++ b/tests/components/debug/test.esp32-idf.yaml @@ -13,5 +13,7 @@ sensor: name: "Heap Fragmentation" min_free: name: "Heap Min Free" + iram: + name: "Free IRAM" psram: diff --git a/tests/components/debug/test.esp32-s2-idf.yaml b/tests/components/debug/test.esp32-s2-idf.yaml index 80919b0bab8..6e23c54721c 100644 --- a/tests/components/debug/test.esp32-s2-idf.yaml +++ b/tests/components/debug/test.esp32-s2-idf.yaml @@ -6,3 +6,5 @@ sensor: name: "Heap Fragmentation" min_free: name: "Heap Min Free" + iram: + name: "Free IRAM"