Створюємо власний external converter на прикладі Orvibo Smart sticker switch
Може трапитись ситуація, коли ви придбали нібито сумісний zigbee девайс, та він чомусь не працює, а zibbee2mqtt повідомляє, що пристрій не підтримується.

При натисканні кнопок чи отриманні показів “не сумісного” девайсу в логах можемо бачити подібні повідомлення:
Debug Received Zigbee message from '0x00124b000cc8dbf4', type 'raw', cluster '23', data '{"data":[25,0,8,3,0,0],"type":"Buffer"}' from endpoint 1 with groupID 0
Warning Received message from unsupported device with Zigbee model '51725b7bcba945c8a595b325127461e9' and manufacturer name '欧瑞博'
Debug Received Zigbee message from '0x00124b000cc8dbf4', type 'raw', cluster '23', data '{"data":[25,0,8,11,0,0],"type":"Buffer"}' from endpoint 1 with groupID 0
Warning Received message from unsupported device with Zigbee model '51725b7bcba945c8a595b325127461e9' and manufacturer name '欧瑞博'
Існує два способи, щоб зробити ваш пристрій сумісним з zibbee2mqtt. Перший спосіб – написання зовнішнього конвертера, другий – додавання вашої zigbee моделі в репозиторій zigbee-herdsman-converters. Розглянемо обидва способи.
Пишемо власний zigbee2mqtt external converter
Конвертер – це невеликий файл з розширенням js, в якому мають бути вказані атрибути пов’язані з роботою вашого девайса. Точніше – перетворення повідомлень від пристрою до координатора в “зрозумілий” формат.
Знаючи точну назву вашого пристрою, знайдемо її у вже готовому конвертері за адресою. Знаходимо тут у файлі наступний код:
// ORVIBO
{
zigbeeModel: ['3c4e4fc81ed442efaf69353effcdfc5f'],
model: 'CR11S8UZ',
vendor: 'ORVIBO',
description: 'Smart sticker switch',
fromZigbee: [fz.orvibo_raw_1],
exposes: [e.action(['button_1_click', 'button_1_hold', 'button_1_release', 'button_2_click', 'button_2_hold', 'button_2_release',
'button_3_click', 'button_3_hold', 'button_3_release', 'button_4_click', 'button_4_hold', 'button_4_release'])],
toZigbee: [],
},
Давайте трохи модифікуємо його і збережемо в окремому файлі, замінивши zigbeeModel на вашу з логів (‘51725b7bcba945c8a595b325127461e9’) :
const device = {
zigbeeModel: ['51725b7bcba945c8a595b325127461e9'],
model: 'CR11S8UZ',
vendor: 'ORVIBO',
description: 'Smart sticker switch',
fromZigbee: [fz.orvibo_raw_1],
exposes: [e.action(['button_1_click', 'button_1_hold', 'button_1_release', 'button_2_click', 'button_2_hold', 'button_2_release',
'button_3_click', 'button_3_hold', 'button_3_release', 'button_4_click', 'button_4_hold', 'button_4_release'])],
toZigbee: [],
};
Додайте наступний код в кінці цього файлу:
module.exports = device;
Далі нам необхідно знайти у файлі код, що починається з orvibo_raw_1, це “слово” ми вже зустрічали в стрічці
fromZigbee: [fz.orvibo_raw_1]
Скопіюємо цю секцію в наш файл і передамо її константі fz, вставимо цей код над
const device = {... ...};
У вас має вийти подібний код
const fz = {
orvibo_raw_1: {
cluster: 23,
type: 'raw',
convert: (model, msg, publish, options, meta) => {
// 25,0,8,3,0,0 - click btn 1
// 25,0,8,3,0,2 - hold btn 1
// 25,0,8,3,0,3 - release btn 1
// 25,0,8,11,0,0 - click btn 2
// 25,0,8,11,0,2 - hold btn 2
// 25,0,8,11,0,3 - release btn 2
// 25,0,8,7,0,0 - click btn 3
// 25,0,8,7,0,2 - hold btn 3
// 25,0,8,7,0,3 - release btn 3
// 25,0,8,15,0,0 - click btn 4
// 25,0,8,15,0,2 - hold btn 4
// 25,0,8,15,0,3 - release btn 4
// TODO: do not know how to get to use 5,6,7,8 buttons
const buttonLookup = {
3: 'button_1',
11: 'button_2',
7: 'button_3',
15: 'button_4',
};
const actionLookup = {
0: 'click',
2: 'hold',
3: 'release',
};
const button = buttonLookup[msg.data[3]];
const action = actionLookup[msg.data[5]];
if (button) {
return {action: `${button}_${action}`};
}
},
},
};
Додайте на самому початку коду наступне:
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const e = exposes.presets;
Після цього, коли все зроблено правильно, файл має виглядати так:
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const e = exposes.presets;
const fz = {
orvibo_raw_1: {
cluster: 23,
type: 'raw',
convert: (model, msg, publish, options, meta) => {
// 25,0,8,3,0,0 - click btn 1
// 25,0,8,3,0,2 - hold btn 1
// 25,0,8,3,0,3 - release btn 1
// 25,0,8,11,0,0 - click btn 2
// 25,0,8,11,0,2 - hold btn 2
// 25,0,8,11,0,3 - release btn 2
// 25,0,8,7,0,0 - click btn 3
// 25,0,8,7,0,2 - hold btn 3
// 25,0,8,7,0,3 - release btn 3
// 25,0,8,15,0,0 - click btn 4
// 25,0,8,15,0,2 - hold btn 4
// 25,0,8,15,0,3 - release btn 4
// TODO: do not know how to get to use 5,6,7,8 buttons
const buttonLookup = {
3: 'button_1',
11: 'button_2',
7: 'button_3',
15: 'button_4',
};
const actionLookup = {
0: 'click',
2: 'hold',
3: 'release',
};
const button = buttonLookup[msg.data[3]];
const action = actionLookup[msg.data[5]];
if (button) {
return {action: `${button}_${action}`};
}
},
},
};
const device = {
zigbeeModel: ['51725b7bcba945c8a595b325127461e9'],
model: 'CR11S8UZ',
vendor: 'ORVIBO',
description: 'Smart sticker switch',
fromZigbee: [fz.orvibo_raw_1],
exposes: [e.action(['button_1_click', 'button_1_hold', 'button_1_release', 'button_2_click', 'button_2_hold', 'button_2_release',
'button_3_click', 'button_3_hold', 'button_3_release', 'button_4_click', 'button_4_hold', 'button_4_release'])],
toZigbee: [],
};
module.exports = device;
Збережіть цей файл з розширенням js і розмістіть його в папці zigbee2mqtt. Зазвичай вона знаходиться за адресою \config\zigbee2mqtt.

