Борьба за открытое окно: технологии победили
Тема «закройте окно, мне холодно!» и «откройте окно, мне душно!» знакома каждому, но особенно она доставляет неудобств, когда начинается не в офисе, а дома.
«Наука обычно побеждает!» — подумал я. И решил доказать домашним (а я как раз тяжело дышу при закрытых окнах), что закрытые окна приводят к повышению концентрации СО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), и для определения точности, возможно, я сделаю еще одну близкую модель, но с ними. Тогда корпус нужно будет сделать универсальным.
Комментарий недоступен
Ну - всё по фэншую! Arduino, макетка, Rpi, linux command line, скрипты, конфиги, grafana, вот это всё))
Забыл ведь самое главное: https://github.com/slemik99/public/tree/master/wifi_weather_station_mqtt
Комментарий недоступен
Статья скорее для хабра. С точки зрения технической составляющей - здорово, подробно расписано.
Но с точки зрения вопроса «открывать или не открывать окна» - раскрыт только вопрос об уровне CO2.
Понятное дело, лишний углекислый газ это плохо, но я например часто закрываю окна из-за:
1. Сильного шума снаружи.
2. Холода.
3. Сквозняк.
Думаю можно еще несколько причин найти, если вспомнить. Поэтому зачастую лучше чуть-чуть подышать лишним СО2, но спать в тишине и тепле, чтобы с утра проснуться выспавшимся и непростуженым, что довольно таки полезно :)
Проблему концентрации CO2 без проблем с шумом и пылью решает такой прибор как бризер. Например, Tion S3. Я пользую, мне нравится.
Отличное замечание, спасибо. Дополню статью, пока можно. Дальнейшим развитием проекта планируется управление приточной вентиляцией, дабы автоматизировать процесс. Единственная реальная проблема: уровень концентрации пыльцы в воздухе (к сожалению в доме есть аллергики). В остальном - не существенно, хотя живём в 5 домах от Ленинского проспекта. Просто этаж низкий, окна во двор, в деревья между домами :)