Привет, Хабр! Эта статья — продолжение цикла материалов «Интеграция с инфраструктурой NB-IoT МТС». Вот первая, вторая и третья части. Сегодня поговорим о сервере приложений, его функциях и возможностях. Кроме того, расскажем и о том, что мы в МТС используем для создания тестового сервера приложений и как это работает. Самое интересное — под катом!
Что должен «уметь» сервер приложений?
Как задачи, так и функции сервера зависят от конкретной реализации IoT-приложения. Как минимум сервер приложений должен уметь принимать сообщения от SCEF с данными, полученными от устройств, а также статусом переданных команд. Ещё одна важная функция — отправка на устройство команды управления через SCEF. Функционал может быть расширен такими возможностями, как хранение данных, их обработка и визуализация, а также приём и обработка данных о мониторинге устройств.
Что использовать в качестве сервера приложений? Вариантов достаточно много. Например, это системы АСКУЭ («Пирамида»), системы ERP («1С»), классические облачные IoT-платформы (такие как Microsoft IoT Hub, Azure, MTS IoT Hub и другие). К серверу есть несколько требований, которым он должен соответствовать. Ключевых требований два:
первое — платформы должны быть достаточно гибки;
второе — у них должна быть возможность настройки распознавания и интерпретации входящего потока данных.
На этапе создания и отладки устройств имеет смысл использовать тестовые серверы приложений с минимальным функционалом, но максимально гибкие и прозрачные.
Что мы в МТС используем для разворачивания тестового сервера приложений
В компании МТС многие годы для тестирования и отладки устройств используется Node-RED, позволяющий создать тестовый сервер приложений буквально за несколько минут. Это потоковый инструмент разработки для визуального программирования, первоначально разработанный компанией IBM для соединения аппаратных устройств, API и онлайн-сервисов как часть интернета вещей.
Node-RED предоставляет веб-браузер-редактор потока, который можно использовать для создания функций JavaScript. Элементы приложений можно сохранять либо же делиться ими для повторного использования. Среда выполнения построена на Node.js. Потоки, созданные в Node-RED, хранятся с использованием JSON-структур. В 2016 году IBM предоставила Node-RED как открытый исходный код, проект JS Foundation.
Node-RED — кросс-платформенный инструмент, он может работать под управлением операционных систем Windows, Linux, Android. Инструмент нетребователен к ресурсам и может быть установлен как на одноплатный ПК вроде Raspberry Pi и Orange Pi, так и на ноутбук или десктоп с различной архитектурой. Также Node-RED можно установить на виртуальную машину в облаке. Ещё одна возможность — использование Node-RED в облаке IBM.
Инструкции по установке и настройке Node-RED, а также огромное количество учебных материалов и примеров можно найти на официальном сайте проекта.
Пример тестового сервера
Давайте попробуем запустить несложный сервер приложений. Самый простой сервер такого рода можно создать с помощью Node-RED всего за пару минут. Он включает в себя два HTTP-эндпоинта:
один служит для получения данных от устройства через SCEF. URL этого эндпоинта: http://192.168.1.25:1880/Data;
второй принимает данные о мониторинге состояния устройств MONTE. Его URL: http://192.168.1.25:1880/MONTE.
Данные, полученные этими двумя входными узлами, отображаются в окне отладки. Кроме того, SCEF получает ответ с кодом 200.
Поток простейшего тестового сервера приложений представлен на рисунке выше. Текст этого потока, который можно непосредственно импортировать в Node-RED, представлен ниже:
[{"id":"5e0695b193c5a5c1","type":"tab","label":"Test server","disabled":false,"info":"","env":[]},
{"id":"812b829433e20169","type":"http
in","z":"5e0695b193c5a5c1","name":"","url":"/Data","method":"post"," upload":false,"swaggerDoc":"","x":250,"y":680,"wires":
[["2310071777e78246","f576f2c3bc85909d"]]},
{"id":"2310071777e78246","type":"http
response","z":"5e0695b193c5a5c1","name":"","statusCode":"200","heade
rs":{},"x":660,"y":680,"wires":[]},
{"id":"4a8633f2dcbcd613","type":"http
in","z":"5e0695b193c5a5c1","name":"","url":"/MONTE","method":"post",
"upload":false,"swaggerDoc":"","x":260,"y":740,"wires":
[["2310071777e78246","f576f2c3bc85909d"]]},
{"id":"f576f2c3bc85909d","type":"debug","z":"5e0695b193c5a5c1","name
":"","active":true,"tosidebar":true,"console":false,"tostatus":false
,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":7
40,"wires":[]}]
На этом всё. Сегодня статья небольшая, но всё по делу (впрочем, как и всегда). Если у вас есть вопросы, предложения, пишите в комментариях — обсудим.