Problème connexion à MQTT après mise à jour de mosquitto par watchtower

Je confirme que j’ai déjà eu au moins 3 déconnexions similaire sur zwavejs depuis son intégration.
A chaque fois obligé d’aller dans la page de configuration et de sauvargarder et cela refonctionne.
Mais pas récemment.

1 « J'aime »

Merci pour vos retours :slight_smile:

@_Will_71 Tu penses que tu pourrais enquêter sur le sujet la prochaine fois que ça t’arrive ?

De mon côté malgré tous mes efforts, impossible de reproduire… j’aimerais vous aider c’est frustrant de vois ces retours :smiley:

J’essaierai mais a vrai dire ca arrive jamais quand il faut et j’ai eu le cas que 3 fois.
Par contre ca me la fait uniquement avec la connexion MQTT de zwavejs. Jamais avec celle de zigbee2mqtt

J’essaierai pendant les congés de Noël de regarder un peu plus en détails

1 « J'aime »

Je viens de redémarrer le mini pc « méchamment » car je n’y avais plus accès (pb de prise CPL).
Le broker MQTT n’avait pas redémarré, mais celui de Z-Wave JS UI oui.

1 « J'aime »

Je relance la discussion ici suite au message de @mutmut sur un autre topic :slight_smile:

Concernant la reconnexion de Gladys au broker MQTT suite à une perte de connexion / un redémarrage du broker, c’est normalement entièrement géré par la librairie que nous utilisons. La reconnexion est automatique !

Il doit y avoir un cas particulier qui arrive chez vous qui met la librairie dans un état batard. J’ai essayé de reproduire tout ce qui m’a été décris, mais chez moi la reconnexion se fait bien. Je n’arrive pas à reproduire, c’est très frustrant ^^

@Terdious est le seul développeur qui a réussi à reproduire le bug chez lui mais il est occupé par des travaux d’isolation et il n’a pas encore le temps de regarder.

Si quelqu’un veut nous aider, on est vraiment preneur d’aide sur ce souci !

Hello !!

Je n’ai pas encore terminé les travaux mais j’ai de quoi reinstaller ma machine de dev.

Je regarde au plus vite (ce week end au plus tard) pour en tout cas réussir à voir ce qui cloche et nous guider.

De mon côté j’ai pas réussi à reproduire pour l’instant.

1er logs, au redémarrage de 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) 

Il réussit donc bien à se connecter et on trouve environ 650 lignes de logs de message reçus la meme seconde.
Puis :

2025-01-15T06:49:16+0100 <warn> connect.js:50 (MqttClient.<anonymous>) Error while connecting to MQTT - Error: write ECONNRESET

il plante ligne 50 du connect
Si j’ajoute des logs dans la fonction du connect this.mqttClient.on('message', (topic, message) j’obtiens des logs 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 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 ... 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 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 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 ... 184 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 ... 184 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 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 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 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) 

Bon après l’erreur est assez clair : Error: write ECONNRESET

EDIT:
Bon … je ne peux plus poursuivre les tests pour le moment, visiblement j’ai pété DuckDB avec toutes ces écritures :

> start
> cross-env NODE_ENV=development nodemon index.js

[nodemon] 2.0.20
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`
development
2025-01-15T07:12:43+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection catched: Promise {
  <rejected> [Error: Connection Error: Connection was never established or has been closed already] {
    errno: -1,
    code: 'DUCKDB_NODEJS_ERROR',
    errorType: 'Connection'
  }
}
2025-01-15T07:12:43+0100 <error> index.js:16 (process.<anonymous>) [Error: Connection Error: Connection was never established or has been closed already] {
  errno: -1,
  code: 'DUCKDB_NODEJS_ERROR',
  errorType: 'Connection'
}
[nodemon] clean exit - waiting for changes before restart

J’ai réussi à me reconnecter à la DB.

@pierre-gilles
Si dans le fichier server/services/mqtt/lib/connect.js j’ajoute une reconnexion automatique unique dans le 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();
    }

Après 500ms je suis bien reconnectéautomatiquement.
Donc je suppose que la reconnexion automatique de la bibliothèque ne fonctionne pas avec le broker externe ? Et que ce qu’on voit en buffer à la tentative de connexion ne sont que les traces précédentes.
Ce n’est peut-être pas la bonne méthode. Redis moi.

@Terdious c’est une des possibilités oui :slight_smile:

Comme je disais plus haut, pour moi il y a aussi la mise à jour de la lib à tester. On utilise une vieille version, et peut-être que la reconnexion automatique a été corrigée dans une version plus récente

Hello @pierre-gilles,

Je viens de faire l’essai. Aucun changement ! J’ai viré ma modif et mis à jour en 4.2.6 (Tu me dira ça n’empeche pas la mise à jour ^^).

Visiblement en plus cela se produit en broker interne (localhost) comme externe
Et côté container interne à gladys on utilise la meme version fixe et visiblement @gaetanb76 rencontre le meme souci …

L’impression que j’avais était qu’à la connexion, trop data était réceptionné et que ça le mettait en vrac. Mais pour le coup il n’y aurait pas de raison que @gaetanb76 se rettrouve dans la meme situation puisque le broker redémarre en meme temps.

Mais le bout de code pour la reconnexion automatique lui fonctionne … ^^

C’est bon j’ai la cause du problème :partying_face: :partying_face:

Je regarde si je sais faire !!^^

Je me disais bien que le problème de départ avait été corrigé un jour, puis que le souci est revenu ^^

Dans server/services/mqtt/lib/listenToCustomMqttTopicIfNeeded.js si je vire dans le code :

    if (this.mqttClient) {
      logger.info(`Subscribing to MQTT topic ${mqttTopic}`);
      // this.mqttClient.subscribe(mqttTopic);
    }

Alors plus de soucis de connexion au redémarrage. Si je fais :

    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}`);

      }
    }

