[Перевод] IoT-проект для умного дома: строим прототип

Недавно мы рассказывали о подходе к работе над IoT-проектами. В прошлый раз нас больше всего интересовала методика, этапы превращения идеи сначала в прототип, а потом — в продукт, готовый к производству. Сегодня предлагаем углубиться в технические детали. А именно –поговорим о том, как создать функциональный прототип умного дома.

ce2055148dd14e0ba9326310b7791744.jpg

В проекте задействован Intel IoT Commercial Development Kit, компьютер малого форм-фактора Intel NUC Kit DE3815TYKHE, плата Arduino 101 и некоторые дополнительные компоненты. Освоив этот материал, вы cможете сделать то же самое, что получилось у нас, даже если ваш опыт создания IoT-решений невелик.

Вот, что вы узнаете, освоив это руководство:

  • Как обращаться с компьютером Intel NUC Kit DE3815TYKHE
  • Как управлять портами ввода-вывода Intel NUC и работать с различными датчиками с использованием MRAA и UPM из Intel IoT Development Kit. Это — самодостаточное программно-аппаратное решение, которое предназначено для того, чтобы помочь разработчиками исследовать сферу IoT и создавать инновационные проекты.
  • Как писать и запускать код в Intel XDK IoT Edition. Эта IDE предназначена для создания приложений, взаимодействующих с датчиками и актуаторами. Она позволяет быстро приступить к разработке ПО для IoT-платформ Intel.
  • Как настраивать облачные службы платформы IBM Bluemix и подключаться к ним. Среди этих служб можно отметить хранилища данных, аналитические инструменты, средства для подключения устройств к облаку. Наш проект широко использует возможности Bluemix.


Код и дополнительную документацию можно найти на GitHub.

О функционале


Наш проект представляет собой рабочую модель умного дома, а именно, здесь реализовано следующее:

  • Наблюдение за входной дверью. Когда состояние входной двери изменяется, сведения об этом выводятся в административное приложение. Система отслеживает следующие состояния двери: открыта, закрыта, заперта и не заперта.
  • Наблюдение за дверным звонком. Когда некто нажимает на кнопку дверного звонка, смонтированную на модели, соответствующее уведомление выводится в административном приложении.
  • Наблюдение за гаражной дверью и управление ей. Пользователь, с помощью мобильного приложения, может отправлять системе команды, реагируя на которые, поднимается или опускается гаражная дверь. Мобильное приложение показывает процесс перемещения двери при её открывании или закрывании, а также уведомляет пользователя о том, что дверь чем-то заблокирована и её невозможно закрыть.


Как работает система


Система умного дома, о которой мы говорим, работает, опираясь на следующие сведения, которые поставляют ей датчики:

  • Состояния гаражной двери: открыта, закрыта, заблокирована или не заблокирована.
  • События: срабатывание дверного звонка, запирание и отпирание входной двери, закрывание и открывание входной двери, закрывание и открывание гаражной двери, блокировка гаражной двери.


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

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

Настройка Intel NUC и Arduino 101


Рассмотрим установку Intel IoT Gateway Software Suite на компьютер Intel NUC Kit DE3815TYKHE. Обратите внимание на то, что так как размер встроенной системы хранения устройства ограничен, мы рекомендуем не создавать на ней раздел для восстановления. Вернуться к заводскому образу системы можно, загрузив его с USB-диска.

После установки системы, к NUC, который будет выполнять роль IoT-шлюза, можно будет подключиться с компьютера разработчика в том случае, если устройства находятся в одной и той же сети. Если планируется подключить шлюз к Intel IoT Gateway Developer Hub, то, для подключения к шлюзу, нужно будет ввести соответствующий IP-адрес в браузере и пройти процедуру первоначальной настройки.

Кроме того, если шлюз подключён к сети Intel, нужно будет настроить прокси-сервер.

