Содержание
- Введение
- Что нужно для создания приложения
- Обзор базового приложения Connected Vehicle
- Шаг 1. Создание экземпляра службы Internet of Things в Bluemix
- Шаг 2. Настройка организации IoT Foundation
- Шаг 3. Загрузка, настройка и развертывание базового приложения
- Шаг 4. Создание и настройка Geospatial Analytics
- Шаг 5. Работа с приложением Tester
- Шаг 6. Создание аналитического приложения Node-RED
- Шаг 7. Создание виртуального брелка в Node-RED
- Шаг 8. Создание твитов о геопространственных событиях с помощью Node-RED
- Заключение
- Ресурсы для скачивания
- Похожие темы
- Комментарии
Создание IoT-приложения для связи с автомобилями с помощью Geospatial Analytics
Развертывание и расширение базового набора приложений для связи с автомобилями с использованием Geospatial Analytics и Node.js на платформе IBM Bluemix
Хотите построить приложение с использованием службы «Интернета вещей» (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.”
Что нужно для создания приложения
- Учетные записи в Bluemix и DevOps Services, связанные с вашим IBM ID.
- Интерфейс командной строки Cloud Foundry.
- Знакомство с JavaScript.
Запустить приложение Получить код
Обзор базового приложения 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.
Следующий обзорный рисунок иллюстрирует отношения между компонентами приложений.

Кликните, чтобы увидеть увеличенное изображение
Шаг 1. Создание экземпляра службы Internet of Things в Bluemix
- Войдите в Bluemix. На панели управления нажмите кнопку ADD A SERVICE. Выберите из каталога служб Internet of Things. Выберите план Free и нажмите кнопку CREATE, чтобы создать службу.
- Выберите вновь созданную службу на панели управления и нажмите кнопку LAUNCH в правом верхнем углу страницы.
- Вы окажетесь на панели управления IoT Foundation, где можно регистрировать устройства, создавать ключи API для приложений, просматривать журнал событий и приглашать в свою организацию других пользователей.
Шаг 2. Настройка организации IoT Foundation
Приложение Connected Vehicle использует службу IoT Foundation для обмена сообщениями реального времени между моделируемыми автомобилями и приложениями Map и Tester. Для облегчения этой связи необходимо сначала зарегистрировать устройства и сгенерировать ключ API для приложений.
С помощью имитатора автомобилей можно моделировать несколько автомобилей в одном экземпляре среды выполнения Node.js. IoT Foundation рассматривает каждый имитатор автомобилей как устройство. В конечном итоге у нас будет три имитатора автомобилей, так что на первом шаге нужно зарегистрировать эти имитаторы вручную, чтобы получить реквизиты доступа.
- На странице панели управления организации нажмите кнопку Add Device. В списке Device Type нажмите кнопку Create a device type... и введите в поле, расположенное под полем Device Type, значение
vehicle
. Введите идентификатор устройства любой длины, который будет уникальным для данной организации (например, ABC) и нажмите кнопку Continue. - На следующей странице отображаются реквизиты доступа для вашего устройства. Запишите их! Например:
org=o4ze1w type=vehicle id=ABC auth-method=token auth-token=5QK1rWHG9JhDw-rs+S
- Создайте еще два устройства (например, DEF и GHI) и запишите их реквизиты. С помощью этой информации мы настроим базовый набор приложений.
- На панели управления организации перейдите на вкладку API Keys и выберите New API Key. Скопируйте ключ и маркер. Приложения Map и Tester используют эти реквизиты для подключения к службе IoT Foundation.
Шаг 3. Загрузка, настройка и развертывание базового приложения
Исходный код базового приложения IoT находится в проекте bryancboyd | iot-vehicle-geospatial-starter-kit на сайте DevOps Services. Вы можете загрузить собственную копию кода разными способами:
- создать собственный проект, выбрав пункт FORK PROJECT на странице проекта;
- клонировать git-репозиторий.
Те, кому знаком один из этих методов, могут использовать его для получения своей собственной копии кода. Для остальных мы приводим инструкции по созданию ZIP-файла и его загрузки в свой компьютер.
- Нажмите кнопку Получить код в начале этого руководства.
- В проекте bryancboyd | iot-connected-vehicle-starter-kit нажмите кнопку EDIT CODE.
- Выделите корень дерева исходного кода и выберите из меню File >Export > Zip. Сохраните загруженный файл в локальный каталог.
- Распакуйте ZIP-файл.
- Откройте файл manifest.yml в своем локальном проекте. Выберите глобально уникальные имя приложения (например,
bryancboyd-trafficsim
) и введите это имя а поля hosst и name. Установите количество экземпляров3
и сохраните файл. - Откройте файл config/settings.js. В нем хранятся все данные конфигурации и ключ API устройства.
- В поле
iot_deviceType
введитеvehicle
. - В поле
iot_deviceOrg
введите шестизначный идентификатор своей организации (например,O4ze1w
). - В поле
iot_deviceSet
введите ID и маркеры трех зарегистрированных устройств. - В поле
iot_apiKey
введите созданный ключ API. - В поле
iot_apiToken
введите маркер ключа API. - Для
notifyTopic
иinputTopic
используйте значения по умолчанию; эти параметры конфигурации используются службой Geospatial Analytics.
- В поле
- Сохраните изменения.
- В корневом каталоге извлеченного приложения наберите
cf login
. Следуйте подсказкам, указавhttps://api.ng.bluemix.net
в качестве конечной точки API и адрес электронной почты и пароль Bluemix IBM ID в качестве реквизитов доступа. Если у вас есть несколько организаций (и пространств) Bluemix, вам также придется выбрать одну из них. - Введите команду
cf push
, чтобы развернуть приложение в Bluemix. - Когда приложение будет развернуто, запустите приложение Map: http://имя_приложения.mybluemix.net. Вы увидите три модели автомобилей, движущихся по карте. Щелкните на одной из них, чтобы увидеть данные телеметрии.
- Каждая модель может имитировать несколько автомобилей. Их количеством управляет переменная среды Bluemix:
VEHICLE_COUNT
. Введитеcf set-env <app-name> VEHICLE_COUNT 5
, чтобы увеличить общее количество автомобилей до 15.
Шаг 4. Создание и настройка Geospatial Analytics
Используя службу Bluemix Geospatial Analytics, можно отслеживать моменты, когда каждый автомобиль пересекает границу указанной геозоны. Приложение Map может взаимодействовать с этой службой, позволяя динамически создавать и удалять геозоны графическим способом.
- Нажмите кнопку ADD A SERVICE на панели управления своего нового приложения Bluemix. Выберите Geospatial Analytics из каталога служб. Выберите план Free и нажмите кнопку CREATE, чтобы привязать службу к своему приложению.
- Базовый набор приложений включает в себя API для запуска и останова Geospatial Analytics с помощью заданных реквизитов организации IoT Foundation и сообщений. Чтобы запустить службу, откройте страницу http://имя_приложения.mybluemix.net/GeospatialService_start и дождитесь сообщения об успешном выполнении операции (она может занять 30-45 секунд).
- Откройте приложение Map и создайте какие-нибудь геозоны. Нажмите кнопку Alert (символ восклицательного знака) на панели инструментов, чтобы начать процесс создания геозон, и обозначьте геозоны, растягивая их за узлы и края. Чтобы создать геозону, нажмите на центральный черный круг и в открывшемся контекстном меню нажмите кнопку Create.
Служба Geospatial Analytics добавит геозону в список отслеживаемых областей и будет публиковать сообщения MQTT через IoT Foundation всякий раз, когда автомобиль входит в эту область или покидает ее. Приложение Map получает сообщение и отображает его на карте над автомобилем.

Кликните, чтобы увидеть увеличенное изображение
Чтобы удалить геозону, выберите область и нажмите кнопку Delete.
Шаг 5. Работа с приложением Tester
Приложение Tester передает команды управления моделями автомобилей и приложением Map. Модель автомобиля поддерживает команды типа setProperty
и динамически изменяет свои собственные параметры, скорость и состояние. Приложение Map подписывается на команды типа addOverlay
и динамически отображает всплывающее текстовое окно над автомобилем.
- Откройте приложения Map и Tester (http://имя_приложения.mybluemix.net/tester) в смежных окнах, так чтобы были видны обе страницы.
- Чтобы настроить команду
setProperty
, выберите автомобиль и введите ID в форме внизу окна приложении Tester. Введите свойствоspeed
и значение100
и нажмите кнопку Update Property. В окне приложения Tester появится тема MQTT и сообщение, содержащее команду, а выбранный автомобиль изменит скорость на 100 миль/час.- Примечание. Автомобиль имитирует набор статических параметров (местоположение, скорость, состояние и тип) и специальных параметров. Для динамического добавления/изменения/удаления специальных параметров автомобиля можно использовать API
setProperty
. Чтобы добавить новый параметр, опубликуйте его (например,DriverWindow = UP
). Чтобы удалить параметр, присвойте ему значение пустой строки; автомобиль перестанет включать этот параметр в сообщения телеметрии.
- Примечание. Автомобиль имитирует набор статических параметров (местоположение, скорость, состояние и тип) и специальных параметров. Для динамического добавления/изменения/удаления специальных параметров автомобиля можно использовать API
- Чтобы настроить команду
addOverlay
: используйте верхнюю форму приложения Tester для отображения сообщения, всплывающего над автомобилем.
Шаг 6. Создание аналитического приложения Node-RED
Чтобы дополнить базовый комплект приложений простой аналитикой, можно использовать шаблон Node-RED в Bluemix. Node-RED – это визуальный инструмент для связывания событий в IoT-приложениях. С его помощью можно создавать схемы, в которых различные входы (MQTT, TCP, HTTP и т.п.) связаны с выходами (MQTT, HTTP, Twitter, MongoDB, Cloudant и т.п.), быстро добавляя простую аналитику.
- Развертывание шаблона приложения Node-RED в Bluemix: на панели управления Bluemix нажмите кнопку ADD APPLICATION и выберите шаблон Internet of Things Foundation. Укажите уникальное имя приложения и имя хоста (например,
bryancboyd-nodered
) и нажмите кнопку CREATE. - Когда приложение запустится, нажмите кнопку BIND A SERVICE и выберите службу Internet of Things, созданную на шаге 1.
- После развертывания приложения откройте холст Node-RED по адресу: http://node-red-app.mybluemix.net/red/.
- Шаблон Node-RED приложения IoT начинается со схемы по умолчанию. Выберите узлы на холсте и удалите их.
- Создайте схему для контроля телеметрии всех автомобилей: перетащите из палитры в левую часть холста входной узел ibmiot. Перетащите узел debug и разместите его справа от узла ibmiot, связав два узла между собой. Дважды щелкните узле ibmiot и настройте его следующим образом:
- в поле Authentication выберите Bluemix Service;
- в поле Input Type выберите Device Event;
- в поле Device Type введите
vehicle
; - в поле Device Id установите флажок All;
- в поле Event введите
telemetry
; - в поле Format введите
json
; - в поле Name введите
telemetry
.
- Нажмите кнопку Deploy (в верхнем правом углу страницы) и выберите панель отладки. Если настройка прошла успешно и базовый комплект приложений работает, то вы увидите на панели отладки сообщения MQTT для подключенных автомобилей.
- Если переменной среды
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; } }
- Соедините элементы схемы и нажмите кнопку Deploy. Теперь вы должны увидеть на панели отладки данные одного автомобиля.
Шаг 7. Создание виртуального брелка в Node-RED
Теперь мы используем Node-RED для создания простого пульта дистанционного управления для блокирования/разблокирования автомобиля. Для этого воспользуемся двумя узлами inject: чтобы разблокировать автомобиль и блокировать его. Для каждой операции будем публиковать команду setProperty
для параметра lockState
со значением locked
или unlocked
, а затем команду addOverlay
для отображения сообщения в приложении Map.
- Перейдите на схему Node-RED и перетащите на холст два входных узла inject. Отредактируйте каждый узел и настройте строку сообщения:
locked
для одного иunlocked
для другого. Эти значения будут передаваться в командуsetProperty
. - Добавьте в схему узел функции и соедините его с обоими узлами 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] ];
- Добавьте в схему выходной узел 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
.
- Разверните приложение (нажмите кнопку Deploy в правом верхнем углу страницы) и нажмите кнопку на узлах inject, наблюдая за приложением Map. Вы увидите, что свойство
lockState
автомобиля ABC-2 изменилось и на карте появилось сообщение unlocked.
Шаг 8. Создание твитов о геопространственных событиях с помощью Node-RED
С помощью службы Bluemix Geospatial Analytics можно создавать многоугольники геозон в приложении Map и получать сообщения о событиях IoT Foundation, когда автомобиль въезжает в определенную область или покидает ее. Приложение Map уже подписано на эту тему событий и отображает уведомления над автомобилем. На эту тему геопространственных событий можно подписать несколько приложений и использовать это в качестве конструктивного блока для создания более сложных сценариев — например, ограничительной линии для юных водителей с подачей сигналов родителям, когда их ребенок выезжает за пределы «разрешенной» зоны. Или обнаружение въезда вашего автомобиля в окрестности дома и уведомление домашней системы автоматизации, чтобы она подготовилась к вашему приезду.
Node-RED можно использовать для установления связи между уведомлениями о пересечении границ геозоны и другими приложениями и API-интерфейсами. В этой схеме мы будем публиковать твиты при получении уведомлений о пересечении границ геозоны конкретным автомобилем.
- Перетащите на холст входной узел ibmiot. Дважды щелкните на узле ibmiot и настройте его следующим образом:
- в поле Authentication выберите Bluemix Service;
- в поле Input Type выберите Device Command;
- в поле Device Type введите
api
; - в поле Device Id введите
geospatial
; - в поле Command Type введите
geoAlert
; - в поле Format введите
json
; - в поле Name введите
commands
.
- Добавьте узел функции после входного узла 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; }
- Затем перетащите на холст выходной узел 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; }
- Разверните приложение
Теперь Node-RED будет публиковать твиты всякий раз, когда ваш автомобиль пересекает границы геозоны.

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