Проблемы автокалибровки MSW v.3?

Дано: 2 датчика MSW в полной комплектации. Один стоит в комнате 1, другой - в комнате 3 (этот был проблемный, - замена СО2 датчика Перестал показывать значение СО2 датчик WB-MSW v.3 zigbee - #24).

Датчики откалиброваны вручную в одних условиях. Включена автокалибровка (которая 7-дневная).

В комнате 1 датчик показывает “условно нормальные показания” - кривая колеблется от уровня 400+ (никого нет), до 700-800. Все ок. Сначала график 6-ти часовой (обращу внимание, VOC, а также влажность, температура,- идеально, СО2 почему-то отдает не все, есть небольшие провалы - это тоже отдельный вопрос, почему так), потом 7-ми дневный.


Теперь комната 3. Первые 2-3 дня датчик показывает “условно нормальные показания”. Но потом, похоже, его автокалибровка начинает “уплывать” вверх, то есть датчик начинает занижать показания. А, поскольку ниже 400 он не отдает, на графике начинаются все более и более длительные “провалы” (то есть он считает, что реальное значение ниже 400). И чем больше времени проходит - тем больше провалы. Также отмечу, что, в отличие от графика в комнате 1, сама “пила” графика при тех же условиях использования жилого помещения, - все ниже и ниже.
Сначала 6 часов:


И 7-ми дневный:

Казалось бы, алгоритм должен увидеть этот “новый низкий уровень” СО2, и изменить калибровочное значение. Но этого почему-то не происходит.

1 лайк

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

Полагаю, что если показания датчика не изменяются, то они не публикуются в топик MQTT. Если они не публикуются, то они и не сохраняются в базу. В результате на графике появляются разрывы.

Алгоритм автокалибровки такой: датчик работает непрерывно в течение 7 дней и запоминает самое минимальное свое показание CO2 за это время. По истечении 7 дней минимальные показания датчика за это время приравниваются к 400 ppm.

Полагаю, что если показания датчика не изменяются, то они не публикуются в топик MQTT. Если они не публикуются, то они и не сохраняются в базу. В результате на графике появляются разрывы.

Это все понятно. Только это не мой случай. Публикую сегодняшний график за последние 6 часов в комнате 3, тут наложено 2 кривых: зеленая - показания СО2 от ClearGrass, желтая - показания СО2 от MSW, датчики рядом.


Тут как бы четко видно, что проблема не в том, что значения не меняются. Они меняются. И MSW, думаю, их тоже видит. Только, похоже, что автокалибровка теперь считает 440 - началом отсчета. И не видит проблемы, что значения колеблются 350-400, ниже 400- значит “не отдаем”. А должен сделать значение 350 - новым значением калибровки. И начать отдавать новые значения!
А вместо этого он все время “уплывает”.

При этом, не Zigbee-версия, в другой комнате, - все корректно, “пляшет” от 400:

Он это делает “один раз” в жизни? Каждые 7 дней? Каждый день, раз в день, считая последние прошедшие 7 дней?.. Какая частота этого процесса?

он пересчитывает каждые 7 суток

на ваших графиках десятки ppm над атмосферным уровнем. Это точнее, чем может померить датчик. Обращать на это внимание не нужно, это как школьной линейкой измерять микроны.

Вы очень упрощённо представляете себе процедуру автокалибровки. Это не просто сдвиг вверх-вниз какого-то измеренного значения ppm. На самом деле, там внутри сложные запатентованные алгоритмы и калибровочные таблицы. Датчик вполне может откалиброваться, но снова вычислить значение меньше 400ppm из-за дрейфа показаний, изменения температуры, просто из-за гистерезиса - куча причин.

Вот честно, когда этот датчик показывал ниже 400 ppm какую-то ерунду, мы получали ноль обращений от клиентов. Теперь датчик стал точнее, а мы получаем обращения по нескольку раз в неделю.
Почему он точнее: в атмосфере меньше 415ppm быть не может никак. Разница между реальной и отображаемой концентрацией меньше, если показывать фиксированные 400 ppm при низкой концентрации, чем если показывать что-то меньшее 400 ppm, даже если так выдаёт алгоритм датчика.

Тут как бы 2 вопроса.

  1. Почему датчики явно ведут себя по-разному? Один ведет себя “нормально”, второй - нет? Где ошибка - в прошивке? В алгоритме автокалибровки? В датчике?
  2. Мне с автоматизацией что делать? С точки зрения логики, - если от датчика нет значения определенное время, то в алгоритме обязано быть заложено, что он стал неисправным.
    От него часами нет данных, что делать? СО2 все время ниже 400, или он неисправен? Вентиляцию врубить на полную? Полностью выключить?
    Мне тут предлагали опрашивать принудительно брокером раз в минуту. Ну, допустим, ок, настроил опрос, - а от него все время 400. Он неисправен? У меня ровно так было - отдал 400, и молчит. Неделю…

Почему второй датчик и ClearGrass ведут себя “по-человечески”, а этот датчик - нет?
Сейчас он “уплыл” на 50 ppm, а завтра он насколько “уплывет”? По Вашему описанию алгоритма такого уплывания “быть не может”. Но оно есть…

Прошу прощения, я понимаю, что Вы хотели сказать, но со стороны это чистый схизис:

на ваших графиках десятки ppm над атмосферным уровнем. Это точнее, чем может померить датчик. Обращать на это внимание не нужно, это как школьной линейкой измерять микроны.

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

По-моему, или “он стал точнее”, и тогда “измеряет микроны”. Или он не предназначен для “измерения микронов”, но тогда он точно не стал точнее.
С точки зрения логики, “стать точнее” = “измерять точно десятки ppm”.
А получается, что он “стал точнее, но показывать стал хуже”.

Я Вас понимаю - про обращения. Но у меня вопрос не в том, чтобы “точно калиброванно измерять ppm”, все понятно и про уровень ppm, и про глобальное потепление, и про гистерезис. Задача совершенно конкретна - “уплывает калибровка у одного датчика”, и он перестает отдавать значения. Экспериментального, с zigbee.

По факту что получается. Я наглядно показываю, что она “уплывает” со временем. И получаю ответ “все нормально, так и должно быть согласно запатентованному алгоритму, у нас все точно, как в аптеке”.

Это окончательный ответ за вопрос темы?..Или, если пошли такие обращения, и я не одинок, - может быть, текущий алгоритм не столь совершенен для конечного пользователя? (или прошивка, то есть реализация алгоритма)

Почему он точнее: в атмосфере меньше 415ppm быть не может никак. Разница между реальной и отображаемой концентрацией меньше, если показывать фиксированные 400 ppm при низкой концентрации, чем если показывать что-то меньшее 400 ppm, даже если так выдаёт алгоритм датчика.

Почему для меня он НЕ точнее: я точно знаю, что ниже 415 быть не может в принципе. А в квартире все время кто-то есть: кошки, собаки, грызуны, люди. Ну, буквально, все время кто-то есть. А датчик время от времени, длительные периоды, часами (!) показывает (то есть не отдает никаких значений), что концентрация НИЖЕ 415. Это просто невозможно, ну, - в принципе. Просто по причине “наличия ограждающих конструкций”, то есть это - не улица. Получается, что алгоритм датчика - просто неверный.

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

Но я же не знаю ничего про алгоритм!

Предполагаю, что 7 дней, - неделя, - полный “жизненный цикл” в помещении. То есть ожидается, что за эти семь дней прошли “все сценарии рядового использования” - люди работали, проветривали, курили, спали, и т.д. И они проделали все, что они обычно проделывают. Соответственно, датчик “видел всю картину в целом”, и может понять, когда был минимум.
Думаю, что условные 95% сценариев (не рассматриваем тюрьмы, например…) реального использования это покрывает.

А у меня в комнате 3 по какой-то причине сценарий “выбивается” из этих 95% (может те же животные?..), и алгорим “буксует”.

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

Но это лишь гипотеза.

Отсюда же и возможное решение - раз алгорим автокалибровки, как и написано в документации, не покрывает “все сценарии использования”, - значит его надо отключить совсем.

Но все равно тогда странно, вот перед глазами ClearGrass. Ну он же показывает в этом же месте нормально!.. Ну да, колеблется чуть выше 400, когда нет людей. Все ок.

Или все же алгоритму в MSW есть, “куда расти”…

Попробую я оба датчика рядом повесить…

просто один случайно пересекает произвольную границу в 400 ppm, а другой - нет.
Здесь нет ошибки. Вы неправильно интерпретируете показания датчиков и ждёте от них точности газоанализатора, при том что для любые прикладных применений даже 300 ппм точности было бы достаточно.

Если речь про Modbus, то в wb-mqtt-serial настроить принудительную отправку данных раз в минуту, например. Ну и вообще это тоже неверный вывод: если датчик не ответит сервису, то канал загорится красным в интерфейсе и в meta/error будет ошибка. А если в топике 400 и не меняется, то значит всё хорошо - датчик опрашивается и отвечает сервису.

Это ваши интерпретации.

Кстати обратите внимание, что под ваши критерии “по-человечески” попадает генератор случайных чисел в диапазоне от 350 до 450.

нет, не наглядно. Уплывает - это если он на 100ppm уплывёт и не скомпенсирует это через 7 дней. У вас на картинках нормальное поведение датчика и чистый воздух. Ставьте границу на проветривание на 800 ppm и всё будет прекрасно.

он совершенно точно не совершенен. Но у нас есть выбор из четырёх производителей, которые в принципе в состоянии делать датчик приемлимой точности: Senseair, Wuhan Cubic, Winsen, ZyAura, Senserion со звёздочкой.

Winsen точно не самый плохой.

Мы постоянно ищем варианты найти что-то новое или улучшить что-то в существующих датчиках. К сожалению, вариантов очень мало, как раз из-за патентов и закртости алгоритмов. Нам не дают подробности, не дают сырые данные, не дают сами алгоритмы. Максимум, чего мы пока добились - закрытых данных о долгосрочном дрейфе датчиков и того, что нам период автокалибровки увеличили до 7 дней. От других производителей мы и этого не добились.

И, повторюсь, это хорошие датчики. Мы их продували поверочными калибровочными газовыми смесями и свои 100 ppm они выдерживали в диапазоне до 5000 ppm, что в датчике за $20 можно считать чудом инженерной мысли.

у него точность 100 ппм. Вы понимаете, что если у него точность 100 ппм, то он иногда может показать 400ппм, когда на самом деле 500ппм?

да, всё так

каждые семь дней

возможно. У нас пока не получилось добиться этого от производителей сенсоров.

так отключите! Это же штатная функция, описанная в документации.

Дрейф датчика маленький, для прикладных задач его можно не калибровать год или два.

или они просто опытнее нас и уже начали выдавать случайные числа при маленьких концентрациях, чтобы успокоить клиентов.

два датчика с однаковой точностью бесполезно сравнивать. Чтобы что-то выяснить вам нужен либо ва два раза более точный (спойлер: дешевле $1000 их нет), либо газогенератор, либо калиброванный газ.

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

  1. 7 дней калибровки зашито в самом датчике (пока так), он автокалибруется каждые 7 дней;
  2. в wb-mqtt-serial можно настроить принудительную отправку данных раз в минуту, ошибку датчика можно ловить в meta/error.
  3. дрейф датчика маленький, для прикладных задач его можно не калибровать год или два.

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

defineRule("co2_calibration", {
  when: cron("0 */10 * * *"),
  then: function (newValue, devName, cellName) {
    
    var current_co2_1 = dev["climate02"]["co2"];
        if (current_co2_1 < 404) {   
          dev["climate02"]["co2_recalibrate"] = true;
        }      
    var current_co2_2 = dev["climate01"]["co2"];
        if (current_co2_2 < 404) {   
          dev["climate01"]["co2_recalibrate"] = true;
        }    
  }
});

В чем суть скрипта.
Правильно откалиброванный сенсор при длительном проветривании долежн колебаться где-то на 410-430ppm, не должно быть “полки” на 400-402. Скрипт просто каждые 10 минут проверяет значение и если там полка (ниже 404) - запускает принудительную ручную калибровку. После этого обычно значение отскакивает до 410-415, если опять снизится до 402 - опять калибровка и т.д. Автокалибровку при этом следует отключить.

С таким скриптом калибруется не идеально, но все равно существенно лучше, чем на автоматической.

2 лайка