Мой кейс modbus через usb адаптер owen который на Exar XR21B1411, нужен модуль ядра kmod-usb-serial-xr_usb_serial_common, если адаптер на другом чипе то смотрим модуль на него, самый распространенный kmod-usb-serial-pl2303
В файле конфигурации все стандартно, нужно указать только путь к порту.
[port-1]
port=/dev/ttyXRUSB0

homed управляет 2 котлами которыми в свою очередь управляет контролер https://owen.ru/product/2trm1
items:
{
"address": 4109,
"byteOrder": "mixed",
"dataType": "f32",
"divider": 1,
"expose": "out",
"read": true,
"registerType": "holding",
"type": "value"
},
{
"address": 4111,
"byteOrder": "mixed",
"dataType": "f32",
"divider": 1,
"expose": "in",
"read": true,
"registerType": "holding",
"type": "value"
},
{
"address": 512,
"byteOrder": "mixed",
"dataType": "f32",
"divider": 1,
"expose": "set1",
"read": true,
"registerType": "holding",
"type": "value"
},
{
"address": 768,
"byteOrder": "mixed",
"dataType": "f32",
"divider": 1,
"expose": "set2",
"read": true,
"registerType": "holding",
"type": "value"
},
{
"address": 544,
"byteOrder": "mixed",
"dataType": "u16",
"divider": 1,
"expose": "st1",
"read": true,
"registerType": "holding",
"type": "enum"
},
{
"address": 800,
"byteOrder": "mixed",
"dataType": "u16",
"divider": 1,
"expose": "st2",
"read": true,
"registerType": "holding",
"type": "enum"
}
]
options:
"in": {
"round": 2,
"type": "sensor",
"unit": "°C"
},
"out": {
"round": 2,
"type": "sensor",
"unit": "°C"
},
"set1": {
"max": 95,
"min": 40,
"round": 2,
"step": 1,
"type": "number",
"unit": "°C"
},
"set2": {
"max": 95,
"min": 40,
"round": 2,
"step": 1,
"type": "number",
"unit": "°C"
},
"st1": {
"enum": [
"off",
"heat"
],
"type": "select"
},
"st2": {
"enum": [
"off",
"heat"
],
"type": "select"
}
}
И куча инверторов 9600 series, которые управляют насосами
Пример одного из...
items:
[
{
"address": 28672,
"byteOrder": "mixed",
"dataType": "i16",
"divider": 100,
"expose": "runfreq",
"read": true,
"registerType": "holding",
"type": "value"
},
{
"address": 28673,
"byteOrder": "mixed",
"dataType": "i16",
"divider": 100,
"expose": "tfreq",
"read": true,
"registerType": "holding",
"type": "value"
},
{
"address": 4096,
"byteOrder": "mixed",
"dataType": "u16",
"divider": 200,
"expose": "setfreq",
"read": false,
"registerType": "holding",
"type": "value"
},
{
"address": 8192,
"byteOrder": "mixed",
"dataType": "i16",
"divider": 1,
"expose": "run",
"read": false,
"registerType": "holding",
"type": "enum"
}
]
options:
{
"run": {
"enum": {
"1": "start",
"6": "stop"
},
"type": "select"
},
"setfreq": {
"max": 50,
"min": 15,
"round": 2,
"step": 1,
"type": "number",
"unit": "°Hz"
}
}