Модуль 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-события, какой объединяет, а какой намеренно отбрасывает?
Самопроверка: сформулируйте результат своими словами, а затем пройдите вопросы ниже. Если устройство или программа не доступны, выполните задание на бумаге или в учебном тренажёре.
Проверьте себя
Контрольные вопросы
Ответьте на все вопросы. При ошибке изучите пояснение и попробуйте ещё раз. Все задания бесплатны.
Debounce ждёт тишины между событиями.
Throttle намеренно игнорирует часть сообщений в заданном интервале.
Настройки потока событий зависят от задач и последствий пропуска.
Правильных ответов: 0 из 3
Урок завершён?
Повторите ключевые идеи и убедитесь, что выполнили практическое задание.
Чтобы закончить урок, правильно ответьте на контрольный вопрос.