Разъяснения по сканированию LowPower AltBeacon - PullRequest
0 голосов
/ 06 мая 2020

Моя цель - понять, как работает AltBeacon, и получить наиболее эффективное приложение в отношении энергопотребления и обнаружения маяков. В настоящее время я анализирую библиотеку, и мне нужны пояснения.

Окружающая среда:

  • При использовании настраиваемых маяков, не имеющих зависимости мощности (на маячке HW), скорость передачи (adv) больше чем 1/s
  • Использование android -beacon-library-reference с модификациями освещения для соответствия пользовательским маякам;
  • Использование Android 10 OS
  • Все испытания сделано с использованием только backgroundMode

Вот мои вопросы:

  1. При инициализации (используя RegionBootstrap) мы достигаем ScanJobScheduler из двух точек

    • BeaconManager:startMonitoringBeaconsInRegion: планирует немедленное выполнение ScanJob в 50 millis
    • BeaconManager:setBackgroundMode: отменяет предыдущее запланированное немедленное выполнение ScanJob (поскольку мы находимся в фоновом режиме) и планирует периодi c ScanJob

      Является ли причиной отмены немедленного выполнения ScanJob из-за того, что второй вызов сделан менее чем за 50 миллисекунд? и почему периодi c ScanJob запланирован дважды?

  2. После того, как я убью приложение, потребуется ~ 10 минут для повторного запуска, а после еще 15 минут для запуска 1-го сканирования.

    Можем ли мы выполнить одно «задание на периодi c сканирование» сразу после запуска приложения и не ждать еще 15 минут, чтобы выполнить 1-е запланированный периодi c ScanJob для запуска?

  3. Low Power HW Filter работает только после завершения одного ScanJob

    • Я видел, что HW-фильтр устанавливается после завершения жизненного цикла ScanJob (createScanFiltersForBeaconParsers)
    • В случае, когда приложение убито, это означает, что фильтр будет установлен после 1-го периодаi c ScanJob завершится ( 25 минут)

      Можно ли установить фильтр Low Power HW Filter сразу после инициализации и не ждать завершения 1-го задания сканирования?

  4. Если я изменю мощность ADV TX на t Если пользовательский маяк будет ниже, калькулятор расстояния по-прежнему будет работать правильно?

  5. Имеет ли смысл использовать только фоновый режим или мне следует переключиться на передний план? Достигнет ли это моей цели?

    • Запуск службы на переднем плане
    • Установить фильтр HW (если пункт 3 не подходит, немедленно выполните сканирование на переднем плане, чтобы запустить его)
    • Сканирование в фоновом режиме до тех пор, пока HW-фильтр не выполнит намерение.
    • Начать сканирование на переднем плане после обнаружения 1-го маяка.
    • Сканируйте на переднем плане, пока мы не выйдем за пределы области, чтобы HW-фильтр был установлен снова (startPassiveScanIfNeeded)
    • Переключиться на сканирование в фоновом режиме и дождаться следующего пробуждения
  6. Есть ли какой-либо способ получить намерение с BluetoothLEScanner когда маяк вне зоны действия?

Спасибо, Влад

1 Ответ

0 голосов
/ 06 мая 2020

Несколько ответов:

  1. 50-секундная задержка при запуске задания немедленного сканирования предназначена для предотвращения состояния гонки, при котором одновременно запускаются два задания немедленного сканирования. Когда вы устанавливаете для фонового режима значение true, предполагается, что вы изменяете фоновый режим, поэтому он отменяет любое текущее задание сканирования (предназначенное только для использования на переднем плане), чтобы переключиться на фоновые операции, когда задание сканирования отсутствует. Планирование происходит дважды, потому что первый BeaconManager:startMonitoringBeaconsInRegion и BeaconManager:setBackgroundMode запускают процесс «перепланирования». Вы можете избежать всего этого оттока, сначала позвонив BeaconManager:setBackgroundMode:, ранее в процессе инициализации. Таким образом, библиотека уже находится в фоновом режиме, когда вы вызываете BeaconManager:startMonitoringBeaconsInRegion, и все будет работать более плавно.

  2. Планировщик Android Job работает следующим образом: если вы установите период c задание с наиболее частым (~ 15 минут) интервалом, запускается не сразу. Поэтому, когда библиотека запускается в фоновом режиме, она ничего не делает, пока не начнется следующий интервал. Этот интервал может наступить совсем скоро или может достигать 25 минут. Можно было бы оптимизировать этот процесс, запланировав немедленное сканирование, если мы определим, что последнее из них не запускалось в течение длительного времени с помощью некоторой постоянной временной метки. Это разумная оптимизация, которую можно добавить в библиотеку, подготовив запрос на перенос, если вы хотите поработать над ним.

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

  4. Если вы не хотите навредить точности При оценке расстояния вы хотите, чтобы мощность передатчика ваших аппаратных маяков была как можно выше, и вы хотите, чтобы скорость рекламы была как можно выше. Меньшее количество пакетов в секунду дает меньше статистических выборок для работы и увеличивает шум при оценке расстояния. Более низкая выходная мощность увеличивает минимальный уровень шума относительно сигнала и дает очень небольшой запас в обнаруживаемой разнице между RSSI на расстоянии 1 метра и 10 метров. Я понимаю, что высокая мощность передатчика и высокие расценки на рекламу существенно влияют на срок службы маяков с батарейным питанием. Тем не менее, ИМО, если вы уменьшите мощность передатчика достаточно, чтобы сэкономить батарею или снизить частоту рекламы ниже, скажем, 5 Гц, вам, вероятно, следует отказаться от оценок расстояния.

  5. Как лучше всего использование библиотеки действительно зависит от вашего варианта использования. Если сканирование каждые ~ 15 минут достаточно для вашего случая использования, вам, вероятно, следует придерживаться фонового режима. Я не уверен, сработает ли описанный вами взлом, чтобы библиотека работала так, как вы хотите, без изменений. Вы можете попробовать, но это может занять больше времени, чем просто внесение изменений, как описано в пункте (2) выше.

  6. Теоретически Android имеет аппаратную поддержку API для быстрых обратных вызовов, связанных с исчезновением маяков. К сожалению, функция Doze Android делает это ненадежным и бесполезным для большинства случаев использования. Смотрите мое резюме работы над этим здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...