mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	[preferences] Better handling of flash_write_interval (#8199)
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| from esphome.const import CONF_ID |  | ||||||
| import esphome.codegen as cg | import esphome.codegen as cg | ||||||
| import esphome.config_validation as cv | import esphome.config_validation as cv | ||||||
|  | from esphome.const import CONF_ID | ||||||
|  |  | ||||||
| CODEOWNERS = ["@esphome/core"] | CODEOWNERS = ["@esphome/core"] | ||||||
|  |  | ||||||
| @@ -11,9 +11,7 @@ CONF_FLASH_WRITE_INTERVAL = "flash_write_interval" | |||||||
| CONFIG_SCHEMA = cv.Schema( | CONFIG_SCHEMA = cv.Schema( | ||||||
|     { |     { | ||||||
|         cv.GenerateID(): cv.declare_id(IntervalSyncer), |         cv.GenerateID(): cv.declare_id(IntervalSyncer), | ||||||
|         cv.Optional( |         cv.Optional(CONF_FLASH_WRITE_INTERVAL, default="60s"): cv.update_interval, | ||||||
|             CONF_FLASH_WRITE_INTERVAL, default="60s" |  | ||||||
|         ): cv.positive_time_period_milliseconds, |  | ||||||
|     } |     } | ||||||
| ).extend(cv.COMPONENT_SCHEMA) | ).extend(cv.COMPONENT_SCHEMA) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,15 +8,22 @@ namespace preferences { | |||||||
|  |  | ||||||
| class IntervalSyncer : public Component { | class IntervalSyncer : public Component { | ||||||
|  public: |  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 { |   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(); } |   void on_shutdown() override { global_preferences->sync(); } | ||||||
|   float get_setup_priority() const override { return setup_priority::BUS; } |   float get_setup_priority() const override { return setup_priority::BUS; } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   uint32_t write_interval_; |   uint32_t write_interval_{60000}; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| }  // namespace preferences | }  // namespace preferences | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								tests/components/preferences/test.esp32-idf.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								tests/components/preferences/test.esp32-idf.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | |||||||
|  | preferences: | ||||||
|  |   flash_write_interval: 20s | ||||||
		Reference in New Issue
	
	Block a user