iBeacon / Bluetooth Low Energy (устройства BLE) — максимальное количество маяков

Хотелось бы отслеживать сразу большое количество маяков (~500) в радиусе 50-100 м через приложение на айфоне (5s). Я просмотрел спецификацию и онлайн, и я не вижу, есть ли какое-либо ограничение на количество маяков, которые вы можете отслеживать одновременно с помощью BLE. Кто-нибудь знает, существует ли ограничение на количество маяков, которые вы можете отслеживать, или iPhone 5s сможет отслеживать такое количество маяков?


person user1048175    schedule 11.10.2013    source источник


Ответы (5)


Вы использовали слово «отслеживать», но в iOS есть два разных метода: мониторинг и ранжирование.

Вы можете установить максимум 20 регионов для мониторинга. (Найдено в документации по методу startMonitoringForRegion:.) Ограничения региона в основном вступают в игру, если ваше приложение работает в фоновом режиме. ОС предупредит ваше приложение, когда вы войдете или покинете регион, который вы отслеживаете (плюс-минус несколько минут). ОС даже запустит ваше приложение, чтобы сообщить ему, что произошло (хотя и ненадолго).

Другой метод — ранжирование, то есть поиск всех маяков в радиусе действия Bluetooth устройства (обычно около 100 футов плюс-минус). Если ваши маяки разбросаны на расстоянии более 100 миль, то вы, вероятно, не столкнетесь здесь с каким-либо практическим ограничением. Я не нашел никакой документации для этого, и у меня есть только четыре маяка, с которыми я тестирую, и четыре одновременно работают.

Вот один из способов справиться с вашей ситуацией. Сделайте так, чтобы все ваши 500 маяков использовали один и тот же UUID, и создайте область маяка, используя метод initWithProximityUUID:identifier:. (Идентификатор только для вас -- он ни на что не влияет). Начинаем мониторинг этого маяка. Таким образом, ваше приложение будет получать уведомления всякий раз, когда будет найден один из ваших 500 маяков (плюс-минус несколько минут). Получив уведомление, вы можете использовать startRangingBeaconsInRegion:, чтобы найти все маяки вокруг этой области, а затем использовать основные и второстепенные значения, чтобы выяснить, какие маяки находятся рядом с пользователем.

person dwsolberg    schedule 11.10.2013
comment
Имейте в виду, однако, что, когда ваше приложение получает уведомление iBeacon в фоновом режиме, ваше приложение получает только ограниченное количество времени для принятия мер (скорее всего, в порядке секунд). В зависимости от того, какое действие вы хотите предпринять, возможно, подсказка пользователю (с UILocalNotification) открыть приложение, а затем начать ранжирование, когда приложение открыто, может быть правильным решением. Пример можно найти здесь. - person Kasper Munck; 19.12.2013
comment
Каковы ограничения Bluetooth, GPS? - person Codesen; 18.11.2014

Я добавлю к ответу Тима Тисдалла, в котором изложены правильные рамки. Я не могу говорить о конкретных возможностях iPhone 5s или iOS в целом, но я не вижу причин, по которым он не будет возвращать каждый пакет ADV_IND (т. е. передачу маяка), который он получает.

Вопрос в том, смогут ли 500 маяков передавать свои пакеты ADV_IND без коллизий?

Для передачи пакета ADV_IND требуется около 0,128 мс. Время между рекламными передачами настраивается в диапазоне от 20 мс до 10240 мс (с интервалом 0,625 мс), поэтому вероятность коллизий зависит от конфигурации маяков.

