Message d'erreur zigbee2mqtt

Je vais re-tester. J’ai l’impression que le mapping de mon bouton sans-fil Xiaomi est différent car ma scène me permettant d’allumer / éteindre ma lampe ne fonctionnait plus.

J’essaye à nouveau pour vérifier et approfondir dès que j’ai un peu de temps et je vous tiens au courant !

Salut @lmilcent, est-ce que tu as pu re-tester depuis ? :slight_smile:

Désolé pour ce gros délai, c’est assez chargé au boulot. Je suis aussi en train de réinstaller un Dell OptiPlex 3070 Micro (3RC7K) - PC de bureau Dell sur LDLC que j’ai pu récupérer gratuitement pour en faire mon serveur domotique (Gladys, VPN et autre services), forcément j’ai un peu oublié de tester à nouveau le build dev :sweat_smile:

Aller, j’essaye de faire ça au plus vite :slight_smile:

Je confirme @pierre-gilles, il y des changements qui cassent mon installation.

Ce qui est cassé (à première vue)

  1. J’ai des erreurs, liées à Gladys Plus (abonnement retiré) qui claquent régulièrement.
Logs
2022-04-14T10:07:09+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device PriseSupp, feature power_outage_memory not configured in Gladys.
2022-04-14T10:07:12+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementEntree, feature illuminance_lux not configured in Gladys.
2022-04-14T10:07:12+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementEntree, feature linkquality not configured in Gladys.
2022-04-14T10:07:12+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementEntree, feature illuminance_lux not configured in Gladys.
2022-04-14T10:07:12+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementEntree, feature linkquality not configured in Gladys.
2022-04-14T10:07:16+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalon, feature illuminance_lux not configured in Gladys.
2022-04-14T10:07:16+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalon, feature linkquality not configured in Gladys.
2022-04-14T10:07:17+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalon, feature illuminance_lux not configured in Gladys.
2022-04-14T10:07:17+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalon, feature linkquality not configured in Gladys.
2022-04-14T10:07:46+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalleAManger, feature illuminance_lux not configured in Gladys.
2022-04-14T10:07:46+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalleAManger, feature linkquality not configured in Gladys.
2022-04-14T10:08:00+0200 <info> scene.checkCalendarTriggers.js:24 (SceneManager.checkCalendarTriggers) Checking calendar triggers at Thu, 14 Apr 2022 08:08:00 GMT
2022-04-14T10:08:09+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device PriseBureau, feature linkquality not configured in Gladys.
2022-04-14T10:08:09+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device PriseBureau, feature power_outage_memory not configured in Gladys.
2022-04-14T10:08:09+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device PriseSupp, feature linkquality not configured in Gladys.
2022-04-14T10:08:09+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device PriseSupp, feature power_outage_memory not configured in Gladys.
2022-04-14T10:08:23+0200 <warn> index.js:828 (Socket.<anonymous>) Socket disconnected by the server. Trying to reconnect...
2022-04-14T10:08:23+0200 <warn> index.js:794 (Socket.<anonymous>) Gladys Gateway: Unable to get new access token or refresh user list.
2022-04-14T10:08:23+0200 <warn> index.js:795 (Socket.<anonymous>) Error: Request failed with status code 403
    at createError (/src/server/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/src/server/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/src/server/node_modules/axios/lib/adapters/http.js:269:11)
    at IncomingMessage.emit (events.js:412:35)
    at endReadableNT (internal/streams/readable.js:1334:12)
    at processTicksAndRejections (internal/process/task_queues.js:82:21) {
  config: {
    url: 'https://api.gladysgateway.com/instances/access-token',
    method: 'get',
    headers: {
      Accept: 'application/json, text/plain, */*',
      authorization: 'xxxxxxxxxxxxxx',
      'User-Agent': 'axios/0.21.4'
    },
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    adapter: [Function: httpAdapter],
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    validateStatus: [Function: validateStatus],
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    data: undefined
  },
  request: <ref *1> ClientRequest {
    _events: [Object: null prototype] {
      abort: [Function (anonymous)],
      aborted: [Function (anonymous)],
      connect: [Function (anonymous)],
      error: [Function (anonymous)],
      socket: [Function (anonymous)],
      timeout: [Function (anonymous)],
      prefinish: [Function: requestOnPrefinish]
    },
    _eventsCount: 7,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: false,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: false,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    _contentLength: 0,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    socket: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'api.gladysgateway.com',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'api.gladysgateway.com',
      _readableState: [ReadableState],
      _maxListeners: undefined,
      _writableState: [WritableState],
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: [Circular *1],
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: true,
      [Symbol(pendingSession)]: null,
      [Symbol(async_id_symbol)]: 14971,
      [Symbol(kHandle)]: [TLSWrap],
      [Symbol(kSetNoDelay)]: false,
      [Symbol(lastWriteQueueSize)]: 0,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(connect-options)]: [Object],
      [Symbol(RequestTimeout)]: undefined
    },
    _header: 'GET /instances/access-token HTTP/1.1\r\n' +
      'Accept: application/json, text/plain, */*\r\n' +
      'authorization: xxxxxxxxxxxxxxxxxxxxxxx1Z1yLZZRvktInSYpXxNRoDcQx3vYNIviy7b9M\r\n' +
      'User-Agent: axios/0.21.4\r\n' +
      'Host: api.gladysgateway.com\r\n' +
      'Connection: close\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: noopPendingOutput],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object],
      requests: {},
      sockets: [Object],
      freeSockets: {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      [Symbol(kCapture)]: false
    },
    socketPath: undefined,
    method: 'GET',
    maxHeaderSize: undefined,
    insecureHTTPParser: undefined,
    path: '/instances/access-token',
    _ended: true,
    res: IncomingMessage {
      _readableState: [ReadableState],
      _events: [Object: null prototype],
      _eventsCount: 3,
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      headers: [Object],
      rawHeaders: [Array],
      trailers: {},
      rawTrailers: [],
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 403,
      statusMessage: 'Forbidden',
      client: [TLSSocket],
      _consuming: false,
      _dumped: false,
      req: [Circular *1],
      responseUrl: 'https://api.gladysgateway.com/instances/access-token',
      redirects: [],
      [Symbol(kCapture)]: false,
      [Symbol(RequestTimeout)]: undefined
    },
    aborted: false,
    timeoutCb: null,
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    host: 'api.gladysgateway.com',
    protocol: 'https:',
    _redirectable: Writable {
      _writableState: [WritableState],
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      _options: [Object],
      _ended: true,
      _ending: true,
      _redirectCount: 0,
      _redirects: [],
      _requestBodyLength: 0,
      _requestBodyBuffers: [],
      _onNativeResponse: [Function (anonymous)],
      _currentRequest: [Circular *1],
      _currentUrl: 'https://api.gladysgateway.com/instances/access-token',
      [Symbol(kCapture)]: false
    },
    [Symbol(kCapture)]: false,
    [Symbol(kNeedDrain)]: false,
    [Symbol(corked)]: 0,
    [Symbol(kOutHeaders)]: [Object: null prototype] {
      accept: [Array],
      authorization: [Array],
      'user-agent': [Array],
      host: [Array]
    }
  },
  response: {
    status: 403,
    statusText: 'Forbidden',
    headers: {
      server: 'nginx/1.19.3',
      date: 'Thu, 14 Apr 2022 08:08:23 GMT',
      'content-type': 'application/json; charset=utf-8',
      'content-length': '67',
      connection: 'close',
      'x-powered-by': 'Express',
      'access-control-allow-origin': '*',
      'access-control-allow-methods': 'GET,PUT,POST,PATCH,DELETE,OPTIONS',
      'access-control-allow-headers': 'Content-Type, Authorization, Content-Length, X-Requested-With',
      etag: 'W/"43-cmA3lePMVRz8mAO0r30P2lM8MEc"',
      'strict-transport-security': 'max-age=31536000'
    },
    config: {
      url: 'https://api.gladysgateway.com/instances/access-token',
      method: 'get',
      headers: [Object],
      transformRequest: [Array],
      transformResponse: [Array],
      timeout: 0,
      adapter: [Function: httpAdapter],
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      validateStatus: [Function: validateStatus],
      transitional: [Object],
      data: undefined
    },
    request: <ref *1> ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      socket: [TLSSocket],
      _header: 'GET /instances/access-token HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'authorization: xxxx xxxxxxxxxxxx xx xxxRvktInSYpXxNRoDcQx3vYNIviy7b9M\r\n' +
        'User-Agent: axios/0.21.4\r\n' +
        'Host: api.gladysgateway.com\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: noopPendingOutput],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      path: '/instances/access-token',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'api.gladysgateway.com',
      protocol: 'https:',
      _redirectable: [Writable],
      [Symbol(kCapture)]: false,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype]
    },
    data: {
      status: 403,
      error_code: 'FORBIDDEN',
      error_message: 'Forbidden'
    }
  },
  isAxiosError: true,
  toJSON: [Function: toJSON]
}
2022-04-14T10:08:28+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalon, feature illuminance_lux not configured in Gladys.
2022-04-14T10:08:28+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalon, feature linkquality not configured in Gladys.
2022-04-14T10:08:28+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalon, feature illuminance_lux not configured in Gladys.
2022-04-14T10:08:28+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device CapteurMouvementSalon, feature linkquality not configured in Gladys.
  1. Quand je clique sur mon interrupteur sans fil, j’ai deux warning et mon interrupteur ne fonctionne pas, donc ma scène ne s’exécute pas.
