Skip to content

Commit 2f9a38a

Browse files
committed
Use metric.display_id for the default entity_id (de-duplicated prefix)
The entity_id suggestion now comes from metric.display_id (added in the library), which strips the duplicated device-type prefix, e.g. solarcharger_3_solarcharger_total_pv_yield -> solarcharger_3_total_pv_yield. unique_id is intentionally left derived from metric.unique_id, so entity identity is unchanged; Home Assistant applies a suggested entity_id only on first creation, so existing entities keep their entity_id and only newly created entities get the cleaner id. getattr fallback stays safe for bundled libraries predating display_id.
1 parent f86b400 commit 2f9a38a

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

custom_components/victron_mqtt/entity.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,20 @@ def __init__(
6666
self._attr_device_info = device_info
6767
if simple_naming:
6868
entity_id = f"{entity_platform}.{ENTITY_PREFIX}_{metric.unique_id}"
69+
self._attr_unique_id = entity_id
6970
else:
70-
entity_id = f"{entity_platform}.{ENTITY_PREFIX}_{installation_id}_{metric.unique_id}"
71-
# you have to set the entity_id if we want to make the unique_id different from the default entity_id generation (which is based on the entity name)
72-
self.entity_id = entity_id
73-
self._attr_unique_id = entity_id
71+
# unique_id stays derived from metric.unique_id, so an entity's
72+
# identity never changes and existing entities keep their already
73+
# registered entity_id untouched. The *suggested* entity_id uses
74+
# metric.display_id, which de-duplicates the device-type prefix
75+
# (e.g. solarcharger_3_solarcharger_total_pv_yield ->
76+
# solarcharger_3_total_pv_yield). Home Assistant applies a suggested
77+
# entity_id only when first creating an entity, so this affects NEW
78+
# entities only; existing installs are unchanged. getattr keeps it
79+
# safe if the bundled library predates display_id.
80+
display_id = getattr(metric, "display_id", metric.unique_id)
81+
self._attr_unique_id = f"{entity_platform}.{ENTITY_PREFIX}_{installation_id}_{metric.unique_id}"
82+
self.entity_id = f"{entity_platform}.{ENTITY_PREFIX}_{installation_id}_{display_id}"
7483
self._attr_suggested_display_precision = metric.precision
7584
# Always set translation_key so HA can resolve state/option translations (e.g. select options).
7685
self._attr_translation_key = metric.generic_short_id.replace(

0 commit comments

Comments
 (0)