diff --git a/esphome/components/preferences/__init__.py b/esphome/components/preferences/__init__.py index 4844ad6c02..1da6d02045 100644 --- a/esphome/components/preferences/__init__.py +++ b/esphome/components/preferences/__init__.py @@ -1,6 +1,6 @@ -from esphome.const import CONF_ID import esphome.codegen as cg import esphome.config_validation as cv +from esphome.const import CONF_ID CODEOWNERS = ["@esphome/core"] @@ -11,9 +11,7 @@ CONF_FLASH_WRITE_INTERVAL = "flash_write_interval" CONFIG_SCHEMA = cv.Schema( { cv.GenerateID(): cv.declare_id(IntervalSyncer), - cv.Optional( - CONF_FLASH_WRITE_INTERVAL, default="60s" - ): cv.positive_time_period_milliseconds, + cv.Optional(CONF_FLASH_WRITE_INTERVAL, default="60s"): cv.update_interval, } ).extend(cv.COMPONENT_SCHEMA) diff --git a/esphome/components/preferences/syncer.h b/esphome/components/preferences/syncer.h index af1fe9ba4a..8976a1fe15 100644 --- a/esphome/components/preferences/syncer.h +++ b/esphome/components/preferences/syncer.h @@ -8,15 +8,22 @@ namespace preferences { class IntervalSyncer : public Component { public: - void set_write_interval(uint32_t write_interval) { write_interval_ = write_interval; } + void set_write_interval(uint32_t write_interval) { this->write_interval_ = write_interval; } void setup() override { - set_interval(write_interval_, []() { global_preferences->sync(); }); + if (this->write_interval_ != 0) { + set_interval(this->write_interval_, []() { global_preferences->sync(); }); + } + } + void loop() override { + if (this->write_interval_ == 0) { + global_preferences->sync(); + } } void on_shutdown() override { global_preferences->sync(); } float get_setup_priority() const override { return setup_priority::BUS; } protected: - uint32_t write_interval_; + uint32_t write_interval_{60000}; }; } // namespace preferences diff --git a/tests/components/preferences/test.esp32-idf.yaml b/tests/components/preferences/test.esp32-idf.yaml new file mode 100644 index 0000000000..4c7c176fdc --- /dev/null +++ b/tests/components/preferences/test.esp32-idf.yaml @@ -0,0 +1,2 @@ +preferences: + flash_write_interval: 20s