
IoT-проект
Заказчик обратился в ItFox с задачей – разработать кроссплатформенное мобильное приложение для фитнес-браслетов. Нам нужно было реализовать проект «под ключ» - от помощи в подборе смарт-устройства и анализа сопроводительной документации. до релиза.
Работанадпроектом
Аналитика
Клиент пришел к нам с идеей и несколькими предложениями от заводов-производителей. Мы изучили SDK разных фитнес-браслетов и дали заказчику свои рекомендации по подбору. В итоге остановились на одном из образцов, но и с ним все было не так просто. На первый взгляд и уверения представителя завода, у фитнес-браслетов была вся необходима документация, однако после изучения материалов, мы обнаружили, что устройства сопровождались устаревшим SDK 2017 года:
- Android-версия написана на Java — язык, который практически не используется в современных проектах под Android;
- iOS-версия — на Objective-C вместо Swift, ;
- код содержал ошибки и нерабочие фрагменты;
- комментарии были на китайском языке и не давали технической информации;
- было непонятное название методов;
- и закрытый исходный код.
Имея такое SDK невозможно предугадать «поведение» оборудования, его возможности и структуру данных. Мы сообщили клиенту о рисках. Вместе приняли решение разделить проект на два этапа:
Этап 1. Создание прототипа приложения для iOS и Android для IoT-браслета без дизайна. Цель - проверка возможности подключения и обмена данными между BLE-устройством и API клиента.
Этап 2. Доработка функционала и интерфейса после подтверждения работоспособности браслета.
Также мы решили, что не будем использовать SDK, учитывая его «качество», и подключимся к браслету напрямую, минуя устаревшие библиотеки. В дальнейшем это позволяло полностью контролировать процесс обмена данными и восстановить логику протокола самостоятельно.
Исследование и восстановление BLE-протокола
Для работы со смарт-оборудованием используют протокол Bluetooth Low Energy (BLE). В норме работа через BLE происходит по схеме:
- Система видит девайс и подключается к нему.
- Даем запрос к устройству: «Какие поля для чтения у тебя есть?», «Какие поля для записи у тебя есть?». То есть Bluetooth не активный, он отвечает на запросы только при подключении.
- В ответ получаем набор GUID — уникальных кодов, по которым обращаемся к нужным данным.
Каждый GUID отвечает за отдельный параметр — Heart Rate, Running Speed, Blood Pressure, Health Thermometer, Glucose, Body Composition, Weight Scale, Pulse Oximeter, и т.д.
Однако в нашем случае, все оказалось непросто. Производитель фитнес-браслетов решил сэкономить на стандартизации Bluetooth и вместо порядка 20-ти полей, сделали только два: одно для записи запроса и одно для чтения ответа. Поэтому работа с BLE приобрела вид: вручную формируем бинарный запрос о том, что мы хотим прочитать, и записываем его в одно из полей, из другого поля нам возвращается ответ.
Разработка мобильного приложения
После восстановления BLE-протокола и проверки работоспособности устройства мы перешли к разработке мобильного приложения. Мы создали кроссплатформенное приложение для iOS и Android. Основная задача заключалась в том, чтобы реализовать устойчивый обмен данными между браслетом и API.
В настоящий момент приложение имеет базовый технический интерфейс, красивый дизайн мы добавим на следующих этапах. Каждое действие — подключение, отправка запроса, получение ответа — мы тестировали отдельно, чтобы исключить ошибки, связанные с нестандартным протоколом.
Похожиепроекты


Результаты
По итогам первого этапа клиент получил рабочий прототип мобильного приложения. Команда ItFox заново настроила устройство, провела тесты, наладила передачу данных и подтвердила, что эта модель будет стабильно работать. Проще говоря — клиент получил уверенность и «зеленый свет» на закупку партии.
Рабочий прототип мобильного приложения выполняет основные функции:
- поиск и подключение к устройству;
- создание и авторизация пользователя на сервере клиента;
- получение данных — частоты сердечных сокращений (Heart Rate), вариабельности ритма (Heart Rate Variability), количества шагов, показателей сна, уровня заряда батареи и текущего времени.
Сейчас команда приступила ко второму этапу разработки. Мы формируем дизайн и структуру будущего приложения и делаем его удобным для пользователей.
Сложности
У технологии BLE широкое применение. Кроме фитнес-браслетов на ее основе работают: беспроводные наушники, «умные» устройства для дома, системы контроля доступа, в т.ч. в автомобилях, бесконтактная оплата. Но работать с BLE непросто. Протокол не передает данные в привычных форматах. Это не JSON и не текст. Устройство отправляет только набор байтов. Чтобы получить корректные значения, нужно точно понимать, что означает каждый байт. Без этой информации расшифровать данные невозможно.
В текущем кейсе бинарные запросы пришлось готовить самостоятельно, т.к. отсутствовала описывающая их документация. Частично данные для формирования запросов удалось вытащить из исходных кодов на Java. Взяли только те, которые удалось идентифицировать — экспериментально определяли, какие байтовые последовательности соответствуют тем или иным показателям. Для получения другой части данных пришлось пойти еще дальше – восстанавливать их с помощью анализа бинарной библиотеки для iOS.
Команда ItFox провела декомпиляцию и дизассемблирование закрытой iOS-библиотеки, чтобы восстановить логику BLE-взаимодействия. Библиотека была скомпилирована под архитектуру Darwin. Мы декомпилировали ее в ассемблер, затем преобразовали в C-код с помощью Ghidra. Таким образом, C-код и LLM помогли нам проанализировать логику взаимодействия и извлечь недостающие данные.
Во время тестирования гаджета обнаружились поля с непонятными именами в исходниках, например HeartRateReability_TestData и еще ряд. Мы подготовили их список и совместно с заказчиком передали их китайским производителям.
И тут случилась очень интересная вещь - выяснилось, что у китайской стороны уже есть SDK на Flutter. Однако, мы отнеслись ко всему философски, так как уже не в первый раз работаем с оборудованием и китайскими производителями.
Новая версия SDK также требовала доработок, но содержала рабочие исходники, которые позволили уточнить значения и корректно обработать все параметры.
Технологии
Кейсы,которымимыгордимся


