Интенсивный курс по подготовке высокооплачиваемых 3D художников с гарантией трудоустройства.
×Закрыть

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

В рубрике DOU Labs мы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на editors@dou.ua.

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

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

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

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

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

Если говорить о development-фазе, то тут мы придумали, как совместить приятное с полезным: у нас в EPAM запускалась JavaScript Tech Mentoring Plus программа, и в рамках нее мы решили сделать проект Smart House, взяв новые фреймворки для JS-разработчиков. Мы выбрали TDD, 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: Андрей Кучеренко, Сергей Шичинов, Дмитрий Иванов, Наталья Вознюк, Константин Пальчик, Юрий Ткаченко, Дмитрий Голыш, Антон Савкулыч, Юрий Сорокин, Александр Гольдфарб, Дмитрий Толок, Артем Трубицын, Елена Гораль, Елизавета Буць, Оксана Артышко, Дмитрий Демаков, Денис Кондаков, Константин Маринский.

27 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Епам уже не тот...
Вот за что мы его ценим: youtu.be/yoyqvt-wubM

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

Нужно бороться :)

А как с надежностью? А как с безопасностью?

Все ещё в процессе разработки. На текущем этапе тестируем надежность, на след будет безопасность

что на счет управления со смартфона?
з.ы. экс-епамовца возьмете? если надо будет покодить что-то для смартфона.

С любого смартфона через веб. Приходите на собеседование:) А вообще мы опенсорс, ищите нас на гитхабе и вперёд вместе с нами

Да и ESP8266 скорей всего nodemcu если за lua заговорили.

Только хардкор) Мы писали прошивку на си подобном языке

Осталось что-бы когда видеонаблюдение обнаруживало нарушителя — включался матюкальник «с этим домом у вас ничего не получиться, все, блеклист»

Это в подавляющее большинство камер для оного уже встроено, просто подключи матюгальник.

Это так тонко, что даже немного толсто.

Как же радуют глаз статьи про embedded на dou. Интересно, есть ли у вас в команде люди, которые из мира контроллеров =)

Есть люди, которые глубоко увлечены этим

esp — то любов, а lua — то журба. Всегда интересовался этой темой и, признаться, завидовал тем, кто в теме, но это все казалось настолько сложным и далеким, что занимало место на полке «на потом однажды». Как же я удивился простоте разработки для esp и огромной куче либ. На разобраться что-куда-как работает ушло несколько часов и три сожженных диодика. Если у вас было желание с этим поиграться скорее бегите на какой-нибудь аукр и хватайте тот же node-mcu v3. Подключив её обычным телефонным micro-usb можно сходу заливать скетчи и хоть парсить json. Всем IoT котаны.

Увидел заголовок, подумал: «О, embedded!». Зашел, а тут:

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

Тут обе стороны медали :)

Кроме температуры и СО2 полезно пониторить еще и влажность в офисах — от сухого воздуха глаза устают быстрее.

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

На самом деле, планы огромные. Все это будет и даже больше...

управление климатом — самое сложное решение чисто технически. напр в роли охлаждения выступает кондер, это стороннее устройство и очень часто без адекватных интерфейсов. тобишь им управлять можно только через ИК и только в одну сторону, значит получить обратный статус уже нельзя. с этого момента начинаются пляски с бубном :)

Что входит в такой комплект: «Если подсчитать стоимость нашего макета, то она будет примерно такой же, как стоимость одного готового микроконтроллера для управления умным домом, — около 100 у.е.»?
И с какими компонентами вы сравнивали?
Какова стоимость установки умного дома в обычную двушку с автономным отоплением и установленным кондиционером?
Какая польза владельцу такого дома, кроме как более комфортное проживание?

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

А если еще добавить какую простую тепловую камеру и посмотреть на места утечек тепла, так еще больше сэкономить можно будет.
А еще на крышу поставить солнечные панели, поставить светодиодное освещение. Поставить полноценную вентиляцию. И т.д.
Немцы вон уже делают дома, что больше производят энергии, чем потребляют.

Вот только в типичной панельке от этого толку 0.

1. Для того чтобы выдать стоимость проекта, необходимо посчитать кол-во сенсоров (датчиков) выдающих значение/статус (температура, уровень СО, влажность, сила ветра и тд) и кол-во исполнительных устройств (реле, диммеры..). Потом надо выбрать управление (с выключателя на стене, с телефона, с тач панели..).
Другими словами считается как конструктор, больше девайсов — выше цена.
2. Польза для владельца дома — изначально система позиционируется как эффективное средство управления инженерными системами. это работает у буржуев и экономический эффект появляется на больших объектах с большими энерго затратами. Чем выше затраты — тем больше экономический эффект.
При текущей стоимости буржуйских систем (KNX, Crestron, AMX, Visiomatic и тд), применение в 2х комнатной квартире, это больше комфорт и безопасность нежели экономия, так как стоимость самой системы съедает весь профит от экономии энергии.

Если в итоге удастся построить систему по адекватной цене — то подобное решение быстро перейдет из разряда VIP в массовое, масштабируемое решение для жилья/офиса :)

Подписаться на комментарии