Summary
ESPHome has added a new make_entity_preference<T>() helper on EntityBase (PR #13505) that encapsulates preference creation and will handle automatic preference migration when the hash algorithm is updated to fix collisions.
This component uses get_object_id_hash() for preference keys, which is the old API that predates even get_preference_hash() (which added device-awareness to avoid collisions across devices). Components using get_object_id_hash() directly are vulnerable to hash collisions when different entity names sanitize to the same string (e.g. "Living Room" and "living_room" both become "living_room"), and will not participate in automatic preference migration.
Current usage
In components/pool_controller/pool_select.cpp:
this->pref_ = global_preferences->make_preference<size_t>(this->get_object_id_hash());
Recommended migration
// Before:
this->pref_ = global_preferences->make_preference<size_t>(this->get_object_id_hash());
// After:
this->pref_ = this->make_entity_preference<size_t>();
References
Summary
ESPHome has added a new
make_entity_preference<T>()helper onEntityBase(PR #13505) that encapsulates preference creation and will handle automatic preference migration when the hash algorithm is updated to fix collisions.This component uses
get_object_id_hash()for preference keys, which is the old API that predates evenget_preference_hash()(which added device-awareness to avoid collisions across devices). Components usingget_object_id_hash()directly are vulnerable to hash collisions when different entity names sanitize to the same string (e.g. "Living Room" and "living_room" both become "living_room"), and will not participate in automatic preference migration.Current usage
In
components/pool_controller/pool_select.cpp:Recommended migration
References