2022-04-14T10:09:02+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device InterrupteurSansFil, feature linkquality not configured in Gladys.
2022-04-14T10:09:02+0200 <warn> handleMqttMessage.js:100 () Zigbee2mqtt device InterrupteurSansFil, feature temperature not configured in Gladys.

Investigations

  • Pourtant le bouton est bien détecté :
    image

  • En supprimant / re-créant le bouton sans fil (ce qui a très très fortement ralenti le système de mon Raspberry Pi) :

    • On voit que c’est bien node qui utilise la majorité du disque (et l’agent de monitoring netdata qui en rajoute, mais ça c’est perso, hors gladys)

Solution

Je pense que mes tests précédents n’ont rien changé. Ce qui s’est passé, c’est que le simple clic n’est plus égal à 1, mais égal à 0 désormais.
Ma scène utilisais le 1, ce qui mécaniquement l’a rendue obsolete.

En changeant la valeur de ma scène en = 0 alors c’est fonctionnel à nouveau. Il faut faire attention ici, car ça risque de casser pas mal de scènes, sur les différents types de clic (simple, double, long)

MOD Edit :
Je me suis permis d’éditer ton post pour supprimer les tokens d’authorisation … on ne sait jamais !!

Merci pour ton retour @lmilcent !

Ok je vois, c’est pas terrible ça.

