Содержание


Создание IoT-приложения для связи с автомобилями с помощью Geospatial Analytics

Развертывание и расширение базового набора приложений для связи с автомобилями с использованием Geospatial Analytics и Node.js на платформе IBM Bluemix

Comments

Хотите построить приложение с использованием службы «Интернета вещей» (Internet of Things – IoT) на платформе IBM Bluemix™? Это не так сложно, как может показаться. Большинство IoT-приложений состоит из трех частей: некоторого объекта, снабженного соединением с Интернетом, приложения для наблюдения за этим объектом и управления им и аналитического ПО для обнаружения событий, связанных с этим объектом. IoT Foundation – служба Интернета вещей в среде Bluemix – делает тривиальным установление связи между объектом, приложением и аналитическими службами. Чтобы продемонстрировать, как это просто, я построил базовый набор IoT-приложений для связи с автомобилями. Этот набор приложений, называемый Connected Vehicle, состоит из трех частей:

  • имитатора автомобиля (приложение Node.js);
  • HTML5-приложения для наблюдения за автомобилями по карте и управления ими и
  • аналитической службы Geospatial Analytics в среде Bluemix вместе с инструментом Node-RED.

Это руководство проведет вас через процесс настройки и развертывания в Bluemix базового набора приложений Connected Vehicle и создания аналитической службы с применением Geospatial Analytics и Node-RED.

Приложение Connected Vehicle использует службу IoT Foundation для обмена сообщениями реального времени между моделями автомобилей и приложениями Map и Tester.

Что нужно для создания приложения

Запустить приложение Получить код

Обзор базового приложения Connected Vehicle

Приложение Connected Vehicle, которое мы настроим и развернем, состоит из трех компонентов:

  • модели автомобиля на базе Node.js;
  • HTML5 приложения Map и
  • HTML5-приложения Tester.

Эти три компонента используют службу IBM Internet of Things Foundation (IoT Foundation) для обмена сообщениями реального времени методом публикации/подписки по протоколу MQTT. Модели автомобилей часто публикуют данные телеметрии (два сообщения в секунду) и подписаны на тему command, чтобы принимать команды от приложения-тестера (например, «набрать скорость 60»). Приложение Map подписано на тему vehicle telemetry для отображения положения и состояния моделей автомобилей в режиме реального времени. Приложение Tester позволяет публиковать команды управления автомобилями и уведомления для приложения Map.

Следующий обзорный рисунок иллюстрирует отношения между компонентами приложений.

Обзор базового приложения Connected Vehicle
Обзор базового приложения Connected Vehicle

Шаг 1. Создание экземпляра службы Internet of Things в Bluemix

  1. Войдите в Bluemix. На панели управления нажмите кнопку ADD A SERVICE. Выберите из каталога служб Internet of Things. Выберите план Free и нажмите кнопку CREATE, чтобы создать службу.
  2. Выберите вновь созданную службу на панели управления и нажмите кнопку LAUNCH в правом верхнем углу страницы.
  3. Вы окажетесь на панели управления IoT Foundation, где можно регистрировать устройства, создавать ключи API для приложений, просматривать журнал событий и приглашать в свою организацию других пользователей. Панель управления IoT Foundation
    Панель управления IoT Foundation

Шаг 2. Настройка организации IoT Foundation

Приложение Connected Vehicle использует службу IoT Foundation для обмена сообщениями реального времени между моделируемыми автомобилями и приложениями Map и Tester. Для облегчения этой связи необходимо сначала зарегистрировать устройства и сгенерировать ключ API для приложений.

