Выложил на гитхаб исходники своего телеграм-бота для мониторинга степени загрязнения уличного воздуха микрочастицами. Если вам тоже интересно узнать, чем вы дышите - прошу под кат за подробностями.
PM2.5 и PM10
В городском воздухе всегда имеется некоторое количество так называемых мелкодисперсных частиц (particulate matter, PM). Наиболее крупные из них - это хорошо знакомая нам всем пыль. Более мелкие частицы практически не осаждаются на поверхностях, но при этом представляют весьма реальную угрозу здоровью. Среди этих частиц есть два класса наиболее опасных - PM10 (размером до 10 микрометров) и PM2.5 (размером до 2.5 микрометров). Последние представляют наибольшую опасность, так как их малые размеры позволяют им практически беспрепятственно попадать через легкие внутрь организма и разноситься кровотоком по внутренним органам. Исследования Всемирной организации здравоохранения показали, что именно частицы PM2.5 повинны в огромном количестве смертей на планете, в частности от рака лёгких и от других заболеваний1.
Измерение концентрации микрочастиц
Источников частиц PM2.5 довольно много, как первичных (горение мусора), так и вторичных (реакции химических загрязнений с образованием твердых продуктов). Измерение их концентрации в воздухе представляло достаточно сложную задачу, доступную только для специализированных организаций с дорогостоящим оборудованием, до тех пор, пока не появились недорогие лазерные PM-датчики, например, SDS0112:
Данный датчик при стоимости около $15 позволяет измерять концентрации микрочастиц PM2.5 и PM10 и подключается к компьютеру посредством USB-TTL адаптера (обычно входящего в комплект датчика). Для измерения качества уличного воздуха датчик необходимо разместить в герметичном боксе, например, вот таком:
Необходимо иметь в виду, что датчик рассчитан на функционирование в условиях воздуха, не содержащего конденсата. В противном случае, например, в туман, датчик может существенно завышать показания. Проблема обычно решается дополнительным подогревом воздуха на входе датчика для устранения конденсата.
AQI
Для того, чтобы представить показания датчика в удобном для пользователя виде, необходимо преобразовать концентрации микрочастиц в некоторую оценку качества воздуха. Так как датчик измеряет одновременно и PM2.5, и PM10, обладающие разным вкладом в загрязнение воздуха с точки зрения влияния на здоровье человека, то получение интегральной оценки может быть нетривиальной задачей. К счастью, в мире есть организации, которые исследовали данный вопрос и выработали критерии для формирования такой оценки, и назвали ее AQI - Air Quality Index. Методики вычисления AQI по концентрациям микрочастиц несколько варьируются в зависимости от страны, но наиболее распространенной является оценка по методике Environmental Protection Agency (EPA) США, также известная как US AQI3.
Индекс US AQI имеет два представления - в числовом и цветовом видах, и делится на шесть категорий, характеризующих угрозу здоровью:
|
AQI-бот для Telegram
Таким образом, для получения оценки качества воздуха надо периодически считывать показания датчика, преобразовывать их в значение AQI, сохранять для целей сбора статистики и выдавать пользователю по запросу. Я решил, что неплохо, если все эти данные будут доступны через Telegram, следовательно, вышеописанные операции должны выполняться ботом.
На данный момент бот раз в несколько минут опрашивает PM-датчик, сохраняет данные измеренных концентраций микрочастиц в базу на диске и позволяет получать текущее значение AQI (по команде /aqi
), концентрации микрочастиц (команда /pm
), а также отображать графики изменения этих параметров за час и сутки (команды /aqi_hourly
, /aqi_daily
, /pm_hourly
, /pm_daily
):
Технические подробности компиляции и запуска бота тут я рассматривать не буду, так как они описаны в README.
TODO
Часть задумок пока еще не реализована, а именно:
- Подписка на уведомления о превышении заданного уровня AQI;
- Возможность периодического постинга текущих значений AQI в выбранный канал;
- Кэширование почасовых/посуточных графиков изменения AQI/PM.
На этом пока всё. Традиционно, готов ответить на вопросы в комментариях. )
Комментарии