Приступим к настройке Intel NUC.

  1. Если у вас ещё нет учётной записи в Intel IoT Platform Marketplace — создайте её.
  2. Закажите Intel IoT Gateway Software Suite и, следуя инструкциям, полученным по электронной почте, загрузите файл образа.
  3. Распакуйте загруженный архив и запишите IMG-файл на USB-диск размером, как минимум, 4 Гб.

    — Для записи образа на диск, если вы работаете в Windows, можно воспользоваться приложением Win32 Disk Imager.
    — В Linux используйте команду:

    sudo dd if=GatewayOS.img of=/dev/ sdX bs=4M; sync
    

    Здесь USB-диск — это sdX.
  4. После завершения записи образа отсоедините диск от своего компьютера и подключите к NUC. Вам так же понадобится подключить к нему монитор, клавиатуру и кабель питания.
  5. Включите Intel NUC, и, во время загрузки, нажмите F2 для того, чтобы войти в BIOS.
  6. Настройте загрузку с USB-диска. Для этого:

    — В меню Advanced выберите пункт Boot.
    — В свойстве Boot Configuration раздела OS Selection выберите Linux.
    — Проследите, чтобы в разделе Boot Devices был установлен флажок USB.
    — Сохраните изменения и перезагрузите систему.
    — Нажмите F10 для входа в загрузочное меню и выберите там USB-диск.

  7. Войдите в систему (имя и пароль — root).
  8. Установите на локальный диск Wind River Linux:
    ~# deploytool -d /dev/mmcblk0 --lvm 0 --reset-media –F
    

  9. Используйте команду poweroff для того, чтобы отключить шлюз, после чего отсоедините от него USB-диск и включите снова. Устройство загрузится с локального диска.
  10. Подключите к NUC Ethernet-кабель и воспользуйтесь командой ifconfig eth0 для того, чтобы узнать IP-адрес, назначенный шлюзу (предполагается, что сеть, к которой подключается шлюз, настроена на автоматическое конфигурирование подключаемых к ней новых устройств).
  11. Используйте Intel IoT Gateway Developer Hub для обновления репозиториев MRAA и UPM до последней версии, которая берётся из официального источника https://01.org. Того же самого результата можно достичь, выполнив следующие команды:
    ~# smart update
    ~# smart upgrade
    ~# smart install upm
    
    

  12. Подключите к шлюзу плату Arduino 101 и перезагрузите NUC. На Arduino 101 будет прошит скетч Firmata, после этого вы сможете использовать с ней MRAA и UPM.
  13. Настройте плату, воспользовавшись этими инструкциями.


Аппаратные компоненты


Вот перечень компонентов, которые входят в наш проект.
А вот, как всё это выглядит в сборе:

4db29506b848a82c1dd77ff83857156a.jpg


Прототип системы для умного дома

Установка Intel XDK IoT Edition


Intel XDK IoT Edition поддерживает JavaScript и разработку под Node.js для проектов в сфере интернета вещей.

Обратите внимание на то, что, если вы работаете в Windows, мы рекомендуем установить на компьютер ПО Bonjour Print Services. Это позволит Intel XDK автоматически обнаруживать IoT-устройства, подключённые к сети. Установка Bonjour необязательна, но это облегчает работу. К устройству можно подключиться и вручную введя IP-адрес и необходимые для подключения сведения. Если вы работаете в корпоративной сети, сетевой экран может блокировать Bonjour.

Для установки Intel XDK выполните следующие шаги:

  1. Загрузите установщик IDE для вашей ОС с этой страницы. Нужную ОС можно выбрать из списка.
  2. Если вы работаете в Windows или Mac OS, запустите установщик. А именно

    — Для Windows, щёлкните правой кнопкой мыши по загруженному файлу и выберите в появившемся меню команду Запуск от имени администратора. Если будет нужно, подтвердите запуск программы.

    — Для Mac OS, выполните двойной щелчок мышью по загруженному .DMG-файлу для того, чтобы извлечь установщик. После этого запустите извлечённый .PKG-файл.

  3. Если вы пользуетесь Linux, выполните следующие шаги:

    — Запустите терминал
    — Перейдите к папке, в которой находится загруженный архи с установщиком. Например, если этот файл находится в папке Desktop, воспользуйтесь командой cd ~/Desktop/
    — Для того, чтобы распаковать файл (предположим, что его имя — installername), введите команду вида tar zxvf installername.
    — Перейдите в папку, где находятся извлечённые из архива файлы.
    — Запустите установку командой ./install.sh

  4. Теперь, следуя инструкциям Мастера установки вы сможете инсталлировать Intel XDK IoT Edition в свою систему.
  5. Установите (этот шаг рекомендован только для Windows) Bonjour Print Services. Для этого выполните следующие шаги:

    — Загрузите установщик с этого сайта.
    — Запустите загруженный файл BonjourPSSetup.exe от имени администратора.
    — Следуйте инструкциям Мастера установки.

  6. Для того, чтобы Intel XDK IoT Edition смог обнаружить Intel NUC, сначала нужно установить на него пакет xdk-daemon, который имеется в официальном репозитории пакетов. Если этот пакет уже установлен, проверьте, обновлён ли он до версии 0.0.35 или выше. Здесь вам пригодятся такие команды:
    ~# smart update
    ~# smart install xdk-daemon
    

  7. После установки или обновления xdk-daemon, перезагрузите Intel NUC для того, чтобы запустился соответствующий сервис. Теперь можно добавить шлюз в Intel XDK и удалённо исполнять на нём программы.


Настройка IBM Bluemix


Здесь мы расскажем о том, как создать Bluemix-приложение, как подключиться MongoDB и работать с данными.

Создание Bluemix-приложения


Сначала создадим приложение Bluemix с помощью MongoLab.

97ed75ea8b18b56fdb017e7ab0b8926e.jpg


Пользовательский интерфейс BlueMix

