GavriKos
@GavriKos

Zigbee2mqtt как настроить отображение?

Разрабатываю чисто для себя кастомное устройство-поливалку с zigbee-подключением.
Прошивка пишется на ESP-IDF, подлючается к zigbee2mqtt, дальше у к homeassistant.

Собственно в чем затык. Устройство в z2m видно, определяется, конечно после написания экстеншна. Через дев-консоль z2m я могу получить параметры устройства (пока только температура). Однако в Exposes температура все время N/A (а значит и в HA она тоже не определена). ЧЯДНТ?

Код экстеншна для z2m:

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

const yourTemperatureConverter = {
    // This will be the key in the 'fromZigbee' and 'toZigbee' converters
    cluster: 'msTemperatureMeasurement',
    type: ['attributeReport', 'readResponse'],
    convert: (model, msg, publish, options, meta) => {
        const temperature = msg.data['measuredValue'];
        // Convert temperature to Celsius if it's not already
        const temperatureC = temperature / 100;
        
        // Return an object with the temperature property
        return {temperature: temperatureC};
    },
};

// Add your converter to the 'fromZigbee' converters
fz.yourTemperatureConverter = yourTemperatureConverter.convert;

const definition = {
    zigbeeModel: ['m1'],
    model: 'm1',
    vendor: 'm1',
    description: 'My super switch!',
	supports: 'temperature,genBasic', 
	fromZigbee: [fz.yourTemperatureConverter],                                                                                       
    toZigbee: [],
	exposes: [e.temperature()]
};

module.exports = definition;
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
GavriKos
@GavriKos Автор вопроса
configure: async (device, coordinatorEndpoint, logger) => {
        const first_endpoint = device.getEndpoint(1);
        await reporting.bind(first_endpoint, coordinatorEndpoint, ['genBasic', 'msTemperatureMeasurement']);

        await reporting.temperature(first_endpoint);

        },

Добавив вот этот код +пересоздав устройство - все заработало )
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы