Борьба за открытое окно: технологии победили
Тема «закройте окно, мне холодно!» и «откройте окно, мне душно!» знакома каждому, но особенно она доставляет неудобств, когда начинается не в офисе, а дома.
«Наука обычно побеждает!» — подумал я. И решил доказать домашним (а я как раз тяжело дышу при закрытых окнах), что закрытые окна приводят к повышению концентрации СО2 в квартире, что не сказывается положительно ни на ком. Тем более на детях.
Описание влияния на здоровье по шкале ниже несколько преувеличены (а иначе как бы продавались системы вентиляции и «умные» окна, но суть отражают верно: лишний углекислый газ тело человека не радует, особенно в крупных мегаполисах).
Постановка задачи была такая: прибор должен быть маленький, питаться от любой USB-розетки, собирать данные о CO2 и передавать их куда-то, чтобы потом получать графики и анализировать. Для изменения настроек устройства не должны быть нужны провода.
Было принято решение строить сам прибор для снятия данных на ESP8266, а данные отправлять в конечном итоге в Grafana на Raspberry PI 3, которая и так есть и всегда включена.
Датчиков было заказано по два комплекта.
- CO2: CCS881 и MH-Z19.
- Температура и влажность: DHT-11(22) и BME280 (в последнем еще и давление).
Но сборка производилась на тех компонентах, которые приехали раньше.
Финальный комплект компонентов конкретной сборки
- Макетная плата 3 х 7 см — 48 рублей.
- ESP8266 Wi-Fi модуль ESP-12S — 365 рублей.
- DC-DC преобразователь AMS1117 (с 4.8–12 V в 3.3 V) — 11 рублей.
- DHT-11 — 55 рублей.
- CCS881 — 458 рублей.
- MICRO MINI5P USB to Dip Female B-type — 7 рублей.
- Тактовая кнопка (две штуки) — 4 рубля.
- Резисторы по одной штуке (1 кОм, 2.2 кОм, 10 кОм) — 3 рубля.
- Гребенка с четырьмя штырьками — 1 рубль.
- Провода — 3 рубля.
Дополнительно для проведения работ
- USB-TTL модуль CP2102 (для подключения к компьютеру).
- Кабель mini-USB.
- Сервер на Linux (у меня это Raspberry PI на Raspbian).
Софт
- Arduino IDE.
- Fritzing.
- Raspbian.
- Mosquitto.
- Telegraf.
- InfluxDB.
- Grafana.
0. Аппаратная часть
После определения модулей, которые будут использованы, сначала была отрисована принципиальная схема во Fritzing, а за ней превращена в удобочитаемую макетная. На реальной плате не предполагается наличие модуля USB-TTL, а только пины для его подключения.
Далее по схеме на макетной плате была собрана плата.
Готовую плату пока откладываем. И приступаем к настройке принимающей стороны.
1. Устанавливаем и запускаем mosquitto MQTT брокер (сервер и клиент)
Погнали.
Для настройки авторизации в файл /etc/mosquitto/conf.d/auth.conf записываем следующие параметры.
Создаем пользователя arduino для отправки данных с платы в брокер и назначаем ему пароль. Именно этот пароль нужно использовать в дальнейшем в скетче (вписать до заливки).
Создаем пользователя telegraf для сервиса по трансляции данных в базу. Этот пароль тоже записываем — он будет нужен для настройки telegraf. В этом случае ключ -c применять категорически нельзя, так как это приведет к перезаписыванию файла ключей.
Перезапускаем сервис, чтобы применились настройки.
Теперь уже можно проверять работу брокера. Открываем на «прослушку» все топики брокера под определенным названием (в нашем случае sensors/…)
Чтобы закинуть что-то в эфир у нас есть два варианта:
- Перейти в конец данной статьи, скорректировать в соответствии с уже известными логином, паролем и IP-адресом mosquitto скетч и залить его на ESP скетч и убедиться, что от него летят данные.
- Открыть второе окно терминала и оттуда что-то отправить в топик sensors. Например, “Hello world!”:
Если все сделано правильно, то в первом окне терминала мы увидим свое сообщение. Можно продолжать.
2. Устанавливаем и запускаем influxDB
Здесь без каких-то особых нюансов, все по инструкции, коих много. Все заработало с первого раза.
Сразу создаем двух пользователей: одного для сервиса telegraf, а второго уже для Grafana.
3. Устанавливаем и запускаем telegraf
Установка завершена :) Но есть нюансы. Вся настройка заключается в корректировке файла /etc/telegraf/telegraf.conf.
До следующего раздела все оставляем по умолчанию. В связке логин и пароль выше — доступ к InfluxDB, а ниже — к mosquitto.
Перезапускаем сервис, чтобы применились настройки.
После этого можно проверить работоспособность связки InfluxDB и telegraf:
В результате в списке баз мы должны увидеть базу sensors.
4. Установка и запуск Grafana
Сразу после запуска Grafana становится доступна по адресу http://localhost:3000. Логин и пароль по умолчанию: admin\admin. Лучше его сразу поменять, для этого жмем на шестеренку слева и переходим в раздел Server Admin. Далее все интуитивно понятно.
5. Запуск ESP8266
Открываем в IDE скетч wifi_weather_station_mqtt.ino.
В соответствии со своими настройками правим в начале:
Заливаем поправленный скетч в плату.
Для заливки нажимаем на кнопку ближе к датчику DHT, держим ее, а затем нажимаем на крайнюю и обе отпускаем.
После запуска платы ищем Wi-Fi сеть ESP***** и подключаемся к ней. Если окно настройки не всплывает автоматически, то открываем http://192.168.4.2.
После выбора сети обязательно нажимаем /wifisave.
После перезагрузки устройства проверяем на сервере данные с ESP:
6. Настройка Grafana
В графическом интерфейсе настраиваем Data Source.
Далее добавляем интересующие нас дашборды по такому примеру (или можно на один график, но мне показалось неудобным). График рваный, так как проводились разные опыты над ESP.
В результате после настройки я получил такое решение, доступное мне откуда угодно:
Скетч
Скетч очень тщательно закомментирован, чтобы по-максимуму не вызывать вопросов.
Датчики типа DHT имеют свойство с платами ESP периодически выкидывать максимальные для себя значения (2147483647), поэтому данные по температуре и влажности более 100 просто не передаем.
Некоторым помогает перепрошивка ESP в другую версию прошивки — мне не помогло. Опытным путем установлено, что опрос раз в десять секунд приводит к минимальному числу таких всплесков.
Инструкция по использованию
Крайняя кнопка на плате — перезагрузка.
Кнопка между датчиком и другой кнопкой имеет две функции:
- Удерживаем и нажимаем перезагрузку — перевод в режим программирования платы по кабелю.
- Один раз нажать во время нормальной работы платы — перевод в режим конфигурирования Wi-Fi через портал.
Если зайти на IP-адрес платы во время нормальной работы, то ответ должен быть такой: Not found: /
Веб-команды (на примере адреса платы 192.168.0.100):
- http://192.168.0.100/restart — перезагрузка платы.
- http://192.168.0.100/reburn — перевод платы в режим прошивки по воздуху. Для прошивки в IDE нужно выбрать порт:
После нажатия upload ввести пароль, который ранее задан в зоне конфигурирования в скетче.
- http://192.168.0.100/wifi — перевод платы в режим настройки Wi-Fi. Чтобы действие выполнилось наверняка, забиваем настройки платы сетью SSID: 0000, passw: 0000.
Послесловие
По результатам проекта окна в квартире теперь стабильно открыты, так как даже в детской при двух маленьких детях при закрытых окнах за три–четыре часа уровень СО2 уползает с 450–490 до 750 ppm. Тема наконец закрыта :)
P.S.
Дальнейшим развитием проекта планируется с управление приточной вентиляцией с HEPA-фильтрами, дабы автоматизировать процесс. Управление пластиковыми окнами рассматривалось, но так как окна и откидные и распашные и их нужно иногда мыть — признано для себя решением неверным.
Единственная реальная у нас проблема: уровень концентрации пыльцы в воздухе (к сожалению, в доме есть аллергики). В остальном — не существенно, хотя живём в пяти домах от Ленинского проспекта. Просто этаж низкий, окна во двор, в деревья между домами :)
Второй частью планируется стать вынос всех параметров, зависящих от внешних факторов (адрес MQTT-брокера, порт, логины, пароли, интервалы) в ту же веб-морду, для чего планируется в том числе переписать библиотеку.
Третьей частью планируется освоить 3D-моделирование и напечатать корпус. Но тут пока возможны нюансы (ко мне доехали остальные датчики: MH-Z19 и BME280), и для определения точности, возможно, я сделаю еще одну близкую модель, но с ними. Тогда корпус нужно будет сделать универсальным.
Статья скорее для хабра. С точки зрения технической составляющей - здорово, подробно расписано.
Но с точки зрения вопроса «открывать или не открывать окна» - раскрыт только вопрос об уровне CO2.
Понятное дело, лишний углекислый газ это плохо, но я например часто закрываю окна из-за:
1. Сильного шума снаружи.
2. Холода.
3. Сквозняк.
Думаю можно еще несколько причин найти, если вспомнить. Поэтому зачастую лучше чуть-чуть подышать лишним СО2, но спать в тишине и тепле, чтобы с утра проснуться выспавшимся и непростуженым, что довольно таки полезно :)
Проблему концентрации CO2 без проблем с шумом и пылью решает такой прибор как бризер. Например, Tion S3. Я пользую, мне нравится.
Есть варианты приточных вентиляций, которые стоят на 15к дешевле Тиона. Ballu airmaster2, например. В принципе, парочку таких в квартиру, и можно попробовать дышать нормально. Но будем честными, я с датчиками в соей квартире не стоял.
Есть, конечно, разные варианты! Я просто обращал внимание на такой тип приборов, как бризер. Именно они наиболее эффективны для решения проблемы с co2
Это все хорошие приборы, но кто мне позволит бурить шахту в стене дома и нарушать фасад здания? Кто-то знает какие есть варианты, без вмешательства в фасад?
Обычно никто особо не против дырки в стене! Особенно, если дом кирпичный. Дыра закрывается решеткой в цвет фасада и довольно незаметна.
У многих современных домов уже есть штатные вентиляционные отверстия.
не в моем случае. Дом отделан керамогранитной плиткой. Весь район в одной-двух цветовых гаммах. У нас запрещено даже стекление балкона цветом отличного от утвержденного. А так же установка кондиционера на фасад. Как в Европе)
Аналогично! Только у меня материал - отделочный кирпич. Но есть штатные места под блоки кондиционеров и штатная вентиляция.
Это где такое?
Питер, Московская Славянка. Кажется, нынче это тенденция всех неплохих районов-застроек.