События на виртуальных устройствах

Всем добрый день!

Написал пакет поддержки устройств на питоне, запускаю прямо на контроллере в 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 нет

Добрый день!

Поресерчил вопрос глубже — штатного и элегантного решения не нашёл.

Можно попробовать следующее:

  1. Добавить статусный топик от Docker-контейнера.
    Контейнер публикует, например, myaddon/status online при запуске.
  2. Создать правило в wb-rules, которое отслеживает этот статус и в течение 5 секунд после появления online игнорирует входящие MQTT-сообщения с привязанных устройств. Это позволит отфильтровать ложные срабатывания при старте.
  3. Альтернатива: внешний скрипт вне wb-rules, который отслеживает статус контейнера и управляет логикой публикаций вручную.

Дополнительно — подскажите, пожалуйста, зачем выполняется ребут каждый день в полночь? Это не совсем штатное поведение, возможно, есть способ избежать этого, что поможет решить проблему системно.

При перезапуске контейнера все в порядке, там штатно отрабатывает флаг retain. А вот при перезапуске wb-rules - проблема. Не совсем понимаю, как публикация топика из контейнера может помочь отслеживать перезапуск wb-rules.

Почему происходит полуночный перезапуск wb-rules, постараюсь выяснить у человека, который мне умный дом ставил и настраивал.

Добрый день!

Понял, проблема не с той стороны. Тогда тем более — это нештатное поведение.е проблема. Тогда темболее не штатное поведение.

Получилось! Подписываться надо на /devices/wbrules/meta/driver, на этот топик приходит сообщение при каждом запуске wb-rules!

1 лайк

Отлично! Я так понимаю теперь все работает?

Да, спасибо!

1 лайк