Система проветривания комнаты на основе «малинки» и «Детектора СО2»

Мода на умные дома захлестнула весь интернет, каждый нынче хочет сделать лампочку, которая умеет выключаться через интернет или пощёлкать вентилятором в туалете. Мой опыт был достаточно прост: я хотел сделать систему, которая умеет автоматически проветривать комнату, ни больше, ни меньше.

После обдумывания принципа работы системы пришел к некоторым выводам, которые и решил реализовать. По задумке, весь функционал системы делится на три составляющие: «мозги» которые всем управляют, система открывания форточки/или включение вентилятора и сам датчик который следит за качеством воздуха в помещении. Вот о сенсоре качества воздуха далее я и расскажу, плюс немного затрону тему интеграции его с «мозгами» умного дома.

Обзор девайса


Качество «свежести» воздуха я решил контролировать по концентрации углекислого газа. В планах на будущее — запуск датчиков на аммиак, пропан/бутан (утечки газа), концентрации пыли в воздухе и т.д.

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

a25543468c9b46439f7f570577cddd2b.png

Ни для кого не секрет, что концентрация углекислого газа в воздухе сильно влияет не только на продуктивность человеческого мозга, на работоспособность человека, а также на возможность качественно отдохнуть. Чем выше концентрация СО2, тем хуже.

6092dcc2ff3340eea4c0727347a8f234.png

В качестве прибора измерителя концентрации углекислого газа был использован Детектор углекислого газа компании Даджет.

Это устройство может получать энергию от USB-порта компьютера или ноутбука. На лицевой панели — ЖК индикатор, где отображается информация о концентрации углекислого газа и температуре окружающего воздуха. Также имеется 3 светодиода которые дают пользователю наглядное представление о содержании. Все достаточно просто — включаем девайс. И все работает.

Меня привлекло то, что есть софт, который работает с данным девайсом. Софт есть как под Windows, так и под Linux. Исходники программы под Linux есть на github и вроде как написаны нашим соотечественником. А если есть исходники можно что-то придумать, доработать, «заточить» программу под себя.

Обзор схемы работы


Как показала практика и гугление, устройство видется компьютером, как HID устройство. Поэтому в программе для Windows есть dll под названием HIDApi. Для работы с Linux нужна одноименная библиотека HIDApi. Мной была произведена доработка исходников linux софта и написан простенький скрипит.

Понятное дело, что использовать компьютер с линуксом для считывания данных с сенсора и их дальнейшей передачей данных куда-то там на контроллер умного дома, это кощунство. Поэтому было решено задействовать Raspbery pi с установленным чистым Debian. В дальнейшем планируется сделать всё на Arduino и передавать через беспроводные каналы.

Схема работы моего программно-аппаратного комплекса выглядит следующим образом:

c836009971eb43578523742643ed8002.png

Понятливый читатель и заядлый гик может подумать, что не очень спортивно использовать в этой схеме HUB. Всё верно, можно напрямую подключить СO2 монитор и радоваться жизни. Используя такую схему я решаю несколько задач сразу:
● чаще всего мозги умного дома находится не там где стоит датчик;
● использование raspberry pi даёт возможность подключать дополнительные датчики;
● размещая датчик отдельно, получаем два способа индикации, первый на экране датчика, второй на телефоне или через веб страницу, поскольку данные транслируются на контроллер.

В качестве контроллера умного дома используется девайс фирмы MicasaVerde, устройство может собирать данные с датчиков и принимать решения согласно заданной программе которые в её терминологии называются «сцены».

963588075d534090bab5100c83c1dfa7.png

В девайсе можно создать виртуальные датчики и обновлять их информацию с помощью http запросов, что я и делал с помощью raspberry pi.
Пример запроса:
ip_address:3480/data_request? id=variableset&DeviceNum=6&serviceId=urn: micasaverde-com: serviceId: DoorLock1&Variable=Status&Value=1
То есть, «малинка» считывает данные с детектора углекислого газа, а дальше передаёт данные http запросом на Vera. Схема простая, но рабочая.

Доработка софта

Итак есть «малинка», неважно какой версии, главное чтобы на ней был сетевой интерфейс.

Далее необходимо установить поддержку hid устройств. Данная библиотека берётся с git, поэтому должен быть установлен git на «малинке»:

apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

Далее качаем и ставим саму библиотеку

mkdir hidapi
cd hidapi/
git init
git clone github.com/signal11/hidapi.git

Дополнительные библиотеки
sudo apt-get install libudev-dev libusb-1.0–0-dev libfox-1.6-dev autotools-dev autoconf automake libtool

Устанавливаем
cd hidapi/
./bootstrap
./configure
make
sudo make install

После этого качаем исходники программы CO2 monitor
mkdir co2monitor
cd co2monitor
git init
git clone github.com/dmage/co2mon.git

Далее я немного подправил код программы, в изначальном варианте она считывает два параметра (температуру и co2) и в бесконечном цикле отправляет в консоль. Мне такой вариант не подходил, цель была один раз запустить и один раз получить значение, поэтому поменял две строчки в файле main.c.

Ищем строчки

printf («CntR\t%s\n», buf);
fflush (stdout);

И меняем на

printf (»%s\n», buf);
fflush (stdout);
exit (1);

Первая строчка отвечает за вывод значение, после изменения будет выводится только цифра, и после вывода программа будет закрываться, отвечает строка exit (1).

Компилируем
cmake…
make

Далее был написан простенький скрипт, который запускает программу, значения вывода программы скомпилированной выше присваивает переменной и далее это значение с помощью curl передаёт на MicasaVerde. После этого добавим правило udev, чтобы система имела доступ к датчику без root.

SUBSYSTEM==«usb», ATTR{idVendor}==»04d9», ATTR{idProduct}==«a052», MODE=»0666»

И добавим скрипт опроса и передачи в cron, на кажду минуту.

crontab -e
И добавляем строку
* * * * * /home/pi/co2sender.sh

2cb23c1b202f4aa5aad89c8c70c69148.png
Результат работы скрипта

Конечно придётся ещё настроить файлы MicasaVerde, чтобы везде были адекватные записи. Но оно работает, быстро и просто.

Вывод

В итоге имеем систему, основанную на «Детекторе СО2», которая работает в обычном режиме, анализирует и сообщает об изменениях концентрации углекислого газа. При этом «малинка» считывает данные с датчика раз в минуту и передает на контроллер умного дома, который может включить систему проветривания при необходимости.

© Geektimes