Шаблон wb-mqtt-serial для вент. установки Фьорди

Коллеги, прошу помощи с шаблоном для 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 (так и не удалось проверить во время предыдущего выезда), такое может быть?

Вот о чём я

Это holding:

Это input:

Как в таком случае читать из одного input register, а записывать - в другой holding register?

Нашёл в вашей документации
{
    "name": "Relay 1",
    "write_address": "20",   // адрес, куда мы записываем команды
    "address": "21",         // адрес, по которому мы читаем состояние    
    "reg_type": "coil",
    "type": "switch",
    "format": "u16",
    "group": "channels"
}

Но у меня address и write_address - разного типа, как быть?

Заранее благодарю за помощь!

Да, может.

Такое - не предусмотрено. Нет предела фантазии разработчиков. Тогда логично иметь только write_address для одного контрола шаблона и только реад - для другого.

Понял, спасибо!

А по примерам на основе документации - есть замечания? Я верно интерпретирую их документацию?
Особенно в случаях с побитовым чтением…

Да, верно. Ну, тут оптимально все ж сэмулировать установку, например через
https://wirenboard.com/wiki/Modbus_RTU/TCP_Slave

Для теста сэмулировать установку на WB - Вы имеете в виду? Чтобы два WB подключить между собой по Modbus и один из них эмулировал вент. установку?
Я не очень понял, пока не дошёл до этого уровня, но это очень интересно;)

У меня ещё вопрос - по поводу включения/выключения установки.
Есть мысль сделать два контрола в channel с type: pushbutton на включение и выключение, а читаемый статус будет в отдельном контроле. По аналогии, например, с Reboot контроллера или ИК-командами на MSW или MIR, в pushbutton публикуется “1”. Можно ли публиковать “0” по кнопке? (нашёл ответ: для публикации “0” нужно добавить "on_value": 0)
Так вот, можно ли сделать две кнопки с 0 и 1 на один и тот же регистр?

Вот так будет работать?
{
    "name": "Turn on",
    "write_address": "02:0:1",
    "reg_type": "holding",
    "type": "pushbutton",
    "format": "u16",
    "on_value": 1
},
{
    "name": "Turn off",
    "write_address": "02:0:1",
    "reg_type": "holding",
    "type": "pushbutton",
    "format": "u16",
    "on_value": 0
}

С pushbutton только с write_address не проходит проверку wb-mqtt-serial -g.
Видимо, в документации имеется в виду только reg_type: coil. Пришлось поменять на просто address.
Что ж, буду пробовать разными способами записывать этот контрол, затем выберу более удобный.

А pushbutton он же всегда только на запись, наверное, по этому.

Если у вас ещё остались вопросы — задавайте, постараемся помочь.

Я оставил просто address.
Для питания добавил три контрола - два pushbutton на включение и выключение из интерфейса WB, и switch для управления из HA. Всё работает, спасибо!

1 лайк

Если возможно, поделитесь, пожалуйста, с сообществом шаблоном и скриншотом устройства в веб-интерфейсе контроллера — это поможет другим пользователям, которые столкнутся с такой же установкой.

Да, без проблем!

Я сократил шаблон до необходимого мне функционала, а также потому что многие из контролов просто не работали как нужно.

Какие были проблемы

Параметры в шаблоне вообще побитово не хотели нормально записываться. Разные значения записываю, например, в 3:0:8 и 3:8:8 (конкретный пример: Часы и минуты времени на установке, holding регистр 3). В итоге записывается одно и то же значение и старший, и в младший бит. Это касается именно параметров, которые выставляются при конфигурации wb-mqtt-serial.
Также некоторые input register channels вообще выдавали значения не из своего регистра. Вручную через modbus_client читается, например, “0”, через шаблон в интерфейсе - значение из совсем другого регистра (конкретный пример: Температура обратной воды T2, input регистр 8 - отображалось значение из регистра 0). Я искал проблему, перепроверял всё многократно но у меня ничего не вышло. И эти параметры были всё равно избыточны для моих задач (добавлял скорее ради теста), поэтому я убрал их вовсе.

Минимальный базовый шаблон:
config-fiordi-vpu500-basic.json (6,9 КБ)

Скриншот в интерфейсе WB WebUI

В нём всё работает как нужно.
Скриншот старый, ещё на нём не виден holding контрол “Power”. Я его сделал для удобства управления установкой по MQTT извне записью 0 или 1 в один топик. А кнопки “Включить”/“Выключить” - для интерфейса WB.

Вот расширенная версия, но многое у меня не заработало, как я и сказал выше. Может, кому-то пригодится:
config-fiordi-vpu500-full.json (34,4 КБ)

2 лайка

Про чтение-запись битов довольно инетресно
Вот, например: Шаблон для Siemens RDF302 - #12 от пользователя Explorerol
И тут, задача полностью аналогична: Шаблон для Mautomatics JL204С5 (Breezart 550 Lux) - #4 от пользователя BrainRoot

С побитовыми чтением-записью проблем нет, всё работает. Но только в channels.
Через parameters в конфигураторе wb-mqtt-serial побитовая запись не работает почему-то.

Пример установки времени
parameters: {
  "unit_time_hours": {
    "title": "Unit time - hours",
    "address": "03:8:8",
    "reg_type": "holding",
    "type": "value",
    "min": 0,
    "max": 23,
    "format": "u16",
    "group": "unit_settings"
  },
  "unit_time_minutes": {
    "title": "Unit time - minutes",
    "address": "03:0:8",
    "reg_type": "holding",
    "type": "value",
    "min": 0,
    "max": 59,
    "format": "u16",
    "group": "unit_settings"
    }
}

Например, в старшем байте - часы, в младшем - минуты. Через параметры записываю соответствующие значения - в оба контрола записывается только одно значение (наверное - которое было вторым в очереди записи, но не проверял).

В итоге прописал все настройки вент. установки вручную с помощью modbus_client, а из шаблона параметры вообще убрал, чтобы случайно не сломать настройки, в которых, например, вообще каждый бит отвечает за какую-то опцию.

Другое дело - почему некоторые input registers отображают “чужие” значения - вот что интересно))
При этом modbus_client читает их корректно…
С диагностикой там не просто. Связи на объекте нет никакой, условия полевые. Когда будет интернет, удалённый доступ - тогда попробую вернуться к этому снова.

Вот нашёл скрин в корзине:

Скриншот

Это при использовании шаблона “full” из прикреплённых выше.
Температура обратной воды и температура в канале (скорректированная) показывают значения 2073,7 оба. Хотя modbus_client читает нули там (датчиков там, видимо, попросту нет). А 2073,7 - это значения из input регистра прошивки - Firmware Version (адрес - 0). Откуда они там - загадка.
В шаблоне вроде бы всё корректно…

Согласно GitHub - wirenboard/wb-mqtt-serial: Wiren Board MQTT serial protocol driver
в секции parameters шаблона запись адреса регистра типа “address”: “03:8:8” не предполагается. Такая запись допустима только в секции channels.

2 лайка

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.