Wirenboard: входы-выходы и скрипты

Итак, перейдём на следующую ступень сложности и познакомимся, во-первых, с взаимодействием входов и выходов модулей реле, во-вторых, со скриптами. Напомню про мои прочие статьи про Wirenboard:

Взаимодействие входов и выходов

У модулей Wirenboard (названия модулей начинаются на «WB-«, в отличие от «WBIO» и прочих), подключаемых по modbus, есть входы и выходы. Выходы обычно сверху, а входы снизу.

Wirenboard: входы-выходы и скрипты

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

Разумеется, заданные значения зависимостей выходов от входов работают даже при полностью отключенном от контроллера модуле. То есть, мы можем записать в модули реле нужные нам варианты взаимодействия, отключить контроллер от шины вообще и управлять светом с выключателей. Причём, удобно подключая проходные выключатели: кнопки, выполняющие одинаковые действия, подключатся на одни и те же входы. Как я уже писал многократно, управление сложным светом даже при отсутствии желания ставить систему Умный Дом я рекомендую делать именно на таких реле и диммерах в щите, это крайне удобно и гибко.

Зависимости выходов от входов записаны в модулях в ячейки памяти. Ячейки в памяти модуля называются регистрами. У каждой ячейки есть адрес — это просто цифра. Для записи значений в регистры даже контроллер Wirenboard не нужен, достаточно переходника с USB на RS485. Если не планируете ставить контроллер Wirenboard, то можно либо заранее вывести витую пару шины modbus в удобное место (к рабочему столу) для подключения переходника на USB, либо вместо контроллера поставить компьютер типа Raspberry с таким переходником. Но с контроллером Wirenboard удобнее, так как будет доступно обновление программного обеспечения и более удобная визуальная настройка.

Поскольку у меня есть контроллер Wirenboard, буду работать через него. Нам нужно подключиться к контроллеру через ssh простой бесплатной программой putty. Как это сделать, описано в этой статье.

Для записи значения в ячейку памяти (регистр) модуля нам надо знать номер порта RS485 на контроллере Wirenboard (1 или 2 обычно) адрес модуля, номер регистра и записываемое значение. Адрес модуля по умолчанию, напомню, написан на самом модуле (на фото ниже — адрес 69).

Wirenboard: входы-выходы и скрипты

Для начала работы с ячейками памяти надо в командной строке остановить выполнение драйвера mqtt serial командой

service wb-mqtt-serial stop

После окончания записи нужных значений в ячейки памяти драйвер надо запустить обратно

service wb-mqtt-serial start

Есть простое взаимодействие входов и выходов, а есть сложное. Простое, в принципе, покрывает большинство потребностей. Сложное — это mapping-матрица, про неё напишу ниже.

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

Wirenboard: входы-выходы и скрипты

В каждый регистр записана цифра от 0 до 5, которая определяет режим работы выхода по входу.

  • 0 — работа с выключателем без фиксации. Выход меняется при срабатывании входа.
  • 1 — работа с выключателем с фиксацией. Выход повторяет вход.
  • 2 — при срабатывании входа выключаются все выходы модуля.
  • 3 — вход никак не влияет на выходы
  • 4 — управление происходит в соответствии с mapping-матрицей
  • 5 — управление происходит в соответствии с mapping-матрицей, а через 20 минут после переключения Modbus-командой состояние приводится согласно входам. Это специальный режим для модуля контроля протечки воды.

Чуть подробнее про режимы написано в этой статье в документации Wirenboard.

По умолчанию в новом модуле задан режим работы 1, для выключателей с фиксацией. Для изменения режима на выключатели без фиксации (кнопок) надо поменять режим на 0. То есть, надо записать 0 в регистры с 9 по 14.

Команда для записи значения 0 в регистр 9 модуля 69 выглядит так:

modbus_client —debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a69 -t0x06 -r9 0

  • modbus_client — это название утилиты, которая работает с modbus.
  • /dev/ttyRS485-1 — это порт. Если модуль подключен к порту 2, но надо в конце поставить цифру 2 вместо 1.
  • -a69 — адрес модуля.
  • -r9 номер регистра.
  • 0 — записываемое значение.
  • -t0x06 — код функции, который определяет, что мы хотим сделать.

Возможные значения кода функции:

  • 0x06 — запись одного значения
  • 0х10 — запись нескольких значений
  • 0x03 — чтение нескольких значений

Используем возможность записи нескольких значений, чтобы одной командой прописать 0 в регистры с 9 по 14.

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1
-a69 -t0x10 -r9 0 0 0 0 0 0

Этой командой записываются ноли в ячейку 9 и последующие 5 ячеек. Если всё нормально, то PuTTY напишет нам «Syccess: written 6 elements!»

Wirenboard: входы-выходы и скрипты

В ячейку 16 логично прописать 2 для того, чтобы вход модуля номер 0 выключал все выходы.

modbus_client —debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a69 -t0x06 -r16 2

Любой вход можно вообще отключить от выхода (значение 3) и написать в контроллере скрипт на срабатывание этого входа.

