Sonoff ZBMINI-L et Zigbee 2MQTT

Bonjour :slight_smile:

Je viens d’installer mon Sonof MINI-L et apparemment Zigbee2MQTT n’en veut pas…Pourtant il est apparaît dans la liste des devices supporte.

Est ce que quelqu’un a déjà fait l’installation de ce device?

Merci :slight_smile:

Hello.

J’ai pas l’accès facile mais c’est moi qui ai fait l’intégration de ce module. C’est dans le sujet de présentation / test.
https://forum.hacf.fr/t/module-zigbee-3-0-sans-neutre/9089/23
Au pire je repasse ce soir

Pulpy, ok je vais regarder de suite…merci :slight_smile:

Bon, ben la c’hui perdu :-))))) j’ai commence des recherches sur internet, mais c’est pas tres clair (pour moi)… je vais me poser et reviens vers toi si j’y arrive pas :slight_smile:

Alors voici le résultat de mes premieres recherches sur internet.
Mais avant pourrais tu m’expliquer ce qu’est un Converter exactement, l’explication en anglais m’échappe un peu…:slight_smile:

Donc:
1- appairage du Mini-l

2- creation d’un fichier .js contenant le script que tu as ecris. (Ils disent de le mettre a cote de « configuration yaml. ». Je ne sais pas trop ce que cela veut dire, juste en dessous du fichier yaml? Pourquoi est ce important? (Juste pour comprendre).
Également, je copie/colle ton script sans rien changer?

3- Allez dans Z2MQTT, onglet « LOGS » et dans « show only » choisir « debug ».

4- écrire ces lignes dans configuration.yaml (si « «converterzigbee » est le nom de mon fichier par ex):

advanced:
log_level: debug
external_converters:

  • converterzigbee.js

5- redémarrer Z2MQTT et allumer manuellement le mini-l et verifier quel message on reçoit.

6- ensuite updated les infos dans le fichier « converterzigbee.js ».
Dans le cas du mini-l (et la je ne suis pas sur non plus si c’est correct):

zigbeeModel: [‹ mini-l ›],
model: 'converterzigbee ',
vendor: ‹ Ext-light-guesthouse ›,
fromZigbee: [???],
toZigbee: [???],
exposes: juste pour les sensors?

7- Ajouter un logo si on veut

Merci de ton aide :slight_smile:
Bonne journee

Salut,

  • Tu peux faire 1 et 3 pour vérifier que le nom trouvé est bien le même que dans mon fichier js, ça expliquerai pourquoi ça ne fonctionne pas directement
  • D’ailleurs 2, 6 et 7 c’est la même chose et c’est déjà tout fait dans mon fichier .js
  • L’important c’est de mettre en 6 le bon nom
  • Tu peux maintenant faire le 4 directement via l’interface graphique de z2m

De mon coté, il faut que fasse des tests (virer ma config actuelle et refaire un import et repartir de 0 vérifier pour vérifier si ça marche toujours)

Le fichier que j’ai créé

Ce que j’ai mis dans ma configuration.yaml

advanced:
log_level: debug
external_converters:
  - converterzigbee.js

Et dans le fichier créé sous config/converterzigbee.js:

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 globalStore = require('zigbee-herdsman-converters/lib/store');
const e = exposes.presets;
const ea = exposes.access;

const definition = {
        fingerprint: [{modelID: 'ZBMINI-L', manufacturerName: 'SONOFF'},],
        model: 'ZBMINI-L',
        description: 'SONOFF ZBMINI ZigBee MINI Smart Switch no neutral',
        vendor: 'SONOFF',		
        fromZigbee: [fz.on_off],
        toZigbee: [tz.on_off],
        configure: async (device, coordinatorEndpoint, logger) => {
            const endpoint = device.getEndpoint(1);
            await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
            device.save();
        },
        exposes: [e.switch()],

};

module.exports = definition;

Le message que j’ai

Et debug:

Oui ça tu peux éviter de le faire via le YAML (ici ça marche pas c’est pas le bonne hiérarchie)

  • → Debug (c’est ce que tu as fais juste après)

  • → converterzigbee.js => a charger depuis extension

Personnellement je trouve pas que le nom converterzigbee.js soit le plus pratique … Sachant qu’1 convertisseur est généralement dédié à 1 un appareil, mettre le nom de l’appareil me semble une bonne idée si on envisage d’avoir plusieurs convertisseurs en parallèle … Mais c’est un point de détails et ça n’a pas de conséquence sur le fonctionnement technique

Bon j’ai du faire une bêtise, écran noir du coup après redémarrage de Zigbee 2MQTT


J’ai été dans extension

Puis,j’ai,ajouter le converter dans

Comme ça, ça à l’air bon (bouton + puis submit pour la dernière étape ?)
Donc pour comprendre, il faut regarder les logs

Ben oui;mais écran noir… je peux plus ouvrir Z2MQTT… et peut pas redémarrer a cause de l’erreur mentionné plus,haut :frowning:

Je parle de cette erreur

Ça c’est le reste de ton configuration.yaml pas bon.
Vire juste les lignes

Ok merci, bon j’ai pu re démarrer apres avoir retirer ces lignes, mais Z2M est toujours en mode écran noir :frowning:

Donc les logs de zigbee2mqtt à regarder.
C’est un réflexe à prendre. Sans les logs c’est de la divination

Ooops, c’est exact :slight_smile:

Voici les logs :

[14:14:35] INFO: Handing over control to Zigbee2mqtt Core …

zigbee2mqtt@1.18.1 start /app
node index.js
(node:254768) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open ‹ /config/zigbee2mqtt/converterzigbee.js ›
at Object.openSync (fs.js:476:3)
at Object.readFileSync (fs.js:377:35)
at loadModuleFromFile (/app/lib/util/utils.js:161:27)
at Object.getExternalConvertersDefinitions (/app/lib/util/utils.js:172:25)
at getExternalConvertersDefinitions.next ()
at new ExternalConverters (/app/lib/extension/externalConverters.js:10:20)
at new Controller (/app/lib/controller.js:78:34)
at start (/app/index.js:41:18)
at Object. (/app/index.js:59:1)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
(Use node --trace-warnings ... to show where the warning was created)
(node:254768) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see Command-line API | Node.js v21.5.0 Documentation). (rejection id: 1)
(node:254768) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
[14:14:40] INFO: Handing over control to Zigbee2mqtt Core …
zigbee2mqtt@1.18.1 start /app

