From 116ae120dc5e0c937637d03cc041fb6d8ee9f0ed Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 16 Oct 2026 13:46:07 -1000 Subject: [PATCH] [ld2412] Use Apply numbers --- esphome/components/ld2412/number/__init__.py | 51 +++++++++++-------- .../ld2412/number/gate_threshold_number.cpp | 10 ---- .../ld2412/number/gate_threshold_number.h | 17 ------- .../ld2412/number/light_threshold_number.cpp | 10 ---- .../ld2412/number/light_threshold_number.h | 17 ------- .../number/max_distance_timeout_number.cpp | 10 ---- .../number/max_distance_timeout_number.h | 16 ------ 7 files changed, 31 insertions(+), 100 deletions(-) delete mode 100644 esphome/components/ld2412/number/gate_threshold_number.cpp delete mode 100644 esphome/components/ld2412/number/gate_threshold_number.h delete mode 100644 esphome/components/ld2412/number/light_threshold_number.cpp delete mode 100644 esphome/components/ld2412/number/light_threshold_number.h delete mode 100644 esphome/components/ld2412/number/max_distance_timeout_number.cpp delete mode 100644 esphome/components/ld2412/number/max_distance_timeout_number.h diff --git a/esphome/components/ld2412/number/__init__.py b/esphome/components/ld2412/number/__init__.py index 0c0c01c69cc..d76162d2ef1 100644 --- a/esphome/components/ld2412/number/__init__.py +++ b/esphome/components/ld2412/number/__init__.py @@ -1,3 +1,5 @@ +from functools import partial + import esphome.codegen as cg from esphome.components import number import esphome.config_validation as cv @@ -18,11 +20,7 @@ from esphome.const import ( ) from esphome.types import ConfigType -from .. import CONF_LD2412_ID, LD2412_ns, LD2412Component - -GateThresholdNumber = LD2412_ns.class_("GateThresholdNumber", number.Number) -LightThresholdNumber = LD2412_ns.class_("LightThresholdNumber", number.Number) -MaxDistanceTimeoutNumber = LD2412_ns.class_("MaxDistanceTimeoutNumber", number.Number) +from .. import CONF_LD2412_ID, LD2412Component CONF_LIGHT_THRESHOLD = "light_threshold" CONF_MAX_DISTANCE_GATE = "max_distance_gate" @@ -35,25 +33,25 @@ CONFIG_SCHEMA = cv.Schema( cv.GenerateID(CONF_ID): cv.declare_id(cg.EntityBase), cv.GenerateID(CONF_LD2412_ID): cv.use_id(LD2412Component), cv.Optional(CONF_LIGHT_THRESHOLD): number.number_schema( - LightThresholdNumber, + number.ApplyNumber, device_class=DEVICE_CLASS_ILLUMINANCE, entity_category=ENTITY_CATEGORY_CONFIG, icon=ICON_LIGHTBULB, ), cv.Optional(CONF_MAX_DISTANCE_GATE): number.number_schema( - MaxDistanceTimeoutNumber, + number.ApplyNumber, device_class=DEVICE_CLASS_DISTANCE, entity_category=ENTITY_CATEGORY_CONFIG, icon=ICON_MOTION_SENSOR, ), cv.Optional(CONF_MIN_DISTANCE_GATE): number.number_schema( - MaxDistanceTimeoutNumber, + number.ApplyNumber, device_class=DEVICE_CLASS_DISTANCE, entity_category=ENTITY_CATEGORY_CONFIG, icon=ICON_MOTION_SENSOR, ), cv.Optional(CONF_TIMEOUT): number.number_schema( - MaxDistanceTimeoutNumber, + number.ApplyNumber, entity_category=ENTITY_CATEGORY_CONFIG, icon=ICON_TIMELAPSE, unit_of_measurement=UNIT_SECOND, @@ -66,14 +64,14 @@ CONFIG_SCHEMA = CONFIG_SCHEMA.extend( cv.Optional(f"gate_{x}"): ( { cv.Required(CONF_MOVE_THRESHOLD): number.number_schema( - GateThresholdNumber, + number.ApplyNumber, device_class=DEVICE_CLASS_SIGNAL_STRENGTH, entity_category=ENTITY_CATEGORY_CONFIG, icon=ICON_MOTION_SENSOR, unit_of_measurement=UNIT_PERCENT, ), cv.Required(CONF_STILL_THRESHOLD): number.number_schema( - GateThresholdNumber, + number.ApplyNumber, device_class=DEVICE_CLASS_SIGNAL_STRENGTH, entity_category=ENTITY_CATEGORY_CONFIG, icon=ICON_MOTION_SENSOR, @@ -95,13 +93,17 @@ async def to_code(config: ConfigType) -> None: min_value=0, max_value=255, step=1, + apply="set_light_out_control()", + publish="before", ) + basic = {"apply": "set_basic_config()", "publish": "before"} await numbers( CONF_MAX_DISTANCE_GATE, hub.set_max_distance_gate_number, min_value=2, max_value=13, step=1, + **basic, ) await numbers( CONF_MIN_DISTANCE_GATE, @@ -109,23 +111,32 @@ async def to_code(config: ConfigType) -> None: min_value=1, max_value=12, step=1, + **basic, ) + threshold = { + "min_value": 0, + "max_value": 100, + "step": 1, + "apply": "set_gate_threshold(entity)", + "publish": "before", + } for x in range(14): if gate_conf := config.get(f"gate_{x}"): - move_config = gate_conf[CONF_MOVE_THRESHOLD] - n = await number.new_number(move_config, min_value=0, max_value=100, step=1) - await cg.register_parented(n, hub) - cg.add(hub.set_gate_move_threshold_number(x, n)) - still_config = gate_conf[CONF_STILL_THRESHOLD] - n = await number.new_number( - still_config, min_value=0, max_value=100, step=1 + await numbers.create( + gate_conf[CONF_MOVE_THRESHOLD], + partial(hub.set_gate_move_threshold_number, x), + **threshold, + ) + await numbers.create( + gate_conf[CONF_STILL_THRESHOLD], + partial(hub.set_gate_still_threshold_number, x), + **threshold, ) - await cg.register_parented(n, hub) - cg.add(hub.set_gate_still_threshold_number(x, n)) await numbers( CONF_TIMEOUT, hub.set_timeout_number, min_value=0, max_value=900, step=1, + **basic, ) diff --git a/esphome/components/ld2412/number/gate_threshold_number.cpp b/esphome/components/ld2412/number/gate_threshold_number.cpp deleted file mode 100644 index 1af7b1e7f20..00000000000 --- a/esphome/components/ld2412/number/gate_threshold_number.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "gate_threshold_number.h" - -namespace esphome::ld2412 { - -void GateThresholdNumber::control(float value) { - this->publish_state(value); - this->parent_->set_gate_threshold(this); -} - -} // namespace esphome::ld2412 diff --git a/esphome/components/ld2412/number/gate_threshold_number.h b/esphome/components/ld2412/number/gate_threshold_number.h deleted file mode 100644 index 308da43a34d..00000000000 --- a/esphome/components/ld2412/number/gate_threshold_number.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include "esphome/components/number/number.h" -#include "../ld2412.h" - -namespace esphome::ld2412 { - -class GateThresholdNumber final : public number::Number, public Parented { - public: - // Not "= default": that makes new(p) T() zero-fill the object at every codegen site before the ctor runs. - GateThresholdNumber() {} - - protected: - void control(float value) override; -}; - -} // namespace esphome::ld2412 diff --git a/esphome/components/ld2412/number/light_threshold_number.cpp b/esphome/components/ld2412/number/light_threshold_number.cpp deleted file mode 100644 index 81e668e7798..00000000000 --- a/esphome/components/ld2412/number/light_threshold_number.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "light_threshold_number.h" - -namespace esphome::ld2412 { - -void LightThresholdNumber::control(float value) { - this->publish_state(value); - this->parent_->set_light_out_control(); -} - -} // namespace esphome::ld2412 diff --git a/esphome/components/ld2412/number/light_threshold_number.h b/esphome/components/ld2412/number/light_threshold_number.h deleted file mode 100644 index 710b47957c1..00000000000 --- a/esphome/components/ld2412/number/light_threshold_number.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include "esphome/components/number/number.h" -#include "../ld2412.h" - -namespace esphome::ld2412 { - -class LightThresholdNumber final : public number::Number, public Parented { - public: - // User provided, not "= default": `new(p) LightThresholdNumber()` would zero-fill .bss that is already zero. - LightThresholdNumber() {} - - protected: - void control(float value) override; -}; - -} // namespace esphome::ld2412 diff --git a/esphome/components/ld2412/number/max_distance_timeout_number.cpp b/esphome/components/ld2412/number/max_distance_timeout_number.cpp deleted file mode 100644 index 0d156fbc00e..00000000000 --- a/esphome/components/ld2412/number/max_distance_timeout_number.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "max_distance_timeout_number.h" - -namespace esphome::ld2412 { - -void MaxDistanceTimeoutNumber::control(float value) { - this->publish_state(value); - this->parent_->set_basic_config(); -} - -} // namespace esphome::ld2412 diff --git a/esphome/components/ld2412/number/max_distance_timeout_number.h b/esphome/components/ld2412/number/max_distance_timeout_number.h deleted file mode 100644 index 4a3478d48a1..00000000000 --- a/esphome/components/ld2412/number/max_distance_timeout_number.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "esphome/components/number/number.h" -#include "../ld2412.h" - -namespace esphome::ld2412 { - -class MaxDistanceTimeoutNumber final : public number::Number, public Parented { - public: - MaxDistanceTimeoutNumber() = default; - - protected: - void control(float value) override; -}; - -} // namespace esphome::ld2412