Wb-mqtt-serial driver: различия между версиями

Материал из Wiren Board
(не показаны 233 промежуточные версии 9 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE: Драйвер wb-mqtt-serial}}
В настоящее время поддерживается работа с устройствами
== Описание ==
Modbus RTU, подключаемыми через RS-485.
[[Image: wb-mqtt-serial a few protocols.png |500px|thumb|right| Драйвер wb-mqtt-serial может одновременно опрашивать устройства, работающие по разным протоколам: <br> ​1 — виртуальный порт для устройств с протоколом Modbus TCP,<br> 2  — устройство работает по протоколу Modbus RTU,<br> 3 — устройство работает по протоколу DLMS]]
=== Общая информация ===
''wb-mqtt-serial'' — драйвер master-slave протоколов для устройств, подключённых:
* к шине RS-485 — протокол Modbus RTU и других;
* через Ethernet — протоколы Modbus TCP, Modbus over TCP и другие;
* к разъёмам MOD1–MOD3 — при наличии модулей расширения, использующих обмен по UART.


Драйвер опрашивает serial-устройства и публикует данные в топики [[MQTT|MQTT]]-брокера. Устройства и порты настраиваются через веб-интерфейс, подробнее в статье [[RS-485:Configuration via Web Interface | Начальное конфигурирование устройств через веб-интерфейс]].
Конфигурация драйвера задаётся в файле /etc/wb-homa-modbus.conf


Wb-mqtt-serial использует систему JSON-шаблонов, которые описывают подключённые устройства: тип протокола, номера регистров, название параметров и контролов в веб-интерфейсе контроллера. В стандартной поставке есть шаблоны для всех устройств Wiren Board, а также некоторых сторонних устройств: счётчики электроэнергии, частотные преобразователи, холодильные контроллеры и другие.
Останов драйвера: - <code>service wb-homa-modbus stop</code>


Если ваше устройство работает по поддерживаемому драйвером протоколу, но в стандартной поставке под него нет шаблона — можете написать шаблон сами: [[Connecting_Third_Party_Devices_to_Wiren_Board | Подключение стороннего Modbus-устройства к контроллеру Wiren Board]].
Запуск драйвера: <code>service wb-homa-modbus start</code>


Файлы и папки:
Запуск драйвера в принудительном отладочном режиме:
* <code>/etc/wb-mqtt-serial.conf</code> — файл настроек драйвера, редактировать вручную не рекомендуем;
* <code>/usr/share/wb-mqtt-serial/templates</code> — папка с предустановленными шаблонами;
* <code>/etc/wb-mqtt-serial.conf.d/templates</code> — папка для пользовательских шаблонов, которые имеют приоритет над предустановленными.


Если вы добавили свой шаблон или изменили существующий, подождите 20 секунд, а потом перезагрузите страницу конфигуратора в веб-интерфейсе клавишами <kbd>Ctrl</kbd>+<kbd>F5</kbd> или перезапустите сервис: <syntaxhighlight lang="bash>systemctl restart wb-mqtt-confed</syntaxhighlight>
<code>wb-homa-modbus -c /etc/wb-homa-modbus.conf -d</code>


О том, как получить доступ к файлам и папкам, читайте в статье [[View controller files from your computer|Просмотр файлов контроллера с компьютера]].
====MSU34+TLP, MSU24 и MSU21 и подобные устройства====


Полное описание драйвера, список поддерживаемых протоколов и примеры шаблонов, смотрите '''[https://github.com/contactless/wb-mqtt-serial в репозитории на Github]'''.
Сайт производителя - http://www.razumdom.ru/


=== Особенности ===
Документация:
При работе с Modbus-устройствами, драйвер оптимизирует запросы к устройствам: считывает несколько регистров подряд, не выдерживает некоторые задержки, рекомендованные стандартом.


Поэтому при написании шаблона для сторонних Modbus-устройств, нужно указать параметр ''guard_interval_us'', который рассчитывается по формуле:
http://www.razumdom.ru/userfiles/file/Modbus/MSU21.pdf
<syntaxhighlight lang="js">
guard_interval_us = (3.5*11*10^6)/(скорость в бит/с)
</syntaxhighlight>
Так же этот параметр можно установить через веб-интерфейс:
* Guard interval (us) — для порта.
* Additional delay before each writing to port (us) — для устройства.


Если при чтении регистра устройства возникла ошибка, то соответствующий контрол в веб-интерфейсе  будет окрашен в красный цвет. Аналогично с устройством — если оно давно не отвечает, то все его контролы будут окрашены красным.
http://www.razumdom.ru/userfiles/file/Modbus/MSU24.pdf


== Управление драйвером ==
http://www.razumdom.ru/userfiles/file/Modbus/MSU34.pdf


Обычно драйвер запускается автоматически при загрузке контроллера и перезапускается при сохранении файла конфигурации в веб-интерфейсе.
Устройства выдают значения с датчиков через
input-регистры. Для значений температуры используются
8-битные знаковые значения без расширения знака
на старшие 8 бит input-регистра, вследствие
чего для значений температуры в конфигурационном
файле необходимо указывать "format": "s8".


Также можно управлять драйвером в ручном режиме — это может быть полезно для поиска ошибок в конфигурационном файле или если вам нужно освободить порт для использования [[modbus-client | modbus_client]].
Подключаемые к устройству датчики конфигурируются
через holding-регистры (см. описание). Для конфигурации
датчиков можно использовать команду <code>modbus_client</code>,
или сделать setup-секцию в конфигурации драйвера.


Для выполнения команд подключитесь к контроллеру по [[SSH]]. Доступны команды:
Для установки адреса slave можно использовать скрипт
<syntaxhighlight lang="bash">
set-rd-address.sh. При этом необходимо убедиться, что к
systemctl stop wb-mqtt-serial # остановить
порту RS-485 было подлкючено только то устройство,
systemctl start wb-mqtt-serial # запустить
у которого необходимо сменить адрес, затем выполнить
systemctl restart wb-mqtt-serial # перезапустить
команду:
wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -d # запустить в отладочном режиме с указанием пути к конфигурационному файлу
<pre>
</syntaxhighlight>
set-rd.address.sh /dev/ttyNSC0 0x02
</pre>
Вместо 0x02 можно задать любой другой адрес
в диапазоне от 0 до 247 (0xf7).


== Диагностика неполадок ==
Пример конфигурации:
Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину: выполните команду <code>systemctl status wb-mqtt-serial</code> и в последних двух строчках ответа будет подсказка.
<pre>
{
    "debug": false,
    "ports": [
        {
            "path" : "/dev/ttyNSC0",
            "baud_rate": 9600,
            "parity": "N",
            "data_bits": 8,
            "stop_bits": 2,
            "poll_interval": 10,
            "enabled": true,
            "devices" : [
                {
                    "name": "MSU34+TLP",
                    "id": "msu34tlp",
                    "slave_id": 2,
                    "enabled": false,
                    "channels": [
                        {
                            "name" : "Temp 1",
                            "reg_type" : "input",
                            "address" : 0,
                            "type": "temperature",
                            "format": "s8"
                        },
                        {
                            "name" : "Illuminance",
                            "reg_type" : "input",
                            "address" : 1,
                            "type": "text"
                        },
                        {
                            "name" : "Pressure",
                            "reg_type" : "input",
                            "address" : 2,
                            "type": "text",
                            "scale": 0.075
                        },
                        {
                            "name" : "Temp 2",
                            "reg_type" : "input",
                            "address" : 3,
                            "type": "temperature",
                            "format": "s8"
                        }
                    ]
                }
            ]
        }
    ]
}
</pre>


В примере файл конфигурации содержит синтаксическую ошибку во второй строке на 14 позиции:
Пример конфигурации MSU21 с секцией инициализации ("setup"):
<syntaxhighlight lang="console">
<pre>
# systemctl status wb-mqtt-serial
                {
● wb-mqtt-serial.service - MQTT Driver for serial devices
                    "name": "MSU21",
  Loaded: loaded (/lib/systemd/system/wb-mqtt-serial.service; enabled; vendor preset: enabled)
                    "id": "msu21",
  Active: inactive (dead) since Thu 2021-01-28 15:10:51 +04; 4s ago
                    "slave_id": 24,
  Process: 23682 ExecStart=/usr/bin/wb-mqtt-serial (code=exited, status=0/SUCCESS)
                    "enabled": true,
Main PID: 23682 (code=exited, status=0/SUCCESS)
                    "setup": [
                        {
                            "title": "Input 0 type",
                            "address": 1,
                            "value": 2
                        },
                        {
                            "title": "Input 0 module",
                            "address": 3,
                            "value": 6
                        }
                    ],
                    "channels": [
                        {
                            "name" : "Temperature",
                            "reg_type" : "input",
                            "address" : 0,
                            "type": "temperature",
                            "format": "s8"
                        }
                    ]
                }
</pre>


Jan 28 15:10:47 wirenboard-A6XXXT2R systemd[1]: Started MQTT Driver for serial devices.
====Исполнительный модуль релейный восьмиканальный DRB88====
Jan 28 15:10:51 wirenboard-A6XXXT2R wb-mqtt-serial[23682]: ERROR: [serial] Failed to parse JSON /etc/wb-mqtt-serial.conf:* Line 2, Column 14
Jan 28 15:10:51 wirenboard-A6XXXT2R wb-mqtt-serial[23682]:  Syntax error: value, object or array expected.
</syntaxhighlight>


Проверить только шаблоны, в том числе и не подключённые в файле конфигурации, можно командой:
Сайт производителя - http://www.razumdom.ru/
<syntaxhighlight lang="console">
# wb-mqtt-serial -g
<3>ERROR: [serial config] Failed to parse /usr/share/wb-mqtt-serial/templates/config-bac-6000-series.json
Failed to parse JSON /usr/share/wb-mqtt-serial/templates/config-bac-6000-series.json:* Line 12, Column 5
  Missing ',' or '}' in object declaration
</syntaxhighlight>


Проверить файл конфигурации и шаблоны на ошибки:
Документация:
<syntaxhighlight lang="console">
# wb-mqtt-serial -j
<3>ERROR: [serial config] Failed to parse /usr/share/wb-mqtt-serial/templates/config-wb-mdm3.json
Failed to parse JSON /usr/share/wb-mqtt-serial/templates/config-wb-mdm3.json:* Line 8, Column 9
  Missing ',' or '}' in object declaration


<3>ERROR: [serial] Can't find template for 'WB-MDM3'
http://www.razumdom.ru/userfiles/file/Modbus/DDL24.pdf
</syntaxhighlight>


При необходимости, можно добавить путь к файлу, который нужно проверить:
Устройство предназначено для управления светодиодными
<syntaxhighlight lang="bash">
лентами RGBW сигналами ШИМ или для управления приводами
wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -j
сигналами 0-10 В.
</syntaxhighlight>


