zigbee mqtt topic 리포팅 주기 설정 방법

Whisk ed687eac94 3

Whisk ed687eac94 3

IOT 센서의 리포팅 주기(MQTT publish topic)가 잦으면 다른 장치의 트래픽을 방해하거나 자동화가 불필요하게 많이 실행될 수 있습니다.

알리에서 구매한 이산화탄소 센서 (TS0601) 리포팅 주기 0.5초여서 리포팅 주기를 변경한 방법을 공유하고자 합니다.

외부 컨버터 사용

리포팅 주기를 변경할 수 있는 장치도 있지만 펌웨어에서 하드코딩된 부분이라 설정을 직접 변경할 수 없는 장치도 있습니다.

이런 경우에는 외부 컨버터를 사용합니다.

external_converters 폴더를 생성하여 TS0601_CO2.js 파일을 업로드 합니다.

(/homeassistant/zigbee2mqtt/external_converters/TS0601_CO2.js)


TS0601_CO2.js

const exposes = require('zigbee-herdsman-converters/lib/exposes');
const tuya = require('zigbee-herdsman-converters/lib/tuya');
const legacy = require('zigbee-herdsman-converters/lib/legacy');
const e = exposes.presets;

const STARTUP_DELAY = 1.0;  // Delay before first report in seconds
const PUBLISH_DELAY = 30.0; // Delay between each data publish in seconds

const legacy_tuya_with_delay = {
    cluster: 'manuSpecificTuya',
    type: ['commandDataReport', 'commandDataResponse'],
    convert: (model, msg, publish, options, meta) => {
        const now = Date.now();  
        
        if (!meta.device.private_cache) {
            meta.device.private_cache = {};
            meta.device.private_next_update = now + STARTUP_DELAY * 1000;
        }

        const changes = legacy.fromZigbee.tuya_air_quality.convert(model, msg, publish, options, meta);
        Object.assign(meta.device.private_cache, changes);

        if (now >= meta.device.private_next_update) {
            const result = { ...meta.device.private_cache };
            meta.device.private_next_update = now + PUBLISH_DELAY * 1000;  // Schedule next publish
            meta.device.private_cache = {};  // Clear cache after publishing
            return result;
        } else {
            return {};  // Do not publish if delay has not passed
        }
    }
};

const definition = {
    fingerprint: tuya.fingerprint('TS0601', ['_TZE204_ogkdpgy2']),
    model: 'TS0601_co2_sensor',
    vendor: 'Tuya',
    description: 'NDIR CO2 sensor with delayed reporting',
    fromZigbee: [legacy_tuya_with_delay],
    toZigbee: [],
    exposes: [e.co2()],
};

module.exports = definition;

TS0601_CO2.js
0.00MB

지그비 제조사에 적힌 내용을 위의 코드에 변경하면 됩니다.

리포팅 주기는 입맛대로 설정하시면 됩니다.

zigbee2mqtt 에드온을 재시작하면 리포팅 주기가 30초로 변경되어 과도하게 보고하는 것을 막을 수 있습니다. 

2025 08 19 143024

출처: https://community.home-assistant.io/t/carbon-monoxide-detector-is-very-chatty-tuya-ts0601/729267/5

Carbon Monoxide detector is very “chatty” – Tuya TS0601

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