Unterschiedlicher Wert eines Buttons zwischen Gladys und Zigbee2MQTT

Hallo,

ich habe eine Frage zur Funktionsweise eines Xiaomi-Zigbee-Knopfs.
Zigbee2MQTT zeigt die folgenden möglichen Zustände an: single, double, triple, quadruple, hold, release, many

Bei meinen Tests werden diese Zustände auf der Zigbee2MQTT-Seite korrekt angezeigt.

In Gladys kann ich jedoch nur die Werte 1 (Klick), 2 (Doppelklick), 5 (Lange Taste) erhalten.
Gibt es dafür irgendwo eine Konfiguration?

Danke

PS: Entschuldigung, dass ich den Forum mit all meinen Fragen (als Anfänger) gespammt habe, aber ich habe wieder Motivation gefunden :slight_smile:

Nicht konfigurierbar, aber das Button-Modell zu haben, würde uns helfen, die fehlenden Aktionen hinzuzufügen.

Das Modell: Xiaomi WXKG01LM control via MQTT | Zigbee2MQTT

Wie werden sie konfiguriert? Über Dateien?

guten abend @Hizo
Ich habe fünf Knöpfe dieses Modells und verwende sie für 1 (Klick) « single », 2 (Doppelklick) « double » und 5 (Langdruck) « hold » und wenn ich loslasse, gibt es « release ». Ich hatte nie bemerkt, dass, wenn du dreimal klickst, es « triple » gibt, für 4 « quadruple » und mehr als 4 Mal gibt es « many ». Sehr interessant für meine Lampenbefehle.
Aber im Moment kennt Gladys nur die folgenden drei Zustände,
single 1
double 2
hold 5
Es bleibt nur noch eine Funktionsanfrage zu stellen :wink:

Ja, das wäre mir auch sehr praktisch :slight_smile:

Aber ich würde auch gerne wissen, wie die Hardware-Konfiguration abläuft…

auf welcher Ebene? Eine Szene mit dem Button erstellen?

Für Info gibt es dieses Issue auf Github Button click user friendly by atrovato · Pull Request #1642 · GladysAssistant/Gladys · GitHub, das genau die 1, 2, 5 in Text umwandeln möchte, damit es verständlicher wird! :wink:

@Psoy: Ich habe nicht verstanden, worauf sich deine Fragen beziehen.

du willst wissen, wie man sie in einer Szene verwaltet oder willst du wissen, wie das in den Eingeweiden von Gladys funktioniert?
Für das Erste kann ich dir helfen, für das Zweite bin ich nicht mehr da :smile:

Ich sprach vom zweiten Fall :slight_smile:

Hier findest du einen Überblick, wie das codiert ist, denke ich :zwinkern:

Ich habe mich nochmal ein bisschen damit beschäftigt,

man müsste also die Dateien ändern:
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 die Datei 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, []);
  });
});

Müsste man auch enumType.getFeatureIndexes([‹ single ›, ‹ double ›]); anpassen?

Und ich habe auch gesehen, dass, wenn man den Knopf gedrückt hält, es „long“ anzeigt und wenn man ihn dann loslässt, wird release angezeigt.
Noch ein weiterer Zustand :stuck_out_tongue:

Wenn ein Prof das, was ich gemacht habe, bestätigen könnte, wäre das super, entweder um die Arbeit vorzuschlagen oder um zu lernen, was man noch tun müsste.
Danke :slight_smile:

Hallo @Hizo :slight_smile:

Kannst du mir erklären, was du vorhast?

Denn ich habe die Diskussion zurückverfolgt, und wenn du vom benutzerfreundlichen Button-Klick sprichst, dann ist das bereits ein abgeschlossenes Projekt, das bereits implementiert wurde (Button click user friendly by atrovato · Pull Request #1642 · GladysAssistant/Gladys · GitHub)


Diese Entwicklung wurde in Gladys Assistant 4.18 veröffentlicht:

Nein nein, ich möchte mehrere mögliche Zustände für die Schaltflächen hinzufügen.

Mein Xiaomi WXKG01LM-Schalter (Xiaomi WXKG01LM control via MQTT | Zigbee2MQTT) akzeptiert auch die Aktionen:

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

ich wollte daher verstehen, wie ich eine Codeverbesserung vorschlagen kann.

Okay, ich bin kein Zigbee-Experte, aber das, was du vorschlägst, scheint gut zu sein :slight_smile:

Ein kleiner Beitrag von @AlexTrovato, der erklärt, wie man eine Zigbee-Funktionalität hinzufügt: