En

JazzTeam Software Development Company

Agile Java Development

Разработка сервиса для взаимодействия с облачной IoT платформой по учёту энергоресурсов и управлению приборами учёта энергоресурсов

Продукт

Сервис для взаимодействия с облачной IoT платформой по сбору данных и управлению приборами учёта энергоресурсов (ПУ), с помощью которого пользователь может получать данные с текущих устройств, настраивать их работу, а также подключать новые устройства.

Заказчик

Оператор услуг по передаче данных в сфере интернета вещей (Internet of Things), имеющий собственную сеть базовых станций, размещаемых во всех регионах России.

Бизнес-вызов

Создание инновационного востребованного, не имеющего аналогов на российском рынке решения, обеспечивающего сбор данных и управление приборами учёта энергоресурсов для крупных поставщиков электроэнергии (а также ЖЭСов, производителей, интеграторов, сервисных организаций). В рамках проекта инженеры JazzTeam тесно сотрудничали с R&D службой заказчика. Наши специалисты были привлечены к проекту в качестве независимой команды, первоначальной задачей которой являлось создание MVP продукта (сервиса для взаимодействия с IoT платформой) на основе наработок и технического задания, предоставленных заказчиком. Реализация данной задачи требовала от специалистов JazzTeam глубоких исследований, быстрого освоения сложнейшей предметной области.

Схема взаимосвязи компонентов системы, задействованных в процессах сбора данных и управления приборами учёта энергоресурсов

Схема взаимосвязи компонентов системы, задействованных в процессах сбора данных и управления приборами учёта энергоресурсов

Технологические особенности проекта

  • Компания-заказчик владеет и управляет облачной M2M – телекоммуникационной платформой (обеспечивающей межмашинное взаимодействие) и сетью базовых станций. Базовые станции размещены во всех регионах России. Каждая базовая станция принимает пакеты данных от приборов учёта через присоединённые к ним радиомодули и передаёт данные в M2M платформу. Связь между устройствами и базовыми станциями осуществляется через беспроводные соединения, использующие широкополосную модуляцию LoRa.
  • В обязанности команды JazzTeam входила разработка нескольких компонентов, на основе которых было необходимо реализовать сервис для взаимодействия с облачной IoT платформой по учёту энергоресурсов. С помощью данного сервиса пользователи продукта должны получать данные с текущих устройств, настраивать их работу, а также подключать новые приборы учёта энергоресурсов.
  • Одно из условий, которое было необходимо учесть при разработке продукта — ограничение на размер передаваемых пакетов данных. Обусловлено это несколькими факторами и особенностями взаимодействия станций и облачной платформы. Во-первых, GSM трафик отличается высокой стоимостью. Во-вторых, был риск утери большого объёма данных: если станция работает на передачу данных, она не может одновременно и принимать их.
  • Необходимость работы с данными на достаточно низком уровне: чтобы обеспечить передачу данных, требовался разбор передаваемой информации на байты. Однако язык Java, на котором осуществлялась разработка системы, предназначен для работы с верхнеуровневыми структурами данных (объектами), а не с байтами. Поэтому для реализации системы требовалось дополнительное изучение и применение сторонних библиотек.
  • Тестирование осуществлялось заказчиком, наша команда не имела прямого доступа к конечным пользователям системы, поэтому приходилось решать все нюансы через заказчика, что зачастую тормозило процесс.

Особенности проекта

  • Необходимость быстрого погружения в сложную специфическую предметную область.
  • Часто меняющиеся требования к минимально жизнеспособному продукту (minimum viable product, MVP).

Разработка сервиса связи с платформой IoT для учета энергоресурсов и управления счетчиками энергии

Разработка сервиса связи с платформой IoT для учёта энергоресурсов и управления счётчиками энергии

