Остановка отопления после перезапуска драйвера serial

Имеется установленный модуль e-bus, который работает с котлом Vaillant. Проблема следущая:

  1. Работает отопление.
  2. Меняем что-нибудь в настройке драйвера serial-устройств. Любой шины, любого устройства, вообще никак не относящегося к e-bus. Сохраняем.
  3. Все уставки сбрасываются на нули.

Котел останавливается, что весьма неприятно, т.к.:

  • Даже если сразу вручную моментально вернуть уставку обратно, котел-то уже успел потерять настроение работать. У него начинается небольшая депрессия и он начинает тупить - переходит в режим ожидания. N минут думает о своей жизни, потом че-то там пощелкает, пожужжит, и, может быть, решит продолжить. А может и нет. Еще полчасика поспит.
  • Но гораздо чаще происходит другая ситуация - никто просто не вспоминает, что нужно вернуть уставки на место. Отопление встает, и только через сутки кто-нибудь спрашивает “а что-это так холодно-то стало? А почему-это котел включен, но не греет?”.

Это происходит при любом перезапуске, будь то: изменение настроек, сбой/перезапуск службы, перезапуск контроллера, обновление пакета.

Причем я помню, что перезапуск моего предыдущего контроллера 7.4 никогда не приводил к остановке отопления. Проблема появилась после обновления на 8.5. Хотя это может быть просто совпадением.

Добрый день.
Для определенности: модуль имеете в виду WBE2-I-EBUS?
Если да - то с какой прошивкой?

Тут - хочется подробностей.
Уставки - какие регистры?

Ну и желателен эксперимент.
А предварительно - загрузите архив с диагностической информацией контроллера. Создание архива описано в документации.

Да, имеется в виду модуль WBE2-I-EBUS.

Прошивка 1.4.

Прошу прощения за множественное число. Сбрабывается только “уставка отопления”.

Провожу эксперимент.

  1. Останавливаю Home Assistant, чтобы не мешал.

  2. Деактивирую все правила, чтобы не мешали.

  3. Создаю диагностический архив “до“:

    приложен диагностический архив, доступен только сотрудникам поддержки
    (268,2 КБ)

  4. Фиксирую состояние “до“:


    обращаем внимание, что уставка отопления сейчас “46“. Котел работает.

  5. reboot!

  6. После перезагрузки смотрим состояние снова:


    Уставка сбросилась на “0“. Котел остановился.

  7. На всякий случай еще один архив уже после перезагрузки:

    приложен диагностический архив, доступен только сотрудникам поддержки
    (362,1 КБ)

Ужа понятнее.
Так, смотрю в документацию.
Хранение в энергонезависимой памяти заявлено для адреса, четности, например:

Для уставок - нет.
Соответственно после выключения питания уставка не задана. Это вполне ожидаемо.
То есть после перезагрузки (по любой причине) нужно уставку вновь задавать.
Например ту, что была установлена прошлый раз.
Для примера Не сохраняются уставки - #3 от пользователя BrainRoot

Пичаль. Видимо потому, что “…адрес хранится в энергонезависимой памяти шлюза с ограниченным числом циклов перезаписи в 100000, поэтому не рекомендуется частая смена адреса.”. Не хранят уставку, берегут память.

Однако это был случай с отключением питания. А как насчет случая без отключения питания, но с перезапуском драйвера? Почему изменение настроек serial вызывает сброс?

А вот тут интереснее.
Уточните пожалуйста - с какой прошивкой модуль?
У меня под рукой нет, к сожалению именно такого модуля - чтобы проверить.
Проведете эксперимент?
Его цель - понять в какой момент меняется.
Предполагаю что при срабатывании setup-секции wb-mqtt-serial.
То есть при запуска - в модуль пишутся все параметры настройки. То что выбрано, в том числе и режим.
То есть:

  • убедитесь что уставка есть
  • остановите wb-mqtt-serial
  • прочитайте значение регистра 0xcb из модуля
  • Ну и запустите wb-mqtt-serial

