Пишу собственную логику для работы с датчиками движения с расширенным функционалом. Возникла необходимость определять, каким образом включилась та или иная группа света (или реле) — автоматически по движению или вручную.
Рассматриваю два основных способа включения:
Автоматическое включение по сработке датчика движения
Ручное включение — к нему я отношу:
нажатие кнопки (в том числе моностабильной),
команды по MQTT,
действия из Home Assistant,
или управление через веб-интерфейс самого WB.
На текущий момент я реализовал простой механизм:
сохраняю время последнего срабатывания датчика;
сохраняю время последнего включения света;
если разница между ними < ~2 секунд, считаю включение автоматическим;
иначе — ручным.
Этот подход отлично работает в простых системах, где нет задержек между физическим событием и регистрацией на контроллере.
Однако в более сложной системе (более 100 модулей WB), где некоторые датчики подключены через модули WB-MIO (по фазе 220 В), появилась проблема:
при детекции движения замыкается 220 В на вход MIO;
контроллер фиксирует это событие, но с заметной задержкой (до 2 секунд).
Это ломает определение типа включения — потому что датчик срабатывает слишком поздно, и событие распознаётся как ручное, хотя оно было автоматическим.
Вопросы:
Есть ли способы уменьшить задержку регистрации входов WB-MIO, особенно при передаче по RS-485 (с подключением через расширитель или прямо к WB)?
Есть ли рекомендации по частоте опроса, настройкам Modbus?
Поддерживают ли эти модули какие-либо быстрые режимы обмена?
Как бы вы реализовали в системе с WB распознавание типа включения реле: датчик или ручное управление?
Может быть, есть более надёжный способ, кроме как сравнивать времена?
Буду благодарен за советы, примеры и любые рекомендации!
Не только. Если не используется быстрый Modbus - то для регистров можно указать приоритет чтений
Но, логикой расчета пропускной способности шины в таком случие пользоваться такой: “приоритетные чтения” должны занимать до 70% (лцчше 60%) ibhbys/
Датчики движения подключены через связку WB-MIO - WBIO-DI-HVD-8 и WB-MIO - WBIO-DI-HVD-16 (по шинам суммарно 4 модуля WB-MIO, к ним кроме детекторов ничего не подключено), и один модуль WBIO-DI-HVD-8 подключен непосредственно в контроллер.
Шина работает на 115200.
Я бы не стал завязывать определение на временные интервалы совсем. У меня, для примера сделано так: Если включен “вручную” - включается одитн виртуальный свич. Если автоматически - другой. Правило, управляющее состоянием устройства (каналом реле) подписано на оба свича и обрабатывает их как “или”. То есть если включен хотя б один - то реле включено.