Salutation, je viens d’avoir un petit problème avec Zigbee2MQTT, j’ai acheté des prises NOUS A1Z qui n’ont pas été reconnu tout de suite et il y a une solution à ça, donc comme d’habitude je te partage mon expérience.
C’est parti !
Voici le message que j’ai eu dans les logs de Z2M
Warning 2022-11-29 21:15:49Device '0xa4c1382b4db308b5' with Zigbee model 'TS011F' and manufacturer name '_TZ3000_2putqrmw' is NOT supported, please follow https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html
Pour trouver les logs vous pouvez aller dans config\zigbee2mqtt\log ou via l’interface dans journaux dans le menu du haut

Dans ce cas pas de panique, Z2M permet d’ajouter du matériel soit même en « injectant » un fichier JS avec les paramètres qui vont bien
Tout d’abord rendez-vous sur le GitHub Z2M dans la partie issues et rechercher le code du manufacturer name sur Git, dans mon cas : _TZ3000_2putqrmw qui se trouve dans les logs.
je tombe sur cette article https://github.com/Koenkk/zigbee2mqtt/issues/15212
En parcourant la page il y a du code dans External Converter.
Le but est de récupérer ce bout de code que l’on va intégrer à Z2M.
Maintenant il faut aller dans le répertoire de Z2M, moi c’est un module complémentaire de HA donc j’y accède soit via le partage SAMBA soit via File editor.
Zigbee2MQTT en version <2.0
Crées un fichier nous.js, par exemple, dans le répertoire config\zigbee2mqtt et copier/coller le code trouvé sur le GitHub, dans mon cas :
const fz = {...require('zigbee-herdsman-converters/converters/fromZigbee'), legacy: require('zigbee-herdsman-converters/lib/legacy').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 ota = require('zigbee-herdsman-converters//lib/ota');
const e = exposes.presets;
const ea = exposes.access;
module.exports = [
{
zigbeeModel: ['TS011F'],
model: 'A1Z_2putqrmw',
description: 'Smart plug (with power monitoring)',
vendor: 'Nous',
ota: ota.zigbeeOTA,
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory,
fz.ts011f_plug_indicator_mode, fz.ts011f_plug_child_mode],
toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory, tz.ts011f_plug_indicator_mode, tz.ts011f_plug_child_mode],
configure: async (device, coordinatorEndpoint, logger) => {
const endpoint = device.getEndpoint(1);
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
await reporting.rmsVoltage(endpoint, {change: 5});
await reporting.rmsCurrent(endpoint, {change: 50});
await reporting.activePower(endpoint, {change: 10});
await reporting.currentSummDelivered(endpoint);
endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
device.save();
},
exposes: [e.switch(), e.power(), e.current(), e.voltage().withAccess(ea.STATE),
e.energy(), exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
.withDescription('Recover state after power outage'),
exposes.enum('indicator_mode', ea.ALL, ['off', 'off/on', 'on/off', 'on'])
.withDescription('Plug LED indicator mode'), e.child_lock()],
},
Il reste à modifier le fichier configuration.yaml de Z2M pour lui dire de charger ce fichier au démarrage en ajoutant :
external_converters:
- nous.js
Voici le début de mon fichier configuration.yaml :
homeassistant: true
external_converters:
- nous.js
advanced:
channel: 15
Ensuite il suffit de redémarrer Z2M est normalement le matériel est reconnu !
Attention, petit retour d’expérience :
A la suite d’une mise à jour de Zigbee2MQTT si ils ont intégré le matériel, Z2M va planter au démarrage car il aura 2 instructions pour le même matériel, il faudra donc aller dans configuration.yaml et supprimer la ligne du fichier JS correspondant !
Zigbee2MQTT en version >2.0 (a tester)
Avec la mise à jour Zigbee2MQTT en version 2 les choses ont un peu changées :
Il faut créer un fichier nous.mjs dans le répertoire external_converters de zigbee2MQTT
import {on_off} from "zigbee-herdsman-converters/converters/fromZigbee";
import {on_off as tzOnOff} from "zigbee-herdsman-converters/converters/toZigbee";
import {presets} from "zigbee-herdsman-converters/lib/exposes";
import {bind, onOff} from "zigbee-herdsman-converters/lib/reporting";
/** @type{import('zigbee-herdsman-converters/lib/types').DefinitionWithExtend | import('zigbee-herdsman-converters/lib/types').DefinitionWithExtend[]} */
export default = [
{
zigbeeModel: ['TS011F'],
model: 'A1Z_2putqrmw',
description: 'Smart plug (with power monitoring)',
vendor: 'Nous',
ota: ota.zigbeeOTA,
fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering, fz.ignore_basic_report, fz.tuya_switch_power_outage_memory,
fz.ts011f_plug_indicator_mode, fz.ts011f_plug_child_mode],
toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory, tz.ts011f_plug_indicator_mode, tz.ts011f_plug_child_mode],
configure: async (device, coordinatorEndpoint, logger) => {
const endpoint = device.getEndpoint(1);
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']);
await reporting.rmsVoltage(endpoint, {change: 5});
await reporting.rmsCurrent(endpoint, {change: 50});
await reporting.activePower(endpoint, {change: 10});
await reporting.currentSummDelivered(endpoint);
endpoint.saveClusterAttributeKeyValue('haElectricalMeasurement', {acCurrentDivisor: 1000, acCurrentMultiplier: 1});
endpoint.saveClusterAttributeKeyValue('seMetering', {divisor: 100, multiplier: 1});
device.save();
},
exposes: [e.switch(), e.power(), e.current(), e.voltage().withAccess(ea.STATE),
e.energy(), exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
.withDescription('Recover state after power outage'),
exposes.enum('indicator_mode', ea.ALL, ['off', 'off/on', 'on/off', 'on'])
.withDescription('Plug LED indicator mode'), e.child_lock()],
},
Tu peux trouver des exemples de conf en fonction du type d’appareil ici
Apparemment il n’est plus nécessaire de modifier le fichier configuration.yaml,
Bonjour,
Super tutos Merci de nous partager ton expérience. J’ai une question; sur mon zigbee2Mqtt j’ai ajouté mon module pour piloter ma climatisation. Je le pilote bien mais sur ma tuile j’ai deux valeur de consigne de température (chaud et froid) comment je peut faire pour supprimé ça et n’avoir qu’une valeur qui change en fonction de l’état de la clim (chaud/froid)
en gros je cherche a modifier le fichier de config de mon appareil mais je ne sais pas ou il est.
Merci de votre réponse
Bonjour Steve,
Merci pour ton retour.
Je ne pense pas que tu pourras faire ça au niveau de la configuration de ton appareil mais il faudra faire ça au niveau de la carte de ton dashboard.
Il y a pas mal de carte Thermostat et plein de tuto sur d’autre site come HACF ou My Canaletto
J’ai un petit soucis avec ce qu’il faut ajouter dans le fichier « configuration.yaml » de zigbee2mqtt :
dès que je rajoute les lignes
external_converters:
– ‘ZT01.js’
et que je redémarre, les 2 lignes disparaissent et bien sur mon module n’est toujours pas reconnu…
(j’ai essayer sans les guillements, avec le chemin ./ZT01.js, rien n’y fait, ça disparaît toujours
Attention, cette procédure date un peu, Zigbee2mqtt a pas mal changé depuis.
Je me renseigne et je mets le tuto à jour
Je viens de mettre à jour le tuto mais je ne peux pas tester actuellement, peux-tu essayer ?
c’est dans la partie Zigbee2MQTT version > 2.0
Merci
Super, ça fonctionne parfaitement. Pas simple de trouver la bonne description à mettre dans le fichier « mjs » mais la localisation « external_converters » dans « zigbee2MQTT » est bien le bon endroit pour que le fichier soit lu, sans modifier « configuration.yaml » .
Merci
Top merci pour ton retour