Добрый день, я в принципе и в предыдущим решением пока что не заметил ложных срабатываний, но сам в другом городе сейчас. В выходные приеду - накачу, дам ОС
Эту проблему можно легко обойти, если сделать копию функции, например, “whenChangedCounter”, лишённую данного недостатка. Более того это даст вам возможность оперировать именно со своими счётчиками, или в целом данными от своих конкретных устройств, поведение которых можно исправить, и не завязываться на вообще всё.
Итак, протестировал.
В предпоследнем решении ю, которые вы предлагали была только одна проблема - первая сработка счетчика после перезагрузки (правило не реагировала) в дальнейшем все норм.
Накатил последнее Ваше решение:
- При перезагрузке драйвера serial - все ок
- При перезагрузке контроллера через кнопку reboot в интерфейсе - все ок
- При выключении автомата - все ок
- При снятии питания с контроллера (модули продолжают работать) - правило срабатывает, свет включается
- При снятии питания с модулей (Контролер продолжает работать) - все ок
Правильно понимаю что на последнем релизе с последним предложенным костылем, у вас всё работает как ожидается?
Все работает, кроме 4 пункта
В бытовых случаях как часто такая ситуация воспроизводится и доставляет дискомфорт в использовании умным домом?
Честно именно этот момент ни разу ) но вы попросили протестировать варианты - я их и указал
Значит в большинстве случае костыль охватывает все бытовые случаи использования оборудования.
С последующими обновлениями постараемся исправить эту проблему.
Дополнительно оповещу.
/* 1. Одиночное нажатие на включение*/
function button(name, input, output) {
defineRule({
whenChanged: input + " Single Press Counter",
then: function(newValue, devName, cellName) {
log("Срабатывание правила newValue: {}, output: {}, this.prevValue: {}".format(newValue, output, this.prevValue));
if (newValue === null) return;
if (newValue == this.prevValue) return;
if (newValue == 0) {
if (this.prevValue < (65536 - 5)) {
return;
}
}
if (newValue > 0) {
log("Выход переключился")
dev[output] = !dev[output];
}
this.prevValue = newValue;
}
})
};
Если перезагрузить wb-rules, потом драйвер - срабатывает переключение.
Время между перезагрузкой правил и драйвера может пройти довольно много. Если между этими перезагрузками не случалось переключения, получаем ложное срабатывание
Благодарю за обратную связь.
Пока еще не готово решение этого вопроса.
Как будет информация, я сразу оповещу.
а уточните, пожалуйста, “при снятии питания” - это значит, правило срабатывает, когда контроллер обесточен?
(я веду к тому, не может ли это быть поведение, настроенное внутри реле на потерю связи с контроллером)
На модулях не настроено ничего вообще.
При снятии питания - имеется в виду скидывайте клеммы питания с контроллера а потом ее накидывание - и после этого уже срабатывает
Тогда ещё хочу попросить вас прислать логи тех моментов, когда происходило неожиданное переключение, и если ещё допишете в сообщении точное время переключений и в какую сторону оно произошло (вкл->выкл или наоборот) - будет вообще прекрасно.
Вы ведь используете последнюю версию правил от Максима? (которая пишет в лог в самом начале вне зависимости от реального срабатывания?)
Я пришел к выводу, что предпоследнее предложение от Максима меня устраивает. Один лишь в нем минус - это игнорирование первого нажатия кнопки в случае перезагрузки контроллера , но это терпимо, зато ложных срабатываний нет.
Последнее же решение довольное странно себя повело, я даже не смог сформулировать в какие моменты это правило само по себе решало включить ли ему свет (например после перезагрузки котнтроллера) - выключаю вводной автомат (все соответсвенно тухнет) → включаю автомат → правила отработали сами по себе → свет включился. Прям тут-же повторяю данный цикл - свет не включился (ну или наоборот включился)
В виду большого количества тумаков полученных от супруги из-за постоянно включающегося света - вынужден дать ей остыть и месяцок пожить без переделки правил, работает хоть так, да и бог с ним
Что ж, если однажды найдётся возможность всё-таки собрать логи, будем очень признательны. Мы у себя так и не смогли воспроизвести, к сожалению