Wb-mqtt-serial driver

Материал из Wiren Board
Другие языки:

Внимание! Драйвер wb-mqtt-serial ранее назывался wb-homa-modbus, конфигурационный файл /etc/wb-mqtt-serial.conf ранее назывался /etc/wb-homa-modbus.conf. Учитывайте это, если используете устаревшие прошивки.


Драйвер wb-mqtt-serial отвечает за работу с подключёнными по RS-485 устройствами в Wiren Board. Он обеспечивает работу с подключёнными устройствами через систему MQTT-сообщений. В этой статье даётся упрощённое описание драйвера, полное смотрите в описании драйвера на нашем Github.


Поддерживаемые устройства

В настоящее время поддерживается работа с устройствами с интерфейсом Modbus нашего производства, счётчиками Меркурий и Милур, а также с некоторыми другими устройствами, в том числе работающими по протоколу Modbus. Полный список протестированных устройств: Поддерживаемые устройства#Подключаемые по RS-485.

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

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

Например, фреймы устройств Uniel начинаются с байта 0xff, устройств ИВТМ - с байта 0x24 ('$'), в случае же протоколов Modbus, Меркурий 230 и Милур первым байтом фрейма является идентификатор slave, поэтому при совмещении подобных устройств следует внимательно подходить к выбору slave id - у устройств Милур, например, slave id по умолчанию равен 0xff, что приводит к конфликту с устройствами Uniel. Устройства Милур требуют дополнительных задержек при опросе (заданы в шаблоне) и при использовании на одной шине с другими устройствами могут снизить скорость опроса. Некоторые устройства, поддерживающие дополнительные протоколы, могут оказаться несовместимыми с теми или иными протоколами на той же шине, например, было замечено, что устройства с поддержкой протокола A-BUS производства "Разумный дом" не могут работать на одной шине с устройствами Uniel. Работа устройств ИВТМ на одной шине с устройствами, работающими по другим протоколам, не проверялась. Проверенная рабочая комбинация: Modbus + Milur (slave_id != 0xff) + Uniel на одной шине.


Доработка драйвера для поддержки новых устройств

В качестве отправной точки смотрите статью Драйвер wb-mqtt-serial:Примеры написания шаблонов, для дальнейшей поддержки свяжитесь с нами.


Конфигурирование и запуск драйвера

Конфигурация драйвера задаётся в файле /etc/wb-mqtt-serial.conf. Если такой файл создан, драйвер запускается при загрузке контроллера автоматически. Также драйвером можно управлять в ручном режиме из консоли:

service wb-mqtt-serial stop #остановить драйвер
service wb-mqtt-serial start #запустить драйвер
service wb-mqtt-serial restart #перезапустить драйвер
wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -d #запустить драйвер в принудительном отладочном режиме с указанием пути к конфигурационному файлу


Конфигурационный файл драйвера

Для работы драйвера нужно отредактировать файл /etc/wb-mqtt-serial.conf. Обычный пользователь может воспользоваться способом RS-485:Настройка через веб-интерфейс, который тоже приводит к правильному заполнению файла конфигурации. Однако отредактировать файл можно и вручную, для этого:

  1. Ознакомьтесь с инструкцией Просмотр файлов контроллера с компьютера
  2. Файл /etc/wb-mqtt-serial.conf имеет структуру порты (ports) -> устройства (devices): в файле есть описания физических портов контроллера, а внутри них - список устройств, которые подключены к этому порту.
    Для каждого порта указываются настройки (скорость, чётность и т.п.), а также протокол (Modbus, RTU, etc.)
    Для каждого устройства обязательно указывается его уникальный адрес на шине - slave_id. Также можно указать другие необязательные параметры - смотрите полное описание формата в описании драйвера на нашем Github.
  3. Впишите конфигурацию для портов и подключённых устройств в файл, используя примеры ниже.
  4. Перезагрузите устройство ИЛИ выполните из консоли команду
    service wb-mqtt-serial restart
    
    Она перезапустит драйвер, и подключённое устройство появится в веб-интерфейсе.
  5. Если устройство не появилось, выполните команду
    tail /var/log/messages
    
    или откройте файл /var/log/messages и промотайте его до конца. Если там будет строчка такого типа:
    May 6 17:50:58 wirenboard user.notice modbus: FATAL: Error parsing config file: Failed to parse JSON: * Line 15, Column 17
    - ищите ошибку в 15-й строке конфигурационного файла.


Пример конфигурации для модуля реле 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, //интервал опроса устройств на порту в миллисекундах
            "devices" : [
                {
                    "device_type" : "WB-MRM2", //тип устройства, распознаваемый драйвером
                    "slave_id": 25 //адрес устройства
                }
            ]
        }
    ]
}

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


Пример конфигурационного файла для нескольких подключённых устройств

// 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
		}
	    ]
	}
    ]
}