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

Как только вы изменили состояние реле выключателем, появилась запись в 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.

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

Спасибо. Это выглядит хоть и костылями, но тем не менее - решением.
Виртуальное устройство - можно чуть большее информации, как оно делается?
И еще,если я куплю реле WB-MR6 сейчас, то можно ли его будет впоследствии перешить новой прошивкой?

Виртуальные устройства: примеры можно найти в документации на странице описания движка правил: https://wirenboard.com/wiki/index.php/Движок_правил_wb-rules
Технически перепрошить будет можно, но только с отправкой модуля к нам. Или договориться и подъехать в Долгопрудный.

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

Дело за малым – выпустить прошивку :slight_smile:

А какие перспективы по выходу прошивки? По крайней мере это снимает одну проблему, что неплохо.
И можно ли внести предложение о добавлении функционала инверсии с контроллера?

Перспективы не очень понятные, в этом году, возможно. Предложение, конечно, даже нужно внести – в раздел Feature Requests. Прямо пишите, что и как вы хотите.

А можно попросить еще вот момент про “настройку на выключатели с фиксацией” развернуть?
Я не нашел этого пункта в описании WB-MR6. Есть в описаниях к другим типам реле, которые в вашем магазине не представлены.
Я так понял что если кнопка без фиксации - она как раз будет инвертировать состояние канала?
Этот функционал актуален для WB-MR6?

Да, поддерживает. Карта регистров общая для всех релейных модулей с точностью до аппаратных возможностей (количество реле, наличие и количество входов).

На самом деле, прошивка для семейства релейных модулей с поддержкой маппинг-матрицы выйдет уже скоро, ориентировочно в начале февраля, и как только выйдет - все устройства начнем отгружать уже с ней. Но например в устройстве WB-MWAC этот функционал уже реализован.
Также прошу обратить Ваше внимание, что статья на вики по маппинг-матрице находится в процессе редактирования, чтобы не было каких-то недоразумений.

А есть ли топики, которые в ответ на запрос отправляют текущее состояния контролла, к которому относятся?
Например топиком
/devices/MR3-1/controls/K1/on 1
я могу дать команду реле замкнуть. Мне тут же приходит изменение топика
/devices/MR3-1/controls/K1 1
(т.е., например, К1 включился). А я хочу отправить команду, чтобы в ответ получить
/devices/MR3-1/controls/K1 с текущим состоянием.
Как это сделать?

Так на /devices/MR3-1/controls/K1 и подписывайтесь

не так все просто, мне кажется.
Если я хочу получить текущее состояние, что должен сделать? Не во время изменения, а прямо сейчас?