WB-MSW v.4: инерция движения

Здравствуйте
Заметил что после резкого движения показатель current motion приходит в норму не сразу, а постепенно спадает какое-то время (порядка 8-10 секунд). Настройка времени усреднения по моим наблюдениям на это не влияет.
В wiki у вас на графике такое же поведение: Универсальный настенный датчик WB-MSW v.4 — Wiren Board, я так понимаю так и задумано? Есть ли способ поменять время спадания?

Моя задумка - отключать свет при перемещении в другую зону, но сейчас показатели падают плавно, current motion в первой зоне ещё некоторое время остаётся выше порога и включает свет обратно. Я наверняка обойду это ограничение кодом, но поведение интересное

Добрый день!

Можете, пожалуйста, уточнить подробнее задачу — для чего требуется столь быстрое отключение света?

Варианты, которые можно рассмотреть для решения:

  • Установить таймер, чтобы при включении свет не мог быть повторно активирован в течение заданного времени — это исключит “дрожание” сигнала;
  • Поднять пороговое значение на включение/выключение (например, по датчику или уровню сигнала), чтобы реакция происходила только при явном изменении, и свет быстрее отключался при спаде сигнала.

Просто как небольшая оптимизация. Таймер на освещение порядка минуты выставлен и нет смысла держать его такое время, если пользователь ушёл в другую зону (когда контроллер знает что только один человек в квартире).
Вариант с таймером на “невключение” не совсем подходит, т.к. пользователь может быстро вернуться. Порог поднять тоже не поможет, т.к. вместе с этим, как я понимаю, придётся таймер на отключение сильно меньше выставлять

Я пока думаю это решить через сравнение current motion с предыдущим - если текущее значение выше предыдущего значения с этого же датчика, значит движение действительно есть и по нему можно продлять таймер. Но думал может есть настройка датчика с этим периодом затухания

Добрый день!
Сравнение — действительно хороший подход, наверно будет самый точный.
Добавил идею по добавлению регистра для указания периода угасания движения в книгу пожеланий.

Подскажите, есть ли хотя бы туманный прогноз по поводу того, когда это будет реализовано?

У меня задача другая - по нескольким датчикам и дверям определять в какой именно зоне находится человек. Из-за этой особенности с запаздыванием код усложняется просто до безобразия, особенно если обрабатывать ситуацию с двумя и более людьми в разных зонах.

Прост конкретно сейчас нужно решить, какой комментарий в коде оставить. Варианты:

  • TODO: переделать через 2 месяца когда добавят настройку быстродействия датчиков
  • Даже не пытайся разобраться в коде ниже. Просто забей.”.

Добрый день!

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

Добрый день! Сделали отдельный регистр для задания времени RC фильтра в мс.

Для тестирования выполните следующие шаги:

  1. Остановите wb-mqtt-serial:

systemctl stop wb-mqtt-serial

  1. Обновите прошивку с помощью команды (замените адрес и порт на свой):

wb-mcu-fw-updater update-fw -a16 /dev/ttyRS485-1 --branch feat-FW-1324-pir-rc-filter-time

  1. Установите значение времени RC фильтра. По умолчанию стоит 2000 мс. Чем оно меньше, тем быстрее падает Current motion. У меня оптимально получалось при 300 мс. Минимальное значение - 10 мс, максимальное - 2000 мс.

modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a177 -t6 -r278 300

  1. Запустите wb-mqtt-serial:

systemctl start wb-mqtt-serial.

Если будут вопросы, обращайтесь.

Добрый день.
Я правильно понимаю, что это экспериментальная прошивка? Стоит ожидать этот регистр в testing? Если да, то планируется ли добавить настройку в UI?

Добрый день,
Да, все верно, после успешной проверки будет добавлено в тестинг.

Добрый день! Вы пока не тестировали? Еще есть идея вывести регистр сырых (мгновенных) значений датчика.

Здравствуйте, спасибо! Я потестировал с 300ms, работает, текущее движение сильно быстрее снижается

Но я в целом тогда решил через отлавливание роста, стабильно работало всё это время на релизной версии:

var prevmotion;
var motionFirst=false;
defineRule(“motion_bathroom”, {
  whenChanged: [“ws_bathroom/Current Motion”],
  then: function(newValue, devName, cellName){
    if(!dev.Lbath.state && dev.Lbath.timer>0) return; //антитаймер
    var prev=prevmotion;
    prevmotion=newValue;
    if(newValue < 150)  return; //ниже порога
    if(newValue < prev) return; //ловим только рост
    log(devName, newValue, prev);
    if(dev.mode.singleplayer && dev.L10.timer>0) dev.L10.timer=0.1;
    if(dev.Lbath.state && dev.Lbath.timer<=0) return; //включено навсегда
    if(!dev.Lbath.auto) return;
    if(!dev.Lbath.state && dev.ws_bathroom.Illuminance > 30) return;
    motionFirst = true;

    dev.Lbath.state = true;
    dev.Lbath.timer=Math.max(50, dev.Lbath.timer);
    startTimer("nomotion", 55000);
  }
})

Отлично! Рад что все работает, помечаю тему как решенную.