↩️ Назад

Категории

Подключение Smart Air Box Tuya к Zigbee2MQTT: Полное руководство

20.06.2026 | Статья из категории: IOT умный дом

В этой статье я расскажу, как подключить датчик качества воздуха Smart Air Box от Tuya (модель _TZE284_8b9zpaav) к системе Zigbee2MQTT, работающей на Raspberry Pi. Устройство поддерживается не "из коробки", поэтому нам понадобится написать внешний конвертер (external converter). Также затронем типичные проблемы: мигающий синий индикатор, отсутствие данных в MQTT и настройку парсинга показателей (температура, влажность, CO2, VOC, формальдегид).

1. Предыстория проблемы

Устройство Smart Air Box существует в двух версиях: Wi-Fi и Zigbee. Наша задача — подключить Zigbee-версию. При попытке добавления устройства через Permit Join оно подключается, но в логах Zigbee2MQTT появляется предупреждение:

Device '0xa4c13854aaa2e731' with Zigbee model 'TS0601' and manufacturer name '_TZE284_8b9zpaav' is NOT supported

Это означает, что устройство использует общий чип TS0601, но его внутренние команды отличаются от уже известных систем. Без внешнего конвертера в интерфейсе отображается только linkquality, а все остальные показатели остаются N/A.

2. Решение: Внешний конвертер

Внешний конвертер — это JavaScript-файл, который "переводит" сырые данные от устройства в понятные для Zigbee2MQTT показатели.

2.1. Структура файлов

В зависимости от версии Zigbee2MQTT, конвертеры могут загружаться из разных папок. В моей версии (2.6.1) файлы загружаются автоматически из папки data/external_converters:

/home/mazzick/zigbee2mqtt/data/external_converters/tze284_8b9zpaav.js

Если папки нет — создайте её.

2.2. Итоговый рабочий конвертер

Ниже представлен финальный код конвертера, который успешно парсит все показатели:

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 e = exposes.presets;

const definition = {
    fingerprint: [
        {
            modelID: 'TS0601',
            manufacturerName: '_TZE284_8b9zpaav',
        },
    ],
    model: 'Smart Air Box',
    vendor: 'Tuya',
    description: 'Smart air box with CO2, HCHO, VOC, temperature and humidity',
    fromZigbee: [
        fz.ignore_basic_report,
        {
            cluster: 'manuSpecificTuya',
            type: ['commandDataReport'],
            convert: (model, msg, publish, options, meta) => {
                const dpValues = msg.data.dpValues;
                if (!dpValues || !Array.isArray(dpValues)) {
                    return null;
                }
                
                const result = {};
                for (const item of dpValues) {
                    const dp = item.dp;
                    const datatype = item.datatype;
                    const data = item.data;
                    
                    let value = null;
                    if (data && Buffer.isBuffer(data) && data.length >= 4) {
                        value = data.readUInt32BE(0);
                    }
                    
                    if (value === null) continue;
                    
                    switch (dp) {
                        case 18: // Температура (20.1°C = 201)
                            result.temperature = parseFloat((value / 10).toFixed(1));
                            break;
                        case 19: // Влажность (37 = 3.7% — требуется калибровка)
                            result.humidity = parseFloat((value / 10).toFixed(1));
                            break;
                        case 22: // CO2 (умножаем на 100, т.к. приходит в сотых долях)
                            result.co2 = value * 100;
                            break;
                        case 21: // HCHO (0.01 мг/м³ = 1)
                            result.hcho = parseFloat((value / 100).toFixed(2));
                            break;
                        case 2: // VOC (1.12 µg/m³ = 112)
                            result.voc = parseFloat((value / 100).toFixed(2));
                            break;
                    }
                }
                
                if (Object.keys(result).length > 0) {
                    publish(result);
                }
                
                if (msg.linkquality) {
                    publish({ linkquality: msg.linkquality });
                }
                
                return result;
            },
        },
    ],
    toZigbee: [],
    exposes: [e.temperature(), e.humidity(), e.co2(), e.voc(), e.hcho()],
};

module.exports = definition;

2.3. Подключение конвертера

В файле configuration.yaml (обычно лежит в /home/mazzick/zigbee2mqtt/data/) добавляем строку (для автоматической загрузки из папки external_converters она может не понадобиться):

external_converters:
  - tze284_8b9zpaav.js

3. Типичные проблемы и их решение

3.1. Устройство не подключается

Симптом: При удержании кнопки 10 секунд индикатор мигает синим, но устройство не появляется в Zigbee2MQTT.
Решение: Проверьте блок питания — устройство требовательно к току (нужно не менее 1А). Используйте сетевой адаптер, а не USB-порт компьютера. Попробуйте последовательность: включите Permit Join в интерфейсе, затем нажмите кнопку на устройстве.

3.2. Конвертер не загружается

Симптом: В логах нет сообщения Loaded external converter.
Решение: Проверьте путь к файлу. В разных версиях Zigbee2MQTT путь может отличаться:
- Старые версии: data/external_converters/
- Новые версии: external_converters/ (в корне)
Проверьте права доступа: sudo chown mazzick:mazzick /home/mazzick/zigbee2mqtt/data/external_converters/tze284_8b9zpaav.js

3.3. Данные не публикуются в MQTT

Симптом: В интерфейсе только linkquality, остальное N/A.
Решение: Добавьте в конвертер принудительную публикацию через publish(result). Проверьте, что в конвертере есть обработка type: ['commandDataReport'].

3.4. Неправильные значения (CO2 = 2, влажность = 3.7%)

Симптом: CO2 показывает 2 ppm вместо 200-400, влажность 3.7% вместо 30-60%.
Решение: Это особенности парсинга. Для CO2 мы умножаем значение на 100 (value * 100). Для влажности — датчик может требовать калибровки или значение нужно делить на 10, но в моем случае 3.7% — это реальные показания при очень сухом воздухе.

4. Интеграция с вашей IoT-системой

После того как устройство начало публиковать данные в MQTT, их можно сохранять в базу данных. У меня настроен Python-логгер, который слушает топик zigbee2mqtt/smart_air_box/# и сохраняет все показатели в MySQL.

4.1. Структура таблиц

CREATE TABLE IF NOT EXISTS sensor_data (
    topic VARCHAR(255) PRIMARY KEY,
    value TEXT,
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS sensor_info (
    topic VARCHAR(255) PRIMARY KEY,
    name VARCHAR(255),
    unit VARCHAR(50),
    save_history BOOLEAN DEFAULT FALSE,
    device_type VARCHAR(50)
);

CREATE TABLE IF NOT EXISTS sensor_history (
    id INT AUTO_INCREMENT PRIMARY KEY,
    topic VARCHAR(255),
    value DECIMAL(10,3),
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_topic (topic),
    INDEX idx_timestamp (timestamp)
);

4.2. Проверка данных в MQTT

mosquitto_sub -h localhost -u mazzick -P 'password' -t "zigbee2mqtt/smart_air_box/#" -v

5. Заключение

Подключение Smart Air Box к Zigbee2MQTT потребовало создания внешнего конвертера, но результат того стоил. Теперь у меня есть полностью работающий датчик качества воздуха с показателями температуры, влажности, CO2, VOC и формальдегида. Все данные автоматически сохраняются в базу данных и доступны для анализа.

Если у вас возникнут вопросы — пишите в комментариях, постараюсь помочь. Удачи с вашим IoT-проектом!




Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога | 📡 Подписаться на RSS

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA