Wb-mqtt-serial driver: различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
Строка 25: | Строка 25: | ||
#:Для каждого порта указываются настройки (скорость, чётность и т.п.), а также протокол (Modbus, RTU, etc.) | #:Для каждого порта указываются настройки (скорость, чётность и т.п.), а также протокол (Modbus, RTU, etc.) | ||
#:Для каждого устройства обязательно указывается его уникальный адрес на шине - ''slave_id'' (подробнее про это можно прочитать в статье [[RS-485]]). Также можно указать другие необязательные параметры - смотрите полное описание формата в [https://github.com/contactless/wb-homa-drivers/#wb-homa-modbus подробной документации]. | #:Для каждого устройства обязательно указывается его уникальный адрес на шине - ''slave_id'' (подробнее про это можно прочитать в статье [[RS-485]]). Также можно указать другие необязательные параметры - смотрите полное описание формата в [https://github.com/contactless/wb-homa-drivers/#wb-homa-modbus подробной документации]. | ||
====Пример конфигурации для [[WB-MRM2 Реле 2х канальное | модуля реле WB-MRM2]], подключённого к изолированному порту (RS-485-ISO) | ====Пример конфигурации для [[WB-MRM2 Реле 2х канальное | модуля реле WB-MRM2]], подключённого к изолированному порту (RS-485-ISO) Wiren Board 4==== | ||
<syntaxhighlight lang="javascript">{ | <syntaxhighlight lang="javascript">{ | ||
"ports": [ | "ports": [ | ||
{ | { | ||
"path" : "/dev/ttyNSC0", | "path" : "/dev/ttyNSC0", | ||
"baud_rate": 9600, | "baud_rate": 9600, //скорость порта, 9600 почти для всех устройств, но проверьте документацию к ним | ||
"parity": "N", | "parity": "N", //четность | ||
"data_bits": 8, | "data_bits": 8, //битов данных в посылке | ||
"stop_bits": 2, | "stop_bits": 2, //количество стоп-битов. Чётность, количество битов и стоп-битов тоже редко меняются | ||
"poll_interval": 10, | "poll_interval": 10, //интервал опроса устройств на порту в миллисекундах | ||
"enabled": true, | "enabled": true, | ||
"devices" : [ | "devices" : [ | ||
{ | { | ||
"device_type" : "WB-MRM2", | "device_type" : "WB-MRM2", //тип устройства | ||
"slave_id": 25, | "slave_id": 25, //адрес устройства | ||
} | } | ||
] | ] |
Версия 19:53, 6 мая 2015
Внимание! В этой статье даётся упрощённое и, возможно, устаревшее описание драйвера, работающего с устройствами Modbus и Uniel и передающего сообщения в MQTT. Полное актуальное описание смотрите на https://github.com/contactless/wb-homa-drivers/#wb-homa-modbus
Краткое описание драйвера
В настоящее время поддерживается работа с устройствами протоколов Modbus RTU и Uniel, подключаемыми через 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 #запустить драйвер в принудительном отладочном режиме
Конфигурационный файл
Для работы драйвера нужно создать файл /etc/wb-homa-modbus.conf
. Для этого:
- Зайдите в консоль устройства через Debug UART или по SSH
- Создайте файл конфигурации, скопировав файл-образец:
cp /etc/wb-homa-modbus.conf.sample /etc/wb-homa-modbus.conf #скопировать файл-образец в файл настроек
- Если файл уже был создан, копировать ничего не надо.
- Откройте созданный файл для редактирования:
mcedit /etc/wb-homa-modbus.conf #открыть файл в псевдографическом редакторе
- Файл имеет структуру порты (ports) -> устройства (devices): в файле есть описания физических портов контроллера, а внутри них - список устройств, которые подключены к этому порту. В файле-образце собраны примеры конфигурации для разных устройств - ненужные придётся удалить.
- Для каждого порта указываются настройки (скорость, чётность и т.п.), а также протокол (Modbus, RTU, etc.)
- Для каждого устройства обязательно указывается его уникальный адрес на шине - slave_id (подробнее про это можно прочитать в статье RS-485). Также можно указать другие необязательные параметры - смотрите полное описание формата в подробной документации.
Пример конфигурации для модуля реле WB-MRM2, подключённого к изолированному порту (RS-485-ISO) Wiren Board 4
{
"ports": [
{
"path" : "/dev/ttyNSC0",
"baud_rate": 9600, //скорость порта, 9600 почти для всех устройств, но проверьте документацию к ним
"parity": "N", //четность
"data_bits": 8, //битов данных в посылке
"stop_bits": 2, //количество стоп-битов. Чётность, количество битов и стоп-битов тоже редко меняются
"poll_interval": 10, //интервал опроса устройств на порту в миллисекундах
"enabled": true,
"devices" : [
{
"device_type" : "WB-MRM2", //тип устройства
"slave_id": 25, //адрес устройства
}
]
}
]
}
В файле есть описания физических портов контроллера, с которыми работает драйвер. Для каждого порта указываются настройки (скорость, чётность и т.п.), а также протокол.
Для каждого порта определён также список устройств, которые подключены к этому порту. Для каждого устройства обязательно указывается его уникальный идентификатор на шине (подробнее про это можно прочитать в статье RS-485) - slave_id. Кроме этого, для устройства можно задать его id в системе MQTT, название устройства, а также описание каналов и регистров. Полное описание формата см. в подробной документации.
Для многих устройств уже существуют шаблоны, которые позволяют подключать эти устройства простым способом. Минимальное описание одного устройства, таким образом, имеет вид:
{
"slave_id": "0x06",
"device_type" : "WB-MRM2"
}
Здесь slave_id
- идентификатор устройства на шине, а device_type
- тип устройства.
Поддерживаемые типы устройств: список в документации.
Пример конфигурационного файла /etc/wb-homa-modbus.conf
:
// Configuration options
{
"debug": false,
"ports": [
{
"path" : "/dev/ttyNSC1",
"baud_rate": 9600,
"parity": "N",
"data_bits": 8,
"stop_bits": 2,
"poll_interval": 0,
"enabled": true,
"devices" : [
{
"name": "DRB88",
"id": "drb88",
"enabled": true,
"slave_id": "0x23",
"device_type" : "DRB88"
},
{
"slave_id": "0x26",
"device_type" : "MSU24"
},
{
"slave_id": "0x31",
"device_type" : "MSU34"
},
{
"slave_id": "0x04",
"device_type" : "LC-103"
},
{
"device_type" : "DDL24",
"slave_id" : "0x20"
},
{
"enabled": true,
"slave_id": "0x06",
"device_type" : "WB-MRM2"
},
{
"slave_id" : 16,
"device_type" : "WB-MRGB"
}
]
},
{
"path" : "/dev/ttyNSC0",
"type": "uniel",
"poll_interval": 10,
"enabled": true,
"devices" : [
{
"device_type" : "UCH-M141RC",
"slave_id": 1
}
]
}
]
}
Подключение устройств
В секции приведены подробные описания устройств, а также примеры конфигурационных файлов для разных вариантов использования. По-умолчанию можно пользоваться простым описанием устройств с помощью шаблонов device_type, как указано выше.
MSU34+TLP, MSU24 и MSU21 и подобные устройства
Сайт производителя - http://www.razumdom.ru/
Документация:
Устройства выдают значения с датчиков через 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).
Пример конфигурации:
Пример конфигурации MSU21 с секцией инициализации ("setup"):
Четырёхканальный (RGBW) диммер светодиодов DDL24
Сайт производителя - www.razumdom.ru
Документация: DDL24
Устройство предназначено для управления светодиодными лентами 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 по умолчанию.
Пример конфигурации:
Исполнительный модуль релейный восьмиканальный DRB88
Сайт производителя - www.razumdom.ru
Документация: DRB88
Исполнительные модули 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-секцию в конфигурации драйвера.
Пример конфигурации:
Модуль ввода-вывода ICP DAS tM-P3R3
Описание: tM-P3R3 и User_Manual
Модуль имеет 3 канала дискретного ввода, доступных через discrete inputs, и 3 канала релейного вывода, доступного через coils.
Пример конфигурации:
Модуль управления освещением ICP DAS LC-103
Описание: LC-103 и User manual
Модуль имеет 3 релейных вывода и один дискретный вход, допускающий подключение к сети переменного тока.
Адрес Modbus slave задаётся при помощи физического переключателя.
Пример конфигурации: