Сенсорные выключатель rs 07425
Сенсорные выключатели с Modbus: зачем нужны и как применить в умной квартире
В бюджетных системах умного дома обычно используют стандартные выключатели — их тип выхода также называют «сухой контакт». Однако это не единственный вариант: в поисках красивого выключателя я наткнулся на устройства с протоколом Modbus RTU внутри. Кроме красивого внешнего вида, они позволяют настроить режим работы каждой кнопки, детально управлять подсветкой, а для их подключения к центральному контроллеру (я использовал Wiren Board 5) достаточно четырёх проводов — питание, земля и две линии для RS-485.
Как подключить такой выключатель и настроить управление светом и вентиляцией с него, смотрите ниже. Также в статье будет подробно описано, как вообще работать с Modbus-устройствами.
Пояснение от маркетолога Wiren Board: эта статья родилась из темы, созданной Kallyanbl4 на нашем форуме. После нашей просьбы он написал полноценную статью и разрешил опубликовать её в нашем блоге, за что ему большое спасибо. Весь текст написан автором, кроме примечаний в конце.
Описание выключателей
Изучив, что сейчас есть на рынке, купил у китайцев вот такие интересные выключатели:
- неплохой дизайн;
- выключатели cенсорные, при нажатии мигают, подсвечиваются в темноте приятным белым цветом;
- относительно небольшая цена – 2000 рублей за штуку. В стоимость входит индивидуальная лазерная гравировка;
- выключатель программируемый — можно задать кнопке практически любое действие: включение света, управление светодиодами, поднять/опустить штору, .
Технические характеристики выключателя:
- напряжение питания – 12 В;
- скорость передачи данных — 19200 бит/с;
- количество передаваемых бит – 8;
- количество стоповых бит – 1;
- контроль чётности – нет проверки.
При работе по Modbus RTU подключаемые устройства имеют так называемые регистры – ячейки, в которых хранится информация. На скриншоте описание регистров для четырёхклавишного выключателя:
При нажатии на одну из сенсорных кнопок значения в регистрах 0-3 будет меняться с 0 на 1.
Коммутация выключателей
В контроллере Wiren Board 5 в зависимости от комплектации бывает от двух до четырёх портов RS-485. Выключатели (в моём случае их 27) необходимо присоединить к этим портам.
В данном случае все выключатели могут работать на одной общей шине. Выключатели можно соединить последовательно, ведя кабель от одного выключателя до другого, но я решил скоммутировать все кабели в одном щитке.
Соединяющий кабель — восьмижильный Cat 5e UTP. Можно использовать и четырёхжильный, но я обычно всё делаю по принципу «на всякий случай». Можно рассмотреть и другие четырёхжильные кабели, но важный момент – кабель должен быть экранированным, ибо даже несмотря на достаточно низкие частоты сигнала, потери и наводки не исключены.
В итоге все выключатели у меня соединены между собой как показано на картинке:
Как видно из рисунка, все выключатели соединены между собой с помощью пассивного UTP-коммутатора. По жилам 1 и 2 (оранжевая и бело-оранжевая) передается данные (линии A и B), к жилам 7 и 8 (коричневая и бело-коричневый) подключено питание 12 В. В качестве источника питания использую Mean Well NDR-75-12.
Я не знал, как поведет себя пассивный китайский UTP-коммутатор, поэтому при проектировании щитка предусмотрел место для активного RS-423 коммутатора. Отмечу, что схема работает как через пассивный, так и через активный коммутаторы. И даже при их совместном подключении.
Управление светом с помощью реле
По моему проекту в квартире запланированы 27 независимых устройств (свет, вентиляторы), питаемые от 220 В. Для управления ими были выбраны три релейных модуля WBIO-DO-R10A-8 и одно WBIO-DO-R10R-4. Выбор обусловлен тем, что практически всё освещение в квартире – светодиодное, которое отличается от ламп накаливания высоким пусковым током. Выбранные реле способны обеспечить коммутацию тока до 10 А на канал, что в моём случае излишне — но, как было указано ранее, «на всякий случай с запасом».
Переключение реле происходит через веб-интерфейс контроллера. Процедура интуитивно понятная, инструкция или подсказки не требуются.
Программная часть
Из описания аппаратной части Wiren Board 5 узнаём, что у него двум портам RS-485 соответствуют файлы устройств /dev/ttyAPP1 и /dev/ttyAPP4. В моём случае выключатель подключен к порту /dev/ttyAPP1.
Адрес устройства (выключателя)
При обмене данными по протоколу Modbus RTU каждое устройство идентифицируется собственным уникальным номером – Modbus-адресом. Как правило, производитель указывает этот адрес в виде трёх цифр на самом устройстве, но если такого номера на устройстве нет, можно перебрать адреса из командной строки (используется то, что адрес хранится в Modbus-регистре 0x80):
Результат должен быть в виде:
Ответ получен в шестнадцатеричном формате и соответствует цифре 142 в десятичном.
Стоит отметить, что при каждом вызове утилиты modbus_client следует останавливать стандартный для контроллера драйвер опроса wb-mqtt-serial; в противном случае утилита modbus_client работать не будет.
Обмен данными между выключателем и Wiren Board
Выше написан цикл, который опрашивает все возможные Modbus-адреса и возвращает значение адреса, если устройство найдено. В цикле задействована утилита modbus_client, которая необходима для отладки подключаемых устройств. В этом пункте с помощью неё убедимся, что всё подключено верно, и выключатель взаимодействует с контроллером должным образом. Для этого попробуем прочитать данные в регистре 0х01 выключателя:
(описание утилиты и её ключей есть в документации контроллера).
Результат будет следующего вида:
Такой результат означает, что в регистре записана дискретная величина 1. После нажатия на одну из кнопок выключателя значение регистра изменится на противоположное значение:
Если наблюдается результат, как в этом пункте, то значит все подключено верно, выключатель и контроллер понимают друг друга.
Собственный драйвер для выключателя
После того как мы убедились, что контроллер и выключатель понимают друг друга, настало время дать описание клавишам выключателя на программном уровне. Разработчики предлагают добавлять описание подключенного устройства в файл /etc/wb-mqtt-serial.conf или создать собственный шаблон в виде файла /usr/share/wb-mqtt-serial/templates/config-*.json
Я пошел по второму пути, мой шаблон выглядит так:
Детальное описание написанного выше шаблона есть в описании драйвера wb-mqtt-serial. Кратко разберёмся с полями:
- «name»: «All» – имя кнопки. Если шаблон написан верно, эта кнопка появится во вкладке Settings с адресом /devices/4bsw_142/controls/All
- «reg_type»: «holding» – тип и размер регистра. В выключателе используется «holding» – 16-битный регистр, доступный на чтение и запись.
- «address»: «0x00» – адрес регистра выключателя, из которого контроллер будет читать данные.
- «type»: «switch» – как выключатель будет отображаться в веб-интерфейсе. В случае «switch» — в виде дискретного переключателя.
Сохраняем шаблон на контроллер. После этого в разделе веб-интерфейса (Configs -> /etc/wb-mqtt-serial.conf) можно будет добавить новое устройство с таким шаблоном (4-band-switch). Добавляем наш первый выключатель и нажимаем Save.
Правило, включающее реле при нажатии кнопки выключателя
Внутри контроллера состояния всех подключенных устройств описываются MQTT-сообщениями. Управляются устройства также через отправку MQTT-сообщений. Клиентами очереди MQTT-сообщений (брокера) являются и веб-интерфейс, и движок правил.
Для наглядности посмотрим, как веб-интерфейс обрабатывает пришедшее сообщение. Открываем вкладку Settings веб-интерфейса и наблюдаем, что будет происходить при нажатии кнопки All выключателя: внутри выключателя поменяется значение Modbus-регистра, драйвер wb-mqtt-serial опросит выключатель, и в соответствии с шаблоном устройства 4-band-switch отправит MQTT-сообщение в топик /devices/4bsw_142/controls/All — и на странице Settings значение в топике /devices/4bsw_142/controls/All моментально изменится с 0 на 1.
Рассмотрим второго клиента – движок правил. Движок так же, как и веб-интерфейс, работает с очередью сообщений, и может среагировать на изменения значения — для этого используется функция whenChanged. В моём случае правило выглядело так:
На все вопросы буду рад ответить в комментариях.