Il râle sur le fichier js qu’il ne trouve pas.
Tu l’as bien mis sur la machine au bon endroit /config/zigbee2mqtt/ avec le bon nom converterzigbee.js?

Ps ; Thaïlande et Sfr même combat, internet est hs ici (mais la domotique fonctionne)

Je comprend pas le soucis rencontré ici. j’ai zigbee2mqtt en dernière version et mon ZBMINI-L est bien géré sans bidouille:

Méfie toi, les Thai pratique le MuaiThai, ils sont capable de tout ici :-))))

Bon effectivement, il semble chercher:
Cannot find module ‹ zigbee-herdsman-converters/lib/extend ›

Donc il est dans : /config/zigbee2mqtt/converterzigbee.js
Et j’ai rien change a l’intérieur du fichier, on est d’accord?

Par contre aux lignes 17, 18 et 20 il y a une erreur:

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 globalStore = require('zigbee-herdsman-converters/lib/store');
const e = exposes.presets;
const ea = exposes.access;

const definition = {
        fingerprint: [{modelID: 'ZBMINI-L', manufacturerName: 'SONOFF'},],
        model: 'ZBMINI-L',
        description: 'SONOFF ZBMINI ZigBee MINI Smart Switch no neutral',
        vendor: 'SONOFF',		
        fromZigbee: [fz.on_off],
        toZigbee: [tz.on_off],
        configure: async (device, coordinatorEndpoint, logger) => {
            const endpoint = device.getEndpoint(1);
            await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff']);
            device.save();
        },
        exposes: [e.switch()],

};

module.exports = definition;

Ligne 17:

Ligne 18

Ligne 20

1 « J'aime »

C’est normalement un truc de base du module donc pourquoi ça ça coince, je sais pas

Tout à fait, tu devrais même pas avoir à corriger un truc, @Minims confirme que l’ajout est bien dans le package général

A mon avis, cette partie là tu peux ne pas en tenir compte. L’editeur de config (yaml) est pas vraiment idéal pour vérifier un script JS