Коллеги, прошу помощи с шаблоном для wb-mqtt-serial.
Оборудование: Приточные установки Фьорди ВПУ-500.
Производитель прислал документацию с таблицей регистров, параметрами подключения, а также следующими замечаниями:
- регистры со сдвигом на 1 (опытным путём выяснил, что регистры идут со сдвигом в меньшую сторону на единицу);
- пульт мастер, контроллер слейв, внешнее устройство тоже мастер (вообще непонятно что это значит, ну и ладно).
Объект находится далеко, интернета там нет пока идёт ремонт, связь и мобильный интернет не ловят вообще. Поэтому хочу подготовиться к выезду после прошлого раза.
Изучив документацию, форум и мануалы wb, накидал шаблон.
Согласно таблицы регистров в документации производителя, используется два типа регистров: input registers и holding registers. Многие регистры содержат значения в битовых полях.
Вот примеры из моего шаблона:
Input register
"channels": [
...
{
"name": "Week timer",
"group": "status",
"reg_type": "input",
"address": "02:10:1",
"type": "switch",
"format": "u16",
"off_value": 0,
"on_value": 1
},
{
"name": "Priority",
"group": "status",
"reg_type": "input",
"address": "02:11:2",
"enum": [0, 1, 2, 3],
"enum_titles": ["none", "humidity", "CO2", "pressure"],
"format": "u16"
},
...
]
...
Input register
...
"channels": [
...
{
"name": "Temperature - Indoor Panel",
"group": "status",
"reg_type": "input",
"address": "57",
"type": "temperature",
"scale": 0.1,
"format": "u16"
},
{
"name": "Humidity - Indoor Panel",
"group": "status",
"reg_type": "input",
"address": "58",
"type": "rel_humidity",
"scale": 1,
"format": "u16"
},
...
...
Holding register
...
"parameters": {
...
"unit_heater_type": {
"title": "Unit heater type",
"address": "00:0:4",
"reg_type": "holding",
"enum": [0, 1, 2, 3],
"enum_titles": [
"none",
"electric calorifer",
"water calorifer",
"mixed calorifer"
],
"format": "u16",
"group": "unit_settings"
},
"unit_cooler_type": {
"title": "Unit cooler type",
"address": "00:4:4",
"reg_type": "holding",
"enum": [0, 1, 2, 3, 4, 5, 6, 7, 8],
"enum_titles": [
"none",
"freon exchanger",
"fancoil",
"water cooler",
"inverter CCU",
"mixed ccu",
"double sequential CCU",
"double sequential CCU with rotation",
"double sequential CCU - rotation only"
],
"format": "u16",
"group": "unit_settings"
},
...
}
...
Holding register
...
"channels": [
...
{
"name": "Target temperature",
"group": "control",
"reg_type": "holding",
"address": "31",
"type": "range",
"scale": 0.1,
"min": 15,
"max": 30,
"format": "u16"
},
{
"name": "Supply fan speed set",
"group": "control",
"reg_type": "holding",
"address": "32",
"type": "range",
"min": 1,
"max": 10,
"format": "u16"
},
{
"name": "Exhaust fan speed set",
"group": "control",
"reg_type": "holding",
"address": "33",
"type": "range",
"min": 1,
"max": 10,
"format": "u16"
},
...
]
...
В целом я на правильном пути?
Ещё я столкнулся с тем, что, например, в holding register “Power” я записываю 1 (включение) с помощью -t0x06
, но читается всегда 0 с помощью -t0x03
, хотя установка включается и выключается. Если я правильно понял, то включение/выключение работает записью в регистр, а статус уже получается из соответствующего input register (так и не удалось проверить во время предыдущего выезда), такое может быть?
Как в таком случае читать из одного input register, а записывать - в другой holding register?
Нашёл в вашей документации
{
"name": "Relay 1",
"write_address": "20", // адрес, куда мы записываем команды
"address": "21", // адрес, по которому мы читаем состояние
"reg_type": "coil",
"type": "switch",
"format": "u16",
"group": "channels"
}
Но у меня address и write_address - разного типа, как быть?
Заранее благодарю за помощь!