{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

Использование технологии BLE при работе с beacon-маячком в React Native

Привет! На связи dev.family. Реализуем проекты для фудтех-стартапов и опытных игроков ресторанного рынка. Занимаемся автоматизацией сервисов доставки и сервисов обработки заказов, создаем цифровые меню и внедряем маркетинговые инструменты.

Вам до сих пор кажется, что когда официант Макдональдса находит вас в самом потаенном уголке ресторана и приносит ваш заказ, — это магия? Не хочется вас расстраивать, но это технологии. К тому же не такие уж и сложные, но очень интересные. Весь секрет в особых маячках и технологии BLE. Давайте разберемся, как все настроить и какими могут быть кейсы с их использованием для общепита и ритейла.

Для чего?

Навигация в больших торговых помещениях

Фишка в том, что мы можем в трехмерном пространстве определять с точностью до сантиметра, где находится человек.

Подсказать курьеру, где находится товар на складе. Построить путь в ТЦ до нужного заведения. Ведь в отличие от GPS эта технология видит вас не просто в здании, а на конкретном этаже.

Посылать пуши у нужного стенда и показывать что-то конкретное в приложении. Например, подошел к полкам с ромом или текилой, посмотрел видео в приложении, какие коктейли можно приготовить, какие ингредиенты нужны. Построил маршрут до полок с нужными товарами.

В целом строить аналитику перемещения покупателей: где ходили, где больше задерживались. А затем на основе этого и делать раскладку и продавать лучшие места поставщикам.

Персонализированный подход

Гость подходит к ресторану, его телефон трекает маячок, установленный в заведении и «будит» приложение, оно отправляет запрос на бэк, и бэк уже что угодно может сделать. Например, можем хостес показывать имена и предпочтения тех, кто входит в ресторан, если это есть в нашей базе. Или наоборот можем показывать гостю, что в кафе, мимо которого он проходит сегодня акция. А если это магазин, — напомнить, что в корзине есть неоплаченный товар.

Интересно? Давайте тогда немного погрузимся в технологии, а потом еще поговорим про возможности для бизнеса.

Что за BLE?

Кто бы что не говорил, но технологии Bluetooth Low Energy (BLE), также известная как Bluetooth 4.0 и выше, — до сих пор нет равных. Она стала особо популярной для разработки приложений Интернета вещей (IoT).

BLE – это версия Bluetooth, оптимизированная для минимального энергопотребления. Не сложно догадаться, что любят ее именно за это и юзают во всю в устройствах, работающих от батарей без подзарядки в течение длительного времени.

В отличие от традиционного Bluetooth, который предназначен для обмена большими объемами данных (например, аудиофайлами), BLE оптимизирован для передачи небольших пакетов данных с максимальной энергоэффективностью. Это позволяет устройствам, таким как фитнес-браслеты, умные часы, медицинские сенсоры и маячки (beacons), работать от одной батареи месяцами, а иногда и годами. На ум сразу приходит всеми любимый airtag, который кидают в чемоданы и рюкзаки, вешают на ключи и тп, чтобы следить за своей собственностью.

Так, иногда за какими-то девайсами, которые поражают нас своей гениальностью стоят такие немудреные технологии. BLE постоянно используется для разработки новых типов устройств и приложений, благодаря своей энергоэффективности, широкой совместимости, низкой стоимости и простоте использования.

Beacon

Маячки (beacons) — это небольшие беспроводные устройства, которые передают сигналы на короткие расстояния с использованием технологии Bluetooth Low Energy (BLE). Они предназначены для передачи уникального идентификатора, который может распознаваться смартфонами и другими устройствами поблизости.

Этот механизм позволяет:

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

Трекинг расстояния с использованием BLE и RSSI

RSSI (Received Signal Strength Indicator — индикатор мощности принимаемого сигнала) основывается на измерении силы сигнала между двумя устройствами: чем ближе устройства друг к другу, тем сильнее сигнал.

Простыми словами, когда вы приближаете ваш смартфон к BLE маячку, смартфон замечает, что сигнал от маячка становится сильнее, и на основе изменения силы сигнала может оценить расстояние до маячка.

Однако точность такого способа измерения может сильно варьироваться из-за различных факторов. Во-первых, физические препятствия, такие как стены или мебель, ослабляют сигнал, из-за чего маячок кажется дальше, чем есть на самом деле. Во-вторых, помехи от других источников сигнала, например, от других BLE устройств или Wi-Fi сетей, также могут искажать измерения. Кроме того, разные модели устройств имеют разную чувствительность приемников, что также влияет на точность определения расстояния.

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

Почему это стоит использовать в бизнесе?

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

Улучшение опыта обслуживания клиентов

  • Разместите маячки внутри ресторана или кафе, чтобы автоматически определить пребывание клиента и предоставить персонализированные предложения через мобильное приложение.
  • Реализуйте систему самообслуживания, где клиенты могут делать заказы и оплачивать через мобильное приложение, а маячки помогут определить их местоположение для точной доставки заказа.

Оптимизация процессов в ресторане

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

Повышение лояльности клиентов

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

Аналитика и сбор данных

  • Собирайте данные о перемещении клиентов внутри заведения, чтобы оптимизировать размещение столов, улучшить дизайн помещения и управлять потоком посетителей.
  • Анализируйте данные о предпочтениях клиентов, основанных на их местоположении, чтобы улучшить меню и предложить более подходящие блюда.

Доставка и сервис «to-go»

  • Используйте маячки для отслеживания заказов и определения местоположения курьеров, что может помочь в оптимизации процесса доставки.
  • Уведомляйте клиентов о статусе заказа и предоставляйте информацию о доставке в режиме реального времени через мобильные приложения.

Как это реализовать технически?

Если вы решили, что хотите использовать данное решение в своем проекте, вам понадобятся:

  1. Beacon-маячок: выберите подходящий маячок с поддержкой BLE, который соответствуют вашим требованиям по дальности. Большое количество маячков вы можете найти на Aliexpress, мы использовали HOLY-IOT.
  2. Смартфон или планшет с поддержкой BLE: Устройство для тестирования и использования вашего приложения, совместимое с технологией Bluetooth Low Energy. Для нашего решения подойдут iPhone c iOS 9.0 и выше, Android c 7 и выше.
  3. Инструменты разработки для вашего приложения, например, VSCode, а также React Native и библиотека react-native-ble-plx.

Теперь можно приступать к реализации

Для сбора данных RSSI мы будем использовать библиотеку `react-native-ble-plx`. Используем методом startDeviceScan. Этот метод позволяет сканировать BLE устройства в радиусе действия и получать информацию о них, включая RSSI. Вот пример того, как можно реализовать сбор данных RSSI для определенных устройств:

import { BleManager } from "react-native-ble-plx"; const NAME = "HOLY-IOT"; const bleManager = new BleManager(); // Функция для начала сканирования BLE устройств function startScanning() { // Первый параметр - UUIDы сервисов (null, если хотите сканировать все устройства) // Второй параметр - опции сканирования // Третий параметр - колбэк, вызываемый при обнаружении устройства bleManager.startDeviceScan(null, null, (error, scannedDevice) => { if (error) { console.warn(error); return; } if (scannedDevice && scannedDevice.name === NAME) { console.log(scannedDevice.name, scannedDevice.rssi); // находим необходимый нам девайс // здесь в дальнейшем будем обрабатывать RSSI } }); } // Остановка сканирования, если это необходимо function stopScanning() { bleManager.stopDeviceScan(); }

Также не забудьте запросить разрешения на доступ к местоположению, если вы работаете на Android, так как это необходимо для сканирования BLE устройств начиная с Android 6.0 (API уровня 23).

В этом примере сканирование всех доступных BLE устройств происходит каждый раз, когда обнаружено устройство c заданным UUID. В консоли будет отображаться имя устройства и его RSSI.

Обратите внимание, что для работы с Bluetooth на iOS и Android могут потребоваться разрешения и настройки конфиденциальности, включая запрос на доступ к местоположению и объяснение, зачем вашему приложению это разрешение, в файлах `Info.plist` (iOS) и `AndroidManifest.xml` (Android) соответственно.

Оценка расстояния на основе RSSI

Для расчета расстояние между BLE устройством и маячком на основе значения RSSI используем данную формулу:где:

d — расстояние до устройства (маячка),

TX Power — мощность сигнала, измеренная на стандартном расстоянии (обычно 1 метр) от маячка

RSSI — мощность сигнала,

n — коэффициент затухания сигнала (environmental factor), отражающий потери сигнала в среде; типичные значения находятся в диапазоне от 2 до 4.

Эта формула позволяет оценить расстояние между двумя устройствами, используя логарифмическую зависимость изменения мощности сигнала от расстояния.

Значение коэффициента затухания сигнала n зависит от конкретных условий окружающей среды, в которой происходит передача сигнала.

Открытое пространство без препятствий: Значениеnоколо 2. Это условие предполагает минимальное затухание сигнала, когда между устройствами нет значительных препятствий, и сигнал может распространяться прямолинейно.

Внутри помещений с препятствиями: Значениеnможет варьироваться от 2.5 до 3.5 или даже выше. В помещениях сигнал может отражаться от стен, потолков и других объектов, что увеличивает затухание. Более высокие значенияnиспользуются для учета этого дополнительного затухания.

Сложные условия с множеством препятствий: В помещении с высокой плотностью препятствий, таких как склады, производственные помещения или городские условия с множеством отражающих поверхностей, значение n может быть установлено в диапазоне от 4 до 5. Эти условия требуют более высокого коэффициента затухания для компенсации значительных потерь сигнала.

Важно понимать, что определение наиболее подходящего значения n часто требует эмпирического подхода. Это означает проведение тестов в целевой среде для измерения реального распределения сигнала и адаптации коэффициента затухания для достижения наилучшей точности в оценке расстояния.

Как это будет выглядеть на практике?

Мы уже получили значения RSSI в результате сканирования устройств, как было показано в предыдущем примере. Теперь добавим функцию для расчета расстояния:

function calculateDistance(rssi, measure = -69, multiplier = 2) { return Math.pow(10, (measure - rssi) / (10 * multiplier)); } bleManager.startDeviceScan(null, null, (error, scannedDevice) => { if (error) { console.warn(error); return; } if (scannedDevice && scannedDevice.name === NAME) { const distance = calculateDistance(scannedDevice.rssi); } });

Повышения точности измерений

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

Мы будем использовать простой метод скользящего среднего (Moving Average), который используется для сглаживания временных рядов данных и уменьшения случайных колебаний.

Для реализации этой техники мы будем хранить последние несколько измерений RSSI для устройства и вычислять среднее значение из них.

const rssiValues = {}; // объект для хранения массивов значений RSSI function addRssiValueAndGetAverage(deviceId, newValue, maxSize = 3) { if (!rssiValues[deviceId]) { rssiValues[deviceId] = []; // Инициализируем массив, если это первое значение } const values = rssiValues[deviceId]; values.push(newValue); // Добавляем новое значение // Удаляем самое старое значение, если превышен максимальный размер массива if (values.length > maxSize) { values.shift(); } // Вычисляем среднее значение const averageRssi = values.reduce((acc, value) => acc + value, 0) / values.length; return averageRssi; } bleManager.startDeviceScan(null, null, (error, scannedDevice) => { if (error) { console.warn(error); return; } if (scannedDevice && scannedDevice.name === NAME) { const averageRssi = addRssiValueAndGetAverage(scannedDevice.id, scannedDevice.rssi); console.log(`Среднее значение RSSI для устройства ${scannedDevice.name}: ${averageRssi}`); } }); // Здесь можно использовать среднее значение RSSI для оценки расстояния } });

Зачем мы все это делали?

Стоит отметить, что данный метод позволяет достичь приблизительной оценки расстояния до маячков. Несмотря на внедрение алгоритмов для повышения точности измерений, необходимо признать, что получаемые результаты остаются приблизительными. Также особенностью данной реализации является её работоспособность исключительно при активном состоянии приложения (foreground state), что накладывает определённые ограничения на сферы её применения.

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

В будущем мы планируем разработать улучшенную версию, которая будет способна функционировать не только при активном приложении, но и в фоновом режиме (background state). Это позволит расширить область применения технологии, делая её пригодной для задач мониторинга и трекинга в реальном времени без необходимости постоянного взаимодействия пользователя с приложением.

Развитие и улучшение системы трекинга с использованием BLE и RSSI открывает новые перспективы для создания эффективных и удобных решений в самых разных областях, от ритейла до фудтеха, предоставляя пользовательский опыт нового уровня. Но это уже совсем другая история…

0
Комментарии
-3 комментариев
Раскрывать всегда