Имеется установленный модуль e-bus, который работает с котлом Vaillant. Проблема следущая:
Работает отопление.
Меняем что-нибудь в настройке драйвера serial-устройств. Любой шины, любого устройства, вообще никак не относящегося к e-bus. Сохраняем.
Все уставки сбрасываются на нули.
Котел останавливается, что весьма неприятно, т.к.:
Даже если сразу вручную моментально вернуть уставку обратно, котел-то уже успел потерять настроение работать. У него начинается небольшая депрессия и он начинает тупить - переходит в режим ожидания. N минут думает о своей жизни, потом че-то там пощелкает, пожужжит, и, может быть, решит продолжить. А может и нет. Еще полчасика поспит.
Но гораздо чаще происходит другая ситуация - никто просто не вспоминает, что нужно вернуть уставки на место. Отопление встает, и только через сутки кто-нибудь спрашивает “а что-это так холодно-то стало? А почему-это котел включен, но не греет?”.
Это происходит при любом перезапуске, будь то: изменение настроек, сбой/перезапуск службы, перезапуск контроллера, обновление пакета.
Причем я помню, что перезапуск моего предыдущего контроллера 7.4 никогда не приводил к остановке отопления. Проблема появилась после обновления на 8.5. Хотя это может быть просто совпадением.
Для уставок - нет.
Соответственно после выключения питания уставка не задана. Это вполне ожидаемо.
То есть после перезагрузки (по любой причине) нужно уставку вновь задавать.
Например ту, что была установлена прошлый раз.
Для примера Не сохраняются уставки - #3 от пользователя BrainRoot
Пичаль. Видимо потому, что “…адрес хранится в энергонезависимой памяти шлюза с ограниченным числом циклов перезаписи в 100000, поэтому не рекомендуется частая смена адреса.”. Не хранят уставку, берегут память.
Однако это был случай с отключением питания. А как насчет случая без отключения питания, но с перезапуском драйвера? Почему изменение настроек serial вызывает сброс?
А вот тут интереснее.
Уточните пожалуйста - с какой прошивкой модуль?
У меня под рукой нет, к сожалению именно такого модуля - чтобы проверить.
Проведете эксперимент?
Его цель - понять в какой момент меняется.
Предполагаю что при срабатывании setup-секции wb-mqtt-serial.
То есть при запуска - в модуль пишутся все параметры настройки. То что выбрано, в том числе и режим.
То есть:
убедитесь что уставка есть
остановите wb-mqtt-serial
прочитайте значение регистра 0xcb из модуля
Ну и запустите wb-mqtt-serial
Предполагаю что после остановки - значение не поменяется. А вот после запуска - да.
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 и сразу наблюдаю, что оно обнулилось, котел отрубает горелку.
При запуске - в модуль пишется в том числе и режим.
"heating_options" : 0,
То есть это.
Срабатывает условие и в 203 (0xcb) с 205 регистром модуля пишется 0.
При этом в 0xcb пишется 0 всегда. Тут не совсем понимаю логику. Возможно забыто условие, condition.
Предлагаю для проверки скопировать шаблон в пользовательский каталог, убрать из него
Здравствуйте.
Не совсем понимаю, что я делаю не так (еще не имел дело с шаблонами устройств).
Беру файл /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 валиден, и какие-то ошибки…
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
Что-то странное, видимо происходило с файлом, поскольку я копировал его не через cp а по протоколу fish. Плюс, если удаленно его редактировать в kate то тоже что-то портится (может, переносы строк или меняется кодировка). Не суть.
Скопировал через cp, отредактировал в nano. Всё успешно загрузилось судя по логу.
Запустил отопление. Задал уставку. Подождал, пока котел не начнет реально греть.
Результат эксперимента: не наблюдаю изменений уставки. Котел как работал так и работает.
Ваша версия подтверждена.
Осталось понять, с какой целью был добавлен сброс уставки разработчиками, правильно ли он был реализован (не отсутствуют ли какие доп. условия), и можно ли его убрать.
Было у меня такое, когда кодировка на системе не совпадала, уже не помню что делал.
Но так-то файлы обычные, текстовые, внутри просто json.
Судя по
какой-то странный символ добавился.
Разработчики рекомендуют в шаблоне поменять это самое значение, “0” - на “какое нужно”. Например на 45.
Цель этого значения - чтобы после перезапуска контроллера оно выставлялось “какое нужно”.
Собственно говоря я бы разделил совсем ситуации, есть два кейса:
просто перезапуск wb-mqtt-serial. При этом питание с модуля не снимается, нет никакой нужды в перезаписи уставки.
Перезапуск контроллера. Тут, в текущей версии модуля, уставка в нем не сохраняется.
Для того чтобы уставка сохранялась при перезапуске сервиса - достаточно в шаблоне убрать ее запись в “0”. Это уже сделали.
Для того чтобы устанавливалась нужная при перезапуске контроллера - вот так, например.
То есть при каждом изменении уставки - она записывается в хранилище.
IMO, это не выглядит корректным решением, поскольку, так же как и в случае с “0”, шаблон даже самим наличием действия изменения уставки, по сути, вмешивается в более высокоуровневую логику, о которой он не может ничего знать, и которая управляет отоплением по более сложным правилам, учитывающим количество задействованых петель, температуру за окном, в гидрострелке и в зависимости от того, куда мы качаем теплоноситель - в радиаторы и/или теплые полы, работаем ли мы без горсети (короче кошмар ). Т.е. шаблон просто не может знать значение “какое нужно”. Его не существует - оно меняется.
Но лично меня такое решение с удалением этой секции из шаблона пока устраивает, хоть это и неочевидный оверрайдинг, о котором я могу забыть через месяц. Другой минус - оригинальный шаблон может измениться со временем незаметно для меня. Поэтому я бы предпочел, чтобы эта секция либо была удалена из оригинального шаблона, либо чтобы шаблон был доработан типа чтобы это значение “сброса” можно было устанавливать и отключать через UI.