Wb-mqtt-serial driver

Материал из Wiren Board

Внимание! В этой статье даётся упрощённое и, возможно, устаревшее описание драйвера, работающего с устройствами 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. Для этого:

  1. Зайдите в консоль устройства через Debug UART или по SSH
  2. Созайте файл и отрокйте его для редактирования:
    mcedit /etc/wb-homa-modbus.conf #открыть файл в псевдографическом редакторе
    
    Если файл уже был создан, та же команда просто откроет его для редактирования.
  3. Файл имеет структуру порты (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#Реализация портов в разных версиях Wiren Board .

Полный список поддерживаемых типов устройств - https://github.com/contactless/wb-homa-drivers/blob/master/README.md#%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2-device_type

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

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

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

MSU21

MSU24

MSU34

Устройства выдают значения с датчиков через 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"
                        }
                    ]
                }

Четырёхканальный (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 по умолчанию.

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


                {
                    "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

Сайт производителя - 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-секцию в конфигурации драйвера.

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


                {
                    "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

Описание: tM-P3R3 и User_Manual

Модуль имеет 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

Описание: LC-103 и User manual

Модуль имеет 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
                        }
                    ]
                }