# Valeur d'un bouton different entre Gladys et Zigbee2MQTT

**URL:** <https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978>\
**Category:** Configuration\
**Created:** [Février 15, 2023, 5:12 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978 "2023-02-15T17:12:23Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![Hizo](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/h/51bf81/32.png) [@Hizo](https://community.gladysassistant.com/u/Hizo)\
**Post date:** [Février 15, 2023, 5:12 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/1 "2023-02-15T17:12:23Z")

</div>

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 🙂

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [Février 15, 2023, 5:15 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/2 "2023-02-15T17:15:05Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Hizo](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/h/51bf81/32.png) [@Hizo](https://community.gladysassistant.com/u/Hizo)\
**Post date:** [Février 15, 2023, 5:48 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/3 "2023-02-15T17:48:04Z")

</div>

Le model : [Xiaomi WXKG01LM control via MQTT | Zigbee2MQTT](https://www.zigbee2mqtt.io/devices/WXKG01LM.html#xiaomi-wxkg01lm)

Comment sont ils configurés ? via des fichiers ?

---

<div class="post-metadata">

**Author:** ![Psoy](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/psoy/32/9005_2.png) [@Psoy](https://community.gladysassistant.com/u/Psoy)\
**Post date:** [Février 15, 2023, 9:39 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/4 "2023-02-15T21:39:49Z")

</div>

> [@Hizo](#):
>
> Pourtant dans Gladys, je ne peux avoir que les valeurs : 1 (clic), 2 (double clic), 5 (appuie long)

bonsoir @Hizo  
J’ai cinq boutons de ce modele et je les utilise 1 (clic)«&nbsp;single&nbsp;», 2 (double clic) «&nbsp;double&nbsp;» et 5 (un appui long)" hold" et quand je le relache il donne «&nbsp;release&nbsp;». Je n’avais jamais remarqué , que quand tu cliquais 3 fois il donnait «&nbsp;triple&nbsp;» , pour 4 " quadruple" et plus de 4 fois il donnait «&nbsp;many&nbsp;» . 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é 😉

---

<div class="post-metadata">

**Author:** ![Hizo](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/h/51bf81/32.png) [@Hizo](https://community.gladysassistant.com/u/Hizo)\
**Post date:** [Février 15, 2023, 9:52 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/5 "2023-02-15T21:52:27Z")

</div>

Oui, ça me serait très pratique aussi 🙂

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

---

<div class="post-metadata">

**Author:** ![Psoy](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/psoy/32/9005_2.png) [@Psoy](https://community.gladysassistant.com/u/Psoy)\
**Post date:** [Février 15, 2023, 9:55 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/6 "2023-02-15T21:55:44Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![guim31](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/guim31/32/4840_2.png) [@guim31](https://community.gladysassistant.com/u/guim31)\
**Post date:** [Février 16, 2023, 7:49 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/7 "2023-02-16T07:49:34Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Hizo](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/h/51bf81/32.png) [@Hizo](https://community.gladysassistant.com/u/Hizo)\
**Post date:** [Février 16, 2023, 7:57 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/8 "2023-02-16T07:57:17Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Psoy](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/psoy/32/9005_2.png) [@Psoy](https://community.gladysassistant.com/u/Psoy)\
**Post date:** [Février 16, 2023, 8:01 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/9 "2023-02-16T08:01:22Z")

</div>

> [@Hizo](#):
>
> Mais il est vrai que je serais intéressé de savoir comment ça se passe la configuration du matérie

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à 😄

---

<div class="post-metadata">

**Author:** ![Hizo](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/h/51bf81/32.png) [@Hizo](https://community.gladysassistant.com/u/Hizo)\
**Post date:** [Février 16, 2023, 9:49 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/10 "2023-02-16T09:49:08Z")

</div>

Je parlais du second cas 🙂

---

<div class="post-metadata">

**Author:** ![Psoy](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/psoy/32/9005_2.png) [@Psoy](https://community.gladysassistant.com/u/Psoy)\
**Post date:** [Février 16, 2023, 10:22 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/11 "2023-02-16T10:22:37Z")

</div>

> [@Bouton Sonoff SNZB-01](https://community.gladysassistant.com/t/bouton-sonoff-snzb-01/6812/8):
>
> Je viens de m’inscrire sur Github (username : JPLalv), mais je n’ai pas su comment formuler une PR pour Gladys. Mais peu importe, dans [atrovato](https://github.com/atrovato) [Fix & clean NaN device state , j’ai trouvé ceci : // Case for Button devices case 'click': { switch (value) { case 'single': result = BUTTON\_STATUS.CLICK; break; case 'double': result = BUTTON\_STATUS.DOUBLE\_CLICK; break; case 'hold': result = BUTTON\_STATUS.LONG\_CLICK; break; default: result =…

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

---

<div class="post-metadata">

**Author:** ![Hizo](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/h/51bf81/32.png) [@Hizo](https://community.gladysassistant.com/u/Hizo)\
**Post date:** [Avril 11, 2023, 7:32 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/12 "2023-04-11T07:32:46Z")

</div>

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

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

```auto
 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

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

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

describe('zigbee2mqtt action enumType', () =\u003e {
  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) =\u003e {
    const { enumValue, intValue } = mapping;

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

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

  it('should write undefined value on missing enum', () =\u003e {
    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', () =\u003e {
    const result = enumType.writeValue(expose, 7);
    assert.equal(result, undefined);
  });

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

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

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

```

Faudrait il toucher à **enumType.getFeatureIndexes([‹&nbsp;single&nbsp;›, ‹&nbsp;double&nbsp;›]);** é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 😛

---

<div class="post-metadata">

**Author:** ![Hizo](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/h/51bf81/32.png) [@Hizo](https://community.gladysassistant.com/u/Hizo)\
**Post date:** [Juin 7, 2023, 2:20 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/13 "2023-06-07T14:20:14Z")

</div>

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 🙂

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Juin 8, 2023, 1:58 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/14 "2023-06-08T01:58:43Z")

</div>

Salut @Hizo 🙂

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](https://github.com/GladysAssistant/Gladys/pull/1642) )

 ![Screenshot 2023-03-24 at 13.55.22](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/2/2d43a1c2739a2b0aa4df842df31f33c6cf6ad38d.png)  
 ![Screenshot 2023-03-24 at 13.56.30](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/4/467e457a6d17e6d1b82cd456800e73e38264ea0e.png)

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

> [@Gladys Assistant 4.18 : Sauvegarde Zigbee2mqtt et gestion native des boutons (clic simple, double, ...)](https://community.gladysassistant.com/t/gladys-assistant-4-18-sauvegarde-zigbee2mqtt-et-gestion-native-des-boutons-clic-simple-double/8039?u=pierre-gilles):
>
> Salut à tous ! Je suis rentré de congés cette semaine, et j’ai dépilé tout ce qui était en attente, et il y a des petites pépites gem Tout n’est pas dans cette version ( il y avait beaucoup de PRs ! ), mais ces 2 fonctionnalités étaient à mon sens prête à partir. Le reste arrivera dans une prochaine version slight_smile Gestion native des boutons avec pression simple/double/relâche Désormais, Gladys gère nativement les boutons pressions (type Xiaomi), qui permettent de lancer des actions…

---

<div class="post-metadata">

**Author:** ![Hizo](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/h/51bf81/32.png) [@Hizo](https://community.gladysassistant.com/u/Hizo)\
**Post date:** [Juin 8, 2023, 7:43 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/15 "2023-06-08T07:43:40Z")

</div>

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

Mon bouton Xiaomi WXKG01LM]([Xiaomi WXKG01LM control via MQTT | Zigbee2MQTT](https://www.zigbee2mqtt.io/devices/WXKG01LM.html#xiaomi-wxkg01lm)) accepte aussi les actions :

```auto
'triple', 'quadruple', 'many',

```

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

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [Juin 9, 2023, 2:54 UTC](https://community.gladysassistant.com/t/valeur-dun-bouton-different-entre-gladys-et-zigbee2mqtt/7978/16 "2023-06-09T02:54:17Z")

</div>

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

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

> [@Zigbee: Capteur de qualité de l'air "Smart Air House keeper"](https://community.gladysassistant.com/t/zigbee-capteur-de-qualite-de-lair-smart-air-house-keeper/8131/2):
>
> Ce n’est pas très compliqué, mais il faut le savoir. Déjà, il faut être certain que la catégories/le type existent dans Gladys. Il est conseillé de partir de la page de ton device [TuYa TS0601\_smart\_air\_house\_keeper control via MQTT | Zigbee2MQTT](https://www.zigbee2mqtt.io/devices/TS0601_smart_air_house_keeper.html), puis de regarder le détail de l’«&nbsp;expose&nbsp;» pour ta feature (nous ne gérons pas les options) : Ici, tu peux voir que ta feature est de type «&nbsp;numeric&nbsp;», que le nom de son attribut est formaldehyd, et tu as même son unité µg/m³. C…