Предполагаю что после остановки - значение не поменяется. А вот после запуска - да.

Повторяетесь :slight_smile: 1.4.

root@wirenboard-A3TKCJDI:~# systemctl stop wb-mqtt-serial
root@wirenboard-A3TKCJDI:~# modbus_client --debug -mrtu -b19200 -pnone -s2 /dev/ttyMOD2 -a12 -t0x03 -r203
Opening /dev/ttyMOD2 at 19200 bauds (N, 8, 2)
[0C][03][00][CB][00][01][F4][E9]
Waiting for a confirmation...
<0C><03><02><00><2E><15><99>
SUCCESS: read 1 of elements:
        Data: 0x002e

0x002e это как раз 46 градусов. Всё верно. Т.е. после остановки wb-mqtt-serial уставка отопления всё еще задана. Собственно, котел и дальше продолжает работать. Запускаю обратно wb-mqtt-serial и сразу наблюдаю, что оно обнулилось, котел отрубает горелку.

Получается, проблема в wb-mqtt-serial.

При запуске - в модуль пишется в том числе и режим.

          "heating_options" : 0,

То есть это.
Срабатывает условие и в 203 (0xcb) с 205 регистром модуля пишется 0.
При этом в 0xcb пишется 0 всегда. Тут не совсем понимаю логику. Возможно забыто условие, condition.
Предлагаю для проверки скопировать шаблон в пользовательский каталог, убрать из него

            {
                "title": "disable direct heating control",
                "address": 203,
                "reg_type": "holding",
                "value": 0
            },

ну и проверить.
Также позову разработчиков шаблона.

Добрый день. Получилось проверить? Разработчики пока не ответили, к сожалению, зачем нужно в шаблоне обнулять уставку.

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

Беру файл /usr/share/wb-mqtt-serial/templates/config-wbe2-i-ebus.json, копирую как есть в /mnt/data/etc/wb-mqtt-serial.conf.d/templates/config-wbe2-i-ebus-original.json

И в логе получаю ошибку (лог идет снизу вверх):

28-12-2025 10:57:47.104	WARNING: [templates] Existing template data for device type 'tpl1_web2_i_ebus' (from file /etc/wb-mqtt-serial.conf.d/templates/config-wbe2-i-ebus-modified.json) replaced with contents of file /etc/wb-mqtt-serial.conf.d/templates/config-wbe2-i-ebus-original.json
28-12-2025 10:57:47.067	  Syntax error: value, object or array expected.
28-12-2025 10:57:47.067	ERROR: [serial] Failed to reload template: Failed to parse JSON /etc/wb-mqtt-serial.conf.d/templates/config-wbe2-i-ebus-original.json:* Line 1, Column 1

Я как бы даже еще не трогал содержимое файла, исходный JSON валиден, и какие-то ошибки…

Да, это верно, совершенно.

Проверяю.
Копирую шаблон как есть, не меняя имя:

cp /usr/share/wb-mqtt-serial/templates/config-wbe2-i-ebus.json /mnt/data/etc/wb-mqtt-serial.conf.d/templates/

Проверяю что он скопирован:

ls -l /mnt/data/etc/wb-mqtt-serial.conf.d/templates/
total 52
-rw-r--r-- 1 root root  9427 Oct  8 06:45 config-gateControl.json
-rw-r--r-- 1 root root  7460 Mar  1  2025 config-modbusopentherm.json
-rw-r--r-- 1 root root 16538 Jul 24 14:35 config-rangeSensor.json
-rw-r--r-- 1 root root 12067 Dec 29 07:30 config-wbe2-i-ebus.json

В логе:

Dec 29 08:31:20 wirenboard-AC4U5OVN wb-mqtt-serial[25288]: WARNING: [templates] Existing template data for device type 'tpl1_web2_i_ebus' (from file /usr/share/wb-mqtt-serial/templates/config-wbe2-i-ebus.json) replaced with contents of file /etc/wb-mqtt-serial.conf.d/templates/config-wbe2-i-ebus.json

