Маяк — StartRanging и stopRanging зависят от близости маяка

Может кто-нибудь помочь мне, как решить проблему.

Мои текущие настройки маяка:

Устройство маяка - Эстимот. UUID - одинаковый для двух маяков.

  1. Я разместил каждый маяк в двух комнатах, комнаты в 20-30 метрах друг от друга.
  2. Я запускаю веб-службу и что-то обновляю (когда близость близка или непосредственна), когда я вхожу в определенную комнату (проверяю, действительно ли основная и второстепенная части этой комнаты принадлежат этой комнате) 3. Он также поражает другой веб-сервис и что-то обновляет (когда близость далека и неведома).

Проблема с текущим алгоритмом: 1. Когда я вхожу в комнату 1, и если она находится рядом или сразу, она попадает в webservice1. Когда это произойдет, близость комнаты 2 будет далекой или неизвестной, тогда снова сработает веб-служба 2, а также будет много колебаний. Иногда, когда я нахожусь в комнате 1, близость маяка комнаты 2 отображается как близкая. я не хочу, чтобы это случилось

Новый подход и вопросы

  1. Я хотел бы отслеживать конкретный регион, скажем, room1, когда я нахожусь рядом, скажем, в 5 метрах, и запускать радиомаяк только тогда, когда близость близка или непосредственна. и останавливать диапазон, когда близость далека или неизвестна, или я нахожусь на расстоянии более 5 метров
  2. Когда я приближаюсь к комнате 2 (на расстоянии 5 метров), и если близость комнаты 2 близка или непосредственна, он должен начать поиск в комнате 2 и остановить поиск в комнате 1.
  3. Я хотел бы иметь четкий подход или способ написать алгоритм для достижения вышеуказанного. При расчете может использоваться близость или какая-либо другая идея (например, комбинация RSSI и близости или что-то еще).

Было бы здорово, если бы вы могли подробно объяснить мне на примере, как добиться нового подхода, или вы можете сказать мне, есть ли какой-либо другой лучший подход, но, пожалуйста, объясните с кодом.

Меня больше всего беспокоит то, что он не должен работать с маяком в комнате 2, когда я нахожусь в комнате 1 или всего в 5 метрах от комнаты 1, и наоборот.


person user3310076    schedule 01.09.2016    source источник


Ответы (2)


Вы не думали о размещении каждого маяка в своем регионе? Таким образом, комната 1 будет регионом, а комната 2 — другим регионом.

После этого я бы использовал locationManager:didEnterRegion: и locationManager:didExitRegion:. В них вы можете запускать и останавливать диапазон ваших двух областей маяка в зависимости от того, в какой комнате вы находитесь.

Обратите внимание, что Документы Apple утверждают, что:

При тестировании кода мониторинга региона в iOS Simulator или на устройстве имейте в виду, что события региона могут не происходить сразу после пересечения границы региона. Чтобы предотвратить ложные уведомления, iOS не доставляет уведомления региона, пока не будут выполнены определенные пороговые условия. В частности, местоположение пользователя должно пересечь границу региона, отойти от границы на минимальное расстояние и оставаться на этом минимальном расстоянии не менее 20 секунд, прежде чем будут отправлены уведомления.

Конкретные пороговые расстояния определяются оборудованием и доступными в настоящее время технологиями определения местоположения. Например, если Wi-Fi отключен, мониторинг региона будет значительно менее точным. Однако в целях тестирования можно предположить, что минимальное расстояние составляет примерно 200 метров.

ПРИМЕР:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
    if (region.identifier == YOUR ROOM 1 IDENTIFIER)
    {
       //Start ranging room 1
    }
    else
    {
       //Start ranging room 2
    }
}

