Изменение состояния реле независимо от его текущего состояния

А могу я непосредственно указать - “перевести реле в положение (условно) “вкл””.
Не интересуясь предварительно текущим состоянием, и быть уверенным что реле приняло непосредственно указанное значение?

Да,конечно, в движке правил вы можете задать нужное состояние, не только инвертировать текущее.
После того, как вы отправите команду на устройство, вы сможете отследить его состояние, обращаясь к соответствующему объекту в движке правил. Если реле изменило состояние, то вызывается обработчик, созданный вами для отслеживания этого изменения.

Спасибо огромное за помощь. :slight_smile:

Удачи вам!

А теперь обратная ситуация.
Есть ли возможность отправить реле команду инвертировать текущее состояние, канала, независимо от его текущего состояния, не читая его состояние?

dev[“device”][“control”] = !dev[“device”][“control”]

Не совсем понимаю, где обрабатывается инверсия в этом случае. На уровне контроллера или реле?

На уровне контроллера, соответственно, будет инвертировано то значение, которое драйвер последним считал с устройства и записал в топик MQTT.
Если реле подключено по шине Modbus, то тут возможна ситуация (из-за циклического опроса), когда в топике будет ещё находиться устаревшее значение, которое и будет инвертировано, что неверно.

Вот именно это меня и беспокоит.
Собственно я хотел узнать - есть ли регистр и значение на уровне реле, которое позволит инвертировать его значение. На уровне реле, соответственно.

Опишите пожалуйста гипотетическую ситуацию, в которой необходимо было бы решить проблему с инвертированием состояния выхода.

Сценарий типа “проходной выключатель”.
Когда на двух концах одной комнаты, один выключатель подключен физически к дискретному входу реле, а второй, по Z-Wave, к контроллеру. Z-Wave кнопка простая - просто отправляет одно и то же событие при каждом нажатии.
Если будет включен свет физически подключенным выключателем, то выключить его Z-Wave кнопкой не удастся, пока пока контроллер не опросит все устройства на шине.

Как только вы изменили состояние реле выключателем, появилась запись в MQTT об этом состоянии (понятно, что и в соответствующем регистре Modbus на устройстве это отобразилось также).
Далее нажатие Z-Wave кнопки приведет к срабатыванию назначенного на это правила.
А уже в этом правиле будет стоят операнд dev[“device”][“control”] = !dev[“device”][“control”].

В чем затык?

Как только вы изменили состояние реле выключателем, появилась запись в MQTT об этом состоянии

Не сразу она там появилась, как я понимаю, а только после того как контроллер запросил по Modbus состояние регистра. Запрашивает он у всех устройств на шине последовательно. Соответственно, чем больше устройств - тем больше времени пройдет до получения информации контроллером.
Я не проводил исследований, но согласно прочитанному на хабре и в других источниках, при 5-7 устройствах задержка составляет 0,5 сек. Понятно что эта цифра зависит от скорости шины, таймаутов и т.п., однако оценочная цифра, как я понимаю такова.

Вы хотите это проверить добежав через комнату менее чем за 0,5 с, чтобы нажать на Z-Wave? :slight_smile:
Не понимаю в чем проблема?

Устройств может быть не 5, а десятки.
Людей в комнате может быть больше одного и у них могут быть разные мнения о необходимости освещенности в помещении.
С одной стороны это может казаться мелочью.
С другой - мало что так бесит людей, в повседневной жизни, как несрабатывающий интерфейс. Даже просто тормозящий. А тут будет именно несрабатывающий.
И чем больше и дороже проект - тем заметнее будет проблема.

Пример можно обобщить:
Кнопка подключена к дискретному входу реле (локальное управление),
И есть необходимость инвертировать состояние реле с контроллера (из правил). Не важно, обрабатывать нажатие Z-Wave-кнопки или кнопки, подключенной к WBIO-DI-DR, или вообще отрабатывать задачу по таймеру.

Смотрите, что можно сделать:

  1. Увеличить скорость опроса выбранных каналов: https://wirenboard.com/wiki/index.php/RS-485:Configuration_via_Web_Interface (см. раздел “Настройка периода опроса”)
  2. Дождаться выхода устройств с новой прошивкой, где будет возможно инвертировать состояние реле по изменению состояния входа: https://wirenboard.com/wiki/index.php/I/O_Mapping_Matrix

С первым пунктом все более или менее понятно. Как будет работать на практике - надо смотреть.
А вот со вторым - это очень интересно. Однако там написано про инверсию “по состоянию входа”. У меня же задача делать инверсию с контроллера. Т.е. не состоянием входа, а командой с контроллера.
Покрывается ли такой сценарий новой прошивкой?

1 лайк

И второй вопрос, если сейчас дискретный вход не инвертирует состояние канала - как им управлять совместно с контроллером?
Сценарий:
1)вход на реле был замкнут - замкнут вход, замкнут канал.
2) пришла команда с контроллера разомкнуть канал - замкнут вход, разомкнут канал.
3) теперь чтобы входом снова замкнуть канал нужно сначала разомкнуть вход, затем замкнуть. Так?

Командой с контроллера такого не сделать даже с новой прошивкой, верно. Костыли: если у вас нет проышленно-критических задач, можете сделать виртуальное устройство, и одновременно с командой, отправляемой на модуль, изменять состояние виртуального контрола, и затем отправлять команду в соответствии с состоянием этого контрола на включение или выключение. Контрол можно обновлять (с задержкой) по фактическому состоянию устройства. Вероятность того, что устройство не отработает после отправки команды есть, но очень небольшая.

Второй вопрос. Вы можете отвязать реле от входов, и эмулировать логику программно, тут только входы надо опрашивать быстро, чтобы минимизировать задержки, или использовать WBIO-модуль для сухих контактов; реакция на изменение входов WBIO – практически real-time.

Если реле от входов не отвязывать, то реле могут управляться и контроллером, и входами. Если вход настроен на режим работы с выключателем с фиксацией, то:
пример: вы включили выключатель – свет включился, отправили команду с контроллера на выключение – свет выключился, выключили выключатель – ничего не произошло, свет не горит.
и так далее.