mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Reduce memory required for sensor entities
This commit is contained in:
		| @@ -23,16 +23,22 @@ std::string state_class_to_string(StateClass state_class) { | ||||
| Sensor::Sensor() : state(NAN), raw_state(NAN) {} | ||||
|  | ||||
| int8_t Sensor::get_accuracy_decimals() { | ||||
|   if (this->accuracy_decimals_.has_value()) | ||||
|     return *this->accuracy_decimals_; | ||||
|   if (this->sensor_flags_.has_accuracy_override) | ||||
|     return this->accuracy_decimals_; | ||||
|   return 0; | ||||
| } | ||||
| void Sensor::set_accuracy_decimals(int8_t accuracy_decimals) { this->accuracy_decimals_ = accuracy_decimals; } | ||||
| void Sensor::set_accuracy_decimals(int8_t accuracy_decimals) { | ||||
|   this->accuracy_decimals_ = accuracy_decimals; | ||||
|   this->sensor_flags_.has_accuracy_override = true; | ||||
| } | ||||
|  | ||||
| void Sensor::set_state_class(StateClass state_class) { this->state_class_ = state_class; } | ||||
| void Sensor::set_state_class(StateClass state_class) { | ||||
|   this->state_class_ = state_class; | ||||
|   this->sensor_flags_.has_state_class_override = true; | ||||
| } | ||||
| StateClass Sensor::get_state_class() { | ||||
|   if (this->state_class_.has_value()) | ||||
|     return *this->state_class_; | ||||
|   if (this->sensor_flags_.has_state_class_override) | ||||
|     return this->state_class_; | ||||
|   return StateClass::STATE_CLASS_NONE; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -80,9 +80,9 @@ class Sensor : public EntityBase, public EntityBase_DeviceClass, public EntityBa | ||||
|    * state changes to the database when they are published, even if the state is the | ||||
|    * same as before. | ||||
|    */ | ||||
|   bool get_force_update() const { return force_update_; } | ||||
|   bool get_force_update() const { return sensor_flags_.force_update; } | ||||
|   /// Set force update mode. | ||||
|   void set_force_update(bool force_update) { force_update_ = force_update; } | ||||
|   void set_force_update(bool force_update) { sensor_flags_.force_update = force_update; } | ||||
|  | ||||
|   /// Add a filter to the filter chain. Will be appended to the back. | ||||
|   void add_filter(Filter *filter); | ||||
| @@ -155,9 +155,17 @@ class Sensor : public EntityBase, public EntityBase_DeviceClass, public EntityBa | ||||
|  | ||||
|   Filter *filter_list_{nullptr};  ///< Store all active filters. | ||||
|  | ||||
|   optional<int8_t> accuracy_decimals_;                  ///< Accuracy in decimals override | ||||
|   optional<StateClass> state_class_{STATE_CLASS_NONE};  ///< State class override | ||||
|   bool force_update_{false};                            ///< Force update mode | ||||
|   // Group small members together to avoid padding | ||||
|   int8_t accuracy_decimals_{-1};              ///< Accuracy in decimals (-1 = not set) | ||||
|   StateClass state_class_{STATE_CLASS_NONE};  ///< State class (STATE_CLASS_NONE = not set) | ||||
|  | ||||
|   // Bit-packed flags for sensor-specific settings | ||||
|   struct SensorFlags { | ||||
|     uint8_t has_accuracy_override : 1; | ||||
|     uint8_t has_state_class_override : 1; | ||||
|     uint8_t force_update : 1; | ||||
|     uint8_t reserved : 5;  // Reserved for future use | ||||
|   } sensor_flags_{}; | ||||
| }; | ||||
|  | ||||
| }  // namespace sensor | ||||
|   | ||||
		Reference in New Issue
	
	Block a user