- (void)locationManager:(CLLocationManager *)manager
    didExitRegion:(CLRegion *)region
{
    if (region.identifier == YOUR ROOM 1 IDENTIFIER)
    {
         //Stop ranging room 1
    }
    else
    {
         //Stop ranging room 2
    }
}
person Rhuari Glen    schedule 01.09.2016
comment
Я не пробовал использовать свойство идентификатора. Я постараюсь и дам вам знать. Как я уже говорил ранее, две комнаты расположены близко (примерно в 20-30 метрах друг от друга). Как вы думаете, будет ли нормально, если я буду использовать идентификатор без определения близости или какого-либо другого фактора, определяющего диапазон? - person user3310076; 01.09.2016
comment
@ user3310076 Да, близость не имеет значения. Например, когда вы прекращаете ранжирование для комнаты 1 и начинаете ранжирование для комнаты 2, устройство будет искать маяки только в комнате 2, маяки комнаты 1 не будут учитываться, пока вы не начнете для них ранжирование. - person Rhuari Glen; 01.09.2016
comment
Я почти на месте. Я пробовал с идентификатором, когда я иду к комнате 1, он начинает искать маяки в комнате 1, когда я выхожу из комнаты 1 и иду в комнату 2, он начинает искать маяки в комнате 2. Но проблема в том, , когда я возвращаюсь к комнате 1 из комнаты 2, он не идентифицирует регион. Поскольку он не идентифицирует регион, он не ранжирует маяки. - person user3310076; 02.09.2016
comment
Спасибо. Я попробовал методы области входа и выхода, так как обе комнаты находятся всего в 20-30 метрах, область входа вызывается для обеих комнат, когда я приближаюсь к комнате 1 или комнате 2, а область выхода вызывается для обеих комнат, когда я отойти › на 50 метров от комнаты 1 или комнаты 2. Я не хочу, чтобы это произошло. Мой желаемый результат: когда я нахожусь рядом с комнатой 1 или комнатой 2 (скажем, на расстоянии 5 м), мне нужно расположить маяки для определенного региона и определить его близость/rssi/точность/или любой лучший коэффициент расчета и нажать на веб-сервис . - person user3310076; 02.09.2016
comment
@ user3310076 Я думаю, что то, чего вы пытаетесь достичь, сложно, в настоящее время нет способа определить, насколько близко устройство находится к определенному региону. Единственное, что я использовал, это свойство proximity, чтобы проверить, нахожусь ли я непосредственно над маяком. Вы установили desiredAccuracy вашего CLLocationManager в kCLLocationAccuracyBest? - person Rhuari Glen; 02.09.2016
comment
Да, она установила требуемую точность на kCLLocationAccuracyBest. Фактор близости почти работает, но тогда проблема возникает из-за колебаний, и это зависит от того, как маяк размещен / расположен. В любом случае, спасибо за все ваше время - person user3310076; 02.09.2016
comment
@user3310076 user3310076 Нет проблем, надеюсь, вы найдете решение! - person Rhuari Glen; 02.09.2016

Основная проблема заключается в отправке информации на сервер в неподходящее время. На самом деле это не имеет ничего общего со стартовым диапазоном.

Вы не можете начать дальность, когда близость относительно близка — вам нужно дальность, чтобы определить близость.

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

Вызовите сервер, если все следующее верно:

  • точность маяка ‹ 3
  • все остальные обнаруженные маяки имеют beacon.accuracy> 3
  • в последнее время для этого маяка не было обращений к серверу

РЕДАКТИРОВАТЬ: Вы можете уменьшить колебания показаний точности, установив максимально возможную мощность передатчика маяка, чтобы максимизировать отношение сигнал/шум.

person davidgyoung    schedule 01.09.2016
comment
Хороший ответ. Причина, по которой я предложил начать и остановить ранжирование, заключалась в том, что устройство @user3310076 сообщало, что он находится рядом с маяком в комнате 2, хотя на самом деле это не так. Поэтому, если он перестанет измерять маяк комнаты 2, находясь в другом регионе, эта проблема больше не будет возникать. - person Rhuari Glen; 01.09.2016
comment
Кроме того, Apple docs рекомендует не использовать accuracy для определения местоположения маяка, поскольку значения могут колебаться из-за радиопомех. - person Rhuari Glen; 01.09.2016
comment
Да, я пытался с точностью и близостью, так как есть много колебаний, я хотел лучшего подхода. - person user3310076; 02.09.2016
comment
Когда дело доходит до принятия решения о том, предпринимать ли какие-либо действия на основе обнаружения устройств Bluetooth, у вас в основном есть три варианта: (1) принять меры, если вы вообще видите маяк, независимо от уровня сигнала (2) принять меры, если вы видите маяк и его сигнал сила превышает пороговое значение (точность, близость и RSSI — все показатели, полученные из силы сигнала) или (3) логика, основанная на комбинированном варианте 2, поступающем от нескольких маяков. Вы не можете изменить законы физики, поэтому использование какого-либо варианта третьего варианта, предложенного в моем ответе, действительно лучшее, что вы можете сделать. - person davidgyoung; 02.09.2016
comment
Я пытаюсь с 3-м подходом. Точность + средняя точность за определенный период :) Спасибо за ваш вклад. - person user3310076; 02.09.2016