Всем добра. Тоже интересует эта тема. Пока в написании правил не очень силен. А что если по нажатию самой кнопки запускать таймер на 1200 мили секунд и реагировать на изменение счетчика пока тикает таймер? Мне кажется такой алгоритм исключит проблему перезапуска реле. Послезавтра доберусь до контроллера, испытаю.
Еще раз напомню: в программировании не силен. Вот с помощью такого правила удалось добиться стабильной перезагрузки, как реле, так и контроллереа. Может есть вариант написания проще? Знающие поправьте.
Но при записи настроек драйвера, свет зажигается. Может еще какой вариант допилить? Например:не обрабатывать правило спустя какое то время после восстановления связи с реле.
var runFlag = false;
defineRule("Button-Press", {
whenChanged: ["wb-mr6c_104/Input 1",
"wb-mr6c_104/Input 3",
"wb-mr6c_104/Input 4"],
then: function (newValue, devName, cellName) {
if (newValue){
runFlag = true;
setTimeout(function () {
runFlag = false;
}, 1200);
}
}
});
defineRule("Knopki-BSD", {
whenChanged: ["wb-mr6c_104/Input 1 Long Press Counter",
"wb-mr6c_104/Input 3 Long Press Counter",
"wb-mr6c_104/Input 4 Long Press Counter"],
then: function (newValue, devName, cellName) {
if (runFlag){
dev["Outside_lamp/Switch1"] = !dev["Outside_lamp/Switch1"];
runFlag = false;
}
}
});
Добрый день.
Разнес сообщения по разным темам.
Жаль что вы столкнулись с этой проблемой.
Займемся решением в ближайшее время, воспроизведем, выясним причину, исправим и оповестим вас в этой теме об изменениях.
Здравствуйте. Когда же все таки решится вопрос со счетчиками? Сегодня обновил реле wb-mr6c v.2 до последней прошивки. Со счетчиками так ничего и не поменялось. После обесточивания реле некоторые счетчики нажатий сбрасываются в ноль, некоторые сохраняются. Год прошел. Использование счетчиков нажатий в правилах не безопасно… Так и живу пока на правиле, что написано выше. Иначе при перезагрузке реле, правила срабатывают видя изменения счетчика на ноль.
Ответьте пожалуйста, как закончились эксперементы: 1-не занимались, 2-занимались и не нашли решение, 3-занимались и нашли решение( если так, то какое)? Извините за назойливость.
Как костыль - у модуля есть время аптайма, в настройках включается опрос этого регистра, и можно сделать правило, что в первые 10-20-60 секунд игнорировать его. Правда надо экспериментировать, потому что может так получится, что он включится и регистр прочитается позже, чем счётчики.
Отсюда другой костыль - завести на контроллер информацию об обрыве питания, и игнорировать модули до появления питания +10-20… секунд. Как вариант - это можно делать по данным мета еррор для модуля - так скрипт поймет, что модуль помер, и подготовит запустит таймер. И после первого удачного чтения таймер запуститься, отсчитает, и только после этого снимется запрет на реакции. Правилами естественно делать.
Концептуально согласен, что в системе высокого уровня это должно быть решено на уровня драйвера/ядра.
Получается: занимались и не нашли решения. Все что вы перечислили - костыли. Тогда проще остаться на том варианте, что у меня работает. Жаль, я думал что за год что-то решилось… Неужели это такая проблема: писать счетчики нажатий в память и после перезагрузки читать оттуда?
Не знаю, я не имею отношения к поддержке и команде ВБ, просто иногда отвечаю на темы, которые мне кажутся интересными и где могу что-то подсказать. Если у вас без проблем работает костыль, то тогда ясно, мои предложения бессмысленны.
Спасибо вам за попытку помочь. Хотелось бы еще увидеть комментарии техподдержки
Добрый день!
Для диагностики проблемы прошу прислать архив с диагностической информацией контроллера.
Как его создать — подробно описано в инструкции:
Документация: обновление прошивки и выгрузка диагностического архива
Также, пожалуйста, опишите подробнее:
— что именно подключено;
— как настроено устройство и какие параметры заданы;
— какие действия вы предпринимаете;
— и что в результате получаете (или не получаете).
Это поможет быстрее разобраться в ситуации и предложить решение.
Которые именно счетчики нажатий сохраняются? Посмотрел документацию - таких нет для модулей реле.
Это доволно интересно, дайте тип модуля, версию прошивки - воспроизведу, возможно баг.
Вполне безопасно. У меня например аптайм системы под полгода - никаких описанных проблем нет. Я не выключаю реле, не перезапускаю контроллер, не меняю настройки. Да, конечно, описан вариант реакции на пропадание связи с модулями, в случае восстановленияизменения значений игнорируются. .
В память чего?
Ну, вы прочитайте тему сначала. Ее просто разнесли по разным темам, еще год назад обещали дать ответ. Ответа не последовало решил поднять снова. Проблема вся в том, что при обесточивании реле описанного выше и последующем его включении, происходит сброс счетчиков длинных нажатий в ноль( причем некоторые сбрасываются, а некоторые остаются неизменны для разных входов). На эти сбросы в ноль, контроллер реагирует как на изменения счетчиков и отрабатывают правила завязанные на них. По крайней мере год назад, когда я обращался с проблемой, было так. Сейчас я обновил реле на последнюю прошивку и провел эксперимент, со счетчиками картина не изменилась. От сюда вопрос озвученный выше. Проблему решали или нет, и если решили то как?
Ну, я вижу описание бага сро счетчиками, которые после перезагрузки модуля реле остаются в без изменений. Я проверил на WB-MR6C v2 с прошивкой 1.21.5 - не воспроизвелось.
Поэтому - подскажите, на каом устройстве и с какой прошивкой поведение не соответствует документациии?
Реагирует не контроллер - а скрипт.Если есть какая-то комбинайия на которую не должен реагировать - ну так и проверьте на нее.
У меня такое же реле и такая же версия прошивки. Завтра видео запишу. На некоторых каналах сбрасываются в ноль, на некоторых остаются без изменений.
Так бывает не всегда иногда не сбрасываются другие каналы. Почему нельзя все счетчики сохранять неизменно после перезагрузки реле. Использовать их в правилах было бы проще.
А вот для того счётчика, что не сбросился - попробуйте после перещёлкнуть выключатель - какое состояние у него станет - 1 или 5? (условно). По идее 1.
Есть такое подозрение, что при восстановлении связи и мгновенном обновлении всех параметров - подтупливает связь и поэтому не все счётчики обновляются. Об этом же выше пишет и BrainRoot - они должны все в 0 упасть. Ещё можно посмотреть сам топик.
Что касается вашей идеи сохранять их в память реле - такая себе идея. EEPROM не самая надёжная штука для таких частых перезаписей. Вот идея не обнулять счётчик, а делать его переход с 65535 на 1 мне кажется более здравой и логичной. По идее и программно не сложно, и алгоритмы сломать не должно, и отслеживать легко.
Возможно, завтра попробую.
В автомобильных приборках ни разу не видел чтоб EEPROM сдохла. С 90-х годов пробеги туда пишутся, по 30 лет уже некоторые прожили. Я конечно не знаю схемотехнику МR6(да мне это в принципе не интересно), как там реализована EEPROM, это отдельная микросхема или область в процессоре, но мне кажется что кол-во длинных нажатий происходит гораздо реже чем запись сотен метров в приборках. Программистам и разработчикам конечно виднее, но я не понимаю зачем сбрасывать счетчики нажатий при перезагрузке реле? Тем самым создавая счетчик, который считает два параметра: нажатия и рестарты. Если уж счетчик создан считать нажатия, то пусть он считает нажатия, хоть через каждые 10 сбрасываясь на ноль, но считает НАЖАТИЯ. А если он считает литры и метры вперемешку, то…
Техническое решение найти можно, например записью в память при снятии питания. Но с другой стороны это бессмысленно для счётчика, который всё равно через 0 пройдет. Сам по себе механизм счета сделан на уровне контроллера, а не модуля. Ну а вот то, что этот механизм не отлажен - это да.