Скрипт проверки связи с устройством. На столе проверка работает правильно, но на объект наблюдается проблема - устройство на связи, но висит сигнал нет связи 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 КБ)
Добрый день!
Рассмотрим основные моменты кода:
- Ошибка в условии
if (t1 != "r")
- Проверку
t1 != "r"
рекомендую изменить на t1 !== null
.
- Неправильное очищение таймера (
clearTimeout
)
clearTimeout(t1)
выполняется внутри setTimeout
, но t1
уже равно null
после очистки.
- Нужно сначала очистить таймер, а затем присваивать
null
.
- Отсутствует сброс
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 написать код.
Добрый день, удалось ли решить вопрос?