Модуль 5. Надёжность локальных сценариев · Урок 10 из 12

Урок 10. Reporting, debounce, throttle и поток событий от выключателей

Как не потерять события поворота диммера и не перегрузить MQTT.

Чему вы научитесь

Различать частоту данных, слияние событий и необратимый пропуск сообщений.

Чем отличается reporting на уровне Zigbee

Устройство может отправлять изменения атрибутов Zigbee-кластеров по своим правилам reporting. Некоторые настройки допускают минимальный и максимальный период обновления и порог изменения значения, но конкретные свойства зависят от модели. Если датчик присылает температуру редко, нельзя сразу обвинять MQTT-broker: событие могло не формироваться на самом Zigbee-устройстве. И наоборот, частые шумные показания могут нагружать сеть, особенно при плотной установке.

Перед изменением reporting изучайте exposes и официальные инструкции для нужной прошивки. Универсальные значения периода для всех датчиков не существуют. Не используйте бесконечный опрос каждого батарейного устройства как замену нормальной событийной модели: это может разряжать батарею и создавать ненужный радиообмен.

Debounce объединяет соседние публикации

Опция debounce в Zigbee2MQTT помогает сгруппировать несколько сообщений за короткое окно. Если температура, влажность и давление приходят рядом, это может уменьшить число MQTT-публикаций. Но слишком большое окно по сравнению с частотой событий приведёт к постоянному ожиданию паузы и отсутствию публикации. Это особенно нежелательно для быстрых событий вращения диммера, где важна последовательность действий.

Документация предусматривает debounce_ignore для защиты отдельных уникальных значений, например action. Без такой настройки действия rotate_left и rotate_stop могут схлопнуться в одно последнее событие, и автоматизация потеряет промежуточную информацию. В учебной задаче показывается именно такая пара событий.

Throttle способен отбрасывать целые сообщения

Throttle отличается от debounce: он пропускает первое сообщение и игнорирует следующие в выбранном интервале, то есть информация может теряться намеренно. Для измерения медленного параметра это может быть приемлемо, но для кнопок и защитных датчиков опасно без анализа требований. Не ставьте одинаковый throttle для всех датчиков, а тем более не используйте его для жизненно важных сигналов, не проверив надежность системы.

В Zigbee2MQTT при одновременном задании debounce и throttle приоритет имеет debounce. Тренажёр учит выбирать причину симптома «двойное нажатие стало одинарным» без немедленного подозрения на радиопомехи. Прежде всего проверяют поток событий и настройки сглаживания, а потом — качество физического канала.

Практическая работа

Для диммера с действиями rotate_left и rotate_stop объясните, почему debounce без исключений может потерять действие.

Сравните reporting, debounce и throttle: какой механизм формирует Zigbee-события, какой объединяет, а какой намеренно отбрасывает?

Самопроверка: сформулируйте результат своими словами, а затем пройдите вопросы ниже. Если устройство или программа не доступны, выполните задание на бумаге или в учебном тренажёре.

Проверьте себя

Контрольные вопросы

Ответьте на все вопросы. При ошибке изучите пояснение и попробуйте ещё раз. Все задания бесплатны.

1. Что может сделать debounce при слишком большом окне?
2. Чем throttle отличается от debounce?
3. Нужно ли применять одинаковый throttle ко всем датчикам?

Правильных ответов: 0 из 3

Урок завершён?

Повторите ключевые идеи и убедитесь, что выполнили практическое задание.