Confirmo que ya he tenido al menos 3 desconexiones similares en zwavejs desde su integración.
Cada vez tengo que ir a la página de configuración y guardar, y luego vuelve a funcionar.
Pero no recientemente.
Gracias por tus comentarios ![]()
@Will_71 ¿Crees que podrías investigar sobre el tema la próxima vez que te ocurra?
Por mi parte, a pesar de todos mis esfuerzos, es imposible reproducirlo… Me gustaría ayudaros, es frustrante ver estos comentarios ![]()
Lo intentaré, pero la verdad es que nunca ocurre cuando se necesita y solo me ha pasado 3 veces.
Sin embargo, solo me ocurre con la conexión MQTT de zwavejs. Nunca con la de zigbee2mqtt.
Intentaré mirar con más detalle durante las vacaciones de Navidad.
Acabo de reiniciar el mini PC « brutalmente » porque ya no podía acceder a él (problema con el enchufe CPL).
El broker MQTT no se había reiniciado, pero el de Z-Wave JS UI sí.
Reabro la discusión aquí tras el mensaje de @mutmut en otro tema ![]()
En cuanto a la reconexión de Gladys al broker MQTT tras una pérdida de conexión / un reinicio del broker, esto debería estar completamente gestionado por la librería que utilizamos. ¡La reconexión es automática!
Debe haber un caso particular que os ocurre que deja la librería en un estado raro. He intentado reproducir todo lo que me han descrito, pero en mi caso la reconexión funciona bien. No consigo reproducirlo, es muy frustrante ^^
@Terdious es el único desarrollador que ha conseguido reproducir el error en su casa, pero está ocupado con trabajos de aislamiento y aún no tiene tiempo de mirar.
Si alguien quiere ayudarnos, ¡estamos realmente necesitados de ayuda con este problema!
¡Hola!
Aún no he terminado los trabajos, pero tengo lo necesario para reinstalar mi máquina de desarrollo.
Lo revisaré lo antes posible (este fin de semana a más tardar) para poder ver qué falla y guiarnos.
Por mi parte, no he logrado reproducirlo de momento.
1er logs, al reiniciar gladys:
2025-01-15T06:49:16+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection catched: Promise {
<rejected> NotFoundError: DeviceFeature tasmota:tasmota_836534:ENERGY:Voltage not found
at DeviceManager.newStateEvent (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/device/device.newStateEvent.js:17:11)
at EventEmitter.emit (node:events:517:28)
at Event.emit (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/event/index.js:18:16)
}
2025-01-15T06:49:16+0100 <error> index.js:16 (process.<anonymous>)
2025-01-15T06:49:16+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection catched: Promise {
<rejected> NotFoundError: DeviceFeature tasmota:tasmota_836534:ENERGY:Current not found
at DeviceManager.newStateEvent (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/device/device.newStateEvent.js:17:11)
at EventEmitter.emit (node:events:517:28)
at Event.emit (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/event/index.js:18:16)
}
2025-01-15T06:49:16+0100 <error> index.js:16 (process.<anonymous>)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:49:16+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
Por lo tanto, logra conectarse y se encuentran aproximadamente 650 líneas de registros de mensajes recibidos en el mismo segundo.
Luego:
2025-01-15T06:49:16+0100 <warn> connect.js:50 (MqttClient.<anonymous>) Error while connecting to MQTT - Error: write ECONNRESET
se bloquea en la línea 50 del connect
Si añado registros en la función del connect this.mqttClient.on('message', (topic, message) obtengo registros de buffer:
2025-01-15T06:57:50+0100 <error> index.js:16 (process.<anonymous>)
2025-01-15T06:57:50+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection catched: Promise {
<rejected> NotFoundError: DeviceFeature tasmota:tasmota_837F73:ENERGY:ApparentPower not found
at DeviceManager.newStateEvent (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/device/device.newStateEvent.js:17:11)
at EventEmitter.emit (node:events:517:28)
at Event.emit (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/event/index.js:18:16)
}
2025-01-15T06:57:50+0100 <error> index.js:16 (process.<anonymous>)
2025-01-15T06:57:50+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection catched: Promise {
<rejected> NotFoundError: DeviceFeature tasmota:tasmota_837F73:ENERGY:ReactivePower not found
at DeviceManager.newStateEvent (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/device/device.newStateEvent.js:17:11)
at EventEmitter.emit (node:events:517:28)
at Event.emit (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/event/index.js:18:16)
}
2025-01-15T06:57:50+0100 <error> index.js:16 (process.<anonymous>)
2025-01-15T06:57:50+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection catched: Promise {
<rejected> NotFoundError: DeviceFeature tasmota:tasmota_837F73:ENERGY:Voltage not found
at DeviceManager.newStateEvent (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/device/device.newStateEvent.js:17:11)
at EventEmitter.emit (node:events:517:28)
at Event.emit (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/event/index.js:18:16)
}
2025-01-15T06:57:50+0100 <error> index.js:16 (process.<anonymous>)
2025-01-15T06:57:50+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection catched: Promise {
<rejected> NotFoundError: DeviceFeature tasmota:tasmota_837F73:ENERGY:Current not found
at DeviceManager.newStateEvent (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/device/device.newStateEvent.js:17:11)
at EventEmitter.emit (node:events:517:28)
at Event.emit (/home/terdieu/PR-Gladys/netatmo-integration/server/lib/event/index.js:18:16)
}
2025-01-15T06:57:50+0100 <error> index.js:16 (process.<anonymous>)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 54 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 55 70 74 69 6d 65 ... 302 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 36 22 7d 7d>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 54 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 55 70 74 69 6d 65 ... 267 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 54 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 55 70 74 69 6d 65 ... 267 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 53 77 69 74 63 68 ... 10 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 54 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 55 70 74 69 6d 65 ... 271 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 54 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 55 70 74 69 6d 65 ... 306 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 7d 7d>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 45 4e 45 52 47 59 ... 184 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 7d 7d>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 45 4e 45 52 47 59 ... 182 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 54 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 55 70 74 69 6d 65 ... 271 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 54 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 36 22 2c 22 55 70 74 69 6d 65 ... 300 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 7d 7d>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 53 77 69 74 63 68 ... 10 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 45 4e 45 52 47 59 ... 182 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 36 22 7d 7d>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 54 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 55 70 74 69 6d 65 ... 302 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 45 4e 45 52 47 59 ... 180 more bytes>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 36 22 7d 7d>
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 45 4e 45 52 47 59 ... 178 more bytes>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 45 4e 45 52 47 59 ... 178 bytes más>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 45 4e 45 52 47 59 ... 178 bytes más>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 45 4e 45 52 47 59 ... 184 bytes más>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 2c 22 45 4e 45 52 47 59 ... 184 bytes más>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 7d 7d>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 37 22 7d 7d>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 54 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 36 22 2c 22 55 70 74 69 6d 65 ... 300 bytes más>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 36 22 7d 7d>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <error> connect.js:68 (MqttClient.<anonymous>) message <Buffer 7b 22 53 74 61 74 75 73 53 4e 53 22 3a 7b 22 54 69 6d 65 22 3a 22 32 30 32 35 2d 30 31 2d 31 35 54 30 36 3a 35 37 3a 34 36 22 7d 7d>
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:53 (MqttHandler.handleNewMessage)
2025-01-15T06:57:50+0100 <warn> handleNewMessage.js:54 (MqttHandler.handleNewMessage)
Bueno, después el error es bastante claro: Error: write ECONNRESET
EDIT:
Bueno … no puedo continuar con las pruebas por el momento, aparentemente he roto DuckDB con todas estas escrituras:
> start
> cross-env NODE_ENV=development nodemon index.js
[nodemon] 2.0.20
[nodemon] para reiniciar en cualquier momento, ingresa `rs`
[nodemon] observando rutas: *.*
[nodemon] observando extensiones: js,mjs,json
[nodemon] iniciando `node index.js`
development
2025-01-15T07:12:43+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection capturado: Promise {
<rechazado> [Error: Error de conexión: La conexión nunca se estableció o ya ha sido cerrada] {
errno: -1,
code: 'DUCKDB_NODEJS_ERROR',
errorType: 'Connection'
}
}
2025-01-15T07:12:43+0100 <error> index.js:16 (process.<anonymous>) [Error: Error de conexión: La conexión nunca se estableció o ya ha sido cerrada] {
errno: -1,
code: 'DUCKDB_NODEJS_ERROR',
errorType: 'Connection'
}
[nodemon] salida limpia - esperando cambios antes de reiniciar
He logrado reconectarme a la DB.
@pierre-gilles
Si en el archivo server/services/mqtt/lib/connect.js añado una reconexión automática única en el mqttClient.on 'error' :
this.mqttClient.on('error', (err) => {
logger.warn(`Error while connecting to MQTT - ${err}`);
this.gladys.event.emit(EVENTS.WEBSOCKET.SEND_ALL, {
type: WEBSOCKET_MESSAGE_TYPES.MQTT.ERROR,
payload: err,
});
this.disconnect();
});
en
this.mqttClient.on('error', (err) => {
logger.warn(`Error while connecting to MQTT - ${err}`);
this.gladys.event.emit(EVENTS.WEBSOCKET.SEND_ALL, {
type: WEBSOCKET_MESSAGE_TYPES.MQTT.ERROR,
payload: err,
});
if (!this.reconnecting) {
this.reconnecting = true;
logger.warn('Attempting to reconnect to MQTT server...');
setTimeout(() => {
this.connect({
mqttUrl: mqttUrl,
mqttUsername: mqttUsername,
mqttPassword: mqttPassword
}).finally(() => {
this.reconnecting = false;
});
}, 500);
} else {
this.disconnect();
}
Después de 500ms me reconecto automáticamente.
Por lo tanto, supongo que la reconexión automática de la biblioteca no funciona con el broker externo. Y que lo que vemos en el buffer en el intento de conexión son solo los rastros anteriores.
Quizás no sea el buen método. Dime.
@Terdious sí, es una de las posibilidades ![]()
Como decía antes, para mí también hay que probar la actualización de la lib. Usamos una versión antigua, y quizá la reconexión automática se haya corregido en una versión más reciente.
Hola @pierre-gilles,
Acabo de hacer la prueba. ¡Ningún cambio! He deshecho mi modificación y actualizado a 4.2.6 (ya sabes, eso no impide la actualización ^^).
Al parecer, además, esto ocurre tanto en el broker interno (localhost) como en el externo.
Y en el lado del contenedor interno de gladys usamos la misma versión fija y al parecer @gaetanb76 tiene el mismo problema…
La impresión que tenía era que al conectarse, se recibía demasiada data y eso lo desordenaba. Pero en este caso no habría razón para que @gaetanb76 se encuentre en la misma situación, ya que el broker se reinicia al mismo tiempo.
Pero el fragmento de código para la reconexión automática sí funciona… ^^
¡Ya tengo la causa del problema!
![]()
Voy a ver si sé hacerlo!!^^
Me decía que el problema inicial había sido corregido un día, y luego el problema volvió ^^
En server/services/mqtt/lib/listenToCustomMqttTopicIfNeeded.js si elimino en el código:
if (this.mqttClient) {
logger.info(`Subscribing to MQTT topic ${mqttTopic}`);
// this.mqttClient.subscribe(mqttTopic);
}
Entonces no hay más problemas de conexión al reiniciar. Si hago:
if (this.mqttClient) {
logger.error(`Subscribing to MQTT topic ${mqttTopic}`);
// this.mqttClient.subscribe(mqttTopic);
try {
const result = this.mqttClient.subscribe(mqttTopic);
logger.warn(result);
} catch (error) {
logger.error(`Error subscribing to MQTT topic ${mqttTopic}: ${error}`);
}
}
Los logs:
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic : RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic : RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic gladys/master/device/mqtt:light-ambiance-piscine/feature/mqtt:light-ambiance-piscine
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic gladys/master/device/mqtt:light-ambiance-piscine/feature/mqtt:light-ambiance-piscine: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic gladys/master/device/mqtt:light-ambiance-piscine/feature/mqtt:light-ambiance-piscine
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic gladys/master/device/mqtt:light-ambiance-piscine/feature/mqtt:light-ambiance-piscine: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic tarifs-total-energie
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic tarifs-total-energie: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic tarifs-total-energie
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic tarifs-total-energie: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic consos-vince
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic consos-vince: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic consos-vince
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic consos-vince: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic consos-vince
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic consos-vince: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic consos-vince
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic consos-vince: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic : RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic consos-vince
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic consos-vince: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic consos-vince
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic consos-vince: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic consos-vince
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic consos-vince: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:32 () Subscribing to MQTT topic consos-vince
2025-01-16T11:05:17+0100 <error> listenToCustomMqttTopicIfNeeded.js:38 () Error subscribing to MQTT topic consos-vince: RangeError: Maximum call stack size exceeded
2025-01-16T11:05:17+0100 <warn> connect.js:54 (MqttClient.<anonymous>) Error while connecting to MQTT - Error: write ECONNRESET
2025-01-16T11:05:17+0100 <warn> connect.js:80 (MqttClient.<anonymous>) Disconnected from MQTT server
2025-01-16T11:05:22+0100 <error> connect.js:41 (MqttClient.<anonymous>) Connected to MQTT server mqtt://10.5.0.50:1883
2025-01-16T11:05:22+0100 <warn> connect.js:80 (MqttClient.<anonymous>) Disconnected from MQTT server
Por lo tanto, ya no quiere reconectarse… No tengo la respuesta de por qué…
Y el botón de guardar no vuelve a activar ningún log de esta parte del código (por lo tanto, ¿no hay reconexión a los temas personalizados?).
@Terdious ¡qué chulo que lo hayas encontrado!
¿Usas mucho la funcionalidad de temas MQTT personalizados?
¿Tienes varios dispositivos que escuchan el mismo tema MQTT?
Sí, de todos modos ^^
Sí, varios dispositivos, pero solo para un tema. La visiblemente ningún tema personalizado pasa.
¿Has puesto en tema personalizado temas nativos de Gladys?
No está previsto para eso ![]()
Si no, hay que ver si no es el hecho de usar el mismo tema varias veces en diferentes características lo que no da problemas
Hola @pierre-gilles,
Según tu respuesta, he profundizado un poco más en los registros. Es claramente un error en los campos… Por lo tanto, el problema será, sin duda, cómo alertar sobre esto, pero no solo eso. Te explico, en el archivo de personalización he registrado:
- device.param:
device.params [
{
id: 'df3028da-f845-43a4-8f16-2ee02aa15b39',
device_id: '088f3819-2f5e-4622-8f5b-b3e3b7710918',
name: 'mqtt_custom_topic_feature:c2ffe676-bd49-4009-a193-ca5b2d6bcf2a',
value: '',
created_at: 2024-07-04T04:09:00.529Z,
updated_at: 2024-07-04T04:35:56.381Z
},
{
id: '1f3089f0-7179-4ad7-b133-79ad2d82a7c5',
device_id: '088f3819-2f5e-4622-8f5b-b3e3b7710918',
name: 'mqtt_custom_object_path_feature:c2ffe676-bd49-4009-a193-ca5b2d6bcf2a',
value: '',
created_at: 2024-07-04T04:09:00.529Z,
updated_at: 2024-07-04T04:35:56.386Z
},
{
id: 'abc366a4-247f-496c-bd0a-a0ee9629c43d',
device_id: '088f3819-2f5e-4622-8f5b-b3e3b7710918',
name: 'mqtt_custom_topic_feature:b47df305-53f7-4d47-9610-1b630bd49ac7',
value: '',
created_at: 2024-07-04T04:09:00.529Z,
updated_at: 2024-07-04T04:35:56.385Z
},
{
id: '6e31226e-6b03-4908-870e-687403b05fbb',
device_id: '088f3819-2f5e-4622-8f5b-b3e3b7710918',
name: 'mqtt_custom_object_path_feature:b47df305-53f7-4d47-9610-1b630bd49ac7',
value: '',
created_at: 2024-07-04T04:09:00.529Z,
updated_at: 2024-07-04T04:35:56.387Z
},
{
id: '500b2c1f-d6ee-4e66-84b7-2612ec3c2414',
device_id: '088f3819-2f5e-4622-8f5b-b3e3b7710918',
name: 'mqtt_custom_topic_feature:62b057da-d367-4972-97d3-00dc8fc1a065',
value: 'gladys/master/device/mqtt:light-ambiance-piscine/feature/mqtt:light-ambiance-piscine',
created_at: 2024-07-04T04:15:43.875Z,
updated_at: 2024-07-04T04:15:43.875Z
},
{
id: 'da0d94b8-79bf-4ffe-9058-c997a3debc1d',
device_id: '088f3819-2f5e-4622-8f5b-b3e3b7710918',
name: 'mqtt_custom_object_path_feature:62b057da-d367-4972-97d3-00dc8fc1a065',
value: 'speed',
created_at: 2024-07-04T04:15:43.875Z,
updated_at: 2024-07-04T04:24:24.834Z
},
Podemos ver ‹ value › vacíos, puntos, ‹ value › que son el mensaje MQTT JSON en lugar del tema, como por ejemplo:
- this.deviceFeatureCustomMqttTopics
this.deviceFeatureCustomMqttTopics [
{
topic: '',
regex_key: '',
device_feature_id: 'c2ffe676-bd49-4009-a193-ca5b2d6bcf2a',
object_path: ''
},
{
topic: '',
regex_key: '',
device_feature_id: 'b47df305-53f7-4d47-9610-1b630bd49ac7',
object_path: ''
},
{
topic: 'gladys/master/device/mqtt:light-ambiance-piscine/feature/mqtt:light-ambiance-piscine',
regex_key: 'gladys/master/device/mqtt:light-ambiance-piscine/feature/mqtt:light-ambiance-piscine',
device_feature_id: '62b057da-d367-4972-97d3-00dc8fc1a065',
object_path: 'speed'
}
]
Y aquí ya hay un problema, valores vacíos… y algunos rellenos que ya no existen. Por ejemplo, esta función ya no existe. Pero los parámetros siguen ahí (prueba de un día):
Y, por el contrario, en el siguiente ejemplo, tengo efectivamente una funcionalidad existente con parámetros cuyo valor está vacío…
Pero entonces, no he introducido nada en los campos personalizados (y en estos estoy seguro de no haber rellenado nunca - aunque otros sí lo estaban durante la creación):
¿No habría un problema en la gestión de los parámetros al eliminar las funcionalidades + otros?
Y efectivamente acabo de probar la eliminación de una funcionalidad, es decir, la característica con el id b6929839-c590-460d-abb1-28c795ed5628, ya no está en las características pero sigue en los parámetros:
Y efectivamente, después de reflexionar, no me sorprende, ya que los parámetros están vinculados a los dispositivos, por lo que el enlace no debe existir.
Por lo tanto, si configuramos un tema personalizado de la misma manera, supongo que si lo eliminamos después, simplemente lo reemplaza con un campo vacío.
@gaetanb76, ¿puedes confirmar si has eliminado características o temas personalizados?
Por lo tanto, prueba la eliminación de los dispositivos afectados y luego la creación de nuevos dispositivos con personalización: sin problemas ![]()
this.deviceFeatureCustomMqttTopics [
{
topic: 'test',
regex_key: 'test',
device_feature_id: 'd1a558eb-07d6-4972-900d-c3b4bc1587b8',
object_path: null
}
]
device.params [
{
id: 'b1795c88-c39e-447a-a683-81f8c6fe1e6a',
device_id: '6cb64637-71b2-4b34-be5c-75a0eeaff17c',
name: 'mqtt_custom_topic_feature:d1a558eb-07d6-4972-900d-c3b4bc1587b8',
value: 'test',
created_at: 2025-01-17T10:09:39.371Z,
updated_at: 2025-01-17T10:14:24.625Z
}
]
2025-01-17T11:14:43+0100 <error> listenToCustomMqttTopicIfNeeded.js:35 () Subscribing to MQTT topic test
Si luego vaciamos el tema personalizado, vemos claramente que el problema proviene de la eliminación o del vaciado:
this.deviceFeatureCustomMqttTopics [
{
topic: '',
regex_key: '',
device_feature_id: 'd1a558eb-07d6-4972-900d-c3b4bc1587b8',
object_path: null
}
]
device.params [
{
id: 'b1795c88-c39e-447a-a683-81f8c6fe1e6a',
device_id: '6cb64637-71b2-4b34-be5c-75a0eeaff17c',
name: 'mqtt_custom_topic_feature:d1a558eb-07d6-4972-900d-c3b4bc1587b8',
value: '',
created_at: 2025-01-17T10:09:39.371Z,
updated_at: 2025-01-17T10:15:27.005Z
}
]
2025-01-17T11:15:27+0100 <error> listenToCustomMqttTopicIfNeeded.js:35 () Subscribing to MQTT topic
2025-01-17T11:15:27+0100 <warn> connect.js:82 (MqttClient.<anonymous>) Disconnected from MQTT server
¡Bien visto @Terdious! ¡Seguro que es eso!
Creo que se soluciona bastante fácilmente añadiendo un if(mqttTopic && mqttTopic.length) ![]()
No es tan grave que los parámetros estén vacíos, solo listenToCustomMqttTopicIfNeeded.js debería ignorarlos
¡Estoy actualizando la PR con esto!!
¡Estamos de acuerdo!
Me parece bien a mí @pierre-gilles:




