Ajout d'une commande sur un équipement

Bonjour,

J’ai acheté une pince OWON PC321 qui communique avec le plugin-z2m et je voudrais pouvoir remettre à zéro les valeurs depuis une commande dans mon équipement (sans passer par le bouton physique).

Plusieurs sujets traitent de ce problème mais je n’ai pas réussi à trouver ma réponse. Sur zigbee2mqtt (OWON PC321 control via MQTT | Zigbee2MQTT), la commande n’existe pas.

Mais après plusieurs tests, j’ai réussi à remettre à zéro les valeurs depuis la console de dev de zigbee2mqtt.

Après, je ne sais pas comment faire.

Mes compétences étant limitées, je cherche une âme charitable qui pourrait m’aider/m’expliquer comment intégrer cette remise à zéro dans mon équipement (si c’est possible).

Merci d’avance.

Bonjour,
Il faudrait trouvé la meme chose en passant par mqtt, je sais pas si c’est possible mais si tu trouves la doc je pourrais te dire quoi mettre ou.

Merci pour ta réponse.

Si tu parles de la documentation de l’équipement, j’ai ça :
PC321 zha clusters and attributes v1.2.4.pdf (584,0 Ko)

Non de zigbee2mqtt pour convertir une commande brute (comme tu fais) en commande Mqtt (comme jeedom fait)

Bonjour,

N’ayant pas trouvé de documentation comme demandé par @Loic, j’ai continuer mes recherches et mes tests.

J’ai réussi à rajouter ma commande dans mon équipement en modifiant un fichier de zigbee2mqtt.

Si cela peut aider quelqu’un, ci-dessous les modifications réalisées dans le fichier html/plugins/z2m/resources/zigbee2mqtt/node_modules/zigbee-herdsman-converters/devices/owon.js

Pour que les modifications soient prises en compte, j’ai supprimé le module dans Jeedom et arrêté le démon.

En début de fichier (juste après const fzLocal), j’ai rajouté ce code :

const tzLocal = {
    PC321_clearMetering: {
        key: ['clear_metering'],
        convertSet: async (entity, key, value, meta) => {
            const endpoint = meta.device.getEndpoint(1);
            const group = 0xFFE0;
            const command = 0x00;
            const payload = {};

            await endpoint.command(group, command, payload, {disableDefaultResponse: true});
            meta.logger.info(`Sent clear command to ${entity.ieeeAddr}`);
        },
    },
};

Au niveau de l’équipement, j’ai modifié/ajouté le code (ci-dessous) :

toZigbee: [tzLocal.PC321_clearMetering],

e.enum('clear_metering', ea.SET, ['Clear']).withDescription('Clear measurement data'),