Відкрийте інтерфейс zigbee2mqtt і перейдіть в розділ “налаштування”. У вкладці “External converters” натисніть “+” та введіть назву створеного вами файла. Після цього, збережіть зміни та перезавантажте zigbee2mqtt, (в правому верхньому куті з’явиться кнопка “перезавантажити”).
Тепер ви можете користуватися даним пристроєм завдяки зовнішньому конвертеру.
Додаємо zigbeeModel зробивши форк в репозиторії
Це другий спосіб зробити ваш пристрій сумісним. Він найлегший, але зазначу, що девайс стане сумісним не зразу, а лише після того, як ваші правки в репозиторії затвердять. Після затвердження, зміни будуть доступні спочатку в dev-версії zigbee2mqtt, і лише через кілька тижнів в основній.
Щоб внести зміни до файлу, перейдіть за посиланням і натисніть кнопку “редагувати” (звичайно, у вас має бути аккаунт на github).

Знайдіть секцію з назвою вашого пристрою і додайте вашу zigbeeModel через кому, поруч з вже існуючою. Внизу сторінки вкажіть причину вашої зміни і опишіть її. Текст, що ви будете заповнювати, необхідно писати лише англійською мовою.

Відправте пропозицію на редагування натиснувши кнопку під формою.
Якщо у файлі не зроблено помилок – ви побачите підтвердження про проходження автоматичної перевірки. Максимум через добу, вашу пропозицію розглянуть вручну. Вже після затвердження змін ви можете оновити dev-версію модуля zigbee2mqtt в своєму Home Assistant, і тепер матимете робочий zigbee девайс.

Підкажіть будь ласка, де можна знайти опис структур та параметрів для цих конвертерів?
Можу порекомендувати почати звідси: https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html
https://www.zigbee2mqtt.io/how_tos/how_to_support_new_tuya_devices.html
Для деяких пристроїв Tuya знадобиться сніффер