DOU Labs: Как мы строим умный дом в EPAM Garage Kiev

В рубрике DOU Labs мы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на  Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. .

EPAM Garage — это площадка для экспериментов, на которой сотрудники компании могут поэкспериментировать с новыми технологиями, а также поработать не только с software, но и с осязаемым hardware. Основными «двигателями» киевского «гаража» являются пять человек, и у каждого из них есть своя приоритетная область исследования. Сейчас там развивают 3 основных направления — работа с квадрокоптерами, 3D-принтинг и работа в направлении smart home, о которой и пойдет речь в этой статье.

Наша задумка состояла в том, чтобы создать среду для управления «умным» домом, отвязанную от конкретной «железной» реализации. Имеется в виду, что датчик Smart House может быть любым, главное — чтобы он слал необходимые сигналы на NTTP сервер. Под «любым датчиком» подразумеваются датчики, поддерживающие протокол MQTT (NodeMCU, Arduino, Raspberry PI и другие).

Ниже я подробно расскажу о процессе его создания и планах на будущее, а мои коллеги Юрий Ткаченко и Дмитрий Голыш дадут больше деталей по hardware и software частям.

Как начиналось и что получилось

Создание проекта Smart House можно условно разделить на два этапа — подготовительную фазу и основной development. Подготовительную мы начали, когда задумались о создании «гаража» в принципе. Мы думали о том, что хорошо было бы запустить такой проект, и начали делать наработки.

Если говорить о development-фазе, то тут мы придумали, как совместить приятное с полезным: у нас в EPAM запускалась JavaScript Tech Mentoring Plus программа, и в рамках нее мы решили сделать проект Smart House, взяв новые фреймворки для JS-разработчиков. Мы выбрали TTD, continuous integration, Agile процесс, инструменты code coverage и code review для организации проекта и после этого приступили к разработке.

Забегая вперед, скажу, что на сегодняшний день уже готов ряд демонстрационных пользовательских сценариев. Например, когда увеличивается температура, включается вентилятор; когда включается проектор, закрываются шторы; если темно и кто-то идет в комнате, включается свет. Также создана панель управления «умным» домом, на которой отображаются показатели всех датчиков (влажность, температура, шум и так далее). Благодаря этой панели, можно добавлять новые датчики в систему и управлять ими.

Кроме того, в этой части системы Smart House пользователь может управлять существующими пользовательскими сценариями и создавать новые, базируясь на своих потребностях. Создать новый сценарий можно в одном из двух режимов:
— Через веб-интерфейс: выбрать датчик, установить для него параметры/значения и назначить действие системы. Доступна также функция объединения датчиков в группы, благодаря чему пользователь может назначать действия по суммарным показателям сразу нескольких датчиков;
— Посредством API. Более «продвинутые» пользователи могут писать те же самые сценарии в редакторе, используя JavaScript. Такой режим позволяет создавать более кастомную логику, чем веб-интерфейс.

«Под капотом»: Hardware

На текущий момент рынок устройств для управления умным домом пестрит своим разнообразием и ценовыми рамками. Существуют готовые решения, работающие «из коробки», и отдельные компоненты. Такая же ситуация и с протоколами взаимодействия компонентов с системой управления. Львиная доля таких комплексных систем платная, а отдельные компоненты по стоимости не доступны для большинства пользователей.

После изучения рынка устройств и контроллеров для управления «умным» домом мы решили остановиться на нише доступных и недорогих устройств — на таких, которые каждый может купить в интернет-магазине. Порог вхождения в обучение работе с такими устройствами должен быть минимален для представителей IT-профессии. В итоге, мы остановились на семействе микроконтроллеров Arduino, одноплатных мини-компьютерах Raspberry PI и на современных Wi-Fi микроконтроллерах ESP8266 в различных модификациях. Дополнительно к этим устройствам мы обзавелись подходящими датчиками, исполнительными устройствами и устройствами связи.


Следующим шагом стал выбор протокола общения устройств с нашей системой. Для первого этапа проекта решили использовать распространенный в мире Internet of Things протокол MQTT (Message Queue Telemetry Transport). Это лёгкий сетевой протокол, работающий поверх TCP/IP. Используется для обмена сообщениями между устройствами по принципу издатель-подписчик.

Два слова об истории протокола: он был создан ещё в 1999 году в исследовательском центре IBM всего двумя разработчиками — Энди Стэнфорд-Кларком, IBM, и Эрлоном Ниппером, Cirrus Link Solution. Это важный факт, и вовсе не для «необязательной иллюстративной истории». Протоколы, созданные малыми рабочими группами или даже отдельными разработчиками, отличаются компактностью и «обозримостью». А уже эти два фактора во многом определяют скорость появления, живучесть и распространение разработок на основе таких протоколов. Довольно долго MQTT был внутренним протоколом IBM, затем его открыли и начали использовать, например, в Facebook мессенджере. Соответственно, как следует из описания протокола, наша система имеет вот такую архитектуру:

Микроконтроллер, при подключении к сети и брокеру, отправляет данные о состоянии своих исполнительных устройств и сенсоров в брокер. Система, в свою очередь, получает сообщения и обрабатывает их. Если до текущего момента устройство или датчики не зарегистрированы в системы, они добавляются в разделе «Devices». Если устройства/датчики уже зарегистрированы, система отображает их состояние на «Dashboard». Если пользователь изменит состояние исполнительных устройств в «Dashboard», в брокер отправится сообщение по соответствующему топику. Как результат, устройство обработает это сообщение и изменит состояние исполнительного устройства.

Прошивку микроконтроллеров мы решили писать самостоятельно, чтобы получить опыт работы с протоколом и системой в целом, хотя мы могли воспользоваться сторонними сервисами для генерации прошивки. Прошивку для Arduino Uno + Ethernet shield мы написали в родной среде для разработки Arduino с дополнительными библиотеками. Часть микроконтроллеров ESP8266 также программировались из среды Arduino, а другая часть — с помощью Lua, скриптового языка программирования. Одноплатный мини-компьютер Raspberry PI мы использовали как сервер для системы управления и MQTT брокера.

На текущем этапе разработки системы Smart House мы смогли подключить следующие исполнительные устройства и сенсоры к ней:
— релейный модуль;
— датчик движения;
— датчик расстояния;
— кнопка без фиксации положения;
— геркон;
— светодиод;
— датчики температуры;
— датчики влажности;
— датчики освещенности;
— сервоприводы.

Если подсчитать стоимость нашего макета, то она будет примерно такой же, как стоимость одного готового микроконтроллера для управления умным домом, — около 100 у.е.

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

«Под капотом»: Software

При разработке мы старались использовать передовые технологии, в основе — Angular 2:

Вдохновившись от использования RxJS вместе с Angular 2 на front end, мы решили применить его и на back end. В этой части он выполняет одну из главных ролей — помогает с любого места иметь доступ к событиям, которые мы получаем от MQTT канала. Для передачи динамических данных на front end мы используем socket.io, а для связи статических данных, которые хранятся в базе данных Mongo DB, — Express.

Если более детально рассмотреть процесс работы back end, можно сказать, что все события, которые «прилетают» с MQTT брокера, проходя MQTT адаптер, попадают в Rx стрим. К этому стриму подключено несколько адаптеров. И такая архитектура позволяет наращивать количество функционала путем добавлением новых адаптеров, которые просто будут получать события из стрима, например, Web Socket адаптер, который эти события отправляет на front end, где они отображаются.

Есть также plug-and-play адаптер, который подключен к этому Rx стриму и мониторит события. Если он видит события от нового девайса, то создает этот девайс у нас автоматически. Таким образом мы можем просто подключить устройство, и оно сразу же отобразится — ’Plug And Play’.

Важную роль в back end системы также играет Scenario Runner, который выполняет JavaScript-сценарии. Вы можете просто написать на JavaScript, что нужно делать, например, «регулировать температуру в комнате, открывая/закрывая окно».

Если говорить о front end части, то тут все просто: используется Angular последней на сегодня версии (release candidate 4), собирается всё при помощи Webpack, все приложение разбивается на независимые компоненты.

В процессе разработки мы активно использовали популярный code style от John Papa, который уже переехал на официальный сайт Angular.

В целом, у нас есть такие разделы:
— Dashboard, где отображаются данные с датчиков в режиме реального времени;
— Devices, где расположен список подключенных девайсов;
— Scenarios, где располагаются сценарии, которые можно там же и создавать. Присутствуют сценарии двух видов: JavaScript-сценарии (для разработчиков) и сценарии, созданные при помощи простого визарда.

Если говорить о трудностях, многие из них были связаны с Angular 2: поскольку он еще сыроват и активно развивается, к нему мало документации и примеров. Поэтому мы шли, так сказать, напролом — учились, развивались. Например, мы начали разработку на beta 15 версии. При обновлении на release candidate многое изменилось: синтаксис для некоторых директив в html, один модуль Angular 2 раздробили на много маленьких и обновили раутер (теперь уже — до третьей версии). Из-за всех этих нововведений нам пришлось фиксить много мест.

Всю разработку мы вели в Open Source на GitHub, благодаря чему мы использовали легко настраиваемый Travis CI для организации сборки нашего приложения. Вопрос трекинга задач мы решили посредством Taiga.io (Open Source аналог Jira).

Проект доступен на GitHub.

Будущее дома будущего

Мы хотим произвести интеграцию нашей системы Smart House с киевским офисом EPAM. Это может перерасти во что-то полезное: к примеру, в систему, которая будет выводить на дисплей уведомления, если на каких-то этажах не выключили свет на ночь. А может — во что-то приятное: скажем, человек заходит в лифт или мыть руки, и в этой зоне включается музыка. Такдже внедрение Smart House в офисе может стать отличным инструментом мониторинга: можно будет проанализировать, сколько электричества потребляется, сколько тепла тратится, каков уровень CO2 в офисе.

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

Если говорить о доработке системы, мы планируем запустить ещё одну волну JavaScript Tech Mentoring Plus программы, в рамках которой, скорее всего, продолжим работу над проектом Smart House.

Участники команды проекта Smart House: Андрей Кучеренко, Сергей Шичинов, Дмитрий Иванов, Наталья Вознюк, Константин Пальчик, Юрий Ткаченко, Дмитрий Голыш, Антон Савкулыч, Юрий Сорокин, Александр Гольдфарб, Дмитрий Толок, Артем Трубицын, Елена Гораль, Елизавета Буць, Оксана Артышко, Дмитрий Демаков, Денис Кондаков, Константин Маринский.

Похожие статьи:
Слухи о смартфоне Samsung Galaxy A9 Pro, анонс которого еще предстоит, появились в январе текущего года. Но до сих пор было не ясно, как именно...
Якщо ви побачили на обкладинці Діму Малєєва і не побачили Олекса, то вам не здалося. На жаль, Олекс захворів. І Діма прилетів...
Prometheus анонсував додатковий набір на безплатне навчання на програмах Google Career Certificate на Coursera. 500 слухачів останнього потоку «Work...
Program QA Юлия Брыгарь решилась на релокацию в страну, о которой очень мало знала. Она переехала из Днепра в Куала-Лумпур,...
У рубриці DOU Проектор всі охочі можуть презентувати свій продукт (як стартап, так і ламповий pet-проект). Якщо вам є про...
Яндекс.Метрика