Migration sur jeezigbee : capteur casaia non pris en charge

Bonjour.
Je termine ma migration de l’ancien plugin zigbee vers le nouveau jeezigbee.
Tout s’est trés bien passé et le nouveau plugin fonctionne très bien.
Je rencontre un seul soucis pour le detecteur casaia cms323 (Multi-Sensor Zigbee - Mouvements/Vibrations/Temp/Hum - Casaia.fr) qui n est pas pris en charge par zigbee2mqtt (les infos presence et vibration ne remontent pas). Ce device était parfaitement fonctionnel avec le plugin zigbee. J ai essayé de faire l’ajout dans zigbee2mqtt en suivant ces indications (Support new devices | Zigbee2MQTT) mais n’etant pas developpeur je suis complètement bloqué à l’étape 2.2

Ci dessous les logs que j ai recup

Presence
2024-01-03 19:04:28No converter available for ‹ CMS323 › with cluster ‹ ssIasZone › and type ‹ commandStatusChangeNotification › and data ‹ {« extendedstatus »:0,« zonestatus »:49} ›

Vibration
2024-01-03 19:04:28No converter available for ‹ CMS323 › with cluster ‹ ssIasZone › and type ‹ commandStatusChangeNotification › and data ‹ {« extendedstatus »:0,« zonestatus »:50} ›

Fin de détection ?
2024-01-03 19:04:38No converter available for ‹ CMS323 › with cluster ‹ ssIasZone › and type ‹ commandStatusChangeNotification › and data ‹ {« extendedstatus »:0,« zonestatus »:48} ›

Le device étant compatible avec l’ancien plugin je ne suis peut être pas le seul à rencontrer ce soucis donc je suis preneur d’une aide ou d’une solution si qqn ayant les compétences que je n’ai pas l’a solutionné.

Merci d’avance !

Salut,
Pour le tag du sujet pour Jeezigbee c’est plugin-z2m
Pour votre souci, ouvrez simplement une issue ICI

Bonjour,

Merci pour le retour car au final en essayant de trouver un maximum d’info pour la création de l’issue, je me suis pris au jeu et à force de bidouilles et de tests j’ai réussi à créer une custom Definition qui fonctionne (c’est un exploit pour moi qui n’ai jamais écrit une ligne de code !)
Si d’autres ont ce module la voici :

const {} = require('zigbee-herdsman-converters/lib/modernExtend');
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const ota = require('zigbee-herdsman-converters/lib/ota');
const tuya = require('zigbee-herdsman-converters/lib/tuya');
const {} = require('zigbee-herdsman-converters/lib/tuya');
const utils = require('zigbee-herdsman-converters/lib/utils');
const globalStore = require('zigbee-herdsman-converters/lib/store');
const e = exposes.presets;
const ea = exposes.access;

const fzLocal = {
        ias_occupancy_alarm_3: {
        cluster: 'ssIasZone',
        type: ['commandStatusChangeNotification'],
        convert: (model, msg, publish, options, meta) => {
            const zoneStatus = msg.data.zonestatus;
            return {
                occupancy: (zoneStatus & 1) > 0,
                //tamper: (zoneStatus & 1<<2) > 0,
                tamper: (zoneStatus & 1<<1) > 0,
                //battery_low: (zoneStatus & 1<<3) > 0,
            };
        },
    },
};


const definition = {
    zigbeeModel: ['CMS323'],
    model: 'CMS323',
    vendor: 'CASAIA',
    description: 'Multi-Sensor Zigbee – Mouvements Vibrations Temp Hum',
  
  
  
    fromZigbee: [fzLocal.ias_occupancy_alarm_3, fz.battery, fz.temperature, fz.humidity],
    toZigbee: [],
    meta: {battery: {voltageToPercentage: '3V_2500'}},
    exposes: [e.occupancy(), e.tamper(), e.battery_low(), e.battery(), e.temperature(), e.humidity()],
    configure: async (device, coordinatorEndpoint, logger) => {
            const endpoint = device.getEndpoint(2);
            await reporting.bind(endpoint, coordinatorEndpoint, ['msTemperatureMeasurement', 'msRelativeHumidity', 'genPowerCfg']);
            await reporting.temperature(endpoint);
            await reporting.humidity(endpoint);
            await reporting.batteryVoltage(endpoint);
            await reporting.batteryPercentageRemaining(endpoint);
            device.powerSource = 'Battery';
            device.save();
        },
};


module.exports = definition;

NB : j’ai du définir un converter local dans ma définition : ceux existants « ias_occupancy_alarm » ne remontaient pas comme il faut car tamper et occupancy étaient inversés.
NB2 : comme indiqué je ne suis pas dev et il faut voir ça comme un assemblage de copier / coller de code récupéré de modules similaires et de converters que j’ai adapté très à la marge avec la compréhension que j’ai pu en avoir. Je n’ose pas faire de PR car ce code est peut-être très foireux mais fonctionne chez moi !

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