IoT-библиотека обмена сообщениями для экосистемы электроскутеров

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

Компания клиента производит электроскутеры – экологичные умные средства передвижения, способные решить транспортные проблемы. Чтобы сделать свою продукцию более функциональной и удобной, заказчик решил интегрировать в него IoT-решение.

Запрос

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

Главной задачей заказчика было соединить и синхронизировать все устройства этой IoT-экосистемы. Нашу команду наняли для разработки IoT-инфраструктуры. Она включает в себя сервер, клиент, панель индикаторов и Rest API для обеспечения удаленного доступа к системе через мобильное приложение.

Требования заказчика касались функциональности системы, но четких инструкций насчет выбора технологий команда не получила. Таким образом, мы должны были предложить жизнеспособное IoT-решение, способное обеспечить эффективное взаимодействие между компонентами сети, а именно между панелью индикаторов, сервером и зарядными стойками.
IoT-экосистема электроскутеров. Специалистами KEDR Solutions было разработано кроссплатформенное приложение и API для сервера
IoT-экосистема электроскутеров. Компоненты, окрашенные зелёным цветом, были разработаны компанией КЕДР Solutions.

Решение

Для эффективной коммуникации между клиентом и сервером можно использовать разные протоколы. В этом проекте связь с панелью индикаторов на сервере осуществляется с помощью протокола HTTP.

Однако это решение казалось недостаточно эффективным для коммуникации между сервером и зарядными стойками. Некоторые из них работают через сеть 2G, которая не может обеспечить высокую пропускную способность и стабильное управление стойкой.

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

Библиотека состоит из нескольких компонентов. Ключевой из них – это Сеанс (Session), который позволяет идентифицировать клиент, отправляющий сообщение в системе. Программный модуль сеансов предоставляет высокоуровневый интерфейс для отправки/приема сообщений и сортировки данных, необходимых для управления последней сессией. Пользователи библиотеки могут самостоятельно расширять параметры хранимых данных.

Менеджер сессий (SessionManager), будучи одним из ключевых компонентов библиотеки, управляет сессиями и предоставляет интерфейс для создания сессий. Транспорт (Transport) – еще один компонент библиотеки – обеспечивает механизм передачи сообщений, а также хранит отправленные и принятые сообщения. Таким образом, пользователям не нужно создавать собственный механизм для реализации этих функций.
Компоненты IoT-библиотеки, разработанной инженерами компании КЕДР Solutions
Компоненты библиотеки
Выполненные работы
Команда КЕДР Solutions предложила IoT-решение для проекта, представив ключевые компоненты сети.

Мы разработали сервер, который также может работать в качестве облачного решения, и клиент для зарядных стоек. Мы написали кроссплатформенное приложение, позволяющее серверу взаимодействовать с аппаратной частью зарядных станций через интерфейсы CAN и UART с помощью специализированных протоколов передачи данных.

Команда разработала простой пользовательский интерфейс для управления IoT-устройствами. Он представляет собой панель индикаторов, которая позволяет мониторить и контролировать устройства, а также собирать данные и аналитику. Это поможет производителю оптимизировать продукцию.
Скриншот панели индикаторов - пользовательского интерфейса, разработанного специалистами KEDR Solutions
Скриншот панели индикаторов
Мы разработали Rest API для мобильного приложения. Это дополнительный модуль на стороне сервера, который позволяет электроскутерам обмениваться данными с зарядными стойками и базой данных.

Наконец, мы написали библиотеку с несколькими компонентами для реализации системы обмена сообщениями между устройствами IoT-сети. Библиотека соединяет все части системы в единое целое. Она также управляет сервером и клиентом, обеспечивая их бесперебойную работу.
Использованные технологии
  • Библиотека была написана на C/C++.
  • Для разработки клиентской части мы использовали JavaScript и HTML.
  • Кроссплатформенное приложение, разработанное для зарядной станции, работает на Windows и Linux.
  • Мы использовали ASP.NET в качестве кроссплатформенного фреймворка на стороне сервера для создания веб-приложения.
  • Мы написали собственные протоколы передачи данных для интерфейсов CAN и UART.

Итоги

Мы создали многокомпонентную библиотеку, которая обеспечивает работу связующего ПО для обмена сообщениями в распределенных системах. Библиотека служит для разработки клиент-серверных и других приложений, взаимодействующих друг с другом в пиринговых сетях.

Наше решение может использоваться для обмена сообщениями, сериализации данных и межсетевого взаимодействия. Оно определяет тип сообщения, создает сообщения со структурой данных и может записывать длинные сообщения. Кроме того, библиотека оснащена системой фильтрации спама для защиты от вредоносного ПО или нежелательных сообщений.

У созданного нами решения легкая архитектура и, как следствие, очень низкие накладные расходы. Его легко внедрять и развертывать. Библиотека очень гибкая и предоставляет широкие возможности по настройке, поэтому может использоваться в различных приложениях, написанных на C++. Благодаря высокой масштабируемости библиотеки пользователи могут добавлять столько устройств, сколько позволяет сервер.