Помогите с проблемой - скрипт проверки связи

Скрипт проверки связи с устройством. На столе проверка работает правильно, но на объект наблюдается проблема - устройство на связи, но висит сигнал нет связи alarm10=true . Что я не правильно сделал?

defineVirtualDevice('var2', {
   title: 'var2',
   cells: {

       alarm10: {
           title: " alarm10",
           type: "switch",
           value: false,
           readonly: true
       }
   }
});

var debounceTime = 10000;
var t1 = null;



defineRule( {
 whenChanged:"p10/s_sost#error",
    then: function (newValue, devName, cellName) {      
       if (newValue == "r") {          
         if (t1 ==null) {    t1= setTimeout (function () {clearTimeout(t1); t1 = null; dev["var2/alarm10"]=true;	 }, debounceTime); }                                                                                                           	
                     } else {   if (t1!="r") { dev["var2/alarm10"]=false; if (t1) {clearTimeout(t1); t1 = null;}  }   } }  }
     );

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

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

Добрый день!
Рассмотрим основные моменты кода:

  1. Ошибка в условии if (t1 != "r")
  • Проверку t1 != "r" рекомендую изменить на t1 !== null.
  1. Неправильное очищение таймера (clearTimeout)
  • clearTimeout(t1) выполняется внутри setTimeout, но t1 уже равно null после очистки.
  • Нужно сначала очистить таймер, а затем присваивать null.
  1. Отсутствует сброс dev["var2/alarm10"] = false
  • Логика обновляет alarm10 = true, но не сбрасывает его в false, если "r" не поступает.
  • В результате alarm10 может зависнуть в true.

Дополнительные ошибки в логах:

Обратите внимание на повторяющиеся ошибки, связанные с RS-485:

Feb 26 10:35:04 wirenboard-AHTZOPRL wb-mqtt-serial[170864]: WARNING: [register handler] failed to write: <</dev/ttyRS485-1 9600 8 N 2> modbus:21:holding_single: 3>: Serial protocol error: request timed out
Feb 26 10:35:05 wirenboard-AHTZOPRL wb-mqtt-serial[170864]: WARNING: [register handler] failed to write: <</dev/ttyRS485-1 9600 8 N 2> modbus:21:holding_single: 3>: Serial protocol error: request timed out
WARNING: </dev/ttyRS485-1 9600 8 N 2>: closed due to repetitive errors
WARNING: </dev/ttyMOD2 9600 8 N 2>: closed due to repetitive errors

Рекомендации:

  • Проверьте соединение с устройствами по RS-485.
  • Убедитесь, что все устройства имеют уникальные адреса.
  • Проверьте правильность настроек скорости и параметров порта.
defineRule( {
 whenChanged:"p10/s_sost#error",
  then: function (newValue, devName, cellName) {
    if(newValue !== "") {
       if (t1 ==null) {   t1= setTimeout (function () {  dev["var2/alarm10"]=true;  }, debounceTime); }  
    } else {
       dev["var2/alarm10"]=false;  clearTimeout(t1);  t1 = null;
    }
  }
});

Так правильно?

Да выглядит верно, можно еще попросить @AIbot написать код.

Добрый день, удалось ли решить вопрос?