IBeacon/Bluetooth Low Energy (устройства BLE) - максимальное количество маяков
Я хотел бы отслеживать большое количество маяков (~ 500) сразу в радиусе 50-100 м через приложение на iPhone (5s). Я просмотрел спецификацию и онлайн, и я не вижу, есть ли ограничение на количество маяков, которые вы можете отслеживать сразу, используя BLE. Кто-нибудь знает, есть ли ограничение на количество маяков, которые вы можете отслеживать, или если iPhone 5s справится с задачей отслеживания того, что многие маяки?
Ответы
Ответ 1
Вы использовали слово track, но iOS имеет два разных метода: мониторинг и ранжирование.
Вы можете установить максимум 20 регионов для мониторинга. (Найдено в документации для метода startMonitoringForRegion:). Региональные ограничения в основном вступают в игру, если ваше приложение находится в фоновом режиме. ОС будет предупреждать ваше приложение, когда вы входите или покидаете регион, который вы контролируете (дайте или займите несколько минут). ОС даже запустит ваше приложение, чтобы сообщить ему, что произошло (хотя и на короткое время).
Другим методом является ранжирование, которое должно найти все маяки в диапазоне Bluetooth устройства (обычно около 100 футов дают или принимают). Если ваши маяки распределены более чем на 100 миль, то вы, вероятно, не столкнетесь с каким-либо практическим ограничением. Я не нашел никакой документации для этого, и у меня есть только четыре маяка, с которыми я тестирую, и четыре раза работает.
Вот один из способов справиться с вашей ситуацией. Сделайте все ваши 500 маяков использующими один и тот же UUID и создайте зону маяка, используя метод initWithProximityUUID: identifier:. (Идентификатор только для вас - он ничего не влияет). Запуск мониторинга для этой зоны маяка. Таким образом, ваше приложение будет уведомлено, когда будет найден один из ваших 500 маяков (дайте или возьмите несколько минут). После уведомления вы можете использовать startRangingBeaconsInRegion: найти все маяки вокруг этой области, а затем использовать основные и второстепенные значения, чтобы выяснить, какие маяки приближаются к пользователю.
Ответ 2
Если я правильно читаю ваш вопрос, вы хотите разместить все 500 iBeacons в пределах 100 метров друг от друга, то есть их передачи будут перекрываться. Вероятно, вы столкнетесь с проблемами перегруженности радиосвязи задолго до того, как столкнетесь с ограничениями iOS7 или вашего телефона.
Я успешно проверил 20 iBeacons в непосредственной близости без проблем, но 500 iBeacons - это экстремальная плотность. эта дискуссия по проблеме аппаратного обеспечения говорит о том, что вы можете столкнуться с трудностями.
Как минимум, коллизии передач 500 iBEacons заставят ваше устройство iOS больше времени видеть каждый iBeacon. Как правило, iOS7 обеспечивает обновление диапазона раз в секунду для каждого устройства iOS, но вы можете обнаружить, что вы получаете обновления гораздо реже. Все зависит от вашего приложения, допустимы ли менее частые обновления.
Даже если задержки приемлемы, я бы полностью протестировал это, прежде чем рассчитывать на то, что он работает вообще. К сожалению, это означает, что вы получаете много iBeacons.
Ответ 3
Я добавлю к Tim Tisdall ответ, в котором изложена правильная структура. Я не могу говорить о конкретных возможностях iPhone 5 или 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, который требует обмена еще двумя пакетами на рекламных каналах, а вероятность столкновения в рекламных каналах повышается бит.
Ответ 4
Я не согласен. Правда, белые маяки передают только рекламные данные, но передача таких данных длится около 3 мс (с учетом трех рекламных каналов).
Имея 500 маяков, БЕЗ рассмотрения любого столкновения, сканер займет 1,5 секунды, чтобы увидеть их всех.
Но, если все маяки настроены таким же образом (тот же рекламный интервал), неизбежно столкновения, которые приводят к тому, что у них будут неоткрытые маяки. Даже если рекламный интервал отличается между встречными столкновениями маяков. Чтобы избежать вероятности столкновения, следует использовать более длительный интервал рекламы, но это приводит к более длительной задержке обнаружения.
Это рассуждение очень сырое, оно не заботится о многих эффектах, а просто вычисляет порядок.
Кстати, вопрос нелегкий, есть много параметров, которые играют роль, некоторые из них известны, некоторые из них неизвестны. Но я работаю с одним годом, и для меня 500 - это огромное количество, и есть вероятность того, что вы не увидите большинство узлов из-за столкновений.
Ответ 5
Я занимался некоторыми исследованиями в iBeacon из-за этого вопроса (я понятия не имел, что это такое).
Кажется, что на стороне "маяка" все, что происходит, это общие рекламные пакеты отправляются. Это похоже на то, как устройство объявляет, что вы можете подключиться к нему. Тем не менее, вы фактически не подключаетесь к iBeacon, он просто читает эти рекламные пакеты. Там нет встроенного ограничения на количество рекламных пакетов, которые может получить устройство.
Итак, меня не удивило бы, если бы 500 iBeacon работали без проблем. Рекламные пакеты небольшие и разнесены (по времени, они повторяются каждые X мс). Там нет связи, идущей от телефона к iBeacon, телефон просто получает пакеты, которые он слышит. Если есть помехи на одном пакете, ему, скорее всего, удастся получить следующий.