С помощью имитатора автомобилей можно моделировать несколько автомобилей в одном экземпляре среды выполнения Node.js. IoT Foundation рассматривает каждый имитатор автомобилей как устройство. В конечном итоге у нас будет три имитатора автомобилей, так что на первом шаге нужно зарегистрировать эти имитаторы вручную, чтобы получить реквизиты доступа.

  1. На странице панели управления организации нажмите кнопку Add Device. В списке Device Type нажмите кнопку Create a device type... и введите в поле, расположенное под полем Device Type, значение vehicle. Введите идентификатор устройства любой длины, который будет уникальным для данной организации (например, ABC) и нажмите кнопку Continue. Страница регистрации устройств
    Страница регистрации устройств
  2. На следующей странице отображаются реквизиты доступа для вашего устройства. Запишите их! Например:
    org=o4ze1w
    type=vehicle
    id=ABC
    auth-method=token
    auth-token=5QK1rWHG9JhDw-rs+S
  3. Создайте еще два устройства (например, DEF и GHI) и запишите их реквизиты. С помощью этой информации мы настроим базовый набор приложений.
  4. На панели управления организации перейдите на вкладку API Keys и выберите New API Key. Скопируйте ключ и маркер. Приложения Map и Tester используют эти реквизиты для подключения к службе IoT Foundation.

Шаг 3. Загрузка, настройка и развертывание базового приложения

Исходный код базового приложения IoT находится в проекте bryancboyd | iot-vehicle-geospatial-starter-kit на сайте DevOps Services. Вы можете загрузить собственную копию кода разными способами:

  • создать собственный проект, выбрав пункт FORK PROJECT на странице проекта;
  • клонировать git-репозиторий.

Те, кому знаком один из этих методов, могут использовать его для получения своей собственной копии кода. Для остальных мы приводим инструкции по созданию ZIP-файла и его загрузки в свой компьютер.

  1. Нажмите кнопку Получить код в начале этого руководства.
  2. В проекте bryancboyd | iot-connected-vehicle-starter-kit нажмите кнопку EDIT CODE.
  3. Выделите корень дерева исходного кода и выберите из меню File >Export > Zip. Сохраните загруженный файл в локальный каталог.
  4. Распакуйте ZIP-файл.
  5. Откройте файл manifest.yml в своем локальном проекте. Выберите глобально уникальные имя приложения (например, bryancboyd-trafficsim) и введите это имя а поля hosst и name. Установите количество экземпляров 3 и сохраните файл.
  6. Откройте файл config/settings.js. В нем хранятся все данные конфигурации и ключ API устройства.
    • В поле iot_deviceType введите vehicle.
    • В поле iot_deviceOrg введите шестизначный идентификатор своей организации (например, O4ze1w).
    • В поле iot_deviceSet введите ID и маркеры трех зарегистрированных устройств.
    • В поле iot_apiKey введите созданный ключ API.
    • В поле iot_apiToken введите маркер ключа API.
    • Для notifyTopic и inputTopic используйте значения по умолчанию; эти параметры конфигурации используются службой Geospatial Analytics.
  7. Сохраните изменения.
  8. В корневом каталоге извлеченного приложения наберите cf login. Следуйте подсказкам, указав https://api.ng.bluemix.net в качестве конечной точки API и адрес электронной почты и пароль Bluemix IBM ID в качестве реквизитов доступа. Если у вас есть несколько организаций (и пространств) Bluemix, вам также придется выбрать одну из них.
  9. Введите команду cf push, чтобы развернуть приложение в Bluemix.
  10. Когда приложение будет развернуто, запустите приложение Map: http://имя_приложения.mybluemix.net. Вы увидите три модели автомобилей, движущихся по карте. Щелкните на одной из них, чтобы увидеть данные телеметрии. Работающее приложение Map
    Работающее приложение Map
  11. Каждая модель может имитировать несколько автомобилей. Их количеством управляет переменная среды Bluemix: VEHICLE_COUNT. Введите cf set-env <app-name> VEHICLE_COUNT 5, чтобы увеличить общее количество автомобилей до 15.

Шаг 4. Создание и настройка Geospatial Analytics