Par contre, je n’ai pas compris si du coup cette PR résolvais tes problèmes ? Est-ce que tu peux discuter avec @AlexTrovato pour voir du coup comment on pourrait faire marcher cette PR ?

Bon par contre la conclusion c’est que j’ai été trop vite, j’ai mergé cette PR trop tôt sur master, et du coup on a master qui est plus déployable. Je ferais un revert de la PR au besoin si je veux déployer les autres correctifs avant, ça fait 2 semaines que je fais plus de release de Gladys du coup :sweat_smile:

Je te répond aux autres remarques, mais ils n’ont pas de lien avec cette PR :

C’est une limitation connue de l’implémentation actuelle de la suppression de device, qui cascade delete tous les états ce qui sature la bande passante du disque jusqu’à ce que tout soit supprimé :wink:

Cf :

Tu as des déconnecté Gladys Plus dans les paramètres ?

1 Like

Ok en effet, je vois que je suis allé un peu vite en besogne sur le “button click”.
Je corrige le mapping pour faire correspondre au mapping click de Gladys.

En rapport avec les logs warning :

  • linkquality concerne la qualité du signal, pas encore mappé
  • temperature devrait générer une feature sur ton device concerné, bien que je sois assez étonné de voir ce genre de feature sur un interrupteur

@lmilcent sais-tu quelle image docker (version Gladys) tu utilises ?
Je suis en train de générer une nouvelle image (à jour sur le tronc Gladys) contenant le correctif de mapping : atrovato/gladys:zigbee2mqtt (disponible d’ici 2h).
Tu devras donc remettre ta scène comme elle l’était avant, afin de tester que ce n’est pas plus cassé.

