Senseair s8 калибровка

В прошлой статье я рассказал, как начать программировать под ESPHome. Пришло время сделать что-то действительно полезное.

Есть такой датчик измерения концентрации углекислого газа в воздухе – MH-Z19B. Он уже поддерживается ESPHome, но проблема в том, что этот датчик имеет встроенную автокалибровку. То есть, он берет минимальный уровень CO2 за прошедшие сутки и считает, что это значение равно 400ppm. В плохо проветриваемом помещении через несколько дней датчик начинает сильно врать.

Но есть решение – автокалибровку можно отключить. Для этого нужно сначала откалибровать датчик на свежем воздухе, а затем послать специальную команду для отключения автоматической калибровки.

Матчасть

Для начала я выяснил, что существует две ревизии этого датчика – MH-Z19 и MH-Z19B. Отличаются они незначительно, но калибруются немного по-разному. MH-Z19 командой принудительной калибровки калибруется в 0ppm, а MH-Z19B – в 400ppm.

Изучаем даташиты (MH-Z19, MH-Z19B), revspace, библиотеку для работы с датчиком на гитхабе и статьи на хабре. Находим нужные команды для включения и отключения автокалибровки, а также – для принудительной калибровки. Изучаем существующий код работы с датчиком в ESPHome. Вроде ничего сложного.

Пишем код

Для начала нужно определиться, как мы будем работать с датчиком в прошивке. Я выделил несколько обязательных пунктов:

  • Возможность включить или выключить автоматическую калибровку сразу при загрузке.
  • Возможность включить или выключить автоматическую калибровку во время работы.
  • Возможность ручной калибровки.
  • Обратная совместимость, т.е. чтобы при прежних настройках конфига ничего в логике работы не менялось.

Первые два пункта можно сделать параметром при описании сенсора в yaml, а вот третий нужно сделать каким-то сервисом, который можно вызвать из Home Assistant.

Про анемометры:  Какие меры гарантируют взрывозащиту оборудования? что обеспечивает взрывозащиту

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

Проверяем результат (ага, как же – датчика-то у меня нет), создаём Pull request, пишем тесты, если нужно.

Senseair s8 калибровка

Как этим пользоваться

Я добавил параметр для управления автокалибровкой при загрузке, методы для ручного включения/выключения автокалибровки и метод для ручной калибровки.

Вот пример, как отключить автокалибровку на старте (automatic_baseline_calibration: true/false):

sensor: – platform: mhz19 id: my_mhz19_id co2: name: “MH-Z19 CO2 Value” temperature: name: “MH-Z19 Temperature” update_interval: 60s automatic_baseline_calibration: false

Если параметр automatic_baseline_calibration не указан, логика будет такая же, как и до изменений.

А вот пример, как выполнить ручную калибровку. Для этого можно объявить сервис, который позднее можно будет вызвать из Home Assistant:

api: services: – service: mhz19_calibrate_zero then: – mhz19.calibrate_zero: my_mhz19_id

А вот так можно сделать switch для включения и выключения автоматической калибровки из Home Assistant:

switch: – platform: template name: “MH-Z19 ABC” optimistic: true on_turn_on: mhz19.abc_enable: my_mhz19_id on_turn_off: mhz19.abc_disable: my_mhz19_id

Документация

Дело за малым – донести миру о наших прекрасных нововведениях. Документация ESPHome находится на сайте https://esphome.io/, контент этого сайта хранится на гитхабе в репозитории esphome-docs. Редактировать документацию можно прямо через интерфейс Github! Например, страница нужного нам датчика находится здесь и в правом верхнем углу есть карандашик (убеждаемся, что находимся в ветке next).

Senseair s8 калибровка

Такой способ создаст форк репозитория, ветку в нем, закоммитит файл в ветку и вы сможете сделать pull request с вашими изменениями.

Senseair s8 калибровка

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

По инструкции из предыдущей статьи создадим форк репозитория esphome-docs, скачаем его и запустим контейнер:

Про анемометры:  МР 4.3.0212-20. Методы контроля. Физические факторы. Контроль систем вентиляции. Методические рекомендации (утв. Главным государственным санитарным врачом РФ 04.12.2020)

cd ~ git clone https://github.com/Anonym-tsk/esphome-docs.git cd esphome-docs git checkout next git checkout -b mhz19_autocalibration docker build -t esphome-docs -f Dockerfile. docker run -it -p 8000:8000 -v `pwd`:/data/esphome-docs esphome-docs

Переходим по адресу http://127.0.0.1:8000 и видим локальную копию сайта ESPHome.

Пишем документацию в формате ReStructuredText, перезапускаем контейнер, проверяем, создаем Pull request.

Проверяем на хомяках пользователях и радуемся первым комментариям:

Senseair s8 калибровка

Заключение

Вот так, очень просто можно добавить недостающие функции в ESPHome и написать документацию. После принятия пулл-реквестов код попадет в следующий релиз, а документацию еще до релиза можно будет посмотреть на сайте next.esphome.io

1 часть

Датчики (MH-Z19B, SenseAir s8-53, Даджет МТ8057 )

Senseair s8 калибровка

Автокалибровка ABS- у датчика MH-Z19B включена, 

 MH-Z19B – первое включение, автокалибровался в хорошо проветриваемом помещение к 14.30

Senseair s8 калибровка

2 день MH-Z19B начал уплывать

Senseair s8 калибровка

MHZ-19B на второй день начал уплывать в показаниях, думаю дальше будет ещё хуже, все из за ABC -калибровки которая каждый день запускается и если помещение плохо проветривалось то он калибруется не верно и данные уплывают. (у SenseAir S8 53 и Даджета автокалибровка раз в 7 дней или чуть даже больше) т.е. для квартиры они явно подходят лучше если ещё и вентиляция плохая. 

С MH-Z19B можно сделать следующие, откалибровать, т.е. хорошо проветрить помещение, судя по графику на это потребовалось 12 часов, после зайти в настройки и отключить автокалибровку, тогда его показания не уплывут он будет показывать правильно.

(4-е Датчика SenseAir s8-53) сравнение показателей между собой

Senseair s8 калибровка

Senseair s8 калибровка

Один из датчиков Senseair упорно не хочет АВТОкалиброваться (показывает в +100) остальные Senseair показывают одинаково

Senseair s8 калибровка

На всех датчиках включена Автокалибровка (автокалибровал по улице) (один из датчиков Senseair s8 показывает значения в “+100” с чем это связанно я не знаю, предстоит выяснить)

Про анемометры:  Оптический датчик протока

Senseair s8 калибровка

MH-Z19B отключен (для наглядности)Даджет МТ8057 и 3-и датчика Senseair s8-53 показывают идентичные значенияодин из SenseairS8 – завышает

“Хочу попробовать использовать принудительную калибровку, в даташите сказано что контакт bCAL, при замыкании на землю на 4-8 сек запускает процесс калибровки по окружающему воздуху (должно быть 400 ppm), либо если на 16сек, то запустится калибровка по 0 содержанию. Кто-нибудь пробовал это?”

Замкнул удерживал длительно (про время забыл) Датчик скинул показания до 133

Senseair s8 калибровка

Senseair s8 калибровка

Перезамкнул на 4-е секунды показания увеличились до 320ppm, прошёл день, показания у датчика сравнялись

Показания за 7 февраля

Показания за 9 февраля

Senseair s8 калибровка

На этом сравнение подходит к концу, что я пытался выяснить во 2-ой части? 

Есть ли расхождение 4-ех датчиков Senseair s8-53 между собой в одинаковых условиях, после того как они автокалибровались.

 Сборка метеостанции, продолжение 

Почитать про сенсоры:

Оцените статью
Анемометры
Добавить комментарий