Подходы и решения

  • Создание MVP продукта на основе наработок заказчика. В процессе разработки MVP мы проводили проверку нескольких гипотез, выдвинутых заказчиком. На первых этапах подготовили версию продукта с 2-мя функциями: удалённым выключением счётчика и передачей 1 байта информации в устройство. Параллельно проводили исследование по необходимым фреймворкам, библиотекам и постепенно наращивали функциональность. По результатам исследования команде удалось найти решения, которые позволили достичь поставленной задачи — управлять счётчиком удалённо. Нами был создан прототип, который демонстрировал общие принципы реализации системы. При этом важнейшей задачей стал стратегически верный выбор наиболее актуальных и удачных готовых решений (библиотек, фреймворков).
  • Создание компонентов системы на основе проведённых исследований. Далее были реализованы все необходимые части backend составляющей проекта в полном объёме. Применён фреймворк Swagger, позволяющий визуализировать компоненты системы, для лучшего представления выполненных работ заказчику. Нашей командой были разработаны следующие компоненты, служащие для конвертации, досбора и анализа данных:
  • «SNMP-агент», позволяющий подключаться к облачной телекоммуникационной платформе (M2M) и управлять устройствами по протоколу SNMP. Реализована поддержка получения и установки динамических показателей устройств IoT по их идентификатору, полученных по gRPC. Все команды агента описаны в MIB-файле, добавлено логирование в различные источники, в том числе syslog. Для реализации SNMP-агента принято решение использовать готовую библиотеку SNMP4j. Разработанный агент был успешно внедрён в систему развёртывания заказчика в качестве Docker-контейнера.
  • «Конвертер протоколов», предназначенный для стандартизированного обмена данными о показаниях приборов учёта (вода и электроэнергия) с внешними приложениями. Конвертер приводит сообщения из стандарта, используемого внешними системами к внутреннему стандарту и наоборот. На данном этапе необходимо было реализовать парсеры для бинарных файлов и протоколов (в том числе, по причине особенностей работы счётчиков и языка программирования Java). При отправке всех сообщений используется протокол M-BUS. С помощью декларативного языка описания бинарных форматов и структур данных Kaitai были созданы парсеры для различных стандартов. В процессе реализации парсеров в форке Kaitai обнаружены критические баги, которые были исправлены нашей командой. Для всей функциональности конвертера созданы Unit-тесты.
  • Прототип «Модуля повторного запроса отсутствующих показаний приборов учёта». Модуль получает запросы показаний от внешних систем. Проверяет наличие данных показаний в базе данных и, если данные показания отсутствуют в системе, формирует запрос на съём показаний с приборов учёта. При формировании запросов модуль определяет, делать запросы единичных показаний, либо запрос показаний на период. Эта функциональность предназначена для минимизации запросов к базовым станциям (что позволяет не терять данные).
    • Реализация RESTful-системы на основе созданных компонентов. Сервис представляет собой, состоящую из набора Rest-сервисов, позволяющих взаимодействовать с ПУ, что даёт возможность реализации любой клиентской части в дальнейшем. Система имеет большое количество возможностей: позволяет добавлять и удалять счётчики, снимать показания и т.д. Благодаря тому, что она состоит из микросервисов, есть возможность в любой момент убрать один сервис и подключить другой, заменить протокол (например, с DLMS на POS), при этом остальной функциональность будет работать стабильно. Это даёт большие возможности для развития клиентской сети и сотрудничества с новыми компаниями (что не потребует значительных доработок системы).
      Обмен данными между клиентом и сервером производится в формате JSON. Система использует базу данных PostgreSQL. В базе данных присутствуют таблицы, которые используются для хранения данных об устройствах, показаниях, пользователях и прочую необходимую информацию. Взаимодействие с базой данных осуществляется с помощью Hibernate и JPA.
      С нашей стороны в проекте участвовали бэкенд-разработчики, они же на определённом этапе взяли на себя задачу по созданию UI системы сервисов. За основу была взяты наработки и инструменты (BootStrap, Lequery), используемые командой заказчика. Также к проекту подключился тестировщик JazzTeam.
    • Применены лучшие практики постановки и управления процессами: применение подходов и мероприятий Scrum-методологии, профессионального использования Jira. Наша команда работала в рамках культуры, принятой за правило в компании JazzTeam. Разработка велась поэтапно, короткими итерациями, прогресс на проекте постоянно отслеживался на промежуточных демо. Наша команда занимала проактивную позицию, постоянно поддерживала контакт с заказчиком, инициировала открытое обсуждение всех проблем и нюансов. Лучшие практики постановки и управления процессами на проекте были переданы специалистам, с которыми мы сотрудничали в рамках проекта. Такой подход был оценён заказчиком, отмечена высокая степень профессионализма менеджмента Jazzteam.

    Результаты и достижения

    • Система реализована в срок, внедрена и начала использоваться заказчиком уже на стадии разработки. Созданный продукт обеспечил передачу данных на большие расстояния с низким энергопотреблением, позволяет оперативно получать и обрабатывать показания приборов по учёту энергоресурсов, что приводит к снижению операционных издержек энергетических компаний и повышает эффективности их деятельности. В результате работы нашей команды были реализованы следующие возможности системы: автоматическая и ручная настройка приборов учёта, управление показаниями и досбором отсутствующих показаний приборов учёта, управление реле и лимитами ПУ, возможность отслеживания событий ПУ путём записи всех событий в журнал ПУ, управление тарифами в ПУ Управление ПКЭ, настройка и управление временем и управляемыми задачами ПУ. Заказчик смог значительно увеличить продажи облачной платформы и продолжает развивать сеть партнёров и постепенно покрывает целые области России.
    • Командой обнаружены и исправлены критические баги в форке Kaitai, что привело к сокращению издержек на стороне заказчика без ущерба качеству и срокам проекта.
    • Приложение работает стабильно. Написанные нашей командой Unit-тесты покрывают весь продукт.
    • В процессе работы выстроена прозрачная Agile-культура, основанная на искренности и честности, что позволило добиться высоких результатов в сжатые сроки. В процессе сотрудничества заказчик был полностью вовлечён в процесс разработки и всегда был в курсе статусов по тем или иным задачам. Таким образом, благодаря постоянной обратной связи, нашей команде удавалось в кратчайшие сроки изменять систему с учётом необходимых требований.

    Применённые технологии

     

    ЗАИНТЕРЕСОВАНЫ В СОТРУДНИЧЕСТВЕ?

    СВЯЖИТЕСЬ С НАМИ