Lowpass фильтр в WB-MAI11

Здравствуйте!

Вопрос дилетантский, но как работает низкочастотный фильтр в устройстве, а точнее, как на его работу влияет единственный настраиваемый параметр?

Есть NTC 10k температурный датчик, его точность +/-0,25 градуса, а значение возвращается с точностью до 0,1, из-за чего значения десятых постоянно прыгают. Стоит SPS 20 (минимум), количество измерений тоже сделал 20. Значит ли это, что теперь значения с датчика фактически поступают 1 раз в секунду (вместо 20 раз в секунду по-умолчанию)? Настроил частоту опроса показаний температуры и сопротивления каждые 10000 мс, получаю обновления раз в 10 секунд. Но они всё равно постоянно прыгают в пределах 0,2-0,3 градуса. Попробовал задать lowpass filter time равным 15000 мс, получил (после перезапуска wb-mqtt-serial сервиса) медленно растущую от нуля величину, которая не очень похожа на то, что надо.

Видел, что в home assistant lowpass фильтр использует экспоненциальное сглаживание и оперирует постоянной времени, по сути задавая вес новому значению относительно прошлого. Там всё понятно, но добавлять ещё одну постобработку не хотелось бы. Как бы правильно настроить встроенную в MAI11 ?

Попутно вопрос. Значения, которые опрашиваются каждые 10 секунд, по факту на MQTT шину приходят с переменными интервалами времени. Если значение отличается от предыдущего, оно приходит каждые 10 секунд, но если не отличается, то не приходит ничего, как бы предполагая, что последнее значение верно, и его подтверждать не надо. А мне для нормальной работы lowpass фильтра в постобработке как раз важно получать значения равномерно, чтобы знать, как их правильно сглаживать. Возможно ли для устройства или отдельных контролов как-то включить дублирование повторяющихся значений на mqtt шину?

Нашёл глобальную настройку “Интервал публикации неизменившихся значений” для wb-mqtt-serial драйвера в целом, поменял стоявшее там значение 60 на 0, получил то, что и хотел. Только на этом уровне данная настройка применяется, или её можно избирательно для устройства/порта настроить?

По lowpass filter time вопрос всё ещё в силе. :slight_smile:

Добрый день.
Как и написано в документации фильтр программный, он указывает время соранные за которое измерения усредняются. То есть АЦП получает (измеряет) так же, но измеренные значения записываются в стек с отбрасыванием наиболее старых. Отдается - среднее от значений стека.

Если имеется в виду “max_unchanged_interval” - то это глобальная настройка для всех устройств. И минимальное значение все же 5.

Спасибо, стало понятнее. Только есть нюанс: пусть я задал даже 30000 мс, то есть должно возвращаться среднее значение за последние 30 секунд. Но при таком режиме при перезапуске wb-mqtt-serial драйвера начальное значение уходит с реальных +12 градусов в фантомные -12, из которых очень неспешно (порядка 7-8 часов) возвращалось к реальным значениям. Как будто в пустом стеке где-то есть отрицательные значения, или они неправильно интерпретируются. Выглядит это как-то так:

В итоге, пока отключил, точнее, явно указал 0, что должно отключить фильтр.

Как реальный интервал — возможно. Но у нуля особая настройка. Веб даёт такую подсказку: “Задает интервал публикации значений, если они не изменились. Ноль задает публикацию после каждого чтения данных из устройства. По умолчанию публикация происходит по изменению значения. Отрицательное число задает поведение по умолчанию”. Кстати, тут ничего не сказано про единицу измерения, это же секунды?

Задал вопрос разработчику.

А с каими параметрами вот такой медленный рост был? Оно воспроизводится, но не настолько медленно. Дайте конфигурацию MAI11, можно кусок из wb-mqtt-serial.conf чтобы смогли достоверно воспроизвести.

Добрый день!

Все описанные вами проблемы с lowpass фильтром были воспроизведены и исправлены в прошивке 1.3.0. Если есть возможность, обновить прошивку и проверьте, всё ли работает как надо.

Обновить прошивку можно командой wb-mcu-fw-updater update-fw /dev/ttyRS485-1 -a1 --version 1.3.0 (укажите верный адрес устройства и порт)

Да, это так, но это справедливо только если у вас настроен один канал, а остальные отключены. Если вы настроите еще 1 такой же канал - то период опроса их обоих будет уже 2 секунды, т.к. каналы опрашиваются последовательно. Еще нужно учитывать, что для NTC есть компенсация самонагрева: чем дольше датчик опрашивается, тем больше пауза между опросами. Поэтому нет большого смысла выставлять большое количество повторных измерений.

Здесь фильтр работает так же: в интерфейсе вы задаете постоянную времени.

1 лайк

Здравствуйте!

Спасибо за обновление прошивки! Поставил версию 1.3.0, отключил повторные измерения, вернул интервал усреднения 30 сек: при перезапуске wb-mqtt-serial никаких провалов и медленного роста не зафиксировал. Даже отключил питание на MAI11, чтобы наверняка — всё в порядке, сразу же пришло верное значение с датчика. Похоже, что теперь всё работает как надо!

Кстати, очень удобно прошивать без предварительного скачивания нужного файла прошивки!

Кусок конфига:

        {
          "channels" : 
          [
            {
              "channels" : 
              [
                {
                  "data_rate" : 20,
                  "device_type" : "ntc_10k",
                  "lowpass" : 30000,
                  "name" : "IN_P"
                },
                {
                  "device_type" : "disabled",
                  "name" : "IN_N"
                }
              ],
              "device_type" : "p_ntc_10k",
              "name" : "Input 1"
            },
            {
              "device_type" : "disabled",
              "name" : "Input 2"
            },
            [...]
            {
              "device_type" : "disabled",
              "name" : "Input 11"
            }
          ],
          "device_type" : "WB-MAI11",
          "poll_interval" : 10000,
          "slave_id" : "28"
        }
1 лайк

Отлично, спасибо за обратную связь.

Также мы скоро обновим шаблон: в версии 1.3.0 добавились регистры с фактическим периодом опроса каждого канала.

1 лайк