Универсальный драйвер обмена устанавливается на контроллеры автоматизации с ОС Linux. Драйвер предназначен для двухстороннего обмена с различными устройствами по саммы разным протоколам (см. ниже) и передачи данных на брокер MQTT.
Имя модуля vdrive
.
VDRIVE
опрашивает назначенные устройства и передает данные в топик MQTT следующего вида:
/devices/<код устройства>/controls/<имя параметра> <значение>
VDRIVE
принимает данные для установки в параметр в топик MQTT следующего вида:
/devices/<код устройства>/controls/<имя параметра>/on <значение>
VDRIVE входит в поставку контроллеров INSPARL PRO, СЭМ ПРО.S.
Ниже дано описание по установке модуля и настройке конфигурационного файла обмена с устройствами.
Добавить следующие фиды в конфиг обновления ОС:
src/gz smart_metrix_base http://releases.inspark.ru/smart-metrix/base
src/gz smart_metrix_packages http://releases.inspark.ru/smart-metrix/packages
src/gz smart_metrix_routing http://releases.inspark.ru/smart-metrix/routing
src/gz smart_metrix_onion http://releases.inspark.ru/smart-metrix/onion
src/gz smart_metrix_telephony http://releases.inspark.ru/smart-metrix/telephony
В репозитории размещены DEB-пакеты драйверов, монитора, планировщика, библиотек.
Добавить в сорслисты строки, соответствующие требуемой ОС
Для установки стабильных версий пакетов:
deb http://release.inspark.ru/debian/stable/ main
для установки тестовых версий пакетов:
deb http://release.inspark.ru/debian/testing/ dev
где OS - версия ОС, допустимы:
Для приватного репозитария(конфиги/сертификаты/…), независимо от платформы:
deb [arch=all] http://release.inspark.ru:8880/ non-free config
Конфигурационный файл построен по следующей схеме:
"log": {
"is_debug": false, // режим вывода в log
"max_size": 2 // максимальный размер log файла в Мб
}
"mqtt": {
"port": 1883, // порт брокера mqtt
"url": "localhost" // TCP/IP адрес или dnc имя брокера mqtt
},
"port" : [
{
"connection": {...}, // параметры порта с подключенными устройствами
"devices": [...], // список подключенных устройств к порту
"parameters"[...] // описание параметров опроса
}, ....
]
vdrive работает одновременно по всем указанным портам и последовательным опросом всех устройств порта.
Если в описании атрибута не указано значение по умолчанию, значит атрибут является обязательным.
Принятые сокращения:
ПУ : значение по умолчанию.
Атрибут | Тип | Описание |
---|---|---|
max_size | int | Максимальный размер файла журнала. ПУ: 5. |
is_debug | bool | Необхоимость вывода отладочной информации. ПУ: false. |
Атрибут | Тип | Описание |
---|---|---|
url | string | URL подключения к MQTT. ПУ: 127.0.0.1. |
port | int | Порт подключения к MQTT. ПУ: 1883. |
Атрибут | Тип | Описание |
---|---|---|
name | string | Имя элемента. |
type | string | Тип элемента. |
enabled | bool | Признак разрешения опроса. ПУ: true. |
poll_interval | int | Интервал опроса (сек). ПУ: 60. |
poll_reconnect | boll | true- переподключаться после опроса параметров, false (ПУ) - стандартно, с постоянным подключение |
tcp | объект | Объект описания, настройки приведены для каждого типа устрйоства |
Основной атрибут в секции type
, который определяет тип Порта. Поддерживаются следующие значения атрибута:
Значения type | Тип порта |
---|---|
base.rtu | RS-485 |
base.tcp | TCP/IP |
vgpio | опрос GPIO портов |
base.z2t | Tasmota ZigBee шлюз |
В секции devices[]
описываются устройства, подключенные к порту. Каждый тип устройства имеет свой тип:
Значения type Устройства | Протокол устройства |
---|---|
mb-rtu | ModBus RTU |
mb-tcp | ModBus TCP |
dlms.rs | DLMS протокол по RS-485 |
dlms.tcp | DLMS протокол по Ethernet |
dcon | DCON протокол по RS-485 |
snmp | протокол SNMP v1, v2 |
vkt7-rtu | протокол ВКТ-7 по RS-485 |
vkt7-tcp | протокол ВКТ-7 по Ethernet |
emera | протокол ПУ Энергомера |
merc2xx | протокол ПУ Меркурий |
milur | протокол ПУ Милур |
z2t | протокол устройства Tasmota |
Cекции connection
, devices
.
...
"port" : [
{
"connection":
{
"type": "base.rs", // тип порта - RS-485
"baud_rate": 9600, // скорость обмена с портом RS-485
"com_options": "7E1", // параметры четности
"com_port": "/dev/ttyRS485-1", // путь/имя порта на контроллере
"enabled": true, // признак опроса порта
"poll_interval": 60, // интервал опроса
"poll_reconnect": true, // опция переподключения к порту после опроса
"rto": 1000, // Тайм-аут приема (мсек). ПУ: 500.
"sto": 1000 // Тайм-аут передачи (мсек). ПУ: 500.
},
"devices": [ // список подключенных устройств к порту
{
"name": "<имя устройства>", // произвольное имя устройства
"sid": "1", // Логический порт ModBus RTU устрйоства
"type": "mb-rtu", // протокол ModBus RTU
"cname": "<топик устройства>" // код устройства, которое используется в топике
}, ...
],
"parameters": [...] // описание параметров опроса
]
Секция parameters
...
"port" : [
{
"connection": {...},
"devices": [...],
"parameters": [ // описание параметров опроса
{
"cname" : "<топик устройства>", // код устройства, которое обозначено в секции devices
"config" : {
"channels": [{<параметр1>},{<параметр1>},..]
}
}
]
В секции channels
для описание параметра применяются следующие атрибуты:
Атрибут | Тип | Описание |
---|---|---|
name | string | Имя параметра. |
reg_type | string | Тип регистра. Допустимые значения: coil, status, input, |
input-bit, holding, holding-m, holding-bit. | ||
reg_addr | int | Адрес регистра. |
value_type | string | Тип значения параметра. |
Допустимые значения: | ||
bit - бит | ||
i16 - знаковое целое (16 бит) | ||
u16 - беззнаковое целое (16 бит) | ||
i32 - знаковое целое (32 бит) | ||
u32 - беззнаковое целое (32 бит) | ||
str2 - строка из двух байт. | ||
str4 - строка из четырех байт. | ||
str8 - строка из восьми байт. | ||
float32 - число с плавающей точкой. | ||
read_only | bool | Только чтение. ПУ: true. |
scale | float | Масштаб. Полученное значение будет вычислено по формуле: |
value = value * scale. | ||
debounce | int | Время (в секундах), в течение которого будет контролироваться дребезг. |
correction" | int | Корректировка полученного значения по формуле: (value * scale + correction) в диапазоне от -2147483648 до 2147483647 |
poll_delay | int | Интервал опроса по параметру(mсек). ПУ = device::poll_delay. |
bh_list | объект | задается только для input-bit, holding-bit |
Регистры типа input-bit и holding-bit, это input/holding регистры, в которых хранится не число, а набор битовых флажков. Для регистров этого типа обязательно должен быть задан массив bh_list, состоящий хотя бы из одного элемента.
Например:
{
"name": "Switch",
"reg_type": "input-bit",
"reg_addr": 0,
"value_type": "u16",
"read_only" : true,
"bh_list": [
{
"name" : "0",
"offset" : 7
}
]
}
bh_list
масив объектов, содержащих только два атрибута: name и offset.
Оба атрибута обязательны. name участвует в формировании имени топика,
<имя параметра>_<имя элемента из bh_list>.
offset задает смещение быта в числе.
value_type должно быть u16 или u32.
Пример конфига для ModBus RTU устройства:
{
"log": {
"is_debug": false,
"max_size": 2
},
"mqtt": {
"port": 1883,
"url": "localhost"
},
"ports": [
{
"connection": {
"baud_rate": 9600,
"com_options": "7E1",
"com_port": "/dev/ttyRS485-1",
"enabled": true,
"poll_interval": 60,
"rto": 2000,
"sto": 2000,
"type": "base.rs"
},
"devices": [
{
"name": "HVAC-1",
"sid": "1",
"type": "mb-rtu",
"cname": "msw2"
},
{
"name": "New HVAC",
"sid": "2",
"type": "mb-rtu",
"cname": "msw3"
}
],
"parameters": [
{
"cname": "msw2",
"config": {
"channels": [
{
"error_value": "0x7FFF",
"name": "Temperature",
"reg_addr": 0,
"reg_type": "input",
"scale": 0.1,
"value_type": "i16",
"correction": 20000
},
{
"error_value": "0xFFFF",
"name": "Humidity",
"reg_addr": 1,
"reg_type": "input",
"scale": 0.1,
"value_type": "i16"
}
]
}
},
{
"cname": "msw3",
"config": {
"channels": [
{
"name": "Sound Level",
"reg_addr": 3,
"reg_type": "input",
"scale": 0.01,
"value_type": "u16"
},
{
"error_value": "0xFFFF",
"name": "CO2",
"reg_addr": 8,
"reg_type": "holding",
"value_type": "u16"
}
]
}
}
]
}
]
}
Cекции connection
, devices
.
...
"port" : [
{
"connection":
{
"type": "base.tcp", // тип порта - Ethernet
"enabled": true, // признак опроса порта
"poll_interval": 60, // интервал опроса
"poll_reconnect": true, // опция переподключения к порту после опроса
"tcp": { // Секция TCP/IP
"url": "xxx.xxx.xxx.xxx", // адрес
"port": xxx // порт (обычно 502 )
},
"rto": 1000, // Тайм-аут приема (мсек). ПУ: 500.
"sto": 1000 // Тайм-аут передачи (мсек). ПУ: 500.
},
"devices": [ // список подключенных устройств к порту
{
"name": "<имя устройства>", // произвольное имя устройства
"sid": "1", // Логический порт ModBus RTU устрйоства
"type": "mb-tcp", // протокол ModBus TCP/IP, для протокола ModBus RTU over TCP/IP задаем значение type = mb-rtu
"cname": "<топик устройства>" // код устройства, которое используется в топике
}, ...
],
"parameters": [...] // описание параметров опроса
]
Секция parameters
и channels
описывается аналогично объектам ModBus RTU.
Cекции connection
, devices
.
...
"port" : [
{
"connection":
{
"name": "mimt" // Имя порта. Должно быть уникальным.
"type": "dlms.rs", // тип порта - RS-485 , для Ethernet используется тип dlms.tcp
"enabled": true, // признак опроса порта
"poll_interval": 60, // интервал опроса
"poll_delay": 20, // задержка между опросами параметров (мсек). ПУ: 20.
"src_dlms" : 16, // Порт источника протокола DLMS. ПУ: 16.
"src_mac" : "eeeeeeeeeeee", // MAC-адрес источника протокола DLMS. ПУ: eeeeeeeeeeee.
"url": "xxx.xxx.xxx.xxx", // адрес DLMS TCP/IP - только для dlms.tcp
"port": "/dev/ttyXRUSB0", // Порт подключения к RS
"baud_rate": 115200, // Скорость обмена по порту
"opt" : "8N1", // Параметры обмена по порту (см. ниже таблицу с опциями)
"empty_counter": 10 // Максимальное количество пустых ответов от устройства до фиксации ошибки. ПУ: 10
},
"devices": [ // список подключенных устройств к порту
{
"name": "mimt_1", // Имя устройства.
"sn ": "190103050005182", // Фрагмент серийного номера устройства. Используется при определении порта назначения.
"dst_dlms" : 19, // Порт получателя DLMS.
"cname": "<топик устройства>" // код устройства, которое используется в топике
}, ...
],
"parameters": [...] // описание параметров опроса
]
Параметр opt
(параметр обмена по порту) складывается из следующих значений:
Атрибут | Тип | Описание |
---|---|---|
opt | string | Параметры обмена. |
Строка из четырех символов, задающая настройки порта. | ||
Первый символ - цифра. Определяет количество бит в байте. | ||
Возможные значения: 5, 6, 7, 8. | ||
Второй символ - буква. Определяет контроль четности . | ||
Возможные значения: | ||
N - отсутствует | ||
O - odd | ||
E - even | ||
M - mark | ||
S - space | ||
Третий символ - цифра. Определяет количество стоп-бит. | ||
Возможные значения: | ||
1 - 1 | ||
2 - 2 | ||
5 - 1.5 | ||
Четвертый символ - буква. Определяет управление потоком. | ||
Возможные значения: | ||
N - отсутствует. | ||
S - программное. | ||
H - аппаратное. |
Секция parameters
...
"port" : [
{
"connection": {...},
"devices": [...],
"parameters": [ // описание параметров опроса
{
"cname" : "<топик устройства>", // код устройства, которое обозначено в секции devices
"config" : {
"channels": [{<параметр1>},{<параметр1>},..]
}
}
]
В секции channels
для описание параметра применяются следующие атрибуты:
Атрибут | Тип | Описание |
---|---|---|
name | string | Имя параметра. Должно быть уникальным для параметров устройства. |
class_id | int | Идентификатор класса. Берется из таблицы объектов устройства. |
object_id | string | Идентификатор объекта. Берется из таблицы объектов устройства. |
attr_id | int | Идентификатор атрибута. Берется из таблицы объектов устройства. |
scale | float | множитель |
Пример конфига для DLMS устройства:
{
"log": {
"is_debug": false,
"max_size": 2
},
"mqtt": {
"port": 1883,
"url": "localhost"
},
"ports": [
{
"connection": {
"name": "mimt",
"type": "dlms.rs",
"enabled": true,
"poll_interval": 60,
"poll_delay": 20,
"src_dlms": 16,
"src_mac": "eeeeeeeeeeee",
"port": "/dev/ttyXRUSB0",
"baud_rate": 115200,
"opt": "8N1",
"empty_counter": 10
},
"devices": [
{
"name": "mimt_1",
"sn ": "190103050005182",
"dst_dlms": 19,
"cname": "mimt-rs"
}
],
"parameters": [
{
"cname": "mimt-rs",
"config": {
"channels": [
{
"name": "Phase A voltage",
"class_id": 3,
"object_id": "1.0.32.7.0.255",
"attr_id": 2,
"scale": 0.1
}
]
}
}
]
}
]
}
Cекции connection
, devices
.
...
"port" : [
{
"connection":
{
"name": "SNMP port" // Имя порта. Должно быть уникальным.
"type": "snmp ", // тип порта
"enabled": true, // признак опроса порта
"poll_interval": 60, // интервал опроса
},
"devices": [ // список подключенных устройств к порту
{
"name": "CISCO SG300-2", // Имя устройства
"url": "10.3.2.245", // адрес сервера SNMP
"community": "public", // SNMP community. ПУ: public.
"version": 2, // версия SNMP. ПУ: 2.
"cname": "<топик устройства>" // код устройства, которое используется в топике
}, ...
],
"parameters": [...] // описание параметров опроса
]
Секция parameters
...
"port" : [
{
"connection": {...},
"devices": [...],
"parameters": [ // описание параметров опроса
{
"cname" : "<топик устройства>", // код устройства, которое обозначено в секции devices
"config" : {
"channels": [{<параметр1>},{<параметр1>},..]
}
}
]
В секции channels
для описание параметра применяются следующие атрибуты:
Атрибут | Тип | Описание |
---|---|---|
name | string | Имя параметра. |
oid | string | OID параметра. |
Пример конфига для SNMP устройства:
"log": {
"is_debug": false,
"max_size": 2
},
"mqtt": {
"port": 1883,
"url": "localhost"
},
"ports": [
{
"connection": {
"name" : "cisco"
, "type" : "snmp"
, "enabled" : true
, "poll_interval" : 10
},
"devices": [
{
"name" : "CISCO SG300-2"
, "url" : "10.3.2.245"
, "community" : "public"
, "cname": "sg300_10.3.2.245"
}
],
"parameters": [
{
"cname": "sg300_10.3.2.245",
"config": {
"channels": [
{ "name": "Uptime", "oid": ".1.3.6.1.2.1.1.3.0" }
]
}
}
]
}
]
}
DCON является протоколом основанном на строках ASCII.
устройства, работающие по этому протоколу нельзя ставить на один порт с устройствами, работающими по протоколам семейства modbus.
Cекции connection
, devices
.
...
"port" : [
{
"connection":
{
"name": "DCON port" // Имя порта. Должно быть уникальным.
"type": "base.rs ", // тип порта RS-485
"enabled": true, // признак опроса порта
"poll_interval": 60, // интервал опроса
},
"devices": [ // список подключенных устройств к порту
{
"name": "dcon_pult-2", // Имя устройства
"type": "dcon", // Тип устройства
"sid": "30", // slave_id устройства
"crc_enabled": , // Флаг, указывающий необходимость использования контрольной суммы при обмене
"cname": "<топик устройства>" // код устройства, которое используется в топике
}, ...
],
"parameters": [...] // описание параметров опроса
]
Секция parameters
...
"port" : [
{
"connection": {...},
"devices": [...],
"parameters": [ // описание параметров опроса
{
"cname" : "<топик устройства>", // код устройства, которое обозначено в секции devices
"config" : {
"channels": [{<параметр1>},{<параметр1>},..]
}
}
]
В секции channels
для описание параметра применяются следующие атрибуты:
Атрибут | Тип | Описание |
---|---|---|
name | string | Имя параметра. |
cmd | int | Команда. Допустимые значения: 1, 9, 10, 13, 15, 21. |
channel | string | Адрес регистра. Необходим только для команды с кодом 9. |
Допустимые значения: строка из одного символа от 0 до F | ||
(в верхнем регистре). ПУ: true. | ||
inverted | bool | Параметр инвертирован. Только для команд 13 и 21. ПУ: false. |
bh_list | array | Массив описателей бит. Только для команд 13 и 21. |
Описатель бита bh_list (Только для команд 13 и 21) :
Атрибут | Тип | Описание |
---|---|---|
name | string | Имя бита. Будет прибавлено к имени параметра. |
offset | int | Смещение бита в полученном значении. |
inverted | bool | Бит инвертирован. |
Прибор ВКТ-7 описывается точно также как и ModBus RTU, ModBus TCP/IP.
Для указания драйверу на прибор ВКТ-7 используйте имя vkt-rs, vkt-tcp для type устройства.
...
"devices": [
{
"name": "ТП-1",
"sid": "1",
"type": "vkt7-rtu",
"cname": "vkt_023"
},
{
"name": "ТП-2",
"sid": "2",
"type": "vkt7-rtu",
"cname": "vkt_023"
}
],
...
Cекции connection
, devices
описывается точно также, как в протоколе ModBus RTU. Для указания драйверу на прибор Меркурий используйте имя merc2xx
для type устройства.
Секция parameters
...
"port" : [
{
"connection": {...},
"devices": [...],
"parameters": [ // описание параметров опроса
{
"cname" : "<топик устройства>", // код устройства, которое обозначено в секции devices
"config" : {
"channels": [{<параметр1>},{<параметр1>},..]
}
}
]
В секции channels
для описание параметра применяются следующие атрибуты:
Атрибут | Тип | Описание |
---|---|---|
name | string | Имя параметра. |
reg_type | string | Тип регистра. Допустимые значения: array12, array16, param. |
Для регистров типа array12 и array16 задаются дополнительные атрибуты | ||
в соответствии с документом mercury-protocol-obmena-9-2019 (003).pdf. | ||
согласно пункта 2.5.17.1 Запросы на чтение массивов в пределах 12 месяцев. | ||
arr_num | int | Номер массива - Таблица 2.7. |
month | int | Номер месяца - от 0 до 12. |
tarif | int | Тариф. Допустимые значения: |
0 - по сумме тарифов | ||
1 - тариф 1 | ||
2 - тариф 2 | ||
3 - тариф 3 | ||
offset | int | Смещение параметра в массиве. |
value_type | int | Тип значения параметра. |
Допустимые значения: ma. | ||
Для регистров типа param задаются дополнительные атрибуты | ||
в соответствии с документом mercury-protocol-obmena-9-2019 (003).pdf. | ||
согласно пункта 2.5.33 Чтение вспомогательных параметров. | ||
bwri | int | Поле bwri. |
value_type | int | Тип значения параметра. |
Допустимые значения: | ||
m0a, m0r - для вспомогательного параметра 0. | ||
m1 - для вспомогательных параметров 1, 2, 4, 5, 8. | ||
m3 - для вспомогательного параметра 3. | ||
m6 - для вспомогательного параметра 6. | ||
m7 - для вспомогательного параметра 7. |
Cекции connection
, devices
описывается точно также, как в протоколе ModBus RTU. Для указания драйверу на прибор Меркурий используйте имя milur
для type устройства.
Секция parameters
...
"port" : [
{
"connection": {...},
"devices": [...],
"parameters": [ // описание параметров опроса
{
"cname" : "<топик устройства>", // код устройства, которое обозначено в секции devices
"config" : {
"channels": [{<параметр1>},{<параметр1>},..]
}
}
]
В секции channels
для описание параметра применяются следующие атрибуты:
Атрибут | Тип | Описание |
---|---|---|
name | string | Имя параметра. |
object_id | string | Идентификатор объекта. Идентификаторы объекта задаются |
в соответствии с документом HMIProt_Modbus_305-307.3.26_ЛУ.pdf. | ||
согласно пункта 4. ИНТЕРФЕЙСНЫЕ ОБЪЕКТЫ УСТРОЙСТВА. (стр. 12) | ||
value_type | int | Тип значения параметра. |
Допустимые значения: u24, i24, i32, bcd32. |
Cекции connection
, devices
описывается точно также, как в протоколе ModBus RTU. Для указания драйверу на прибор Меркурий используйте имя emera
для type устройства.
Секция parameters
...
"port" : [
{
"connection": {...},
"devices": [...],
"parameters": [ // описание параметров опроса
{
"cname" : "<топик устройства>", // код устройства, которое обозначено в секции devices
"config" : {
"channels": [{<параметр1>},{<параметр1>},..]
}
}
]
В секции channels
для описание параметра применяются следующие атрибуты:
Для получения значения параметра для счетчиков Энергомера необходимо выдать команду.
Команды описаны в прилагаемом документе ce301_303_re_v12.pdf в таблице 7.1 (стр. 108)
и в приложении Б, таблица Б.1 (стр 154).
Если команда задается по таблице 7.1, то команда имеет вид:
GROUP(<Тип><Уточ.>(Запрос))
Если команда задается по таблице Б.1, то команда имеет вид как в таблице.
Некоторые команды возвращают массив значений параметров. Для указания конкретного значения
используется атрибут offset, задающий индекс (начиная с нуля) результата в массиве.
Атрибут | Тип | Описание |
---|---|---|
name | string | Имя параметра. |
cmd | string | Команда на получение значения параметра. |
offset | int | Смещение в массиве результатов. ПУ = 0. |
Пример конфига для ПУ Энергомера:
...
"port" : [
{
"connection": {
"name" : "mera"
, "type" : "base.rs"
, "com_port": "/dev/ttyRS485-1"
, "baud_rate": 9600
, "com_options": "7E1"
, "enabled" : true
, "rto" : 2000
, "sto" : 2000
, "poll_interval" : 60
},
"devices": [
{
"name" : "mera-100"
, "type" : "emera"
, "sid" : "127169704"
, "cname": "emera"
}
],
"parameters": [
{
"cname" : "emera",
"config" : {
"channels": [
{ "name" : "Date-and-Time", "cmd" : "GROUP(0001())", "value_type" : "date_time" }
, { "name" : "Total Ai energy", "cmd" : "GROUP(1001(01))" }
, { "name" : "Total P", "cmd" : "GROUP(4003(08))", "scale" : 1000 }
, { "name" : "P L1", "cmd" : "GROUP(4003(01))", "scale" : 1000 }
, { "name" : "P L2", "cmd" : "GROUP(4003(02))", "scale" : 1000 }
, { "name" : "P L3", "cmd" : "GROUP(4003(04))", "scale" : 1000 }
, { "name" : "Urms L1", "cmd" : "GROUP(4001(01))" }
, { "name" : "Urms L2", "cmd" : "GROUP(4001(02))" }
, { "name" : "Urms L3", "cmd" : "GROUP(4001(04))" }
, { "name" : "Irms L1", "cmd" : "GROUP(4002(01))" }
, { "name" : "Irms L2", "cmd" : "GROUP(4002(02))" }
, { "name" : "Irms L3", "cmd" : "GROUP(4002(04))" }
, { "name" : "Frequency", "cmd" : "GROUP(400D())" }
, { "name" : "Voltage angle L1-L2", "cmd" : "GROUP(400B(01))" }
, { "name" : "Voltage angle L3-L1", "cmd" : "GROUP(400B(04))" }
, { "name" : "Voltage angle L2-L3", "cmd" : "GROUP(400B(02))" }
, { "name" : "PF L1", "cmd" : "GROUP(4007(01))" }
, { "name" : "PF L2", "cmd" : "GROUP(4007(02))" }
, { "name" : "PF L3", "cmd" : "GROUP(4007(04))" }
, { "name" : "Total PF", "cmd" : "GROUP(4007(08))" }
, { "name" : "Serial", "cmd" : "GROUP(5003())" }
, { "name" : "month-current-T0", "cmd" : "ECMPE()", "offset" : 0 }
, { "name" : "month-current-T1", "cmd" : "ECMPE()", "offset" : 1 }
, { "name" : "month-current-T2", "cmd" : "ECMPE()", "offset" : 2 }
, { "name" : "month-current-T3", "cmd" : "ECMPE()", "offset" : 3 }
, { "name" : "day-current-T0", "cmd" : "ECDPE()", "offset" : 0 }
, { "name" : "day-current-T1", "cmd" : "ECDPE()", "offset" : 1 }
, { "name" : "day-current-T2", "cmd" : "ECDPE()", "offset" : 2 }
, { "name" : "day-current-T3", "cmd" : "ECDPE()", "offset" : 3 }
]
}
}
]
...
VDRIVE протестирован для работы с следующими устройствами Tasmota:
Изначально, Tasmota повторяет список устройств zigbee2mqtt.
На данный момент, по vdrive протестированы следующие устройства:
Cекции connection
, devices
описывается точно также, как в протоколе ModBus RTU. Для указания драйверу на устройство Tasmota используйте в секции connection
type=base.z2t, в секции devices
type=z2t
В секции chanells
используется дополнительный атрибут z2t_name
для имени параметра из пакета Tasmota.
Пример конфига для устройства Tasmota:
...
{
"connection": {
"name": "tasmota",
"type": "base.z2t",
"enabled": true,
"zigbee": {
"address": "C3EFE4"
}
},
"devices": [
{
"name": "Датчик протечки",
"sid": "0x46A5",
"type": "z2t",
"cname": "z2t_water"
}
],
"parameters": [
{
"cname": "z2t_water",
"config": {
"channels": [
{
"name": "leak",
"z2t_name": "ZoneStatusChange",
"value_type": "i16",
"enabled": true,
"scale": 1
}
]
}
}
]
}
...
Для указания драйверу на работу с портами GPIO используйте в секции connection
type=vgpio, в секции devices
type=vgpio
В секции chanells
используются следующие атрибуты:
Атрибут | Тип | Описание |
---|---|---|
gpio | int | Номер прерывания. Значение должно быть больше нуля. |
name | string | Имя канала. |
type | string | Тип канала. ПУ : «base». |
Допустимые значения: | ||
* «base» - без типа | ||
* «water» - водяной счетчик | ||
* «electro» - электрический счетчик | ||
enabled | bool | Канал разрешен к опросу. ПУ : true. |
inverted | bool | Канал инвертирован. ПУ : false. |
direction | string | Направление канала. ПУ : «input». |
Допустимые значения: «input», «output» | ||
scale | float | Масштаб. ПУ : 1.0. |
Полученное значение будет вычислено по формуле: value = value * scale. | ||
edge | string | Направление срабатывания прерывания. ПУ : «both» |
Допустимые значения: | ||
* «both» - по обоим фронтам. | ||
* "rising - по восходящему фронту. | ||
* «falling» - по нисходящему фронту. | ||
* «none» - без прерываний. | ||
debounce | int | Интервал устранения дребезга (в миллисекундах). ПУ : 0 (без устранения дребезга). |
Пример конфига для работы с портами GPIO
{
"log": {
"is_debug": false,
"max_size": 2
},
"mqtt": {
"port": 1883,
"url": "localhost"
},
"ports": [
{
"connection": {
"type": "vgpio",
"enabled": true,
"wto": 500
},
"devices": [
{
"name": "digitalsignal",
"type": "vgpio",
"cname": "vgpio_device_channels"
}
],
"parameters": [
{
"cname": "vgpio_device_channels",
"config": {
"channels": [
{
"name": "IN1",
"gpio": 17,
"direction": "input",
"type": "water",
"enabled": true,
"inverted": false,
"scale": 0.01,
"edge": "both",
"debounce": 0,
"dp_current": 2,
"dp_total": 3
},
{
"name": "IN2",
"gpio": 16,
"direction": "input",
"type": "water",
"enabled": true,
"inverted": false,
"scale": 1,
"edge": "both",
"debounce": 100,
"dp_current": 2,
"dp_total": 3
},
{
"name": "IN3",
"gpio": 15,
"direction": "input",
"type": "water",
"enabled": true,
"inverted": false,
"scale": 1,
"edge": "both"
},
{
"name": "IN4",
"gpio": 14,
"direction": "input",
"type": "water",
"enabled": true,
"inverted": false,
"scale": 1,
"edge": "both"
}
]
}
}
]
}
]
}
Опция | Описание |
---|---|
-c | <имя конфигурационного файла> |
Задает имя конфигурационного файла. По умолчанию vdrive запускается с конфигурационным файлом /etc/vdrive.json. | |
Эта опция позволяет изменить имя конфигурационного файла. Имя файла необходимо задавать полностью. | |
Например: /etc/vd-dlms.json. | |
-d | Включает режим вывода в журнал отладчной информации даже если этот режим не задан в конфигурационном файле. |
-h | Включает режим вывода в журнал содержимого передаваемых/отправляемых пакетов. Работает только при влюченном |
режиме вывода отладочной информации. | |
-l | <имя файла журнала> |
Задает имя файла журнала. По умолчанию vdrive ведет журнал в файле /var/log/vdrive/vdrive.log. | |
Эта опция позволяет изменить имя файла журнала, но папка останется прежней: /var/log/vdrive. | |
-v | Включает вывод журнала на консоль. На запись журнала в файл это никак не влияет. |
При запуске vdrive, производится поиск файла driver.json (по опции -c
, или по умолчанию в /etc/driver.json
) и в случае обнаружения - используются его настройки.
vdrive наблюдюдает за файлом конфигурации на протяжении всего сеанса работы. Любое изменение (удаление) файла конфига - ведет за собой перезагрузку vdrive.