[Bloquant v1.0] DeviceInfo.identifiers basés sur le nom au lieu de l'id (instables, collisions possibles) #81

Open
opened 2026-08-26 05:31:53 +00:00 by mat · 0 comments
Owner

Problème

custom_components/comwatt/entity.py:31-32 :

identifiers={(DOMAIN, self._device["name"])},

Les unique_id d'entités utilisent correctement device['id'] (sensor.py:131,163,189, switch.py:33), mais l'identifiant de device utilise le nom.

Risque

  • Collision : deux devices (ou un site et un device) portant le même nom dans le compte → fusionnés en un seul device HA, entités de deux équipements physiques rattachées au même device.
  • Instabilité : un renommage côté app Comwatt → nouveau device créé, l'ancien détaché par le prune (__init__.py:126-129) → historique device scindé, zone/étiquettes perdues.

C'est un changement de schéma : le corriger après la v1.0 orphelinerait les devices de tous les utilisateurs existants, donc à faire avant le tag.

Recommandation

  1. identifiers={(DOMAIN, str(self._device["id"]))}, garder name=self._device["name"] pour l'affichage.
  2. Prévoir une migration douce des devices existants (re-attach des entités par unique_id vers le nouveau device, suppression de l'ancien), sinon le changement scinde l'historique de tous les installs actuelles.
  3. Idem dans _async_prune_stale (__init__.py:110,114,117) qui construit les identifiers par nom.

Constaté lors de la review de code pré-v1.0 (v0.8.1).

## Problème `custom_components/comwatt/entity.py:31-32` : ```python identifiers={(DOMAIN, self._device["name"])}, ``` Les `unique_id` d'**entités** utilisent correctement `device['id']` (`sensor.py:131,163,189`, `switch.py:33`), mais l'identifiant de **device** utilise le nom. ## Risque - **Collision** : deux devices (ou un site et un device) portant le même nom dans le compte → fusionnés en un seul device HA, entités de deux équipements physiques rattachées au même device. - **Instabilité** : un renommage côté app Comwatt → nouveau device créé, l'ancien détaché par le prune (`__init__.py:126-129`) → historique device scindé, zone/étiquettes perdues. C'est un changement de schéma : le corriger **après** la v1.0 orphelinerait les devices de tous les utilisateurs existants, donc à faire **avant** le tag. ## Recommandation 1. `identifiers={(DOMAIN, str(self._device["id"]))}`, garder `name=self._device["name"]` pour l'affichage. 2. Prévoir une migration douce des devices existants (re-attach des entités par unique_id vers le nouveau device, suppression de l'ancien), sinon le changement scinde l'historique de tous les installs actuelles. 3. Idem dans `_async_prune_stale` (`__init__.py:110,114,117`) qui construit les identifiers par nom. --- Constaté lors de la review de code pré-v1.0 (v0.8.1).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mat/homeassistant-comwatt#81
No description provided.