From 91f3f69bd90f42395a15208414e5a4d4ffd3dcfb Mon Sep 17 00:00:00 2001 From: Commander1024 Date: Tue, 26 May 2026 15:34:03 +0200 Subject: [PATCH] Optimized for mem pressure, inverted colors. --- esphome/owon-b35t.yaml | 128 +++++++---------------------------------- esphome/owon_b35t.h | 2 + 2 files changed, 23 insertions(+), 107 deletions(-) diff --git a/esphome/owon-b35t.yaml b/esphome/owon-b35t.yaml index 4e3722a..2f0a8f9 100644 --- a/esphome/owon-b35t.yaml +++ b/esphome/owon-b35t.yaml @@ -44,11 +44,25 @@ wifi: ssid: "OWON B35T Fallback Hotspot" password: !secret fallback_psk -captive_portal: +# Disabled to save RAM on the M5Stack Core 1. Re-enable temporarily if Wi-Fi recovery is needed. +# captive_portal: + +interval: + - interval: 10s + then: + - lambda: |- + ESP_LOGI("mem", "heap free=%u min_free=%u internal_free=%u internal_largest=%u dma_free=%u dma_largest=%u", + static_cast(esp_get_free_heap_size()), + static_cast(esp_get_minimum_free_heap_size()), + static_cast(heap_caps_get_free_size(MALLOC_CAP_INTERNAL)), + static_cast(heap_caps_get_largest_free_block(MALLOC_CAP_INTERNAL)), + static_cast(heap_caps_get_free_size(MALLOC_CAP_DMA)), + static_cast(heap_caps_get_largest_free_block(MALLOC_CAP_DMA))); esp32_ble_tracker: scan_parameters: active: true + continuous: true ble_client: - mac_address: ${owon_mac_address} @@ -158,7 +172,7 @@ display: cs_pin: GPIO14 dc_pin: GPIO27 reset_pin: GPIO33 - invert_colors: false + invert_colors: true color_palette: 8BIT rotation: 0 update_interval: 500ms @@ -235,34 +249,6 @@ binary_sensor: name: "${friendly_name} Low Battery" lambda: |- return owon_meter.low_battery; - - platform: template - name: "${friendly_name} Auto Range" - lambda: |- - return owon_meter.auto_range(); - - platform: template - name: "${friendly_name} Hold" - lambda: |- - return owon_meter.hold(); - - platform: template - name: "${friendly_name} Relative" - lambda: |- - return owon_meter.relative(); - - platform: template - name: "${friendly_name} AC" - lambda: |- - return owon_meter.ac(); - - platform: template - name: "${friendly_name} DC" - lambda: |- - return owon_meter.dc(); - - platform: template - name: "${friendly_name} Continuity" - lambda: |- - return owon_meter.continuity(); - - platform: template - name: "${friendly_name} Diode" - lambda: |- - return owon_meter.diode(); sensor: - platform: ble_client @@ -286,7 +272,7 @@ sensor: name: "${friendly_name} Display Value" id: owon_display_value accuracy_decimals: 6 - update_interval: 1s + update_interval: 2s lambda: |- return owon_meter.has_reading && !owon_meter.overload ? owon_meter.value() : NAN; @@ -294,95 +280,23 @@ sensor: name: "${friendly_name} Base Value" id: owon_base_value accuracy_decimals: 9 - update_interval: 1s + update_interval: 2s lambda: |- return owon_meter.has_reading && !owon_meter.overload ? owon_meter.value_base() : NAN; - - platform: template - name: "${friendly_name} Voltage" - device_class: voltage - unit_of_measurement: "V" - accuracy_decimals: 6 - update_interval: 1s - lambda: |- - return owon_meter.kind() == owon_b35t::Meter::KIND_VOLTAGE && !owon_meter.overload ? owon_meter.value_base() : NAN; - - - platform: template - name: "${friendly_name} Current" - device_class: current - unit_of_measurement: "A" - accuracy_decimals: 6 - update_interval: 1s - lambda: |- - return owon_meter.kind() == owon_b35t::Meter::KIND_CURRENT && !owon_meter.overload ? owon_meter.value_base() : NAN; - - - platform: template - name: "${friendly_name} Resistance" - unit_of_measurement: "Ω" - accuracy_decimals: 3 - update_interval: 1s - lambda: |- - return owon_meter.kind() == owon_b35t::Meter::KIND_RESISTANCE && !owon_meter.overload ? owon_meter.value_base() : NAN; - - - platform: template - name: "${friendly_name} Frequency" - device_class: frequency - unit_of_measurement: "Hz" - accuracy_decimals: 3 - update_interval: 1s - lambda: |- - return owon_meter.kind() == owon_b35t::Meter::KIND_FREQUENCY && !owon_meter.overload ? owon_meter.value_base() : NAN; - - - platform: template - name: "${friendly_name} Capacitance" - unit_of_measurement: "F" - accuracy_decimals: 12 - update_interval: 1s - lambda: |- - return owon_meter.kind() == owon_b35t::Meter::KIND_CAPACITANCE && !owon_meter.overload ? owon_meter.value_base() : NAN; - - - platform: template - name: "${friendly_name} Temperature" - device_class: temperature - unit_of_measurement: "°C" - accuracy_decimals: 2 - update_interval: 1s - lambda: |- - if (owon_meter.kind() == owon_b35t::Meter::KIND_TEMP_C && !owon_meter.overload) return owon_meter.value(); - if (owon_meter.kind() == owon_b35t::Meter::KIND_TEMP_F && !owon_meter.overload) return (owon_meter.value() - 32.0f) * 5.0f / 9.0f; - return NAN; - - - platform: template - name: "${friendly_name} Duty Cycle" - unit_of_measurement: "%" - accuracy_decimals: 2 - update_interval: 1s - lambda: |- - return owon_meter.kind() == owon_b35t::Meter::KIND_DUTY && !owon_meter.overload ? owon_meter.value() : NAN; - text_sensor: - platform: template name: "${friendly_name} Reading" - update_interval: 1s + update_interval: 2s lambda: |- return owon_meter.reading_text(); - platform: template name: "${friendly_name} Unit" - update_interval: 1s + update_interval: 2s lambda: |- return std::string(owon_meter.scale()) + owon_meter.unit(); - platform: template name: "${friendly_name} Mode" - update_interval: 1s + update_interval: 2s lambda: |- return owon_meter.mode_text(); - - platform: template - name: "${friendly_name} Meter Type" - update_interval: 1s - lambda: |- - return owon_meter.is_plus ? std::string("B35T+") : std::string("B35T"); - - platform: template - name: "${friendly_name} Selected Button" - update_interval: 1s - lambda: |- - return std::string(owon_meter.selected_button_name()); diff --git a/esphome/owon_b35t.h b/esphome/owon_b35t.h index 0f27633..bba7ca2 100644 --- a/esphome/owon_b35t.h +++ b/esphome/owon_b35t.h @@ -10,6 +10,8 @@ #include #include #include +#include "esp_heap_caps.h" +#include "esp_system.h" #include "esphome/core/helpers.h" #include "esphome/core/log.h" #include "esphome/components/display/display.h"