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

Материал из Wiren Board
Строка 128: Строка 128:
</syntaxhighlight>
</syntaxhighlight>


==Установка нового адреса Modbus на [[Периферийные устройства с интерфейсом RS-485 серии WB-xxxx | устройство RS-485 нашего производства]]==
==Узнать или установить новый адрес Modbus на [[Периферийные устройства с интерфейсом RS-485 серии WB-xxxx | устройство RS-485 нашего производства]]==
Если вы хотите поменять адрес устройства RS-485, то подключите его к Wiren Board, оставив единственным на шине. ВНИМАНИЕ! Команда установки адреса установит новый адрес ВСЕМ устройстам на шине, поэтому если отите поменять только одному, оставьте на шине только его.
Если вы хотите поменять адрес устройства RS-485, то подключите его к Wiren Board, оставив единственным на шине. ВНИМАНИЕ! Команда установки адреса установит новый адрес ВСЕМ устройстам на шине, поэтому если отите поменять только одному, оставьте на шине только его.
Затем выполните в [[Консоль | консоли]]:
Затем выполните в [[Консоль | консоли]]:

Версия 17:22, 5 октября 2016

Внимание! Драйвер 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-homa-modbus:Примеры написания шаблонов, для дальнейшей поддержки свяжитесь с нами.

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

Конфигурация драйвера задаётся в файле /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 //адрес устройства
                }
            ]
        }
    ]
}

Узнать файл, соответствующий порту для вашего контроллера - RS-485#Реализация портов в разных версиях Wiren Board .

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

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

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

Узнать или установить новый адрес Modbus на устройство RS-485 нашего производства

Если вы хотите поменять адрес устройства RS-485, то подключите его к Wiren Board, оставив единственным на шине. ВНИМАНИЕ! Команда установки адреса установит новый адрес ВСЕМ устройстам на шине, поэтому если отите поменять только одному, оставьте на шине только его. Затем выполните в консоли:

service wb-mqtt-serial stop # stop standard RS-485 driver
modbus_client --debug -m rtu -s2 -pnone /dev/ttyAPP1 -a0x00 -t0x06 -r0x80 158 # Replace "158" with new address, "/dev/ttyAPP1" with port Modbus slave device connected to
service wb-mqtt-serial start # start standard RS-485 driver again