Используя службу Bluemix Geospatial Analytics, можно отслеживать моменты, когда каждый автомобиль пересекает границу указанной геозоны. Приложение Map может взаимодействовать с этой службой, позволяя динамически создавать и удалять геозоны графическим способом.

  1. Нажмите кнопку ADD A SERVICE на панели управления своего нового приложения Bluemix. Выберите Geospatial Analytics из каталога служб. Выберите план Free и нажмите кнопку CREATE, чтобы привязать службу к своему приложению.
  2. Базовый набор приложений включает в себя API для запуска и останова Geospatial Analytics с помощью заданных реквизитов организации IoT Foundation и сообщений. Чтобы запустить службу, откройте страницу http://имя_приложения.mybluemix.net/GeospatialService_start и дождитесь сообщения об успешном выполнении операции (она может занять 30-45 секунд).
  3. Откройте приложение Map и создайте какие-нибудь геозоны. Нажмите кнопку Alert (символ восклицательного знака) на панели инструментов, чтобы начать процесс создания геозон, и обозначьте геозоны, растягивая их за узлы и края. Чтобы создать геозону, нажмите на центральный черный круг и в открывшемся контекстном меню нажмите кнопку Create. Создание геозоны
    Создание геозоны

Служба Geospatial Analytics добавит геозону в список отслеживаемых областей и будет публиковать сообщения MQTT через IoT Foundation всякий раз, когда автомобиль входит в эту область или покидает ее. Приложение Map получает сообщение и отображает его на карте над автомобилем.

Карта с сообщением
Карта с сообщением

Чтобы удалить геозону, выберите область и нажмите кнопку Delete.

Шаг 5. Работа с приложением Tester

Приложение Tester передает команды управления моделями автомобилей и приложением Map. Модель автомобиля поддерживает команды типа setProperty и динамически изменяет свои собственные параметры, скорость и состояние. Приложение Map подписывается на команды типа addOverlay и динамически отображает всплывающее текстовое окно над автомобилем.

  1. Откройте приложения Map и Tester (http://имя_приложения.mybluemix.net/tester) в смежных окнах, так чтобы были видны обе страницы.
  2. Чтобы настроить команду setProperty, выберите автомобиль и введите ID в форме внизу окна приложении Tester. Введите свойство speed и значение 100 и нажмите кнопку Update Property. В окне приложения Tester появится тема MQTT и сообщение, содержащее команду, а выбранный автомобиль изменит скорость на 100 миль/час.
    • Примечание. Автомобиль имитирует набор статических параметров (местоположение, скорость, состояние и тип) и специальных параметров. Для динамического добавления/изменения/удаления специальных параметров автомобиля можно использовать API setProperty. Чтобы добавить новый параметр, опубликуйте его (например, DriverWindow = UP). Чтобы удалить параметр, присвойте ему значение пустой строки; автомобиль перестанет включать этот параметр в сообщения телеметрии. Настройка команды setProperty
      Настройка команды setProperty
  3. Чтобы настроить команду addOverlay: используйте верхнюю форму приложения Tester для отображения сообщения, всплывающего над автомобилем. Настройка команды addOverlay
    Настройка команды addOverlay

Шаг 6. Создание аналитического приложения Node-RED

Чтобы дополнить базовый комплект приложений простой аналитикой, можно использовать шаблон Node-RED в Bluemix. Node-RED – это визуальный инструмент для связывания событий в IoT-приложениях. С его помощью можно создавать схемы, в которых различные входы (MQTT, TCP, HTTP и т.п.) связаны с выходами (MQTT, HTTP, Twitter, MongoDB, Cloudant и т.п.), быстро добавляя простую аналитику.

  1. Развертывание шаблона приложения Node-RED в Bluemix: на панели управления Bluemix нажмите кнопку ADD APPLICATION и выберите шаблон Internet of Things Foundation. Укажите уникальное имя приложения и имя хоста (например, bryancboyd-nodered) и нажмите кнопку CREATE.
  2. Когда приложение запустится, нажмите кнопку BIND A SERVICE и выберите службу Internet of Things, созданную на шаге 1.
  3. После развертывания приложения откройте холст Node-RED по адресу: http://node-red-app.mybluemix.net/red/.
  4. Шаблон Node-RED приложения IoT начинается со схемы по умолчанию. Выберите узлы на холсте и удалите их.
  5. Создайте схему для контроля телеметрии всех автомобилей: перетащите из палитры в левую часть холста входной узел ibmiot. Перетащите узел debug и разместите его справа от узла ibmiot, связав два узла между собой. Дважды щелкните узле ibmiot и настройте его следующим образом:
    • в поле Authentication выберите Bluemix Service;
    • в поле Input Type выберите Device Event;
    • в поле Device Type введите vehicle;
    • в поле Device Id установите флажок All;
    • в поле Event введите telemetry;
    • в поле Format введите json;
    • в поле Name введите telemetry.
  6. Нажмите кнопку Deploy (в верхнем правом углу страницы) и выберите панель отладки. Если настройка прошла успешно и базовый комплект приложений работает, то вы увидите на панели отладки сообщения MQTT для подключенных автомобилей. Настройка Node-RED
    Настройка Node-RED
  7. Если переменной среды VEHICLE_COUNT присвоено значение, большее 1, то данные телеметрии автомобилей VEHICLE_COUNT содержатся в одном массиве. Чтобы изменить схему, выделите один автомобиль (например, ABC-2), добавьте узел function в середине схемы, дважды щелкните на нем и введите следующий код:
    var data = msg.payload;
    for (var i in data) {
    if (data[i].id == "ABC-2") {
    msg.payload = data[i];
    return msg;
    }
    }
  8. Соедините элементы схемы и нажмите кнопку Deploy. Теперь вы должны увидеть на панели отладки данные одного автомобиля. Данные одного автомобиля на панели отладки
    Данные одного автомобиля на панели отладки

Шаг 7. Создание виртуального брелка в Node-RED

Теперь мы используем Node-RED для создания простого пульта дистанционного управления для блокирования/разблокирования автомобиля. Для этого воспользуемся двумя узлами inject: чтобы разблокировать автомобиль и блокировать его. Для каждой операции будем публиковать команду setProperty для параметра lockState со значением locked или unlocked, а затем команду addOverlay для отображения сообщения в приложении Map.

  1. Перейдите на схему Node-RED и перетащите на холст два входных узла inject. Отредактируйте каждый узел и настройте строку сообщения: locked для одного и unlocked для другого. Эти значения будут передаваться в команду setProperty. Настройка строки сообщения
    Настройка строки сообщения
  2. Добавьте в схему узел функции и соедините его с обоими узлами inject. Эта функция будет создавать и публиковать две команды IoT Foundation: для задания состояния автомобиля и для отображения сообщения в приложении Map. Используйте следующий код:
    var commandValue = msg.payload;
    var setPropertyMsg = {
    deviceId: "ABC",
    deviceType: "vehicle",
    eventOrCommandType: "setProperty",
    format: "json",
    payload: JSON.stringify({
    "id": "ABC-2",
    "property": "lockState",
    "value": commandValue
    })
    }
    var addOverlayMsg = {
    deviceId: "tester",
    deviceType: "api",
    eventOrCommandType: "addOverlay",
    format: "json",
    payload: JSON.stringify({
    "id": "ABC-2",
    "text": commandValue,
    "duration": 5000
    })
    }
    return [ [setPropertyMsg, addOverlayMsg] ];
  3. Добавьте в схему выходной узел ibmiot после узла функции. Узел функции переопределяет многие значения настройки узла ibmiot; эти поля мы пометим «фиктивным» значением override. Дважды щелкните на узле ibmiot и настройте его следующим образом:
    • в поле Authentication выберите Bluemix Service;
    • в поле Input Type выберите Device Command;
    • в поле Device Type введите override;
    • в поле Device Id введите override;
    • в поле Command Type введите override;
    • в поле Format введите json;
    • в поле Data введите override;
    • в поле Name введите commands.
    Настройка узла с фиктивными значениями
    Настройка узла с фиктивными значениями
  4. Разверните приложение (нажмите кнопку Deploy в правом верхнем углу страницы) и нажмите кнопку на узлах inject, наблюдая за приложением Map. Вы увидите, что свойство lockState автомобиля ABC-2 изменилось и на карте появилось сообщение unlocked. Сообщение о разблокировании на карте
    Сообщение о разблокировании на карте

Шаг 8. Создание твитов о геопространственных событиях с помощью Node-RED

С помощью службы Bluemix Geospatial Analytics можно создавать многоугольники геозон в приложении Map и получать сообщения о событиях IoT Foundation, когда автомобиль въезжает в определенную область или покидает ее. Приложение Map уже подписано на эту тему событий и отображает уведомления над автомобилем. На эту тему геопространственных событий можно подписать несколько приложений и использовать это в качестве конструктивного блока для создания более сложных сценариев — например, ограничительной линии для юных водителей с подачей сигналов родителям, когда их ребенок выезжает за пределы «разрешенной» зоны. Или обнаружение въезда вашего автомобиля в окрестности дома и уведомление домашней системы автоматизации, чтобы она подготовилась к вашему приезду.

Node-RED можно использовать для установления связи между уведомлениями о пересечении границ геозоны и другими приложениями и API-интерфейсами. В этой схеме мы будем публиковать твиты при получении уведомлений о пересечении границ геозоны конкретным автомобилем.

  1. Перетащите на холст входной узел ibmiot. Дважды щелкните на узле ibmiot и настройте его следующим образом:
    • в поле Authentication выберите Bluemix Service;
    • в поле Input Type выберите Device Command;
    • в поле Device Type введите api;
    • в поле Device Id введите geospatial;
    • в поле Command Type введите geoAlert;
    • в поле Format введите json;
    • в поле Name введите commands.
    Пользовательский интерфейс настройки узла ibmiot
    Пользовательский интерфейс настройки узла ibmiot
  2. Добавьте узел функции после входного узла ibmiot. Эта функция будет фильтровать данные, возвращаемые геопространственной службой, и продолжать выполнение алгоритма только для автомобиля с указанным идентификатором. Введите следующий код (при желании замените ID, указав автомобиль из своей среды), соедините функцию с узлом отладки и разверните приложение:
    msg.payload = {
    time: msg.payload.time,
    id: msg.payload.deviceInfo.id,
    lon: msg.payload.deviceInfo.location.longitude,
    lat: msg.payload.deviceInfo.location.latitude,
    eventType: msg.payload.eventType
    region: msg.payload.regionId
    }
    if (msg.payload.id == "ABC-3") { return msg; }
  3. Затем перетащите на холст выходной узел twitter и соедините выход функции со входом этого узла. Узел twitter можно использовать для настройки существующей учетной записи Twitter с помощью OAuth, а затем передавать в нее сообщения msg.payload. Войдите в свой личный кабинет Twitter и измените узел функции так, чтобы он создавал сообщения для Twitter:
    msg.payload = {
    time: msg.payload.time,
    id: msg.payload.deviceInfo.id,
    lon: msg.payload.deviceInfo.location.longitude,
    lat: msg.payload.deviceInfo.location.latitude,
    eventType: msg.payload.eventType,
    region: msg.payload.regionId
    }
    if (msg.payload.id == "ABC-3") {
    var verb = "exited";
    if (msg.payload.eventType == "Entry") { verb = "entered"; }
    msg.payload = "Vehicle " + msg.payload.id + " has " + verb +
    " region " + msg.payload.region + "!";
    return msg;
    }
  4. Разверните приложение

Теперь Node-RED будет публиковать твиты всякий раз, когда ваш автомобиль пересекает границы геозоны.

Твит, опубликованный Node-RED
Твит, опубликованный Node-RED

Заключение

Создать в Bluemix IoT-приложение с использованием служб Internet of Things и Geospatial Analytics легко. Попробуйте сделать это самостоятельно: дополните базовый набор приложений Connected Vehicle другими службами Bluemix, мобильными приложениями или даже физическими датчиками.


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Когнитивное программированиеs, Мобильные приложения, Облачные вычисления
ArticleID=1012744
ArticleTitle=Создание IoT-приложения для связи с автомобилями с помощью Geospatial Analytics
publish-date=08062015