Zigbee2mqtt: no romper el enlace con Gladys al renombrar un dispositivo

El problema

Hoy en día, la conexión entre un dispositivo Zigbee2mqtt y su equivalente en Gladys se basa en el nombre del dispositivo (el friendly_name definido en Zigbee2mqtt).

Consecuencia: si se renombra un dispositivo desde la interfaz de Zigbee2mqtt, Gladys ya no lo reconoce. Se trata como un nuevo dispositivo, y el antiguo permanece en la base de datos con su antiguo nombre.

Tres efectos concretos:

  1. Aparecen duplicados en las listas de dispositivos, especialmente al crear una escena o agregar un componente a un tablero — no se sabe cuál es el correcto.
  2. Las escenas existentes fallan silenciosamente. Continúan apuntando al antiguo dispositivo, que ya no recibe ningún dato. No se muestra ningún mensaje de error, la escena simplemente ya no se activa.
  3. El historial se divide en dos. Las mediciones anteriores al cambio de nombre permanecen en el antiguo dispositivo, las posteriores están en el nuevo. Los gráficos vuelven a empezar desde cero.

El problema se ha reportado en el foro aquí: Limpieza de la base de datos de dispositivos

Nota: renombrar un dispositivo desde Gladys no causa ningún problema, está bien gestionado. Es solo el renombrado desde Zigbee2mqtt lo que rompe el enlace.

La solución actual

  • Elegir un nombre definitivo en Zigbee2mqtt en el momento del emparejamiento y no tocarlo después.
  • Renombrar solo desde Gladys, lo cual no tiene ningún impacto en el enlace.
  • Si el daño está hecho: eliminar manualmente el antiguo dispositivo desde Integraciones → Zigbee2mqtt → Dispositivos, luego recrear las escenas afectadas.

Funciona, pero supone conocer la trampa de antemano — lo cual no es el caso de nadie la primera vez.

La funcionalidad solicitada

Que Gladys siga el renombrado automáticamente, sin crear duplicados y sin romper las escenas existentes.

Dos enfoques posibles, complementarios:

1. Escuchar el evento de renombrado de Zigbee2mqtt

Zigbee2mqtt ya publica un evento device_renamed que contiene el antiguo y el nuevo nombre. Gladys podría suscribirse a este evento y actualizar la referencia del dispositivo sobre la marcha. Es una corrección dirigida, sin migración de datos, que resuelve el caso del renombrado realizado mientras Gladys está en funcionamiento.

2. Basarse en la dirección Zigbee (dirección IEEE) en lugar del nombre

Esta es la solución fundamental: la dirección IEEE es el identificador de hardware del dispositivo, nunca cambia, sin importar el nombre que se le dé. Gladys ya recupera esta dirección y la muestra en la ficha del dispositivo, pero no la usa para la identificación. Este enfoque también cubre los casos que el evento no cubre (renombrado realizado mientras Gladys está apagado, por ejemplo). A cambio, requiere una migración de los dispositivos Zigbee existentes.

Beneficio

Renombrar un dispositivo es una operación común, que se hace naturalmente al reorganizar la instalación. Hoy en día es una operación de riesgo, cuyos efectos solo aparecen más tarde, cuando una escena ya no se activa. Esta evolución eliminaría por completo la trampa.

Para información, en HA, es posible propagar el cambio de nombre desde la interfaz de Z2M marcando esta opción.

Pero encuentro la opción 2 más estable y menos propensa a errores humanos.

Es estable, pero la gestión de lo existente es compleja. Si un usuario tenía scripts, Node-RED, cualquier cosa externa que utilizara el external_id, rompería su instalación existente.

Voy a preguntarle a Fable qué recomienda.

¡Hola a todos!

Este tema ahora está en desarrollo.

Se ha abierto una PR para mantener el enlace a Gladys cuando se renombra un dispositivo en Zigbee2mqtt:

No duden en seguir la PR, probar (opcional, especialmente para pequeñas solicitudes) y dar sus comentarios aquí si es necesario.