Если использовать вместо switch тип pushbutton, то всё работает корректно
При этом данная проблема возникает только с write_address. Если использовать просто address, то переключатель работает корректно. Но специфика оборудования требуется записывать в один регистр, а читать из другого.
В процессе экспериментов заработало вообще странным образом, когда указывается два раза write_address.
{
“id”: “power_control_onoff_1”,
“name”: “Power Control_onoff_1”,
“reg_type”: “holding”,
“write_address”: “40002:0:1”,
“write_address”: “40078:0:1”,
“group”: “io_control”,
“type”: “switch”,
“off_value”: “0”,
“on_value”: “1”
},
Но это как бы вообще не вариант использовать такой workaround.
Еще заметил такой момент в логе.
2026-04-30T13:50:51.559Z [wb-mqtt-serial] DEBUG: [register] <modbus-tcp:50:holding: 40002:0:1> (U16) new value: 0x0000
Почему тут указан регистр 40002:0:1, когда меняем 40078:0:1
Я понимаю, что этот лог может относится к тому, что он поменял. Но почему тогда это происходит в туже милисекнду, что и изменение?
Тут, пожалуй, нужно воспроизводить.Соберу подходящий стенд, с кастомным устройством после праздников.
На всякий случай - точно ли у вас ПО актуальной версии? Если нет - обновите до актуального.
Подготвка закончена, формулирую задачу:для проверки:
При переключении контрола в off значение младшего бита в регистре 40078 (контрол virtDev/value2) ставится в 0.
Ну и запись видим из debug лога сервиса.
Немного не так. У нас есть регистр, который требуется менять - 40078
И есть регистр, из которого требуется читать новое значение, после изменения регистра - 40002.
Для это использую конструкцию в шаблоне
“address”: “40002:0:1”,
“write_address”: “40078:0:1”,
Именно при таком варианте и происходит данная ошибка.