@pierre-gilles le correctif est assez simple, car le code est isolé.

Si vous constatez d’autres choses, je suis sur le qui-vive !
Je pense que ces changements sont nécessaires pour z2m, il ne faut pas lâcher !!!

Merci :slight_smile:

2 Likes

Si vous constatez d’autres choses, je suis sur le qui-vive !
Je pense que ces changements sont nécessaires pour z2m, il ne faut pas lâcher !!!

Merci :slight_smile:
Bonjour @AlexTrovato
je profite de ton offre, je ne sais pas si ma demande entre dans la cadre de ta proposition, mais si tu peux regarder problème du Xiaomi LLKZMK11LM (double relais)

je t’en remercie par avance

@Psoy tu es sur quelle version actuellement ? Car je vois 2 choses pour ton problème :

  1. à l’origine (avant mes changements) seul le 1er switch (state) était géré en actionneur dans Gladys
  2. l’affichage et la gestion du multi-switch pour un device sur le dashboard qui concerne un autre point plus global que je ne traiterai pas ici

tu es sur quelle version actuellement ? Car je vois 2 choses pour ton problème :
version de Gladys 4.8.3 (installation image Pierre-Gilles).
Pour moi le problème est toujours le même pas d’évolution.

Effectivement le premier switch fonctionne normalement

Tant pis je patienterai, je te remercie de m’avoir répondu
bonne journée

Ok ça marche ! :slight_smile: Justement j’avais l’impression avec le message de @lmilcent que c’était plus grave, si c’est juste des détails de fin de PR tant mieux :wink:

Yes je pense aussi ! Merci encore pour ta disponibilité et pour cette PR !! :slight_smile:

Pour la partie Gladys Plus @pierre-gilles, j’ai bien tout déconnecté à ma connaissance !

Et pour la version du conteneur, c’était la :dev dernière en date lors de mon test. Je vais toujours un pull avant de créer le conteneur.

Sinon le reste à l’air fonctionnel, je n’ai rien remarqué d’autre.

@lmilcent est-ce que la PR de @AlexTrovato corrige bien le soucis ?

Les autres sur Zigbee2mqtt, est-ce que cette image fonctionne bien chez vous ?

ça fait maintenant une semaine que ça tourne et je n’ai rien noté d’autre. Mes scènes fonctionnent toujours (après les modifications évoquées).
Et plus de message d’erreur, sauf lié à Gladys Plus.

Justement, normalement la PR de @AlexTrovato est censée éviter qu’il y ait à faire de modifications, est-ce que c’est bien le cas ?

Je me rend compte que mon image actuelle est le tag dev de Gladys, pas celle d’@AlexTrovato. Je la lance et vous tiens au courant !

1 Like

Je viens de me rendre compte que j’avais du restaurer une sauvegarde pendant les tests, car Gladys Plus n’était plus "déconnecté. C’est donc pour ça que j’avais des erreurs dans les logs.

Grâce à l’offre en cours, je viens de prendre Gladys Plus, ce qui me permettra de tester la restauration de toutes mes scènes, service Zigbee et dashboard. Je vous ferais un retour dans un post dédié.

2 Likes

2 Likes

Hello à tous :slight_smile:

Je relance ce post pour essayer de débloquer la situation, @lmilcent étant en vacances, est-ce que quelqu’un a du Zigbee chez lui et pourrait tester la PR de @AlexTrovato, notamment le comportement avec les boutons sans fil ?

De mon côté j’aimerai bien mais faudrai pouvoir configurer son propre serveur mqtt car quand on a tout en prod on peu pas test sur une autre instance.

Faut avouer que c’est pas simple de tester.

J’avoue que c’est comme @VonOx, je ne sais pas par où prendre le bout pour tester sans risquer de tout casser de la prod le temps du test…

  • Si on coupe la prod le temps du test ? La config sera reprise ?
  • Vaut-il mieux faire une copie du SSD de la prod actuelle et tester ?
  • Ca n’impact que certains types de bouton ? Pour ma part je n’ai que des bouton simple / detecteurs de presence / door tags, ca vaut le coup que je teste ?