Уточняющий вопрос. При “управление выключено” я могу правилом считывать изменения состояния входов или это полная деактивация входов модуля ?
Да, можно из правил считывать состояние входов.
Вне зависимости от состояния регистров 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, отключить все ненужные каналы, у некритичных ко времени каналов время опроса увеличить, а у критичных ко времени - счетчиков - уменьшить (если сейчас большое). Если есть возможность, то подключить на отдельный порт.
Можно чуть подождать. Уже тестируется прошивка диммера с поддержкой аппаратной обработки.
Не совсем понимаю как это мне поможет… я ведь по двойному нажатию кнопки на диммере св лент должен управлять выходом реле на совсем другом модуле wb
Для идентификации двойных нажатий можно опрашивать специальные регистры счетчиков срабатывания дискретных входов в диммере, как уже писал коллега. Диммер сам аппаратно посчитает количество нажатий и быстрые нажатия он не пропустит. Затем в правилах нужно сравнить предыдущее значение счетчика с новым значением. Если величины отличаются более, чем на 1, значит, было двойное нажатие.
Речь о канале “Input X counter”? Или есть другие регистры?
По какому событию?
По событию изменения счетчика
Да, речь об этом регистре
Тестирование:
“двойное” - это отдельное событие.