Для того, чтобы это сделать, выполните следующее:

  1. Войдите в консоль Bluemix.
  2. После входа вы увидите панель управления (DASHBOARD).
  3. Щёлкните CREATE APP.
  4. Выберите тип приложения WEB.
  5. Выберите SDK for Node.js и нажмите на кнопку CONTINUE.
  6. Дайте приложению имя и щёлкните по кнопке FINISH.
  7. После того, как приложение будет создано в облаке IBM, щёлкните по кнопке ADD A SERVICE OR API.
  8. В разделе Data & Analytics выберите MongoLab.
  9. Щёлкните по BI для того, чтобы подтвердить создание сервиса.
  10. После того, как сервис будет создан, появится всплывающее окно с предложением перезагрузить приложение. Щёлкните кнопку RESTAGE.
  11. Дождитесь окончания перезагрузки приложения. Когда этот процесс завершится, будет показано соответствующее сообщение.


Развёртывание приложения IBM Bluemix с помощью Cloud Foundry


Прежде чем начинать работу с Cloud Foundry, нужно установить интерфейс командной строки cf. Здесь стоит учесть, что работу с этим интерфейсом не поддерживает Cygwin. Поэтому, работая с Cloud Foundry в Windows, нужно пользоваться другим интерпретатором командной строки.

После установки, если вы не знакомы с Cloud Foundry, следуйте руководству по этой системе для загрузки начального кода, и разберитесь с тем, как отправлять приложения для IBM Bluemix в облако.

Подключение к шлюзу Intel для интернета вещей и запуск приложений


  1. В Intel XDK, в окне Develop, щёлкните Serial Terminal.
  2. Выберите плату в выпадающем меню, связанном с меткой Port.
  3. Щёлкните по кнопке Connect для установки соединения. При этом в качестве имени пользователя используйте root, в качестве пароля — собственный пароль.
  4. Введите команду ifconfig для того, чтобы увидеть IP-адрес системы.
  5. Выберите пункт Add Manual Connection и введите IP-адрес и пароль.
  6. После того, как соединение будет установлено, щёлкните кнопку с стрелкой, направленной вниз для выгрузки проекта на устройсто.
  7. Щёлкните по кнопке Run.


После этого приложение должно запуститься на шлюзе.

Подробности о приложениях


Облачное приложение для IBM Bluemix


Node.js-приложение для Bluemix задействует MongoDB для хранения данных и предоставляет REST API для работы с ними. Кроме того, здесь используются веб-сокеты для передачи новых сведений в реальном времени клиентскому и мобильному приложениям.

Приложение прототипа для Intel NUC, к которому подключен Arduino 101


Это Node.js-приложение исполняется на Intel NUC, который играет роль шлюза. К нему подключена плата Arduino 101, что позволяет шлюзу взаимодействовать с датчиками и другими периферийными устройствами. Шлюз, кроме того, отправляет показания датчиков в приложение, которое работает в облаке IBM Bluemix, а оно, в свою очередь, сохраняет их.

Основной коммуникационный протокол — веб-сокеты. Это позволяет клиенту (Intel NUC и Arduino 101) взаимодействовать с облачным приложением. Если подключение к облаку недоступно, приложение использует SQLite для локального хранения данных и отправляет их в облако тогда, когда подключение восстановится. Кроме того, это приложение, когда облако недоступно, взаимодействует с мобильным приложением (напомним — когда связь с облаком присутствует, мобильное приложение работает с системой через него).

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

Административное и мобильное приложения


Административное и мобильное приложения тесно интегрированы с приложением, которое исполняется на Intel NUC. Вместо того, чтобы предоставлять несколько версий программ в виде полнофункциональных клиентов для различных платформ (или усложнять работу над проектом из-за необходимости разработки кросс-платформенных решений), команда проекта решила реализовать эти приложения на HTML5 и JavaScript с использованием Intel XDK IoT Edition. Этот подход позволил создать одну версию каждого приложения, которая может работать на различных аппаратных платформах, используемых администраторами системы и её конечными пользователями.

Административное приложение выводит сведения с датчиков, в режиме, практически соответствующем реальному времени, а также отображает журнал событий, используя REST API. Оно работает на обычном компьютере или на планшете и даёт полный обзор происходящего в умном доме, включая сведения о событиях и состояниях объектов. Приложение позволяет просматривать журналы и работать с облачными данными и аналитическими сведениями.

Мобильное приложение позволяет пользователю открывать и закрывать гаражную дверь, используя веб-сокеты. Работает оно на смартфоне или другом мобильном устройстве, позволяя пользователю, помимо открывания и закрывания двери гаража, отслеживать то, как это происходит, а также, узнавать, не заблокирована ли дверь.

Выводы


В этом материале мы продемонстрировали процесс создания прототипа IoT-системы, воспроизвести который могут буквально все желающие.

Используя Intel IoT Commercial Developer Kit, Intel NUC и плату Arduino 101, команды разработчиков могут быстро создавать сравнительно недорогие прототипы IoT-проектов.

Дополнительные компоненты для подобных проектов можно найти, например, в Grove Starter Kit Plus IoT Edition. Облачную часть можно реализовать на IBM Bluemix. ПО, включающее в себя как серверные, так и клиентские приложения, может быть подготовлено в Intel XDK IoT Edition.

Мы рассказали вам об инструментах для создания IoT-решений и о подходах к работе над ними. Теперь дело за вами. Удачных разработок!

© Geektimes