[pulse_counter] Use register_apply_action for pulse_counter.set_total_pulses (#19532)

This commit is contained in:
J. Nick Koston
2026-09-23 23:13:44 +01:00
committed by GitHub
parent bbd8472b66
commit 2e809c3626
3 changed files with 11 additions and 41 deletions
@@ -1,21 +0,0 @@
#pragma once
#include "esphome/core/component.h"
#include "esphome/core/automation.h"
#include "esphome/components/pulse_counter/pulse_counter_sensor.h"
namespace esphome::pulse_counter {
template<typename... Ts> class SetTotalPulsesAction final : public Action<Ts...> {
public:
SetTotalPulsesAction(PulseCounterSensor *pulse_counter) : pulse_counter_(pulse_counter) {}
TEMPLATABLE_VALUE(uint32_t, total_pulses)
void play(const Ts &...x) override { this->pulse_counter_->set_total_pulses(this->total_pulses_.value(x...)); }
protected:
PulseCounterSensor *pulse_counter_;
};
} // namespace esphome::pulse_counter
+3 -20
View File
@@ -21,8 +21,7 @@ from esphome.const import (
UNIT_PULSES,
UNIT_PULSES_PER_MINUTE,
)
from esphome.core import CORE, ID
from esphome.cpp_generator import MockObj, TemplateArgsType
from esphome.core import CORE
from esphome.types import ConfigType
CONF_USE_PCNT = "use_pcnt"
@@ -41,10 +40,6 @@ PulseCounterSensor = pulse_counter_ns.class_(
"PulseCounterSensor", sensor.Sensor, cg.PollingComponent
)
SetTotalPulsesAction = pulse_counter_ns.class_(
"SetTotalPulsesAction", automation.Action
)
def validate_internal_filter(value: ConfigType) -> ConfigType:
use_pcnt = value.get(CONF_USE_PCNT)
@@ -150,25 +145,13 @@ async def to_code(config: ConfigType) -> None:
cg.add(var.set_total_sensor(sens))
@automation.register_action(
automation.register_apply_action(
"pulse_counter.set_total_pulses",
SetTotalPulsesAction,
cv.Schema(
{
cv.Required(CONF_ID): cv.use_id(PulseCounterSensor),
cv.Required(CONF_VALUE): cv.templatable(cv.uint32_t),
}
),
synchronous=True,
automation.ApplyField(CONF_VALUE, "set_total_pulses", cg.uint32),
)
async def set_total_action_to_code(
config: ConfigType,
action_id: ID,
template_arg: cg.TemplateArguments,
args: TemplateArgsType,
) -> MockObj:
paren = await cg.get_variable(config[CONF_ID])
var = cg.new_Pvariable(action_id, template_arg, paren)
template_ = await cg.templatable(config[CONF_VALUE], args, cg.uint32)
cg.add(var.set_total_pulses(template_))
return var
@@ -1,5 +1,6 @@
sensor:
- platform: pulse_counter
id: pulse_counter_sensor
name: Pulse Counter
pin: 4
count_mode:
@@ -7,3 +8,10 @@ sensor:
falling_edge: DECREMENT
internal_filter: 13us
update_interval: 15s
on_value:
- pulse_counter.set_total_pulses:
id: pulse_counter_sensor
value: 12345
- pulse_counter.set_total_pulses:
id: pulse_counter_sensor
value: !lambda return (uint32_t) x;