Шлюз MQTT - OPC UA

Добрый день. При попытке управления через scada или opc ua клиент не получается менять значения виртуальных устройств и включать / выключать buzzer. В шлюзе все включено, и все видно на scade и opc клиенте, но при попытке изменить в логах контроллера выдает:

|04-06-2025 09:24:06.632 [wb-mqtt-opcua]|INFO: [OPCUA] session: SecureChannel 6 | Session ns=1;g=813fbee7-5c16-9bde-c69c-e97e5c65d61d | WriteRequest returned status code BadNotWritable|
|—|—|
|04-06-2025 09:24:06.509 [wb-mqtt-opcua]|INFO: [OPCUA] session: SecureChannel 6 | Session ns=1;g=813fbee7-5c16-9bde-c69c-e97e5c65d61d | WriteRequest returned status code BadNotWritable|
|04-06-2025 09:24:06.260 [wb-mqtt-opcua]|INFO: [OPCUA] session: SecureChannel 6 | Session ns=1;g=813fbee7-5c16-9bde-c69c-e97e5c65d61d | WriteRequest returned status code BadNotWritable|
|04-06-2025 09:24:06.135 [wb-mqtt-opcua]|INFO: [OPCUA] session: SecureChannel 6 | Session ns=1;g=813fbee7-5c16-9bde-c69c-e97e5c65d61d | WriteRequest returned status code BadNotWritable|
|04-06-2025 09:24:05.890 [wb-mqtt-opcua]|INFO: [OPCUA] session: SecureChannel 6 | Session ns=1;g=813fbee7-5c16-9bde-c69c-e97e5c65d61d | WriteRequest returned status code BadNotWritable|
|04-06-2025 09:24:05.764 [wb-mqtt-opcua]|INFO: [OPCUA] session: SecureChannel 6 | Session ns=1;g=813fbee7-5c16-9bde-c69c-e97e5c65d61d | WriteRequest returned status code BadNotWritable|
|04-06-2025 09:24:05.395 [wb-mqtt-opcua]|INFO: [OPCUA] session: SecureChannel 6 | Session ns=1;g=813fbee7-5c16-9bde-c69c-e97e5c65d61d | WriteRequest returned status code BadNotWritable|

Контроллер AQA6U3RD unstable.latest 8.5.1D/4GR 1.3.3A-4G2
Один раз получилось как то это победить, но после перезагрузки снова возникло.

Выявил закономерность, если включить или выключить ( если ранее был включен) “Интервал проверки соединения” то все начинает работать до следующего перезапуска.

Добрый день!
Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.

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

Благодарю, потребуется некоторое время на ответ.

Добрый день.
Видно что при запуске wb-mqtt-opcua контрол еще не был создан:

Jun 04 11:07:29 wirenboard-AQA6U3RD wb-mqtt-opcua[1870]: ERROR: [OPCUA] Can't get data type for node 'buzzer/volume'. Fallback to BaseDataType.
Jun 04 11:07:29 wirenboard-AQA6U3RD wb-mqtt-opcua[1870]: ERROR: [OPCUA] Control is not found 'buzzer/volume'
Jun 04 11:07:29 wirenboard-AQA6U3RD wb-mqtt-opcua[1870]: ERROR: [OPCUA] Control is not found 'buzzer/volume'

Соответственно:

Jun 04 11:19:26 wirenboard-AQA6U3RD wb-mqtt-opcua[1870]: INFO: [OPCUA] session: SecureChannel 2 | Session ns=1;g=05cea46f-ba7e-826f-eb4e-f43fe96e6686 | WriteRequest returned status code BadNotWritable
Jun 04 11:19:56 wirenboard-AQA6U3RD wb-mqtt-opcua[1870]: INFO: [OPCUA] session: SecureChannel 2 | Session ns=1;g=05cea46f-ba7e-826f-eb4e-f43fe96e6686 | WriteRequest returned status code BadNotWritable

Если wb-mqtt-opcua запускается при уже опубликованном контроле - то корректно читает его тип.
Описал баг, отдал разработчикам.

А как то по таймеру можно сделать перезагрузку шлюза, как временное решение?

Вполне, да.
Например после запуска через минуту выполнить systemctl restart wb-mqtt-opcua.

Хоть из wb-rules, описав таймер на 20 секунд:

SetTimeout(function{
  //тут вызов внешней команды.
  }), 20000);

То есть как временное решение можно сделать так ?
setTimeout(function() {
runShellCommand(“systemctl restart wb-mqtt-opcua”)
.then(function(output) {
log(“OPC-UA service restarted successfully. Output:”, output);
})
.catch(function(error) {
log(“Error restarting OPC-UA service:”, error);
});
}, 20000);

Да, вполне. Но

без “capturedOutput” вернет только (всегда удачны) результат.
Вот тут описано: GitHub - wirenboard/wb-rules: Rule engine for Wiren Board

Ну и пример c выводом: Скрипт для пингования хоста

Бага в работе, пока не исправлено.