Прочитаем значение регистра, использовав значение функции 0x03:

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1
-a69 -t0x03 -r16
Wirenboard: входы-выходы и скрипты

Нас интересует то, что написано в последней строчке Data, сейчас это 0.

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

Mapping-матрица

Напомню, mapping-матрица нужна, когда мы хотим по срабатыванию одного входа управлять выходом с другим номером или несколькими выходами. Для начала надо включить работу по матрице записью кода 4 в регистры с 9 по 14.

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1
-a69 -t0x10 -r9 4 4 4 4 4 4

Mapping-матрица — это таблица в памяти модуля, в которой по строкам идут входы, по столбцам выходы, а в самой таблице записаны значения, определяющие поведение выхода при срабатывании входа.

Понятие mapping-матрицы относится к релейным модулям WB-MR, подключаемым к контроллеру по modbus, и модулю контроля протечки воды WB-MWAC.

Вот статья документации по этой теме: https://wirenboard.com/wiki/I/O_Mapping_Matrix

Wirenboard: входы-выходы и скрипты

В ячейке памяти модуля №384 значение показывает, что делает выход №1 при срабатывании входа №1. Ячейка 385 — что делает выход №2 при срабатывании входа №1. Ячейка 410 — что делает выход №3 при срабатывании входа №4.

Теперь о том, какие значения могут быть записаны в эти ячейки. Это цифра от 0 до 15, то есть, существует 16 вариантов взаимодействия входа и выхода. Я не буду перечислять все варианты (они в документации по ссылке выше), перечислю самые используемые.

  • 0 — нет взаимодействия, вход не управляет выходом вообще
  • 1 — при выключении входа выход выключается. При включении входа ничего не происходит.
  • 2 — при выключении входа выход включается
  • 3 — при выключении входа меняется состояние выхода
  • 4 — при включении входа выход включается
  • 5 — при любом изменении состояния входа выход выключается
  • 6 — при включении входа выход выключается, при выключении входа выход включается
  • 8 — при включении входа включается выход
  • 9 — при включении входа выход включается, при выключении входа выход выключается
  • 10 — при любом изменении состояния входа выход включается
  • 12 — при включении входа меняется состояния выхода

Из этого списка самые используемые значения это 12 (выключатель без фиксации) и 9 (выключатель фиксацией).

Для того, чтобы вход работал в соответствии с матрицей, надо не забыть включить матрицу для этого входа, записав значение 4 в соответствующий входу регистр 9, 10, 11, 12, 13, 14 или 16.

Далее можно действовать согласно статье Примеры программирования взаимодействия входов и выходов в документации Wirenboard.

Удобно ориентироваться на карту регистров модулей реле.

Скрипты

Большинство дальнейших настроек работы системы осуществляется с помощью написания скриптов. Язык скриптов достаточно просто, похож на JavaScript. В частности, написанием скриптов реализуются следующие вещи:

  • взаимодействие входов и выходов, находящихся на разных модулях
  • сценарии, запускаемые по срабатыванию входов, когда происходят много разных действий
  • всё, что касается управления климатом
  • всё, что происходит по расписанию
  • любые сложные сценарии, связанные с условиями и таймерами

Правила можно видеть и писать в web интерфейсе контроллера в разделе Scripts. Другой вариант — писать скрипты в удобном вам текстовом редакторе (например, Notepad++) и сохранять в память контроллера. Файлы с правилами хранятся на контроллере в виде текстовых файлов в папке /etc/wb-rules/.

Я не буду здесь приводить примеры скриптов и процесс их написания, так как в документации всё очень подробно описано. Полезные сведения раскиданы по нескольким статьям, которые не сразу находятся, поэтому приведу ссылки на страницы документации.

Для того, чтобы через web интерфейс запускать сценарии, задавать уставку температуры, менять настройки работы скриптов и настройки расписаний, создаются виртуальные устройства. Виртуальное устройство отображается как обычное устройство, это может быть элемент управления любого типа. В статье Как писать правила подробнее всего описано создание виртуальных устройств. Виртуальное устройство может быть переключателем, кнопкой, ползунком, индикатором, полем для ввода значения, кнопкой выбора цвета RGB, элементом отображения температуры, мощности, влажности, напряжения и так далее.

Огромное количество примеров правил можно найти на форуме техподдержки Wirenboard.

Loading

Умный дом или дом по уму
Комментарии: 2
  1. Валентин

    Эх, где была эта и две соседние статьи полгода назад, когда я разбирался в том, как все настраивать )
    В моем случае почему-то работа большинства скриптов через wb-rules занимает больше времени, чем через Node-Red, установленный на самом контроллере или даже на соседнем по сети сервере (последний вариант, похоже, самый быстрый). Сильней всего это у меня заметно по датчикам движения, через wb-rules свет включается ощутимо дольше. Возможно это только у меня так, конечно.

    1. Роман (автор)

      Этих статей не было, как не было у меня и опыта настройки оборудования. Рад, что сочли статьи полезными.

Добавить комментарий