== Включение отладки==
Управление осуществляется записью значений в
[[Файл:Serial Web config.png|400px|thumb|right|Веб-интерфейс. Флажок ''Enable debug logging'' установлен, отладка включена]]
holding-регистры.
Иногда нужно включить отладочный режим драйвера. Это можно сделать из [[#Управление драйвером | командной строки]] или через веб-интерфейс.


{{note|info| При включённой отладке размер системного журнала будет быстро расти, поэтому не забудьте отключить отладку, когда необходимость в ней отпадет.}}
Как и в случае с устройствами MSU*, адрес
modbus slave устанавливается командой
set-rd-address.sh.
<pre>
set-rd-address.sh /dev/ttyNSC0 0x17 0x00
</pre>
Здесь происходит установка slave-адреса
в 0x17. Дополнительное значение
0x00 нужно, т.к. DDL24 использует для
конфигурации адреса holding-регистр 0x00,
а не 0x80, используемый скриптом set-rd-address.sh
по умолчанию.


Включение отладки через [[Wiren Board Web Interface|веб-интерфейс]]:
Пример конфигурации:
# Зайдите в веб-интерфейс контроллера
<pre>
# Если вы работаете под обычным пользователем, то смените [[RS-485:Configuration via Web Interface#Смена уровня доступа к веб-интерфейсу| уровень доступа]]
                {
# Перейдите '''Settings''' → '''Configs''' → '''Serial Device Driver Configuration'''
                    "name": "DDL24",
# Установите флажок '''Enable debug logging'''
                    "id": "ddl24",
# Нажмите на кнопку '''Save''', чтобы сохранить настройки.
                    "enabled": true,
                    "slave_id": 23,
                    "channels": [
                        {
                            "name" : "Red",
                            "reg_type" : "holding",
                            "address" : 4,
                            "type": "range",
                            "max": 255
                        },
                        {
                            "name" : "Green",
                            "reg_type" : "holding",
                            "address" : 5,
                            "type": "range",
                            "max": 255
                        },
                        {
                            "name" : "Blue",
                            "reg_type" : "holding",
                            "address" : 6,
                            "type": "range",
                            "max": 255
                        },
                        {
                            "name" : "White",
                            "reg_type" : "holding",
                            "address" : 7,
                            "type": "range",
                            "max": 255
                        },
                        {
                            "name" : "RGB",
                            "reg_type" : "holding",
                            "address" : 8,
                            "type": "range",
                            "max": 100
                        },
                        {
                            "name" : "White1",
                            "reg_type" : "holding",
                            "address" : 9,
                            "type": "range",
                            "max": 100
                        },
                        {
                            "name" : "Voltage",
                            "reg_type" : "holding",
                            "address" : 18,
                            "type": "text"
                        }
                    ]
                }
</pre>


Теперь в системный журнал будут записываться отправленные и принятые драйвером пакеты.
====Исполнительный модуль релейный восьмиканальный DRB88====


Чтобы посмотреть debug-вывод драйвера, выполните в консоли контроллера команду <code>journalctl -e -p 7</code>, где <code>-e</code> — отобразить последние записи, а <code>-p 7</code> задает уровень сообщений, где 7 — это debug. Подробнее о параметрах утилиты, читайте в статье [[journalctl]].
Сайт производителя - http://www.razumdom.ru/


Пример вывода команды:
Документация:
<syntaxhighlight lang="bash">
~# journalctl -e -p 7
Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [serial port driver] channel 'Urms L1' of device 'wb-modbus-0-0' <-- 224.647
Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [modbus] read 2 input(s) @ 5136 of device modbus:142
Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [port] Sleep 0 us
Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [port] Write: 8e 04 14 10 00 02 6a c1
Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [port] Sleep 10000 us
Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [port] ReadFrame: 16 04 02 0f 3d 09 12
Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [register handler] new val for input @ 3 of device modbus:22: f3d
Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [serial port driver] register value change: input @ 3 of device modbus:22 <- 39.01
</syntaxhighlight>


== Полезные ссылки ==
http://www.razumdom.ru/userfiles/file/Modbus/DRB88S16_v14.pdf
* [[Connecting_Third_Party_Devices_to_Wiren_Board | Как подключить стороннее Modbus-устройство]]
 
* [https://github.com/contactless/wb-mqtt-serial Описание wb-mqtt-serial на Github]
Исполнительные модули DRB88 предназначены для создания
* [[Modbus|Описание протокола Modbus]]
систем автоматизации зданий. При работе по протоколу Modbus
* [[Fast_Modbus| Описание расширения Быстрый Modbus]]
поддерживается работа с реле через coils и с входами
* [[RS-485|Описание шины RS-485]]
через input registers.
 
Для установки адреса slave можно использовать скрипт
set-rd-address.sh. При этом необходимо убедиться, что к
порту RS-485 было подлкючено только то устройство,
у которого необходимо сменить адрес, затем выполнить
команду:
<pre>
set-rd.address.sh /dev/ttyNSC0 0x16
</pre>
Вместо 0x16 можно задать любой другой адрес
в диапазоне от 0 до 247 (0xf7).
 
Настройка типов input'ов осуществляется через
holding-регистры (см. описание). Для задания конфигурации
можно использовать команду <code>modbus_client</code>,
или сделать setup-секцию в конфигурации драйвера.
 
Пример конфигурации:
<pre>
                {
                    "name": "DRB88",
                    "id": "drb88",
                    "enabled": true,
                    "slave_id": 22,
                    "setup": [
                        {
                            "title": "Input 0 type",
                            "address": 1,
                            "value": 1
                        },
                        {
                            "title": "Input 0 module",
                            "address": 3,
                            "value": 3
                        }
                    ],
                    "channels": [
                        {
                            "name" : "Relay 1",
                            "reg_type" : "coil",
                            "address" : 0,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 2",
                            "reg_type" : "coil",
                            "address" : 1,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 3",
                            "reg_type" : "coil",
                            "address" : 2,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 4",
                            "reg_type" : "coil",
                            "address" : 3,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 5",
                            "reg_type" : "coil",
                            "address" : 4,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 6",
                            "reg_type" : "coil",
                            "address" : 5,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 7",
                            "reg_type" : "coil",
                            "address" : 6,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 8",
                            "reg_type" : "coil",
                            "address" : 7,
                            "type": "switch"
                        },
                        {
                            "name" : "Input 1",
                            "reg_type" : "input",
                            "address" : 0,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 2",
                            "reg_type" : "input",
                            "address" : 1,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 3",
                            "reg_type" : "input",
                            "address" : 2,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 4",
                            "reg_type" : "input",
                            "address" : 3,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 5",
                            "reg_type" : "input",
                            "address" : 4,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 6",
                            "reg_type" : "input",
                            "address" : 5,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 7",
                            "reg_type" : "input",
                            "address" : 6,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 8",
                            "reg_type" : "input",
                            "address" : 7,
                            "type": "switch",
                            "on_value": 101
                        }
                    ]
                }
</pre>
 
====Модуль ввода-вывода ICP DAS tM-P3R3====
 
http://www.icpdas.com/root/product/solutions/remote_io/rs-485/tm-series/tm-p3r3.html
 
Описание: http://www.icpdas.com/root/product/solutions/datasheet/tm-series/tM-Series_DIO_User_Manual.pdf
 
Модуль имеет 3 канала дискретного ввода, доступных через discrete inputs,
и 3 канала релейного вывода, доступного через coils.
 
Пример конфигурации:
<pre>
                {
                    "name": "tM-P3R3",
                    "id": "tmp3r3",
                    "enabled": true,
                    "slave_id": 1,
                    "channels": [
                        {
                            "name" : "Relay 0",
                            "reg_type" : "coil",
                            "address" : 0,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 1",
                            "reg_type" : "coil",
                            "address" : 1,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 2",
                            "reg_type" : "coil",
                            "address" : 2,
                            "type": "switch"
                        },
                        {
                            "name" : "Input 0",
                            "reg_type" : "discrete",
                            "address" : 32
                        },
                        {
                            "name" : "Input 1",
                            "reg_type" : "discrete",
                            "address" : 33
                        },
                        {
                            "name" : "Input 2",
                            "reg_type" : "discrete",
                            "address" : 34
                        }
                    ]
                }
</pre>
 
====Модуль управления освещением ICP DAS LC-103====
 
http://www.icpdas.com/root/product/solutions/remote_io/rs-485/lighting_control/lc-103.html
 
Описание: http://www.icpdas-europe.com/uploads/tx_v4icpdascatalog/K128992/web/icpdas/manual-lc-103.pdf
 
Модуль имеет 3 релейных вывода и один дискретный вход, допускающий
подключение к сети переменного тока.
 
Адрес Modbus slave задаётся при помощи физического переключателя.
 
Пример конфигурации:
<pre>
                {
                    "name": "LC-103",
                    "id": "lc103",
                    "enabled": true,
                    "slave_id": 4,
                    "channels": [
                        {
                            "name" : "Relay 1",
                            "reg_type" : "coil",
                            "address" : 0,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 2",
                            "reg_type" : "coil",
                            "address" : 1,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 3",
                            "reg_type" : "coil",
                            "address" : 2,
                            "type": "switch"
                        },
                        {
                            "name" : "Switch AC In",
                            "reg_type" : "discrete",
                            "address" : 0
                        }
                    ]
                }
</pre>

Версия 03:56, 15 августа 2014

В настоящее время поддерживается работа с устройствами Modbus RTU, подключаемыми через RS-485.

Конфигурация драйвера задаётся в файле /etc/wb-homa-modbus.conf

Останов драйвера: - service wb-homa-modbus stop

Запуск драйвера: service wb-homa-modbus start

Запуск драйвера в принудительном отладочном режиме:

wb-homa-modbus -c /etc/wb-homa-modbus.conf -d

MSU34+TLP, MSU24 и MSU21 и подобные устройства

Сайт производителя - http://www.razumdom.ru/

Документация:

http://www.razumdom.ru/userfiles/file/Modbus/MSU21.pdf

http://www.razumdom.ru/userfiles/file/Modbus/MSU24.pdf

http://www.razumdom.ru/userfiles/file/Modbus/MSU34.pdf

Устройства выдают значения с датчиков через input-регистры. Для значений температуры используются 8-битные знаковые значения без расширения знака на старшие 8 бит input-регистра, вследствие чего для значений температуры в конфигурационном файле необходимо указывать "format": "s8".

Подключаемые к устройству датчики конфигурируются через holding-регистры (см. описание). Для конфигурации датчиков можно использовать команду modbus_client, или сделать setup-секцию в конфигурации драйвера.

Для установки адреса slave можно использовать скрипт set-rd-address.sh. При этом необходимо убедиться, что к порту RS-485 было подлкючено только то устройство, у которого необходимо сменить адрес, затем выполнить команду:

set-rd.address.sh /dev/ttyNSC0 0x02

Вместо 0x02 можно задать любой другой адрес в диапазоне от 0 до 247 (0xf7).

Пример конфигурации:

{
    "debug": false,
    "ports": [
        {
            "path" : "/dev/ttyNSC0",
            "baud_rate": 9600,
            "parity": "N",
            "data_bits": 8,
            "stop_bits": 2,
            "poll_interval": 10,
            "enabled": true,
            "devices" : [
                {
                    "name": "MSU34+TLP",
                    "id": "msu34tlp",
                    "slave_id": 2,
                    "enabled": false,
                    "channels": [
                        {
                            "name" : "Temp 1",
                            "reg_type" : "input",
                            "address" : 0,
                            "type": "temperature",
                            "format": "s8"
                        },
                        {
                            "name" : "Illuminance",
                            "reg_type" : "input",
                            "address" : 1,
                            "type": "text"
                        },
                        {
                            "name" : "Pressure",
                            "reg_type" : "input",
                            "address" : 2,
                            "type": "text",
                            "scale": 0.075
                        },
                        {
                            "name" : "Temp 2",
                            "reg_type" : "input",
                            "address" : 3,
                            "type": "temperature",
                            "format": "s8"
                        }
                    ]
                }
            ]
        }
    ]
}

Пример конфигурации MSU21 с секцией инициализации ("setup"):

                {
                    "name": "MSU21",
                    "id": "msu21",
                    "slave_id": 24,
                    "enabled": true,
                    "setup": [
                        {
                            "title": "Input 0 type",
                            "address": 1,
                            "value": 2
                        },
                        {
                            "title": "Input 0 module",
                            "address": 3,
                            "value": 6
                        }
                    ],
                    "channels": [
                        {
                            "name" : "Temperature",
                            "reg_type" : "input",
                            "address" : 0,
                            "type": "temperature",
                            "format": "s8"
                        }
                    ]
                }

Исполнительный модуль релейный восьмиканальный DRB88

Сайт производителя - http://www.razumdom.ru/

Документация:

http://www.razumdom.ru/userfiles/file/Modbus/DDL24.pdf

Устройство предназначено для управления светодиодными лентами RGBW сигналами ШИМ или для управления приводами сигналами 0-10 В.

Управление осуществляется записью значений в holding-регистры.

Как и в случае с устройствами MSU*, адрес modbus slave устанавливается командой set-rd-address.sh.

set-rd-address.sh /dev/ttyNSC0 0x17 0x00

Здесь происходит установка slave-адреса в 0x17. Дополнительное значение 0x00 нужно, т.к. DDL24 использует для конфигурации адреса holding-регистр 0x00, а не 0x80, используемый скриптом set-rd-address.sh по умолчанию.

Пример конфигурации:

                {
                    "name": "DDL24",
                    "id": "ddl24",
                    "enabled": true,
                    "slave_id": 23,
                    "channels": [
                        {
                            "name" : "Red",
                            "reg_type" : "holding",
                            "address" : 4,
                            "type": "range",
                            "max": 255
                        },
                        {
                            "name" : "Green",
                            "reg_type" : "holding",
                            "address" : 5,
                            "type": "range",
                            "max": 255
                        },
                        {
                            "name" : "Blue",
                            "reg_type" : "holding",
                            "address" : 6,
                            "type": "range",
                            "max": 255
                        },
                        {
                            "name" : "White",
                            "reg_type" : "holding",
                            "address" : 7,
                            "type": "range",
                            "max": 255
                        },
                        {
                            "name" : "RGB",
                            "reg_type" : "holding",
                            "address" : 8,
                            "type": "range",
                            "max": 100
                        },
                        {
                            "name" : "White1",
                            "reg_type" : "holding",
                            "address" : 9,
                            "type": "range",
                            "max": 100
                        },
                        {
                            "name" : "Voltage",
                            "reg_type" : "holding",
                            "address" : 18,
                            "type": "text"
                        }
                    ]
                }

Исполнительный модуль релейный восьмиканальный DRB88

Сайт производителя - http://www.razumdom.ru/

Документация:

http://www.razumdom.ru/userfiles/file/Modbus/DRB88S16_v14.pdf

Исполнительные модули DRB88 предназначены для создания систем автоматизации зданий. При работе по протоколу Modbus поддерживается работа с реле через coils и с входами через input registers.

Для установки адреса slave можно использовать скрипт set-rd-address.sh. При этом необходимо убедиться, что к порту RS-485 было подлкючено только то устройство, у которого необходимо сменить адрес, затем выполнить команду:

set-rd.address.sh /dev/ttyNSC0 0x16

Вместо 0x16 можно задать любой другой адрес в диапазоне от 0 до 247 (0xf7).

Настройка типов input'ов осуществляется через holding-регистры (см. описание). Для задания конфигурации можно использовать команду modbus_client, или сделать setup-секцию в конфигурации драйвера.

Пример конфигурации:

                {
                    "name": "DRB88",
                    "id": "drb88",
                    "enabled": true,
                    "slave_id": 22,
                    "setup": [
                        {
                            "title": "Input 0 type",
                            "address": 1,
                            "value": 1
                        },
                        {
                            "title": "Input 0 module",
                            "address": 3,
                            "value": 3
                        }
                    ],
                    "channels": [
                        {
                            "name" : "Relay 1",
                            "reg_type" : "coil",
                            "address" : 0,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 2",
                            "reg_type" : "coil",
                            "address" : 1,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 3",
                            "reg_type" : "coil",
                            "address" : 2,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 4",
                            "reg_type" : "coil",
                            "address" : 3,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 5",
                            "reg_type" : "coil",
                            "address" : 4,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 6",
                            "reg_type" : "coil",
                            "address" : 5,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 7",
                            "reg_type" : "coil",
                            "address" : 6,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 8",
                            "reg_type" : "coil",
                            "address" : 7,
                            "type": "switch"
                        },
                        {
                            "name" : "Input 1",
                            "reg_type" : "input",
                            "address" : 0,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 2",
                            "reg_type" : "input",
                            "address" : 1,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 3",
                            "reg_type" : "input",
                            "address" : 2,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 4",
                            "reg_type" : "input",
                            "address" : 3,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 5",
                            "reg_type" : "input",
                            "address" : 4,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 6",
                            "reg_type" : "input",
                            "address" : 5,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 7",
                            "reg_type" : "input",
                            "address" : 6,
                            "type": "switch",
                            "on_value": 101
                        },
                        {
                            "name" : "Input 8",
                            "reg_type" : "input",
                            "address" : 7,
                            "type": "switch",
                            "on_value": 101
                        }
                    ]
                }

Модуль ввода-вывода ICP DAS tM-P3R3

http://www.icpdas.com/root/product/solutions/remote_io/rs-485/tm-series/tm-p3r3.html

Описание: http://www.icpdas.com/root/product/solutions/datasheet/tm-series/tM-Series_DIO_User_Manual.pdf

Модуль имеет 3 канала дискретного ввода, доступных через discrete inputs, и 3 канала релейного вывода, доступного через coils.

Пример конфигурации:

                {
                    "name": "tM-P3R3",
                    "id": "tmp3r3",
                    "enabled": true,
                    "slave_id": 1,
                    "channels": [
                        {
                            "name" : "Relay 0",
                            "reg_type" : "coil",
                            "address" : 0,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 1",
                            "reg_type" : "coil",
                            "address" : 1,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 2",
                            "reg_type" : "coil",
                            "address" : 2,
                            "type": "switch"
                        },
                        {
                            "name" : "Input 0",
                            "reg_type" : "discrete",
                            "address" : 32
                        },
                        {
                            "name" : "Input 1",
                            "reg_type" : "discrete",
                            "address" : 33
                        },
                        {
                            "name" : "Input 2",
                            "reg_type" : "discrete",
                            "address" : 34
                        }
                    ]
                }

Модуль управления освещением ICP DAS LC-103

http://www.icpdas.com/root/product/solutions/remote_io/rs-485/lighting_control/lc-103.html

Описание: http://www.icpdas-europe.com/uploads/tx_v4icpdascatalog/K128992/web/icpdas/manual-lc-103.pdf

Модуль имеет 3 релейных вывода и один дискретный вход, допускающий подключение к сети переменного тока.

Адрес Modbus slave задаётся при помощи физического переключателя.

Пример конфигурации:

                {
                    "name": "LC-103",
                    "id": "lc103",
                    "enabled": true,
                    "slave_id": 4,
                    "channels": [
                        {
                            "name" : "Relay 1",
                            "reg_type" : "coil",
                            "address" : 0,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 2",
                            "reg_type" : "coil",
                            "address" : 1,
                            "type": "switch"
                        },
                        {
                            "name" : "Relay 3",
                            "reg_type" : "coil",
                            "address" : 2,
                            "type": "switch"
                        },
                        {
                            "name" : "Switch AC In",
                            "reg_type" : "discrete",
                            "address" : 0
                        }
                    ]
                }