mirror of
https://github.com/esphome/esphome.git
synced 2024-11-23 23:48:11 +01:00
pulse_counter_ulp: rename classes and remove filter
This commit is contained in:
parent
5fb117e0ea
commit
4517698322
4 changed files with 26 additions and 45 deletions
|
@ -6,19 +6,19 @@
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
|
|
||||||
namespace pulse_counter {
|
namespace pulse_counter_ulp {
|
||||||
|
|
||||||
template<typename... Ts> class SetTotalPulsesAction : public Action<Ts...> {
|
template<typename... Ts> class SetTotalPulsesAction : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
SetTotalPulsesAction(PulseCounterSensor *pulse_counter) : pulse_counter_(pulse_counter) {}
|
SetTotalPulsesAction(PulseCounterUlpSensor *pulse_counter) : pulse_counter_(pulse_counter) {}
|
||||||
|
|
||||||
TEMPLATABLE_VALUE(uint32_t, total_pulses)
|
TEMPLATABLE_VALUE(uint32_t, total_pulses)
|
||||||
|
|
||||||
void play(Ts... x) override { this->pulse_counter_->set_total_pulses(this->total_pulses_.value(x...)); }
|
void play(Ts... x) override { this->pulse_counter_->set_total_pulses(this->total_pulses_.value(x...)); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
PulseCounterSensor *pulse_counter_;
|
PulseCounterUlpSensor *pulse_counter_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace pulse_counter
|
} // namespace pulse_counter_ulp
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include <esp_sleep.h>
|
#include <esp_sleep.h>
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace pulse_counter {
|
namespace pulse_counter_ulp {
|
||||||
|
|
||||||
static const char *const TAG = "pulse_counter_ulp";
|
static const char *const TAG = "pulse_counter_ulp";
|
||||||
|
|
||||||
|
@ -98,8 +98,6 @@ bool UlpPulseCounterStorage::pulse_counter_setup(InternalGPIOPin *pin) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Support Filter
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +110,7 @@ pulse_counter_t UlpPulseCounterStorage::read_raw_value() {
|
||||||
|
|
||||||
/* === END ULP ===*/
|
/* === END ULP ===*/
|
||||||
|
|
||||||
void PulseCounterSensor::setup() {
|
void PulseCounterUlpSensor::setup() {
|
||||||
ESP_LOGCONFIG(TAG, "Setting up pulse counter '%s'...", this->name_.c_str());
|
ESP_LOGCONFIG(TAG, "Setting up pulse counter '%s'...", this->name_.c_str());
|
||||||
if (!this->storage_.pulse_counter_setup(this->pin_)) {
|
if (!this->storage_.pulse_counter_setup(this->pin_)) {
|
||||||
this->mark_failed();
|
this->mark_failed();
|
||||||
|
@ -128,21 +126,20 @@ void PulseCounterSensor::setup() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void PulseCounterSensor::set_total_pulses(uint32_t pulses) {
|
void PulseCounterUlpSensor::set_total_pulses(uint32_t pulses) {
|
||||||
this->current_total_ = pulses;
|
this->current_total_ = pulses;
|
||||||
this->total_sensor_->publish_state(pulses);
|
this->total_sensor_->publish_state(pulses);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PulseCounterSensor::dump_config() {
|
void PulseCounterUlpSensor::dump_config() {
|
||||||
LOG_SENSOR("", "Pulse Counter", this);
|
LOG_SENSOR("", "Pulse Counter", this);
|
||||||
LOG_PIN(" Pin: ", this->pin_);
|
LOG_PIN(" Pin: ", this->pin_);
|
||||||
ESP_LOGCONFIG(TAG, " Rising Edge: %s", EDGE_MODE_TO_STRING[this->storage_.rising_edge_mode]);
|
ESP_LOGCONFIG(TAG, " Rising Edge: %s", EDGE_MODE_TO_STRING[this->storage_.rising_edge_mode]);
|
||||||
ESP_LOGCONFIG(TAG, " Falling Edge: %s", EDGE_MODE_TO_STRING[this->storage_.falling_edge_mode]);
|
ESP_LOGCONFIG(TAG, " Falling Edge: %s", EDGE_MODE_TO_STRING[this->storage_.falling_edge_mode]);
|
||||||
ESP_LOGCONFIG(TAG, " Filtering pulses shorter than %" PRIu32 " µs", this->storage_.filter_us);
|
|
||||||
LOG_UPDATE_INTERVAL(this);
|
LOG_UPDATE_INTERVAL(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PulseCounterSensor::update() {
|
void PulseCounterUlpSensor::update() {
|
||||||
#ifdef CONF_USE_TIME
|
#ifdef CONF_USE_TIME
|
||||||
// Can't clear the pulse count until we can report the rate, so there's
|
// Can't clear the pulse count until we can report the rate, so there's
|
||||||
// nothing to do until the time is synchronized
|
// nothing to do until the time is synchronized
|
||||||
|
@ -178,5 +175,5 @@ void PulseCounterSensor::update() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace pulse_counter
|
} // namespace pulse_counter_ulp
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include <cinttypes>
|
#include <cinttypes>
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace pulse_counter {
|
namespace pulse_counter_ulp {
|
||||||
|
|
||||||
enum PulseCounterCountMode {
|
enum PulseCounterCountMode {
|
||||||
PULSE_COUNTER_DISABLE = 0,
|
PULSE_COUNTER_DISABLE = 0,
|
||||||
|
@ -22,30 +22,23 @@ enum PulseCounterCountMode {
|
||||||
using pulse_counter_t = int32_t;
|
using pulse_counter_t = int32_t;
|
||||||
using timestamp_t = int64_t;
|
using timestamp_t = int64_t;
|
||||||
|
|
||||||
struct PulseCounterStorageBase {
|
struct UlpPulseCounterStorage {
|
||||||
virtual bool pulse_counter_setup(InternalGPIOPin *pin) = 0;
|
bool pulse_counter_setup(InternalGPIOPin *pin);
|
||||||
virtual pulse_counter_t read_raw_value() = 0;
|
pulse_counter_t read_raw_value();
|
||||||
|
|
||||||
InternalGPIOPin *pin;
|
InternalGPIOPin *pin;
|
||||||
PulseCounterCountMode rising_edge_mode{PULSE_COUNTER_INCREMENT};
|
PulseCounterCountMode rising_edge_mode{PULSE_COUNTER_INCREMENT};
|
||||||
PulseCounterCountMode falling_edge_mode{PULSE_COUNTER_DISABLE};
|
PulseCounterCountMode falling_edge_mode{PULSE_COUNTER_DISABLE};
|
||||||
uint32_t filter_us{0};
|
|
||||||
pulse_counter_t last_value{0};
|
pulse_counter_t last_value{0};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UlpPulseCounterStorage : public PulseCounterStorageBase {
|
class PulseCounterUlpSensor : public sensor::Sensor, public PollingComponent {
|
||||||
bool pulse_counter_setup(InternalGPIOPin *pin) override;
|
|
||||||
pulse_counter_t read_raw_value() override;
|
|
||||||
};
|
|
||||||
|
|
||||||
class PulseCounterSensor : public sensor::Sensor, public PollingComponent {
|
|
||||||
public:
|
public:
|
||||||
explicit PulseCounterSensor(PulseCounterStorageBase *storage) : storage_(*storage) {}
|
explicit PulseCounterUlpSensor() {}
|
||||||
|
|
||||||
void set_pin(InternalGPIOPin *pin) { pin_ = pin; }
|
void set_pin(InternalGPIOPin *pin) { pin_ = pin; }
|
||||||
void set_rising_edge_mode(PulseCounterCountMode mode) { storage_.rising_edge_mode = mode; }
|
void set_rising_edge_mode(PulseCounterCountMode mode) { storage_.rising_edge_mode = mode; }
|
||||||
void set_falling_edge_mode(PulseCounterCountMode mode) { storage_.falling_edge_mode = mode; }
|
void set_falling_edge_mode(PulseCounterCountMode mode) { storage_.falling_edge_mode = mode; }
|
||||||
void set_filter_us(uint32_t filter) { storage_.filter_us = filter; }
|
|
||||||
void set_total_sensor(sensor::Sensor *total_sensor) { total_sensor_ = total_sensor; }
|
void set_total_sensor(sensor::Sensor *total_sensor) { total_sensor_ = total_sensor; }
|
||||||
#ifdef USE_TIME
|
#ifdef USE_TIME
|
||||||
void set_time_id(time::RealTimeClock *time_id) { time_id_ = time_id; }
|
void set_time_id(time::RealTimeClock *time_id) { time_id_ = time_id; }
|
||||||
|
@ -61,7 +54,7 @@ class PulseCounterSensor : public sensor::Sensor, public PollingComponent {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
InternalGPIOPin *pin_;
|
InternalGPIOPin *pin_;
|
||||||
PulseCounterStorageBase &storage_;
|
UlpPulseCounterStorage storage_;
|
||||||
timestamp_t last_time_{0};
|
timestamp_t last_time_{0};
|
||||||
uint32_t current_total_{0};
|
uint32_t current_total_{0};
|
||||||
sensor::Sensor *total_sensor_{nullptr};
|
sensor::Sensor *total_sensor_{nullptr};
|
||||||
|
@ -73,5 +66,5 @@ class PulseCounterSensor : public sensor::Sensor, public PollingComponent {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace pulse_counter
|
} // namespace pulse_counter_ulp
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|
|
@ -23,10 +23,8 @@ from esphome.const import (
|
||||||
)
|
)
|
||||||
from esphome.core import CORE
|
from esphome.core import CORE
|
||||||
|
|
||||||
CONF_STORAGE_ID = "storage"
|
pulse_counter_ulp_ns = cg.esphome_ns.namespace("pulse_counter_ulp")
|
||||||
|
PulseCounterCountMode = pulse_counter_ulp_ns.enum("PulseCounterCountMode")
|
||||||
pulse_counter_ns = cg.esphome_ns.namespace("pulse_counter")
|
|
||||||
PulseCounterCountMode = pulse_counter_ns.enum("PulseCounterCountMode")
|
|
||||||
COUNT_MODES = {
|
COUNT_MODES = {
|
||||||
"DISABLE": PulseCounterCountMode.PULSE_COUNTER_DISABLE,
|
"DISABLE": PulseCounterCountMode.PULSE_COUNTER_DISABLE,
|
||||||
"INCREMENT": PulseCounterCountMode.PULSE_COUNTER_INCREMENT,
|
"INCREMENT": PulseCounterCountMode.PULSE_COUNTER_INCREMENT,
|
||||||
|
@ -35,11 +33,11 @@ COUNT_MODES = {
|
||||||
|
|
||||||
COUNT_MODE_SCHEMA = cv.enum(COUNT_MODES, upper=True)
|
COUNT_MODE_SCHEMA = cv.enum(COUNT_MODES, upper=True)
|
||||||
|
|
||||||
PulseCounterSensor = pulse_counter_ns.class_(
|
PulseCounterUlpSensor = pulse_counter_ulp_ns.class_(
|
||||||
"PulseCounterSensor", sensor.Sensor, cg.PollingComponent
|
"PulseCounterUlpSensor", sensor.Sensor, cg.PollingComponent
|
||||||
)
|
)
|
||||||
|
|
||||||
SetTotalPulsesAction = pulse_counter_ns.class_(
|
SetTotalPulsesAction = pulse_counter_ulp_ns.class_(
|
||||||
"SetTotalPulsesAction", automation.Action
|
"SetTotalPulsesAction", automation.Action
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -66,7 +64,7 @@ def validate_count_mode(value):
|
||||||
|
|
||||||
CONFIG_SCHEMA = cv.All(
|
CONFIG_SCHEMA = cv.All(
|
||||||
sensor.sensor_schema(
|
sensor.sensor_schema(
|
||||||
PulseCounterSensor,
|
PulseCounterUlpSensor,
|
||||||
unit_of_measurement=UNIT_PULSES_PER_MINUTE,
|
unit_of_measurement=UNIT_PULSES_PER_MINUTE,
|
||||||
icon=ICON_PULSE,
|
icon=ICON_PULSE,
|
||||||
accuracy_decimals=2,
|
accuracy_decimals=2,
|
||||||
|
@ -96,9 +94,6 @@ CONFIG_SCHEMA = cv.All(
|
||||||
accuracy_decimals=0,
|
accuracy_decimals=0,
|
||||||
state_class=STATE_CLASS_TOTAL_INCREASING,
|
state_class=STATE_CLASS_TOTAL_INCREASING,
|
||||||
),
|
),
|
||||||
cv.GenerateID(CONF_STORAGE_ID): cv.declare_id(
|
|
||||||
"pulse_counter::PulseCounterStorageBase"
|
|
||||||
),
|
|
||||||
cv.Optional(CONF_TIME_ID): cv.use_id(time.RealTimeClock),
|
cv.Optional(CONF_TIME_ID): cv.use_id(time.RealTimeClock),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -107,10 +102,6 @@ CONFIG_SCHEMA = cv.All(
|
||||||
|
|
||||||
|
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
storage = cg.Pvariable(
|
|
||||||
config[CONF_STORAGE_ID],
|
|
||||||
cg.RawExpression("new pulse_counter::UlpPulseCounterStorage()"),
|
|
||||||
)
|
|
||||||
esp32.add_extra_build_file(
|
esp32.add_extra_build_file(
|
||||||
"src/CMakeLists.txt",
|
"src/CMakeLists.txt",
|
||||||
os.path.join(os.path.dirname(__file__), "CMakeLists.txt"),
|
os.path.join(os.path.dirname(__file__), "CMakeLists.txt"),
|
||||||
|
@ -123,7 +114,7 @@ async def to_code(config):
|
||||||
esp32.add_idf_sdkconfig_option("CONFIG_ULP_COPROC_ENABLED", True)
|
esp32.add_idf_sdkconfig_option("CONFIG_ULP_COPROC_ENABLED", True)
|
||||||
esp32.add_idf_sdkconfig_option("CONFIG_ULP_COPROC_TYPE_FSM", True)
|
esp32.add_idf_sdkconfig_option("CONFIG_ULP_COPROC_TYPE_FSM", True)
|
||||||
esp32.add_idf_sdkconfig_option("CONFIG_ULP_COPROC_RESERVE_MEM", 1024)
|
esp32.add_idf_sdkconfig_option("CONFIG_ULP_COPROC_RESERVE_MEM", 1024)
|
||||||
var = await sensor.new_sensor(config, storage)
|
var = await sensor.new_sensor(config)
|
||||||
await cg.register_component(var, config)
|
await cg.register_component(var, config)
|
||||||
|
|
||||||
pin = await cg.gpio_pin_expression(config[CONF_PIN])
|
pin = await cg.gpio_pin_expression(config[CONF_PIN])
|
||||||
|
@ -147,7 +138,7 @@ async def to_code(config):
|
||||||
SetTotalPulsesAction,
|
SetTotalPulsesAction,
|
||||||
cv.Schema(
|
cv.Schema(
|
||||||
{
|
{
|
||||||
cv.Required(CONF_ID): cv.use_id(PulseCounterSensor),
|
cv.Required(CONF_ID): cv.use_id(PulseCounterUlpSensor),
|
||||||
cv.Required(CONF_VALUE): cv.templatable(cv.uint32_t),
|
cv.Required(CONF_VALUE): cv.templatable(cv.uint32_t),
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue