Botón para restablecer la integración Zigbee2Mqtt

El complemento Zigbee2mqtt tiene un botón « Activar/Desactivar » que detiene los contenedores, pero no limpia ni las variables en la base de datos ni los archivos en el disco. No hay forma de reiniciar desde cero sin intervención manual. La idea es agregar un botón « Restablecer » en la página de configuración, con confirmación (como en matterbridge/node-red), que realice un reinicio completo: desconexión, eliminación de variables, eliminación de archivos y contenedores.

Procedimiento de reinicio:

  1. Llamar a this.disconnect() (detener contenedores + desconexión MQTT)
  2. Eliminar todas las variables de configuración en la base de datos mediante this.gladys.variable.destroy(key, this.serviceId) para cada clave de CONFIGURACIÓN en constants.js:
  • ZIGBEE2MQTT_DRIVER_PATH, Z2M_BACKUP, ZIGBEE_DONGLE_NAME, Z2M_MQTT_MODE, Z2M_TCP_POR, Z2M_MQTT_URL
  • Z2M_MQTT_USERNAME_KEY, Z2M_MQTT_PASSWORD_KEY
  • GLADYS_MQTT_USERNAME_KEY, GLADYS_MQTT_PASSWORD_KEY
  • DOCKER_MQTT_VERSION, DOCKER_Z2M_VERSION
  1. Eliminar la carpeta zigbee2mqtt/ en el disco
  2. Restablecer el estado (discoveredDevices, usbConfigured, banderas de estado, etc.)
  3. Emitir un evento de estado mediante this.emitStatusEvent()

:warning: Solo disponible en el modo « Instalación desde Gladys »

Propuesta de diseño + mensajes

Con confirmación

Para los dispositivos Gladys vinculados a esta integración, creo que se deben dejar (de lo contrario, ¿podríamos romper escenas?).

Por lo que vale, me parece perfecto. ¡Es muy claro!

En cuanto a la copia de seguridad de Gladys +, si restauramos una versión con un antiguo dongle, ¿no hay riesgo? ¿O, por el contrario, es una seguridad adicional porque podríamos restaurar en caso de manipulación incorrecta?

En este caso, habría que probarlo, no sé cómo reacciona. En los casos que hemos visto en el foro, era otro caso: cambio de dongle con archivos ya en el disco.

En el caso de la restauración de Gladys Plus, no se restauran los archivos de Zigbee2mqtt, solo se proporciona a Zigbee2mqtt lo necesario para volver a empezar con la misma configuración, no es exactamente lo mismo.

Para mí, se guarda todo el contenido de la carpeta zigbee2mqtt (por lo tanto configuration.yaml, database.db y coordinator_backup.json).

Pero la restauración prueba si hay una nueva configuración. Si se restaura una copia de seguridad hecha con un antiguo dongle (mientras que un nuevo dongle está conectado y z2m no está inicializado), también habrá que usar este botón.

¡Vaya, he hecho una implementación esta mañana!

Aproveché para reforzar la robustez de la integración, ya que había inestabilidades que se volvían aún más visibles con esta nueva funcionalidad.

En particular, el error del contenedor detenido: hasta ahora, en Gladys, si el contenedor Zigbee2mqtt ya estaba detenido, se emitía un error 304 y nunca se pasaba a la eliminación del contenedor. Esto se ha corregido para todas las integraciones :white_check_mark:

Lo he probado en muchos casos localmente en un mini-PC, ¡y funciona genial!

Las capturas de pantalla:

La PR:

La imagen Docker:

gladysassistant/gladys:zigbee2mqtt-reset-button

(Ya compilada en x64, en proceso de compilación para arm64)

Voy a hacer un lanzamiento esta tarde, si quieres probarlo antes, ¡es posible! :wink:

Lo probé en una instancia con un dongle pero sin dispositivos emparejados. Funciona bien, los estados son correctos después y las carpetas/variables/contenedores se eliminan correctamente :check_box_with_check:

¡Gracias por la prueba rápida @cicoub13! Voy a hacer una nueva versión de Gladys esta tarde

El nuevo botón está disponible en Gladys Assistant v4.70: