mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 16:38:16 +01:00
Add publish_initial_value option to rotary encoder (#2503)
This commit is contained in:
parent
68316cbcf9
commit
980c2d4cae
3 changed files with 7 additions and 1 deletions
|
@ -189,9 +189,10 @@ void RotaryEncoderSensor::loop() {
|
|||
this->store_.counter = 0;
|
||||
}
|
||||
int counter = this->store_.counter;
|
||||
if (this->store_.last_read != counter) {
|
||||
if (this->store_.last_read != counter || this->publish_initial_value_) {
|
||||
this->store_.last_read = counter;
|
||||
this->publish_state(counter);
|
||||
this->publish_initial_value_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -58,6 +58,7 @@ class RotaryEncoderSensor : public sensor::Sensor, public Component {
|
|||
void set_reset_pin(GPIOPin *pin_i) { this->pin_i_ = pin_i; }
|
||||
void set_min_value(int32_t min_value);
|
||||
void set_max_value(int32_t max_value);
|
||||
void set_publish_initial_value(bool publish_initial_value) { publish_initial_value_ = publish_initial_value; }
|
||||
|
||||
// ========== INTERNAL METHODS ==========
|
||||
// (In most use cases you won't need these)
|
||||
|
@ -79,6 +80,7 @@ class RotaryEncoderSensor : public sensor::Sensor, public Component {
|
|||
InternalGPIOPin *pin_a_;
|
||||
InternalGPIOPin *pin_b_;
|
||||
GPIOPin *pin_i_{nullptr}; /// Index pin, if this is not nullptr, the counter will reset to 0 once this pin is HIGH.
|
||||
bool publish_initial_value_;
|
||||
|
||||
RotaryEncoderSensorStore store_{};
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ RESOLUTIONS = {
|
|||
CONF_PIN_RESET = "pin_reset"
|
||||
CONF_ON_CLOCKWISE = "on_clockwise"
|
||||
CONF_ON_ANTICLOCKWISE = "on_anticlockwise"
|
||||
CONF_PUBLISH_INITIAL_VALUE = "publish_initial_value"
|
||||
|
||||
RotaryEncoderSensor = rotary_encoder_ns.class_(
|
||||
"RotaryEncoderSensor", sensor.Sensor, cg.Component
|
||||
|
@ -70,6 +71,7 @@ CONFIG_SCHEMA = cv.All(
|
|||
cv.Optional(CONF_RESOLUTION, default=1): cv.enum(RESOLUTIONS, int=True),
|
||||
cv.Optional(CONF_MIN_VALUE): cv.int_,
|
||||
cv.Optional(CONF_MAX_VALUE): cv.int_,
|
||||
cv.Optional(CONF_PUBLISH_INITIAL_VALUE, default=False): cv.boolean,
|
||||
cv.Optional(CONF_ON_CLOCKWISE): automation.validate_automation(
|
||||
{
|
||||
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
|
||||
|
@ -99,6 +101,7 @@ async def to_code(config):
|
|||
cg.add(var.set_pin_a(pin_a))
|
||||
pin_b = await cg.gpio_pin_expression(config[CONF_PIN_B])
|
||||
cg.add(var.set_pin_b(pin_b))
|
||||
cg.add(var.set_publish_initial_value(config[CONF_PUBLISH_INITIAL_VALUE]))
|
||||
|
||||
if CONF_PIN_RESET in config:
|
||||
pin_i = await cg.gpio_pin_expression(config[CONF_PIN_RESET])
|
||||
|
|
Loading…
Reference in a new issue