Les 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

Il ne veut donc plus se reconnecter… Je n’ai pas la réponse de pourquoi …
Et l’appuie sur le bouton de sauvegarde ne redéclenche aucun logs de cette partie du code (donc pas de reconnexion aux topics custom ??)

@Terdious trop cool si tu as trouvé !

Tu utilises beaucoup la fonctionnalité de topic MQTT custom ?
Est-ce que tu as plusieurs appareils qui écoutent le même topic MQTT ?

Oui quand meme ^^

Oui plusieurs appareils mais seulement pour un topic. La visiblement aucun topic custom ne passe.

Et tu as mis en topic des customs des topics natifs Gladys ? :thinking: c’est pas prévu pour ça :stuck_out_tongue:

Sinon, faut voir si c’est pas le fait d’utiliser plusieurs fois le même topic sur différentes features qui ne pose pas problème

Salut @pierre-gilles,

Suite à ta réponse, j’ai poussé les logs un peu plus loin. C’est clairement une erreur dans les champs … Donc la problématique sera surement de comment alerter là dessus mais pas que. Je m’explique, dans le fichier des custom j’ai donc logger :

  • 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
  },

On peut voir des ‹ value › vides, des ‹ . ›, des ‹ value › qui sont le Message mqtt json plutot que le topic comme par exemple :

  • 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'
  }
]

Et là déjà y a un soucis, des values vides … et certains remplis qui n’existent plus. Par exemple cette feature n’existe plus. Mais les params sont toujours là (test d’un jour) :


Et puis inversement sur l’exemple suivant j’ai en effet bien une fonctionnalité existante avec des paramètres dons la value est vide …

Mais alors, je n’ai rien renseigné dans les champs custom (et sur ceux là je suis certain de ne jamais rien avoir rempli - par contre d’autres en étaient pourvu pendant la création) :

N’y aurait-il pas un souci au niveau de la gestion des params à la suppression des fonctionnalités + autres ?

Et en effet je viens de tester la suppression d’une fonctionnalité, soit la feature en id b6929839-c590-460d-abb1-28c795ed5628, elle n’est plus dans les features mais toujours dans les params :

Et en effet après réflexion ça ne m’étonne pas puisque les params sont affiliés aux devices le lien ne doit pas être existant.

Du coup si on configure de meme un topic custom, je suppose que si on l’enlève ensuite, il remplace juste par un champs vide.

@gaetanb76, peux-tu confirmer si tu as supprimer des features ou des topic custom ?

Du coup, test de suppression des devices concernés puis création de nouveaux devices avec custom : Plus de soucis :stuck_out_tongue_winking_eye: :

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 on vide ensuite le topic custom, on voit bien que le problème viens donc de la suppression ou du vidage :

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 vu @Terdious ! C’est sûr que c’est ça !

Je pense que ça se régle assez facilement en rajoutant un if(mqttTopic && mqttTopic.length) :stuck_out_tongue:

C’est pas si grave que les params soient vide, juste listenToCustomMqttTopicIfNeeded.js devrait les ignorer

1 « J'aime »

Je met à jour la PR avec ça !!

On est d’accord !

2 « J'aime »

C’est bon pour moi @pierre-gilles :

1 « J'aime »