Здравствуйте
Заметил что после резкого движения показатель current motion приходит в норму не сразу, а постепенно спадает какое-то время (порядка 8-10 секунд). Настройка времени усреднения по моим наблюдениям на это не влияет.
В wiki у вас на графике такое же поведение: Универсальный настенный датчик WB-MSW v.4 — Wiren Board, я так понимаю так и задумано? Есть ли способ поменять время спадания?
Моя задумка - отключать свет при перемещении в другую зону, но сейчас показатели падают плавно, current motion в первой зоне ещё некоторое время остаётся выше порога и включает свет обратно. Я наверняка обойду это ограничение кодом, но поведение интересное
Добрый день!
Можете, пожалуйста, уточнить подробнее задачу — для чего требуется столь быстрое отключение света?
Варианты, которые можно рассмотреть для решения:
- Установить таймер, чтобы при включении свет не мог быть повторно активирован в течение заданного времени — это исключит “дрожание” сигнала;
- Поднять пороговое значение на включение/выключение (например, по датчику или уровню сигнала), чтобы реакция происходила только при явном изменении, и свет быстрее отключался при спаде сигнала.
Просто как небольшая оптимизация. Таймер на освещение порядка минуты выставлен и нет смысла держать его такое время, если пользователь ушёл в другую зону (когда контроллер знает что только один человек в квартире).
Вариант с таймером на “невключение” не совсем подходит, т.к. пользователь может быстро вернуться. Порог поднять тоже не поможет, т.к. вместе с этим, как я понимаю, придётся таймер на отключение сильно меньше выставлять
Я пока думаю это решить через сравнение current motion с предыдущим - если текущее значение выше предыдущего значения с этого же датчика, значит движение действительно есть и по нему можно продлять таймер. Но думал может есть настройка датчика с этим периодом затухания
Добрый день!
Сравнение — действительно хороший подход, наверно будет самый точный.
Добавил идею по добавлению регистра для указания периода угасания движения в книгу пожеланий.
Подскажите, есть ли хотя бы туманный прогноз по поводу того, когда это будет реализовано?
У меня задача другая - по нескольким датчикам и дверям определять в какой именно зоне находится человек. Из-за этой особенности с запаздыванием код усложняется просто до безобразия, особенно если обрабатывать ситуацию с двумя и более людьми в разных зонах.
Прост конкретно сейчас нужно решить, какой комментарий в коде оставить. Варианты:
- “TODO: переделать через 2 месяца когда добавят настройку быстродействия датчиков”
- “Даже не пытайся разобраться в коде ниже. Просто забей.”.
Добрый день!
На данный момент данная идея ещё не была рассмотрена из-за высокой загрузки разработчиков, поэтому даже примерные сроки, увы, подсказать не могу.
Добрый день! Сделали отдельный регистр для задания времени RC фильтра в мс.
Для тестирования выполните следующие шаги:
- Остановите wb-mqtt-serial:
systemctl stop wb-mqtt-serial
- Обновите прошивку с помощью команды (замените адрес и порт на свой):
wb-mcu-fw-updater update-fw -a16 /dev/ttyRS485-1 --branch feat-FW-1324-pir-rc-filter-time
- Установите значение времени RC фильтра. По умолчанию стоит 2000 мс. Чем оно меньше, тем быстрее падает Current motion. У меня оптимально получалось при 300 мс. Минимальное значение - 10 мс, максимальное - 2000 мс.
modbus_client -mrtu -pnone -s2 /dev/ttyRS485-1 -a177 -t6 -r278 300
- Запустите 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);
}
})
Отлично! Рад что все работает, помечаю тему как решенную.