Wb-rules: Как обнаружить утрату связи с Modbus-устройством?

Добрый день! Возникла вполне ожидаемая потребность в определении моментов, когда по одному из каналов Modbus-устройства перестали поступать данные. По любой причине - отказ подключенного датчика, утрата связи с устройством, обрыв линии. Видел несколько топиков на портале на сравнимую тему от 2019 года. Может, появилось что-то новое в этой части для wb-rules?

Добрый день.

Реализовывал подобное с помощью создания виртуального устройства которое отслеживает изменения в топиках, что бы помечать отсутствие связи с устройством на SVG панели красным. Можете попросить ИИ сформировать под ваш запрос, вполне себе справляется с JS.

Использовал timeoutMs , ниже пример кода:

var deviceName = "virt_lux";
var timeoutMs = 5000;   // 5 секунд без обновлений = потеря связи
var luxTimer = null;

defineVirtualDevice(deviceName, {
    title: {
        "en": "Virtual Lux",
        "ru": "Виртуальный люкс"
    },
    cells: {
        LUX_Value: {
            title: {
                "en": "LUX Value",
                "ru": "Освещенность"
            },
            type: "value",
            value: 0
        },
        Connection: {
            title: {
                "en": "Connection",
                "ru": "Связь"
            },
            type: "switch",
            value: false
        }
    }
});
defineRule("update_lux_value", {
    whenChanged: "wb-ms_89/Illuminance",   // укажите реальное имя устройства
    then: function (newValue) {

        if (newValue !== undefined && newValue !== null) {

            dev[deviceName + "/LUX_Value"] = newValue;
            dev[deviceName + "/Connection"] = true;

            if (luxTimer) {
                clearTimeout(luxTimer);
            }

            luxTimer = setTimeout(function () {
                dev[deviceName + "/Connection"] = false;
            }, timeoutMs);
        }
    }
});

Идея понятна, спасибо. Вопрос: в каких случаях в обработчик правила могут попадать вышеуказанные значения?

Этот способ косвенный и неэффективный, а есть способ прямой и эффективный.
Драйвер устанавливает …/meta/error при ошибках чтения, записи, и когда он не успевает опросить устройство за отведенное время.
Для работы с …/meta/error почитайте: GitHub - wirenboard/wb-rules: Rule engine for Wiren Board

В обработчик then(newValue, devName, cellName) могут приходить:

undefined
— если значение ещё не существует (устройство/контрол ещё не создан при старте);
— если контрол временно отсутствует (перезапуск драйвера, реконфигурация);
— если есть ошибка в имени контрола.

null
— если драйвер или правило явно опубликовали null;
— если устройство недоступно и значение сброшено;
— если вы сами присвоили null виртуальному контролу.

Добрый день.
Если у вас остались вопросы к тех поддержке - пишите, постараемся помочь.