Le code complet :

  {
        zigbeeModel: ['PC321'],
        model: 'PC321',
        vendor: 'OWON',
        description: '3-Phase clamp power meter',
        fromZigbee: [fromZigbee_1.default.metering, fzLocal.PC321_metering],
        toZigbee: [tzLocal.PC321_clearMetering],
      	exposes: [],
        configure: async (device, coordinatorEndpoint) => {
            const endpoint = device.getEndpoint(1);
            await reporting.bind(endpoint, coordinatorEndpoint, ['seMetering']);
            await reporting.readMeteringMultiplierDivisor(endpoint);
            if (device.powerSource === 'Unknown') {
                device.powerSource = 'Mains (single phase)';
                device.save();
            }
        },
        meta: { publishDuplicateTransaction: true },
        exposes: [
            e.current(),
            e.power(),
            e.power_reactive(),
            e.energy(),
            e.numeric('reactive_energy', ea.STATE).withUnit('kVArh').withDescription('Reactive energy for all phase'),
            e.numeric('voltage_l1', ea.STATE).withUnit('V').withDescription('Phase 1 voltage'),
            e.numeric('voltage_l2', ea.STATE).withUnit('V').withDescription('Phase 2 voltage'),
            e.numeric('voltage_l3', ea.STATE).withUnit('V').withDescription('Phase 3 voltage'),
            e.numeric('current_l1', ea.STATE).withUnit('A').withDescription('Phase 1 current'),
            e.numeric('current_l2', ea.STATE).withUnit('A').withDescription('Phase 2 current'),
            e.numeric('current_l3', ea.STATE).withUnit('A').withDescription('Phase 3 current'),
            e.numeric('energy_l1', ea.STATE).withUnit('kWh').withDescription('Phase 1 energy'),
            e.numeric('energy_l2', ea.STATE).withUnit('kWh').withDescription('Phase 2 energy'),
            e.numeric('energy_l3', ea.STATE).withUnit('kWh').withDescription('Phase 3 energy'),
            e.numeric('reactive_energy_l1', ea.STATE).withUnit('kVArh').withDescription('Phase 1 reactive energy'),
            e.numeric('reactive_energy_l2', ea.STATE).withUnit('kVArh').withDescription('Phase 2 reactive energy'),
            e.numeric('reactive_energy_l3', ea.STATE).withUnit('kVArh').withDescription('Phase 3 reactive energy'),
            e.numeric('power_l1', ea.STATE).withUnit('W').withDescription('Phase 1 power'),
            e.numeric('power_l2', ea.STATE).withUnit('W').withDescription('Phase 2 power'),
            e.numeric('power_l3', ea.STATE).withUnit('W').withDescription('Phase 3 power'),
            e.numeric('reactive_power_l1', ea.STATE).withUnit('VAr').withDescription('Phase 1 reactive power'),
            e.numeric('reactive_power_l2', ea.STATE).withUnit('VAr').withDescription('Phase 2 reactive power'),
            e.numeric('reactive_power_l3', ea.STATE).withUnit('VAr').withDescription('Phase 3 reactive power'),
            e.numeric('power_factor_l1', ea.STATE).withDescription('Phase 1 power factor'),
            e.numeric('power_factor_l2', ea.STATE).withDescription('Phase 2 power factor'),
            e.numeric('power_factor_l3', ea.STATE).withDescription('Phase 3 power factor'),
          	e.enum('clear_metering', ea.SET, ['Clear']).withDescription('Clear measurement data'),
        ],
    },

Penser à redémarrer le démon et synchroniser.

Un petit visuel, côté zigbbe2mqtt :
image

Côté Jeedom :

N’étant pas un spécialiste, c’est pour l’instant la seule solution que j’ai trouvée. Le problème (l’inconvénient), lors de chaque mise à jour les modifications sont effacées.

La prochaine étape est de trouver comment garder ces modifications en permanence, peut-être en regardant du côté des convertisseurs externe …

Bonjour,
Je confirme la faut que tu ajoutes un convertisseur externe (j’ai jamais fait malheureusement donc je ne pourrais pas t’aider).

J’ai enfin réussi à mettre en place le convertisseur externe, ci-dessous le fichier (il faut remplacer le .txt par .js) :

PC321.txt (9,0 Ko)

Le fichier doit être placer directement ici :
html/plugins/z2m/core/config/converters/custom/

Pour que la modification soit prise en compte, il faut redémarrer le démon.

En espérant que cela puisse aider.

1 « J'aime »

Bonjour,

Merci super boulot.

Peut être aller poster sur le git de z2mqtt : Issues · Koenkk/zigbee2mqtt · GitHub
afin qu’il intége ton amélioration directement dans une release de z2m ?

1 « J'aime »

Merci.

J’y avais pensé mais ne sachant pas comment ça marche, je l’avais mis de côté.

Votre message m’a convaincu/motivé de l’intérêt, je vais me renseigner et le faire.

Il faut créer un compte GITHUB ensuite sur le lien que je vous ai donné cliquer sur « new issue » et choisir le tag « Feature request » puis ensuite indiquer ce que vous avez fait avec la console de DEV. Quelqu’un va l’implémenter dans Z2m ensuite.

1 « J'aime »

Pour information, la commande a été prise en compte nativement en version 1.40.2 de la librairie zigbee2mqtt.

Release 1.40.2 · Koenkk/zigbee2mqtt · GitHub

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.