Message d'erreur zigbee2mqtt

Pour la valeur par défaut, j’y ai pensé, ce sera une prochaine étape. Validons déjà la gestion encore plus complète des devices.

Tu as joué avec les alarmes depuis Gladys ? Les bouchons d’oreilles n’étaient pas fournis ?? :stuck_out_tongue:

Yes j’ai joué avec l’alarme, juste dans une scène avec allumage à une heure précise, ça a bien fonctionné, et le bouton marche arrêt fonctionne bien aussi !

Malheureusement non et je m’attendais pas a autant de bruit, surtout venant des deux détecteurs CO et fumées :smiley:

En tout cas super taff, ça annonce de super possibilité pour l’avenir :wink:

Edit : il serait intéressant de pouvoir gérer le volume de la sirène de l’alarme dans Gladys un peu sur le même principe que la luminosité d’une ampoule

Je dois avoir un problème avec mon alarme TS0216, car je n’arrive toujours pas à la faire reconnaître malgré de nombreuses tentatives.
Pourtant j’ai investi dans une Gateway Tuya (Lidl) pour la vérifier : elle fonctionne bien à partir de l’interface dédiée. Je ne comprends pas ce qu’il se passe ?

Désolé @AlexTrovato j’ai pas pu répondre plus tôt. A ma connaissance j’avais bien la dernière version de l’image docker oui.

Hum je ne sais pas, comment vérifier ça ? Pour info c’est moi qui ai ouvert l’issue GitHub que tu as mentionné :wink:

Haha maintenant que tu le dis, en effet les pseudos correspondent :wink:
La dernière image de test est en version 4.8.0 (Gladys → Admin → Système).
D’après le ticket sur GitHub, ça semble fonctionner, sauf si tu avais simplement copié les fichiers, ça ne valide pas l’image de test.

Pour information, j’ai mergé la PR de @AlexTrovato qui apporte les mappings custom à l’intégration Zigbee2mqtt !

Je viens de lancer un build DEV sur le tag Docker qui sera prêt d’ici une heure :

gladysassistant/gladys:dev

( Le build : Build Gladys dev images · GladysAssistant/Gladys@969d215 · GitHub )

Je suis preneur de retour sur l’intégration Zigbee2mqtt, pour vérifier que ça apporte bien le comportement pour les appareils qui n’étaient pas géré avant, et que ça ne casse pas le reste de Zigbee2mqtt bien-sûr :smiley:

Merci à ceux qui testeront !

@pierre-gilles On peut tester ce build sur quel OS RPI ?

Sur tous ( c’est pas dépendant de l’os)

merci @VonOx Pour moi ça marche correctement avec mes appareils : lampes, prises, sirène, température, humidité, testé avec un dongle CC2652 BLE Simplelink 2.2G Zigbee2MQTT
Merci et bravo pour ce bon travail !
Pour info mon dongle Sonoff reconnaît bien tous mes devices, il marche correctement en réception mais pas en émission, est-ce que ce problème a déjà été reporté ?

1 « J'aime »

En émission ?

C’est à dire en mode commande pour des interrupteurs, des lampes ou une sirène

J’ai l’impression qu’on a déjà eu cette discussion, que le dongle sonoff avait des problèmes, mais que ça fonctionne très bien avec ton autre dongle.

C’est vrai, je confirme ce que j’ai dit sur d’autres posts, mais je voudrais savoir si je suis le seul dans ce cas, je n’ai pas vu d’autres messages dans ce sens.

Merci pour ton retour @jparbel :slight_smile: J’attend le retour d’autres utilisateurs Zigbee2mqtt et je déployerais une mise à jour avec ce développement.

@lmilcent si tu as un peu de temps pour tester ce build notamment vu que tu es le créateur de l’issue github!

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 « J'aime »

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 « J'aime »