Всем добрый день!
Написал пакет поддержки устройств на питоне, запускаю прямо на контроллере в Docker, связаны мои устройства с остальным умным домом через MQTT и виртуальные устройства. Заметил, что в некоторых случаях (пока что - при перезапуске контейнера и ровно в полночь), система триггерит публикацию событий на топики виртуальных устройств и физические устройства срабатывают. В чем может быть причина, и как от этого избавиться?
Для связи с брокером использую aiomqtt (асинхронная версия хорошо известного paho-mqtt)
Заранее благодарю за помощь!
Вопрос снят. Разобрался сам. Игнорю сообщения с retain=true, проблемы ушли
Вопрос решился не совсем. После ночного перезапуска wb-rules retain флаг не помогает.
Я правильно понимаю, что надо подписаться на /devices/wbrules/meta/online, и когда там публикуется 1 - игнорить все сообщения в течении нескольких секунд? И правильно ли, что это - единственный метод?
Добрый день!
Да, подписка на /devices/wbrules/meta/online
и игнор сообщений в течение короткого интервала — наиболее корректный способ избежать ложных триггеров после перезапуска wb-rules
.
Спасибо! Сегодня ночью проверю
1 лайк
Добрый день!
Хорошо, ожидаю обратной связи.
Не сработало… Перезапустил вручную (systemctl), получил вот такие сообщения:
2025-06-16 08:58:19,630 - INFO - Connected to MQTT broker at 192.168.110.250:1883
2025-06-16 08:58:19,630 - INFO - Subscribed to topic filter: /devices/wbrules/#
2025-06-16 08:58:34,911 - INFO - Topic: /devices/wbrules/meta/driver | Payload: wb-rules
2025-06-16 08:58:34,913 - INFO - Topic: /devices/wbrules/meta/name | Payload: Rule engine settings
2025-06-16 08:58:34,914 - INFO - Topic: /devices/wbrules/meta | Payload: {“driver”:“wb-rules”,“title”:{“en”:“Rule engine settings”,“ru”:“Настройки движка правил”}}
2025-06-16 08:58:34,915 - INFO - Topic: /devices/wbrules/controls/Rule debugging/meta/type | Payload: switch
2025-06-16 08:58:34,915 - INFO - Topic: /devices/wbrules/controls/Rule debugging/meta/order | Payload: 1
2025-06-16 08:58:34,916 - INFO - Topic: /devices/wbrules/controls/Rule debugging/meta/readonly | Payload: 0
2025-06-16 08:58:34,917 - INFO - Topic: /devices/wbrules/controls/Rule debugging/meta | Payload: {“order”:1,“readonly”:false,“title”:{“en”:“Rule debugging”,“ru”:“Отладка правил”},“type”:“switch”}
2025-06-16 08:58:34,918 - INFO - Topic: /devices/wbrules/controls/Rule debugging | Payload: 1
meta/online нет
Добрый день!
Поресерчил вопрос глубже — штатного и элегантного решения не нашёл.
Можно попробовать следующее:
- Добавить статусный топик от Docker-контейнера.
Контейнер публикует, например, myaddon/status online
при запуске.
- Создать правило в
wb-rules
, которое отслеживает этот статус и в течение 5 секунд после появления online
игнорирует входящие MQTT-сообщения с привязанных устройств. Это позволит отфильтровать ложные срабатывания при старте.
- Альтернатива: внешний скрипт вне
wb-rules
, который отслеживает статус контейнера и управляет логикой публикаций вручную.
Дополнительно — подскажите, пожалуйста, зачем выполняется ребут каждый день в полночь? Это не совсем штатное поведение, возможно, есть способ избежать этого, что поможет решить проблему системно.
При перезапуске контейнера все в порядке, там штатно отрабатывает флаг retain. А вот при перезапуске wb-rules - проблема. Не совсем понимаю, как публикация топика из контейнера может помочь отслеживать перезапуск wb-rules.
Почему происходит полуночный перезапуск wb-rules, постараюсь выяснить у человека, который мне умный дом ставил и настраивал.
Добрый день!
Понял, проблема не с той стороны. Тогда тем более — это нештатное поведение.е проблема. Тогда темболее не штатное поведение.
Получилось! Подписываться надо на /devices/wbrules/meta/driver, на этот топик приходит сообщение при каждом запуске wb-rules!
1 лайк
Отлично! Я так понимаю теперь все работает?