При наличии в “пользовательском” каталоге шаблона с тем же id - используется огн.
Имя файла значения не имеет.
Проверил так же:

Dec 29 08:39:43 wirenboard-AC4U5OVN wb-mqtt-serial[25288]: WARNING: [templates] Existing template data for device type 'tpl1_web2_i_ebus' (from file /usr/share/wb-mqtt-serial/templates/config-wbe2-i-ebus.json) replaced with contents of file /etc/wb-mqtt-serial.conf.d/templates/config-wbe2-i-ebus-original.json

Рекомендую сравнить файлы:

diff /usr/share/wb-mqtt-serial/templates/config-wbe2-i-ebus.json /mnt/data/etc/wb-mqtt-serial.conf.d/templates/config-wbe2-i-ebus-original.json

Что-то странное, видимо происходило с файлом, поскольку я копировал его не через cp а по протоколу fish. Плюс, если удаленно его редактировать в kate то тоже что-то портится (может, переносы строк или меняется кодировка). Не суть.

  1. Скопировал через cp, отредактировал в nano. Всё успешно загрузилось судя по логу.
  2. Запустил отопление. Задал уставку. Подождал, пока котел не начнет реально греть.
  3. Перезапустил serial через
    systemctl stop wb-mqtt-serial && systemctl start wb-mqtt-serial
    

Результат эксперимента: не наблюдаю изменений уставки. Котел как работал так и работает.
Ваша версия подтверждена.
Осталось понять, с какой целью был добавлен сброс уставки разработчиками, правильно ли он был реализован (не отсутствуют ли какие доп. условия), и можно ли его убрать.

1 Like

Было у меня такое, когда кодировка на системе не совпадала, уже не помню что делал.
Но так-то файлы обычные, текстовые, внутри просто json.
Судя по

какой-то странный символ добавился.

Разработчики рекомендуют в шаблоне поменять это самое значение, “0” - на “какое нужно”. Например на 45.
Цель этого значения - чтобы после перезапуска контроллера оно выставлялось “какое нужно”.
Собственно говоря я бы разделил совсем ситуации, есть два кейса:

  • просто перезапуск wb-mqtt-serial. При этом питание с модуля не снимается, нет никакой нужды в перезаписи уставки.
  • Перезапуск контроллера. Тут, в текущей версии модуля, уставка в нем не сохраняется.

Для того чтобы уставка сохранялась при перезапуске сервиса - достаточно в шаблоне убрать ее запись в “0”. Это уже сделали.
Для того чтобы устанавливалась нужная при перезапуске контроллера - вот так, например.
То есть при каждом изменении уставки - она записывается в хранилище.

IMO, это не выглядит корректным решением, поскольку, так же как и в случае с “0”, шаблон даже самим наличием действия изменения уставки, по сути, вмешивается в более высокоуровневую логику, о которой он не может ничего знать, и которая управляет отоплением по более сложным правилам, учитывающим количество задействованых петель, температуру за окном, в гидрострелке и в зависимости от того, куда мы качаем теплоноситель - в радиаторы и/или теплые полы, работаем ли мы без горсети (короче кошмар :face_with_peeking_eye:). Т.е. шаблон просто не может знать значение “какое нужно”. Его не существует - оно меняется.

Но лично меня такое решение с удалением этой секции из шаблона пока устраивает, хоть это и неочевидный оверрайдинг, о котором я могу забыть через месяц. Другой минус - оригинальный шаблон может измениться со временем незаметно для меня. Поэтому я бы предпочел, чтобы эта секция либо была удалена из оригинального шаблона, либо чтобы шаблон был доработан типа чтобы это значение “сброса” можно было устанавливать и отключать через UI.

Совершенно согласен, я также считаю что текущая реализация не очень. Ну и обсуждаю это с компанией Невотон.

Поддерживаю.