MRGBW-D 4 independent channels отвязать вход от выхода

Уточняющий вопрос. При “управление выключено” я могу правилом считывать изменения состояния входов или это полная деактивация входов модуля ?

Да, можно из правил считывать состояние входов.

Вне зависимости от состояния регистров 16-18 ?
Мне с одной стороны нужно сохранить управление лентой с другой нужно добавить управление другим устройством (по двойному нажатию).

Да, состояние входов будут всегда отображаться в соответствующих топиках. Главное, чтобы в шаблоне эти каналы были выбраны для опроса.

ОК. Спасибо проверю.
На паузе…

Подисался на топик. Вижу что при кратковременном нажатии в mqtt сообщения о новом статусе не приходят. Хотя должно быть два сообщения 1 и 0. При долгом нажатии порядка 1с сообщения приходят (1 и 0). При этом в регистах 16-18 записана 1.

Куда копать дальше ?

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

А как часто проходит опрс именно этого регистра? Вообще - если в промежуток между замыканием-размыканием входа не было запроса к нему - то он и не отобразится, естественно. Но как раз для обнаружения коротких событий созданы регистры счетчиков нажатий. По их изменению ии можно определить.
Проверьте.

Нет, не было. Но уже в ближайшем будущем будет. И, кстати с аппаратной обработкой типов нажатий.

Это разве не шаблоном определяется ? Все каналы опрашиваются с интервалом 20мс. Этот в том числе. Смотрю в WebUI Serial Device Driver Configuration.

Честно, не знаю каков стандартный интервал импульса от кнопочного выключателя… Мне казалось чтобы сделать меньше 20мс нужно постараться … Попробую чуть задержать нажатие …

Нет, дело в том что планировщик драйвера будет выдерживать 20 мс (или настроенное) только в том случае если на шине одно устройство с одним регистром. Это минимальное значение. Опрос (запрос-ответ) одного регистра на скорости 9600 занимает 25-40 мс. А если устройств несколько, на каждом не по одному регистру - то цикл может быть и полсекунды и больше.

Да уж… с двойным нажатием через правила получилось не очень. На шине 12 модулей. Считаю изменение счетчика нажатий за интервал времени. Если быстро нажать аппаратно модуль светодиодных лент отрабатывает включение/выключение, а по mqtt события изменения счетчика нажатия не происходит (( в итоге получается что если нажал очень коротко, то нужно нажимать больше 2х раз.
Посмотрите пожалуйста код. Может есть очевидные недоработки и ошибки?

var vent_su1_timeout_ms = 180 * 1000; //время работы вентилятора в мс
var vent_su1_timer_id = null;

defineVirtualDevice(“vent_wc1”, {
title: “Вентилятор су1”,
cells: {
OnOff: {
type: “switch”,
value: false
},
lastUpdated: {
type: “value”,
value: 0
}
}
});

defineRule(“vent1_switch_rule”, {
whenChanged: “vent_wc1/OnOff”,
then: function (newValue, devName, cellName) {
dev[“wb-gpio/EXT2_R3A6”] = newValue;
}
});

defineRule(“vent1_push_rule”, {
whenChanged: “wb-mrgb_97/Input 1 counter”,
then: function (newValue, devName, cellName) {
//log("New value = ",newValue);
timeStamp = new Date();
lapsed = timeStamp.getTime() - Number(dev[“vent_wc1”][“lastUpdated”]);
dev[“vent_wc1”][“lastUpdated”] = timeStamp.getTime();

        //log("lapsed ", lapsed);
        //log("now is ", timeStamp.getTime());
        //log ("last updated ", Number(dev["vent_wc1"]["lastUpdated"]));
        //log("Time lapsed", timeStamp.getTime() - Number(dev["vent_wc1"]["lastUpdated"]));
        
        if (lapsed < 8500) { //запуск вентилятора если кнопка была нажата дважды в течении 8.5 секунд
          log("wb-gpio_EXT2_R3A6", dev["wb-gpio/EXT2_R3A6"]);
          dev["vent_wc1"]["OnOff"] = true;
          if (vent_su1_timer_id) {
            clearTimeout(vent_su1_timer_id);
          }
          vent_su1_timer_id = setTimeout(function () {
            dev["vent_wc1"]["OnOff"] = false;
            timeStamp = new Date();
            dev["vent_wc1"]["lastUpdated"] = timeStamp.getTime();
            vent_su1_timer_id = null;
          }, vent_su1_timeout_ms);
        }

    }

});
][“lastUpdated”] = timeStamp.getTime();
vent_su1_timer_id = null;
}, vent_su1_timeout_ms);
}

    }

});

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

Можно чуть подождать. Уже тестируется прошивка диммера с поддержкой аппаратной обработки.

1 лайк

Не совсем понимаю как это мне поможет… я ведь по двойному нажатию кнопки на диммере св лент должен управлять выходом реле на совсем другом модуле wb

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

Речь о канале “Input X counter”? Или есть другие регистры?

По какому событию?

По событию изменения счетчика

Да, речь об этом регистре

Тестирование:

“двойное” - это отдельное событие.