Valeur d'un bouton different entre Gladys et Zigbee2MQTT

Bonjour,

j’ai une question sur le fonctionnement d’un bouton zigbee Xiaomi.
Zigbee2MQTT indique les etats possibles suivants : single, double, triple, quadruple, hold, release, many

Lors de mes tests, ces états sont bien affichés sur la page de Zigbee2MQTT.

Pourtant dans Gladys, je ne peux avoir que les valeurs : 1 (clic), 2 (double clic), 5 (appuie long)
Cela est il configurable quelque part ?

Merci

PS : Désolé d’avoir spammé le forum avec toutes mes questions (de débutant) mais j’ai retrouvé une motivation :slight_smile:

Non pas configurable, par contre avoir le modèle de bouton ça nous aiderai à rajouter les actions manquantes.

Le model : Xiaomi WXKG01LM control via MQTT | Zigbee2MQTT

Comment sont ils configurés ? via des fichiers ?

bonsoir @Hizo
J’ai cinq boutons de ce modele et je les utilise 1 (clic)« single », 2 (double clic) « double » et 5 (un appui long)" hold" et quand je le relache il donne « release ». Je n’avais jamais remarqué , que quand tu cliquais 3 fois il donnait « triple » , pour 4 " quadruple" et plus de 4 fois il donnait « many » . Tres interressants pour mes commande de lampes.
Mais pour l’instant Gladys ne connait que les trois etats suivants,
single 1
double 2
hold 5
Il ne reste plus qu’a faire une demande de fonctionalité :wink:

Oui, ça me serait très pratique aussi :slight_smile:

Mais il est vrai que je serais intéressé de savoir comment ça se passe la configuration du matériel…

a quel niveau ?créer une scene avec le bouton?

Pour info il existe cette issue sur Github Button click user friendly by atrovato · Pull Request #1642 · GladysAssistant/Gladys · GitHub qui veut justement transformer les 1, 2, 5 en texte afin que ce soit plus compréhensible ! :wink:

@Psoy : Je n’ai pas compris à quoi font référence tes questions.

tu veux savoir comment les gerer dans une scene ou tu veux savoir comment ça fonctionne dans les entrailles de Gladys?
Pour le premier je peux t’aider pour le second je ne suis plus là :smile:

Je parlais du second cas :slight_smile:

Ici tu vas trouver un aperçu de comment c’est codé , je pense :wink:

1 Like

Du coup, je me suis un peu repenché sur le truc,

il faudrait donc modifier les fichiers :
server/services/zigbee2mqtt/exposes/enumType.js

 addMapping('action', BUTTON_STATUS.CLICK, 'single');
 addMapping('action', BUTTON_STATUS.DOUBLE_CLICK, 'double');
 addMapping('action', BUTTON_STATUS.TRIPLE_CLICK, 'triple');
 addMapping('action', BUTTON_STATUS.QUADRUPLE_CLICK, 'quadruple');
 addMapping('action', BUTTON_STATUS.MANY_CLICK, 'many');
 addMapping('action', BUTTON_STATUS.HOLD_CLICK, 'hold');
 addMapping('action', BUTTON_STATUS.LONG_CLICK, 'long');

et le fichier server/test/services/zigbee2mqtt/exposes/actionEnumType.test.js

const { assert } = require('chai');

const enumType = require('../../../../services/zigbee2mqtt/exposes/enumType');
const { BUTTON_STATUS } = require('../../../../utils/constants');

describe('zigbee2mqtt action enumType', () => {
  const expose = {
    name: 'action',
    values: ['single', 'long', 'short', 'double', 'triple', 'quadruple', 'many', 'hold'],
  };

  [
    { enumValue: 'single', intValue: BUTTON_STATUS.CLICK },
    { enumValue: 'double', intValue: BUTTON_STATUS.DOUBLE_CLICK },
    { enumValue: 'triple', intValue: BUTTON_STATUS.TRIPLE_CLICK },
    { enumValue: 'quadruple', intValue: BUTTON_STATUS.QUADRUPLE_CLICK },
    { enumValue: 'many', intValue: BUTTON_STATUS.MANY_CLICK },
    { enumValue: 'hold', intValue: BUTTON_STATUS.HOLD_CLICK },
    { enumValue: 'long', intValue: BUTTON_STATUS.LONG_CLICK },
  ].forEach((mapping) => {
    const { enumValue, intValue } = mapping;

    it(`should write ${enumValue} value as ${intValue} value`, () => {
      const result = enumType.writeValue(expose, intValue);
      assert.equal(result, enumValue);
    });

    it(`should read ${intValue} value as ${enumValue}`, () => {
      const result = enumType.readValue(expose, enumValue);
      assert.equal(result, intValue);
    });
  });

  it('should write undefined value on missing enum', () => {
    const missingEnumExpose = {
      values: ['single', 'short', 'double', 'triple', 'quadruple', 'many'],
    };
    const result = enumType.writeValue(missingEnumExpose, BUTTON_STATUS.LONG_CLICK);
    assert.equal(result, undefined);
  });

  it('should write undefined value', () => {
    const result = enumType.writeValue(expose, 7);
    assert.equal(result, undefined);
  });

  it('should read enum value', () => {
    const result = enumType.readValue(expose, 'unknown');
    assert.equal(result, undefined);
  });

  it('should have multiple indexes', () => {
    const result = enumType.getFeatureIndexes(['1_single', '1_double', '2_single']);
    assert.deepEqual(result, [1, 2]);
  });

  it('should have no indexes', () => {
    const result = enumType.getFeatureIndexes(['single', 'double']);
    assert.deepEqual(result, []);
  });
});

Faudrait il toucher à enumType.getFeatureIndexes([‹ single ›, ‹ double ›]); également ?

Et j’ai également vu que lorsqu’on laisse appuyer sur le bouton, il apparaît long et quand on le relâche après ça, ça indique release.
Encore un autre état :stuck_out_tongue:

Si un pro peut confirmer ce que j’ai fait ça serait sympa soit pour proposer le travail soit pour apprendre ce qu’il faudrait faire de plus.
Merci :slight_smile:

Salut @Hizo :slight_smile:

Est-ce que tu peux m’expliquer ce que tu veux faire ?

Parce que j’ai remonté la discussion, et si tu parles du clic bouton user friendly, c’est un chantier qui a déjà été fait et qui a été déployé depuis ( Button click user friendly by atrovato · Pull Request #1642 · GladysAssistant/Gladys · GitHub )


Ce développement a été déployé dans Gladys Assistant 4.18 :

Non non, je veux ajouter plusieurs états possibles aux boutons.

Mon bouton Xiaomi WXKG01LM](Xiaomi WXKG01LM control via MQTT | Zigbee2MQTT) accepte aussi les actions :

'triple', 'quadruple', 'many',

je voulais donc comprendre comment proposer une amélioration du code.

Ok, je ne suis pas expert Zigbee mais effectivement ce que tu propose semble bon :slight_smile:

Un petit post de @AlexTrovato qui explique comment ajouter une fonctionnalité Zigbee: