Добрый день, данный пост посвящен проекту — ссылка на Github.

Основная идея, получать данные из прибора HT2000 через USB кабель и сохранять в базу данных, далее графически отобразить данные.

Внешне это выглядит как‑то так.

Собранный проект
Собранный проект

В качестве базы данных можно использовать любую доступную базу данных, как mysql или postgresql, так и prometeus (тогда потребуется проект немного доработать).

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

Отображение показателей
Отображение показателей

В качестве MCU будем использовать Orange Pi Zero 2W c ram 4gb, однако и 2gb должно быть достаточно для работы проекта. Подробнее о платке можно почитать тут.

Итак, раз я java разработчик, то возьму доступный jetty9 из репозитория debian и соберем небольшой backend у себя на машинке, для этого нам понадобится база данных. В качестве базы данных используем mariadb. Ставим либо локально, либо в докере. Я ставил локально.

Database

Установка базы данных на ubuntu/debian дело не хитрое, выполняем заклинание apt install mariadb-server.

Далее создаем схему базы данных.

Собственно все, у вас должна получится схему ht2000 и единственная таблица events. Так как ничего сверх тяжелого происходить не будет, таблицу можно преобразовать в формат MyISAM на ваше усмотрение.

Заранее создаем схему для grafana.

Далее, можно выставить настройки базы данных. Они хранятся в файле /etc/mysql/mariadb.conf.d/50-server.cnf на машинке. У меня используются следующие настройки для уменьшения пытки sdcard системы.

innodb_buffer_pool_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_doublewrite = 0

USB

Для того чтобы наш пользователь backend имел доступ к чтению данных из прибора нужно добавить прав в udev каталог. Берем файлик https://github.com/Levon24/HT2000/blob/master/udev/55-ht2000.rules и закидываем в каталог /etc/udev/rules.d/и ребутаем машинку. На этом вроде как все.

Jetty

Установка сервиса выглядит как заклинание apt install jetty9. После этого можно убавить аппетиты backend настройкой в файле /etc/jetty9/start.ini параметров.

jetty.threadPool.minThreads=2

jetty.threadPool.maxThreads=32

Так же можно поджать параметры java в файле /etc/default/jetty9

JAVA_OPTIONS="-Djava.awt.headless=true -XX:+UseG1GC -server -Xms128m -Xmx256m -Dnetworkaddress.cache.ttl=300 -Xlog:gc:/var/log/jetty9/gc.log"

Далее собираем war файл (mvn clean package) и файл ht2000.war подкладываем в каталог /var/lib/jetty9/webapps/ на машинку. Если включен автодеплой по приложение должно подхватится сразу, найти прибор ht2000 и по таймеру начать писать данные в базу данных.

Grafana

Установка для пользователей из России не напоминает стандартную инструкцию. Так как не мы одни попали в такую историю, можно использовать зеркало из поднебесной таким образом у нас получается файлик /etc/apt/sources.list.d/grafana.list со следующим содержимым.

deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://mirrors.cloud.tencent.com/grafana/apt/ stable main

Процесс установки описан в инструкции более чем подробно. Ранее мы создали схему для grafana и лучше её использовать, по умолчанию используется sqlite.

Следующий шаг - настраиваем в grafana наш datasource, куда пишет наше backend приложение. Написано подробно тут и все параметры можно взять из шага Database.

Сам дашборд можно импортнуть отсюда.

По результату вы должны увидеть графики показателей СО2, температуры и влажности.

Комментарии (6)


  1. NutsUnderline
    03.01.2025 12:12

    сам прибор хороший? а то я как раз планировал перечитывать обзоры измерителей co2 и думать про прикручивание wifi, а тут - готовое решение для меня


    1. Levon24 Автор
      03.01.2025 12:12

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

      Я бы предложил купить датчик и подцепить его к i2c шине, у pi на гребенку разведен этот интерфейс. Устройство будет более компактным и за меньшую цену. Возможно позже, так и сделаю и поделюсь решением.


      1. NutsUnderline
        03.01.2025 12:12

        я нашел картинку внутренностей HT2000. внутри там платка sensair похоже SenseAir S8 это хорошо, там кстати куча интерфейсов, но меня смущает тема калибровки, ну и в данном случае мне надо бы относительно красивое законченное устройство а не самоделка.

        есть более красивый родич сабжа под названием HT-501, на таком же датчике, но про него что то я не понял про подключение к ПК

        самоделка тоже есть "готовая" https://habr.com/ru/companies/lamptest/articles/536294/

        термодатчик на HT2000 сделан относительно грамотно - небольшая доп. платка, не совсем как надо бы, но почти.


    1. Pavel_de_pavel
      03.01.2025 12:12

      Хороший, лет 10 у меня, заказывал на али. От батареек правда работает некорректно, хоть и отсек для них есть. Но про это и так все знают. Температуру тоже неточно показывает, завышает. Но для со2 он точен


  1. Madfisht3
    03.01.2025 12:12

    Не лучше ли использовать бд временных рядов для большей эффективности? Или использовать TimescaleDB для postgres.


    1. Levon24 Автор
      03.01.2025 12:12

      Почему, нет. Можете проект форкнуть и доработать.