Основываясь на распределении Пуассона, вероятность коллизии для любого данного пакета ADV_IND равна 1-exp(-2*N*(0,128/AI)), где N — количество радиомаяков в пределах досягаемости, AI — время в миллисекундах интервал объявления (при условии, что все маяки настроены одинаково), а 0,128 — это время в миллисекундах, необходимое для отправки пакета ADV_IND. (См. http://www3.cs.stonybrook.edu/~jgao/CSE590-fall09/aloha-analysis.pdf, если вам нужно объяснение.)

Для 500 маяков с максимальным интервалом объявления около 10 секунд будет происходить коллизия примерно раз в 81 пакет (или примерно 6 из 500). Если вы готовы подождать пару интервалов (например, 30 секунд), есть большая вероятность, что вы сможете получить все 500 пакетов ADV_IND.

С другой стороны, если рекламный интервал меньше, скажем, 500 мс, коллизия будет примерно в 23% случаев (или 113 из 500). Вам придется подождать еще несколько интервалов, чтобы повысить вероятность того, что вы увидите трансляции со всех маяков.

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

Одно предостережение: если вы хотите подключиться к этим маякам, а не просто получать пакет ADV_IND, для этого потребуется обмен еще двумя пакетами по рекламным каналам, а вероятность коллизии в рекламных каналах немного возрастает.

person b1tw153    schedule 10.06.2016

Если я правильно понял ваш вопрос, вы хотите поместить все 500 iBeacons в пределах 100 метров друг от друга, что означает, что их передачи будут перекрываться. Вероятно, вы столкнетесь с проблемами перегрузки радиосвязи задолго до того, как столкнетесь с какими-либо ограничениями iOS7 или вашего телефона.

Я без проблем успешно протестировал 20 iBeacons в непосредственной близости, но 500 iBeacons — это экстремальная плотность. это обсуждение в связи с аппаратным обеспечением предполагает, что у вас могут возникнуть проблемы.

Как минимум, конфликты передач 500 iBEacon заставят ваше устройство iOS увидеть каждый iBeacon дольше. Обычно iOS7 обеспечивает обновление диапазона один раз в секунду для каждого устройства iOS, но вы можете обнаружить, что вы получаете обновления намного реже. Все зависит от вашего приложения, допустимы ли менее частые обновления.

Даже если задержки приемлемы, я бы обязательно проверил это, прежде чем рассчитывать, что оно вообще сработает. К сожалению, это означает получение большого количества iBeacons.

person davidgyoung    schedule 12.10.2013

Я не согласен. Это правда, что маяки ble передают только рекламные данные, но передача таких данных длится около 3 мс (учитывая три рекламных канала). Имея 500 маяков, БЕЗ учета каких-либо столкновений, сканеру потребуется 1,5 секунды, чтобы увидеть их все. Но если все маяки настроены одинаково (один и тот же интервал объявления), неизбежны коллизии, которые приводят к необнаруженным маякам. Даже если интервал рекламы отличается, между маяками происходят коллизии. Чтобы избежать вероятности коллизии, следует использовать более длительный интервал объявления, но это приводит к увеличению задержки обнаружения. Это рассуждение очень грубое, оно не учитывает многие эффекты, а представляет собой просто расчет порядка величины.

Кстати, вопрос не из легких, тут много параметров, которые играют роль, некоторые известны, некоторые неизвестны. Но я работаю с ble около года, и для меня 500 — это огромное число, и есть вероятность, что вы не увидите большинство узлов из-за коллизий.

person Davide Giovanelli    schedule 28.10.2015
comment
Я только что написал сценарий Matlab, который оценивает количество столкновений. Это предполагает использование ble, поэтому с использованием трех каналов adv и продолжительностью фазы tx 466 мкс, не предполагается никаких других типов помех (wi-fi, zigbee, другие устройства bluetooth). - person Davide Giovanelli; 28.10.2015
comment
Используя 1 секунду объявления и 500 узлов, в среднем у меня есть 186 узлов, которые имеют конфликты и могут не быть обнаружены в течение 1 секунды. Конечно, если обнаружение продолжится, в течение следующей секунды обнаружения снова будет 186 узлов, которые невозможно обнаружить (некоторые будут одинаковыми, некоторые нет), в следующую секунду будут другие 186 и так далее. - person Davide Giovanelli; 28.10.2015
comment
Это очень интересный ответ, и я хотел бы узнать немного больше о вашем анализе моделирования оценок конфликтов для BLE. Готовы ли вы опубликовать суть или источник вашего анализа? - person truedat101; 29.03.2016
comment
Честно говоря нет, но анализ довольно прост. Он занимает один интервал объявления (т. е. интервал, с которым отправляются пакеты объявлений) и случайным образом распределяет слоты передачи каждого узла в течение этого интервала. Любой пакет, перекрывающийся с любым другим, будет поврежден. Вам просто нужно повторить эту рандомизацию много раз и вычислить среднее значение - person Davide Giovanelli; 01.04.2016
comment
@DavideGiovanelli Могу ли я использовать вашу фразу the transmission of such data lasts about 3ms, чтобы дать ответ 333 на вопрос theoretically, what is the maximum number of advertisements that could be heard by a given listening beacon in a second? - person mercury0114; 24.05.2017

Из-за этого вопроса я провел некоторое исследование iBeacon (я понятия не имел, о чем он).

Кажется, что на стороне «маяка» все, что происходит, это отправка общих рекламных пакетов. Это похоже на то, как устройство объявляет, что вы можете подключиться к нему. Однако на самом деле вы не подключаетесь к iBeacon, он просто читает эти рекламные пакеты. Нет встроенного ограничения на количество рекламных пакетов, которые может получить устройство.

Так что меня не удивит, если 500 iBeacon будут работать без проблем. Рекламные пакеты небольшие и разнесены (по времени они повторяются каждые X мс). От телефона к iBeacon не идет никакой связи, телефон просто получает пакеты, которые он слышит. Если в одном пакете есть помехи, он, скорее всего, сможет получить следующий.

person Tim Tisdall    schedule 15.10.2013